<?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>178404</bug_id>
          
          <creation_ts>2017-10-17 13:00:15 -0700</creation_ts>
          <short_desc>Web Inspector: [PARITY] Styles Redesign: Add color gradient, bezier curve, and spring inline widgets</short_desc>
          <delta_ts>2017-10-25 14:09:50 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=178636</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>178354</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikita Vasilyev">nvasilyev</reporter>
          <assigned_to name="Nikita Vasilyev">nvasilyev</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>mattbaker</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1361371</commentid>
    <comment_count>0</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-10-17 13:00:15 -0700</bug_when>
    <thetext>Add the following inline widgets:
- Gradients, e.g. `background-image: linear-gradient(yellow, orange)`;
- Bezier curves, e.g. `transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55)`;
- Spring functions;
- Variables, e.g. `var(--toolbar-color)`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361374</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-17 13:00:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/35035992&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361488</commentid>
    <comment_count>2</comment_count>
      <attachid>324071</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-10-17 17:01:12 -0700</bug_when>
    <thetext>Created attachment 324071
Patch

Static page for manual testing: http://nv.github.io/webkit-inspector-bugs/styles-redesign/tests/color.html

This patch adds gradients, bezier curves, and spring functions. CSS variables are a little different, I&apos;ll add them in a follow up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361826</commentid>
    <comment_count>3</comment_count>
      <attachid>324071</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-10-18 12:02:38 -0700</bug_when>
    <thetext>Comment on attachment 324071
Patch

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

r- for the issue with nested var()

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:338
&gt; +                let text = rawTokens.map((token) =&gt; token.value).join(&quot;&quot;);
&gt; +
&gt; +                let gradient = WI.Gradient.fromString(text);

Style: unnecessary newline.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:403
&gt; +            } else if (!isNaN(cubicBezierStartIndex) &amp;&amp; token.value === &quot;)&quot;) {

Simply checking for &quot;)&quot; is not valid, as it is possible to nest `var()` inside `cubic-bezier(...)`.  You will need to keep track of the matching &quot;(&quot; and &quot;)&quot; and only perform this logic once they are both even.  Gradient already has this logic.

This will also be the case for Color and Spring.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:422
&gt; +    _addSpringTokens(tokens)

The logic in `_addSpringTokens` is almost identical to `_addCubicBezierTokens`, with the exception of:

    (429): token.value === &quot;spring&quot;
    (437): let spring = WI.Spring.fromString(text);
    (439): newTokens.push(this._createInlineSwatch(WI.InlineSwatch.Type.Spring, text, spring));

Considering that CubicBezier and Spring are both used for the same CSS properties, can you combine them and avoid this logic?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361828</commentid>
    <comment_count>4</comment_count>
      <attachid>324071</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-10-18 12:14:40 -0700</bug_when>
    <thetext>Comment on attachment 324071
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:295
&gt; +            let value = event.data &amp;&amp; event.data.value &amp;&amp; event.data.value.toString();

InlineSwatch always includes event data when the value changes, so that check can be removed. I think it&apos;s also safe to assume that event.data implies event.data.toString(). With the exception of Color.prototype.toString (which can throw), all the InlineSwatch value objects (Color, CubicBezier, Spring, and the Gradient subclasses) will always return a string.

It&apos;s not as concise, but you could rewrite this as:

if (!event.data.value)
    return;

try {
    let value = event.data.value.toString();
    console.assert(value, &quot;Expected value string.&quot;, event.data.value);
    if (!value)
        return;
    this._handleValueChange();
} catch (e) {
    console.error(&quot;Could not convert value to string.&quot;, e);
}

It&apos;s weird that we throw an exception here, but since we do it should be handled.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:321
&gt; +                // Gradient start

Drop this comment. The variable name `gradientStartIndex` makes it clear.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:327
&gt; +                // Gradient end

This one too. Also, this isn&apos;t necessarily the end of the gradient, as the comment on line 331 indicates.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:331
&gt; +                    // Color function inside of a gradient.

Since this could also be a var(), I&apos;d make this comment more general: &quot;// Matched a CSS function inside of the gradient.&quot;

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:401
&gt; +                // Cubic-bezier start

Remove comment.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:404
&gt; +                // Cubic-bezier end

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:430
&gt; +                // Spring start

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:433
&gt; +                // Spring end

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362236</commentid>
    <comment_count>5</comment_count>
      <attachid>324071</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-10-19 11:56:59 -0700</bug_when>
    <thetext>Comment on attachment 324071
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:403
&gt;&gt; +            } else if (!isNaN(cubicBezierStartIndex) &amp;&amp; token.value === &quot;)&quot;) {
&gt; 
&gt; Simply checking for &quot;)&quot; is not valid, as it is possible to nest `var()` inside `cubic-bezier(...)`.  You will need to keep track of the matching &quot;(&quot; and &quot;)&quot; and only perform this logic once they are both even.  Gradient already has this logic.
&gt; 
&gt; This will also be the case for Color and Spring.

Good catch!

The old styles sidebar didn&apos;t detect `linear-gradient(#fff, var(--myBlue))` as a gradient, but I intent to fix it in the new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362384</commentid>
    <comment_count>6</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-10-19 15:07:58 -0700</bug_when>
    <thetext>(In reply to Nikita Vasilyev from comment #5)
&gt; Comment on attachment 324071 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=324071&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:403
&gt; &gt;&gt; +            } else if (!isNaN(cubicBezierStartIndex) &amp;&amp; token.value === &quot;)&quot;) {
&gt; &gt; 
&gt; &gt; Simply checking for &quot;)&quot; is not valid, as it is possible to nest `var()` inside `cubic-bezier(...)`.  You will need to keep track of the matching &quot;(&quot; and &quot;)&quot; and only perform this logic once they are both even.  Gradient already has this logic.
&gt; &gt; 
&gt; &gt; This will also be the case for Color and Spring.
&gt; 
&gt; Good catch!
&gt; 
&gt; The old styles sidebar didn&apos;t detect `linear-gradient(#fff, var(--myBlue))`
&gt; as a gradient, but I intent to fix it in the new one.

This case is tricky:

    linear-gradient(#fff, var(--myBlue))

This is one case when a text range of one widget, var(--myBlue), is inside of a text range of another widget, linear-gradient(...). At very least, when after modifying #fff using the gradient widget, the variable widget for var(--myBlue) should still work.

When modifying var(--myBlue) using the gradient widget, should it replace var(--myBlue) with a new value, or should it update the variable?

I&apos;m not going to address these issue here, but it is something to think in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362465</commentid>
    <comment_count>7</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-10-19 17:28:19 -0700</bug_when>
    <thetext>(In reply to Nikita Vasilyev from comment #5)
&gt; Comment on attachment 324071 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=324071&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:403
&gt; &gt;&gt; +            } else if (!isNaN(cubicBezierStartIndex) &amp;&amp; token.value === &quot;)&quot;) {
&gt; &gt; 
&gt; &gt; Simply checking for &quot;)&quot; is not valid, as it is possible to nest `var()` inside `cubic-bezier(...)`.  You will need to keep track of the matching &quot;(&quot; and &quot;)&quot; and only perform this logic once they are both even.  Gradient already has this logic.
&gt; &gt; 
&gt; &gt; This will also be the case for Color and Spring.
&gt; 
&gt; Good catch!
&gt; 
&gt; The old styles sidebar didn&apos;t detect `linear-gradient(#fff, var(--myBlue))`
&gt; as a gradient, but I intent to fix it in the new one.

None of this function can parse CSS variables, calc() or min/max() correctly:

    WI.CubicBezier.fromString
    WI.Spring.fromString
    WI.Color.fromString
    WI.Gradient.fromString

