<?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>38269</bug_id>
          
          <creation_ts>2010-04-28 10:43:59 -0700</creation_ts>
          <short_desc>Web Inspector: Allow editing script resources when resource tracking is enabled.</short_desc>
          <delta_ts>2010-04-28 23:10:19 -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 (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>commit-queue</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>218463</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-04-28 10:43:59 -0700</bug_when>
    <thetext>(as previously discussed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218471</commentid>
    <comment_count>1</comment_count>
      <attachid>54579</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-04-28 10:51:36 -0700</bug_when>
    <thetext>Created attachment 54579
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218483</commentid>
    <comment_count>2</comment_count>
      <attachid>54579</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-28 10:57:28 -0700</bug_when>
    <thetext>Comment on attachment 54579
[PATCH] Proposed change.

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 23a6cdb..71333ec 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,24 @@
&gt; +2010-04-28  Pavel Feldman  &lt;pfeldman@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Web Inspector: Allow editing script resources when resource tracking is enabled.
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=38269
&gt; +
&gt; +        * inspector/front-end/ScriptView.js:
&gt; +        * inspector/front-end/ScriptsPanel.js:
&gt; +        (WebInspector.ScriptsPanel.prototype.canEditScripts):
&gt; +        (WebInspector.ScriptsPanel.prototype.editScriptSource):
&gt; +        * inspector/front-end/SourceFrame.js:
&gt; +        (WebInspector.SourceFrame.prototype.get textModel):
&gt; +        * inspector/front-end/SourceView.js:
&gt; +        (WebInspector.SourceView):
&gt; +        (WebInspector.SourceView.prototype._addBreakpoint):
&gt; +        (WebInspector.SourceView.prototype._editLine):
&gt; +        (WebInspector.SourceView.prototype._editLineComplete):
&gt; +        (WebInspector.SourceView.prototype._sourceIDForLine):
&gt; +
&gt;  2010-04-28  Julien Chaffraix  &lt;jchaffraix@webkit.org&gt;
&gt;  
&gt;          Reviewed by Alexey Proskuryakov.
&gt; diff --git a/WebCore/inspector/front-end/ScriptView.js b/WebCore/inspector/front-end/ScriptView.js
&gt; index e55a685..cb10889 100644
&gt; --- a/WebCore/inspector/front-end/ScriptView.js
&gt; +++ b/WebCore/inspector/front-end/ScriptView.js
&gt; @@ -77,11 +77,6 @@ WebInspector.ScriptView.prototype = {
&gt;          WebInspector.panels.scripts.addBreakpoint(breakpoint);
&gt;      },
&gt;  
&gt; -    _editLine: function(line, newContent)
&gt; -    {
&gt; -        WebInspector.panels.scripts.editScriptLine(this.script.sourceID, line, newContent, this._editLineComplete.bind(this));
&gt; -    },
&gt; -
&gt;      _editLineComplete: function(newBody)
&gt;      {
&gt;          this.script.source = newBody;
&gt; @@ -107,6 +102,7 @@ WebInspector.ScriptView.prototype = {
&gt;      _jumpToSearchResult: WebInspector.SourceView.prototype._jumpToSearchResult,
&gt;      _sourceFrameSetupFinished: WebInspector.SourceView.prototype._sourceFrameSetupFinished,
&gt;      _removeBreakpoint: WebInspector.SourceView.prototype._removeBreakpoint,
&gt; +    _editLine: WebInspector.SourceView.prototype._editLine,
&gt;      resize: WebInspector.SourceView.prototype.resize
&gt;  }
&gt;  
&gt; diff --git a/WebCore/inspector/front-end/ScriptsPanel.js b/WebCore/inspector/front-end/ScriptsPanel.js
&gt; index 6f8b605..096fda0 100644
&gt; --- a/WebCore/inspector/front-end/ScriptsPanel.js
&gt; +++ b/WebCore/inspector/front-end/ScriptsPanel.js
&gt; @@ -359,10 +359,10 @@ WebInspector.ScriptsPanel.prototype = {
&gt;  
&gt;      canEditScripts: function()
&gt;      {
&gt; -        return !!InspectorBackend.editScriptLine;
&gt; +        return !!InspectorBackend.editScriptSource;
&gt;      },
&gt;  
&gt; -    editScriptLine: function(sourceID, line, newContent, callback)
&gt; +    editScriptSource: function(sourceID, newContent, line, linesCountToShift, callback)
&gt;      {
&gt;          if (!this.canEditScripts())
&gt;              return;
&gt; @@ -376,7 +376,6 @@ WebInspector.ScriptsPanel.prototype = {
&gt;              newBreakpoints.push(breakpoint);
&gt;          }
&gt;  
&gt; -        var linesCountToShift = newContent.split(&quot;\n&quot;).length - 1;
&gt;          function mycallback(newBody)
&gt;          {
&gt;              callback(newBody);
&gt; @@ -388,7 +387,7 @@ WebInspector.ScriptsPanel.prototype = {
&gt;              }
&gt;          };
&gt;          var callbackId = WebInspector.Callback.wrap(mycallback.bind(this))
&gt; -        InspectorBackend.editScriptLine(callbackId, sourceID, line, newContent);
&gt; +        InspectorBackend.editScriptSource(callbackId, sourceID, newContent);
&gt;      },
&gt;  
&gt;      selectedCallFrameId: function()
&gt; @@ -1004,4 +1003,4 @@ WebInspector.ScriptsPanel.prototype = {
&gt;  
&gt;  WebInspector.ScriptsPanel.prototype.__proto__ = WebInspector.Panel.prototype;
&gt;  
&gt; -WebInspector.didEditScriptLine = WebInspector.Callback.processCallback;
&gt; +WebInspector.didEditScriptSource = WebInspector.Callback.processCallback;
&gt; diff --git a/WebCore/inspector/front-end/SourceFrame.js b/WebCore/inspector/front-end/SourceFrame.js
&gt; index 60fda58..62f9222 100644
&gt; --- a/WebCore/inspector/front-end/SourceFrame.js
&gt; +++ b/WebCore/inspector/front-end/SourceFrame.js
&gt; @@ -152,6 +152,11 @@ WebInspector.SourceFrame.prototype = {
&gt;          this._textModel.setText(null, content);
&gt;      },
&gt;  
&gt; +    get textModel()
&gt; +    {
&gt; +        return this._textModel;
&gt; +    },
&gt; +
&gt;      highlightLine: function(line)
&gt;      {
&gt;          if (this._textViewer)
&gt; diff --git a/WebCore/inspector/front-end/SourceView.js b/WebCore/inspector/front-end/SourceView.js
&gt; index 9fbd161..8aa8bd2 100644
&gt; --- a/WebCore/inspector/front-end/SourceView.js
&gt; +++ b/WebCore/inspector/front-end/SourceView.js
&gt; @@ -32,7 +32,8 @@ WebInspector.SourceView = function(resource)
&gt;  
&gt;      this.element.addStyleClass(&quot;source&quot;);
&gt;  
&gt; -    this.sourceFrame = new WebInspector.SourceFrame(this.contentElement, this._addBreakpoint.bind(this), this._removeBreakpoint.bind(this));
&gt; +    var canEditScripts = WebInspector.panels.scripts.canEditScripts() &amp;&amp; resource.type === WebInspector.Resource.Type.Script;
&gt; +    this.sourceFrame = new WebInspector.SourceFrame(this.contentElement, this._addBreakpoint.bind(this), this._removeBreakpoint.bind(this), canEditScripts ? this._editLine.bind(this) : null);
&gt;      resource.addEventListener(&quot;finished&quot;, this._resourceLoadingFinished, this);
&gt;      this._frameNeedsSetup = true;
&gt;  }
&gt; @@ -105,17 +106,7 @@ WebInspector.SourceView.prototype = {
&gt;  
&gt;      _addBreakpoint: function(line)
&gt;      {
&gt; -        var sourceID = null;
&gt; -        var closestStartingLine = 0;
&gt; -        var scripts = this.resource.scripts;
&gt; -        for (var i = 0; i &lt; scripts.length; ++i) {
&gt; -            var script = scripts[i];
&gt; -            if (script.startingLine &lt;= line &amp;&amp; script.startingLine &gt;= closestStartingLine) {
&gt; -                closestStartingLine = script.startingLine;
&gt; -                sourceID = script.sourceID;
&gt; -            }
&gt; -        }
&gt; -
&gt; +        var sourceID = this._sourceIDForLine(line);
&gt;          if (WebInspector.panels.scripts) {
&gt;              var breakpoint = new WebInspector.Breakpoint(this.resource.url, line, sourceID);
&gt;              WebInspector.panels.scripts.addBreakpoint(breakpoint);
&gt; @@ -128,6 +119,41 @@ WebInspector.SourceView.prototype = {
&gt;              WebInspector.panels.scripts.removeBreakpoint(breakpoint);
&gt;      },
&gt;  
&gt; +    _editLine: function(line, newContent)
&gt; +    {
&gt; +        var lines = [];
&gt; +        var textModel = this.sourceFrame.textModel;
&gt; +        for (var i = 0; i &lt; textModel.linesCount; ++i) {
&gt; +            if (i === line)
&gt; +                lines.push(newContent);
&gt; +            else
&gt; +                lines.push(textModel.line(i));
&gt; +        }
&gt; +
&gt; +        var linesCountToShift = newContent.split(&quot;\n&quot;).length - 1;
&gt; +        WebInspector.panels.scripts.editScriptSource(this._sourceIDForLine(line), lines.join(&quot;\n&quot;), line, linesCountToShift, this._editLineComplete.bind(this));
&gt; +    },
&gt; +
&gt; +    _editLineComplete: function(newBody)
&gt; +    {
&gt; +        this.sourceFrame.updateContent(newBody);
&gt; +    },
&gt; +
&gt; +    _sourceIDForLine: function(line)
&gt; +    {
&gt; +        var sourceID = null;
&gt; +        var closestStartingLine = 0;
&gt; +        var scripts = this.resource.scripts;
&gt; +        for (var i = 0; i &lt; scripts.length; ++i) {
&gt; +            var script = scripts[i];
&gt; +            if (script.startingLine &lt;= line &amp;&amp; script.startingLine &gt;= closestStartingLine) {
&gt; +                closestStartingLine = script.startingLine;
&gt; +                sourceID = script.sourceID;
&gt; +            }
&gt; +        }
&gt; +        return sourceID;
&gt; +    },
&gt; +
&gt;      // The rest of the methods in this prototype need to be generic enough to work with a ScriptView.
&gt;      // The ScriptView prototype pulls these methods into it&apos;s prototype to avoid duplicate code.
&gt;  
&gt; diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
&gt; index 83b0488..4410424 100644
&gt; --- a/WebKit/chromium/ChangeLog
&gt; +++ b/WebKit/chromium/ChangeLog
&gt; @@ -1,3 +1,16 @@
&gt; +2010-04-28  Pavel Feldman  &lt;pfeldman@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Web Inspector: Allow editing script resources when resource tracking is enabled.
&gt; +
&gt; +        http://bugs.webkit.org/show_bug.cgi?id=38269
&gt; + 
&gt; +        * src/js/DebuggerAgent.js:
&gt; +        * src/js/InspectorControllerImpl.js:
&gt; +        (.devtools.InspectorBackendImpl.prototype.setBreakpoint):
&gt; +        (.devtools.InspectorBackendImpl.prototype.editScriptSource):
&gt; +
&gt;  2010-04-28  Yury Semikhatsky  &lt;yurys@chromium.org&gt;
&gt;  
&gt;          Reviewed by Pavel Feldman.
&gt; diff --git a/WebKit/chromium/src/js/DebuggerAgent.js b/WebKit/chromium/src/js/DebuggerAgent.js
&gt; index 2281ad2..67e54aa 100644
&gt; --- a/WebKit/chromium/src/js/DebuggerAgent.js
&gt; +++ b/WebKit/chromium/src/js/DebuggerAgent.js
&gt; @@ -309,18 +309,11 @@ devtools.DebuggerAgent.prototype.addBreakpoint = function(sourceId, line, enable
&gt;  /**
&gt;   * Changes given line of the script. 
&gt;   */
&gt; -devtools.DebuggerAgent.prototype.editScriptLine = function(sourceId, line, newContent, callback)
&gt; +devtools.DebuggerAgent.prototype.editScriptSource = function(sourceId, newContent, callback)
&gt;  {
&gt; -    var script = this.parsedScripts_[sourceId];
&gt; -    if (!script || !script.source)
&gt; -        return;
&gt; -
&gt; -    var lines = script.source.split(&quot;\n&quot;);
&gt; -    lines[line] = newContent;
&gt; -
&gt;      var commandArguments = {
&gt;          &quot;script_id&quot;: sourceId,
&gt; -        &quot;new_source&quot;: lines.join(&quot;\n&quot;)
&gt; +        &quot;new_source&quot;: newContent
&gt;      };
&gt;  
&gt;      var cmd = new devtools.DebugCommand(&quot;changelive&quot;, commandArguments);
&gt; diff --git a/WebKit/chromium/src/js/InspectorControllerImpl.js b/WebKit/chromium/src/js/InspectorControllerImpl.js
&gt; index becc076..aca37a8 100644
&gt; --- a/WebKit/chromium/src/js/InspectorControllerImpl.js
&gt; +++ b/WebKit/chromium/src/js/InspectorControllerImpl.js
&gt; @@ -139,10 +139,10 @@ devtools.InspectorBackendImpl.prototype.removeBreakpoint = function(sourceID, li
&gt;  };
&gt;  
&gt;  
&gt; -devtools.InspectorBackendImpl.prototype.editScriptLine = function(callID, sourceID, line, newContent)
&gt; +devtools.InspectorBackendImpl.prototype.editScriptSource = function(callID, sourceID, newContent)
&gt;  {
&gt; -    devtools.tools.getDebuggerAgent().editScriptLine(sourceID, line, newContent, function(newFullBody) {
&gt; -        WebInspector.didEditScriptLine(callID, newFullBody);
&gt; +    devtools.tools.getDebuggerAgent().editScriptSource(sourceID, newContent, function(newFullBody) {
&gt; +        WebInspector.didEditScriptSource(callID, newFullBody);
&gt;      });
&gt;  };
&gt;  
WebCore/inspector/front-end/SourceView.js:146
 +          var scripts = this.resource.scripts;
Is it always defined?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218494</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-04-28 11:05:29 -0700</bug_when>
    <thetext>&gt; WebCore/inspector/front-end/SourceView.js:146
&gt;  +          var scripts = this.resource.scripts;
&gt; Is it always defined?

Yep, it is lazily created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218854</commentid>
    <comment_count>4</comment_count>
      <attachid>54579</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-28 23:10:12 -0700</bug_when>
    <thetext>Comment on attachment 54579
[PATCH] Proposed change.

Clearing flags on attachment: 54579

Committed r58477: &lt;http://trac.webkit.org/changeset/58477&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218855</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-28 23:10:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54579</attachid>
            <date>2010-04-28 10:51:36 -0700</date>
            <delta_ts>2010-04-28 23:10:12 -0700</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>edit_script</filename>
            <type>text/plain</type>
            <size>10166</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjNhNmNkYi4uNzEzMzNlYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0wNC0yOCAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBbGxvdyBlZGl0aW5nIHNjcmlwdCBy
ZXNvdXJjZXMgd2hlbiByZXNvdXJjZSB0cmFja2luZyBpcyBlbmFibGVkLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODI2OQorCisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQ
YW5lbC5wcm90b3R5cGUuY2FuRWRpdFNjcmlwdHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNj
cmlwdHNQYW5lbC5wcm90b3R5cGUuZWRpdFNjcmlwdFNvdXJjZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuZ2V0IHRleHRNb2RlbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9Tb3VyY2VWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLl9hZGRCcmVha3Bv
aW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fZWRpdExp
bmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLl9lZGl0TGlu
ZUNvbXBsZXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5f
c291cmNlSURGb3JMaW5lKToKKwogMjAxMC0wNC0yOCAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFm
ZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlh
a292LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcu
anMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcwppbmRleCBlNTVh
Njg1Li5jYjEwODg5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2Ny
aXB0Vmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5q
cwpAQCAtNzcsMTEgKzc3LDYgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlID0g
ewogICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuYWRkQnJlYWtwb2ludChicmVh
a3BvaW50KTsKICAgICB9LAogCi0gICAgX2VkaXRMaW5lOiBmdW5jdGlvbihsaW5lLCBuZXdDb250
ZW50KQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmVkaXRTY3Jp
cHRMaW5lKHRoaXMuc2NyaXB0LnNvdXJjZUlELCBsaW5lLCBuZXdDb250ZW50LCB0aGlzLl9lZGl0
TGluZUNvbXBsZXRlLmJpbmQodGhpcykpOwotICAgIH0sCi0KICAgICBfZWRpdExpbmVDb21wbGV0
ZTogZnVuY3Rpb24obmV3Qm9keSkKICAgICB7CiAgICAgICAgIHRoaXMuc2NyaXB0LnNvdXJjZSA9
IG5ld0JvZHk7CkBAIC0xMDcsNiArMTAyLDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJv
dG90eXBlID0gewogICAgIF9qdW1wVG9TZWFyY2hSZXN1bHQ6IFdlYkluc3BlY3Rvci5Tb3VyY2VW
aWV3LnByb3RvdHlwZS5fanVtcFRvU2VhcmNoUmVzdWx0LAogICAgIF9zb3VyY2VGcmFtZVNldHVw
RmluaXNoZWQ6IFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fc291cmNlRnJhbWVT
ZXR1cEZpbmlzaGVkLAogICAgIF9yZW1vdmVCcmVha3BvaW50OiBXZWJJbnNwZWN0b3IuU291cmNl
Vmlldy5wcm90b3R5cGUuX3JlbW92ZUJyZWFrcG9pbnQsCisgICAgX2VkaXRMaW5lOiBXZWJJbnNw
ZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuX2VkaXRMaW5lLAogICAgIHJlc2l6ZTogV2ViSW5z
cGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLnJlc2l6ZQogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCA2ZjhiNjA1Li4wOTZmZGEwIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTM1OSwxMCAr
MzU5LDEwIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogCiAgICAg
Y2FuRWRpdFNjcmlwdHM6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAhIUluc3Bl
Y3RvckJhY2tlbmQuZWRpdFNjcmlwdExpbmU7CisgICAgICAgIHJldHVybiAhIUluc3BlY3RvckJh
Y2tlbmQuZWRpdFNjcmlwdFNvdXJjZTsKICAgICB9LAogCi0gICAgZWRpdFNjcmlwdExpbmU6IGZ1
bmN0aW9uKHNvdXJjZUlELCBsaW5lLCBuZXdDb250ZW50LCBjYWxsYmFjaykKKyAgICBlZGl0U2Ny
aXB0U291cmNlOiBmdW5jdGlvbihzb3VyY2VJRCwgbmV3Q29udGVudCwgbGluZSwgbGluZXNDb3Vu
dFRvU2hpZnQsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLmNhbkVkaXRTY3Jp
cHRzKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNzYsNyArMzc2LDYgQEAgV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBuZXdCcmVha3BvaW50
cy5wdXNoKGJyZWFrcG9pbnQpOwogICAgICAgICB9CiAKLSAgICAgICAgdmFyIGxpbmVzQ291bnRU
b1NoaWZ0ID0gbmV3Q29udGVudC5zcGxpdCgiXG4iKS5sZW5ndGggLSAxOwogICAgICAgICBmdW5j
dGlvbiBteWNhbGxiYWNrKG5ld0JvZHkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNhbGxiYWNr
KG5ld0JvZHkpOwpAQCAtMzg4LDcgKzM4Nyw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogICAgICAgICB9OwogICAgICAgICB2YXIgY2Fs
bGJhY2tJZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKG15Y2FsbGJhY2suYmluZCh0aGlz
KSkKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5lZGl0U2NyaXB0TGluZShjYWxsYmFja0lkLCBz
b3VyY2VJRCwgbGluZSwgbmV3Q29udGVudCk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZWRp
dFNjcmlwdFNvdXJjZShjYWxsYmFja0lkLCBzb3VyY2VJRCwgbmV3Q29udGVudCk7CiAgICAgfSwK
IAogICAgIHNlbGVjdGVkQ2FsbEZyYW1lSWQ6IGZ1bmN0aW9uKCkKQEAgLTEwMDQsNCArMTAwMyw0
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogCiBXZWJJbnNwZWN0
b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuUGFuZWwu
cHJvdG90eXBlOwogCi1XZWJJbnNwZWN0b3IuZGlkRWRpdFNjcmlwdExpbmUgPSBXZWJJbnNwZWN0
b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOworV2ViSW5zcGVjdG9yLmRpZEVkaXRTY3JpcHRT
b3VyY2UgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCmluZGV4IDYwZmRhNTguLjYyZjkyMjIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKQEAgLTE1Miw2
ICsxNTIsMTEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdGhpcy5fdGV4dE1vZGVsLnNldFRleHQobnVsbCwgY29udGVudCk7CiAgICAgfSwKIAorICAg
IGdldCB0ZXh0TW9kZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRNb2RlbDsK
KyAgICB9LAorCiAgICAgaGlnaGxpZ2h0TGluZTogZnVuY3Rpb24obGluZSkKICAgICB7CiAgICAg
ICAgIGlmICh0aGlzLl90ZXh0Vmlld2VyKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291
cmNlVmlldy5qcwppbmRleCA5ZmJkMTYxLi44YWE4YmQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU291cmNlVmlldy5qcwpAQCAtMzIsNyArMzIsOCBAQCBXZWJJbnNwZWN0b3IuU291
cmNlVmlldyA9IGZ1bmN0aW9uKHJlc291cmNlKQogCiAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxl
Q2xhc3MoInNvdXJjZSIpOwogCi0gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUodGhpcy5jb250ZW50RWxlbWVudCwgdGhpcy5fYWRkQnJlYWtwb2ludC5i
aW5kKHRoaXMpLCB0aGlzLl9yZW1vdmVCcmVha3BvaW50LmJpbmQodGhpcykpOworICAgIHZhciBj
YW5FZGl0U2NyaXB0cyA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5jYW5FZGl0U2NyaXB0
cygpICYmIHJlc291cmNlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlw
dDsKKyAgICB0aGlzLnNvdXJjZUZyYW1lID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSh0
aGlzLmNvbnRlbnRFbGVtZW50LCB0aGlzLl9hZGRCcmVha3BvaW50LmJpbmQodGhpcyksIHRoaXMu
X3JlbW92ZUJyZWFrcG9pbnQuYmluZCh0aGlzKSwgY2FuRWRpdFNjcmlwdHMgPyB0aGlzLl9lZGl0
TGluZS5iaW5kKHRoaXMpIDogbnVsbCk7CiAgICAgcmVzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcigi
ZmluaXNoZWQiLCB0aGlzLl9yZXNvdXJjZUxvYWRpbmdGaW5pc2hlZCwgdGhpcyk7CiAgICAgdGhp
cy5fZnJhbWVOZWVkc1NldHVwID0gdHJ1ZTsKIH0KQEAgLTEwNSwxNyArMTA2LDcgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogCiAgICAgX2FkZEJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKGxpbmUpCiAgICAgewotICAgICAgICB2YXIgc291cmNlSUQgPSBudWxsOwotICAgICAg
ICB2YXIgY2xvc2VzdFN0YXJ0aW5nTGluZSA9IDA7Ci0gICAgICAgIHZhciBzY3JpcHRzID0gdGhp
cy5yZXNvdXJjZS5zY3JpcHRzOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBzY3JpcHQgPSBzY3JpcHRzW2ldOwotICAg
ICAgICAgICAgaWYgKHNjcmlwdC5zdGFydGluZ0xpbmUgPD0gbGluZSAmJiBzY3JpcHQuc3RhcnRp
bmdMaW5lID49IGNsb3Nlc3RTdGFydGluZ0xpbmUpIHsKLSAgICAgICAgICAgICAgICBjbG9zZXN0
U3RhcnRpbmdMaW5lID0gc2NyaXB0LnN0YXJ0aW5nTGluZTsKLSAgICAgICAgICAgICAgICBzb3Vy
Y2VJRCA9IHNjcmlwdC5zb3VyY2VJRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCisgICAg
ICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lKTsKICAgICAgICAg
aWYgKFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cykgewogICAgICAgICAgICAgdmFyIGJyZWFr
cG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQodGhpcy5yZXNvdXJjZS51cmwsIGxp
bmUsIHNvdXJjZUlEKTsKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5h
ZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwpAQCAtMTI4LDYgKzExOSw0MSBAQCBXZWJJbnNwZWN0
b3IuU291cmNlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFu
ZWxzLnNjcmlwdHMucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICB9LAogCisgICAg
X2VkaXRMaW5lOiBmdW5jdGlvbihsaW5lLCBuZXdDb250ZW50KQorICAgIHsKKyAgICAgICAgdmFy
IGxpbmVzID0gW107CisgICAgICAgIHZhciB0ZXh0TW9kZWwgPSB0aGlzLnNvdXJjZUZyYW1lLnRl
eHRNb2RlbDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0TW9kZWwubGluZXNDb3Vu
dDsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSA9PT0gbGluZSkKKyAgICAgICAgICAgICAgICBs
aW5lcy5wdXNoKG5ld0NvbnRlbnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGxpbmVzLnB1c2godGV4dE1vZGVsLmxpbmUoaSkpOworICAgICAgICB9CisKKyAgICAgICAgdmFy
IGxpbmVzQ291bnRUb1NoaWZ0ID0gbmV3Q29udGVudC5zcGxpdCgiXG4iKS5sZW5ndGggLSAxOwor
ICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuZWRpdFNjcmlwdFNvdXJjZSh0aGlz
Ll9zb3VyY2VJREZvckxpbmUobGluZSksIGxpbmVzLmpvaW4oIlxuIiksIGxpbmUsIGxpbmVzQ291
bnRUb1NoaWZ0LCB0aGlzLl9lZGl0TGluZUNvbXBsZXRlLmJpbmQodGhpcykpOworICAgIH0sCisK
KyAgICBfZWRpdExpbmVDb21wbGV0ZTogZnVuY3Rpb24obmV3Qm9keSkKKyAgICB7CisgICAgICAg
IHRoaXMuc291cmNlRnJhbWUudXBkYXRlQ29udGVudChuZXdCb2R5KTsKKyAgICB9LAorCisgICAg
X3NvdXJjZUlERm9yTGluZTogZnVuY3Rpb24obGluZSkKKyAgICB7CisgICAgICAgIHZhciBzb3Vy
Y2VJRCA9IG51bGw7CisgICAgICAgIHZhciBjbG9zZXN0U3RhcnRpbmdMaW5lID0gMDsKKyAgICAg
ICAgdmFyIHNjcmlwdHMgPSB0aGlzLnJlc291cmNlLnNjcmlwdHM7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHNjcmlw
dCA9IHNjcmlwdHNbaV07CisgICAgICAgICAgICBpZiAoc2NyaXB0LnN0YXJ0aW5nTGluZSA8PSBs
aW5lICYmIHNjcmlwdC5zdGFydGluZ0xpbmUgPj0gY2xvc2VzdFN0YXJ0aW5nTGluZSkgeworICAg
ICAgICAgICAgICAgIGNsb3Nlc3RTdGFydGluZ0xpbmUgPSBzY3JpcHQuc3RhcnRpbmdMaW5lOwor
ICAgICAgICAgICAgICAgIHNvdXJjZUlEID0gc2NyaXB0LnNvdXJjZUlEOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBzb3VyY2VJRDsKKyAgICB9LAorCiAgICAgLy8g
VGhlIHJlc3Qgb2YgdGhlIG1ldGhvZHMgaW4gdGhpcyBwcm90b3R5cGUgbmVlZCB0byBiZSBnZW5l
cmljIGVub3VnaCB0byB3b3JrIHdpdGggYSBTY3JpcHRWaWV3LgogICAgIC8vIFRoZSBTY3JpcHRW
aWV3IHByb3RvdHlwZSBwdWxscyB0aGVzZSBtZXRob2RzIGludG8gaXQncyBwcm90b3R5cGUgdG8g
YXZvaWQgZHVwbGljYXRlIGNvZGUuCiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDgzYjA0ODguLjQ0MTA0MjQg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTA0LTI4ICBQYXZlbCBGZWxkbWFu
ICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFsbG93IGVkaXRpbmcgc2NyaXB0IHJl
c291cmNlcyB3aGVuIHJlc291cmNlIHRyYWNraW5nIGlzIGVuYWJsZWQuCisKKyAgICAgICAgaHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzgyNjkKKyAKKyAgICAgICAgKiBz
cmMvanMvRGVidWdnZXJBZ2VudC5qczoKKyAgICAgICAgKiBzcmMvanMvSW5zcGVjdG9yQ29udHJv
bGxlckltcGwuanM6CisgICAgICAgICguZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJv
dG90eXBlLnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoLmRldnRvb2xzLkluc3BlY3RvckJhY2tl
bmRJbXBsLnByb3RvdHlwZS5lZGl0U2NyaXB0U291cmNlKToKKwogMjAxMC0wNC0yOCAgWXVyeSBT
ZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQ
YXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dl
ckFnZW50LmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlckFnZW50LmpzCmluZGV4
IDIyODFhZDIuLjY3ZTU0YWEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGVi
dWdnZXJBZ2VudC5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyQWdlbnQu
anMKQEAgLTMwOSwxOCArMzA5LDExIEBAIGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBl
LmFkZEJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJZCwgbGluZSwgZW5hYmxlCiAvKioKICAq
IENoYW5nZXMgZ2l2ZW4gbGluZSBvZiB0aGUgc2NyaXB0LiAKICAqLwotZGV2dG9vbHMuRGVidWdn
ZXJBZ2VudC5wcm90b3R5cGUuZWRpdFNjcmlwdExpbmUgPSBmdW5jdGlvbihzb3VyY2VJZCwgbGlu
ZSwgbmV3Q29udGVudCwgY2FsbGJhY2spCitkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlw
ZS5lZGl0U2NyaXB0U291cmNlID0gZnVuY3Rpb24oc291cmNlSWQsIG5ld0NvbnRlbnQsIGNhbGxi
YWNrKQogewotICAgIHZhciBzY3JpcHQgPSB0aGlzLnBhcnNlZFNjcmlwdHNfW3NvdXJjZUlkXTsK
LSAgICBpZiAoIXNjcmlwdCB8fCAhc2NyaXB0LnNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdmFyIGxpbmVzID0gc2NyaXB0LnNvdXJjZS5zcGxpdCgiXG4iKTsKLSAgICBsaW5lc1tsaW5l
XSA9IG5ld0NvbnRlbnQ7Ci0KICAgICB2YXIgY29tbWFuZEFyZ3VtZW50cyA9IHsKICAgICAgICAg
InNjcmlwdF9pZCI6IHNvdXJjZUlkLAotICAgICAgICAibmV3X3NvdXJjZSI6IGxpbmVzLmpvaW4o
IlxuIikKKyAgICAgICAgIm5ld19zb3VyY2UiOiBuZXdDb250ZW50CiAgICAgfTsKIAogICAgIHZh
ciBjbWQgPSBuZXcgZGV2dG9vbHMuRGVidWdDb21tYW5kKCJjaGFuZ2VsaXZlIiwgY29tbWFuZEFy
Z3VtZW50cyk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNv
bnRyb2xsZXJJbXBsLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9s
bGVySW1wbC5qcwppbmRleCBiZWNjMDc2Li5hY2EzN2E4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKQEAgLTEzOSwxMCArMTM5LDEw
IEBAIGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5yZW1vdmVCcmVha3Bv
aW50ID0gZnVuY3Rpb24oc291cmNlSUQsIGxpCiB9OwogCiAKLWRldnRvb2xzLkluc3BlY3RvckJh
Y2tlbmRJbXBsLnByb3RvdHlwZS5lZGl0U2NyaXB0TGluZSA9IGZ1bmN0aW9uKGNhbGxJRCwgc291
cmNlSUQsIGxpbmUsIG5ld0NvbnRlbnQpCitkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5w
cm90b3R5cGUuZWRpdFNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKGNhbGxJRCwgc291cmNlSUQsIG5l
d0NvbnRlbnQpCiB7Ci0gICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLmVkaXRT
Y3JpcHRMaW5lKHNvdXJjZUlELCBsaW5lLCBuZXdDb250ZW50LCBmdW5jdGlvbihuZXdGdWxsQm9k
eSkgewotICAgICAgICBXZWJJbnNwZWN0b3IuZGlkRWRpdFNjcmlwdExpbmUoY2FsbElELCBuZXdG
dWxsQm9keSk7CisgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLmVkaXRTY3Jp
cHRTb3VyY2Uoc291cmNlSUQsIG5ld0NvbnRlbnQsIGZ1bmN0aW9uKG5ld0Z1bGxCb2R5KSB7Cisg
ICAgICAgIFdlYkluc3BlY3Rvci5kaWRFZGl0U2NyaXB0U291cmNlKGNhbGxJRCwgbmV3RnVsbEJv
ZHkpOwogICAgIH0pOwogfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>