<?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>148562</bug_id>
          
          <creation_ts>2015-08-27 22:20:26 -0700</creation_ts>
          <short_desc>Web Inspector: Type bubbles missing for computed methods and methods on object literals</short_desc>
          <delta_ts>2015-09-23 13:59:30 -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>
          
          
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>bburg</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>saam</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1121584</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-08-27 22:20:26 -0700</bug_when>
    <thetext>* SUMMARY
Type bubbles missing for computed property methods.

* TEST
1 var o = {
2     [&quot;computed&quot;]() {
3         return 10;
4     }
5 }
6 console.log(o.computed());

* RESULTS
- Expected type bubbles for the method &quot;computed&quot; but got none</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121586</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-08-27 22:20:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/22470287&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121588</commentid>
    <comment_count>2</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-08-27 22:25:01 -0700</bug_when>
    <thetext>Seems to be broken for computed and regular methods:

* TEST
var o = {
    [&quot;computed&quot;](){return 10},
    normal(){return 20}
}
console.log(o.computed());
console.log(o.normal());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121620</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-08-28 00:00:04 -0700</bug_when>
    <thetext>There appear to be multiple issues here. I&apos;ve broken them out into these test cases.

  1. I don&apos;t see any divot registered for computed property methods:
      TEST: o = { [&quot;computed&quot;]() { return 1; }; o.computed();
      TEST: o = { [&quot;computed&quot;]   () { return 1; }; o.computed();

  2. Object literal property methods.
      TEST: o = { method1() { return 1; }; o.method1();

  3. Object literal property methods with spaces in the declaration.
      TEST: o = { method1  () { return 1; }; o.method1();

The patch below gets (2), which I think is the common case of object literal property methods, working. It seems the divot for (2) is the last character of the method name, but the divot for (3) is the &apos;(&apos; character. All of these could likely benefit from cleanup in the backend.

&gt; --- a/Source/JavaScriptCore/runtime/TypeProfiler.cpp
&gt; +++ b/Source/JavaScriptCore/runtime/TypeProfiler.cpp
&gt; @@ -783,6 +787,12 @@ WebInspector.ScriptSyntaxTree = class ScriptSyntaxTree extends WebInspector.Obje
&gt;              if (result.kind === &quot;get&quot; || result.kind === &quot;set&quot;) {
&gt;                  result.value.isGetterOrSetter = true;
&gt;                  result.value.getterOrSetterRange = result.key.range;
&gt; +            } else if (node.method) {
&gt; +                // FIXME: &lt;https://webkit.org/b/143171&gt; Web Inspector: Improve Type Profiler Support for ES6 Syntax
&gt; +                // The backend has confusing handling of the divot here.
&gt; +                // Though this is not always result.key.range[1], it often is.
&gt; +                result.value.isGetterOrSetter = true;
&gt; +                result.value.getterOrSetterRange = [result.key.range[1], result.value.range[1]];
&gt;              }
&gt;              break;
&gt;          case &quot;ReturnStatement&quot;:

Saam, maybe you can advise me here, since I understand this is a particular tricky area of Type Profiling (divots).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121845</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-28 15:16:28 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; There appear to be multiple issues here. I&apos;ve broken them out into these
&gt; test cases.
&gt; 
&gt;   1. I don&apos;t see any divot registered for computed property methods:
&gt;       TEST: o = { [&quot;computed&quot;]() { return 1; }; o.computed();
&gt;       TEST: o = { [&quot;computed&quot;]   () { return 1; }; o.computed();
&gt; 
&gt;   2. Object literal property methods.
&gt;       TEST: o = { method1() { return 1; }; o.method1();
&gt; 
&gt;   3. Object literal property methods with spaces in the declaration.
&gt;       TEST: o = { method1  () { return 1; }; o.method1();
&gt; 
&gt; The patch below gets (2), which I think is the common case of object literal
&gt; property methods, working. It seems the divot for (2) is the last character
&gt; of the method name, but the divot for (3) is the &apos;(&apos; character. All of these
&gt; could likely benefit from cleanup in the backend.
&gt; 
&gt; &gt; --- a/Source/JavaScriptCore/runtime/TypeProfiler.cpp
&gt; &gt; +++ b/Source/JavaScriptCore/runtime/TypeProfiler.cpp
&gt; &gt; @@ -783,6 +787,12 @@ WebInspector.ScriptSyntaxTree = class ScriptSyntaxTree extends WebInspector.Obje
&gt; &gt;              if (result.kind === &quot;get&quot; || result.kind === &quot;set&quot;) {
&gt; &gt;                  result.value.isGetterOrSetter = true;
&gt; &gt;                  result.value.getterOrSetterRange = result.key.range;
&gt; &gt; +            } else if (node.method) {
&gt; &gt; +                // FIXME: &lt;https://webkit.org/b/143171&gt; Web Inspector: Improve Type Profiler Support for ES6 Syntax
&gt; &gt; +                // The backend has confusing handling of the divot here.
&gt; &gt; +                // Though this is not always result.key.range[1], it often is.
&gt; &gt; +                result.value.isGetterOrSetter = true;
&gt; &gt; +                result.value.getterOrSetterRange = [result.key.range[1], result.value.range[1]];
&gt; &gt;              }
&gt; &gt;              break;
&gt; &gt;          case &quot;ReturnStatement&quot;:
&gt; 
&gt; Saam, maybe you can advise me here, since I understand this is a particular
&gt; tricky area of Type Profiling (divots).

Sure. There are a few things at play here:
1. We need a better name for isGetterOrSetter. I think this really means how things are formed
textually in the JS program: i.e, there is no &quot;function&quot; keyword, but just &quot;get&quot;/&quot;set&quot;/&lt;methodName&gt;. We should probably
come up with a good name the expresses this idea.

2. It looks like some divots are wrong and should be fixed. The new approach is to have these divots
on the earliest possible character that describes a function: &quot;s&quot; in &quot;set&quot;, &quot;g&quot; in &quot;get&quot;,
&quot;m&quot; in &quot;method1&quot;, etc. So we should use the &quot;[&quot; for computed properties. We should
fix these divots in JSC to be consistent. It looks like (2)/(3) are not consistent.
I&apos;m not sure about (1) but we should make it &quot;[&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121851</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-28 15:22:30 -0700</bug_when>
    <thetext>It looks like some of the interesting code that does this is in:
ScriptSynaxTree::static functionReturnDivot(node).

I&apos;ve opened a JSC bug to fix what JSC does:
https://bugs.webkit.org/show_bug.cgi?id=148594</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128187</commentid>
    <comment_count>6</comment_count>
      <attachid>261788</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-22 18:04:12 -0700</bug_when>
    <thetext>Created attachment 261788
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128188</commentid>
    <comment_count>7</comment_count>
      <attachid>261789</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-22 18:09:24 -0700</bug_when>
    <thetext>Created attachment 261789
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128336</commentid>
    <comment_count>8</comment_count>
      <attachid>261789</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-09-23 09:34:50 -0700</bug_when>
    <thetext>Comment on attachment 261789
patch

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

r=me

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:110
&gt; +            var offset = node.typeProfilingReturnDivot;
&gt;              this._insertToken(offset, node, true, WebInspector.TypeTokenView.TitleType.ReturnStatement, functionName);

Nit: Could eliminate the temporary variable now.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:160
&gt; +        // &quot;f&quot; in &quot;function&quot;, &quot;s&quot; in &quot;set&quot;, &quot;g&quot; in &quot;get&quot;, first letter in any method name for classes, the &quot;[&quot; for computed properties.

Nit: Methods can be in Object Literals as well as Classes.
Nit: So the &quot;[&quot; for computed is only for method syntax as well? ({ [&quot;x&quot;](){} }) versus ({ [&quot;x&quot;]: function(){} })

Having a test that covers just these cases (makeNode(...) check typeProfilingReturnDivot) would be fantastic, but I won&apos;t block this on a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128344</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-23 10:12:45 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 261789 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=261789&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:110
&gt; &gt; +            var offset = node.typeProfilingReturnDivot;
&gt; &gt;              this._insertToken(offset, node, true, WebInspector.TypeTokenView.TitleType.ReturnStatement, functionName);
&gt; 
&gt; Nit: Could eliminate the temporary variable now.
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:160
&gt; &gt; +        // &quot;f&quot; in &quot;function&quot;, &quot;s&quot; in &quot;set&quot;, &quot;g&quot; in &quot;get&quot;, first letter in any method name for classes, the &quot;[&quot; for computed properties.
&gt; 
&gt; Nit: Methods can be in Object Literals as well as Classes.
&gt; Nit: So the &quot;[&quot; for computed is only for method syntax as well? ({ [&quot;x&quot;](){}
&gt; }) versus ({ [&quot;x&quot;]: function(){} })
&gt; 
&gt; Having a test that covers just these cases (makeNode(...) check
&gt; typeProfilingReturnDivot) would be fantastic, but I won&apos;t block this on a
&gt; test.
I actually only tested the computer method syntax. I&apos;ll make sure everything
works for both syntax types and write tests for them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128384</commentid>
    <comment_count>10</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-23 13:59:30 -0700</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/190184</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261788</attachid>
            <date>2015-09-22 18:04:12 -0700</date>
            <delta_ts>2015-09-22 18:09:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>7476</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMTQ2KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE1LTA5LTIyICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFR5cGUgYnViYmxlcyBtaXNzaW5nIGZvciBjb21wdXRlZCBtZXRob2Rz
IGFuZCBtZXRob2RzIG9uIG9iamVjdCBsaXRlcmFscworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBzdXJlIHRoYXQgY29tcHV0
ZWQgbWV0aG9kcyBhcmUgd29ya2luZworICAgICAgICBmb3IgYm90aCBjbGFzc2VzIGFuZCBvYmpl
Y3QgbGl0ZXJhbHMuIEFsc28sIG1ldGhvZHMgbm93CisgICAgICAgIHdvcmsgb24gb2JqZWN0IGxp
dGVyYWxzLiBUaGlzIHBhdGNoIGFsc28gY2xlYW5zIHVwIHRoZQorICAgICAgICAiaXNHZXR0ZXJP
clNldHRlciIgYW5kICJnZXR0ZXJPclNldHRlclJhbmdlIiBmaWVsZHMuCisgICAgICAgIEJhc2lj
YWxseSwgd2UgdXNlZCB0aGlzIGFzIGEgd2F5IHRvIGFzayB0aGUgdHlwZSBwcm9maWxlcgorICAg
ICAgICBmb3IgdGhlIHJldHVybiB0eXBlcyBvZiBhIGZ1bmN0aW9uLiBOb3csIHdlIGp1c3QgaGF2
ZQorICAgICAgICBhIGZpZWxkIGNhbGxlZCAidHlwZVByb2ZpbGluZ1JldHVybkRpdm90IiB0aGF0
IGlzIHNldAorICAgICAgICBvbiBhbGwgZnVuY3Rpb25zIHNvIHdlIGRvbid0IG5lZWQgdG8gY29u
ZGl0aW9uYWxseSBhc2sKKyAgICAgICAgaWYgaXQncyBhIGdldHRlciBvciBzZXR0ZXIuCisKKyAg
ICAgICAgVGhlIGRpdm90cyB3ZSB1c2UgYXJlOgorICAgICAgICAiZiIgaW4gImZ1bmN0aW9uIiwg
InMiIGluICJzZXQiLCAiZyIgaW4gImdldCIsIGZpcnN0IGxldHRlciBpbiBhbnkgbWV0aG9kIG5h
bWUgZm9yIGNsYXNzZXMsIHRoZSAiWyIgZm9yIGNvbXB1dGVkIHByb3BlcnRpZXMuCisKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLl9pbnNlcnRU
eXBlVG9rZW4pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRy
ZWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5mdW5jdGlvblJl
dHVybkRpdm90KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3Rv
dHlwZS5fcmVjdXJzZUFycmF5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLnByb3RvdHlwZS5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlKToKKwogMjAxNS0wOS0yMiAgU2FhbSBiYXJhdGkgIDxz
YmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbRVM2XSBJbXByb3Zl
IFR5cGUgUHJvZmlsZXIgU3VwcG9ydCBmb3IgQXJyb3cgRnVuY3Rpb25zCkluZGV4OiBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0
b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCShyZXZpc2lvbiAxOTAxNDYpCisrKyBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5B
bm5vdGF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBXZWJJbnNwZWN0
b3IuVHlwZVRva2VuQW5ub3RhdG9yID0gY2xhc3MgCiAgICAgICAgIHZhciBzY3JpcHRTeW50YXhU
cmVlID0gdGhpcy5fc2NyaXB0Ll9zY3JpcHRTeW50YXhUcmVlOwogICAgICAgICBpZiAoIW5vZGUu
YXR0YWNobWVudHMuX190eXBlVG9rZW4gJiYgKHNjcmlwdFN5bnRheFRyZWUuY29udGFpbnNOb25F
bXB0eVJldHVyblN0YXRlbWVudChub2RlLmJvZHkpIHx8ICFmdW5jdGlvblJldHVyblR5cGUudHlw
ZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuVW5kZWZpbmVk
KSkpIHsKICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBub2RlLmlkID8gbm9kZS5pZC5u
YW1lIDogbnVsbDsKLSAgICAgICAgICAgIHZhciBvZmZzZXQgPSBub2RlLmlzR2V0dGVyT3JTZXR0
ZXIgPyBub2RlLmdldHRlck9yU2V0dGVyUmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdOworICAgICAg
ICAgICAgdmFyIG9mZnNldCA9IG5vZGUudHlwZVByb2ZpbGluZ1JldHVybkRpdm90OwogICAgICAg
ICAgICAgdGhpcy5faW5zZXJ0VG9rZW4ob2Zmc2V0LCBub2RlLCB0cnVlLCBXZWJJbnNwZWN0b3Iu
VHlwZVRva2VuVmlldy5UaXRsZVR5cGUuUmV0dXJuU3RhdGVtZW50LCBmdW5jdGlvbk5hbWUpOwog
ICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCShyZXZpc2lvbiAx
OTAxNDYpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2Ny
aXB0U3ludGF4VHJlZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMTU3LDggKzE1Nyw4IEBAIFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAgICAgaWYgKCFET01BZ2Vu
dC5oYXNFdmVudCgicHNldWRvRWxlbWVudEFkZGVkIikpCiAgICAgICAgICAgICByZXR1cm4gbm9k
ZS5ib2R5LnJhbmdlWzBdOwogCi0gICAgICAgIC8vICJmIiBpbiBmdW5jdGlvbiwgInMiIGluIHNl
dCwgImciIGluIGdldCwgZmlyc3QgbGV0dGVyIGluIGFueSBtZXRob2QgbmFtZSBmb3IgY2xhc3Nl
cy4KLSAgICAgICAgcmV0dXJuIG5vZGUuaXNHZXR0ZXJPclNldHRlciA/IG5vZGUuZ2V0dGVyT3JT
ZXR0ZXJSYW5nZVswXSA6IG5vZGUucmFuZ2VbMF07CisgICAgICAgIC8vICJmIiBpbiAiZnVuY3Rp
b24iLCAicyIgaW4gInNldCIsICJnIiBpbiAiZ2V0IiwgZmlyc3QgbGV0dGVyIGluIGFueSBtZXRo
b2QgbmFtZSBmb3IgY2xhc3NlcywgdGhlICJbIiBmb3IgY29tcHV0ZWQgcHJvcGVydGllcy4KKyAg
ICAgICAgcmV0dXJuIG5vZGUudHlwZVByb2ZpbGluZ1JldHVybkRpdm90OwogICAgIH0KIAogICAg
IHVwZGF0ZVR5cGVzKG5vZGVzVG9VcGRhdGUsIGNhbGxiYWNrKQpAQCAtNTE2LDcgKzUxNiw3IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICB9CiAKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgZnJvbSBlc3ByaW1hJ3MgQWJzdHJhY3QgU3ludGF4
IFRyZWUgdG8gb3Vycy4KLSAgICAvLyBNb3N0bHksIHRoaXMgaXMganVzdCB0aGUgaWRlbnRpdHkg
ZnVuY3Rpb24uIFdlJ3ZlIGFkZGVkIGFuIGV4dHJhIGlzR2V0dGVyT3JTZXR0ZXIgcHJvcGVydHkg
Zm9yIGZ1bmN0aW9ucy4KKyAgICAvLyBNb3N0bHksIHRoaXMgaXMganVzdCB0aGUgaWRlbnRpdHkg
ZnVuY3Rpb24uIFdlJ3ZlIGFkZGVkIGFuIGV4dHJhIHR5cGVQcm9maWxpbmdSZXR1cm5EaXZvdCBw
cm9wZXJ0eSBmb3IgZnVuY3Rpb25zL21ldGhvZHMuCiAgICAgLy8gT3VyIEFTVCBjb21wbGllcyB3
aXRoIHRoZSBNb3ppbGxhIHBhcnNlciBBUEk6CiAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1Byb2plY3RzL1NwaWRlck1vbmtleS9QYXJzZXJf
QVBJCiAgICAgX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlKQpAQCAtNTQ2LDcgKzU0Niw3
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAgICAgICAg
ICAgICBkZWZhdWx0czogbm9kZS5kZWZhdWx0cy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlLmJpbmQodGhpcykpLAogICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpLAogICAgICAgICAgICAgICAgIGV4cHJlc3Npb246
IG5vZGUuZXhwcmVzc2lvbiwgLy8gQm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBib2R5IGEgc2lu
Z2xlIGV4cHJlc3Npb24gb3IgYSBibG9jayBzdGF0ZW1lbnQuCi0gICAgICAgICAgICAgICAgaXNH
ZXR0ZXJPclNldHRlcjogZmFsc2UKKyAgICAgICAgICAgICAgICB0eXBlUHJvZmlsaW5nUmV0dXJu
RGl2b3Q6IG5vZGUucmFuZ2VbMF0KICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSAiQXNzaWdubWVudEV4cHJlc3Npb24iOgpAQCAtNjg5LDcgKzY4OSw3IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAgICAgICAgICAg
ICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUu
YmluZCh0aGlzKSksCiAgICAgICAgICAgICAgICAgZGVmYXVsdHM6IG5vZGUuZGVmYXVsdHMubWFw
KHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKSwKICAgICAgICAgICAg
ICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KSwKLSAg
ICAgICAgICAgICAgICBpc0dldHRlck9yU2V0dGVyOiBmYWxzZSAvLyBUaGlzIGlzIG9idmlvdXMs
IGJ1dCBpcyBjb252ZW5pZW50IG5vbmUgdGhlIGxlc3MgYi9jIERlY2xhcmF0aW9ucyBhbmQgRXhw
cmVzc2lvbnMgYXJlIG9mdGVuIGludGVydHdpbmVkLgorICAgICAgICAgICAgICAgIHR5cGVQcm9m
aWxpbmdSZXR1cm5EaXZvdDogbm9kZS5yYW5nZVswXQogICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlICJGdW5jdGlvbkV4cHJlc3Npb24iOgpAQCAtNjk5LDcg
KzY5OSw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAg
ICAgICAgICAgICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5
bnRheFRyZWUuYmluZCh0aGlzKSksCiAgICAgICAgICAgICAgICAgZGVmYXVsdHM6IG5vZGUuZGVm
YXVsdHMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKSwKICAg
ICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5i
b2R5KSwKLSAgICAgICAgICAgICAgICBpc0dldHRlck9yU2V0dGVyOiBmYWxzZSAvLyBJZiB0cnVl
LCBpdCBpcyBzZXQgaW4gdGhlIFByb3BlcnR5IEFTVCBub2RlLgorICAgICAgICAgICAgICAgIHR5
cGVQcm9maWxpbmdSZXR1cm5EaXZvdDogbm9kZS5yYW5nZVswXSAvLyBUaGlzIG1heSBiZSBvdmVy
cmlkZGVuIGluIHRoZSBQcm9wZXJ0eSBBU1Qgbm9kZS4KICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSAiSWRlbnRpZmllciI6CkBAIC03NjMsMTQgKzc2Myw3
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAgICAgICAg
ICAgICBraW5kOiBub2RlLmtpbmQsCiAgICAgICAgICAgICAgICAgc3RhdGljOiBub2RlLnN0YXRp
YwogICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQua2luZCA9PT0gImdldCIg
fHwgcmVzdWx0LmtpbmQgPT09ICJzZXQiKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3Ro
ID0gcmVzdWx0LmtleS5yYW5nZVsxXSAtIHJlc3VsdC5rZXkucmFuZ2VbMF07Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0LnZhbHVlLmdldHRlck9yU2V0dGVyUmFuZ2UgPSBub2RlLnJhbmdlOwotICAg
ICAgICAgICAgICAgIHJlc3VsdC52YWx1ZS5nZXR0ZXJPclNldHRlclJhbmdlWzFdID0gbm9kZS5y
YW5nZVswXSArIGxlbmd0aDsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJl
c3VsdC52YWx1ZS5nZXR0ZXJPclNldHRlclJhbmdlID0gcmVzdWx0LmtleS5yYW5nZTsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTQzMTcxPiBXZWIgSW5zcGVj
dG9yOiBJbXByb3ZlIFR5cGUgUHJvZmlsZXIgU3VwcG9ydCBmb3IgRVM2IFN5bnRheAotICAgICAg
ICAgICAgcmVzdWx0LnZhbHVlLmlzR2V0dGVyT3JTZXR0ZXIgPSB0cnVlOworICAgICAgICAgICAg
cmVzdWx0LnZhbHVlLnR5cGVQcm9maWxpbmdSZXR1cm5EaXZvdCA9IG5vZGUucmFuZ2VbMF07IC8v
ICJnIiBpbiAiZ2V0IiBvciAicyIgaW4gInNldCIgb3IgIlsiIGluICJbJ2NvbXB1dGVkJ10iIG9y
ICJtIiBpbiAibWV0aG9kTmFtZSIuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAi
TmV3RXhwcmVzc2lvbiI6CiAgICAgICAgICAgICByZXN1bHQgPSB7CkBAIC04MDUsMTAgKzc5OCw4
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAgICAgICAg
ICAgICB2YWx1ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudmFsdWUpLAog
ICAgICAgICAgICAgICAgIGtpbmQ6IG5vZGUua2luZAogICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgIGlmIChyZXN1bHQua2luZCA9PT0gImdldCIgfHwgcmVzdWx0LmtpbmQgPT09ICJzZXQiKSB7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlLmlzR2V0dGVyT3JTZXR0ZXIgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHJlc3VsdC52YWx1ZS5nZXR0ZXJPclNldHRlclJhbmdlID0gcmVzdWx0
LmtleS5yYW5nZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXN1bHQua2luZCA9
PT0gImdldCIgfHwgcmVzdWx0LmtpbmQgPT09ICJzZXQiIHx8IHJlc3VsdC5raW5kID09PSAibWV0
aG9kIikKKyAgICAgICAgICAgICAgICByZXN1bHQudmFsdWUudHlwZVByb2ZpbGluZ1JldHVybkRp
dm90ID0gbm9kZS5yYW5nZVswXTsgIC8vICJnIiBpbiAiZ2V0IiBvciAicyIgaW4gInNldCIgb3Ig
IlsiIGluICJbJ2NvbXB1dGVkJ10iIG9yICJtIiBpbiAibWV0aG9kTmFtZSIuCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSAiUmV0dXJuU3RhdGVtZW50IjoKICAgICAgICAgICAgIHJl
c3VsdCA9IHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261789</attachid>
            <date>2015-09-22 18:09:24 -0700</date>
            <delta_ts>2015-09-23 09:34:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>9354</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMTQ2KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE1LTA5LTIyICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFR5cGUgYnViYmxlcyBtaXNzaW5nIGZvciBjb21wdXRlZCBtZXRob2Rz
IGFuZCBtZXRob2RzIG9uIG9iamVjdCBsaXRlcmFscworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBzdXJlIHRoYXQgY29tcHV0
ZWQgbWV0aG9kcyBhcmUgd29ya2luZworICAgICAgICBmb3IgYm90aCBjbGFzc2VzIGFuZCBvYmpl
Y3QgbGl0ZXJhbHMuIEFsc28sIG1ldGhvZHMgbm93CisgICAgICAgIHdvcmsgb24gb2JqZWN0IGxp
dGVyYWxzLiBUaGlzIHBhdGNoIGFsc28gY2xlYW5zIHVwIHRoZQorICAgICAgICAiaXNHZXR0ZXJP
clNldHRlciIgYW5kICJnZXR0ZXJPclNldHRlclJhbmdlIiBmaWVsZHMuCisgICAgICAgIEJhc2lj
YWxseSwgd2UgdXNlZCB0aGlzIGFzIGEgd2F5IHRvIGFzayB0aGUgdHlwZSBwcm9maWxlcgorICAg
ICAgICBmb3IgdGhlIHJldHVybiB0eXBlcyBvZiBhIGZ1bmN0aW9uLiBOb3csIHdlIGp1c3QgaGF2
ZQorICAgICAgICBhIGZpZWxkIGNhbGxlZCAidHlwZVByb2ZpbGluZ1JldHVybkRpdm90IiB0aGF0
IGlzIHNldAorICAgICAgICBvbiBhbGwgZnVuY3Rpb25zIHNvIHdlIGRvbid0IG5lZWQgdG8gY29u
ZGl0aW9uYWxseSBhc2sKKyAgICAgICAgaWYgaXQncyBhIGdldHRlciBvciBzZXR0ZXIuCisKKyAg
ICAgICAgVGhlIGRpdm90cyB3ZSB1c2UgYXJlOgorICAgICAgICAiZiIgaW4gImZ1bmN0aW9uIiwg
InMiIGluICJzZXQiLCAiZyIgaW4gImdldCIsIGZpcnN0IGxldHRlciBpbiBhbnkgbWV0aG9kIG5h
bWUgZm9yIGNsYXNzZXMsIHRoZSAiWyIgZm9yIGNvbXB1dGVkIHByb3BlcnRpZXMuCisKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLl9pbnNlcnRU
eXBlVG9rZW4pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRy
ZWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5mdW5jdGlvblJl
dHVybkRpdm90KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3Rv
dHlwZS5fcmVjdXJzZUFycmF5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLnByb3RvdHlwZS5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlKToKKwogMjAxNS0wOS0yMiAgU2FhbSBiYXJhdGkgIDxz
YmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbRVM2XSBJbXByb3Zl
IFR5cGUgUHJvZmlsZXIgU3VwcG9ydCBmb3IgQXJyb3cgRnVuY3Rpb25zCkluZGV4OiBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0
b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCShyZXZpc2lvbiAxOTAxNDYpCisrKyBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5B
bm5vdGF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBXZWJJbnNwZWN0
b3IuVHlwZVRva2VuQW5ub3RhdG9yID0gY2xhc3MgCiAgICAgICAgIHZhciBzY3JpcHRTeW50YXhU
cmVlID0gdGhpcy5fc2NyaXB0Ll9zY3JpcHRTeW50YXhUcmVlOwogICAgICAgICBpZiAoIW5vZGUu
YXR0YWNobWVudHMuX190eXBlVG9rZW4gJiYgKHNjcmlwdFN5bnRheFRyZWUuY29udGFpbnNOb25F
bXB0eVJldHVyblN0YXRlbWVudChub2RlLmJvZHkpIHx8ICFmdW5jdGlvblJldHVyblR5cGUudHlw
ZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuVW5kZWZpbmVk
KSkpIHsKICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBub2RlLmlkID8gbm9kZS5pZC5u
YW1lIDogbnVsbDsKLSAgICAgICAgICAgIHZhciBvZmZzZXQgPSBub2RlLmlzR2V0dGVyT3JTZXR0
ZXIgPyBub2RlLmdldHRlck9yU2V0dGVyUmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdOworICAgICAg
ICAgICAgdmFyIG9mZnNldCA9IG5vZGUudHlwZVByb2ZpbGluZ1JldHVybkRpdm90OwogICAgICAg
ICAgICAgdGhpcy5faW5zZXJ0VG9rZW4ob2Zmc2V0LCBub2RlLCB0cnVlLCBXZWJJbnNwZWN0b3Iu
VHlwZVRva2VuVmlldy5UaXRsZVR5cGUuUmV0dXJuU3RhdGVtZW50LCBmdW5jdGlvbk5hbWUpOwog
ICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCShyZXZpc2lvbiAx
OTAxNDYpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2Ny
aXB0U3ludGF4VHJlZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMTU3LDggKzE1Nyw4IEBAIFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAgICAgaWYgKCFET01BZ2Vu
dC5oYXNFdmVudCgicHNldWRvRWxlbWVudEFkZGVkIikpCiAgICAgICAgICAgICByZXR1cm4gbm9k
ZS5ib2R5LnJhbmdlWzBdOwogCi0gICAgICAgIC8vICJmIiBpbiBmdW5jdGlvbiwgInMiIGluIHNl
dCwgImciIGluIGdldCwgZmlyc3QgbGV0dGVyIGluIGFueSBtZXRob2QgbmFtZSBmb3IgY2xhc3Nl
cy4KLSAgICAgICAgcmV0dXJuIG5vZGUuaXNHZXR0ZXJPclNldHRlciA/IG5vZGUuZ2V0dGVyT3JT
ZXR0ZXJSYW5nZVswXSA6IG5vZGUucmFuZ2VbMF07CisgICAgICAgIC8vICJmIiBpbiAiZnVuY3Rp
b24iLCAicyIgaW4gInNldCIsICJnIiBpbiAiZ2V0IiwgZmlyc3QgbGV0dGVyIGluIGFueSBtZXRo
b2QgbmFtZSBmb3IgY2xhc3NlcywgdGhlICJbIiBmb3IgY29tcHV0ZWQgcHJvcGVydGllcy4KKyAg
ICAgICAgcmV0dXJuIG5vZGUudHlwZVByb2ZpbGluZ1JldHVybkRpdm90OwogICAgIH0KIAogICAg
IHVwZGF0ZVR5cGVzKG5vZGVzVG9VcGRhdGUsIGNhbGxiYWNrKQpAQCAtNTE2LDcgKzUxNiw3IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICB9CiAKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgZnJvbSBlc3ByaW1hJ3MgQWJzdHJhY3QgU3ludGF4
IFRyZWUgdG8gb3Vycy4KLSAgICAvLyBNb3N0bHksIHRoaXMgaXMganVzdCB0aGUgaWRlbnRpdHkg
ZnVuY3Rpb24uIFdlJ3ZlIGFkZGVkIGFuIGV4dHJhIGlzR2V0dGVyT3JTZXR0ZXIgcHJvcGVydHkg
Zm9yIGZ1bmN0aW9ucy4KKyAgICAvLyBNb3N0bHksIHRoaXMgaXMganVzdCB0aGUgaWRlbnRpdHkg
ZnVuY3Rpb24uIFdlJ3ZlIGFkZGVkIGFuIGV4dHJhIHR5cGVQcm9maWxpbmdSZXR1cm5EaXZvdCBw
cm9wZXJ0eSBmb3IgZnVuY3Rpb25zL21ldGhvZHMuCiAgICAgLy8gT3VyIEFTVCBjb21wbGllcyB3
aXRoIHRoZSBNb3ppbGxhIHBhcnNlciBBUEk6CiAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1Byb2plY3RzL1NwaWRlck1vbmtleS9QYXJzZXJf
QVBJCiAgICAgX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlKQpAQCAtNTQ2LDcgKzU0Niw3
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAgICAgICAg
ICAgICBkZWZhdWx0czogbm9kZS5kZWZhdWx0cy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlLmJpbmQodGhpcykpLAogICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpLAogICAgICAgICAgICAgICAgIGV4cHJlc3Npb246
IG5vZGUuZXhwcmVzc2lvbiwgLy8gQm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBib2R5IGEgc2lu
Z2xlIGV4cHJlc3Npb24gb3IgYSBibG9jayBzdGF0ZW1lbnQuCi0gICAgICAgICAgICAgICAgaXNH
ZXR0ZXJPclNldHRlcjogZmFsc2UKKyAgICAgICAgICAgICAgICB0eXBlUHJvZmlsaW5nUmV0dXJu
RGl2b3Q6IG5vZGUucmFuZ2VbMF0KICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSAiQXNzaWdubWVudEV4cHJlc3Npb24iOgpAQCAtNjg5LDcgKzY4OSw3IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAgICAgICAgICAg
ICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUu
YmluZCh0aGlzKSksCiAgICAgICAgICAgICAgICAgZGVmYXVsdHM6IG5vZGUuZGVmYXVsdHMubWFw
KHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKSwKICAgICAgICAgICAg
ICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KSwKLSAg
ICAgICAgICAgICAgICBpc0dldHRlck9yU2V0dGVyOiBmYWxzZSAvLyBUaGlzIGlzIG9idmlvdXMs
IGJ1dCBpcyBjb252ZW5pZW50IG5vbmUgdGhlIGxlc3MgYi9jIERlY2xhcmF0aW9ucyBhbmQgRXhw
cmVzc2lvbnMgYXJlIG9mdGVuIGludGVydHdpbmVkLgorICAgICAgICAgICAgICAgIHR5cGVQcm9m
aWxpbmdSZXR1cm5EaXZvdDogbm9kZS5yYW5nZVswXQogICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlICJGdW5jdGlvbkV4cHJlc3Npb24iOgpAQCAtNjk5LDcg
KzY5OSw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAg
ICAgICAgICAgICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5
bnRheFRyZWUuYmluZCh0aGlzKSksCiAgICAgICAgICAgICAgICAgZGVmYXVsdHM6IG5vZGUuZGVm
YXVsdHMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKSwKICAg
ICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5i
b2R5KSwKLSAgICAgICAgICAgICAgICBpc0dldHRlck9yU2V0dGVyOiBmYWxzZSAvLyBJZiB0cnVl
LCBpdCBpcyBzZXQgaW4gdGhlIFByb3BlcnR5IEFTVCBub2RlLgorICAgICAgICAgICAgICAgIHR5
cGVQcm9maWxpbmdSZXR1cm5EaXZvdDogbm9kZS5yYW5nZVswXSAvLyBUaGlzIG1heSBiZSBvdmVy
cmlkZGVuIGluIHRoZSBQcm9wZXJ0eSBBU1Qgbm9kZS4KICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSAiSWRlbnRpZmllciI6CkBAIC03NjMsMTQgKzc2Myw3
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAgICAgICAg
ICAgICBraW5kOiBub2RlLmtpbmQsCiAgICAgICAgICAgICAgICAgc3RhdGljOiBub2RlLnN0YXRp
YwogICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQua2luZCA9PT0gImdldCIg
fHwgcmVzdWx0LmtpbmQgPT09ICJzZXQiKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3Ro
ID0gcmVzdWx0LmtleS5yYW5nZVsxXSAtIHJlc3VsdC5rZXkucmFuZ2VbMF07Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0LnZhbHVlLmdldHRlck9yU2V0dGVyUmFuZ2UgPSBub2RlLnJhbmdlOwotICAg
ICAgICAgICAgICAgIHJlc3VsdC52YWx1ZS5nZXR0ZXJPclNldHRlclJhbmdlWzFdID0gbm9kZS5y
YW5nZVswXSArIGxlbmd0aDsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJl
c3VsdC52YWx1ZS5nZXR0ZXJPclNldHRlclJhbmdlID0gcmVzdWx0LmtleS5yYW5nZTsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTQzMTcxPiBXZWIgSW5zcGVj
dG9yOiBJbXByb3ZlIFR5cGUgUHJvZmlsZXIgU3VwcG9ydCBmb3IgRVM2IFN5bnRheAotICAgICAg
ICAgICAgcmVzdWx0LnZhbHVlLmlzR2V0dGVyT3JTZXR0ZXIgPSB0cnVlOworICAgICAgICAgICAg
cmVzdWx0LnZhbHVlLnR5cGVQcm9maWxpbmdSZXR1cm5EaXZvdCA9IG5vZGUucmFuZ2VbMF07IC8v
ICJnIiBpbiAiZ2V0IiBvciAicyIgaW4gInNldCIgb3IgIlsiIGluICJbJ2NvbXB1dGVkJ10iIG9y
ICJtIiBpbiAibWV0aG9kTmFtZSIuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAi
TmV3RXhwcmVzc2lvbiI6CiAgICAgICAgICAgICByZXN1bHQgPSB7CkBAIC04MDUsMTAgKzc5OCw4
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2MKICAgICAgICAgICAg
ICAgICB2YWx1ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudmFsdWUpLAog
ICAgICAgICAgICAgICAgIGtpbmQ6IG5vZGUua2luZAogICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgIGlmIChyZXN1bHQua2luZCA9PT0gImdldCIgfHwgcmVzdWx0LmtpbmQgPT09ICJzZXQiKSB7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlLmlzR2V0dGVyT3JTZXR0ZXIgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHJlc3VsdC52YWx1ZS5nZXR0ZXJPclNldHRlclJhbmdlID0gcmVzdWx0
LmtleS5yYW5nZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXN1bHQua2luZCA9
PT0gImdldCIgfHwgcmVzdWx0LmtpbmQgPT09ICJzZXQiIHx8IHJlc3VsdC5raW5kID09PSAibWV0
aG9kIikKKyAgICAgICAgICAgICAgICByZXN1bHQudmFsdWUudHlwZVByb2ZpbGluZ1JldHVybkRp
dm90ID0gbm9kZS5yYW5nZVswXTsgIC8vICJnIiBpbiAiZ2V0IiBvciAicyIgaW4gInNldCIgb3Ig
IlsiIGluICJbJ2NvbXB1dGVkJ10iIG9yICJtIiBpbiAibWV0aG9kTmFtZSIuCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSAiUmV0dXJuU3RhdGVtZW50IjoKICAgICAgICAgICAgIHJl
c3VsdCA9IHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDE0NikKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA5LTIyICBTYWFtIGJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFR5cGUg
YnViYmxlcyBtaXNzaW5nIGZvciBjb21wdXRlZCBtZXRob2RzIGFuZCBtZXRob2RzIG9uIG9iamVj
dCBsaXRlcmFscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ4NTYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLmh0bWw6CisKIDIw
MTUtMDktMjIgIFNhYW0gYmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogW0VTNl0gSW1wcm92ZSBUeXBlIFByb2ZpbGVyIFN1cHBvcnQgZm9yIEFycm93
IEZ1bmN0aW9ucwpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVsL3BhcnNlLXNjcmlw
dC1zeW50YXgtdHJlZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci9t
b2RlbC9wYXJzZS1zY3JpcHQtc3ludGF4LXRyZWUuaHRtbAkocmV2aXNpb24gMTkwMTQ2KQorKysg
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVsL3BhcnNlLXNjcmlwdC1zeW50YXgtdHJlZS5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsMTMgKzE5MywxMCBAQCBmdW5jdGlvbiB0ZXN0KCkKICAg
ICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLnBhcmFtc1sxXS50eXBlID09PSBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyKTsKICAgICBJbnNwZWN0b3JU
ZXN0LmFzc2VydChub2RlLmJvZHkpOwogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYm9k
eS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5CbG9ja1N0
YXRlbWVudCk7Ci0gICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoIW5vZGUuaXNHZXR0ZXJPclNldHRl
cik7CiAgICAgbm9kZSA9IG1ha2VOb2RlKCJ4ID0ge2dldCBmb28oKXtyZXR1cm4gMjB9fSIsIHRy
dWUpOwogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUucmlnaHQucHJvcGVydGllc1swXS52
YWx1ZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5j
dGlvbkV4cHJlc3Npb24pOwotICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUucmlnaHQucHJv
cGVydGllc1swXS52YWx1ZS5pc0dldHRlck9yU2V0dGVyKTsKICAgICBub2RlID0gbWFrZU5vZGUo
InggPSB7c2V0IGZvbyh4KXtyZXR1cm4gMjB9fSIsIHRydWUpOwogICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0KG5vZGUucmlnaHQucHJvcGVydGllc1swXS52YWx1ZS50eXBlID09PSBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb24pOwotICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUucmlnaHQucHJvcGVydGllc1swXS52YWx1ZS5pc0dldHRl
ck9yU2V0dGVyKTsKICAgICBJbnNwZWN0b3JUZXN0LmxvZygicGFzc2VkIEZ1bmN0aW9uRGVjbGFy
YXRpb24iKTsKIAogICAgIG5vZGUgPSBtYWtlTm9kZSgiZm9vKGZ1bmN0aW9uKHgseSl7fSkiLCB0
cnVlKTsK
</data>
<flag name="review"
          id="286977"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>