E.g.:
    
    -&gt; WI.Gradient.fromString(&quot;linear-gradient(#fff2db, var(--myVar))&quot;)
    &lt;- null

This seems non-trivial to fix and it isn&apos;t required for parity with the old styles sidebar,
so I&apos;m not going to do it in this task.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362811</commentid>
    <comment_count>8</comment_count>
      <attachid>324430</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-10-20 12:43:09 -0700</bug_when>
    <thetext>Created attachment 324430
Patch

(In reply to Matt Baker from comment #4)
&gt; Comment on attachment 324071 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=324071&amp;action=review
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:295
&gt; &gt; +            let value = event.data &amp;&amp; event.data.value &amp;&amp; event.data.value.toString();
&gt; 
&gt; InlineSwatch always includes event data when the value changes, so that
&gt; check can be removed. I think it&apos;s also safe to assume that event.data
&gt; implies event.data.toString(). With the exception of
&gt; Color.prototype.toString (which can throw), all the InlineSwatch value
&gt; objects (Color, CubicBezier, Spring, and the Gradient subclasses) will
&gt; always return a string.
&gt; 
&gt; It&apos;s not as concise, but you could rewrite this as:
&gt; 
&gt; if (!event.data.value)
&gt;     return;
&gt; 
&gt; try {
&gt;     let value = event.data.value.toString();
&gt;     console.assert(value, &quot;Expected value string.&quot;, event.data.value);
&gt;     if (!value)
&gt;         return;
&gt;     this._handleValueChange();
&gt; } catch (e) {
&gt;     console.error(&quot;Could not convert value to string.&quot;, e);
&gt; }

The old styled sidebar didn&apos;t have try/catch, see CSSStyleDeclarationTextEditor.propotype._inlineSwatchValueChanged:

    let value = event.data &amp;&amp; event.data.value &amp;&amp; event.data.value.toString();

We rarely use try/catch and it seems unnecessary here. I think it&apos;s better to replace it with console.error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362984</commentid>
    <comment_count>9</comment_count>
      <attachid>324071</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-10-20 21:45:57 -0700</bug_when>
    <thetext>Comment on attachment 324071
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:403
&gt;&gt;&gt;&gt;&gt; +            } else if (!isNaN(cubicBezierStartIndex) &amp;&amp; token.value === &quot;)&quot;) {
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Simply checking for &quot;)&quot; is not valid, as it is possible to nest `var()` inside `cubic-bezier(...)`.  You will need to keep track of the matching &quot;(&quot; and &quot;)&quot; and only perform this logic once they are both even.  Gradient already has this logic.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This will also be the case for Color and Spring.
&gt;&gt;&gt; 
&gt;&gt;&gt; Good catch!
&gt;&gt;&gt; 
&gt;&gt;&gt; The old styles sidebar didn&apos;t detect `linear-gradient(#fff, var(--myBlue))` as a gradient, but I intent to fix it in the new one.
&gt;&gt; 
&gt;&gt; This case is tricky:
&gt;&gt; 
&gt;&gt;     linear-gradient(#fff, var(--myBlue))
&gt;&gt; 
&gt;&gt; This is one case when a text range of one widget, var(--myBlue), is inside of a text range of another widget, linear-gradient(...). At very least, when after modifying #fff using the gradient widget, the variable widget for var(--myBlue) should still work.
&gt;&gt; 
&gt;&gt; When modifying var(--myBlue) using the gradient widget, should it replace var(--myBlue) with a new value, or should it update the variable?
&gt;&gt; 
&gt;&gt; I&apos;m not going to address these issue here, but it is something to think in the future.
&gt; 
&gt; None of this function can parse CSS variables, calc() or min/max() correctly:
&gt; 
&gt;     WI.CubicBezier.fromString
&gt;     WI.Spring.fromString
&gt;     WI.Color.fromString
&gt;     WI.Gradient.fromString
&gt; 
&gt; E.g.:
&gt;     
&gt;     -&gt; WI.Gradient.fromString(&quot;linear-gradient(#fff2db, var(--myVar))&quot;)
&gt;     &lt;- null
&gt; 
&gt; This seems non-trivial to fix and it isn&apos;t required for parity with the old styles sidebar,
&gt; so I&apos;m not going to do it in this task.

That is a good point.  Deriving and/or modifying the value of a variable would not be simple, especially if the variable has multiple overrides.  I would think that in this case the `var(...)` would just get replaced with the resulting value, instead of changing the variable (the user could do that in the variable&apos;s declaration), but we could always make it work the other way.  calc/min/max would probably be easier, but not as much if they involved multiple units.  I think that we can just add a FIXME and follow up later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363085</commentid>
    <comment_count>10</comment_count>
      <attachid>324506</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-10-21 15:42:06 -0700</bug_when>
    <thetext>Created attachment 324506
Patch

Added FIXME with Bug 178636 - Web Inspector: Styles: Make inline widgets work with CSS functions (var(), calc(), etc.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1363918</commentid>
    <comment_count>11</comment_count>
      <attachid>324506</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-10-24 14:43:24 -0700</bug_when>
    <thetext>Comment on attachment 324506
Patch

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

r=me

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:339
&gt; +                    newTokens.push(...tokens);

It seems incorrect to push all of the tokens to newTokens, as we are already using some of them in the next else-if (343).  Should we instead be using `rawTokens`?

    newTokens.push(...rawTokens);

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:358
&gt;                  newTokens.push(...tokens);

Ditto (339).

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:425
&gt; +                    newTokens.push(...tokens);

Ditto (339).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364438</commentid>
    <comment_count>12</comment_count>
      <attachid>324883</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-10-25 13:37:04 -0700</bug_when>
    <thetext>Created attachment 324883
Patch

(In reply to Devin Rousso from comment #11)
&gt; Comment on attachment 324506 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=324506&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:339
&gt; &gt; +                    newTokens.push(...tokens);
&gt; 
&gt; It seems incorrect to push all of the tokens to newTokens, as we are already
&gt; using some of them in the next else-if (343).  Should we instead be using
&gt; `rawTokens`?

Whoops, good catch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364455</commentid>
    <comment_count>13</comment_count>
      <attachid>324883</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-25 14:09:48 -0700</bug_when>
    <thetext>Comment on attachment 324883
Patch

Clearing flags on attachment: 324883

Committed r223978: &lt;https://trac.webkit.org/changeset/223978&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364456</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-25 14:09:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324071</attachid>
            <date>2017-10-17 17:01:12 -0700</date>
            <delta_ts>2017-10-20 12:43:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>9449</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGQ2OTYzNzEuLmRjZWI1NTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI2IEBACiAyMDE3LTEwLTE3ICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgogCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtQQVJJ
VFldIFN0eWxlcyBSZWRlc2lnbjogQWRkIGNvbG9yIGdyYWRpZW50LCBiZXppZXIgY3VydmUsIGFu
ZCBzcHJpbmcgaW5saW5lIHdpZGdldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3ODQwNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzUwMzU5OTI+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGlu
bGluZSB3aWRnZXRzIGZvciB0aGUgZm9sbG93aW5nIENTUyB2YWx1ZXM6CisgICAgICAgIC0gR3Jh
ZGllbnRzLCBlLmcuIGBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoeWVsbG93LCBv
cmFuZ2UpYAorICAgICAgICAtIEJlemllciBjdXJ2ZXMsIGUuZy4gYHRyYW5zaXRpb24tdGltaW5n
LWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC42OCwgLTAuNTUsIDAuMjY1LCAxLjU1KWAKKyAgICAg
ICAgLSBTcHJpbmcgZnVuY3Rpb25zLCBlLmcuIGB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjog
c3ByaW5nKDEsIDIsIDIsIDQpYAorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9TcHJl
YWRzaGVldFN0eWxlUHJvcGVydHkuanM6CisgICAgICAgIChXSS5TcHJlYWRzaGVldFN0eWxlUHJv
cGVydHkucHJvdG90eXBlLl9yZW5kZXJWYWx1ZSk6CisgICAgICAgIChXSS5TcHJlYWRzaGVldFN0
eWxlUHJvcGVydHkucHJvdG90eXBlLl9jcmVhdGVJbmxpbmVTd2F0Y2gpOgorICAgICAgICAoV0ku
U3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LnByb3RvdHlwZS5fYWRkR3JhZGllbnRUb2tlbnMpOgor
ICAgICAgICAoV0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LnByb3RvdHlwZS5fYWRkQ29sb3JU
b2tlbnMpOgorICAgICAgICAoV0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LnByb3RvdHlwZS5f
YWRkQ3ViaWNCZXppZXJUb2tlbnMpOgorICAgICAgICAoV0kuU3ByZWFkc2hlZXRTdHlsZVByb3Bl
cnR5LnByb3RvdHlwZS5fYWRkU3ByaW5nVG9rZW5zKToKKworMjAxNy0xMC0xNyAgTmlraXRhIFZh
c2lseWV2ICA8bnZhc2lseWV2QGFwcGxlLmNvbT4KKwogICAgICAgICBXZWIgSW5zcGVjdG9yOiBb
UEFSSVRZXSBTdHlsZXMgUmVkZXNpZ246IEFkZCBjb2xvciBwaWNrZXIgaW5saW5lIHdpZGdldAog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MzU0CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Nw
cmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcwppbmRleCA2MWEwMmI3Li41
ZjdhNGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LmpzCkBAIC0y
NDcsOSArMjQ3LDEwIEBAIFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eSA9IGNsYXNzIFNwcmVh
ZHNoZWV0U3R5bGVQcm9wZXJ0eSBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICBsZXQgdG9rZW5z
ID0gV0kudG9rZW5pemVDU1NWYWx1ZSh2YWx1ZSk7CiAKICAgICAgICAgaWYgKHRoaXMuX3Byb3Bl
cnR5LmVuYWJsZWQpIHsKLSAgICAgICAgICAgIC8vIERvbid0IHNob3cgY29sb3Igd2lkZ2V0cyBm
b3IgQ1NTIGdyYWRpZW50cywgc2hvdyBkZWRpY2F0ZWQgZ3JhZGllbnQgd2lkZ2V0cyBpbnN0ZWFk
LgotICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNzg0MDQ+IFdl
YiBJbnNwZWN0b3I6IFtQQVJJVFldIFN0eWxlcyBSZWRlc2lnbjogQWRkIGJlemllciBjdXJ2ZSwg
Y29sb3IgZ3JhZGllbnQsIGFuZCBDU1MgdmFyaWFibGUgaW5saW5lIHdpZGdldHMKKyAgICAgICAg
ICAgIHRva2VucyA9IHRoaXMuX2FkZEdyYWRpZW50VG9rZW5zKHRva2Vucyk7CiAgICAgICAgICAg
ICB0b2tlbnMgPSB0aGlzLl9hZGRDb2xvclRva2Vucyh0b2tlbnMpOworICAgICAgICAgICAgdG9r
ZW5zID0gdGhpcy5fYWRkQ3ViaWNCZXppZXJUb2tlbnModG9rZW5zKTsKKyAgICAgICAgICAgIHRv
a2VucyA9IHRoaXMuX2FkZFNwcmluZ1Rva2Vucyh0b2tlbnMpOwogICAgICAgICB9CiAKICAgICAg
ICAgdG9rZW5zID0gdG9rZW5zLm1hcCgodG9rZW4pID0+IHsKQEAgLTI4MSw0NiArMjgyLDgxIEBA
IFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eSA9IGNsYXNzIFNwcmVhZHNoZWV0U3R5bGVQcm9w
ZXJ0eSBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICB0aGlzLl92YWx1ZUVsZW1lbnQuYXBwZW5k
KC4uLnRva2Vucyk7CiAgICAgfQogCi0gICAgX2FkZENvbG9yVG9rZW5zKHRva2VucykKKyAgICBf
Y3JlYXRlSW5saW5lU3dhdGNoKHR5cGUsIHRleHQsIHZhbHVlT2JqZWN0KQogICAgIHsKLSAgICAg
ICAgbGV0IG5ld1Rva2VucyA9IFtdOworICAgICAgICBsZXQgdG9rZW5FbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICBsZXQgaW5uZXJFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICBpbm5lckVsZW1lbnQudGV4dENv
bnRlbnQgPSB0ZXh0OwogCi0gICAgICAgIGxldCBjcmVhdGVDb2xvclRva2VuRWxlbWVudCA9IChj
b2xvclN0cmluZywgY29sb3IpID0+IHsKLSAgICAgICAgICAgIGxldCBjb2xvclRva2VuRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgIGNvbG9yVG9r
ZW5FbGVtZW50LmNsYXNzTmFtZSA9ICJ0b2tlbi1jb2xvciI7CisgICAgICAgIGxldCByZWFkT25s
eSA9ICF0aGlzLl9wcm9wZXJ0eS5lZGl0YWJsZTsKKyAgICAgICAgbGV0IHN3YXRjaCA9IG5ldyBX
SS5JbmxpbmVTd2F0Y2godHlwZSwgdmFsdWVPYmplY3QsIHJlYWRPbmx5KTsKIAotICAgICAgICAg
ICAgbGV0IGlubmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAg
ICAgICAgICAgIGlubmVyRWxlbWVudC5jbGFzc05hbWUgPSAidG9rZW4tY29sb3ItdmFsdWUiOwot
ICAgICAgICAgICAgaW5uZXJFbGVtZW50LnRleHRDb250ZW50ID0gY29sb3JTdHJpbmc7CisgICAg
ICAgIHN3YXRjaC5hZGRFdmVudExpc3RlbmVyKFdJLklubGluZVN3YXRjaC5FdmVudC5WYWx1ZUNo
YW5nZWQsIChldmVudCkgPT4geworICAgICAgICAgICAgbGV0IHZhbHVlID0gZXZlbnQuZGF0YSAm
JiBldmVudC5kYXRhLnZhbHVlICYmIGV2ZW50LmRhdGEudmFsdWUudG9TdHJpbmcoKTsKKyAgICAg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAg
ICBpZiAoY29sb3IpIHsKLSAgICAgICAgICAgICAgICBsZXQgcmVhZE9ubHkgPSAhdGhpcy5fcHJv
cGVydHkuZWRpdGFibGU7Ci0gICAgICAgICAgICAgICAgbGV0IHN3YXRjaCA9IG5ldyBXSS5Jbmxp
bmVTd2F0Y2goV0kuSW5saW5lU3dhdGNoLlR5cGUuQ29sb3IsIGNvbG9yLCByZWFkT25seSk7Cisg
ICAgICAgICAgICBpbm5lckVsZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZTsKKyAgICAgICAgICAg
IHRoaXMuX2hhbmRsZVZhbHVlQ2hhbmdlKCk7CisgICAgICAgIH0sIHRoaXMpOwogCi0gICAgICAg
ICAgICAgICAgc3dhdGNoLmFkZEV2ZW50TGlzdGVuZXIoV0kuSW5saW5lU3dhdGNoLkV2ZW50LlZh
bHVlQ2hhbmdlZCwgKGV2ZW50KSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9
IGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS52YWx1ZSAmJiBldmVudC5kYXRhLnZhbHVlLnRvU3Ry
aW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHZhbHVlLCAiQ29sb3Ig
dmFsdWUgaXMgZW1wdHkuIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRva2VuRWxlbWVudC5hcHBlbmQo
c3dhdGNoLmVsZW1lbnQsIGlubmVyRWxlbWVudCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaW5u
ZXJFbGVtZW50LnRleHRDb250ZW50ID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
X2hhbmRsZVZhbHVlQ2hhbmdlKCk7Ci0gICAgICAgICAgICAgICAgfSwgdGhpcyk7CisgICAgICAg
IC8vIFByZXZlbnQgdGhlIHZhbHVlIGZyb20gZWRpdGluZyB3aGVuIGNsaWNraW5nIG9uIHRoZSBz
d2F0Y2guCisgICAgICAgIHN3YXRjaC5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93
biIsIChldmVudCkgPT4geyBldmVudC5zdG9wKCk7IH0pOwogCi0gICAgICAgICAgICAgICAgY29s
b3JUb2tlbkVsZW1lbnQuYXBwZW5kKHN3YXRjaC5lbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIHRv
a2VuRWxlbWVudDsKKyAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHRoZSB2YWx1
ZSBmcm9tIGVkaXRpbmcgd2hlbiBjbGlja2luZyBvbiB0aGUgc3dhdGNoLgotICAgICAgICAgICAg
ICAgIHN3YXRjaC5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIChldmVudCkg
PT4geyBldmVudC5zdG9wKCk7IH0pOwotICAgICAgICAgICAgfQorICAgIF9hZGRHcmFkaWVudFRv
a2Vucyh0b2tlbnMpCisgICAgeworICAgICAgICBsZXQgZ3JhZGllbnRSZWdleCA9IC9eKHJlcGVh
dGluZy0pPyhsaW5lYXJ8cmFkaWFsKS1ncmFkaWVudCQvaTsKKyAgICAgICAgbGV0IG5ld1Rva2Vu
cyA9IFtdOworICAgICAgICBsZXQgZ3JhZGllbnRTdGFydEluZGV4ID0gTmFOOworICAgICAgICBs
ZXQgb3BlblBhcmVudGhlc2lzID0gMDsKIAotICAgICAgICAgICAgY29sb3JUb2tlbkVsZW1lbnQu
YXBwZW5kKGlubmVyRWxlbWVudCk7Ci0gICAgICAgICAgICByZXR1cm4gY29sb3JUb2tlbkVsZW1l
bnQ7Ci0gICAgICAgIH07CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICBsZXQgdG9rZW4gPSB0b2tlbnNbaV07CisgICAgICAgICAg
ICBpZiAodG9rZW4udHlwZSAmJiB0b2tlbi50eXBlLmluY2x1ZGVzKCJhdG9tIikgJiYgZ3JhZGll
bnRSZWdleC50ZXN0KHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIC8vIEdyYWRpZW50
IHN0YXJ0CisgICAgICAgICAgICAgICAgZ3JhZGllbnRTdGFydEluZGV4ID0gaTsKKyAgICAgICAg
ICAgICAgICBvcGVuUGFyZW50aGVzaXMgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tl
bi52YWx1ZSA9PT0gIigiICYmICFpc05hTihncmFkaWVudFN0YXJ0SW5kZXgpKQorICAgICAgICAg
ICAgICAgIG9wZW5QYXJlbnRoZXNpcysrOworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udmFs
dWUgPT09ICIpIiAmJiAhaXNOYU4oZ3JhZGllbnRTdGFydEluZGV4KSkgeworICAgICAgICAgICAg
ICAgIC8vIEdyYWRpZW50IGVuZAorCisgICAgICAgICAgICAgICAgb3BlblBhcmVudGhlc2lzLS07
CisgICAgICAgICAgICAgICAgaWYgKG9wZW5QYXJlbnRoZXNpcyA+IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gQ29sb3IgZnVuY3Rpb24gaW5zaWRlIG9mIGEgZ3JhZGllbnQuCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGxldCByYXdUb2tlbnMgPSB0b2tlbnMuc2xpY2UoZ3JhZGllbnRTdGFydEluZGV4LCBpICsg
MSk7CisgICAgICAgICAgICAgICAgbGV0IHRleHQgPSByYXdUb2tlbnMubWFwKCh0b2tlbikgPT4g
dG9rZW4udmFsdWUpLmpvaW4oIiIpOworCisgICAgICAgICAgICAgICAgbGV0IGdyYWRpZW50ID0g
V0kuR3JhZGllbnQuZnJvbVN0cmluZyh0ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoZ3JhZGll
bnQpCisgICAgICAgICAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKHRoaXMuX2NyZWF0ZUlubGlu
ZVN3YXRjaChXSS5JbmxpbmVTd2F0Y2guVHlwZS5HcmFkaWVudCwgdGV4dCwgZ3JhZGllbnQpKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNo
KC4uLnRva2Vucyk7CisKKyAgICAgICAgICAgICAgICBncmFkaWVudFN0YXJ0SW5kZXggPSBOYU47
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKGdyYWRpZW50U3RhcnRJbmRleCkpCisgICAg
ICAgICAgICAgICAgbmV3VG9rZW5zLnB1c2godG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIG5ld1Rva2VuczsKKyAgICB9CisKKyAgICBfYWRkQ29sb3JUb2tlbnModG9rZW5zKQor
ICAgIHsKKyAgICAgICAgbGV0IG5ld1Rva2VucyA9IFtdOwogCiAgICAgICAgIGxldCBwdXNoUG9z
c2libGVDb2xvclRva2VuID0gKHRleHQsIC4uLnRva2VucykgPT4gewogICAgICAgICAgICAgbGV0
IGNvbG9yID0gV0kuQ29sb3IuZnJvbVN0cmluZyh0ZXh0KTsKICAgICAgICAgICAgIGlmIChjb2xv
cikKLSAgICAgICAgICAgICAgICBuZXdUb2tlbnMucHVzaChjcmVhdGVDb2xvclRva2VuRWxlbWVu
dCh0ZXh0LCBjb2xvcikpOworICAgICAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKHRoaXMuX2Ny
ZWF0ZUlubGluZVN3YXRjaChXSS5JbmxpbmVTd2F0Y2guVHlwZS5Db2xvciwgdGV4dCwgY29sb3Ip
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBuZXdUb2tlbnMucHVzaCguLi50
b2tlbnMpOwogICAgICAgICB9OwpAQCAtMzU0LDYgKzM5MCw2NCBAQCBXSS5TcHJlYWRzaGVldFN0
eWxlUHJvcGVydHkgPSBjbGFzcyBTcHJlYWRzaGVldFN0eWxlUHJvcGVydHkgZXh0ZW5kcyBXSS5P
YmplY3QKICAgICAgICAgcmV0dXJuIG5ld1Rva2VuczsKICAgICB9CiAKKyAgICBfYWRkQ3ViaWNC
ZXppZXJUb2tlbnModG9rZW5zKQorICAgIHsKKyAgICAgICAgbGV0IG5ld1Rva2VucyA9IFtdOwor
ICAgICAgICBsZXQgY3ViaWNCZXppZXJTdGFydEluZGV4ID0gTmFOOworCisgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBsZXQgdG9r
ZW4gPSB0b2tlbnNbaV07CisgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICJjdWJpYy1i
ZXppZXIiICYmIHRva2VuLnR5cGUgJiYgdG9rZW4udHlwZS5pbmNsdWRlcygiYXRvbSIpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gQ3ViaWMtYmV6aWVyIHN0YXJ0CisgICAgICAgICAgICAgICAgY3Vi
aWNCZXppZXJTdGFydEluZGV4ID0gaTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKGN1
YmljQmV6aWVyU3RhcnRJbmRleCkgJiYgdG9rZW4udmFsdWUgPT09ICIpIikgeworICAgICAgICAg
ICAgICAgIC8vIEN1YmljLWJlemllciBlbmQKKyAgICAgICAgICAgICAgICBsZXQgcmF3VG9rZW5z
ID0gdG9rZW5zLnNsaWNlKGN1YmljQmV6aWVyU3RhcnRJbmRleCwgaSArIDEpOworICAgICAgICAg
ICAgICAgIGxldCB0ZXh0ID0gcmF3VG9rZW5zLm1hcCgodG9rZW4pID0+IHRva2VuLnZhbHVlKS5q
b2luKCIiKTsKKworICAgICAgICAgICAgICAgIGxldCBjdWJpY0JlemllciA9IFdJLkN1YmljQmV6
aWVyLmZyb21TdHJpbmcodGV4dCk7CisgICAgICAgICAgICAgICAgaWYgKGN1YmljQmV6aWVyKQor
ICAgICAgICAgICAgICAgICAgICBuZXdUb2tlbnMucHVzaCh0aGlzLl9jcmVhdGVJbmxpbmVTd2F0
Y2goV0kuSW5saW5lU3dhdGNoLlR5cGUuQmV6aWVyLCB0ZXh0LCBjdWJpY0JlemllcikpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbmV3VG9rZW5zLnB1c2goLi4u
dG9rZW5zKTsKKworICAgICAgICAgICAgICAgIGN1YmljQmV6aWVyU3RhcnRJbmRleCA9IE5hTjsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOYU4oY3ViaWNCZXppZXJTdGFydEluZGV4KSkKKyAg
ICAgICAgICAgICAgICBuZXdUb2tlbnMucHVzaCh0b2tlbik7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbmV3VG9rZW5zOworICAgIH0KKworICAgIF9hZGRTcHJpbmdUb2tlbnModG9rZW5z
KQorICAgIHsKKyAgICAgICAgbGV0IG5ld1Rva2VucyA9IFtdOworICAgICAgICBsZXQgc3ByaW5n
U3RhcnRJbmRleCA9IE5hTjsKKworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgbGV0IHRva2VuID0gdG9rZW5zW2ldOworICAgICAg
ICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAic3ByaW5nIiAmJiB0b2tlbi50eXBlICYmIHRva2Vu
LnR5cGUuaW5jbHVkZXMoImF0b20iKSkgeworICAgICAgICAgICAgICAgIC8vIFNwcmluZyBzdGFy
dAorICAgICAgICAgICAgICAgIHNwcmluZ1N0YXJ0SW5kZXggPSBpOworICAgICAgICAgICAgfSBl
bHNlIGlmICghaXNOYU4oc3ByaW5nU3RhcnRJbmRleCkgJiYgdG9rZW4udmFsdWUgPT09ICIpIikg
eworICAgICAgICAgICAgICAgIC8vIFNwcmluZyBlbmQKKyAgICAgICAgICAgICAgICBsZXQgcmF3
VG9rZW5zID0gdG9rZW5zLnNsaWNlKHNwcmluZ1N0YXJ0SW5kZXgsIGkgKyAxKTsKKyAgICAgICAg
ICAgICAgICBsZXQgdGV4dCA9IHJhd1Rva2Vucy5tYXAoKHRva2VuKSA9PiB0b2tlbi52YWx1ZSku
am9pbigiIik7CisKKyAgICAgICAgICAgICAgICBsZXQgc3ByaW5nID0gV0kuU3ByaW5nLmZyb21T
dHJpbmcodGV4dCk7CisgICAgICAgICAgICAgICAgaWYgKHNwcmluZykKKyAgICAgICAgICAgICAg
ICAgICAgbmV3VG9rZW5zLnB1c2godGhpcy5fY3JlYXRlSW5saW5lU3dhdGNoKFdJLklubGluZVN3
YXRjaC5UeXBlLlNwcmluZywgdGV4dCwgc3ByaW5nKSk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBuZXdUb2tlbnMucHVzaCguLi50b2tlbnMpOworCisgICAgICAg
ICAgICAgICAgc3ByaW5nU3RhcnRJbmRleCA9IE5hTjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXNOYU4oc3ByaW5nU3RhcnRJbmRleCkpCisgICAgICAgICAgICAgICAgbmV3VG9rZW5zLnB1c2go
dG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld1Rva2VuczsKKyAgICB9CisK
ICAgICBfaGFuZGxlTmFtZUNoYW5nZSgpCiAgICAgewogICAgICAgICB0aGlzLl9wcm9wZXJ0eS5u
YW1lID0gdGhpcy5fbmFtZUVsZW1lbnQudGV4dENvbnRlbnQudHJpbSgpOwo=
</data>
<flag name="review"
          id="343721"
          type_id="1"
          status="-"
          setter="hi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324430</attachid>
            <date>2017-10-20 12:43:09 -0700</date>
            <delta_ts>2017-10-21 15:42:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>9443</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGQ2OTYzNzEuLjM2Yjk0NGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE3LTEwLTIwICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtQQVJJ
VFldIFN0eWxlcyBSZWRlc2lnbjogQWRkIGNvbG9yIGdyYWRpZW50LCBiZXppZXIgY3VydmUsIGFu
ZCBzcHJpbmcgaW5saW5lIHdpZGdldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3ODQwNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzUwMzU5OTI+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGlu
bGluZSB3aWRnZXRzIGZvciB0aGUgZm9sbG93aW5nIENTUyB2YWx1ZXM6CisgICAgICAgIC0gR3Jh
ZGllbnRzLCBlLmcuIGBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoeWVsbG93LCBv
cmFuZ2UpYAorICAgICAgICAtIEJlemllciBjdXJ2ZXMsIGUuZy4gYHRyYW5zaXRpb24tdGltaW5n
LWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC42OCwgLTAuNTUsIDAuMjY1LCAxLjU1KWAKKyAgICAg
ICAgLSBTcHJpbmcgZnVuY3Rpb25zLCBlLmcuIGB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjog
c3ByaW5nKDEsIDIsIDIsIDQpYAorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvQ29s
b3IuanM6CisgICAgICAgIChXSS5Db2xvci5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICBE
b24ndCB0aHJvdy4gVGhlIGFyZSBuZXZlciB0cnkvY2F0Y2ggYmxvY2tzIG9uIHRoZSBjYWxsc2l0
ZXMuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9w
ZXJ0eS5qczoKKyAgICAgICAgKFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90b3R5cGUu
X3JlbmRlclZhbHVlKToKKyAgICAgICAgKFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90
b3R5cGUuX2NyZWF0ZUlubGluZVN3YXRjaCk6CisgICAgICAgIChXSS5TcHJlYWRzaGVldFN0eWxl
UHJvcGVydHkucHJvdG90eXBlLl9hZGRHcmFkaWVudFRva2Vucyk6CisgICAgICAgIChXSS5TcHJl
YWRzaGVldFN0eWxlUHJvcGVydHkucHJvdG90eXBlLl9hZGRDb2xvclRva2Vucyk6CisgICAgICAg
IChXSS5TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkucHJvdG90eXBlLl9hZGRUaW1pbmdGdW5jdGlv
blRva2Vucyk6CisKIDIwMTctMTAtMTcgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW1BBUklUWV0gU3R5bGVzIFJlZGVzaWdu
OiBBZGQgY29sb3IgcGlja2VyIGlubGluZSB3aWRnZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db2xvci5qcyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db2xvci5qcwppbmRleCA4YWQ1Nzk0Li42ODg5
NDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvQ29sb3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0NvbG9yLmpzCkBAIC0zNzksNyArMzc5LDggQEAgV0kuQ29sb3IgPSBjbGFzcyBDb2xvcgog
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvS2V5d29yZFN0cmluZygpOwogICAgICAgICB9CiAK
LSAgICAgICAgdGhyb3cgImludmFsaWQgY29sb3IgZm9ybWF0IjsKKyAgICAgICAgY29uc29sZS5l
cnJvcigiSW52YWxpZCBjb2xvciBmb3JtYXQ6ICIgKyBmb3JtYXQpOworICAgICAgICByZXR1cm4g
IiI7CiAgICAgfQogCiAgICAgaXNLZXl3b3JkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5
bGVQcm9wZXJ0eS5qcwppbmRleCA2MWEwMmI3Li5iNTlhODQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVy
dHkuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3By
ZWFkc2hlZXRTdHlsZVByb3BlcnR5LmpzCkBAIC0yNDcsOSArMjQ3LDEwIEBAIFdJLlNwcmVhZHNo
ZWV0U3R5bGVQcm9wZXJ0eSA9IGNsYXNzIFNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eSBleHRlbmRz
IFdJLk9iamVjdAogICAgICAgICBsZXQgdG9rZW5zID0gV0kudG9rZW5pemVDU1NWYWx1ZSh2YWx1
ZSk7CiAKICAgICAgICAgaWYgKHRoaXMuX3Byb3BlcnR5LmVuYWJsZWQpIHsKLSAgICAgICAgICAg
IC8vIERvbid0IHNob3cgY29sb3Igd2lkZ2V0cyBmb3IgQ1NTIGdyYWRpZW50cywgc2hvdyBkZWRp
Y2F0ZWQgZ3JhZGllbnQgd2lkZ2V0cyBpbnN0ZWFkLgotICAgICAgICAgICAgLy8gRklYTUU6IDxo
dHRwczovL3dlYmtpdC5vcmcvYi8xNzg0MDQ+IFdlYiBJbnNwZWN0b3I6IFtQQVJJVFldIFN0eWxl
cyBSZWRlc2lnbjogQWRkIGJlemllciBjdXJ2ZSwgY29sb3IgZ3JhZGllbnQsIGFuZCBDU1MgdmFy
aWFibGUgaW5saW5lIHdpZGdldHMKKyAgICAgICAgICAgIHRva2VucyA9IHRoaXMuX2FkZEdyYWRp
ZW50VG9rZW5zKHRva2Vucyk7CiAgICAgICAgICAgICB0b2tlbnMgPSB0aGlzLl9hZGRDb2xvclRv
a2Vucyh0b2tlbnMpOworICAgICAgICAgICAgdG9rZW5zID0gdGhpcy5fYWRkVGltaW5nRnVuY3Rp
b25Ub2tlbnModG9rZW5zLCAiY3ViaWMtYmV6aWVyIik7CisgICAgICAgICAgICB0b2tlbnMgPSB0
aGlzLl9hZGRUaW1pbmdGdW5jdGlvblRva2Vucyh0b2tlbnMsICJzcHJpbmciKTsKICAgICAgICAg
fQogCiAgICAgICAgIHRva2VucyA9IHRva2Vucy5tYXAoKHRva2VuKSA9PiB7CkBAIC0yODEsNDYg
KzI4Miw3NyBAQCBXSS5TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkgPSBjbGFzcyBTcHJlYWRzaGVl
dFN0eWxlUHJvcGVydHkgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgdGhpcy5fdmFsdWVFbGVt
ZW50LmFwcGVuZCguLi50b2tlbnMpOwogICAgIH0KIAotICAgIF9hZGRDb2xvclRva2Vucyh0b2tl
bnMpCisgICAgX2NyZWF0ZUlubGluZVN3YXRjaCh0eXBlLCB0ZXh0LCB2YWx1ZU9iamVjdCkKICAg
ICB7Ci0gICAgICAgIGxldCBuZXdUb2tlbnMgPSBbXTsKKyAgICAgICAgbGV0IHRva2VuRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgbGV0IGlubmVyRWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgaW5uZXJFbGVt
ZW50LnRleHRDb250ZW50ID0gdGV4dDsKIAotICAgICAgICBsZXQgY3JlYXRlQ29sb3JUb2tlbkVs
ZW1lbnQgPSAoY29sb3JTdHJpbmcsIGNvbG9yKSA9PiB7Ci0gICAgICAgICAgICBsZXQgY29sb3JU
b2tlbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAg
ICBjb2xvclRva2VuRWxlbWVudC5jbGFzc05hbWUgPSAidG9rZW4tY29sb3IiOworICAgICAgICBs
ZXQgcmVhZE9ubHkgPSAhdGhpcy5fcHJvcGVydHkuZWRpdGFibGU7CisgICAgICAgIGxldCBzd2F0
Y2ggPSBuZXcgV0kuSW5saW5lU3dhdGNoKHR5cGUsIHZhbHVlT2JqZWN0LCByZWFkT25seSk7CiAK
LSAgICAgICAgICAgIGxldCBpbm5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7Ci0gICAgICAgICAgICBpbm5lckVsZW1lbnQuY2xhc3NOYW1lID0gInRva2VuLWNvbG9y
LXZhbHVlIjsKLSAgICAgICAgICAgIGlubmVyRWxlbWVudC50ZXh0Q29udGVudCA9IGNvbG9yU3Ry
aW5nOworICAgICAgICBzd2F0Y2guYWRkRXZlbnRMaXN0ZW5lcihXSS5JbmxpbmVTd2F0Y2guRXZl
bnQuVmFsdWVDaGFuZ2VkLCAoZXZlbnQpID0+IHsKKyAgICAgICAgICAgIGxldCB2YWx1ZSA9IGV2
ZW50LmRhdGEudmFsdWUgJiYgZXZlbnQuZGF0YS52YWx1ZS50b1N0cmluZygpOworICAgICAgICAg
ICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGlm
IChjb2xvcikgewotICAgICAgICAgICAgICAgIGxldCByZWFkT25seSA9ICF0aGlzLl9wcm9wZXJ0
eS5lZGl0YWJsZTsKLSAgICAgICAgICAgICAgICBsZXQgc3dhdGNoID0gbmV3IFdJLklubGluZVN3
YXRjaChXSS5JbmxpbmVTd2F0Y2guVHlwZS5Db2xvciwgY29sb3IsIHJlYWRPbmx5KTsKKyAgICAg
ICAgICAgIGlubmVyRWxlbWVudC50ZXh0Q29udGVudCA9IHZhbHVlOworICAgICAgICAgICAgdGhp
cy5faGFuZGxlVmFsdWVDaGFuZ2UoKTsKKyAgICAgICAgfSwgdGhpcyk7CiAKLSAgICAgICAgICAg
ICAgICBzd2F0Y2guYWRkRXZlbnRMaXN0ZW5lcihXSS5JbmxpbmVTd2F0Y2guRXZlbnQuVmFsdWVD
aGFuZ2VkLCAoZXZlbnQpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZXZl
bnQuZGF0YSAmJiBldmVudC5kYXRhLnZhbHVlICYmIGV2ZW50LmRhdGEudmFsdWUudG9TdHJpbmco
KTsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQodmFsdWUsICJDb2xvciB2YWx1
ZSBpcyBlbXB0eS4iKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdG9rZW5FbGVtZW50LmFwcGVuZChzd2F0
Y2guZWxlbWVudCwgaW5uZXJFbGVtZW50KTsKIAotICAgICAgICAgICAgICAgICAgICBpbm5lckVs
ZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFu
ZGxlVmFsdWVDaGFuZ2UoKTsKLSAgICAgICAgICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgLy8g
UHJldmVudCB0aGUgdmFsdWUgZnJvbSBlZGl0aW5nIHdoZW4gY2xpY2tpbmcgb24gdGhlIHN3YXRj
aC4KKyAgICAgICAgc3dhdGNoLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwg
KGV2ZW50KSA9PiB7IGV2ZW50LnN0b3AoKTsgfSk7CiAKLSAgICAgICAgICAgICAgICBjb2xvclRv
a2VuRWxlbWVudC5hcHBlbmQoc3dhdGNoLmVsZW1lbnQpOworICAgICAgICByZXR1cm4gdG9rZW5F
bGVtZW50OworICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgdGhlIHZhbHVlIGZy
b20gZWRpdGluZyB3aGVuIGNsaWNraW5nIG9uIHRoZSBzd2F0Y2guCi0gICAgICAgICAgICAgICAg
c3dhdGNoLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgKGV2ZW50KSA9PiB7
IGV2ZW50LnN0b3AoKTsgfSk7Ci0gICAgICAgICAgICB9CisgICAgX2FkZEdyYWRpZW50VG9rZW5z
KHRva2VucykKKyAgICB7CisgICAgICAgIGxldCBncmFkaWVudFJlZ2V4ID0gL14ocmVwZWF0aW5n
LSk/KGxpbmVhcnxyYWRpYWwpLWdyYWRpZW50JC9pOworICAgICAgICBsZXQgbmV3VG9rZW5zID0g
W107CisgICAgICAgIGxldCBncmFkaWVudFN0YXJ0SW5kZXggPSBOYU47CisgICAgICAgIGxldCBv
cGVuUGFyZW50aGVzaXMgPSAwOwogCi0gICAgICAgICAgICBjb2xvclRva2VuRWxlbWVudC5hcHBl
bmQoaW5uZXJFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBjb2xvclRva2VuRWxlbWVudDsK
LSAgICAgICAgfTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIGxldCB0b2tlbiA9IHRva2Vuc1tpXTsKKyAgICAgICAgICAgIGlm
ICh0b2tlbi50eXBlICYmIHRva2VuLnR5cGUuaW5jbHVkZXMoImF0b20iKSAmJiBncmFkaWVudFJl
Z2V4LnRlc3QodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZ3JhZGllbnRTdGFydElu
ZGV4ID0gaTsKKyAgICAgICAgICAgICAgICBvcGVuUGFyZW50aGVzaXMgPSAwOworICAgICAgICAg
ICAgfSBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gIigiICYmICFpc05hTihncmFkaWVudFN0YXJ0
SW5kZXgpKQorICAgICAgICAgICAgICAgIG9wZW5QYXJlbnRoZXNpcysrOworICAgICAgICAgICAg
ZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICIpIiAmJiAhaXNOYU4oZ3JhZGllbnRTdGFydEluZGV4
KSkgeworICAgICAgICAgICAgICAgIG9wZW5QYXJlbnRoZXNpcy0tOworICAgICAgICAgICAgICAg
IGlmIChvcGVuUGFyZW50aGVzaXMgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE1hdGNo
ZWQgYSBDU1MgZnVuY3Rpb24gaW5zaWRlIG9mIHRoZSBncmFkaWVudC4KKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbGV0
IHJhd1Rva2VucyA9IHRva2Vucy5zbGljZShncmFkaWVudFN0YXJ0SW5kZXgsIGkgKyAxKTsKKyAg
ICAgICAgICAgICAgICBsZXQgdGV4dCA9IHJhd1Rva2Vucy5tYXAoKHRva2VuKSA9PiB0b2tlbi52
YWx1ZSkuam9pbigiIik7CisgICAgICAgICAgICAgICAgbGV0IGdyYWRpZW50ID0gV0kuR3JhZGll
bnQuZnJvbVN0cmluZyh0ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoZ3JhZGllbnQpCisgICAg
ICAgICAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKHRoaXMuX2NyZWF0ZUlubGluZVN3YXRjaChX
SS5JbmxpbmVTd2F0Y2guVHlwZS5HcmFkaWVudCwgdGV4dCwgZ3JhZGllbnQpKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKC4uLnRva2Vu
cyk7CisKKyAgICAgICAgICAgICAgICBncmFkaWVudFN0YXJ0SW5kZXggPSBOYU47CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzTmFOKGdyYWRpZW50U3RhcnRJbmRleCkpCisgICAgICAgICAgICAg
ICAgbmV3VG9rZW5zLnB1c2godG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5l
d1Rva2VuczsKKyAgICB9CisKKyAgICBfYWRkQ29sb3JUb2tlbnModG9rZW5zKQorICAgIHsKKyAg
ICAgICAgbGV0IG5ld1Rva2VucyA9IFtdOwogCiAgICAgICAgIGxldCBwdXNoUG9zc2libGVDb2xv
clRva2VuID0gKHRleHQsIC4uLnRva2VucykgPT4gewogICAgICAgICAgICAgbGV0IGNvbG9yID0g
V0kuQ29sb3IuZnJvbVN0cmluZyh0ZXh0KTsKICAgICAgICAgICAgIGlmIChjb2xvcikKLSAgICAg
ICAgICAgICAgICBuZXdUb2tlbnMucHVzaChjcmVhdGVDb2xvclRva2VuRWxlbWVudCh0ZXh0LCBj
b2xvcikpOworICAgICAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKHRoaXMuX2NyZWF0ZUlubGlu
ZVN3YXRjaChXSS5JbmxpbmVTd2F0Y2guVHlwZS5Db2xvciwgdGV4dCwgY29sb3IpKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBuZXdUb2tlbnMucHVzaCguLi50b2tlbnMpOwog
ICAgICAgICB9OwpAQCAtMzU0LDYgKzM4Niw1MSBAQCBXSS5TcHJlYWRzaGVldFN0eWxlUHJvcGVy
dHkgPSBjbGFzcyBTcHJlYWRzaGVldFN0eWxlUHJvcGVydHkgZXh0ZW5kcyBXSS5PYmplY3QKICAg
ICAgICAgcmV0dXJuIG5ld1Rva2VuczsKICAgICB9CiAKKyAgICBfYWRkVGltaW5nRnVuY3Rpb25U
b2tlbnModG9rZW5zLCB0b2tlblR5cGUpCisgICAgeworICAgICAgICBsZXQgbmV3VG9rZW5zID0g
W107CisgICAgICAgIGxldCBzdGFydEluZGV4ID0gTmFOOworICAgICAgICBsZXQgb3BlblBhcmVu
dGhlc2lzID0gMDsKKworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgbGV0IHRva2VuID0gdG9rZW5zW2ldOworICAgICAgICAgICAg
aWYgKHRva2VuLnZhbHVlID09PSB0b2tlblR5cGUgJiYgdG9rZW4udHlwZSAmJiB0b2tlbi50eXBl
LmluY2x1ZGVzKCJhdG9tIikpIHsKKyAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gaTsKKyAg
ICAgICAgICAgICAgICBvcGVuUGFyZW50aGVzaXMgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlm
ICh0b2tlbi52YWx1ZSA9PT0gIigiICYmICFpc05hTihzdGFydEluZGV4KSkKKyAgICAgICAgICAg
ICAgICBvcGVuUGFyZW50aGVzaXMrKzsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnZhbHVl
ID09PSAiKSIgJiYgIWlzTmFOKHN0YXJ0SW5kZXgpKSB7CisKKyAgICAgICAgICAgICAgICBvcGVu
UGFyZW50aGVzaXMtLTsKKyAgICAgICAgICAgICAgICBpZiAob3BlblBhcmVudGhlc2lzID4gMCkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBsZXQgcmF3
VG9rZW5zID0gdG9rZW5zLnNsaWNlKHN0YXJ0SW5kZXgsIGkgKyAxKTsKKyAgICAgICAgICAgICAg
ICBsZXQgdGV4dCA9IHJhd1Rva2Vucy5tYXAoKHRva2VuKSA9PiB0b2tlbi52YWx1ZSkuam9pbigi
Iik7CisKKyAgICAgICAgICAgICAgICBsZXQgdmFsdWVPYmplY3Q7CisgICAgICAgICAgICAgICAg
bGV0IGlubGluZVN3YXRjaFR5cGU7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuVHlwZSA9PT0g
ImN1YmljLWJlemllciIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVPYmplY3QgPSBXSS5D
dWJpY0Jlemllci5mcm9tU3RyaW5nKHRleHQpOworICAgICAgICAgICAgICAgICAgICBpbmxpbmVT
d2F0Y2hUeXBlID0gV0kuSW5saW5lU3dhdGNoLlR5cGUuQmV6aWVyOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAodG9rZW5UeXBlID09PSAic3ByaW5nIikgeworICAgICAgICAgICAgICAgICAg
ICB2YWx1ZU9iamVjdCA9IFdJLlNwcmluZy5mcm9tU3RyaW5nKHRleHQpOworICAgICAgICAgICAg
ICAgICAgICBpbmxpbmVTd2F0Y2hUeXBlID0gV0kuSW5saW5lU3dhdGNoLlR5cGUuU3ByaW5nOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh2YWx1ZU9iamVjdCkKKyAg
ICAgICAgICAgICAgICAgICAgbmV3VG9rZW5zLnB1c2godGhpcy5fY3JlYXRlSW5saW5lU3dhdGNo
KGlubGluZVN3YXRjaFR5cGUsIHRleHQsIHZhbHVlT2JqZWN0KSk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBuZXdUb2tlbnMucHVzaCguLi50b2tlbnMpOworCisg
ICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IE5hTjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXNOYU4oc3RhcnRJbmRleCkpCisgICAgICAgICAgICAgICAgbmV3VG9rZW5zLnB1c2godG9rZW4p
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld1Rva2VuczsKKyAgICB9CisKICAgICBf
aGFuZGxlTmFtZUNoYW5nZSgpCiAgICAgewogICAgICAgICB0aGlzLl9wcm9wZXJ0eS5uYW1lID0g
dGhpcy5fbmFtZUVsZW1lbnQudGV4dENvbnRlbnQudHJpbSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324506</attachid>
            <date>2017-10-21 15:42:06 -0700</date>
            <delta_ts>2017-10-25 13:37:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>9585</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGQ2OTYzNzEuLjM2Yjk0NGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE3LTEwLTIwICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtQQVJJ
VFldIFN0eWxlcyBSZWRlc2lnbjogQWRkIGNvbG9yIGdyYWRpZW50LCBiZXppZXIgY3VydmUsIGFu
ZCBzcHJpbmcgaW5saW5lIHdpZGdldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3ODQwNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzUwMzU5OTI+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGlu
bGluZSB3aWRnZXRzIGZvciB0aGUgZm9sbG93aW5nIENTUyB2YWx1ZXM6CisgICAgICAgIC0gR3Jh
ZGllbnRzLCBlLmcuIGBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoeWVsbG93LCBv
cmFuZ2UpYAorICAgICAgICAtIEJlemllciBjdXJ2ZXMsIGUuZy4gYHRyYW5zaXRpb24tdGltaW5n
LWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC42OCwgLTAuNTUsIDAuMjY1LCAxLjU1KWAKKyAgICAg
ICAgLSBTcHJpbmcgZnVuY3Rpb25zLCBlLmcuIGB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjog
c3ByaW5nKDEsIDIsIDIsIDQpYAorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvQ29s
b3IuanM6CisgICAgICAgIChXSS5Db2xvci5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICBE
b24ndCB0aHJvdy4gVGhlIGFyZSBuZXZlciB0cnkvY2F0Y2ggYmxvY2tzIG9uIHRoZSBjYWxsc2l0
ZXMuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9w
ZXJ0eS5qczoKKyAgICAgICAgKFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90b3R5cGUu
X3JlbmRlclZhbHVlKToKKyAgICAgICAgKFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90
b3R5cGUuX2NyZWF0ZUlubGluZVN3YXRjaCk6CisgICAgICAgIChXSS5TcHJlYWRzaGVldFN0eWxl
UHJvcGVydHkucHJvdG90eXBlLl9hZGRHcmFkaWVudFRva2Vucyk6CisgICAgICAgIChXSS5TcHJl
YWRzaGVldFN0eWxlUHJvcGVydHkucHJvdG90eXBlLl9hZGRDb2xvclRva2Vucyk6CisgICAgICAg
IChXSS5TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkucHJvdG90eXBlLl9hZGRUaW1pbmdGdW5jdGlv
blRva2Vucyk6CisKIDIwMTctMTAtMTcgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW1BBUklUWV0gU3R5bGVzIFJlZGVzaWdu
OiBBZGQgY29sb3IgcGlja2VyIGlubGluZSB3aWRnZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db2xvci5qcyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db2xvci5qcwppbmRleCA4YWQ1Nzk0Li42ODg5
NDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvQ29sb3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0NvbG9yLmpzCkBAIC0zNzksNyArMzc5LDggQEAgV0kuQ29sb3IgPSBjbGFzcyBDb2xvcgog
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvS2V5d29yZFN0cmluZygpOwogICAgICAgICB9CiAK
LSAgICAgICAgdGhyb3cgImludmFsaWQgY29sb3IgZm9ybWF0IjsKKyAgICAgICAgY29uc29sZS5l
cnJvcigiSW52YWxpZCBjb2xvciBmb3JtYXQ6ICIgKyBmb3JtYXQpOworICAgICAgICByZXR1cm4g
IiI7CiAgICAgfQogCiAgICAgaXNLZXl3b3JkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5
bGVQcm9wZXJ0eS5qcwppbmRleCA2MWEwMmI3Li41MjdjNjlmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVy
dHkuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3By
ZWFkc2hlZXRTdHlsZVByb3BlcnR5LmpzCkBAIC0yNDcsOSArMjQ3LDExIEBAIFdJLlNwcmVhZHNo
ZWV0U3R5bGVQcm9wZXJ0eSA9IGNsYXNzIFNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eSBleHRlbmRz
IFdJLk9iamVjdAogICAgICAgICBsZXQgdG9rZW5zID0gV0kudG9rZW5pemVDU1NWYWx1ZSh2YWx1
ZSk7CiAKICAgICAgICAgaWYgKHRoaXMuX3Byb3BlcnR5LmVuYWJsZWQpIHsKLSAgICAgICAgICAg
IC8vIERvbid0IHNob3cgY29sb3Igd2lkZ2V0cyBmb3IgQ1NTIGdyYWRpZW50cywgc2hvdyBkZWRp
Y2F0ZWQgZ3JhZGllbnQgd2lkZ2V0cyBpbnN0ZWFkLgotICAgICAgICAgICAgLy8gRklYTUU6IDxo
dHRwczovL3dlYmtpdC5vcmcvYi8xNzg0MDQ+IFdlYiBJbnNwZWN0b3I6IFtQQVJJVFldIFN0eWxl
cyBSZWRlc2lnbjogQWRkIGJlemllciBjdXJ2ZSwgY29sb3IgZ3JhZGllbnQsIGFuZCBDU1MgdmFy
aWFibGUgaW5saW5lIHdpZGdldHMKKyAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTc4NjM2PiBXZWIgSW5zcGVjdG9yOiBTdHlsZXM6IE1ha2UgaW5saW5lIHdpZGdl
dHMgd29yayB3aXRoIENTUyBmdW5jdGlvbnMgKHZhcigpLCBjYWxjKCksIGV0Yy4pCisgICAgICAg
ICAgICB0b2tlbnMgPSB0aGlzLl9hZGRHcmFkaWVudFRva2Vucyh0b2tlbnMpOwogICAgICAgICAg
ICAgdG9rZW5zID0gdGhpcy5fYWRkQ29sb3JUb2tlbnModG9rZW5zKTsKKyAgICAgICAgICAgIHRv
a2VucyA9IHRoaXMuX2FkZFRpbWluZ0Z1bmN0aW9uVG9rZW5zKHRva2VucywgImN1YmljLWJlemll
ciIpOworICAgICAgICAgICAgdG9rZW5zID0gdGhpcy5fYWRkVGltaW5nRnVuY3Rpb25Ub2tlbnMo
dG9rZW5zLCAic3ByaW5nIik7CiAgICAgICAgIH0KIAogICAgICAgICB0b2tlbnMgPSB0b2tlbnMu
bWFwKCh0b2tlbikgPT4gewpAQCAtMjgxLDQ2ICsyODMsNzcgQEAgV0kuU3ByZWFkc2hlZXRTdHls
ZVByb3BlcnR5ID0gY2xhc3MgU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5IGV4dGVuZHMgV0kuT2Jq
ZWN0CiAgICAgICAgIHRoaXMuX3ZhbHVlRWxlbWVudC5hcHBlbmQoLi4udG9rZW5zKTsKICAgICB9
CiAKLSAgICBfYWRkQ29sb3JUb2tlbnModG9rZW5zKQorICAgIF9jcmVhdGVJbmxpbmVTd2F0Y2go
dHlwZSwgdGV4dCwgdmFsdWVPYmplY3QpCiAgICAgewotICAgICAgICBsZXQgbmV3VG9rZW5zID0g
W107CisgICAgICAgIGxldCB0b2tlbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7CisgICAgICAgIGxldCBpbm5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJzcGFuIik7CisgICAgICAgIGlubmVyRWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7CiAKLSAg
ICAgICAgbGV0IGNyZWF0ZUNvbG9yVG9rZW5FbGVtZW50ID0gKGNvbG9yU3RyaW5nLCBjb2xvcikg
PT4gewotICAgICAgICAgICAgbGV0IGNvbG9yVG9rZW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgY29sb3JUb2tlbkVsZW1lbnQuY2xhc3NOYW1l
ID0gInRva2VuLWNvbG9yIjsKKyAgICAgICAgbGV0IHJlYWRPbmx5ID0gIXRoaXMuX3Byb3BlcnR5
LmVkaXRhYmxlOworICAgICAgICBsZXQgc3dhdGNoID0gbmV3IFdJLklubGluZVN3YXRjaCh0eXBl
LCB2YWx1ZU9iamVjdCwgcmVhZE9ubHkpOwogCi0gICAgICAgICAgICBsZXQgaW5uZXJFbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgaW5uZXJFbGVt
ZW50LmNsYXNzTmFtZSA9ICJ0b2tlbi1jb2xvci12YWx1ZSI7Ci0gICAgICAgICAgICBpbm5lckVs
ZW1lbnQudGV4dENvbnRlbnQgPSBjb2xvclN0cmluZzsKKyAgICAgICAgc3dhdGNoLmFkZEV2ZW50
TGlzdGVuZXIoV0kuSW5saW5lU3dhdGNoLkV2ZW50LlZhbHVlQ2hhbmdlZCwgKGV2ZW50KSA9PiB7
CisgICAgICAgICAgICBsZXQgdmFsdWUgPSBldmVudC5kYXRhLnZhbHVlICYmIGV2ZW50LmRhdGEu
dmFsdWUudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgICAgICBpZiAoY29sb3IpIHsKLSAgICAgICAgICAgICAgICBs
ZXQgcmVhZE9ubHkgPSAhdGhpcy5fcHJvcGVydHkuZWRpdGFibGU7Ci0gICAgICAgICAgICAgICAg
bGV0IHN3YXRjaCA9IG5ldyBXSS5JbmxpbmVTd2F0Y2goV0kuSW5saW5lU3dhdGNoLlR5cGUuQ29s
b3IsIGNvbG9yLCByZWFkT25seSk7CisgICAgICAgICAgICBpbm5lckVsZW1lbnQudGV4dENvbnRl
bnQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX2hhbmRsZVZhbHVlQ2hhbmdlKCk7CisgICAg
ICAgIH0sIHRoaXMpOwogCi0gICAgICAgICAgICAgICAgc3dhdGNoLmFkZEV2ZW50TGlzdGVuZXIo
V0kuSW5saW5lU3dhdGNoLkV2ZW50LlZhbHVlQ2hhbmdlZCwgKGV2ZW50KSA9PiB7Ci0gICAgICAg
ICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS52YWx1ZSAm
JiBldmVudC5kYXRhLnZhbHVlLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHZhbHVlLCAiQ29sb3IgdmFsdWUgaXMgZW1wdHkuIik7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHRva2VuRWxlbWVudC5hcHBlbmQoc3dhdGNoLmVsZW1lbnQsIGlubmVyRWxlbWVudCk7CiAK
LSAgICAgICAgICAgICAgICAgICAgaW5uZXJFbGVtZW50LnRleHRDb250ZW50ID0gdmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZVZhbHVlQ2hhbmdlKCk7Ci0gICAgICAgICAg
ICAgICAgfSwgdGhpcyk7CisgICAgICAgIC8vIFByZXZlbnQgdGhlIHZhbHVlIGZyb20gZWRpdGlu
ZyB3aGVuIGNsaWNraW5nIG9uIHRoZSBzd2F0Y2guCisgICAgICAgIHN3YXRjaC5lbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIChldmVudCkgPT4geyBldmVudC5zdG9wKCk7IH0p
OwogCi0gICAgICAgICAgICAgICAgY29sb3JUb2tlbkVsZW1lbnQuYXBwZW5kKHN3YXRjaC5lbGVt
ZW50KTsKKyAgICAgICAgcmV0dXJuIHRva2VuRWxlbWVudDsKKyAgICB9CiAKLSAgICAgICAgICAg
ICAgICAvLyBQcmV2ZW50IHRoZSB2YWx1ZSBmcm9tIGVkaXRpbmcgd2hlbiBjbGlja2luZyBvbiB0
aGUgc3dhdGNoLgotICAgICAgICAgICAgICAgIHN3YXRjaC5lbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoIm1vdXNlZG93biIsIChldmVudCkgPT4geyBldmVudC5zdG9wKCk7IH0pOwotICAgICAgICAg
ICAgfQorICAgIF9hZGRHcmFkaWVudFRva2Vucyh0b2tlbnMpCisgICAgeworICAgICAgICBsZXQg
Z3JhZGllbnRSZWdleCA9IC9eKHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsKS1ncmFkaWVudCQv
aTsKKyAgICAgICAgbGV0IG5ld1Rva2VucyA9IFtdOworICAgICAgICBsZXQgZ3JhZGllbnRTdGFy
dEluZGV4ID0gTmFOOworICAgICAgICBsZXQgb3BlblBhcmVudGhlc2lzID0gMDsKIAotICAgICAg
ICAgICAgY29sb3JUb2tlbkVsZW1lbnQuYXBwZW5kKGlubmVyRWxlbWVudCk7Ci0gICAgICAgICAg
ICByZXR1cm4gY29sb3JUb2tlbkVsZW1lbnQ7Ci0gICAgICAgIH07CisgICAgICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBsZXQgdG9rZW4g
PSB0b2tlbnNbaV07CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAmJiB0b2tlbi50eXBlLmlu
Y2x1ZGVzKCJhdG9tIikgJiYgZ3JhZGllbnRSZWdleC50ZXN0KHRva2VuLnZhbHVlKSkgeworICAg
ICAgICAgICAgICAgIGdyYWRpZW50U3RhcnRJbmRleCA9IGk7CisgICAgICAgICAgICAgICAgb3Bl
blBhcmVudGhlc2lzID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udmFsdWUgPT09
ICIoIiAmJiAhaXNOYU4oZ3JhZGllbnRTdGFydEluZGV4KSkKKyAgICAgICAgICAgICAgICBvcGVu
UGFyZW50aGVzaXMrKzsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSAiKSIg
JiYgIWlzTmFOKGdyYWRpZW50U3RhcnRJbmRleCkpIHsKKyAgICAgICAgICAgICAgICBvcGVuUGFy
ZW50aGVzaXMtLTsKKyAgICAgICAgICAgICAgICBpZiAob3BlblBhcmVudGhlc2lzID4gMCkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBNYXRjaGVkIGEgQ1NTIGZ1bmN0aW9uIGluc2lkZSBvZiB0
aGUgZ3JhZGllbnQuCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGxldCByYXdUb2tlbnMgPSB0b2tlbnMuc2xpY2UoZ3Jh
ZGllbnRTdGFydEluZGV4LCBpICsgMSk7CisgICAgICAgICAgICAgICAgbGV0IHRleHQgPSByYXdU
b2tlbnMubWFwKCh0b2tlbikgPT4gdG9rZW4udmFsdWUpLmpvaW4oIiIpOworICAgICAgICAgICAg
ICAgIGxldCBncmFkaWVudCA9IFdJLkdyYWRpZW50LmZyb21TdHJpbmcodGV4dCk7CisgICAgICAg
ICAgICAgICAgaWYgKGdyYWRpZW50KQorICAgICAgICAgICAgICAgICAgICBuZXdUb2tlbnMucHVz
aCh0aGlzLl9jcmVhdGVJbmxpbmVTd2F0Y2goV0kuSW5saW5lU3dhdGNoLlR5cGUuR3JhZGllbnQs
IHRleHQsIGdyYWRpZW50KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBuZXdUb2tlbnMucHVzaCguLi50b2tlbnMpOworCisgICAgICAgICAgICAgICAgZ3JhZGll
bnRTdGFydEluZGV4ID0gTmFOOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc05hTihncmFkaWVu
dFN0YXJ0SW5kZXgpKQorICAgICAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKHRva2VuKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXdUb2tlbnM7CisgICAgfQorCisgICAgX2FkZENv
bG9yVG9rZW5zKHRva2VucykKKyAgICB7CisgICAgICAgIGxldCBuZXdUb2tlbnMgPSBbXTsKIAog
ICAgICAgICBsZXQgcHVzaFBvc3NpYmxlQ29sb3JUb2tlbiA9ICh0ZXh0LCAuLi50b2tlbnMpID0+
IHsKICAgICAgICAgICAgIGxldCBjb2xvciA9IFdJLkNvbG9yLmZyb21TdHJpbmcodGV4dCk7CiAg
ICAgICAgICAgICBpZiAoY29sb3IpCi0gICAgICAgICAgICAgICAgbmV3VG9rZW5zLnB1c2goY3Jl
YXRlQ29sb3JUb2tlbkVsZW1lbnQodGV4dCwgY29sb3IpKTsKKyAgICAgICAgICAgICAgICBuZXdU
b2tlbnMucHVzaCh0aGlzLl9jcmVhdGVJbmxpbmVTd2F0Y2goV0kuSW5saW5lU3dhdGNoLlR5cGUu
Q29sb3IsIHRleHQsIGNvbG9yKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
bmV3VG9rZW5zLnB1c2goLi4udG9rZW5zKTsKICAgICAgICAgfTsKQEAgLTM1NCw2ICszODcsNTEg
QEAgV0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0gY2xhc3MgU3ByZWFkc2hlZXRTdHlsZVBy
b3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHJldHVybiBuZXdUb2tlbnM7CiAgICAg
fQogCisgICAgX2FkZFRpbWluZ0Z1bmN0aW9uVG9rZW5zKHRva2VucywgdG9rZW5UeXBlKQorICAg
IHsKKyAgICAgICAgbGV0IG5ld1Rva2VucyA9IFtdOworICAgICAgICBsZXQgc3RhcnRJbmRleCA9
IE5hTjsKKyAgICAgICAgbGV0IG9wZW5QYXJlbnRoZXNpcyA9IDA7CisKKyAgICAgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGxldCB0b2tl
biA9IHRva2Vuc1tpXTsKKyAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gdG9rZW5UeXBl
ICYmIHRva2VuLnR5cGUgJiYgdG9rZW4udHlwZS5pbmNsdWRlcygiYXRvbSIpKSB7CisgICAgICAg
ICAgICAgICAgc3RhcnRJbmRleCA9IGk7CisgICAgICAgICAgICAgICAgb3BlblBhcmVudGhlc2lz
ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICIoIiAmJiAhaXNO
YU4oc3RhcnRJbmRleCkpCisgICAgICAgICAgICAgICAgb3BlblBhcmVudGhlc2lzKys7CisgICAg
ICAgICAgICBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gIikiICYmICFpc05hTihzdGFydEluZGV4
KSkgeworCisgICAgICAgICAgICAgICAgb3BlblBhcmVudGhlc2lzLS07CisgICAgICAgICAgICAg
ICAgaWYgKG9wZW5QYXJlbnRoZXNpcyA+IDApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICAgICAgbGV0IHJhd1Rva2VucyA9IHRva2Vucy5zbGljZShzdGFydElu
ZGV4LCBpICsgMSk7CisgICAgICAgICAgICAgICAgbGV0IHRleHQgPSByYXdUb2tlbnMubWFwKCh0
b2tlbikgPT4gdG9rZW4udmFsdWUpLmpvaW4oIiIpOworCisgICAgICAgICAgICAgICAgbGV0IHZh
bHVlT2JqZWN0OworICAgICAgICAgICAgICAgIGxldCBpbmxpbmVTd2F0Y2hUeXBlOworICAgICAg
ICAgICAgICAgIGlmICh0b2tlblR5cGUgPT09ICJjdWJpYy1iZXppZXIiKSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlT2JqZWN0ID0gV0kuQ3ViaWNCZXppZXIuZnJvbVN0cmluZyh0ZXh0KTsK
KyAgICAgICAgICAgICAgICAgICAgaW5saW5lU3dhdGNoVHlwZSA9IFdJLklubGluZVN3YXRjaC5U
eXBlLkJlemllcjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuVHlwZSA9PT0gInNw
cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVPYmplY3QgPSBXSS5TcHJpbmcuZnJv
bVN0cmluZyh0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lU3dhdGNoVHlwZSA9IFdJ
LklubGluZVN3YXRjaC5UeXBlLlNwcmluZzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAodmFsdWVPYmplY3QpCisgICAgICAgICAgICAgICAgICAgIG5ld1Rva2Vucy5w
dXNoKHRoaXMuX2NyZWF0ZUlubGluZVN3YXRjaChpbmxpbmVTd2F0Y2hUeXBlLCB0ZXh0LCB2YWx1
ZU9iamVjdCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbmV3
VG9rZW5zLnB1c2goLi4udG9rZW5zKTsKKworICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBO
YU47CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHN0YXJ0SW5kZXgpKQorICAgICAgICAg
ICAgICAgIG5ld1Rva2Vucy5wdXNoKHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBuZXdUb2tlbnM7CisgICAgfQorCiAgICAgX2hhbmRsZU5hbWVDaGFuZ2UoKQogICAgIHsKICAg
ICAgICAgdGhpcy5fcHJvcGVydHkubmFtZSA9IHRoaXMuX25hbWVFbGVtZW50LnRleHRDb250ZW50
LnRyaW0oKTsK
</data>
<flag name="review"
          id="344131"
          type_id="1"
          status="+"
          setter="hi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324883</attachid>
            <date>2017-10-25 13:37:04 -0700</date>
            <delta_ts>2017-10-25 14:09:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>9828</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDQ1NmY3YjMuLjI5NmMzMzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5IEBACiAyMDE3LTEwLTI1ICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgogCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtQQVJJ
VFldIFN0eWxlcyBSZWRlc2lnbjogQWRkIGNvbG9yIGdyYWRpZW50LCBiZXppZXIgY3VydmUsIGFu
ZCBzcHJpbmcgaW5saW5lIHdpZGdldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3ODQwNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzUwMzU5OTI+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91c3NvLgorCisgICAgICAgIEFkZCBpbmxp
bmUgd2lkZ2V0cyBmb3IgdGhlIGZvbGxvd2luZyBDU1MgdmFsdWVzOgorICAgICAgICAtIEdyYWRp
ZW50cywgZS5nLiBgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHllbGxvdywgb3Jh
bmdlKWAKKyAgICAgICAgLSBCZXppZXIgY3VydmVzLCBlLmcuIGB0cmFuc2l0aW9uLXRpbWluZy1m
dW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNjgsIC0wLjU1LCAwLjI2NSwgMS41NSlgCisgICAgICAg
IC0gU3ByaW5nIGZ1bmN0aW9ucywgZS5nLiBgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IHNw
cmluZygxLCAyLCAyLCA0KWAKKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0NvbG9y
LmpzOgorICAgICAgICAoV0kuQ29sb3IucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgRG9u
J3QgdGhyb3cuIFRoZSBhcmUgbmV2ZXIgdHJ5L2NhdGNoIGJsb2NrcyBvbiB0aGUgY2FsbHNpdGVz
LgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVy
dHkuanM6CisgICAgICAgIChXSS5TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkucHJvdG90eXBlLl9y
ZW5kZXJWYWx1ZSk6CisgICAgICAgIChXSS5TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkucHJvdG90
eXBlLl9jcmVhdGVJbmxpbmVTd2F0Y2gpOgorICAgICAgICAoV0kuU3ByZWFkc2hlZXRTdHlsZVBy
b3BlcnR5LnByb3RvdHlwZS5fYWRkR3JhZGllbnRUb2tlbnMpOgorICAgICAgICAoV0kuU3ByZWFk
c2hlZXRTdHlsZVByb3BlcnR5LnByb3RvdHlwZS5fYWRkQ29sb3JUb2tlbnMpOgorICAgICAgICAo
V0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LnByb3RvdHlwZS5fYWRkVGltaW5nRnVuY3Rpb25U
b2tlbnMpOgorCisyMDE3LTEwLTI1ICBOaWtpdGEgVmFzaWx5ZXYgIDxudmFzaWx5ZXZAYXBwbGUu
Y29tPgorCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0eWxlcyBSZWRlc2lnbjogTmV3bHkgYWRk
ZWQgaW52YWxpZCBwcm9wZXJ0eSBpc24ndCBpbW1lZGlhdGVseSBzaG93biBhcyBpbnZhbGlkCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg0ODgKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0Nv
bG9yLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NvbG9y
LmpzCmluZGV4IDhhZDU3OTQuLjY4ODk0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db2xvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ29sb3IuanMKQEAgLTM3OSw3ICszNzksOCBAQCBX
SS5Db2xvciA9IGNsYXNzIENvbG9yCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdG9LZXl3b3Jk
U3RyaW5nKCk7CiAgICAgICAgIH0KIAotICAgICAgICB0aHJvdyAiaW52YWxpZCBjb2xvciBmb3Jt
YXQiOworICAgICAgICBjb25zb2xlLmVycm9yKCJJbnZhbGlkIGNvbG9yIGZvcm1hdDogIiArIGZv
cm1hdCk7CisgICAgICAgIHJldHVybiAiIjsKICAgICB9CiAKICAgICBpc0tleXdvcmQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFk
c2hlZXRTdHlsZVByb3BlcnR5LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LmpzCmluZGV4IGZjMWE0NDYuLjBkMGY4
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMKQEAgLTI1Myw5
ICsyNTMsMTEgQEAgV0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0gY2xhc3MgU3ByZWFkc2hl
ZXRTdHlsZVByb3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIGxldCB0b2tlbnMgPSBX
SS50b2tlbml6ZUNTU1ZhbHVlKHZhbHVlKTsKIAogICAgICAgICBpZiAodGhpcy5fcHJvcGVydHku
ZW5hYmxlZCkgewotICAgICAgICAgICAgLy8gRG9uJ3Qgc2hvdyBjb2xvciB3aWRnZXRzIGZvciBD
U1MgZ3JhZGllbnRzLCBzaG93IGRlZGljYXRlZCBncmFkaWVudCB3aWRnZXRzIGluc3RlYWQuCi0g
ICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3ODQwND4gV2ViIElu
c3BlY3RvcjogW1BBUklUWV0gU3R5bGVzIFJlZGVzaWduOiBBZGQgYmV6aWVyIGN1cnZlLCBjb2xv
ciBncmFkaWVudCwgYW5kIENTUyB2YXJpYWJsZSBpbmxpbmUgd2lkZ2V0cworICAgICAgICAgICAg
Ly8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNzg2MzY+IFdlYiBJbnNwZWN0b3I6IFN0
eWxlczogTWFrZSBpbmxpbmUgd2lkZ2V0cyB3b3JrIHdpdGggQ1NTIGZ1bmN0aW9ucyAodmFyKCks
IGNhbGMoKSwgZXRjLikKKyAgICAgICAgICAgIHRva2VucyA9IHRoaXMuX2FkZEdyYWRpZW50VG9r
ZW5zKHRva2Vucyk7CiAgICAgICAgICAgICB0b2tlbnMgPSB0aGlzLl9hZGRDb2xvclRva2Vucyh0
b2tlbnMpOworICAgICAgICAgICAgdG9rZW5zID0gdGhpcy5fYWRkVGltaW5nRnVuY3Rpb25Ub2tl
bnModG9rZW5zLCAiY3ViaWMtYmV6aWVyIik7CisgICAgICAgICAgICB0b2tlbnMgPSB0aGlzLl9h
ZGRUaW1pbmdGdW5jdGlvblRva2Vucyh0b2tlbnMsICJzcHJpbmciKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHRva2VucyA9IHRva2Vucy5tYXAoKHRva2VuKSA9PiB7CkBAIC0yODcsNDggKzI4OSw3
OSBAQCBXSS5TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkgPSBjbGFzcyBTcHJlYWRzaGVldFN0eWxl
UHJvcGVydHkgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgdGhpcy5fdmFsdWVFbGVtZW50LmFw
cGVuZCguLi50b2tlbnMpOwogICAgIH0KIAotICAgIF9hZGRDb2xvclRva2Vucyh0b2tlbnMpCisg
ICAgX2NyZWF0ZUlubGluZVN3YXRjaCh0eXBlLCB0ZXh0LCB2YWx1ZU9iamVjdCkKICAgICB7Ci0g
ICAgICAgIGxldCBuZXdUb2tlbnMgPSBbXTsKKyAgICAgICAgbGV0IHRva2VuRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgbGV0IGlubmVyRWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgaW5uZXJFbGVtZW50LnRl
eHRDb250ZW50ID0gdGV4dDsKIAotICAgICAgICBsZXQgY3JlYXRlQ29sb3JUb2tlbkVsZW1lbnQg
PSAoY29sb3JTdHJpbmcsIGNvbG9yKSA9PiB7Ci0gICAgICAgICAgICBsZXQgY29sb3JUb2tlbkVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICBjb2xv
clRva2VuRWxlbWVudC5jbGFzc05hbWUgPSAidG9rZW4tY29sb3IiOworICAgICAgICBsZXQgcmVh
ZE9ubHkgPSAhdGhpcy5fcHJvcGVydHkuZWRpdGFibGU7CisgICAgICAgIGxldCBzd2F0Y2ggPSBu
ZXcgV0kuSW5saW5lU3dhdGNoKHR5cGUsIHZhbHVlT2JqZWN0LCByZWFkT25seSk7CiAKLSAgICAg
ICAgICAgIGxldCBpbm5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7
Ci0gICAgICAgICAgICBpbm5lckVsZW1lbnQuY2xhc3NOYW1lID0gInRva2VuLWNvbG9yLXZhbHVl
IjsKLSAgICAgICAgICAgIGlubmVyRWxlbWVudC50ZXh0Q29udGVudCA9IGNvbG9yU3RyaW5nOwor
ICAgICAgICBzd2F0Y2guYWRkRXZlbnRMaXN0ZW5lcihXSS5JbmxpbmVTd2F0Y2guRXZlbnQuVmFs
dWVDaGFuZ2VkLCAoZXZlbnQpID0+IHsKKyAgICAgICAgICAgIGxldCB2YWx1ZSA9IGV2ZW50LmRh
dGEudmFsdWUgJiYgZXZlbnQuZGF0YS52YWx1ZS50b1N0cmluZygpOworICAgICAgICAgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGlmIChjb2xv
cikgewotICAgICAgICAgICAgICAgIGxldCByZWFkT25seSA9ICF0aGlzLl9wcm9wZXJ0eS5lZGl0
YWJsZTsKLSAgICAgICAgICAgICAgICBsZXQgc3dhdGNoID0gbmV3IFdJLklubGluZVN3YXRjaChX
SS5JbmxpbmVTd2F0Y2guVHlwZS5Db2xvciwgY29sb3IsIHJlYWRPbmx5KTsKKyAgICAgICAgICAg
IGlubmVyRWxlbWVudC50ZXh0Q29udGVudCA9IHZhbHVlOworICAgICAgICAgICAgdGhpcy5faGFu
ZGxlVmFsdWVDaGFuZ2UoKTsKKyAgICAgICAgfSwgdGhpcyk7CiAKLSAgICAgICAgICAgICAgICBz
d2F0Y2guYWRkRXZlbnRMaXN0ZW5lcihXSS5JbmxpbmVTd2F0Y2guRXZlbnQuVmFsdWVDaGFuZ2Vk
LCAoZXZlbnQpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZXZlbnQuZGF0
YSAmJiBldmVudC5kYXRhLnZhbHVlICYmIGV2ZW50LmRhdGEudmFsdWUudG9TdHJpbmcoKTsKLSAg
ICAgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQodmFsdWUsICJDb2xvciB2YWx1ZSBpcyBl
bXB0eS4iKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdG9rZW5FbGVtZW50LmFwcGVuZChzd2F0Y2guZWxl
bWVudCwgaW5uZXJFbGVtZW50KTsKIAotICAgICAgICAgICAgICAgICAgICBpbm5lckVsZW1lbnQu
dGV4dENvbnRlbnQgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlVmFs
dWVDaGFuZ2UoKTsKLSAgICAgICAgICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgLy8gUHJldmVu
dCB0aGUgdmFsdWUgZnJvbSBlZGl0aW5nIHdoZW4gY2xpY2tpbmcgb24gdGhlIHN3YXRjaC4KKyAg
ICAgICAgc3dhdGNoLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgKGV2ZW50
KSA9PiB7IGV2ZW50LnN0b3AoKTsgfSk7CiAKLSAgICAgICAgICAgICAgICBjb2xvclRva2VuRWxl
bWVudC5hcHBlbmQoc3dhdGNoLmVsZW1lbnQpOworICAgICAgICByZXR1cm4gdG9rZW5FbGVtZW50
OworICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgdGhlIHZhbHVlIGZyb20gZWRp
dGluZyB3aGVuIGNsaWNraW5nIG9uIHRoZSBzd2F0Y2guCi0gICAgICAgICAgICAgICAgc3dhdGNo
LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgKGV2ZW50KSA9PiB7IGV2ZW50
LnN0b3AoKTsgfSk7Ci0gICAgICAgICAgICB9CisgICAgX2FkZEdyYWRpZW50VG9rZW5zKHRva2Vu
cykKKyAgICB7CisgICAgICAgIGxldCBncmFkaWVudFJlZ2V4ID0gL14ocmVwZWF0aW5nLSk/KGxp
bmVhcnxyYWRpYWwpLWdyYWRpZW50JC9pOworICAgICAgICBsZXQgbmV3VG9rZW5zID0gW107Cisg
ICAgICAgIGxldCBncmFkaWVudFN0YXJ0SW5kZXggPSBOYU47CisgICAgICAgIGxldCBvcGVuUGFy
ZW50aGVzaXMgPSAwOwogCi0gICAgICAgICAgICBjb2xvclRva2VuRWxlbWVudC5hcHBlbmQoaW5u
ZXJFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBjb2xvclRva2VuRWxlbWVudDsKLSAgICAg
ICAgfTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIGxldCB0b2tlbiA9IHRva2Vuc1tpXTsKKyAgICAgICAgICAgIGlmICh0b2tl
bi50eXBlICYmIHRva2VuLnR5cGUuaW5jbHVkZXMoImF0b20iKSAmJiBncmFkaWVudFJlZ2V4LnRl
c3QodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZ3JhZGllbnRTdGFydEluZGV4ID0g
aTsKKyAgICAgICAgICAgICAgICBvcGVuUGFyZW50aGVzaXMgPSAwOworICAgICAgICAgICAgfSBl
bHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gIigiICYmICFpc05hTihncmFkaWVudFN0YXJ0SW5kZXgp
KQorICAgICAgICAgICAgICAgIG9wZW5QYXJlbnRoZXNpcysrOworICAgICAgICAgICAgZWxzZSBp
ZiAodG9rZW4udmFsdWUgPT09ICIpIiAmJiAhaXNOYU4oZ3JhZGllbnRTdGFydEluZGV4KSkgewor
ICAgICAgICAgICAgICAgIG9wZW5QYXJlbnRoZXNpcy0tOworICAgICAgICAgICAgICAgIGlmIChv
cGVuUGFyZW50aGVzaXMgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE1hdGNoZWQgYSBD
U1MgZnVuY3Rpb24gaW5zaWRlIG9mIHRoZSBncmFkaWVudC4KKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbGV0IHJhd1Rv
a2VucyA9IHRva2Vucy5zbGljZShncmFkaWVudFN0YXJ0SW5kZXgsIGkgKyAxKTsKKyAgICAgICAg
ICAgICAgICBsZXQgdGV4dCA9IHJhd1Rva2Vucy5tYXAoKHRva2VuKSA9PiB0b2tlbi52YWx1ZSku
am9pbigiIik7CisgICAgICAgICAgICAgICAgbGV0IGdyYWRpZW50ID0gV0kuR3JhZGllbnQuZnJv
bVN0cmluZyh0ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoZ3JhZGllbnQpCisgICAgICAgICAg
ICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKHRoaXMuX2NyZWF0ZUlubGluZVN3YXRjaChXSS5Jbmxp
bmVTd2F0Y2guVHlwZS5HcmFkaWVudCwgdGV4dCwgZ3JhZGllbnQpKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKC4uLnJhd1Rva2Vucyk7
CisKKyAgICAgICAgICAgICAgICBncmFkaWVudFN0YXJ0SW5kZXggPSBOYU47CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzTmFOKGdyYWRpZW50U3RhcnRJbmRleCkpCisgICAgICAgICAgICAgICAg
bmV3VG9rZW5zLnB1c2godG9rZW4pOworICAgICAgICB9CiAKLSAgICAgICAgbGV0IHB1c2hQb3Nz
aWJsZUNvbG9yVG9rZW4gPSAodGV4dCwgLi4udG9rZW5zKSA9PiB7CisgICAgICAgIHJldHVybiBu
ZXdUb2tlbnM7CisgICAgfQorCisgICAgX2FkZENvbG9yVG9rZW5zKHRva2VucykKKyAgICB7Cisg
ICAgICAgIGxldCBuZXdUb2tlbnMgPSBbXTsKKworICAgICAgICBsZXQgcHVzaFBvc3NpYmxlQ29s
b3JUb2tlbiA9ICh0ZXh0LCAuLi5yYXdUb2tlbnMpID0+IHsKICAgICAgICAgICAgIGxldCBjb2xv
ciA9IFdJLkNvbG9yLmZyb21TdHJpbmcodGV4dCk7CiAgICAgICAgICAgICBpZiAoY29sb3IpCi0g
ICAgICAgICAgICAgICAgbmV3VG9rZW5zLnB1c2goY3JlYXRlQ29sb3JUb2tlbkVsZW1lbnQodGV4
dCwgY29sb3IpKTsKKyAgICAgICAgICAgICAgICBuZXdUb2tlbnMucHVzaCh0aGlzLl9jcmVhdGVJ
bmxpbmVTd2F0Y2goV0kuSW5saW5lU3dhdGNoLlR5cGUuQ29sb3IsIHRleHQsIGNvbG9yKSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV3VG9rZW5zLnB1c2goLi4udG9rZW5z
KTsKKyAgICAgICAgICAgICAgICBuZXdUb2tlbnMucHVzaCguLi5yYXdUb2tlbnMpOwogICAgICAg
ICB9OwogCiAgICAgICAgIGxldCBjb2xvckZ1bmN0aW9uU3RhcnRJbmRleCA9IE5hTjsKQEAgLTM2
MCw2ICszOTMsNTEgQEAgV0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0gY2xhc3MgU3ByZWFk
c2hlZXRTdHlsZVByb3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHJldHVybiBuZXdU
b2tlbnM7CiAgICAgfQogCisgICAgX2FkZFRpbWluZ0Z1bmN0aW9uVG9rZW5zKHRva2VucywgdG9r
ZW5UeXBlKQorICAgIHsKKyAgICAgICAgbGV0IG5ld1Rva2VucyA9IFtdOworICAgICAgICBsZXQg
c3RhcnRJbmRleCA9IE5hTjsKKyAgICAgICAgbGV0IG9wZW5QYXJlbnRoZXNpcyA9IDA7CisKKyAg
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIGxldCB0b2tlbiA9IHRva2Vuc1tpXTsKKyAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9
PT0gdG9rZW5UeXBlICYmIHRva2VuLnR5cGUgJiYgdG9rZW4udHlwZS5pbmNsdWRlcygiYXRvbSIp
KSB7CisgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGk7CisgICAgICAgICAgICAgICAgb3Bl
blBhcmVudGhlc2lzID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udmFsdWUgPT09
ICIoIiAmJiAhaXNOYU4oc3RhcnRJbmRleCkpCisgICAgICAgICAgICAgICAgb3BlblBhcmVudGhl
c2lzKys7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gIikiICYmICFpc05h
TihzdGFydEluZGV4KSkgeworCisgICAgICAgICAgICAgICAgb3BlblBhcmVudGhlc2lzLS07Cisg
ICAgICAgICAgICAgICAgaWYgKG9wZW5QYXJlbnRoZXNpcyA+IDApCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgbGV0IHJhd1Rva2VucyA9IHRva2Vucy5z
bGljZShzdGFydEluZGV4LCBpICsgMSk7CisgICAgICAgICAgICAgICAgbGV0IHRleHQgPSByYXdU
b2tlbnMubWFwKCh0b2tlbikgPT4gdG9rZW4udmFsdWUpLmpvaW4oIiIpOworCisgICAgICAgICAg
ICAgICAgbGV0IHZhbHVlT2JqZWN0OworICAgICAgICAgICAgICAgIGxldCBpbmxpbmVTd2F0Y2hU
eXBlOworICAgICAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT09ICJjdWJpYy1iZXppZXIiKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlT2JqZWN0ID0gV0kuQ3ViaWNCZXppZXIuZnJvbVN0
cmluZyh0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lU3dhdGNoVHlwZSA9IFdJLklu
bGluZVN3YXRjaC5UeXBlLkJlemllcjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2Vu
VHlwZSA9PT0gInNwcmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVPYmplY3QgPSBX
SS5TcHJpbmcuZnJvbVN0cmluZyh0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lU3dh
dGNoVHlwZSA9IFdJLklubGluZVN3YXRjaC5UeXBlLlNwcmluZzsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAodmFsdWVPYmplY3QpCisgICAgICAgICAgICAgICAgICAg
IG5ld1Rva2Vucy5wdXNoKHRoaXMuX2NyZWF0ZUlubGluZVN3YXRjaChpbmxpbmVTd2F0Y2hUeXBl
LCB0ZXh0LCB2YWx1ZU9iamVjdCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgbmV3VG9rZW5zLnB1c2goLi4ucmF3VG9rZW5zKTsKKworICAgICAgICAgICAgICAg
IHN0YXJ0SW5kZXggPSBOYU47CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHN0YXJ0SW5k
ZXgpKQorICAgICAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKHRva2VuKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBuZXdUb2tlbnM7CisgICAgfQorCiAgICAgX2hhbmRsZU5hbWVDaGFu
Z2UoKQogICAgIHsKICAgICAgICAgdGhpcy5fcHJvcGVydHkubmFtZSA9IHRoaXMuX25hbWVFbGVt
ZW50LnRleHRDb250ZW50LnRyaW0oKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>