<?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>144982</bug_id>
          
          <creation_ts>2015-05-13 18:56:30 -0700</creation_ts>
          <short_desc>Web Inspector: Convert stackTrace from raw payload data to an array of CallFrames</short_desc>
          <delta_ts>2015-05-19 00:12:54 -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>528+ (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=145071</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>
          
          <blocked>143862</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikita Vasilyev">nvasilyev</reporter>
          <assigned_to name="Nikita Vasilyev">nvasilyev</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1094686</commentid>
    <comment_count>0</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-05-13 18:56:30 -0700</bug_when>
    <thetext>via https://bugs.webkit.org/show_bug.cgi?id=144372#c23

&gt; I would not expect protocol data for the CallFrame to be used at this level [ConsoleMessageView].
&gt; The calls to WebInspector.CallFrame.fromPayload (and this logic) should move
&gt; to the Model level in ConsoleMessage. ConsoleMessage should just have a
&gt; getter for firstNonNativeCallFrame that Does The Right Thing™. Really
&gt; _firstNonNativeCallFrame should move.
&gt; 
&gt; Sigh. In fact ConsoleMessage&apos;s stackTrace seems to be a raw protocol object
&gt; still and not an array of CallFrames. So there is more work here to do. Can
&gt; you file a follow up for all that? Keeping the code you wrote here is fine
&gt; for now, but it is all really model level and not view level logic from the
&gt; poor separation we had before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094687</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-05-13 18:56:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/20948796&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094688</commentid>
    <comment_count>2</comment_count>
      <attachid>253081</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-05-13 19:04:01 -0700</bug_when>
    <thetext>Created attachment 253081
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095361</commentid>
    <comment_count>3</comment_count>
      <attachid>253081</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-05-15 19:39:38 -0700</bug_when>
    <thetext>Comment on attachment 253081
Patch

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

r=me with comments.

&gt; Source/WebInspectorUI/UserInterface/Models/CallFrame.js:64
&gt; +    get url()
&gt; +    {
&gt; +        return (this._sourceCodeLocation &amp;&amp; this._sourceCodeLocation.sourceCode &amp;&amp; this._sourceCodeLocation.sourceCode.url) || &quot;&quot;;
&gt; +    }
&gt; +
&gt; +    get lineNumber()
&gt; +    {
&gt; +        return this._sourceCodeLocation ? this._sourceCodeLocation.lineNumber : 0;
&gt; +    }
&gt; +
&gt; +    get columnNumber()
&gt; +    {
&gt; +        return this._sourceCodeLocation ? this._sourceCodeLocation.columnNumber : 0;
&gt; +    }

I think it would make more sense to just have a &quot;get sourceCodeLocation()&quot; getter.

&gt; Source/WebInspectorUI/UserInterface/Models/CallFrame.js:126
&gt;          var url = payload.url;
&gt;          var nativeCode = false;
&gt; +        var sourceCodeLocation = null;

It is unclear to me if this CallFrame.fromPayload method is meant for Console.CallFrame, Debugger.CallFrame, or both. Could you add a comment? It seems like both.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:48
&gt; +        this._stackTrace = stackTrace ? stackTrace.map(WebInspector.CallFrame.fromPayload) : [];

We should make a WebInspector.StackTrace model object matching Console.StackTrace protocol object.

&gt; Source/WebInspectorUI/UserInterface/Views/CallFrameView.js:-30
&gt; -        console.assert(callFrame.sourceCodeLocation &amp;&amp; callFrame.sourceCodeLocation.sourceCode);

Can this assert be:

    console.assert(callFrame instanceof WebInspector.CallFrame);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095370</commentid>
    <comment_count>4</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-05-15 19:58:06 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 253081 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=253081&amp;action=review
&gt; 
&gt; r=me with comments.
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:48
&gt; &gt; +        this._stackTrace = stackTrace ? stackTrace.map(WebInspector.CallFrame.fromPayload) : [];
&gt; 
&gt; We should make a WebInspector.StackTrace model object matching
&gt; Console.StackTrace protocol object.

There is no such thing as WebInspector.StackTrace yet, are you suggesting renaming WebInspector.CallFrame to WebInspector.StackTrace?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095378</commentid>
    <comment_count>5</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-05-15 20:11:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 253081 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=253081&amp;action=review
&gt; 
&gt; r=me with comments.
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/CallFrame.js:64
&gt; &gt; +    get url()
&gt; &gt; +    {
&gt; &gt; +        return (this._sourceCodeLocation &amp;&amp; this._sourceCodeLocation.sourceCode &amp;&amp; this._sourceCodeLocation.sourceCode.url) || &quot;&quot;;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    get lineNumber()
&gt; &gt; +    {
&gt; &gt; +        return this._sourceCodeLocation ? this._sourceCodeLocation.lineNumber : 0;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    get columnNumber()
&gt; &gt; +    {
&gt; &gt; +        return this._sourceCodeLocation ? this._sourceCodeLocation.columnNumber : 0;
&gt; &gt; +    }
&gt; 
&gt; I think it would make more sense to just have a &quot;get sourceCodeLocation()&quot;
&gt; getter.

The idea was to:

1. Make the code more discoverable. Just to get the URL of a callFrame I need to be aware of intricate sourceCodeLocation and sourceCode relations, e.g. I need to know that callFrame has SourceCodeLocation instance, which has no URL, but has SourceCode instance, which is finally has a URL.

2. Not to copy/paste the following boilerplate code every time I need the URL:

    (this._sourceCodeLocation &amp;&amp; this._sourceCodeLocation.sourceCode &amp;&amp; this._sourceCodeLocation.sourceCode.url) || &quot;&quot;

&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/CallFrame.js:126
&gt; &gt;          var url = payload.url;
&gt; &gt;          var nativeCode = false;
&gt; &gt; +        var sourceCodeLocation = null;
&gt; 
&gt; It is unclear to me if this CallFrame.fromPayload method is meant for
&gt; Console.CallFrame, Debugger.CallFrame, or both. Could you add a comment? It
&gt; seems like both.

It’s currently only used by CallFrameView, which is currently only used in the Console. I didn’t realize  there are different types of call frames until you mentioned it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095379</commentid>
    <comment_count>6</comment_count>
      <attachid>253081</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-05-15 20:15:08 -0700</bug_when>
    <thetext>Comment on attachment 253081
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/CallFrameView.js:-30
&gt;&gt; -        console.assert(callFrame.sourceCodeLocation &amp;&amp; callFrame.sourceCodeLocation.sourceCode);
&gt; 
&gt; Can this assert be:
&gt; 
&gt;     console.assert(callFrame instanceof WebInspector.CallFrame);

WebInspector.CallFrame allows callFrame.sourceCodeLocation to be null, so no.

Also, please note this line was removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095385</commentid>
    <comment_count>7</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-05-15 20:37:35 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; &gt; Source/WebInspectorUI/UserInterface/Models/CallFrame.js:126
&gt; &gt; &gt;          var url = payload.url;
&gt; &gt; &gt;          var nativeCode = false;
&gt; &gt; &gt; +        var sourceCodeLocation = null;
&gt; &gt; 
&gt; &gt; It is unclear to me if this CallFrame.fromPayload method is meant for
&gt; &gt; Console.CallFrame, Debugger.CallFrame, or both. Could you add a comment? It
&gt; &gt; seems like both.
&gt; 
&gt; It’s currently only used by CallFrameView, which is currently only used in
&gt; the Console. I didn’t realize  there are different types of call frames
&gt; until you mentioned it.

Um, ignore that. It’s already used in Timeline and Console and can be used in Debugger too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095649</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-05-18 11:55:43 -0700</bug_when>
    <thetext>&gt; &gt; We should make a WebInspector.StackTrace model object matching
&gt; &gt; Console.StackTrace protocol object.
&gt; 
&gt; There is no such thing as WebInspector.StackTrace yet, are you suggesting
&gt; renaming WebInspector.CallFrame to WebInspector.StackTrace?

No, a StackTrace is a collection of CallFrames. See the Console.json protocol types for example.

I was suggesting that you make a model object named WebInspector.StackTrace class which would hold an array of CallFrames.





&gt; &gt; I think it would make more sense to just have a &quot;get sourceCodeLocation()&quot;
&gt; &gt; getter.
&gt; 
&gt; The idea was to:
&gt; 
&gt; 1. Make the code more discoverable. Just to get the URL of a callFrame I
&gt; need to be aware of intricate sourceCodeLocation and sourceCode relations,
&gt; e.g. I need to know that callFrame has SourceCodeLocation instance, which
&gt; has no URL, but has SourceCode instance, which is finally has a URL.
&gt; 
&gt; 2. Not to copy/paste the following boilerplate code every time I need the
&gt; URL:

I don&apos;t think this is the right way to think about it.

If you have a call frame, and you want to display the location, well, you might want to display any of its locations (raw, formatted, mapped). A SourceCodeLocation object lets you make that choice. These 3 APIs on CallFrame are very limiting (only provide the raw values, not even the display values of the location) and would perform worse since each time each property is doing extra checks. If you wanted the url/line/column through these APIs you&apos;d check the sourceCodeLocation 3 times instead of just once.

If you don&apos;t have a sourceCodeLocation, the default values of &quot;&quot;/0/0 may not make sense. I&apos;d rather we handle those cases differently (if !sourceCodeLocation =&gt; do something else) then potentially end up with an empty string / bad output.

I think WebInspector.Breakpoint is a good example. It only allows returning the sourceCodeLocation, and lets you do what you want with that.


&gt; &gt;&gt; Source/WebInspectorUI/UserInterface/Views/CallFrameView.js:-30
&gt; &gt;&gt; -        console.assert(callFrame.sourceCodeLocation &amp;&amp; callFrame.sourceCodeLocation.sourceCode);
&gt; &gt; 
&gt; &gt; Can this assert be:
&gt; &gt; 
&gt; &gt;     console.assert(callFrame instanceof WebInspector.CallFrame);
&gt; 
&gt; WebInspector.CallFrame allows callFrame.sourceCodeLocation to be null, so no.
&gt; 
&gt; Also, please note this line was removed.

I don&apos;t understand this comment. The assert doesn&apos;t care about &quot;callFrame.sourceCodeLocation&quot; only about &quot;callFrame&quot;.

When would it not be true that callFrame be a WebInspector.CallFrame?!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095770</commentid>
    <comment_count>9</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-05-18 18:03:15 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; &gt; We should make a WebInspector.StackTrace model object matching
&gt; &gt; &gt; Console.StackTrace protocol object.
&gt; &gt; 
&gt; &gt; There is no such thing as WebInspector.StackTrace yet, are you suggesting
&gt; &gt; renaming WebInspector.CallFrame to WebInspector.StackTrace?
&gt; 
&gt; No, a StackTrace is a collection of CallFrames. See the Console.json
&gt; protocol types for example.
&gt; 
&gt; I was suggesting that you make a model object named WebInspector.StackTrace
&gt; class which would hold an array of CallFrames.

I see.

I tried to subclass an array, which should be possible with ES 6, but it didn’t work: https://bugs.webkit.org/show_bug.cgi?id=145155.

If subclassing an array is not an option, what would StackTrace model look like? Should it be a wrapper around an array?

class StackTrace {
    constructor(array) {
        this._array = array;
    }

    get length() {
        return this._array.length;
    }

    get(index) {
        return this._array[index];
    }

    ...
}

I&apos;m not a big fan of it as we won&apos;t be able to use the brackets syntax (e.g. myArray[1]) and we’d have to re-implement every array method when we need it (indexOf, push,  slice, a couple dozens of others).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095785</commentid>
    <comment_count>10</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-05-18 18:54:02 -0700</bug_when>
    <thetext>I wouldn&apos;t make it an array like object. I&apos;d have a callFeames getter that returns the array. The StackFrame class can also have a firstNonNativeCallFrame getter and anything else we might need later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095793</commentid>
    <comment_count>11</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-05-18 19:38:29 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; &gt; I think it would make more sense to just have a &quot;get sourceCodeLocation()&quot;
&gt; &gt; &gt; getter.
&gt; &gt; 
&gt; &gt; The idea was to:
&gt; &gt; 
&gt; &gt; 1. Make the code more discoverable. Just to get the URL of a callFrame I
&gt; &gt; need to be aware of intricate sourceCodeLocation and sourceCode relations,
&gt; &gt; e.g. I need to know that callFrame has SourceCodeLocation instance, which
&gt; &gt; has no URL, but has SourceCode instance, which is finally has a URL.
&gt; &gt; 
&gt; &gt; 2. Not to copy/paste the following boilerplate code every time I need the
&gt; &gt; URL:
&gt; 
&gt; I don&apos;t think this is the right way to think about it.
&gt; 
&gt; If you have a call frame, and you want to display the location, well, you
&gt; might want to display any of its locations (raw, formatted, mapped). A
&gt; SourceCodeLocation object lets you make that choice. These 3 APIs on
&gt; CallFrame are very limiting (only provide the raw values, not even the
&gt; display values of the location) and would perform worse since each time each
&gt; property is doing extra checks. If you wanted the url/line/column through
&gt; these APIs you&apos;d check the sourceCodeLocation 3 times instead of just once.
&gt; 
&gt; If you don&apos;t have a sourceCodeLocation, the default values of &quot;&quot;/0/0 may not
&gt; make sense. I&apos;d rather we handle those cases differently (if
&gt; !sourceCodeLocation =&gt; do something else) then potentially end up with an
&gt; empty string / bad output.
&gt; 
&gt; I think WebInspector.Breakpoint is a good example. It only allows returning
&gt; the sourceCodeLocation, and lets you do what you want with that.

I see your point. Agreed.

&gt; 
&gt; 
&gt; &gt; &gt;&gt; Source/WebInspectorUI/UserInterface/Views/CallFrameView.js:-30
&gt; &gt; &gt;&gt; -        console.assert(callFrame.sourceCodeLocation &amp;&amp; callFrame.sourceCodeLocation.sourceCode);
&gt; &gt; &gt; 
&gt; &gt; &gt; Can this assert be:
&gt; &gt; &gt; 
&gt; &gt; &gt;     console.assert(callFrame instanceof WebInspector.CallFrame);
&gt; &gt; 
&gt; &gt; WebInspector.CallFrame allows callFrame.sourceCodeLocation to be null, so no.
&gt; &gt; 
&gt; &gt; Also, please note this line was removed.
&gt; 
&gt; I don&apos;t understand this comment. The assert doesn&apos;t care about
&gt; &quot;callFrame.sourceCodeLocation&quot; only about &quot;callFrame&quot;.
&gt; 
&gt; When would it not be true that callFrame be a WebInspector.CallFrame?!

callFrame must always be WebInspector.CallFrame, I’ll add the assert. Sorry, I misunderstood you the first time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095794</commentid>
    <comment_count>12</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-05-18 19:39:15 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I wouldn&apos;t make it an array like object. I&apos;d have a callFeames getter that
&gt; returns the array. The StackFrame class can also have a
&gt; firstNonNativeCallFrame getter and anything else we might need later.

This seems reasonable, I’ll do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095837</commentid>
    <comment_count>13</comment_count>
      <attachid>253368</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-05-18 23:14:23 -0700</bug_when>
    <thetext>Created attachment 253368
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095839</commentid>
    <comment_count>14</comment_count>
      <attachid>253368</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-18 23:14:43 -0700</bug_when>
    <thetext>Comment on attachment 253368
Patch

Rejecting attachment 253368 from review queue.

nvasilyev@apple.com does not have reviewer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

- If you do not have reviewer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have reviewer rights please correct the error in Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your reviewer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095857</commentid>
    <comment_count>15</comment_count>
      <attachid>253368</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-19 00:12:48 -0700</bug_when>
    <thetext>Comment on attachment 253368
Patch

Clearing flags on attachment: 253368

Committed r184553: &lt;http://trac.webkit.org/changeset/184553&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095858</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-19 00:12:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253081</attachid>
            <date>2015-05-13 19:04:01 -0700</date>
            <delta_ts>2015-05-18 23:14:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>9677</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDM5NzliNjkuLjdkNDVhMDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE1LTA1LTEzICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IENvbnZl
cnQgc3RhY2tUcmFjZSBmcm9tIHJhdyBwYXlsb2FkIGRhdGEgdG8gYW4gYXJyYXkgb2YgQ2FsbEZy
YW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0
OTgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL01vZGVscy9DYWxsRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q2FsbEZyYW1lLnByb3RvdHlwZS5nZXQgdXJsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxs
RnJhbWUucHJvdG90eXBlLmdldCBsaW5lTnVtYmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
YWxsRnJhbWUucHJvdG90eXBlLmdldCBjb2x1bW5OdW1iZXIpOgorICAgICAgICBBZGQgdGhlc2Ug
dGhyZWUgZ2V0dGVyIHRvIHRoZSBtb2RlbCBzbyB0aGVyZSB3b3VsZCBiZSBubyBuZWVkIHRvIGNh
cnJ5IHRoaXMgYm9pbGVycGxhdGUgY29kZSBldmVyeSB0aW1lLgorCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9Mb2dNYW5hZ2VyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkxvZ01hbmFnZXIucHJvdG90eXBlLm1lc3NhZ2VXYXNBZGRlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ2FsbEZyYW1lLmZyb21QYXlsb2FkKToKKyAgICAgICAgQ29uc2lkZXIgZW1wdHkgc3Ry
aW5nIHVybCBhcyBhIG5hdGl2ZSBjb2RlIGFzIGl0IHdhcyBpbiBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUKKworICAgICAg
ICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0NvbnNvbGVNZXNzYWdlLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5wcm90b3R5cGUuZ2V0IGZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKToKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL1ZpZXdzL0NhbGxGcmFtZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ2FsbEZyYW1lVmlldyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Db25z
b2xlTWVzc2FnZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VW
aWV3LnByb3RvdHlwZS5fYXBwZW5kTG9jYXRpb25MaW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLl9maXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSk6
IERlbGV0ZWQuCisKIDIwMTUtMDUtMTEgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgW1dpbl0gTW92ZSBXaW5kb3dzIGJ1aWxkIHRhcmdldCB0byBXaW5kb3dz
IDcgKG9yIG5ld2VyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvTG9nTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xvZ01hbmFnZXIuanMKaW5kZXggMTE3MzkyNC4uYzg2
MjZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvTG9nTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9Mb2dNYW5hZ2VyLmpzCkBAIC0zOCw3ICszOCw2IEBAIFdlYklu
c3BlY3Rvci5Mb2dNYW5hZ2VyID0gY2xhc3MgTG9nTWFuYWdlciBleHRlbmRzIFdlYkluc3BlY3Rv
ci5PYmplY3QKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5Db25z
b2xlT2JzZXJ2ZXIuCiAKLSAgICAgICAgLy8gRklYTUU6IHN0YWNrVHJhY2Ugc2hvdWxkIGJlIGNv
bnZlcnRlZCB0byBhIG1vZGVsIG9iamVjdC4KICAgICAgICAgLy8gRklYTUU6IEdldCBhIHJlcXVl
c3QgZnJvbSByZXF1ZXN0IElELgogCiAgICAgICAgIGlmIChwYXJhbWV0ZXJzKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NhbGxGcmFtZS5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DYWxsRnJhbWUu
anMKaW5kZXggZDVhYzNjOS4uNGJjYzE1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NhbGxGcmFtZS5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ2FsbEZyYW1lLmpzCkBAIC00OCw2ICs0OCwy
MSBAQCBXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lID0gY2xhc3MgQ2FsbEZyYW1lIGV4dGVuZHMgV2Vi
SW5zcGVjdG9yLk9iamVjdAogICAgICAgICByZXR1cm4gdGhpcy5faWQ7CiAgICAgfQogCisgICAg
Z2V0IHVybCgpCisgICAgeworICAgICAgICByZXR1cm4gKHRoaXMuX3NvdXJjZUNvZGVMb2NhdGlv
biAmJiB0aGlzLl9zb3VyY2VDb2RlTG9jYXRpb24uc291cmNlQ29kZSAmJiB0aGlzLl9zb3VyY2VD
b2RlTG9jYXRpb24uc291cmNlQ29kZS51cmwpIHx8ICIiOworICAgIH0KKworICAgIGdldCBsaW5l
TnVtYmVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb2RlTG9jYXRpb24g
PyB0aGlzLl9zb3VyY2VDb2RlTG9jYXRpb24ubGluZU51bWJlciA6IDA7CisgICAgfQorCisgICAg
Z2V0IGNvbHVtbk51bWJlcigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29k
ZUxvY2F0aW9uID8gdGhpcy5fc291cmNlQ29kZUxvY2F0aW9uLmNvbHVtbk51bWJlciA6IDA7Cisg
ICAgfQorCiAgICAgZ2V0IHNvdXJjZUNvZGVMb2NhdGlvbigpCiAgICAgewogICAgICAgICByZXR1
cm4gdGhpcy5fc291cmNlQ29kZUxvY2F0aW9uOwpAQCAtMTA4LDIwICsxMjMsMjMgQEAgV2ViSW5z
cGVjdG9yLkNhbGxGcmFtZSA9IGNsYXNzIENhbGxGcmFtZSBleHRlbmRzIFdlYkluc3BlY3Rvci5P
YmplY3QKIAogICAgICAgICB2YXIgdXJsID0gcGF5bG9hZC51cmw7CiAgICAgICAgIHZhciBuYXRp
dmVDb2RlID0gZmFsc2U7CisgICAgICAgIHZhciBzb3VyY2VDb2RlTG9jYXRpb24gPSBudWxsOwog
Ci0gICAgICAgIGlmICh1cmwgPT09ICJbbmF0aXZlIGNvZGVdIikgeworICAgICAgICBpZiAoIXVy
bCB8fCB1cmwgPT09ICJbbmF0aXZlIGNvZGVdIikgewogICAgICAgICAgICAgbmF0aXZlQ29kZSA9
IHRydWU7CiAgICAgICAgICAgICB1cmwgPSBudWxsOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdmFyIHNvdXJjZUNvZGUgPSBXZWJJbnNwZWN0b3IuZnJhbWVSZXNvdXJjZU1hbmFnZXIu
cmVzb3VyY2VGb3JVUkwodXJsKTsKKyAgICAgICAgICAgIGlmICghc291cmNlQ29kZSkKKyAgICAg
ICAgICAgICAgICBzb3VyY2VDb2RlID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5zY3Jp
cHRzRm9yVVJMKHVybClbMF07CisKKyAgICAgICAgICAgIGlmIChzb3VyY2VDb2RlKSB7CisgICAg
ICAgICAgICAgICAgLy8gVGhlIGxpbmVOdW1iZXIgaXMgMS1iYXNlZCwgYnV0IHdlIGV4cGVjdCAw
LWJhc2VkLgorICAgICAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gcGF5bG9hZC5saW5lTnVt
YmVyIC0gMTsKKyAgICAgICAgICAgICAgICBzb3VyY2VDb2RlTG9jYXRpb24gPSBzb3VyY2VDb2Rl
LmNyZWF0ZUxhenlTb3VyY2VDb2RlTG9jYXRpb24obGluZU51bWJlciwgcGF5bG9hZC5jb2x1bW5O
dW1iZXIpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgdmFyIHNvdXJjZUNv
ZGUgPSBXZWJJbnNwZWN0b3IuZnJhbWVSZXNvdXJjZU1hbmFnZXIucmVzb3VyY2VGb3JVUkwodXJs
KTsKLSAgICAgICAgaWYgKCFzb3VyY2VDb2RlKQotICAgICAgICAgICAgc291cmNlQ29kZSA9IFdl
Ykluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuc2NyaXB0c0ZvclVSTCh1cmwpWzBdOwotCi0gICAg
ICAgIC8vIFRoZSBsaW5lTnVtYmVyIGlzIDEtYmFzZWQsIGJ1dCB3ZSBleHBlY3QgMC1iYXNlZC4K
LSAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBwYXlsb2FkLmxpbmVOdW1iZXIgLSAxOwotCi0gICAg
ICAgIHZhciBzb3VyY2VDb2RlTG9jYXRpb24gPSBzb3VyY2VDb2RlID8gc291cmNlQ29kZS5jcmVh
dGVMYXp5U291cmNlQ29kZUxvY2F0aW9uKGxpbmVOdW1iZXIsIHBheWxvYWQuY29sdW1uTnVtYmVy
KSA6IG51bGw7CiAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBwYXlsb2FkLmZ1bmN0aW9uTmFt
ZSAhPT0gImdsb2JhbCBjb2RlIiA/IHBheWxvYWQuZnVuY3Rpb25OYW1lIDogbnVsbDsKIAogICAg
ICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DYWxsRnJhbWUobnVsbCwgc291cmNlQ29kZUxv
Y2F0aW9uLCBmdW5jdGlvbk5hbWUsIG51bGwsIG51bGwsIG5hdGl2ZUNvZGUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NvbnNvbGVNZXNz
YWdlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NvbnNv
bGVNZXNzYWdlLmpzCmluZGV4IDNmYmFiNDMuLjE0YTA1Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db25zb2xlTWVzc2FnZS5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ29uc29sZU1lc3Nh
Z2UuanMKQEAgLTQ0LDcgKzQ0LDkgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlID0gY2xh
c3MgQ29uc29sZU1lc3NhZ2UgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiAKICAgICAgICAg
dGhpcy5fcmVwZWF0Q291bnQgPSByZXBlYXRDb3VudCB8fCAwOwogICAgICAgICB0aGlzLl9wYXJh
bWV0ZXJzID0gcGFyYW1ldGVyczsKLSAgICAgICAgdGhpcy5fc3RhY2tUcmFjZSA9IHN0YWNrVHJh
Y2U7CisKKyAgICAgICAgdGhpcy5fc3RhY2tUcmFjZSA9IHN0YWNrVHJhY2UgPyBzdGFja1RyYWNl
Lm1hcChXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lLmZyb21QYXlsb2FkKSA6IFtdOworCiAgICAgICAg
IHRoaXMuX3JlcXVlc3QgPSByZXF1ZXN0OwogICAgIH0KIApAQCAtMTAwLDYgKzEwMiwxOCBAQCBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UgPSBjbGFzcyBDb25zb2xlTWVzc2FnZSBleHRlbmRz
IFdlYkluc3BlY3Rvci5PYmplY3QKICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWNrVHJhY2U7CiAg
ICAgfQogCisgICAgZ2V0IGZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKCkKKyAgICB7CisgICAgICAg
IGZvciAodmFyIGZyYW1lIG9mIHRoaXMuX3N0YWNrVHJhY2UpIHsKKyAgICAgICAgICAgIGlmIChm
cmFtZS5uYXRpdmVDb2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICByZXR1cm4gZnJhbWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9
CisKICAgICBnZXQgcmVxdWVzdCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWVz
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0NhbGxGcmFtZVZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9DYWxsRnJhbWVWaWV3LmpzCmluZGV4IGRmZjg3NmUuLmY0M2Q5YWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NhbGxGcmFtZVZpZXcu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ2FsbEZy
YW1lVmlldy5qcwpAQCAtMjcsMjMgKzI3LDI0IEBAIFdlYkluc3BlY3Rvci5DYWxsRnJhbWVWaWV3
ID0gY2xhc3MgQ2FsbEZyYW1lVmlldyBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIHsKICAg
ICBjb25zdHJ1Y3RvcihjYWxsRnJhbWUpCiAgICAgewotICAgICAgICBjb25zb2xlLmFzc2VydChj
YWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9uICYmIGNhbGxGcmFtZS5zb3VyY2VDb2RlTG9jYXRp
b24uc291cmNlQ29kZSk7Ci0KICAgICAgICAgdmFyIGNhbGxGcmFtZUVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgY2FsbEZyYW1lRWxlbWVudC5jbGFzc0xp
c3QuYWRkKCJjYWxsLWZyYW1lIiwgV2ViSW5zcGVjdG9yLkNhbGxGcmFtZVZpZXcuaWNvbkNsYXNz
TmFtZUZvckNhbGxGcmFtZShjYWxsRnJhbWUpKTsKIAotICAgICAgICB2YXIgc291cmNlQ29kZUxv
Y2F0aW9uID0gY2FsbEZyYW1lLnNvdXJjZUNvZGVMb2NhdGlvbjsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLmxpbmtpZnlFbGVtZW50KGNhbGxGcmFtZUVsZW1lbnQsIHNvdXJjZUNvZGVMb2NhdGlvbik7
Ci0KLSAgICAgICAgdmFyIGxpbmtFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIp
OwotICAgICAgICBsaW5rRWxlbWVudC5jbGFzc05hbWUgPSAic291cmNlLWxpbmsiOwotICAgICAg
ICBsaW5rRWxlbWVudC5ocmVmID0gc291cmNlQ29kZUxvY2F0aW9uLnNvdXJjZUNvZGUudXJsOwot
ICAgICAgICBzb3VyY2VDb2RlTG9jYXRpb24ucG9wdWxhdGVMaXZlRGlzcGxheUxvY2F0aW9uVG9v
bHRpcChsaW5rRWxlbWVudCk7Ci0gICAgICAgIHNvdXJjZUNvZGVMb2NhdGlvbi5wb3B1bGF0ZUxp
dmVEaXNwbGF5TG9jYXRpb25TdHJpbmcobGlua0VsZW1lbnQsICJ0ZXh0Q29udGVudCIpOwotCiAg
ICAgICAgIHZhciBzdWJ0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7CiAgICAgICAgIHN1YnRpdGxlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJzdWJ0aXRsZSIpOwot
ICAgICAgICBzdWJ0aXRsZUVsZW1lbnQuYXBwZW5kQ2hpbGQobGlua0VsZW1lbnQpOworCisgICAg
ICAgIHZhciBzb3VyY2VDb2RlTG9jYXRpb24gPSBjYWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9u
OworICAgICAgICBpZiAoc291cmNlQ29kZUxvY2F0aW9uKSB7CisgICAgICAgICAgICBXZWJJbnNw
ZWN0b3IubGlua2lmeUVsZW1lbnQoY2FsbEZyYW1lRWxlbWVudCwgc291cmNlQ29kZUxvY2F0aW9u
KTsKKworICAgICAgICAgICAgdmFyIGxpbmtFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiYSIpOworICAgICAgICAgICAgbGlua0VsZW1lbnQuY2xhc3NOYW1lID0gInNvdXJjZS1saW5r
IjsKKyAgICAgICAgICAgIGxpbmtFbGVtZW50LmhyZWYgPSBzb3VyY2VDb2RlTG9jYXRpb24uc291
cmNlQ29kZS51cmw7CisgICAgICAgICAgICBzdWJ0aXRsZUVsZW1lbnQuYXBwZW5kQ2hpbGQobGlu
a0VsZW1lbnQpOworCisgICAgICAgICAgICBzb3VyY2VDb2RlTG9jYXRpb24ucG9wdWxhdGVMaXZl
RGlzcGxheUxvY2F0aW9uVG9vbHRpcChsaW5rRWxlbWVudCk7CisgICAgICAgICAgICBzb3VyY2VD
b2RlTG9jYXRpb24ucG9wdWxhdGVMaXZlRGlzcGxheUxvY2F0aW9uU3RyaW5nKGxpbmtFbGVtZW50
LCAidGV4dENvbnRlbnQiKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChjYWxsRnJhbWUuZnVu
Y3Rpb25OYW1lKSB7CiAgICAgICAgICAgICB2YXIgaW1nRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImltZyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2VWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2VWaWV3LmpzCmluZGV4IGE4OTM0
NTUuLmM2MmQ0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL0NvbnNvbGVNZXNzYWdlVmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZVZpZXcuanMKQEAgLTI4NiwxMiAr
Mjg2LDEyIEBAIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcgPSBjbGFzcyBDb25zb2xl
TWVzc2FnZVZpZXcgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuCiAgICAgICAgIGlmICh0aGlzLl9tZXNz
YWdlLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2Uu
TmV0d29yayB8fCB0aGlzLl9tZXNzYWdlLnJlcXVlc3QpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgdmFyIGZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lID0gdGhpcy5fZmlyc3ROb25OYXRp
dmVDYWxsRnJhbWUoKTsKKyAgICAgICAgdmFyIGZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lID0gdGhp
cy5fbWVzc2FnZS5maXJzdE5vbk5hdGl2ZUNhbGxGcmFtZTsKIAogICAgICAgICB2YXIgY2FsbEZy
YW1lOwogICAgICAgICBpZiAoZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAg
IC8vIEphdmFTY3JpcHQgZXJyb3JzIGFuZCBjb25zb2xlLiogbWV0aG9kcy4KLSAgICAgICAgICAg
IGNhbGxGcmFtZSA9IFdlYkluc3BlY3Rvci5DYWxsRnJhbWUuZnJvbVBheWxvYWQoZmlyc3ROb25O
YXRpdmVDYWxsRnJhbWUpOworICAgICAgICAgICAgY2FsbEZyYW1lID0gZmlyc3ROb25OYXRpdmVD
YWxsRnJhbWU7CiAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbWVzc2FnZS51cmwgJiYgIXRoaXMu
X3Nob3VsZEhpZGVVUkwodGhpcy5fbWVzc2FnZS51cmwpKSB7CiAgICAgICAgICAgICAvLyBDU1Mg
d2FybmluZ3MgaGF2ZSBubyBzdGFjayB0cmFjZXMuCiAgICAgICAgICAgICBjYWxsRnJhbWUgPSBX
ZWJJbnNwZWN0b3IuQ2FsbEZyYW1lLmZyb21QYXlsb2FkKHsKQEAgLTYwNywyMSArNjA3LDYgQEAg
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldyA9IGNsYXNzIENvbnNvbGVNZXNzYWdlVmll
dyBleHRlbmRzIFdlYkluc3BlY3Rvci4KICAgICAgICAgcmV0dXJuIHVybCA9PT0gInVuZGVmaW5l
ZCIgfHwgdXJsID09PSAiW25hdGl2ZSBjb2RlXSI7CiAgICAgfQogCi0gICAgX2ZpcnN0Tm9uTmF0
aXZlQ2FsbEZyYW1lKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fbWVzc2FnZS5zdGFja1Ry
YWNlKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0aGlzLl9tZXNzYWdlLnN0YWNrVHJhY2UubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
IHZhciBmcmFtZSA9IHRoaXMuX21lc3NhZ2Uuc3RhY2tUcmFjZVtpXTsKLSAgICAgICAgICAgIGlm
ICghZnJhbWUudXJsIHx8IGZyYW1lLnVybCA9PT0gIltuYXRpdmUgY29kZV0iKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmV0dXJuIGZyYW1lOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCiAgICAgX2xpbmtpZnlMb2NhdGlvbih1cmws
IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAgICAgIC8vIENvbnNvbGVNZXNz
YWdlIHN0YWNrIHRyYWNlIGxpbmUgbnVtYmVycyBhcmUgb25lLWJhc2VkLgo=
</data>
<flag name="review"
          id="277943"
          type_id="1"
          status="+"
          setter="joepeck"
    />
    <flag name="commit-queue"
          id="277944"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253368</attachid>
            <date>2015-05-18 23:14:23 -0700</date>
            <delta_ts>2015-05-19 00:12:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>15749</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGM0MGZiMjkuLjAzNTljN2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE1LTA1LTE4ICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IENvbnZl
cnQgc3RhY2tUcmFjZSBmcm9tIHJhdyBwYXlsb2FkIGRhdGEgdG8gYW4gYXJyYXkgb2YgQ2FsbEZy
YW1lcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0
OTgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgorCisgICAgICAgICog
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9Mb2dNYW5hZ2VyLmpzOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvTWFpbi5odG1sOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0NhbGxG
cmFtZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxsRnJhbWUuZnJvbVBheWxvYWQpOgor
ICAgICAgICBDb25zaWRlciBhbiBlbXB0eSBzdHJpbmcgdXJsIGFzIGEgbmF0aXZlIGNvZGUgYXMg
aXQgd2FzIGluIAorICAgICAgICBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3Rv
dHlwZS5fZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUKKworICAgICAgICAqIFVzZXJJbnRlcmZhY2Uv
TW9kZWxzL0NvbnNvbGVNZXNzYWdlLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlKToKKyAgICAgICAgQ29udmVydCBfc3RhY2tUcmFjZSBmcm9tIGFuIGFycmF5IG9mIHBh
eWxvYWQgb2JqZWN0cyB0byBXZWJJbnNwZWN0b3IuU3RhY2tUcmFjZSBtb2RlbC4KKworICAgICAg
ICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1N0YWNrVHJhY2UuanM6IEFkZGVkLgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlN0YWNrVHJhY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0YWNrVHJh
Y2UucHJvdG90eXBlLmdldCBjYWxsRnJhbWVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdGFj
a1RyYWNlLnByb3RvdHlwZS5nZXQgZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdGFja1RyYWNlLmZyb21QYXlsb2FkKToKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL1Rlc3QuaHRtbDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0Nh
bGxGcmFtZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lVmlldyk6Cisg
ICAgICAgIERvbid0IHNob3cgYSBVUkwgd2hlbiBzb3VyY2VDb2RlTG9jYXRpb24gaXMgbWlzc2lu
ZywgZml4IHdlYmtpdC5vcmcvYi8xNDUwNzEuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Zp
ZXdzL0NvbnNvbGVNZXNzYWdlVmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5w
cm90b3R5cGUudG9DbGlwYm9hcmRTdHJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2FwcGVuZExvY2F0aW9uTGluayk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fYXBwZW5kU3RhY2tUcmFj
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5f
c2hvdWxkU2hvd1N0YWNrVHJhY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlVmlldy5wcm90b3R5cGUuX2xpbmtpZnlDYWxsRnJhbWUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2ZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1l
KTogRGVsZXRlZC4KKwogMjAxNS0wNS0xOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEltcHJvdmUgUmVsaWFiaWxpdHkgb2Yg
Q2xvc2luZyBhbmQgUmVvcGVuaW5nIEVsZW1lbnRzIFRhYgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTG9nTWFuYWdlci5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xvZ01hbmFnZXIu
anMKaW5kZXggMTE3MzkyNC4uYzg2MjZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTG9nTWFuYWdlci5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Mb2dNYW5hZ2VyLmpzCkBA
IC0zOCw3ICszOCw2IEBAIFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyID0gY2xhc3MgTG9nTWFuYWdl
ciBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBm
cm9tIFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIuCiAKLSAgICAgICAgLy8gRklYTUU6IHN0
YWNrVHJhY2Ugc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBhIG1vZGVsIG9iamVjdC4KICAgICAgICAg
Ly8gRklYTUU6IEdldCBhIHJlcXVlc3QgZnJvbSByZXF1ZXN0IElELgogCiAgICAgICAgIGlmIChw
YXJhbWV0ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTWFpbi5odG1sIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5o
dG1sCmluZGV4IGVlYzkyYzguLmFhYmU1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9NYWluLmh0bWwKQEAgLTI5OSw2ICsyOTksNyBAQAogICAgIDxzY3JpcHQg
c3JjPSJNb2RlbHMvU291cmNlQ29kZVRpbWVsaW5lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0
IHNyYz0iTW9kZWxzL1NvdXJjZU1hcC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1v
ZGVscy9Tb3VyY2VNYXBSZXNvdXJjZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik1v
ZGVscy9TdGFja1RyYWNlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1Rl
eHRNYXJrZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvVGV4dFJhbmdl
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1RpbWVsaW5lTWFya2VyLmpz
Ij48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01vZGVscy9DYWxsRnJhbWUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Nb2RlbHMvQ2FsbEZyYW1lLmpzCmluZGV4IGQ1YWMzYzkuLjM0MjFmNTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DYWxsRnJhbWUu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NhbGxG
cmFtZS5qcwpAQCAtMTA4LDIwICsxMDgsMjMgQEAgV2ViSW5zcGVjdG9yLkNhbGxGcmFtZSA9IGNs
YXNzIENhbGxGcmFtZSBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIAogICAgICAgICB2YXIg
dXJsID0gcGF5bG9hZC51cmw7CiAgICAgICAgIHZhciBuYXRpdmVDb2RlID0gZmFsc2U7CisgICAg
ICAgIHZhciBzb3VyY2VDb2RlTG9jYXRpb24gPSBudWxsOwogCi0gICAgICAgIGlmICh1cmwgPT09
ICJbbmF0aXZlIGNvZGVdIikgeworICAgICAgICBpZiAoIXVybCB8fCB1cmwgPT09ICJbbmF0aXZl
IGNvZGVdIikgewogICAgICAgICAgICAgbmF0aXZlQ29kZSA9IHRydWU7CiAgICAgICAgICAgICB1
cmwgPSBudWxsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHNvdXJjZUNvZGUg
PSBXZWJJbnNwZWN0b3IuZnJhbWVSZXNvdXJjZU1hbmFnZXIucmVzb3VyY2VGb3JVUkwodXJsKTsK
KyAgICAgICAgICAgIGlmICghc291cmNlQ29kZSkKKyAgICAgICAgICAgICAgICBzb3VyY2VDb2Rl
ID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5zY3JpcHRzRm9yVVJMKHVybClbMF07CisK
KyAgICAgICAgICAgIGlmIChzb3VyY2VDb2RlKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGxp
bmVOdW1iZXIgaXMgMS1iYXNlZCwgYnV0IHdlIGV4cGVjdCAwLWJhc2VkLgorICAgICAgICAgICAg
ICAgIHZhciBsaW5lTnVtYmVyID0gcGF5bG9hZC5saW5lTnVtYmVyIC0gMTsKKyAgICAgICAgICAg
ICAgICBzb3VyY2VDb2RlTG9jYXRpb24gPSBzb3VyY2VDb2RlLmNyZWF0ZUxhenlTb3VyY2VDb2Rl
TG9jYXRpb24obGluZU51bWJlciwgcGF5bG9hZC5jb2x1bW5OdW1iZXIpOworICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgdmFyIHNvdXJjZUNvZGUgPSBXZWJJbnNwZWN0b3IuZnJh
bWVSZXNvdXJjZU1hbmFnZXIucmVzb3VyY2VGb3JVUkwodXJsKTsKLSAgICAgICAgaWYgKCFzb3Vy
Y2VDb2RlKQotICAgICAgICAgICAgc291cmNlQ29kZSA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1h
bmFnZXIuc2NyaXB0c0ZvclVSTCh1cmwpWzBdOwotCi0gICAgICAgIC8vIFRoZSBsaW5lTnVtYmVy
IGlzIDEtYmFzZWQsIGJ1dCB3ZSBleHBlY3QgMC1iYXNlZC4KLSAgICAgICAgdmFyIGxpbmVOdW1i
ZXIgPSBwYXlsb2FkLmxpbmVOdW1iZXIgLSAxOwotCi0gICAgICAgIHZhciBzb3VyY2VDb2RlTG9j
YXRpb24gPSBzb3VyY2VDb2RlID8gc291cmNlQ29kZS5jcmVhdGVMYXp5U291cmNlQ29kZUxvY2F0
aW9uKGxpbmVOdW1iZXIsIHBheWxvYWQuY29sdW1uTnVtYmVyKSA6IG51bGw7CiAgICAgICAgIHZh
ciBmdW5jdGlvbk5hbWUgPSBwYXlsb2FkLmZ1bmN0aW9uTmFtZSAhPT0gImdsb2JhbCBjb2RlIiA/
IHBheWxvYWQuZnVuY3Rpb25OYW1lIDogbnVsbDsKIAogICAgICAgICByZXR1cm4gbmV3IFdlYklu
c3BlY3Rvci5DYWxsRnJhbWUobnVsbCwgc291cmNlQ29kZUxvY2F0aW9uLCBmdW5jdGlvbk5hbWUs
IG51bGwsIG51bGwsIG5hdGl2ZUNvZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NvbnNvbGVNZXNzYWdlLmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NvbnNvbGVNZXNzYWdlLmpzCmluZGV4IDNm
YmFiNDMuLjMyYjI3NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9Db25zb2xlTWVzc2FnZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ29uc29sZU1lc3NhZ2UuanMKQEAgLTQ0LDcgKzQ0LDkg
QEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlID0gY2xhc3MgQ29uc29sZU1lc3NhZ2UgZXh0
ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiAKICAgICAgICAgdGhpcy5fcmVwZWF0Q291bnQgPSBy
ZXBlYXRDb3VudCB8fCAwOwogICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsK
LSAgICAgICAgdGhpcy5fc3RhY2tUcmFjZSA9IHN0YWNrVHJhY2U7CisKKyAgICAgICAgdGhpcy5f
c3RhY2tUcmFjZSA9IFdlYkluc3BlY3Rvci5TdGFja1RyYWNlLmZyb21QYXlsb2FkKHN0YWNrVHJh
Y2UgfHwgW10pOworCiAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSByZXF1ZXN0OwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1N0
YWNrVHJhY2UuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
U3RhY2tUcmFjZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDdmODQ1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL1N0YWNrVHJhY2UuanMKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYklu
c3BlY3Rvci5TdGFja1RyYWNlID0gY2xhc3MgU3RhY2tUcmFjZSBleHRlbmRzIFdlYkluc3BlY3Rv
ci5PYmplY3QKK3sKKyAgICBjb25zdHJ1Y3RvcihjYWxsRnJhbWVzKQorICAgIHsKKyAgICAgICAg
c3VwZXIoKTsKKworICAgICAgICBjb25zb2xlLmFzc2VydChjYWxsRnJhbWVzICYmIGNhbGxGcmFt
ZXMuZXZlcnkoZnVuY3Rpb24oY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lOyB9KSk7CisKKyAgICAgICAgdGhpcy5fY2FsbEZyYW1l
cyA9IGNhbGxGcmFtZXM7CisgICAgfQorCisgICAgZ2V0IGNhbGxGcmFtZXMoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2NhbGxGcmFtZXM7CisgICAgfQorCisgICAgZ2V0IGZpcnN0Tm9u
TmF0aXZlQ2FsbEZyYW1lKCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGZyYW1lIG9mIHRoaXMu
X2NhbGxGcmFtZXMpIHsKKyAgICAgICAgICAgIGlmICghZnJhbWUubmF0aXZlQ29kZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZnJhbWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9CisKKyAgICAvLyBTdGF0aWMKKworICAgIHN0YXRpYyBmcm9tUGF5bG9hZChwYXls
b2FkKQorICAgIHsKKyAgICAgICAgdmFyIGNhbGxGcmFtZXMgPSBwYXlsb2FkLm1hcChXZWJJbnNw
ZWN0b3IuQ2FsbEZyYW1lLmZyb21QYXlsb2FkKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuU3RhY2tUcmFjZShjYWxsRnJhbWVzKTsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC5odG1sIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC5odG1sCmluZGV4IDBkOTUxNTYuLjM3MDRkOWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRt
bAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwKQEAg
LTEyMyw2ICsxMjMsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZVJldmlz
aW9uLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NvdXJjZUNvZGVUaW1l
bGluZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9Tb3VyY2VNYXBSZXNv
dXJjZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9TdGFja1RyYWNlLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1RleHRSYW5nZS5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9UaW1lbGluZU1hcmtlci5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9UaW1lbGluZVJlY29yZGluZy5qcyI+PC9zY3JpcHQ+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9D
YWxsRnJhbWVWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvQ2FsbEZyYW1lVmlldy5qcwppbmRleCBkZmY4NzZlLi5iMjg1YmEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DYWxsRnJhbWVWaWV3Lmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NhbGxGcmFt
ZVZpZXcuanMKQEAgLTI3LDIzICsyNywyNiBAQCBXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lVmlldyA9
IGNsYXNzIENhbGxGcmFtZVZpZXcgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7CiAgICAg
Y29uc3RydWN0b3IoY2FsbEZyYW1lKQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoY2Fs
bEZyYW1lLnNvdXJjZUNvZGVMb2NhdGlvbiAmJiBjYWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9u
LnNvdXJjZUNvZGUpOworICAgICAgICBjb25zb2xlLmFzc2VydChjYWxsRnJhbWUgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lKTsKIAogICAgICAgICB2YXIgY2FsbEZyYW1lRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICBjYWxsRnJhbWVFbGVt
ZW50LmNsYXNzTGlzdC5hZGQoImNhbGwtZnJhbWUiLCBXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lVmll
dy5pY29uQ2xhc3NOYW1lRm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSkpOwogCi0gICAgICAgIHZhciBz
b3VyY2VDb2RlTG9jYXRpb24gPSBjYWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9uOwotICAgICAg
ICBXZWJJbnNwZWN0b3IubGlua2lmeUVsZW1lbnQoY2FsbEZyYW1lRWxlbWVudCwgc291cmNlQ29k
ZUxvY2F0aW9uKTsKLQotICAgICAgICB2YXIgbGlua0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJhIik7Ci0gICAgICAgIGxpbmtFbGVtZW50LmNsYXNzTmFtZSA9ICJzb3VyY2UtbGlu
ayI7Ci0gICAgICAgIGxpbmtFbGVtZW50LmhyZWYgPSBzb3VyY2VDb2RlTG9jYXRpb24uc291cmNl
Q29kZS51cmw7Ci0gICAgICAgIHNvdXJjZUNvZGVMb2NhdGlvbi5wb3B1bGF0ZUxpdmVEaXNwbGF5
TG9jYXRpb25Ub29sdGlwKGxpbmtFbGVtZW50KTsKLSAgICAgICAgc291cmNlQ29kZUxvY2F0aW9u
LnBvcHVsYXRlTGl2ZURpc3BsYXlMb2NhdGlvblN0cmluZyhsaW5rRWxlbWVudCwgInRleHRDb250
ZW50Iik7Ci0KICAgICAgICAgdmFyIHN1YnRpdGxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInNwYW4iKTsKICAgICAgICAgc3VidGl0bGVFbGVtZW50LmNsYXNzTGlzdC5hZGQoInN1
YnRpdGxlIik7Ci0gICAgICAgIHN1YnRpdGxlRWxlbWVudC5hcHBlbmRDaGlsZChsaW5rRWxlbWVu
dCk7CisKKyAgICAgICAgdmFyIHNvdXJjZUNvZGVMb2NhdGlvbiA9IGNhbGxGcmFtZS5zb3VyY2VD
b2RlTG9jYXRpb247CisgICAgICAgIGlmIChzb3VyY2VDb2RlTG9jYXRpb24pIHsKKyAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5saW5raWZ5RWxlbWVudChjYWxsRnJhbWVFbGVtZW50LCBzb3VyY2VD
b2RlTG9jYXRpb24pOworCisgICAgICAgICAgICB2YXIgbGlua0VsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJhIik7CisgICAgICAgICAgICBsaW5rRWxlbWVudC5jbGFzc05hbWUgPSAi
c291cmNlLWxpbmsiOworICAgICAgICAgICAgbGlua0VsZW1lbnQuaHJlZiA9IHNvdXJjZUNvZGVM
b2NhdGlvbi5zb3VyY2VDb2RlLnVybDsKKyAgICAgICAgICAgIHN1YnRpdGxlRWxlbWVudC5hcHBl
bmRDaGlsZChsaW5rRWxlbWVudCk7CisKKyAgICAgICAgICAgIHNvdXJjZUNvZGVMb2NhdGlvbi5w
b3B1bGF0ZUxpdmVEaXNwbGF5TG9jYXRpb25Ub29sdGlwKGxpbmtFbGVtZW50KTsKKyAgICAgICAg
ICAgIHNvdXJjZUNvZGVMb2NhdGlvbi5wb3B1bGF0ZUxpdmVEaXNwbGF5TG9jYXRpb25TdHJpbmco
bGlua0VsZW1lbnQsICJ0ZXh0Q29udGVudCIpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKGNh
bGxGcmFtZS5mdW5jdGlvbk5hbWUpIHsKICAgICAgICAgICAgIHZhciBpbWdFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZVZpZXcuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZVZpZXcuanMK
aW5kZXggYTg5MzQ1NS4uNmJlYjE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2VWaWV3LmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVNZXNzYWdlVmlldy5qcwpA
QCAtMTkxLDcgKzE5MSw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcgPSBjbGFz
cyBDb25zb2xlTWVzc2FnZVZpZXcgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuCiAKICAgICAgICAgdmFy
IGhhc1N0YWNrVHJhY2UgPSB0aGlzLl9zaG91bGRTaG93U3RhY2tUcmFjZSgpOwogICAgICAgICBp
ZiAoaGFzU3RhY2tUcmFjZSkgewotICAgICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdGFja1RyYWNl
LmZvckVhY2goZnVuY3Rpb24oZnJhbWUpIHsKKyAgICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3Rh
Y2tUcmFjZS5jYWxsRnJhbWVzLmZvckVhY2goZnVuY3Rpb24oZnJhbWUpIHsKICAgICAgICAgICAg
ICAgICBjbGlwYm9hcmRTdHJpbmcgKz0gIlxuXHQiICsgKGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihhbm9ueW1vdXMgZnVuY3Rpb24pIikpOwogICAgICAgICAg
ICAgICAgIGlmIChmcmFtZS51cmwpCiAgICAgICAgICAgICAgICAgICAgIGNsaXBib2FyZFN0cmlu
ZyArPSAiICgiICsgV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKGZyYW1lLnVybCkgKyAi
LCBsaW5lICIgKyBmcmFtZS5saW5lTnVtYmVyICsgIikiOwpAQCAtMjg2LDEyICsyODYsMTIgQEAg
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldyA9IGNsYXNzIENvbnNvbGVNZXNzYWdlVmll
dyBleHRlbmRzIFdlYkluc3BlY3Rvci4KICAgICAgICAgaWYgKHRoaXMuX21lc3NhZ2Uuc291cmNl
ID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5OZXR3b3JrIHx8
IHRoaXMuX21lc3NhZ2UucmVxdWVzdCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2
YXIgZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUgPSB0aGlzLl9maXJzdE5vbk5hdGl2ZUNhbGxGcmFt
ZSgpOworICAgICAgICB2YXIgZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUgPSB0aGlzLl9tZXNzYWdl
LnN0YWNrVHJhY2UuZmlyc3ROb25OYXRpdmVDYWxsRnJhbWU7CiAKICAgICAgICAgdmFyIGNhbGxG
cmFtZTsKICAgICAgICAgaWYgKGZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKSB7CiAgICAgICAgICAg
ICAvLyBKYXZhU2NyaXB0IGVycm9ycyBhbmQgY29uc29sZS4qIG1ldGhvZHMuCi0gICAgICAgICAg
ICBjYWxsRnJhbWUgPSBXZWJJbnNwZWN0b3IuQ2FsbEZyYW1lLmZyb21QYXlsb2FkKGZpcnN0Tm9u
TmF0aXZlQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZSA9IGZpcnN0Tm9uTmF0aXZl
Q2FsbEZyYW1lOwogICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX21lc3NhZ2UudXJsICYmICF0aGlz
Ll9zaG91bGRIaWRlVVJMKHRoaXMuX21lc3NhZ2UudXJsKSkgewogICAgICAgICAgICAgLy8gQ1NT
IHdhcm5pbmdzIGhhdmUgbm8gc3RhY2sgdHJhY2VzLgogICAgICAgICAgICAgY2FsbEZyYW1lID0g
V2ViSW5zcGVjdG9yLkNhbGxGcmFtZS5mcm9tUGF5bG9hZCh7CkBAIC0zNDYsMTEgKzM0NiwxMiBA
QCBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3ID0gY2xhc3MgQ29uc29sZU1lc3NhZ2VW
aWV3IGV4dGVuZHMgV2ViSW5zcGVjdG9yLgogICAgICAgICB0aGlzLl9zdGFja1RyYWNlRWxlbWVu
dC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLW1lc3NhZ2Utc3RhY2stdHJhY2UtY29udGFpbmVyIik7
CiAgICAgICAgIHRoaXMuX3N0YWNrVHJhY2VFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUt
bWVzc2FnZS10ZXh0Iik7CiAKLSAgICAgICAgZm9yICh2YXIgY2FsbEZyYW1lIG9mIHRoaXMuX21l
c3NhZ2Uuc3RhY2tUcmFjZSkgeworICAgICAgICBmb3IgKHZhciBjYWxsRnJhbWUgb2YgdGhpcy5f
bWVzc2FnZS5zdGFja1RyYWNlLmNhbGxGcmFtZXMpIHsKICAgICAgICAgICAgIHZhciBjYWxsRnJh
bWVFbGVtZW50ID0gdGhpcy5fc3RhY2tUcmFjZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgibGkiKSk7CiAgICAgICAgICAgICBjYWxsRnJhbWVFbGVtZW50LmNsYXNz
TGlzdC5hZGQoImNvbnNvbGUtbWVzc2FnZS1zdGFjay10cmFjZS1jYWxsLWZyYW1lIik7CiAgICAg
ICAgICAgICBjYWxsRnJhbWVFbGVtZW50LnRleHRDb250ZW50ID0gY2FsbEZyYW1lLmZ1bmN0aW9u
TmFtZSB8fCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihhbm9ueW1vdXMgZnVuY3Rpb24pIik7Ci0g
ICAgICAgICAgICBpZiAoY2FsbEZyYW1lLnVybCAmJiAhdGhpcy5fc2hvdWxkSGlkZVVSTChjYWxs
RnJhbWUudXJsKSkKKyAgICAgICAgICAgIHZhciB1cmwgPSAoY2FsbEZyYW1lLnNvdXJjZUNvZGVM
b2NhdGlvbiAmJiBjYWxsRnJhbWUuc291cmNlQ29kZUxvY2F0aW9uLnNvdXJjZUNvZGUgJiYgY2Fs
bEZyYW1lLnNvdXJjZUNvZGVMb2NhdGlvbi5zb3VyY2VDb2RlLnVybCkgfHwgIiI7CisgICAgICAg
ICAgICBpZiAodXJsICYmICF0aGlzLl9zaG91bGRIaWRlVVJMKHVybCkpCiAgICAgICAgICAgICAg
ICAgY2FsbEZyYW1lRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9saW5raWZ5Q2FsbEZyYW1lKGNh
bGxGcmFtZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTk0LDcgKzU5NSw3IEBAIFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZVZpZXcgPSBjbGFzcyBDb25zb2xlTWVzc2FnZVZpZXcgZXh0ZW5k
cyBXZWJJbnNwZWN0b3IuCiAKICAgICBfc2hvdWxkU2hvd1N0YWNrVHJhY2UoKQogICAgIHsKLSAg
ICAgICAgaWYgKCF0aGlzLl9tZXNzYWdlLnN0YWNrVHJhY2UgfHwgIXRoaXMuX21lc3NhZ2Uuc3Rh
Y2tUcmFjZS5sZW5ndGgpCisgICAgICAgIGlmICghdGhpcy5fbWVzc2FnZS5zdGFja1RyYWNlLmNh
bGxGcmFtZXMubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHJl
dHVybiB0aGlzLl9tZXNzYWdlLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VTb3VyY2UuTmV0d29yawpAQCAtNjA3LDIxICs2MDgsNiBAQCBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2VWaWV3ID0gY2xhc3MgQ29uc29sZU1lc3NhZ2VWaWV3IGV4dGVuZHMgV2Vi
SW5zcGVjdG9yLgogICAgICAgICByZXR1cm4gdXJsID09PSAidW5kZWZpbmVkIiB8fCB1cmwgPT09
ICJbbmF0aXZlIGNvZGVdIjsKICAgICB9CiAKLSAgICBfZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUo
KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9tZXNzYWdlLnN0YWNrVHJhY2UpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21l
c3NhZ2Uuc3RhY2tUcmFjZS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFyIGZyYW1lID0g
dGhpcy5fbWVzc2FnZS5zdGFja1RyYWNlW2ldOwotICAgICAgICAgICAgaWYgKCFmcmFtZS51cmwg
fHwgZnJhbWUudXJsID09PSAiW25hdGl2ZSBjb2RlXSIpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICByZXR1cm4gZnJhbWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICB9Ci0KICAgICBfbGlua2lmeUxvY2F0aW9uKHVybCwgbGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAgLy8gQ29uc29sZU1lc3NhZ2Ugc3RhY2sgdHJh
Y2UgbGluZSBudW1iZXJzIGFyZSBvbmUtYmFzZWQuCkBAIC02MzIsNyArNjE4LDE4IEBAIFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcgPSBjbGFzcyBDb25zb2xlTWVzc2FnZVZpZXcgZXh0
ZW5kcyBXZWJJbnNwZWN0b3IuCiAKICAgICBfbGlua2lmeUNhbGxGcmFtZShjYWxsRnJhbWUpCiAg
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbGlua2lmeUxvY2F0aW9uKGNhbGxGcmFtZS51cmws
IGNhbGxGcmFtZS5saW5lTnVtYmVyLCBjYWxsRnJhbWUuY29sdW1uTnVtYmVyKTsKKyAgICAgICAg
dmFyIHVybCA9ICIiOworICAgICAgICB2YXIgbGluZU51bWJlciA9IDA7CisgICAgICAgIHZhciBj
b2x1bW5OdW1iZXIgPSAwOworCisgICAgICAgIHZhciBzb3VyY2VDb2RlTG9jYXRpb24gPSBjYWxs
RnJhbWUuX3NvdXJjZUNvZGVMb2NhdGlvbjsKKyAgICAgICAgaWYgKHNvdXJjZUNvZGVMb2NhdGlv
bikgeworICAgICAgICAgICAgbGluZU51bWJlciA9IHNvdXJjZUNvZGVMb2NhdGlvbi5saW5lTnVt
YmVyOworICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gc291cmNlQ29kZUxvY2F0aW9uLmNvbHVt
bk51bWJlcjsKKyAgICAgICAgICAgIHVybCA9IHNvdXJjZUNvZGVMb2NhdGlvbi5zb3VyY2VDb2Rl
ICYmIHNvdXJjZUNvZGVMb2NhdGlvbi5zb3VyY2VDb2RlLnVybCB8fCAiIjsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB0aGlzLl9saW5raWZ5TG9jYXRpb24odXJsLCBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIpOwogICAgIH0KIAogICAgIF91c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyhjb2x1
bW5OYW1lc0FyZ3VtZW50KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>