<?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>137890</bug_id>
          
          <creation_ts>2014-10-20 12:26:50 -0700</creation_ts>
          <short_desc>Web Inspector: Add infrastructure for eslint based static analyzer</short_desc>
          <delta_ts>2014-11-10 16:39:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>138451</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Wells">jonowells</reporter>
          <assigned_to name="Jonathan Wells">jonowells</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>rniwa</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1042923</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-20 12:26:50 -0700</bug_when>
    <thetext>Need to add a model object class AnalyzerManager to store analyzer messages, and an analyzer message model object. Additionally a resource needs to be able to analyze its own source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042928</commentid>
    <comment_count>1</comment_count>
      <attachid>240139</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-20 12:34:46 -0700</bug_when>
    <thetext>Created attachment 240139
[PATCH] analyzer models.

You can test this functionality using the attached test site and the following code. Load the index.html file, then open the inspector and inspect that inspector. Enter into the console:

WebInspector.frameResourceManager.mainFrame.resources[3].addEventListener(WebInspector.Resource.Event.AnalyzerDidFinish, function(event) {console.log(event);});

WebInspector.frameResourceManager.mainFrame.resources[3].analyze();

The analyzer response object will show, and you can look at the event.data object and see the messages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042929</commentid>
    <comment_count>2</comment_count>
      <attachid>240140</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-20 12:35:50 -0700</bug_when>
    <thetext>Created attachment 240140
[TEST CASE] small site to test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042968</commentid>
    <comment_count>3</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-20 14:16:01 -0700</bug_when>
    <thetext>Ignore this comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042970</commentid>
    <comment_count>4</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-20 14:23:27 -0700</bug_when>
    <thetext>Also ignore this comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043013</commentid>
    <comment_count>5</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-20 16:31:30 -0700</bug_when>
    <thetext>Ignore this too. (Testing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043787</commentid>
    <comment_count>6</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-23 11:36:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/18715320&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043797</commentid>
    <comment_count>7</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-23 12:14:23 -0700</bug_when>
    <thetext>I&apos;m not sure of the placement of all the analyzer code in Resource.js. It&apos;s there because Resource.js has all the type information, but perhaps some of the base analyzer logic should exist in SourceCode.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043802</commentid>
    <comment_count>8</comment_count>
      <attachid>240139</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-10-23 12:40:55 -0700</bug_when>
    <thetext>Comment on attachment 240139
[PATCH] analyzer models.

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:30
&gt; +    this._config = {

this._eslintConfig

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:74
&gt; +    // Public
&gt; +    mapSourceCodeToAnalyzerMessages: function(sourceCode, analyzerMessages)

New line between the comment and the method.

Having this method should be a sign that there is a problem. The manager is very thin and more of the logic should be here than in Resource.js.

&gt; Source/WebInspectorUI/UserInterface/Models/AnalyzerMessage.js:63
&gt; +    get sourceCode()
&gt; +    {
&gt; +        return this._sourceCode;
&gt; +    },
&gt; +
&gt; +    get text()
&gt; +    {
&gt; +        return this._text;
&gt; +    },
&gt; +
&gt; +    get lineNumber()
&gt; +    {
&gt; +        return this._lineNumber;
&gt; +    },
&gt; +
&gt; +    get columnNumber()
&gt; +    {
&gt; +        return this._columnNumber;
&gt; +    },

This should hold a sourceCodeLocation, not sourceCode, lineNumber and columnNumber. That way it will work with source maps.

&gt; Source/WebInspectorUI/UserInterface/Models/AnalyzerMessage.js:65
&gt; +    get ruleId()

What is ruleId? I&apos;d say ruleIdentifier.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:91
&gt; +WebInspector.Resource.Type._typeAnalyzerMap = new Map;
&gt; +WebInspector.Resource.Type._typeAnalyzerMap.set(WebInspector.Resource.Type.Script, eslint);

This should live in AnalyzerManager.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:492
&gt; +    analyze: function()
&gt; +    {
&gt; +        if (!this._needsAnalysis) {
&gt; +            var analyzerMessages = WebInspector.analyzerManager.analyzerMessagesForSourceCode(this);
&gt; +            this._analysisComplete(analyzerMessages);
&gt; +            return;
&gt; +        }
&gt; +
&gt; +        var analyzer = WebInspector.Resource.Type._typeAnalyzerMap.get(this._type);
&gt; +
&gt; +        function retrieveAnalyzerMessages()
&gt; +        {
&gt; +            var analyzerMessages = [];
&gt; +            var rawAnalyzerMessages = analyzer.verify(this.content, WebInspector.analyzerManager._config);
&gt; +
&gt; +            for (var rawAnalyzerMessage of rawAnalyzerMessages) {
&gt; +                analyzerMessages.push(new WebInspector.AnalyzerMessage(this, rawAnalyzerMessage.message, rawAnalyzerMessage.line, rawAnalyzerMessage.column, rawAnalyzerMessage.ruleId));
&gt; +            }
&gt; +
&gt; +            WebInspector.analyzerManager.mapSourceCodeToAnalyzerMessages(this, analyzerMessages);
&gt; +            this._needsAnalysis = false;
&gt; +
&gt; +            this._analysisComplete(analyzerMessages);
&gt; +        }
&gt; +
&gt; +        if (!this._contentReceived) {
&gt; +            this.requestContent(retrieveAnalyzerMessages.bind(this));
&gt; +            return;
&gt; +        }
&gt; +
&gt; +        retrieveAnalyzerMessages.call(this);
&gt; +    },

This should also live in AnalyzerManager. I don&apos;t think anything needs added to Resource.js.

Client of AnalyzerManager should be able to be asked for analyzerMessagesForSourceCode, and be async with a Promise return. It can then do the requestConent if needed, analyze if needed, and fulfill the Promise with the messages.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:764
&gt; +    handleCurrentRevisionContentChange: function()
&gt; +    {
&gt; +        this._needsAnalysis = true;
&gt; +    },

This can notify AnalyzerManager of a change. I would normally say AnalyzerManager could listen for the WebInspector.SourceCode.Event.ContentDidChange event, but that would hold a reference that isn&apos;t as easy to break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1043904</commentid>
    <comment_count>9</comment_count>
      <attachid>240139</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-23 18:25:31 -0700</bug_when>
    <thetext>Comment on attachment 240139
[PATCH] analyzer models.

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:74
&gt;&gt; +    mapSourceCodeToAnalyzerMessages: function(sourceCode, analyzerMessages)
&gt; 
&gt; New line between the comment and the method.
&gt; 
&gt; Having this method should be a sign that there is a problem. The manager is very thin and more of the logic should be here than in Resource.js.

Joe had suggested I think rightfully that this should look a lot like IssueManager.js which is similarly thin. This would grow also as different components of the inspector start asking for the information from this manager. However, moving the analyzer logic into this manager will help with a few problems. 1) how can I have a different analyzer per resource type, 2) how can we make it easy to change the linter implementations later and 3) how can we solve my problem of a Script and a Resource both needing to be analyzed in the same way.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:492
&gt;&gt; +    },
&gt; 
&gt; This should also live in AnalyzerManager. I don&apos;t think anything needs added to Resource.js.
&gt; 
&gt; Client of AnalyzerManager should be able to be asked for analyzerMessagesForSourceCode, and be async with a Promise return. It can then do the requestConent if needed, analyze if needed, and fulfill the Promise with the messages.

Can you clarify this just a little bit? I think I follow and agree, but you are saying that analyzerMessagesForSourceCode will be in AnalyzerMessenger, have a promise return, call sourceCode.requestContent if needed, do the analysis, and then fulfill the promise once the messages are available, leaving Resource to be left alone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044922</commentid>
    <comment_count>10</comment_count>
      <attachid>240642</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-29 17:25:32 -0700</bug_when>
    <thetext>Created attachment 240642
[PATCH] Adjustments after comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046113</commentid>
    <comment_count>11</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-04 11:11:25 -0800</bug_when>
    <thetext>Bump!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046192</commentid>
    <comment_count>12</comment_count>
      <attachid>240642</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-11-04 14:54:38 -0800</bug_when>
    <thetext>Comment on attachment 240642
[PATCH] Adjustments after comments.

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:31
&gt; +        &quot;env&quot;: {

No need for the &quot;&quot;.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:35
&gt; +        &quot;globals&quot;: {

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:38
&gt; +        &quot;rules&quot;: {

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:66
&gt; +WebInspector.AnalyzerManager.typeAnalyzerMap = new Map;
&gt; +WebInspector.AnalyzerManager.typeAnalyzerMap.set(WebInspector.Resource.Type.Script, eslint);

These should be _typeAnalyzerMap since we don&apos;t want them used outside this file.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:69
&gt; +    AnalyzerMessagesWereAdded: &quot;analyzer-manager-analyzer-messages-were-added&quot;

Not used.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:98
&gt; +                for (var rawAnalyzerMessage of rawAnalyzerMessages) {
&gt; +                    analyzerMessages.push(new WebInspector.AnalyzerMessage(new WebInspector.SourceCodeLocation(sourceCode, rawAnalyzerMessage.line - 1, rawAnalyzerMessage.column - 1), rawAnalyzerMessage.message, rawAnalyzerMessage.ruleId));
&gt; +                }

No need for {}. Should add a comment about the line and column numbers being one-based but we expect zero-based.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:108
&gt; +            if (!sourceCode._contentReceived) {
&gt; +                sourceCode.requestContent(retrieveAnalyzerMessages.bind(analyzerManager));
&gt; +            }

No need for {}. This uses a private property, _contentReceived, on sourceCode. sourceCode.requestContent is safe to call even if the content is already fetched. Just always call requestContent.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:110
&gt; +            retrieveAnalyzerMessages.call(analyzerManager);

You will be calling this twice if !sourceCode._contentReceived, once here and once when requestContent fires.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:111
&gt; +        });

Should just add &quot;.bind(this)&quot; here and not declare and use analyzerManager.

&gt; Source/WebInspectorUI/UserInterface/Models/AnalyzerMessage.js:38
&gt; +    } else if (sourceCodeOrSourceCodeLocation instanceof WebInspector.SourceCode) {
&gt; +        this._sourceCode = sourceCodeOrSourceCodeLocation;
&gt; +    }

No need for the {}. Why is sourceCodeLocation allowed to be null?

&gt; Source/WebInspectorUI/UserInterface/Models/AnalyzerMessage.js:61
&gt; +    get lineNumber()
&gt; +    {
&gt; +        return this._sourceCodeLocation.lineNumber;
&gt; +    },

Odd to have lineNumber and not columnNumber. I&apos;d force clients to use sourceCodeLocation for this. IssueMessage is a bad example.

Though sourceCodeLocation can be null based on the constructor. Why is that?

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:74
&gt; +    AnalyzerDidFinish: &quot;resource-analyzer-did-finish&quot;

Not used anymore.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:445
&gt; +    get canBeAnalyzed()
&gt; +    {
&gt; +        if (this._type === WebInspector.Resource.Type.Script)
&gt; +            return true;
&gt; +        return false;
&gt; +    },

This puts a question only the AnalyzerManager knows in Resource. You can move this to AnalyzerManager. Having it here adds a maintenance burden of keeping getAnalyzerMessagesForSourceCode and this in sync. We will likely forget about this.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:190
&gt; +    set needsAnalysis(value)
&gt; +    {
&gt; +        this._needsAnalysis = value;
&gt; +    },
&gt; +
&gt; +    get needsAnalysis()
&gt; +    {
&gt; +        return this._needsAnalysis;
&gt; +    },

This property would make more sense as read-only with a function to reset it.

get needsAnalysis()
markAsAnalyzed: function()

Or AnalyzerManager can keep track of this state by listening for WebInspector.SourceCode.Event.ContentDidChange and marking/deleting the messages for the SourceCode. (You can listen like SourceCode.addEventListener(WebInspector.SourceCode.Event.ContentDidChange, ...) to catch all source code changes. And also avoid reference cycles on individual instances.) Nothing needs to change in Resource.js or SourceCode.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046222</commentid>
    <comment_count>13</comment_count>
      <attachid>240642</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-04 15:33:33 -0800</bug_when>
    <thetext>Comment on attachment 240642
[PATCH] Adjustments after comments.

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:111
&gt;&gt; +        });
&gt; 
&gt; Should just add &quot;.bind(this)&quot; here and not declare and use analyzerManager.

This doesn&apos;t work I don&apos;t think. `this` would refer to the Promise.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/AnalyzerMessage.js:38
&gt;&gt; +    }
&gt; 
&gt; No need for the {}. Why is sourceCodeLocation allowed to be null?

I&apos;m anticipating a need to have AnalyzerMessages that do not have locations but instead speak of the entire document.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/AnalyzerMessage.js:61
&gt;&gt; +    },
&gt; 
&gt; Odd to have lineNumber and not columnNumber. I&apos;d force clients to use sourceCodeLocation for this. IssueMessage is a bad example.
&gt; 
&gt; Though sourceCodeLocation can be null based on the constructor. Why is that?

I&apos;m fine with that. See above regarding the null value.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:445
&gt;&gt; +    },
&gt; 
&gt; This puts a question only the AnalyzerManager knows in Resource. You can move this to AnalyzerManager. Having it here adds a maintenance burden of keeping getAnalyzerMessagesForSourceCode and this in sync. We will likely forget about this.

That makes perfect sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046223</commentid>
    <comment_count>14</comment_count>
      <attachid>240642</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-04 15:36:16 -0800</bug_when>
    <thetext>Comment on attachment 240642
[PATCH] Adjustments after comments.

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:111
&gt;&gt;&gt; +        });
&gt;&gt; 
&gt;&gt; Should just add &quot;.bind(this)&quot; here and not declare and use analyzerManager.
&gt; 
&gt; This doesn&apos;t work I don&apos;t think. `this` would refer to the Promise.

... unless I bind the Promise</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046242</commentid>
    <comment_count>15</comment_count>
      <attachid>240642</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-11-04 15:58:34 -0800</bug_when>
    <thetext>Comment on attachment 240642
[PATCH] Adjustments after comments.

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

&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:111
&gt;&gt;&gt;&gt; +        });
&gt;&gt;&gt; 
&gt;&gt;&gt; Should just add &quot;.bind(this)&quot; here and not declare and use analyzerManager.
&gt;&gt; 
&gt;&gt; This doesn&apos;t work I don&apos;t think. `this` would refer to the Promise.
&gt; 
&gt; ... unless I bind the Promise

The bind is for the function, not the Promise. The Promise will call the bound function.

new Promise(function(resolve, reject) { ... }.bind(this));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046329</commentid>
    <comment_count>16</comment_count>
      <attachid>240642</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-04 18:10:42 -0800</bug_when>
    <thetext>Comment on attachment 240642
[PATCH] Adjustments after comments.

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:190
&gt;&gt; +    },
&gt; 
&gt; This property would make more sense as read-only with a function to reset it.
&gt; 
&gt; get needsAnalysis()
&gt; markAsAnalyzed: function()
&gt; 
&gt; Or AnalyzerManager can keep track of this state by listening for WebInspector.SourceCode.Event.ContentDidChange and marking/deleting the messages for the SourceCode. (You can listen like SourceCode.addEventListener(WebInspector.SourceCode.Event.ContentDidChange, ...) to catch all source code changes. And also avoid reference cycles on individual instances.) Nothing needs to change in Resource.js or SourceCode.js.

I like the second option. I&apos;m working on that path. A change in the sourceCode would I think just mark it as necessary for reanalysis in another map.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046341</commentid>
    <comment_count>17</comment_count>
      <attachid>240642</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-11-04 18:37:38 -0800</bug_when>
    <thetext>Comment on attachment 240642
[PATCH] Adjustments after comments.

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:190
&gt;&gt;&gt; +    },
&gt;&gt; 
&gt;&gt; This property would make more sense as read-only with a function to reset it.
&gt;&gt; 
&gt;&gt; get needsAnalysis()
&gt;&gt; markAsAnalyzed: function()
&gt;&gt; 
&gt;&gt; Or AnalyzerManager can keep track of this state by listening for WebInspector.SourceCode.Event.ContentDidChange and marking/deleting the messages for the SourceCode. (You can listen like SourceCode.addEventListener(WebInspector.SourceCode.Event.ContentDidChange, ...) to catch all source code changes. And also avoid reference cycles on individual instances.) Nothing needs to change in Resource.js or SourceCode.js.
&gt; 
&gt; I like the second option. I&apos;m working on that path. A change in the sourceCode would I think just mark it as necessary for reanalysis in another map.

Or just delete the messages from the existing map, then the next time it will request the new content and reanalyze.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046346</commentid>
    <comment_count>18</comment_count>
      <attachid>240642</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-04 18:58:45 -0800</bug_when>
    <thetext>Comment on attachment 240642
[PATCH] Adjustments after comments.

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

&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:190
&gt;&gt;&gt;&gt; +    },
&gt;&gt;&gt; 
&gt;&gt;&gt; This property would make more sense as read-only with a function to reset it.
&gt;&gt;&gt; 
&gt;&gt;&gt; get needsAnalysis()
&gt;&gt;&gt; markAsAnalyzed: function()
&gt;&gt;&gt; 
&gt;&gt;&gt; Or AnalyzerManager can keep track of this state by listening for WebInspector.SourceCode.Event.ContentDidChange and marking/deleting the messages for the SourceCode. (You can listen like SourceCode.addEventListener(WebInspector.SourceCode.Event.ContentDidChange, ...) to catch all source code changes. And also avoid reference cycles on individual instances.) Nothing needs to change in Resource.js or SourceCode.js.
&gt;&gt; 
&gt;&gt; I like the second option. I&apos;m working on that path. A change in the sourceCode would I think just mark it as necessary for reanalysis in another map.
&gt; 
&gt; Or just delete the messages from the existing map, then the next time it will request the new content and reanalyze.

Yes. Well. That&apos;s much smarter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046347</commentid>
    <comment_count>19</comment_count>
      <attachid>240642</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-04 19:01:47 -0800</bug_when>
    <thetext>Comment on attachment 240642
[PATCH] Adjustments after comments.

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:116
&gt; +    mapSourceCodeToAnalyzerMessages: function(sourceCode, analyzerMessages)

Looking at it again, I don&apos;t really need this. Feel like I just need this._analyzerSourceCodeMap.set(sourceCode, analyzerMessages);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046415</commentid>
    <comment_count>20</comment_count>
      <attachid>241012</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-05 01:34:21 -0800</bug_when>
    <thetext>Created attachment 241012
[PATCH] Adjustments after comments 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046416</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-05 01:35:39 -0800</bug_when>
    <thetext>Attachment 241012 did not pass style-queue:


ERROR: Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:94:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:98:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:100:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:114:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:116:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:117:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:118:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:120:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:121:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:122:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:123:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 11 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046466</commentid>
    <comment_count>22</comment_count>
      <attachid>241012</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-11-05 08:16:57 -0800</bug_when>
    <thetext>Comment on attachment 241012
[PATCH] Adjustments after comments 2.

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

&gt; Source/WebInspectorUI/UserInterface/Base/Main.js:2
&gt; - * Copyright (C) 2013 Apple Inc. All rights reserved.
&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.

Should be 2013-2014.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:77
&gt; +            var analyzer = WebInspector.AnalyzerManager._typeAnalyzerMap.get(sourceCode._type);

This should use sourceCode.type not _type.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:85
&gt; +                var analyzerMessages = this._sourceCodeMessagesMap.get(sourceCode);
&gt; +                resolve(analyzerMessages);

Could be one line.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:95
&gt; +				// Raw line and column numbers are one-based. SourceCodeLocation expects them to be zero-based so we subtract 1 from each.
&gt; +                for (var rawAnalyzerMessage of rawAnalyzerMessages)

Whitespace indent is wrong for the comment.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:98
&gt; +				this._sourceCodeMessagesMap.set(sourceCode, analyzerMessages);

Whitespace indent is wrong.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:100
&gt; +				sourceCode.addEventListener(WebInspector.SourceCode.Event.ContentDidChange, this._handleSourceCodeContentDidChange, this);

Whitespace is wrong. This also leaks the sourceCode by holding a strong reference by the singleton AnalyzerManager until content changes (which might not happen). The event does not need to be listened for each sourceCode that gets analyzed. It can be registered once on the SourceCode constructor, which will fire when any instance of SourceCode changes. That is fine, because all _handleSourceCodeContentDidChange does is delete from the map.

So this should move to the AnalyzerManager constructor or be lazy done once the first time getAnalyzerMessagesForSourceCode is called.

It should look like:

WebInspector.SourceCode.addEventListener(WebInspector.SourceCode.Event.ContentDidChange, this._handleSourceCodeContentDidChange, this);

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:122
&gt; +		var sourceCode = event.target;
&gt; +
&gt; +		// Since sourceCode has changed, remove it and its messages from the map so getAnalyzerMessagesForSourceCode will have to reanalyze the next time it is called.
&gt; +		this._sourceCodeMessagesMap.delete(sourceCode);
&gt; +		sourceCode.removeEventListener(WebInspector.SourceCode.Event.ContentDidChange, this._handleSourceCodeContentDidChange, this);

Whitespace indent is wrong. No need for removeEventListener anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046467</commentid>
    <comment_count>23</comment_count>
      <attachid>241012</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-11-05 08:18:48 -0800</bug_when>
    <thetext>Comment on attachment 241012
[PATCH] Adjustments after comments 2.

r- for the leak and whitespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046468</commentid>
    <comment_count>24</comment_count>
      <attachid>241012</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-11-05 08:22:10 -0800</bug_when>
    <thetext>Comment on attachment 241012
[PATCH] Adjustments after comments 2.

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:100
&gt;&gt; +				sourceCode.addEventListener(WebInspector.SourceCode.Event.ContentDidChange, this._handleSourceCodeContentDidChange, this);
&gt; 
&gt; Whitespace is wrong. This also leaks the sourceCode by holding a strong reference by the singleton AnalyzerManager until content changes (which might not happen). The event does not need to be listened for each sourceCode that gets analyzed. It can be registered once on the SourceCode constructor, which will fire when any instance of SourceCode changes. That is fine, because all _handleSourceCodeContentDidChange does is delete from the map.
&gt; 
&gt; So this should move to the AnalyzerManager constructor or be lazy done once the first time getAnalyzerMessagesForSourceCode is called.
&gt; 
&gt; It should look like:
&gt; 
&gt; WebInspector.SourceCode.addEventListener(WebInspector.SourceCode.Event.ContentDidChange, this._handleSourceCodeContentDidChange, this);

Oh, SourceCode.js is missing a call that will allow this to work. After the constructor in SourceCode.js, add this line:

WebInspector.Object.addConstructorFunctions(WebInspector.SourceCode);

See Resource.js for reference. Any class that has events should also have this call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046492</commentid>
    <comment_count>25</comment_count>
      <attachid>241012</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-05 09:23:38 -0800</bug_when>
    <thetext>Comment on attachment 241012
[PATCH] Adjustments after comments 2.

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Base/Main.js:2
&gt;&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.
&gt; 
&gt; Should be 2013-2014.

Why is this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046508</commentid>
    <comment_count>26</comment_count>
      <attachid>241036</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-05 09:43:34 -0800</bug_when>
    <thetext>Created attachment 241036
[PATCH] Adjustments after comments 3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046533</commentid>
    <comment_count>27</comment_count>
      <attachid>241036</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-05 10:43:38 -0800</bug_when>
    <thetext>Comment on attachment 241036
[PATCH] Adjustments after comments 3.

Clearing flags on attachment: 241036

Committed r175628: &lt;http://trac.webkit.org/changeset/175628&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046534</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-05 10:43:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046547</commentid>
    <comment_count>29</comment_count>
      <attachid>241036</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-11-05 11:27:32 -0800</bug_when>
    <thetext>Comment on attachment 241036
[PATCH] Adjustments after comments 3.

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:93
&gt; +WebInspector.AnalyzerManager._typeAnalyzerMap = new Map;
&gt; +WebInspector.AnalyzerManager._typeAnalyzerMap.set(WebInspector.Resource.Type.Script, eslint);
&gt; +
&gt; +WebInspector.AnalyzerManager.prototype = {
&gt; +    constructor: WebInspector.AnalyzerManager,
&gt; +    __proto__: WebInspector.Object.prototype,
&gt; +
&gt; +    // Public
&gt; +
&gt; +    getAnalyzerMessagesForSourceCode: function(sourceCode)
&gt; +    {
&gt; +        return new Promise(function(resolve, reject) {
&gt; +            var analyzer = WebInspector.AnalyzerManager._typeAnalyzerMap.get(sourceCode.type);
&gt; +            if (!analyzer) {
&gt; +                reject(new Error(&quot;This resource type cannot be analyzed.&quot;));
&gt; +                return;
&gt; +            }
&gt; +
&gt; +            if (this._sourceCodeMessagesMap.has(sourceCode)) {
&gt; +                resolve(this._sourceCodeMessagesMap.get(sourceCode));
&gt; +                return;
&gt; +            }
&gt; +
&gt; +            function retrieveAnalyzerMessages()
&gt; +            {
&gt; +                var analyzerMessages = [];
&gt; +                var rawAnalyzerMessages = analyzer.verify(sourceCode.content, this._eslintConfig);

I think this could go one step further and be much nicer!

Currently the AnalyzerManager._typeAnalyzerMap has just one analyzer (eslint). The manager looks like it tries to have different resource type analyzers, but currently knows way too much about JavaScript, including holding an eslint config! E.g. the map is used like:

    var analyzer = map.get(type);
    var messages = analyzer.verify(content, eslintConfig);

That makes it hard to extend this to include a CSS / StyleSheet analyzer!

----

I think AnalyzerManager&apos;s map should hold WebInspector.Analyzer instances. With pseudocode.

    function WebInspector.Analyzer() {}
    WebInspector.Analyzer.prototype = {
        analyze: function(content) { /* subclass implements, returns a list of AnalyzerMessage objects */ }
    };

    function WebInspector.ScriptAnalyzer() {
        this._eslintConfig = {...};
    }
    WebInspector.Analyzer.prototype = {
        analyze: function(content) { eslint.verify(content, this._eslintConfig); ... }
    };

    function WebInspector.StylesheetAnalyzer() {
        this._otherConfig = {...};
    }
    WebInspector.Analyzer.prototype = {
        analyze: function(content) { ... }
    };


Then the AnalyzerManager knows nothing about how individual analyzers work, but it get get analyzer messages, using a simpler API:

    var analyzer = map.get(type);
    var messages = analyzer.analyze(content);

----

I&apos;m a little skeptical of using just WebInspector.Resource.Type.Script as the key. I think it is clever, but I&apos;m not sure that is enough information for an analyzer to work with. A WebInspector.Resource.Type.Script could be JavaScript, CoffeeScript, TypeScript, and more. However I think the eslint analyzer will only work with &quot;text/javascript&quot;. So I think analyze might need to pass the content and mime type for the Analyzer to make a complete decision if we are going to have one Analyzer per Resource.Type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046700</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-05 20:02:39 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 138451</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046876</commentid>
    <comment_count>31</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-11-06 12:37:31 -0800</bug_when>
    <thetext>Simon saw this in his console:

Main.js:9372:806: CONSOLE ERROR ReferenceError: Can&apos;t find variable: eslint
Main.html:38:28: CONSOLE ERROR TypeError: undefined is not a function (evaluating &apos;WebInspector.loaded()&apos;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046877</commentid>
    <comment_count>32</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-06 12:39:53 -0800</bug_when>
    <thetext>Ok, looking into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046879</commentid>
    <comment_count>33</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-11-06 12:47:14 -0800</bug_when>
    <thetext>It likely is an error when the resources are combined production/nightly builds.

copy-user-interface-resources.pl and copy-user-interface-resources-dryrun.rb should help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046907</commentid>
    <comment_count>34</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-06 14:07:51 -0800</bug_when>
    <thetext>Yeah, this is the problem. The resulting Main.js:

    &lt;script src=&quot;Main.js&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;Esprima.js&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;ESLint.js&quot;&gt;&lt;/script&gt;

Esprima and ESLint should be included first. I&apos;ll change copy-user-interface-resources.pl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046908</commentid>
    <comment_count>35</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-06 14:08:11 -0800</bug_when>
    <thetext>I meant Main.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046922</commentid>
    <comment_count>36</comment_count>
      <attachid>241036</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-11-06 15:08:41 -0800</bug_when>
    <thetext>Comment on attachment 241036
[PATCH] Adjustments after comments 3.

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:68
&gt; +WebInspector.AnalyzerManager._typeAnalyzerMap = new Map;
&gt; +WebInspector.AnalyzerManager._typeAnalyzerMap.set(WebInspector.Resource.Type.Script, eslint);

Ah, I see. it is because of this global code. This really could move into the constructor and hang off of this, like _sourceCodeMessagesMap. There are no external users of this and WebInspector.AnalyzerManager is already a singleton. Less global code the better.

&gt; Source/WebInspectorUI/UserInterface/Main.html:178
&gt; +    &lt;script src=&quot;External/ESLint/eslint.js&quot;&gt;&lt;/script&gt;

This likely needs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046923</commentid>
    <comment_count>37</comment_count>
      <attachid>241036</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-11-06 15:10:36 -0800</bug_when>
    <thetext>Comment on attachment 241036
[PATCH] Adjustments after comments 3.

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Main.html:178
&gt;&gt; +    &lt;script src=&quot;External/ESLint/eslint.js&quot;&gt;&lt;/script&gt;
&gt; 
&gt; This likely needs

Ignore this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047623</commentid>
    <comment_count>38</comment_count>
      <attachid>241305</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-10 14:01:43 -0800</bug_when>
    <thetext>Created attachment 241305
[PATCH] Patch with change to Main.html ordering.

Updated with only the file ordering changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047688</commentid>
    <comment_count>39</comment_count>
      <attachid>241305</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-10 16:39:14 -0800</bug_when>
    <thetext>Comment on attachment 241305
[PATCH] Patch with change to Main.html ordering.

Clearing flags on attachment: 241305

Committed r175838: &lt;http://trac.webkit.org/changeset/175838&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047690</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-10 16:39:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240139</attachid>
            <date>2014-10-20 12:34:46 -0700</date>
            <delta_ts>2014-10-29 17:25:32 -0700</delta_ts>
            <desc>[PATCH] analyzer models.</desc>
            <filename>analyzeronly.diff</filename>
            <type>text/plain</type>
            <size>14015</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGY3NzVlNTQuLmJjOWY5MjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE0LTEwLTIwICBKb25vIFdlbGxzICA8
am9ub3dlbGxzQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgaW5mcmFz
dHJ1Y3R1cmUgZm9yIGVzbGludCBiYXNlZCBzdGF0aWMgYW5hbHl6ZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzg5MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYW4gQW5hbHl6ZXJNYW5hZ2Vy
IGNsYXNzIGFuZCBjcmVhdGVzIGEgc2luZ2xldG9uIG9iamVjdCBmcm9tIHRoaXMgY2xhc3MgaW4g
TWFpbi5qcy4gVXNlZCB0byBzdG9yZSBjYWNoZQorICAgICAgICBvZiBhbmFseXplciBtZXNzYWdl
cyAod2FybmluZ3MpLiBBbHNvIGFkZHMgYSBtb2RlbCBmb3IgYW5hbHl6ZXIgbWVzc2FnZXMuIEFk
ZHMgQVBJIGZvciBhIHJlc291cmNlIHRvIGFuYWx5emUKKyAgICAgICAgaXRzIHNvdXJjZSBjb2Rl
LiBBbGwgc3RhdGljIGFuYWx5emVyIFVJIHdpbGwgYnVpbGQgb24gdGhpcyBtb2RlbC4KKworICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYklu
c3BlY3Rvci5BbmFseXplck1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFuYWx5emVy
TWFuYWdlci5wcm90b3R5cGUubWFwU291cmNlQ29kZVRvQW5hbHl6ZXJNZXNzYWdlcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXQgYW5hbHl6ZXJN
ZXNzYWdlc0ZvclNvdXJjZUNvZGUpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1s
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0FuYWx5emVyTWVzc2FnZS5qczogQWRk
ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNZXNzYWdlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UucHJvdG90eXBlLmdldCB0ZXh0KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UucHJvdG90eXBlLmdldCBsaW5l
TnVtYmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UucHJvdG90eXBl
LmdldCBjb2x1bW5OdW1iZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2Fn
ZS5wcm90b3R5cGUuZ2V0IHJ1bGVJZCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMv
UmVzb3VyY2UuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgY2FuQmVBbmFseXplZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldCBuZWVkc0FuYWx5c2lzKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuc2V0IG5lZWRzQW5hbHlz
aXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5hbmFseXplLmdl
dCByZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291
cmNlLnByb3RvdHlwZS5hbmFseXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5w
cm90b3R5cGUuc2F2ZUlkZW50aXR5VG9Db29raWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJl
c291cmNlLnByb3RvdHlwZS5oYW5kbGVDdXJyZW50UmV2aXNpb25Db250ZW50Q2hhbmdlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuX2FuYWx5c2lzQ29tcGxldGUp
OgorCiAyMDE0LTEwLTE3ICBKb25vIFdlbGxzICA8am9ub3dlbGxzQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgRVNMaW50IG9wZW4gc291cmNlIGxpYnJhcnkgdG8gdGhl
IGluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQmFzZS9NYWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFz
ZS9NYWluLmpzCmluZGV4IDAxMWYzNzcuLjMyMDBlZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTEwMyw2ICsxMDMsNyBAQCBX
ZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogICAgIHRoaXMuY3NzU3R5bGVNYW5hZ2Vy
ID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXI7CiAgICAgdGhpcy5sb2dNYW5hZ2Vy
ID0gbmV3IFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyOwogICAgIHRoaXMuaXNzdWVNYW5hZ2VyID0g
bmV3IFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXI7CisgICAgdGhpcy5hbmFseXplck1hbmFnZXIg
PSBuZXcgV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlcjsKICAgICB0aGlzLnJ1bnRpbWVNYW5h
Z2VyID0gbmV3IFdlYkluc3BlY3Rvci5SdW50aW1lTWFuYWdlcjsKICAgICB0aGlzLmFwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdl
cjsKICAgICB0aGlzLnRpbWVsaW5lTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVN
YW5hZ2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODkxNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1hbmFnZXIu
anMKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5BbmFseXplck1h
bmFnZXIgPSBmdW5jdGlvbigpCit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMp
OworCisgICAgdGhpcy5fY29uZmlnID0geworICAgICAgICAiZW52IjogeworICAgICAgICAgICAg
ImJyb3dzZXIiOiB0cnVlLAorICAgICAgICAgICAgIm5vZGUiOiBmYWxzZQorICAgICAgICB9LAor
ICAgICAgICAiZ2xvYmFscyI6IHsKKyAgICAgICAgICAgICJkb2N1bWVudCI6IHRydWUKKyAgICAg
ICAgfSwKKyAgICAgICAgInJ1bGVzIjogeworICAgICAgICAgICAgImNvbnNpc3RlbnQtcmV0dXJu
IjogMiwKKyAgICAgICAgICAgICJjdXJseSI6IDAsCisgICAgICAgICAgICAiZXFlcWVxIjogMiwK
KyAgICAgICAgICAgICJuZXctcGFyZW5zIjogMCwKKyAgICAgICAgICAgICJuby1jb21tYS1kYW5n
bGUiOiAwLAorICAgICAgICAgICAgIm5vLWNvbnNvbGUiOiAwLAorICAgICAgICAgICAgIm5vLWNv
bnN0YW50LWNvbmRpdGlvbiI6IDAsCisgICAgICAgICAgICAibm8tZXh0cmEtYmluZCI6IDIsCisg
ICAgICAgICAgICAibm8tZXh0cmEtc2VtaSI6IDIsCisgICAgICAgICAgICAibm8tcHJvdG8iOiAw
LAorICAgICAgICAgICAgIm5vLXJldHVybi1hc3NpZ24iOiAyLAorICAgICAgICAgICAgIm5vLXRy
YWlsaW5nLXNwYWNlcyI6IDIsCisgICAgICAgICAgICAibm8tdW5kZXJzY29yZS1kYW5nbGUiOiAw
LAorICAgICAgICAgICAgIm5vLXVudXNlZC1leHByZXNzaW9ucyI6IDIsCisgICAgICAgICAgICAi
bm8td3JhcC1mdW5jIjogMiwKKyAgICAgICAgICAgICJzZW1pIjogMiwKKyAgICAgICAgICAgICJz
cGFjZS1pbmZpeC1vcHMiOiAyLAorICAgICAgICAgICAgInNwYWNlLXJldHVybi10aHJvdy1jYXNl
IjogMiwKKyAgICAgICAgICAgICJzdHJpY3QiOiAwLAorICAgICAgICAgICAgInZhbGlkLXR5cGVv
ZiI6IDIKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLl9hbmFseXplclNvdXJjZUNvZGVN
YXAgPSBuZXcgV2Vha01hcDsKK307CisKK1dlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIuRXZl
bnQgPSB7CisgICAgQW5hbHl6ZXJNZXNzYWdlc1dlcmVBZGRlZDogImFuYWx5emVyLW1hbmFnZXIt
YW5hbHl6ZXItbWVzc2FnZXMtd2VyZS1hZGRlZCIKK307CisKK1dlYkluc3BlY3Rvci5BbmFseXpl
ck1hbmFnZXIucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuQW5h
bHl6ZXJNYW5hZ2VyLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5
cGUsCisKKyAgICAvLyBQdWJsaWMKKyAgICBtYXBTb3VyY2VDb2RlVG9BbmFseXplck1lc3NhZ2Vz
OiBmdW5jdGlvbihzb3VyY2VDb2RlLCBhbmFseXplck1lc3NhZ2VzKQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoc291cmNlQ29kZSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGFuYWx5
emVyTWVzc2FnZXMpOworCisgICAgICAgIHRoaXMuX2FuYWx5emVyU291cmNlQ29kZU1hcC5zZXQo
c291cmNlQ29kZSwgYW5hbHl6ZXJNZXNzYWdlcyk7CisgICAgfSwKKworICAgIGFuYWx5emVyTWVz
c2FnZXNGb3JTb3VyY2VDb2RlOiBmdW5jdGlvbihzb3VyY2VDb2RlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2FuYWx5emVyU291cmNlQ29kZU1hcC5nZXQoc291cmNlQ29kZSk7CisgICAg
fQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01h
aW4uaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbApp
bmRleCA5ZGIyOWU0Li42MDM5ZWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9NYWluLmh0bWwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTWFpbi5odG1sCkBAIC0xNzQsNiArMTc0LDcgQEAKICAgICA8c2NyaXB0IHNyYz0i
QmFzZS9VdGlsaXRpZXMuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkV4dGVybmFs
L0VzcHJpbWEvZXNwcmltYS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkV4dGVybmFs
L0VTTGludC9lc2xpbnQuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29s
L0FwcGxpY2F0aW9uQ2FjaGVPYnNlcnZlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9
IlByb3RvY29sL0NTU09ic2VydmVyLmpzIj48L3NjcmlwdD4KQEAgLTIwMiw2ICsyMDMsNyBAQAog
ICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvVGltZWxpbmUuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJNb2RlbHMvVGltZWxpbmVSZWNvcmQuanMiPjwvc2NyaXB0PgogCisgICAgPHNjcmlw
dCBzcmM9Ik1vZGVscy9BbmFseXplck1lc3NhZ2UuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJNb2RlbHMvQXBwbGljYXRpb25DYWNoZUZyYW1lLmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHNyYz0iTW9kZWxzL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdC5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9CYWNrRm9yd2FyZEVudHJ5LmpzIj48L3NjcmlwdD4KQEAg
LTQ1Niw2ICs0NTgsNyBAQAogCiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0NvZGVNaXJy
b3JFZGl0aW5nQ29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CiAKKyAgICA8c2NyaXB0IHNyYz0iQ29u
dHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
Q29udHJvbGxlcnMvQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgc3JjPSJDb250cm9sbGVycy9CcmFuY2hNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzIj48L3NjcmlwdD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9BbmFs
eXplck1lc3NhZ2UuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvQW5hbHl6ZXJNZXNzYWdlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmM5NGVhODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Nb2RlbHMvQW5hbHl6ZXJNZXNzYWdlLmpzCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNZXNzYWdlID0gZnVuY3Rpb24oc291cmNlQ29k
ZSwgdGV4dCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBydWxlSWQpCit7CisgICAgV2ViSW5z
cGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworCisgICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29k
ZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlKTsKKyAgICBjb25zb2xlLmFzc2Vy
dCh0eXBlb2YgdGV4dCA9PT0gInN0cmluZyIpOworICAgIGNvbnNvbGUuYXNzZXJ0KHR5cGVvZiBs
aW5lTnVtYmVyID09PSAibnVtYmVyIik7CisKKyAgICB0aGlzLl9zb3VyY2VDb2RlID0gc291cmNl
Q29kZTsKKyAgICB0aGlzLl90ZXh0ID0gdGV4dDsKKyAgICB0aGlzLl9saW5lTnVtYmVyID0gbGlu
ZU51bWJlcjsKKyAgICB0aGlzLl9jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7CisgICAgdGhp
cy5fcnVsZUlkID0gcnVsZUlkOworfTsKKworV2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZS5w
cm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5BbmFseXplck1lc3Nh
Z2UsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKworICAg
IGdldCBzb3VyY2VDb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb2Rl
OworICAgIH0sCisKKyAgICBnZXQgdGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
dGV4dDsKKyAgICB9LAorCisgICAgZ2V0IGxpbmVOdW1iZXIoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX2xpbmVOdW1iZXI7CisgICAgfSwKKworICAgIGdldCBjb2x1bW5OdW1iZXIoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbk51bWJlcjsKKyAgICB9LAorCisgICAg
Z2V0IHJ1bGVJZCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcnVsZUlkOworICAgIH0K
K307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvUmVzb3VyY2UuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvUmVzb3VyY2UuanMKaW5kZXggN2EyNDVjMy4uNGUyNGQ0YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9SZXNvdXJjZS5qcwpAQCAt
NTEsNiArNTEsNyBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UgPSBmdW5jdGlvbih1cmwsIG1pbWVU
eXBlLCB0eXBlLCBsb2FkZXJJZGVudGlmaWVyLCByZXF1ZXN0SQogICAgIHRoaXMuX3NpemUgPSBO
YU47CiAgICAgdGhpcy5fdHJhbnNmZXJTaXplID0gTmFOOwogICAgIHRoaXMuX2NhY2hlZCA9IGZh
bHNlOworICAgIHRoaXMuX25lZWRzQW5hbHlzaXMgPSB0cnVlOwogfTsKIAogV2ViSW5zcGVjdG9y
Lk9iamVjdC5hZGRDb25zdHJ1Y3RvckZ1bmN0aW9ucyhXZWJJbnNwZWN0b3IuUmVzb3VyY2UpOwpA
QCAtNzAsNyArNzEsOCBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuRXZlbnQgPSB7CiAgICAgVGlt
ZXN0YW1wc0RpZENoYW5nZTogInJlc291cmNlLXRpbWVzdGFtcHMtZGlkLWNoYW5nZSIsCiAgICAg
U2l6ZURpZENoYW5nZTogInJlc291cmNlLXNpemUtZGlkLWNoYW5nZSIsCiAgICAgVHJhbnNmZXJT
aXplRGlkQ2hhbmdlOiAicmVzb3VyY2UtdHJhbnNmZXItc2l6ZS1kaWQtY2hhbmdlIiwKLSAgICBD
YWNoZVN0YXR1c0RpZENoYW5nZTogInJlc291cmNlLWNhY2hlZC1kaWQtY2hhbmdlIgorICAgIENh
Y2hlU3RhdHVzRGlkQ2hhbmdlOiAicmVzb3VyY2UtY2FjaGVkLWRpZC1jaGFuZ2UiLAorICAgIEFu
YWx5emVyRGlkRmluaXNoOiAicmVzb3VyY2UtYW5hbHl6ZXItZGlkLWZpbmlzaCIKIH07CiAKIC8v
IEtlZXAgdGhlc2UgaW4gc3luYyB3aXRoIHRoZSAiUmVzb3VyY2VUeXBlIiBlbnVtIGRlZmluZWQg
YnkgdGhlICJQYWdlIiBkb21haW4uCkBAIC04NSw2ICs4Nyw5IEBAIFdlYkluc3BlY3Rvci5SZXNv
dXJjZS5UeXBlID0gewogICAgIE90aGVyOiAicmVzb3VyY2UtdHlwZS1vdGhlciIKIH07CiAKK1dl
Ykluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLl90eXBlQW5hbHl6ZXJNYXAgPSBuZXcgTWFwOworV2Vi
SW5zcGVjdG9yLlJlc291cmNlLlR5cGUuX3R5cGVBbmFseXplck1hcC5zZXQoV2ViSW5zcGVjdG9y
LlJlc291cmNlLlR5cGUuU2NyaXB0LCBlc2xpbnQpOworCiAvLyBUaGlzIE1JTUUgVHlwZSBtYXAg
aXMgcHJpdmF0ZSwgdXNlIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLmZyb21NSU1FVHlwZSgp
LgogV2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGUuX21pbWVUeXBlTWFwID0gewogICAgICJ0ZXh0
L2h0bWwiOiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5Eb2N1bWVudCwKQEAgLTQzNiw2ICs0
NDEsNTYgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0
dXJuIHRoaXMuX3NjcmlwdHMgfHwgW107CiAgICAgfSwKIAorICAgIGdldCBjYW5CZUFuYWx5emVk
KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2UuVHlwZS5TY3JpcHQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0sCisKKyAgICBnZXQgbmVlZHNBbmFseXNpcygpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fbmVlZHNBbmFseXNpczsKKyAgICB9LAorCisgICAgc2V0IG5lZWRzQW5h
bHlzaXModmFsdWUpCisgICAgeworICAgICAgICB0aGlzLl9uZWVkc0FuYWx5c2lzID0gdmFsdWU7
CisgICAgfSwKKworICAgIGFuYWx5emU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICgh
dGhpcy5fbmVlZHNBbmFseXNpcykgeworICAgICAgICAgICAgdmFyIGFuYWx5emVyTWVzc2FnZXMg
PSBXZWJJbnNwZWN0b3IuYW5hbHl6ZXJNYW5hZ2VyLmFuYWx5emVyTWVzc2FnZXNGb3JTb3VyY2VD
b2RlKHRoaXMpOworICAgICAgICAgICAgdGhpcy5fYW5hbHlzaXNDb21wbGV0ZShhbmFseXplck1l
c3NhZ2VzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBh
bmFseXplciA9IFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLl90eXBlQW5hbHl6ZXJNYXAuZ2V0
KHRoaXMuX3R5cGUpOworCisgICAgICAgIGZ1bmN0aW9uIHJldHJpZXZlQW5hbHl6ZXJNZXNzYWdl
cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBhbmFseXplck1lc3NhZ2VzID0gW107Cisg
ICAgICAgICAgICB2YXIgcmF3QW5hbHl6ZXJNZXNzYWdlcyA9IGFuYWx5emVyLnZlcmlmeSh0aGlz
LmNvbnRlbnQsIFdlYkluc3BlY3Rvci5hbmFseXplck1hbmFnZXIuX2NvbmZpZyk7CisKKyAgICAg
ICAgICAgIGZvciAodmFyIHJhd0FuYWx5emVyTWVzc2FnZSBvZiByYXdBbmFseXplck1lc3NhZ2Vz
KSB7CisgICAgICAgICAgICAgICAgYW5hbHl6ZXJNZXNzYWdlcy5wdXNoKG5ldyBXZWJJbnNwZWN0
b3IuQW5hbHl6ZXJNZXNzYWdlKHRoaXMsIHJhd0FuYWx5emVyTWVzc2FnZS5tZXNzYWdlLCByYXdB
bmFseXplck1lc3NhZ2UubGluZSwgcmF3QW5hbHl6ZXJNZXNzYWdlLmNvbHVtbiwgcmF3QW5hbHl6
ZXJNZXNzYWdlLnJ1bGVJZCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBXZWJJbnNw
ZWN0b3IuYW5hbHl6ZXJNYW5hZ2VyLm1hcFNvdXJjZUNvZGVUb0FuYWx5emVyTWVzc2FnZXModGhp
cywgYW5hbHl6ZXJNZXNzYWdlcyk7CisgICAgICAgICAgICB0aGlzLl9uZWVkc0FuYWx5c2lzID0g
ZmFsc2U7CisKKyAgICAgICAgICAgIHRoaXMuX2FuYWx5c2lzQ29tcGxldGUoYW5hbHl6ZXJNZXNz
YWdlcyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRoaXMuX2NvbnRlbnRSZWNlaXZlZCkg
eworICAgICAgICAgICAgdGhpcy5yZXF1ZXN0Q29udGVudChyZXRyaWV2ZUFuYWx5emVyTWVzc2Fn
ZXMuYmluZCh0aGlzKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICByZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMuY2FsbCh0aGlzKTsKKyAgICB9LAorCiAgICAgc2Ny
aXB0Rm9yTG9jYXRpb246IGZ1bmN0aW9uKHNvdXJjZUNvZGVMb2NhdGlvbikKICAgICB7CiAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KCEodGhpcyBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VN
YXBSZXNvdXJjZSkpOwpAQCAtNzAxLDYgKzc1NiwxOCBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2Uu
cHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgY29va2llW1dlYkluc3BlY3Rvci5SZXNvdXJj
ZS5VUkxDb29raWVLZXldID0gdGhpcy51cmwuaGFzaDsKICAgICAgICAgY29va2llW1dlYkluc3Bl
Y3Rvci5SZXNvdXJjZS5NYWluUmVzb3VyY2VDb29raWVLZXldID0gdGhpcy5pc01haW5SZXNvdXJj
ZSgpOworICAgIH0sCisKKyAgICBoYW5kbGVDdXJyZW50UmV2aXNpb25Db250ZW50Q2hhbmdlOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9uZWVkc0FuYWx5c2lzID0gdHJ1ZTsKKyAg
ICB9LAorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX2FuYWx5c2lzQ29tcGxldGU6IGZ1bmN0aW9u
KGFuYWx5emVyTWVzc2FnZXMpCisgICAgeworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuUmVzb3VyY2UuRXZlbnQuQW5hbHl6ZXJEaWRGaW5pc2gsIHth
bmFseXplck1lc3NhZ2VzOiBhbmFseXplck1lc3NhZ2VzfSk7CiAgICAgfQogfTsKIAo=
</data>
<flag name="review"
          id="264907"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>240140</attachid>
            <date>2014-10-20 12:35:50 -0700</date>
            <delta_ts>2014-10-20 12:35:50 -0700</delta_ts>
            <desc>[TEST CASE] small site to test.</desc>
            <filename>test.zip</filename>
            <type>application/zip</type>
            <size>3380</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">UEsDBAoAAAAAAGd0UUUAAAAAAAAAAAAAAAAGABAAYmFzaWMvVVgMAAAAAACSi0FU9QEUAFBLAwQU
AAgACABtW01FAAAAAAAAAAAAAAAAEAAQAGJhc2ljL2luZGV4Lmh0bWxVWAwAJGNFVI4ZPFT1ARQA
zVPBTgIxEL3zFeOeIDFsQE9aelEPnjCRi8fSzkKldDZtITHGf3d2C+xyIHK0STPtvPemL+1U3DzP
nxYfby+wTlsnB+IYUBk5AB4i2eRQvutg6wSOlLF+BQuMSZQZyrTYEvKmGXsVoCKCGRQcisczYMmT
AQ49oNp5nSx50GvlV8iq4Qi+T3BLORQ80/1kA+XRgSize7Ek83VwV8t5jR6sjzXqROEWlDeQ1pyj
BlA9jE8JDKnUpcairE+VXn0jhIiauEavJPqEjRIjgrMeI4OJWjJTIzkE3kbErG/tRhjyaU7pDVB1
zI0OFhDqQHtr0EDASLugMT50Vpa7lPi6yGtn9WZWGFrYLYY4GY4KmZcwEWWm/aGZ9jTTTiM0GZSi
bEP/oSEGPSvyejL+jIXsHuACbXod7e462v1l2v9owtx93Iztj/oFUEsHCC9OKVtEAQAAaQMAAFBL
AwQUAAgACAAtXUlFAAAAAAAAAAAAAAAAEAAQAGJhc2ljL3NjcmlwdDEuanNVWAwAJGNFVNXWNlT1
ARQAK0ssUqhQsFUwtOYqAzIrgUwlQyVrLq600rzkksz8PIWU/JDM3NSiYkMNTa5qLgUgACksASos
Ti0BSeWXlmik5PuXZKQW6SgYGhgYaFpz1WIxwIh8A8BycO3J+XnF+Tmpejn56RpK+SApJbAOAFBL
BwhTyo7lbQAAAMwAAABQSwMECgAAAAAAa2RURQAAAAAAAAAAAAAAAAkAEABfX01BQ09TWC9VWAwA
+WNFVPljRVT1ARQAUEsDBAoAAAAAAGtkVEUAAAAAAAAAAAAAAAAPABAAX19NQUNPU1gvYmFzaWMv
VVgMAPljRVT5Y0VU9QEUAFBLAwQUAAgACAAtXUlFAAAAAAAAAAAAAAAAGwAQAF9fTUFDT1NYL2Jh
c2ljLy5fc2NyaXB0MS5qc1VYDAAkY0VU1dY2VPUBFABjYBVjZ2BiYPBNTFbwD1aIUIACkBgDJxAb
AXEdEIP4GxiIAo4hIUFQJkjHDCCWQFPCiBAXTc7P1UssKMhJ1SssTSxKzCvJzEtlKNQ3MDAwtDY1
MUpNMzQ1tw5OTEssyrRmAABQSwcI9NnCeWMAAACwAAAAUEsDBBQACAAIAKxcSUUAAAAAAAAAAAAA
AAAQABAAYmFzaWMvc2NyaXB0Mi5qc1VYDAAkY0VU49U2VPUBFAArSyxSqFCwVTC05ioDMiuBTCVD
JWsurrTSvOSSzPw8heSMxLz01LDEnNLUYg1NBa5qLgUgAOsBagKxIZpAumq5AFBLBwieILxJQQAA
AFAAAABQSwMEFAAIAAgArFxJRQAAAAAAAAAAAAAAABsAEABfX01BQ09TWC9iYXNpYy8uX3Njcmlw
dDIuanNVWAwAJGNFVOPVNlT1ARQAY2AVY2dgYmDwTUxW8A9WiFCAApAYAycQGwFxHRCD+BsYiAKO
ISFBUCZIxwwglkBTwogQF03Oz9VLLCjISdUrLE0sSswrycxLZSjUNzAwMLQ2NTE2SzFNNbYOTkxL
LMq0ZgAAUEsHCDAfXIljAAAAsAAAAFBLAwQUAAgACAAFX0NFAAAAAAAAAAAAAAAAEAAQAGJhc2lj
L3NjcmlwdDMuanNVWAwAJGNFVErxLlT1ARQAK0ssUqhQsFUwtOYqAzIrgUwlQyVrLjCvJCMzLx0o
klaal1ySmZ+noJFalppXoqnAVc3FWZ6RWALkFgHljYytuWq5uODKkjMS89JTwxJzSlOLNcCqFYAA
bA3QHhAbYg/IolouAFBLBwh7HHGtZAAAAIMAAABQSwMEFAAIAAgABV9DRQAAAAAAAAAAAAAAABsA
EABfX01BQ09TWC9iYXNpYy8uX3NjcmlwdDMuanNVWAwAJGNFVErxLlT1ARQAY2AVY2dgYmDwTUxW
8A9WiFCAApAYAycQGwFxHRCD+BsYiAKOISFBUCZIxwwglkBTwogQF03Oz9VLLCjISdUrLE0sSswr
ycxLZSjUNzAwMLQ2NTFKTTM0SbQOTkxLLMq0ZgAAUEsHCDvwRgxjAAAAsAAAAFBLAwQUAAgACAAP
X0NFAAAAAAAAAAAAAAAAEAAQAGJhc2ljL3NjcmlwdDQuanNVWAwAJGNFVF3xLlT1ARQAK0ssUqhQ
sFUwtOYqAzIrgUwlQyVrLq600rzkksz8PIXkjMS89NSwxJzS1GINTa5qLgUgAGsB6gGxIXpAmmq5
AFBLBwgA9EQ6QAAAAE8AAABQSwMEFAAIAAgAD19DRQAAAAAAAAAAAAAAABsAEABfX01BQ09TWC9i
YXNpYy8uX3NjcmlwdDQuanNVWAwAJGNFVF3xLlT1ARQAY2AVY2dgYmDwTUxW8A9WiFCAApAYAycQ
GwFxHRCD+BsYiAKOISFBUCZIxwwglkBTwogQF03Oz9VLLCjISdUrLE0sSswrycxLZSjUNzAwMLQ2
NTFKTTM0TbEOTkxLLMq0ZgAAUEsHCL/k4StjAAAAsAAAAFBLAwQUAAgACACPjDdFAAAAAAAAAAAA
AAAADwAQAGJhc2ljL3N0eWxlLmNzc1VYDAAAAAAADRIiVPUBFABLyk+pVKjmUgCCktSKEt3EnMz0
PCuFnNS0EmuwaFp+XolucWZVqpWCoVFBhTVXLRcAUEsHCButXucxAAAANAAAAFBLAwQUAAgACACP
jDdFAAAAAAAAAAAAAAAAGgAQAF9fTUFDT1NYL2Jhc2ljLy5fc3R5bGUuY3NzVVgMAAAAAAANEiJU
9QEUAGNgFWNnYGJg8E1MVvAPVohQgAKQGAMnEBsBcRMQg/hbGIgCjiEhQVAmSMcMIJZBU8KIEBdN
zs/VSywoyEnVKyxNLErMK8nMS2Uo1DcwMDC0NjUxME8yMbOwDk5MSyzKBKmzZgAAUEsHCDl4Lu9l
AAAAtAAAAFBLAQIVAwoAAAAAAGd0UUUAAAAAAAAAAAAAAAAGAAwAAAAAAAAAAEDtQQAAAABiYXNp
Yy9VWAgAAAAAAJKLQVRQSwECFQMUAAgACABtW01FL04pW0QBAABpAwAAEAAMAAAAAAAAAABApIE0
AAAAYmFzaWMvaW5kZXguaHRtbFVYCAAkY0VUjhk8VFBLAQIVAxQACAAIAC1dSUVTyo7lbQAAAMwA
AAAQAAwAAAAAAAAAAECkgcYBAABiYXNpYy9zY3JpcHQxLmpzVVgIACRjRVTV1jZUUEsBAhUDCgAA
AAAAa2RURQAAAAAAAAAAAAAAAAkADAAAAAAAAAAAQP1BgQIAAF9fTUFDT1NYL1VYCAD5Y0VU+WNF
VFBLAQIVAwoAAAAAAGtkVEUAAAAAAAAAAAAAAAAPAAwAAAAAAAAAAED9QbgCAABfX01BQ09TWC9i
YXNpYy9VWAgA+WNFVPljRVRQSwECFQMUAAgACAAtXUlF9NnCeWMAAACwAAAAGwAMAAAAAAAAAABA
pIH1AgAAX19NQUNPU1gvYmFzaWMvLl9zY3JpcHQxLmpzVVgIACRjRVTV1jZUUEsBAhUDFAAIAAgA
rFxJRZ4gvElBAAAAUAAAABAADAAAAAAAAAAAQKSBsQMAAGJhc2ljL3NjcmlwdDIuanNVWAgAJGNF
VOPVNlRQSwECFQMUAAgACACsXElFMB9ciWMAAACwAAAAGwAMAAAAAAAAAABApIFABAAAX19NQUNP
U1gvYmFzaWMvLl9zY3JpcHQyLmpzVVgIACRjRVTj1TZUUEsBAhUDFAAIAAgABV9DRXscca1kAAAA
gwAAABAADAAAAAAAAAAAQKSB/AQAAGJhc2ljL3NjcmlwdDMuanNVWAgAJGNFVErxLlRQSwECFQMU
AAgACAAFX0NFO/BGDGMAAACwAAAAGwAMAAAAAAAAAABApIGuBQAAX19NQUNPU1gvYmFzaWMvLl9z
Y3JpcHQzLmpzVVgIACRjRVRK8S5UUEsBAhUDFAAIAAgAD19DRQD0RDpAAAAATwAAABAADAAAAAAA
AAAAQKSBagYAAGJhc2ljL3NjcmlwdDQuanNVWAgAJGNFVF3xLlRQSwECFQMUAAgACAAPX0NFv+Th
K2MAAACwAAAAGwAMAAAAAAAAAABApIH4BgAAX19NQUNPU1gvYmFzaWMvLl9zY3JpcHQ0LmpzVVgI
ACRjRVRd8S5UUEsBAhUDFAAIAAgAj4w3RRutXucxAAAANAAAAA8ADAAAAAAAAAAAQKSBtAcAAGJh
c2ljL3N0eWxlLmNzc1VYCAAAAAAADRIiVFBLAQIVAxQACAAIAI+MN0U5eC7vZQAAALQAAAAaAAwA
AAAAAAAAAECkgTIIAABfX01BQ09TWC9iYXNpYy8uX3N0eWxlLmNzc1VYCAAAAAAADRIiVFBLBQYA
AAAADgAOAC8EAADvCAAAAAA=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240642</attachid>
            <date>2014-10-29 17:25:32 -0700</date>
            <delta_ts>2014-11-05 01:34:21 -0800</delta_ts>
            <desc>[PATCH] Adjustments after comments.</desc>
            <filename>analyzeronly.diff</filename>
            <type>text/plain</type>
            <size>15374</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDk2M2I3OTYuLjNiYjdiZjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE0LTEwLTI5ICBKb25vIFdlbGxzICA8
am9ub3dlbGxzQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgaW5mcmFz
dHJ1Y3R1cmUgZm9yIGVzbGludCBiYXNlZCBzdGF0aWMgYW5hbHl6ZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzg5MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBhIG1hbmFnZXIgdG8gYW5h
bHl6ZSBzb3VyY2UgY29kZSwgcmV0dXJuIHdhcm5pbmdzIChBbmFseXplck1lc3NhZ2VzKSwKKyAg
ICAgICAgYW5kIGNhY2hlIHdhcm5pbmdzLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9CYXNl
L01haW4uanM6IENyZWF0ZSBhbmFseXplck1hbmFnZXIgc2luZ2xldG9uLgorICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIpOgorICAgICAgICAoc2V0IFdlYkluc3Bl
Y3Rvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZS5n
ZXRBbmFseXplck1lc3NhZ2VzRm9yU291cmNlQ29kZS4pOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkFuYWx5emVyTWFuYWdlci5wcm90b3R5cGUuZ2V0QW5hbHl6ZXJNZXNzYWdlc0ZvclNvdXJjZUNv
ZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5wcm90b3R5cGUuZ2V0
IG1hcFNvdXJjZUNvZGVUb0FuYWx5emVyTWVzc2FnZXMpOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvTWFpbi5odG1sOiBBZGQgbmV3IGZpbGVzLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9k
ZWxzL0FuYWx5emVyTWVzc2FnZS5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5h
bHl6ZXJNZXNzYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UucHJv
dG90eXBlLmdldCBzb3VyY2VDb2RlTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFu
YWx5emVyTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHNvdXJjZUNvZGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkFuYWx5emVyTWVzc2FnZS5wcm90b3R5cGUuZ2V0IGxpbmVOdW1iZXIpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHRleHQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHJ1bGVJZGVu
dGlmaWVyKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHlsZVNoZWV0Lmpz
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5nZXQgY2FuQmVBbmFseXplZCk6CisgICAg
ICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlQ29kZS5qczogQWRkaW5nIF9uZWVkc0Fu
YWx5c2lzLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLmhhbmRsZUN1cnJlbnRSZXZpc2lvbkNvbnRl
bnRDaGFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLnNl
dCBuZWVkc0FuYWx5c2lzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3Rv
dHlwZS5nZXQgbmVlZHNBbmFseXNpcyk6CisKIDIwMTQtMTAtMTAgQnJpYW4gSi4gQnVyZyAgPGJ1
cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdGltZWxpbmVz
IHNob3VsZCBub3QgY291bnQgdGltZSBlbGFwc2VkIHdoaWxlIHBhdXNlZCBpbiB0aGUgZGVidWdn
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2Uv
TWFpbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5q
cwppbmRleCAyYjUyYTcwLi5jNjRhYzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDUsNiArMTA1LDcgQEAgV2ViSW5zcGVjdG9yLmxvYWRl
ZCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmNzc1N0eWxlTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVNYW5hZ2VyOwogICAgIHRoaXMubG9nTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0
b3IuTG9nTWFuYWdlcjsKICAgICB0aGlzLmlzc3VlTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3Iu
SXNzdWVNYW5hZ2VyOworICAgIHRoaXMuYW5hbHl6ZXJNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rv
ci5BbmFseXplck1hbmFnZXI7CiAgICAgdGhpcy5ydW50aW1lTWFuYWdlciA9IG5ldyBXZWJJbnNw
ZWN0b3IuUnVudGltZU1hbmFnZXI7CiAgICAgdGhpcy5hcHBsaWNhdGlvbkNhY2hlTWFuYWdlciA9
IG5ldyBXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXI7CiAgICAgdGhpcy50aW1l
bGluZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5
emVyTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40NzkzMDhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzCkBAIC0wLDAgKzEsMTIz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlciA9IGZ1bmN0aW9u
KCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICB0aGlzLl9l
c2xpbnRDb25maWcgPSB7CisgICAgICAgICJlbnYiOiB7CisgICAgICAgICAgICAiYnJvd3NlciI6
IHRydWUsCisgICAgICAgICAgICAibm9kZSI6IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJn
bG9iYWxzIjogeworICAgICAgICAgICAgImRvY3VtZW50IjogdHJ1ZQorICAgICAgICB9LAorICAg
ICAgICAicnVsZXMiOiB7CisgICAgICAgICAgICAiY29uc2lzdGVudC1yZXR1cm4iOiAyLAorICAg
ICAgICAgICAgImN1cmx5IjogMCwKKyAgICAgICAgICAgICJlcWVxZXEiOiAwLAorICAgICAgICAg
ICAgIm5ldy1wYXJlbnMiOiAwLAorICAgICAgICAgICAgIm5vLWNvbW1hLWRhbmdsZSI6IDAsCisg
ICAgICAgICAgICAibm8tY29uc29sZSI6IDAsCisgICAgICAgICAgICAibm8tY29uc3RhbnQtY29u
ZGl0aW9uIjogMCwKKyAgICAgICAgICAgICJuby1leHRyYS1iaW5kIjogMiwKKyAgICAgICAgICAg
ICJuby1leHRyYS1zZW1pIjogMiwKKyAgICAgICAgICAgICJuby1wcm90byI6IDAsCisgICAgICAg
ICAgICAibm8tcmV0dXJuLWFzc2lnbiI6IDIsCisgICAgICAgICAgICAibm8tdHJhaWxpbmctc3Bh
Y2VzIjogMiwKKyAgICAgICAgICAgICJuby11bmRlcnNjb3JlLWRhbmdsZSI6IDAsCisgICAgICAg
ICAgICAibm8tdW51c2VkLWV4cHJlc3Npb25zIjogMiwKKyAgICAgICAgICAgICJuby13cmFwLWZ1
bmMiOiAyLAorICAgICAgICAgICAgInNlbWkiOiAyLAorICAgICAgICAgICAgInNwYWNlLWluZml4
LW9wcyI6IDIsCisgICAgICAgICAgICAic3BhY2UtcmV0dXJuLXRocm93LWNhc2UiOiAyLAorICAg
ICAgICAgICAgInN0cmljdCI6IDAsCisgICAgICAgICAgICAidmFsaWQtdHlwZW9mIjogMgorICAg
ICAgICB9CisgICAgfTsKKworICAgIHRoaXMuX2FuYWx5emVyU291cmNlQ29kZU1hcCA9IG5ldyBX
ZWFrTWFwOworfTsKKworV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci50eXBlQW5hbHl6ZXJN
YXAgPSBuZXcgTWFwOworV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci50eXBlQW5hbHl6ZXJN
YXAuc2V0KFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlwdCwgZXNsaW50KTsKKworV2Vi
SW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5FdmVudCA9IHsKKyAgICBBbmFseXplck1lc3NhZ2Vz
V2VyZUFkZGVkOiAiYW5hbHl6ZXItbWFuYWdlci1hbmFseXplci1tZXNzYWdlcy13ZXJlLWFkZGVk
IgorfTsKKworV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5wcm90b3R5cGUgPSB7CisgICAg
Y29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIsCisgICAgX19wcm90b19f
OiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKworICAgIC8vIFB1YmxpYworCisgICAg
Z2V0QW5hbHl6ZXJNZXNzYWdlc0ZvclNvdXJjZUNvZGU6IGZ1bmN0aW9uKHNvdXJjZUNvZGUpCisg
ICAgeworICAgICAgICB2YXIgYW5hbHl6ZXJNYW5hZ2VyID0gdGhpczsKKworICAgICAgICByZXR1
cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBp
ZiAoIXNvdXJjZUNvZGUubmVlZHNBbmFseXNpcykgeworICAgICAgICAgICAgICAgIHZhciBhbmFs
eXplck1lc3NhZ2VzID0gYW5hbHl6ZXJNYW5hZ2VyLl9hbmFseXplclNvdXJjZUNvZGVNYXAuZ2V0
KHNvdXJjZUNvZGUpOworICAgICAgICAgICAgICAgIHJlc29sdmUoYW5hbHl6ZXJNZXNzYWdlcyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2
YXIgYW5hbHl6ZXIgPSBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnR5cGVBbmFseXplck1h
cC5nZXQoc291cmNlQ29kZS5fdHlwZSk7CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJpZXZl
QW5hbHl6ZXJNZXNzYWdlcygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIGFu
YWx5emVyTWVzc2FnZXMgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgcmF3QW5hbHl6ZXJNZXNz
YWdlcyA9IGFuYWx5emVyLnZlcmlmeShzb3VyY2VDb2RlLmNvbnRlbnQsIGFuYWx5emVyTWFuYWdl
ci5fZXNsaW50Q29uZmlnKTsKKworICAgICAgICAgICAgICAgIGZvciAodmFyIHJhd0FuYWx5emVy
TWVzc2FnZSBvZiByYXdBbmFseXplck1lc3NhZ2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGFu
YWx5emVyTWVzc2FnZXMucHVzaChuZXcgV2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZShuZXcg
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbihzb3VyY2VDb2RlLCByYXdBbmFseXplck1l
c3NhZ2UubGluZSAtIDEsIHJhd0FuYWx5emVyTWVzc2FnZS5jb2x1bW4gLSAxKSwgcmF3QW5hbHl6
ZXJNZXNzYWdlLm1lc3NhZ2UsIHJhd0FuYWx5emVyTWVzc2FnZS5ydWxlSWQpKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhbmFseXplck1hbmFnZXIubWFwU291cmNlQ29k
ZVRvQW5hbHl6ZXJNZXNzYWdlcyhzb3VyY2VDb2RlLCBhbmFseXplck1lc3NhZ2VzKTsKKyAgICAg
ICAgICAgICAgICBzb3VyY2VDb2RlLm5lZWRzQW5hbHlzaXMgPSBmYWxzZTsKKworICAgICAgICAg
ICAgICAgIHJlc29sdmUoYW5hbHl6ZXJNZXNzYWdlcyk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghc291cmNlQ29kZS5fY29udGVudFJlY2VpdmVkKSB7CisgICAgICAgICAgICAg
ICAgc291cmNlQ29kZS5yZXF1ZXN0Q29udGVudChyZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMuYmlu
ZChhbmFseXplck1hbmFnZXIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0cmll
dmVBbmFseXplck1lc3NhZ2VzLmNhbGwoYW5hbHl6ZXJNYW5hZ2VyKTsKKyAgICAgICAgfSk7Cisg
ICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIG1hcFNvdXJjZUNvZGVUb0FuYWx5emVyTWVz
c2FnZXM6IGZ1bmN0aW9uKHNvdXJjZUNvZGUsIGFuYWx5emVyTWVzc2FnZXMpCisgICAgeworICAg
ICAgICBjb25zb2xlLmFzc2VydChzb3VyY2VDb2RlKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
YW5hbHl6ZXJNZXNzYWdlcyk7CisKKyAgICAgICAgdGhpcy5fYW5hbHl6ZXJTb3VyY2VDb2RlTWFw
LnNldChzb3VyY2VDb2RlLCBhbmFseXplck1lc3NhZ2VzKTsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IDI2MmQ1NGIuLjkx
ZjE5ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01h
aW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0
bWwKQEAgLTE3NSw2ICsxNzUsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJCYXNlL1V0aWxpdGllcy5q
cyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iRXh0ZXJuYWwvRXNwcmltYS9lc3ByaW1h
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRXh0ZXJuYWwvRVNMaW50L2VzbGludC5q
cyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2wvQXBwbGljYXRpb25DYWNo
ZU9ic2VydmVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2wvQ1NTT2Jz
ZXJ2ZXIuanMiPjwvc2NyaXB0PgpAQCAtMjAyLDYgKzIwMyw3IEBACiAgICAgPHNjcmlwdCBzcmM9
Ik1vZGVscy9UaW1lbGluZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9U
aW1lbGluZVJlY29yZC5qcyI+PC9zY3JpcHQ+CiAKKyAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0Fu
YWx5emVyTWVzc2FnZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9BcHBs
aWNhdGlvbkNhY2hlRnJhbWUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMv
QXBwbGljYXRpb25DYWNoZU1hbmlmZXN0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
TW9kZWxzL0JhY2tGb3J3YXJkRW50cnkuanMiPjwvc2NyaXB0PgpAQCAtNDU2LDYgKzQ1OCw3IEBA
CiAKICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQ29kZU1pcnJvckVkaXRpbmdDb250cm9s
bGVyLmpzIj48L3NjcmlwdD4KIAorICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9BbmFseXpl
ck1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9BcHBs
aWNhdGlvbkNhY2hlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRy
b2xsZXJzL0JyYW5jaE1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250
cm9sbGVycy9DU1NTdHlsZU1hbmFnZXIuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0FuYWx5emVyTWVzc2FnZS5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9BbmFseXplck1lc3Nh
Z2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwM2RjYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9B
bmFseXplck1lc3NhZ2UuanMKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3Bl
Y3Rvci5BbmFseXplck1lc3NhZ2UgPSBmdW5jdGlvbihzb3VyY2VDb2RlT3JTb3VyY2VDb2RlTG9j
YXRpb24sIHRleHQsIHJ1bGVJZGVudGlmaWVyKQoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3Qu
Y2FsbCh0aGlzKTsKKworICAgIGNvbnNvbGUuYXNzZXJ0KHNvdXJjZUNvZGVPclNvdXJjZUNvZGVM
b2NhdGlvbiBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24gfHwgc291
cmNlQ29kZU9yU291cmNlQ29kZUxvY2F0aW9uIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGUpOworICAgIGNvbnNvbGUuYXNzZXJ0KHR5cGVvZiB0ZXh0ID09PSAic3RyaW5nIik7CisK
KyAgICBpZiAoc291cmNlQ29kZU9yU291cmNlQ29kZUxvY2F0aW9uIGluc3RhbmNlb2YgV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbikgeworICAgICAgICB0aGlzLl9zb3VyY2VDb2RlID0g
c291cmNlQ29kZU9yU291cmNlQ29kZUxvY2F0aW9uLnNvdXJjZUNvZGU7CisgICAgICAgIHRoaXMu
X3NvdXJjZUNvZGVMb2NhdGlvbiA9IHNvdXJjZUNvZGVPclNvdXJjZUNvZGVMb2NhdGlvbjsKKyAg
ICB9IGVsc2UgaWYgKHNvdXJjZUNvZGVPclNvdXJjZUNvZGVMb2NhdGlvbiBpbnN0YW5jZW9mIFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlKSB7CisgICAgICAgIHRoaXMuX3NvdXJjZUNvZGUgPSBzb3Vy
Y2VDb2RlT3JTb3VyY2VDb2RlTG9jYXRpb247CisgICAgfQorCisgICAgdGhpcy5fdGV4dCA9IHRl
eHQ7CisgICAgdGhpcy5fcnVsZUlkZW50aWZpZXIgPSBydWxlSWRlbnRpZmllcjsKK307CisKK1dl
Ykluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9y
OiBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNZXNzYWdlLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVj
dG9yLk9iamVjdC5wcm90b3R5cGUsCisKKyAgICBnZXQgc291cmNlQ29kZUxvY2F0aW9uKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb2RlTG9jYXRpb247CisgICAgfSwKKwor
ICAgIGdldCBzb3VyY2VDb2RlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VD
b2RlTG9jYXRpb24uc291cmNlQ29kZTsKKyAgICB9LAorCisgICAgZ2V0IGxpbmVOdW1iZXIoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZUNvZGVMb2NhdGlvbi5saW5lTnVtYmVy
OworICAgIH0sCisKKyAgICBnZXQgdGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
dGV4dDsKKyAgICB9LAorCisgICAgZ2V0IHJ1bGVJZGVudGlmaWVyKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9ydWxlSWRlbnRpZmllcjsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1N0eWxlU2hlZXQuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVTaGVl
dC5qcwppbmRleCA1MWQ5ZTZmLi5hYzY0MGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVTaGVldC5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVTaGVldC5qcwpAQCAt
MTAzLDYgKzEwMyw4IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZSA9IHsK
IAogICAgIGhhbmRsZUN1cnJlbnRSZXZpc2lvbkNvbnRlbnRDaGFuZ2U6IGZ1bmN0aW9uKCkKICAg
ICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5oYW5kbGVDdXJy
ZW50UmV2aXNpb25Db250ZW50Q2hhbmdlLmNhbGwodGhpcyk7CisKICAgICAgICAgaWYgKCF0aGlz
Ll9pZCkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzCmluZGV4IGEwNTQ2MGUuLjQ0
ZDNiNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9SZXNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Nb2RlbHMvUmVzb3VyY2UuanMKQEAgLTcwLDcgKzcwLDggQEAgV2ViSW5zcGVjdG9yLlJlc291
cmNlLkV2ZW50ID0gewogICAgIFRpbWVzdGFtcHNEaWRDaGFuZ2U6ICJyZXNvdXJjZS10aW1lc3Rh
bXBzLWRpZC1jaGFuZ2UiLAogICAgIFNpemVEaWRDaGFuZ2U6ICJyZXNvdXJjZS1zaXplLWRpZC1j
aGFuZ2UiLAogICAgIFRyYW5zZmVyU2l6ZURpZENoYW5nZTogInJlc291cmNlLXRyYW5zZmVyLXNp
emUtZGlkLWNoYW5nZSIsCi0gICAgQ2FjaGVTdGF0dXNEaWRDaGFuZ2U6ICJyZXNvdXJjZS1jYWNo
ZWQtZGlkLWNoYW5nZSIKKyAgICBDYWNoZVN0YXR1c0RpZENoYW5nZTogInJlc291cmNlLWNhY2hl
ZC1kaWQtY2hhbmdlIiwKKyAgICBBbmFseXplckRpZEZpbmlzaDogInJlc291cmNlLWFuYWx5emVy
LWRpZC1maW5pc2giCiB9OwogCiAvLyBLZWVwIHRoZXNlIGluIHN5bmMgd2l0aCB0aGUgIlJlc291
cmNlVHlwZSIgZW51bSBkZWZpbmVkIGJ5IHRoZSAiUGFnZSIgZG9tYWluLgpAQCAtNDM2LDYgKzQz
NywxMyBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAgICByZXR1
cm4gdGhpcy5fc2NyaXB0cyB8fCBbXTsKICAgICB9LAogCisgICAgZ2V0IGNhbkJlQW5hbHl6ZWQo
KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3R5cGUgPT09IFdlYkluc3BlY3Rvci5SZXNvdXJj
ZS5UeXBlLlNjcmlwdCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfSwKKwogICAgIHNjcmlwdEZvckxvY2F0aW9uOiBmdW5jdGlvbihzb3VyY2VD
b2RlTG9jYXRpb24pCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCghKHRoaXMgaW5zdGFu
Y2VvZiBXZWJJbnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2UpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGUuanMKaW5k
ZXggOGVmMGI1OC4uNWVlZjNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGUuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGUuanMKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGUgPSBmdW5jdGlvbigpCiAKICAgICB0aGlzLl9zb3VyY2VNYXBzID0gbnVs
bDsKICAgICB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAgPSBudWxsOworICAgIHRoaXMuX25lZWRz
QW5hbHlzaXMgPSB0cnVlOwogfTsKIAogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQgPSB7
CkBAIC0xNjksNyArMTcwLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlID0g
ewogCiAgICAgaGFuZGxlQ3VycmVudFJldmlzaW9uQ29udGVudENoYW5nZTogZnVuY3Rpb24oKQog
ICAgIHsKLSAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyBpZiBuZWVkZWQuCisg
ICAgICAgIHRoaXMuX25lZWRzQW5hbHlzaXMgPSB0cnVlOwogICAgIH0sCiAKICAgICBnZXQgcmV2
aXNpb25Gb3JSZXF1ZXN0ZWRDb250ZW50KCkKQEAgLTE3OCw2ICsxNzksMTYgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fb3JpZ2lu
YWxSZXZpc2lvbjsKICAgICB9LAogCisgICAgc2V0IG5lZWRzQW5hbHlzaXModmFsdWUpCisgICAg
eworICAgICAgICB0aGlzLl9uZWVkc0FuYWx5c2lzID0gdmFsdWU7CisgICAgfSwKKworICAgIGdl
dCBuZWVkc0FuYWx5c2lzKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9uZWVkc0FuYWx5
c2lzOworICAgIH0sCisKICAgICBtYXJrQ29udGVudEFzU3RhbGU6IGZ1bmN0aW9uKCkKICAgICB7
CiAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWNlaXZlZCA9IGZhbHNlOwo=
</data>
<flag name="review"
          id="265423"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241012</attachid>
            <date>2014-11-05 01:34:21 -0800</date>
            <delta_ts>2014-11-05 09:43:34 -0800</delta_ts>
            <desc>[PATCH] Adjustments after comments 2.</desc>
            <filename>analyzeronly.diff</filename>
            <type>text/plain</type>
            <size>11632</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDI5Y2RiZDQuLmE5ODRmY2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE0LTExLTA1ICBKb25hdGhhbiBXZWxs
cyAgPGpvbm93ZWxsc0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGlu
ZnJhc3RydWN0dXJlIGZvciBlc2xpbnQgYmFzZWQgc3RhdGljIGFuYWx5emVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc4OTAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgYSBtYW5hZ2VyIHRv
IGFuYWx5emUgc291cmNlIGNvZGUsIHJldHVybiB3YXJuaW5ncyAoQW5hbHl6ZXJNZXNzYWdlcyks
IGFuZCBjYWNoZSB3YXJuaW5ncy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9NYWlu
LmpzOiBDcmVhdGUgYW5hbHl6ZXJNYW5hZ2VyIHNpbmdsZXRvbi4KKyAgICAgICAgKiBVc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qczogQWRkZWQuCisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyKToKKyAgICAgICAgKHNldCBXZWJJbnNwZWN0b3Iu
QW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRBbmFseXplck1lc3NhZ2VzRm9yU291cmNlQ29k
ZS4pOgorICAgICAgICAoc2V0IFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIucHJvdG90eXBl
LmdldEFuYWx5emVyTWVzc2FnZXNGb3JTb3VyY2VDb2RlKToKKyAgICAgICAgKHNldCBXZWJJbnNw
ZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXQgZ2V0IHNvdXJjZUNvZGVDYW5CZUFu
YWx5emVkKToKKyAgICAgICAgKHNldCBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3Rv
dHlwZS5faGFuZGxlU291cmNlQ29kZUNvbnRlbnREaWRDaGFuZ2UpOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvTWFpbi5odG1sOiBBZGQgbmV3IGZpbGVzLgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvTW9kZWxzL0FuYWx5emVyTWVzc2FnZS5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0
b3IuQW5hbHl6ZXJNZXNzYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BbmFseXplck1lc3Nh
Z2UucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkFuYWx5emVyTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHNvdXJjZUNvZGUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHRleHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHJ1bGVJZGVudGlm
aWVyKToKKwogMjAxNC0xMS0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29t
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFRvbyBtdWNoIHdoaXRlc3BhY2UgaW4gcmVzb3Vy
Y2UgZGV0YWlscyBzaWRlYmFyIGluIGdyb3VwcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCmluZGV4IGNjOWYyYzUuLmM5YzQyNzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwMCw2ICsx
MDAsNyBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogICAgIHRoaXMuY3NzU3R5
bGVNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXI7CiAgICAgdGhpcy5s
b2dNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyOwogICAgIHRoaXMuaXNzdWVN
YW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXI7CisgICAgdGhpcy5hbmFseXpl
ck1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlcjsKICAgICB0aGlzLnJ1
bnRpbWVNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5SdW50aW1lTWFuYWdlcjsKICAgICB0aGlz
LmFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlcjsKICAgICB0aGlzLnRpbWVsaW5lTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3Iu
VGltZWxpbmVNYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYzcwOGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXpl
ck1hbmFnZXIuanMKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3Iu
QW5hbHl6ZXJNYW5hZ2VyID0gZnVuY3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3Qu
Y2FsbCh0aGlzKTsKKworICAgIHRoaXMuX2VzbGludENvbmZpZyA9IHsKKyAgICAgICAgZW52OiB7
CisgICAgICAgICAgICAiYnJvd3NlciI6IHRydWUsCisgICAgICAgICAgICAibm9kZSI6IGZhbHNl
CisgICAgICAgIH0sCisgICAgICAgIGdsb2JhbHM6IHsKKyAgICAgICAgICAgICJkb2N1bWVudCI6
IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgcnVsZXM6IHsKKyAgICAgICAgICAgICJjb25zaXN0
ZW50LXJldHVybiI6IDIsCisgICAgICAgICAgICAiY3VybHkiOiAwLAorICAgICAgICAgICAgImVx
ZXFlcSI6IDAsCisgICAgICAgICAgICAibmV3LXBhcmVucyI6IDAsCisgICAgICAgICAgICAibm8t
Y29tbWEtZGFuZ2xlIjogMCwKKyAgICAgICAgICAgICJuby1jb25zb2xlIjogMCwKKyAgICAgICAg
ICAgICJuby1jb25zdGFudC1jb25kaXRpb24iOiAwLAorICAgICAgICAgICAgIm5vLWV4dHJhLWJp
bmQiOiAyLAorICAgICAgICAgICAgIm5vLWV4dHJhLXNlbWkiOiAyLAorICAgICAgICAgICAgIm5v
LXByb3RvIjogMCwKKyAgICAgICAgICAgICJuby1yZXR1cm4tYXNzaWduIjogMiwKKyAgICAgICAg
ICAgICJuby10cmFpbGluZy1zcGFjZXMiOiAyLAorICAgICAgICAgICAgIm5vLXVuZGVyc2NvcmUt
ZGFuZ2xlIjogMCwKKyAgICAgICAgICAgICJuby11bnVzZWQtZXhwcmVzc2lvbnMiOiAyLAorICAg
ICAgICAgICAgIm5vLXdyYXAtZnVuYyI6IDIsCisgICAgICAgICAgICAic2VtaSI6IDIsCisgICAg
ICAgICAgICAic3BhY2UtaW5maXgtb3BzIjogMiwKKyAgICAgICAgICAgICJzcGFjZS1yZXR1cm4t
dGhyb3ctY2FzZSI6IDIsCisgICAgICAgICAgICAic3RyaWN0IjogMCwKKyAgICAgICAgICAgICJ2
YWxpZC10eXBlb2YiOiAyCisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5fc291cmNlQ29k
ZU1lc3NhZ2VzTWFwID0gbmV3IFdlYWtNYXA7Cit9OworCitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJN
YW5hZ2VyLl90eXBlQW5hbHl6ZXJNYXAgPSBuZXcgTWFwOworV2ViSW5zcGVjdG9yLkFuYWx5emVy
TWFuYWdlci5fdHlwZUFuYWx5emVyTWFwLnNldChXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5T
Y3JpcHQsIGVzbGludCk7CisKK1dlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIucHJvdG90eXBl
ID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLAorICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisKKyAgICAvLyBQdWJs
aWMKKworICAgIGdldEFuYWx5emVyTWVzc2FnZXNGb3JTb3VyY2VDb2RlOiBmdW5jdGlvbihzb3Vy
Y2VDb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29s
dmUsIHJlamVjdCkgeworICAgICAgICAgICAgdmFyIGFuYWx5emVyID0gV2ViSW5zcGVjdG9yLkFu
YWx5emVyTWFuYWdlci5fdHlwZUFuYWx5emVyTWFwLmdldChzb3VyY2VDb2RlLl90eXBlKTsKKyAg
ICAgICAgICAgIGlmICghYW5hbHl6ZXIpIHsKKyAgICAgICAgICAgICAgICByZWplY3QobmV3IEVy
cm9yKCJUaGlzIHJlc291cmNlIHR5cGUgY2Fubm90IGJlIGFuYWx5emVkLiIpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9z
b3VyY2VDb2RlTWVzc2FnZXNNYXAuaGFzKHNvdXJjZUNvZGUpKSB7CisgICAgICAgICAgICAgICAg
dmFyIGFuYWx5emVyTWVzc2FnZXMgPSB0aGlzLl9zb3VyY2VDb2RlTWVzc2FnZXNNYXAuZ2V0KHNv
dXJjZUNvZGUpOworICAgICAgICAgICAgICAgIHJlc29sdmUoYW5hbHl6ZXJNZXNzYWdlcyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5j
dGlvbiByZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHZhciBhbmFseXplck1lc3NhZ2VzID0gW107CisgICAgICAgICAgICAgICAgdmFyIHJh
d0FuYWx5emVyTWVzc2FnZXMgPSBhbmFseXplci52ZXJpZnkoc291cmNlQ29kZS5jb250ZW50LCB0
aGlzLl9lc2xpbnRDb25maWcpOworCisJCQkJLy8gUmF3IGxpbmUgYW5kIGNvbHVtbiBudW1iZXJz
IGFyZSBvbmUtYmFzZWQuIFNvdXJjZUNvZGVMb2NhdGlvbiBleHBlY3RzIHRoZW0gdG8gYmUgemVy
by1iYXNlZCBzbyB3ZSBzdWJ0cmFjdCAxIGZyb20gZWFjaC4KKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciByYXdBbmFseXplck1lc3NhZ2Ugb2YgcmF3QW5hbHl6ZXJNZXNzYWdlcykKKyAgICAgICAg
ICAgICAgICAgICAgYW5hbHl6ZXJNZXNzYWdlcy5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuQW5hbHl6
ZXJNZXNzYWdlKG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uKHNvdXJjZUNvZGUs
IHJhd0FuYWx5emVyTWVzc2FnZS5saW5lIC0gMSwgcmF3QW5hbHl6ZXJNZXNzYWdlLmNvbHVtbiAt
IDEpLCByYXdBbmFseXplck1lc3NhZ2UubWVzc2FnZSwgcmF3QW5hbHl6ZXJNZXNzYWdlLnJ1bGVJ
ZCkpOworCisJCQkJdGhpcy5fc291cmNlQ29kZU1lc3NhZ2VzTWFwLnNldChzb3VyY2VDb2RlLCBh
bmFseXplck1lc3NhZ2VzKTsKKworCQkJCXNvdXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZS5FdmVudC5Db250ZW50RGlkQ2hhbmdlLCB0aGlzLl9oYW5kbGVT
b3VyY2VDb2RlQ29udGVudERpZENoYW5nZSwgdGhpcyk7CisKKyAgICAgICAgICAgICAgICByZXNv
bHZlKGFuYWx5emVyTWVzc2FnZXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzb3Vy
Y2VDb2RlLnJlcXVlc3RDb250ZW50KHJldHJpZXZlQW5hbHl6ZXJNZXNzYWdlcy5iaW5kKHRoaXMp
KTsKKyAgICAgICAgfS5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgc291cmNlQ29kZUNhbkJl
QW5hbHl6ZWQ6IGZ1bmN0aW9uKHNvdXJjZUNvZGUpCisgICAgeworICAgICAgICByZXR1cm4gc291
cmNlQ29kZS5fdHlwZSA9PT0gV2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGUuU2NyaXB0OworICAg
IH0sCisKKwkvLyBQcml2YXRlCisKKwlfaGFuZGxlU291cmNlQ29kZUNvbnRlbnREaWRDaGFuZ2U6
IGZ1bmN0aW9uKGV2ZW50KQorCXsKKwkJdmFyIHNvdXJjZUNvZGUgPSBldmVudC50YXJnZXQ7CisK
KwkJLy8gU2luY2Ugc291cmNlQ29kZSBoYXMgY2hhbmdlZCwgcmVtb3ZlIGl0IGFuZCBpdHMgbWVz
c2FnZXMgZnJvbSB0aGUgbWFwIHNvIGdldEFuYWx5emVyTWVzc2FnZXNGb3JTb3VyY2VDb2RlIHdp
bGwgaGF2ZSB0byByZWFuYWx5emUgdGhlIG5leHQgdGltZSBpdCBpcyBjYWxsZWQuCisJCXRoaXMu
X3NvdXJjZUNvZGVNZXNzYWdlc01hcC5kZWxldGUoc291cmNlQ29kZSk7CisJCXNvdXJjZUNvZGUu
cmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5FdmVudC5Db250ZW50
RGlkQ2hhbmdlLCB0aGlzLl9oYW5kbGVTb3VyY2VDb2RlQ29udGVudERpZENoYW5nZSwgdGhpcyk7
CisJfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01haW4uaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRt
bAppbmRleCA1NDViNDFkLi40MjRkMDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTWFpbi5odG1sCkBAIC0xNzUsNiArMTc1LDcgQEAKICAgICA8c2NyaXB0IHNy
Yz0iQmFzZS9VdGlsaXRpZXMuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkV4dGVy
bmFsL0VzcHJpbWEvZXNwcmltYS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkV4dGVy
bmFsL0VTTGludC9lc2xpbnQuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IlByb3Rv
Y29sL0FwcGxpY2F0aW9uQ2FjaGVPYnNlcnZlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBz
cmM9IlByb3RvY29sL0NTU09ic2VydmVyLmpzIj48L3NjcmlwdD4KQEAgLTIwMiw2ICsyMDMsNyBA
QAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvVGltZWxpbmUuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgc3JjPSJNb2RlbHMvVGltZWxpbmVSZWNvcmQuanMiPjwvc2NyaXB0PgogCisgICAgPHNj
cmlwdCBzcmM9Ik1vZGVscy9BbmFseXplck1lc3NhZ2UuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJNb2RlbHMvQXBwbGljYXRpb25DYWNoZUZyYW1lLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iTW9kZWxzL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdC5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9CYWNrRm9yd2FyZEVudHJ5LmpzIj48L3NjcmlwdD4K
QEAgLTQ1OCw2ICs0NjAsNyBAQAogCiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0NvZGVN
aXJyb3JFZGl0aW5nQ29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CiAKKyAgICA8c2NyaXB0IHNyYz0i
Q29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iQ29udHJvbGxlcnMvQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9CcmFuY2hNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzIj48L3NjcmlwdD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9B
bmFseXplck1lc3NhZ2UuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9N
b2RlbHMvQW5hbHl6ZXJNZXNzYWdlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmUzMDU1NjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvQW5hbHl6ZXJNZXNzYWdlLmpzCkBAIC0wLDAgKzEsNjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNZXNzYWdlID0gZnVuY3Rpb24oc291cmNl
Q29kZUxvY2F0aW9uLCB0ZXh0LCBydWxlSWRlbnRpZmllcikKK3sKKyAgICBXZWJJbnNwZWN0b3Iu
T2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICBjb25zb2xlLmFzc2VydChzb3VyY2VDb2RlTG9jYXRp
b24gaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uKTsKKyAgICBjb25z
b2xlLmFzc2VydCh0eXBlb2YgdGV4dCA9PT0gInN0cmluZyIpOworCisgICAgdGhpcy5fc291cmNl
Q29kZUxvY2F0aW9uID0gc291cmNlQ29kZUxvY2F0aW9uOworICAgIHRoaXMuX3RleHQgPSB0ZXh0
OworICAgIHRoaXMuX3J1bGVJZGVudGlmaWVyID0gcnVsZUlkZW50aWZpZXI7Cit9OworCitXZWJJ
bnNwZWN0b3IuQW5hbHl6ZXJNZXNzYWdlLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3Rvcjog
V2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZSwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rv
ci5PYmplY3QucHJvdG90eXBlLAorCisgICAgZ2V0IHNvdXJjZUNvZGVMb2NhdGlvbigpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29kZUxvY2F0aW9uOworICAgIH0sCisKKyAg
ICBnZXQgc291cmNlQ29kZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29k
ZUxvY2F0aW9uLnNvdXJjZUNvZGU7CisgICAgfSwKKworICAgIGdldCB0ZXh0KCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl90ZXh0OworICAgIH0sCisKKyAgICBnZXQgcnVsZUlkZW50aWZp
ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3J1bGVJZGVudGlmaWVyOworICAgIH0K
K307Cg==
</data>
<flag name="review"
          id="265811"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241036</attachid>
            <date>2014-11-05 09:43:34 -0800</date>
            <delta_ts>2014-11-10 14:01:43 -0800</delta_ts>
            <desc>[PATCH] Adjustments after comments 3.</desc>
            <filename>analyzeronly.diff</filename>
            <type>text/plain</type>
            <size>12225</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDI5Y2RiZDQuLjVmZjgwZmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE0LTExLTA1ICBKb25hdGhhbiBXZWxs
cyAgPGpvbm93ZWxsc0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGlu
ZnJhc3RydWN0dXJlIGZvciBlc2xpbnQgYmFzZWQgc3RhdGljIGFuYWx5emVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc4OTAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgYSBtYW5hZ2VyIHRv
IGFuYWx5emUgc291cmNlIGNvZGUsIHJldHVybiB3YXJuaW5ncyAoQW5hbHl6ZXJNZXNzYWdlcyks
IGFuZCBjYWNoZSB3YXJuaW5ncy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9NYWlu
LmpzOiBDcmVhdGUgYW5hbHl6ZXJNYW5hZ2VyIHNpbmdsZXRvbi4KKyAgICAgICAgKiBVc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qczogQWRkZWQuCisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyKToKKyAgICAgICAgKHNldCBXZWJJbnNwZWN0b3Iu
QW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRBbmFseXplck1lc3NhZ2VzRm9yU291cmNlQ29k
ZS4pOgorICAgICAgICAoc2V0IFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIucHJvdG90eXBl
LmdldEFuYWx5emVyTWVzc2FnZXNGb3JTb3VyY2VDb2RlKToKKyAgICAgICAgKHNldCBXZWJJbnNw
ZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZS5zZXQgZ2V0IHNvdXJjZUNvZGVDYW5CZUFu
YWx5emVkKToKKyAgICAgICAgKHNldCBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3Rv
dHlwZS5faGFuZGxlU291cmNlQ29kZUNvbnRlbnREaWRDaGFuZ2UpOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvTWFpbi5odG1sOiBBZGQgbmV3IGZpbGVzLgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvTW9kZWxzL0FuYWx5emVyTWVzc2FnZS5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0
b3IuQW5hbHl6ZXJNZXNzYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BbmFseXplck1lc3Nh
Z2UucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkFuYWx5emVyTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHNvdXJjZUNvZGUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHRleHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHJ1bGVJZGVudGlm
aWVyKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzOiBBZGRl
ZCBjYWxsIHRvIFdlYkluc3BlY3Rvci5PYmplY3QuYWRkQ29uc3RydWN0b3JGdW5jdGlvbnMoKS4K
KwogMjAxNC0xMS0wNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFRvbyBtdWNoIHdoaXRlc3BhY2UgaW4gcmVzb3VyY2UgZGV0
YWlscyBzaWRlYmFyIGluIGdyb3VwcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQmFzZS9NYWluLmpzCmluZGV4IGNjOWYyYzUuLjQ0MDg1ZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAwLDYgKzEw
MCw3IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5jc3NTdHls
ZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlcjsKICAgICB0aGlzLmxv
Z01hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXI7CiAgICAgdGhpcy5pc3N1ZU1h
bmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLklzc3VlTWFuYWdlcjsKKyAgICB0aGlzLmFuYWx5emVy
TWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyOwogICAgIHRoaXMucnVu
dGltZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlJ1bnRpbWVNYW5hZ2VyOwogICAgIHRoaXMu
YXBwbGljYXRpb25DYWNoZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2Fj
aGVNYW5hZ2VyOwogICAgIHRoaXMudGltZWxpbmVNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5U
aW1lbGluZU1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1hbmFnZXIuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzOGJmZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5emVy
TWFuYWdlci5qcwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5B
bmFseXplck1hbmFnZXIgPSBmdW5jdGlvbigpCit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5j
YWxsKHRoaXMpOworCisgICAgdGhpcy5fZXNsaW50Q29uZmlnID0geworICAgICAgICBlbnY6IHsK
KyAgICAgICAgICAgICJicm93c2VyIjogdHJ1ZSwKKyAgICAgICAgICAgICJub2RlIjogZmFsc2UK
KyAgICAgICAgfSwKKyAgICAgICAgZ2xvYmFsczogeworICAgICAgICAgICAgImRvY3VtZW50Ijog
dHJ1ZQorICAgICAgICB9LAorICAgICAgICBydWxlczogeworICAgICAgICAgICAgImNvbnNpc3Rl
bnQtcmV0dXJuIjogMiwKKyAgICAgICAgICAgICJjdXJseSI6IDAsCisgICAgICAgICAgICAiZXFl
cWVxIjogMCwKKyAgICAgICAgICAgICJuZXctcGFyZW5zIjogMCwKKyAgICAgICAgICAgICJuby1j
b21tYS1kYW5nbGUiOiAwLAorICAgICAgICAgICAgIm5vLWNvbnNvbGUiOiAwLAorICAgICAgICAg
ICAgIm5vLWNvbnN0YW50LWNvbmRpdGlvbiI6IDAsCisgICAgICAgICAgICAibm8tZXh0cmEtYmlu
ZCI6IDIsCisgICAgICAgICAgICAibm8tZXh0cmEtc2VtaSI6IDIsCisgICAgICAgICAgICAibm8t
cHJvdG8iOiAwLAorICAgICAgICAgICAgIm5vLXJldHVybi1hc3NpZ24iOiAyLAorICAgICAgICAg
ICAgIm5vLXRyYWlsaW5nLXNwYWNlcyI6IDIsCisgICAgICAgICAgICAibm8tdW5kZXJzY29yZS1k
YW5nbGUiOiAwLAorICAgICAgICAgICAgIm5vLXVudXNlZC1leHByZXNzaW9ucyI6IDIsCisgICAg
ICAgICAgICAibm8td3JhcC1mdW5jIjogMiwKKyAgICAgICAgICAgICJzZW1pIjogMiwKKyAgICAg
ICAgICAgICJzcGFjZS1pbmZpeC1vcHMiOiAyLAorICAgICAgICAgICAgInNwYWNlLXJldHVybi10
aHJvdy1jYXNlIjogMiwKKyAgICAgICAgICAgICJzdHJpY3QiOiAwLAorICAgICAgICAgICAgInZh
bGlkLXR5cGVvZiI6IDIKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLl9zb3VyY2VDb2Rl
TWVzc2FnZXNNYXAgPSBuZXcgV2Vha01hcDsKKworICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuQ29udGVudERp
ZENoYW5nZSwgdGhpcy5faGFuZGxlU291cmNlQ29kZUNvbnRlbnREaWRDaGFuZ2UsIHRoaXMpOwor
fTsKKworV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5fdHlwZUFuYWx5emVyTWFwID0gbmV3
IE1hcDsKK1dlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIuX3R5cGVBbmFseXplck1hcC5zZXQo
V2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGUuU2NyaXB0LCBlc2xpbnQpOworCitXZWJJbnNwZWN0
b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5z
cGVjdG9yLkFuYWx5emVyTWFuYWdlciwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmpl
Y3QucHJvdG90eXBlLAorCisgICAgLy8gUHVibGljCisKKyAgICBnZXRBbmFseXplck1lc3NhZ2Vz
Rm9yU291cmNlQ29kZTogZnVuY3Rpb24oc291cmNlQ29kZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIHZh
ciBhbmFseXplciA9IFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIuX3R5cGVBbmFseXplck1h
cC5nZXQoc291cmNlQ29kZS50eXBlKTsKKyAgICAgICAgICAgIGlmICghYW5hbHl6ZXIpIHsKKyAg
ICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJUaGlzIHJlc291cmNlIHR5cGUgY2Fubm90
IGJlIGFuYWx5emVkLiIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VDb2RlTWVzc2FnZXNNYXAuaGFzKHNvdXJj
ZUNvZGUpKSB7CisgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9zb3VyY2VDb2RlTWVzc2Fn
ZXNNYXAuZ2V0KHNvdXJjZUNvZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJpZXZlQW5hbHl6ZXJNZXNzYWdlcygp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIGFuYWx5emVyTWVzc2FnZXMgPSBb
XTsKKyAgICAgICAgICAgICAgICB2YXIgcmF3QW5hbHl6ZXJNZXNzYWdlcyA9IGFuYWx5emVyLnZl
cmlmeShzb3VyY2VDb2RlLmNvbnRlbnQsIHRoaXMuX2VzbGludENvbmZpZyk7CisKKyAgICAgICAg
ICAgICAgICAvLyBSYXcgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgYXJlIG9uZS1iYXNlZC4gU291
cmNlQ29kZUxvY2F0aW9uIGV4cGVjdHMgdGhlbSB0byBiZSB6ZXJvLWJhc2VkIHNvIHdlIHN1YnRy
YWN0IDEgZnJvbSBlYWNoLgorICAgICAgICAgICAgICAgIGZvciAodmFyIHJhd0FuYWx5emVyTWVz
c2FnZSBvZiByYXdBbmFseXplck1lc3NhZ2VzKQorICAgICAgICAgICAgICAgICAgICBhbmFseXpl
ck1lc3NhZ2VzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UobmV3IFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24oc291cmNlQ29kZSwgcmF3QW5hbHl6ZXJNZXNzYWdl
LmxpbmUgLSAxLCByYXdBbmFseXplck1lc3NhZ2UuY29sdW1uIC0gMSksIHJhd0FuYWx5emVyTWVz
c2FnZS5tZXNzYWdlLCByYXdBbmFseXplck1lc3NhZ2UucnVsZUlkKSk7CisKKyAgICAgICAgICAg
ICAgICB0aGlzLl9zb3VyY2VDb2RlTWVzc2FnZXNNYXAuc2V0KHNvdXJjZUNvZGUsIGFuYWx5emVy
TWVzc2FnZXMpOworCisgICAgICAgICAgICAgICAgcmVzb2x2ZShhbmFseXplck1lc3NhZ2VzKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc291cmNlQ29kZS5yZXF1ZXN0Q29udGVudChy
ZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMuYmluZCh0aGlzKSk7CisgICAgICAgIH0uYmluZCh0aGlz
KSk7CisgICAgfSwKKworICAgIHNvdXJjZUNvZGVDYW5CZUFuYWx5emVkOiBmdW5jdGlvbihzb3Vy
Y2VDb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNvdXJjZUNvZGUudHlwZSA9PT0gV2ViSW5z
cGVjdG9yLlJlc291cmNlLlR5cGUuU2NyaXB0OworICAgIH0sCisKKyAgICAvLyBQcml2YXRlCisK
KyAgICBfaGFuZGxlU291cmNlQ29kZUNvbnRlbnREaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQor
ICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUNvZGUgPSBldmVudC50YXJnZXQ7CisKKyAgICAgICAg
Ly8gU2luY2Ugc291cmNlQ29kZSBoYXMgY2hhbmdlZCwgcmVtb3ZlIGl0IGFuZCBpdHMgbWVzc2Fn
ZXMgZnJvbSB0aGUgbWFwIHNvIGdldEFuYWx5emVyTWVzc2FnZXNGb3JTb3VyY2VDb2RlIHdpbGwg
aGF2ZSB0byByZWFuYWx5emUgdGhlIG5leHQgdGltZSBpdCBpcyBjYWxsZWQuCisgICAgICAgIHRo
aXMuX3NvdXJjZUNvZGVNZXNzYWdlc01hcC5kZWxldGUoc291cmNlQ29kZSk7CisgICAgfQorfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRt
bCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAppbmRleCA1
NDViNDFkLi40MjRkMDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9NYWluLmh0bWwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTWFpbi5odG1sCkBAIC0xNzUsNiArMTc1LDcgQEAKICAgICA8c2NyaXB0IHNyYz0iQmFzZS9V
dGlsaXRpZXMuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkV4dGVybmFsL0VzcHJp
bWEvZXNwcmltYS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkV4dGVybmFsL0VTTGlu
dC9lc2xpbnQuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL0FwcGxp
Y2F0aW9uQ2FjaGVPYnNlcnZlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb3Rv
Y29sL0NTU09ic2VydmVyLmpzIj48L3NjcmlwdD4KQEAgLTIwMiw2ICsyMDMsNyBAQAogICAgIDxz
Y3JpcHQgc3JjPSJNb2RlbHMvVGltZWxpbmUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3Jj
PSJNb2RlbHMvVGltZWxpbmVSZWNvcmQuanMiPjwvc2NyaXB0PgogCisgICAgPHNjcmlwdCBzcmM9
Ik1vZGVscy9BbmFseXplck1lc3NhZ2UuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJN
b2RlbHMvQXBwbGljYXRpb25DYWNoZUZyYW1lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iTW9kZWxzL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9Ik1vZGVscy9CYWNrRm9yd2FyZEVudHJ5LmpzIj48L3NjcmlwdD4KQEAgLTQ1OCw2
ICs0NjAsNyBAQAogCiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JFZGl0
aW5nQ29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CiAKKyAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxl
cnMvQW5hbHl6ZXJNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJv
bGxlcnMvQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJDb250cm9sbGVycy9CcmFuY2hNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0
IHNyYz0iQ29udHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9BbmFseXplck1l
c3NhZ2UuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQW5h
bHl6ZXJNZXNzYWdlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDU1
NjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Nb2RlbHMvQW5hbHl6ZXJNZXNzYWdlLmpzCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNZXNzYWdlID0gZnVuY3Rpb24oc291cmNlQ29kZUxvY2F0
aW9uLCB0ZXh0LCBydWxlSWRlbnRpZmllcikKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNh
bGwodGhpcyk7CisKKyAgICBjb25zb2xlLmFzc2VydChzb3VyY2VDb2RlTG9jYXRpb24gaW5zdGFu
Y2VvZiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uKTsKKyAgICBjb25zb2xlLmFzc2Vy
dCh0eXBlb2YgdGV4dCA9PT0gInN0cmluZyIpOworCisgICAgdGhpcy5fc291cmNlQ29kZUxvY2F0
aW9uID0gc291cmNlQ29kZUxvY2F0aW9uOworICAgIHRoaXMuX3RleHQgPSB0ZXh0OworICAgIHRo
aXMuX3J1bGVJZGVudGlmaWVyID0gcnVsZUlkZW50aWZpZXI7Cit9OworCitXZWJJbnNwZWN0b3Iu
QW5hbHl6ZXJNZXNzYWdlLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVj
dG9yLkFuYWx5emVyTWVzc2FnZSwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3Qu
cHJvdG90eXBlLAorCisgICAgZ2V0IHNvdXJjZUNvZGVMb2NhdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fc291cmNlQ29kZUxvY2F0aW9uOworICAgIH0sCisKKyAgICBnZXQgc291
cmNlQ29kZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29kZUxvY2F0aW9u
LnNvdXJjZUNvZGU7CisgICAgfSwKKworICAgIGdldCB0ZXh0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl90ZXh0OworICAgIH0sCisKKyAgICBnZXQgcnVsZUlkZW50aWZpZXIoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3J1bGVJZGVudGlmaWVyOworICAgIH0KK307CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNl
Q29kZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3Vy
Y2VDb2RlLmpzCmluZGV4IDhlZjBiNTguLmRiZWEwMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzCkBAIC0z
Niw2ICszNiw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlID0gZnVuY3Rpb24oKQogICAgIHRo
aXMuX2Zvcm1hdHRlclNvdXJjZU1hcCA9IG51bGw7CiB9OwogCitXZWJJbnNwZWN0b3IuT2JqZWN0
LmFkZENvbnN0cnVjdG9yRnVuY3Rpb25zKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlKTsKKwogV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQgPSB7CiAgICAgQ29udGVudERpZENoYW5nZTogInNv
dXJjZS1jb2RlLWNvbnRlbnQtZGlkLWNoYW5nZSIsCiAgICAgU291cmNlTWFwQWRkZWQ6ICJzb3Vy
Y2UtY29kZS1zb3VyY2UtbWFwLWFkZGVkIiwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241305</attachid>
            <date>2014-11-10 14:01:43 -0800</date>
            <delta_ts>2014-11-10 16:39:14 -0800</delta_ts>
            <desc>[PATCH] Patch with change to Main.html ordering.</desc>
            <filename>analyzeronly.diff</filename>
            <type>text/plain</type>
            <size>12238</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGJhOWJmYjEuLjUzMWJhNTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE0LTExLTEwICBKb25hdGhhbiBXZWxs
cyAgPGpvbm93ZWxsc0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGlu
ZnJhc3RydWN0dXJlIGZvciBlc2xpbnQgYmFzZWQgc3RhdGljIGFuYWx5emVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc4OTAKKworICAgICAgICBS
ZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCisKKyAgICAgICAgRml4IHRvIHByZXZpb3VzIHBh
dGNoIHRvIGFkZCBBbmFseXplck1hbmFnZXIgYW5kIEFuYWx5emVyTWVzc2FnZSBjbGFzc2VzLiBD
aGFuZ2VkIE1haW4uaHRtbCB0byBpbmNsdWRlIEVTTGludC5qcworICAgICAgICBiZWZvcmUgTWFp
bi5qcyBpbiB0aGUgY29tYmluZWQgcmVzb3VyY2VzLgorCisgICAgICAgICogVXNlckludGVyZmFj
ZS9CYXNlL01haW4uanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFs
eXplck1hbmFnZXIuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFu
YWdlcik6CisgICAgICAgIChzZXQgV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5wcm90b3R5
cGUuZ2V0QW5hbHl6ZXJNZXNzYWdlc0ZvclNvdXJjZUNvZGUuKToKKyAgICAgICAgKHNldCBXZWJJ
bnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRBbmFseXplck1lc3NhZ2VzRm9y
U291cmNlQ29kZSk6CisgICAgICAgIChzZXQgV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5w
cm90b3R5cGUuc2V0IGdldCBzb3VyY2VDb2RlQ2FuQmVBbmFseXplZCk6CisgICAgICAgIChzZXQg
V2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5wcm90b3R5cGUuX2hhbmRsZVNvdXJjZUNvZGVD
b250ZW50RGlkQ2hhbmdlKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKKyAg
ICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9BbmFseXplck1lc3NhZ2UuanM6IEFkZGVkLgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQW5hbHl6ZXJNZXNzYWdlLnByb3RvdHlwZS5nZXQgc291cmNlQ29kZUxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UucHJvdG90eXBlLmdldCBzb3Vy
Y2VDb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UucHJvdG90eXBl
LmdldCB0ZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UucHJvdG90
eXBlLmdldCBydWxlSWRlbnRpZmllcik6CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMv
U291cmNlQ29kZS5qczoKKwogMjAxNC0xMS0wOCAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogZGVjb3VwbGUgY2hpbGQgZWxlbWVudCBm
b2xkZXJpemF0aW9uIGxvZ2ljIGZyb20gRnJhbWVUcmVlRWxlbWVudApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCmluZGV4IDhiOTQ1N2QuLjQ0
MzAyN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jh
c2UvTWFpbi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNl
L01haW4uanMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTAwLDYgKzEwMCw3IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigp
CiAgICAgdGhpcy5jc3NTdHlsZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFu
YWdlcjsKICAgICB0aGlzLmxvZ01hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXI7
CiAgICAgdGhpcy5pc3N1ZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLklzc3VlTWFuYWdlcjsK
KyAgICB0aGlzLmFuYWx5emVyTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5h
Z2VyOwogICAgIHRoaXMucnVudGltZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlJ1bnRpbWVN
YW5hZ2VyOwogICAgIHRoaXMuYXBwbGljYXRpb25DYWNoZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVj
dG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOwogICAgIHRoaXMudGltZWxpbmVNYW5hZ2VyID0g
bmV3IFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1hbmFnZXIuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXpl
ck1hbmFnZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzOGJmZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKK1dlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIgPSBmdW5jdGlvbigpCit7CisgICAgV2Vi
SW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworCisgICAgdGhpcy5fZXNsaW50Q29uZmlnID0g
eworICAgICAgICBlbnY6IHsKKyAgICAgICAgICAgICJicm93c2VyIjogdHJ1ZSwKKyAgICAgICAg
ICAgICJub2RlIjogZmFsc2UKKyAgICAgICAgfSwKKyAgICAgICAgZ2xvYmFsczogeworICAgICAg
ICAgICAgImRvY3VtZW50IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICBydWxlczogeworICAg
ICAgICAgICAgImNvbnNpc3RlbnQtcmV0dXJuIjogMiwKKyAgICAgICAgICAgICJjdXJseSI6IDAs
CisgICAgICAgICAgICAiZXFlcWVxIjogMCwKKyAgICAgICAgICAgICJuZXctcGFyZW5zIjogMCwK
KyAgICAgICAgICAgICJuby1jb21tYS1kYW5nbGUiOiAwLAorICAgICAgICAgICAgIm5vLWNvbnNv
bGUiOiAwLAorICAgICAgICAgICAgIm5vLWNvbnN0YW50LWNvbmRpdGlvbiI6IDAsCisgICAgICAg
ICAgICAibm8tZXh0cmEtYmluZCI6IDIsCisgICAgICAgICAgICAibm8tZXh0cmEtc2VtaSI6IDIs
CisgICAgICAgICAgICAibm8tcHJvdG8iOiAwLAorICAgICAgICAgICAgIm5vLXJldHVybi1hc3Np
Z24iOiAyLAorICAgICAgICAgICAgIm5vLXRyYWlsaW5nLXNwYWNlcyI6IDIsCisgICAgICAgICAg
ICAibm8tdW5kZXJzY29yZS1kYW5nbGUiOiAwLAorICAgICAgICAgICAgIm5vLXVudXNlZC1leHBy
ZXNzaW9ucyI6IDIsCisgICAgICAgICAgICAibm8td3JhcC1mdW5jIjogMiwKKyAgICAgICAgICAg
ICJzZW1pIjogMiwKKyAgICAgICAgICAgICJzcGFjZS1pbmZpeC1vcHMiOiAyLAorICAgICAgICAg
ICAgInNwYWNlLXJldHVybi10aHJvdy1jYXNlIjogMiwKKyAgICAgICAgICAgICJzdHJpY3QiOiAw
LAorICAgICAgICAgICAgInZhbGlkLXR5cGVvZiI6IDIKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB0aGlzLl9zb3VyY2VDb2RlTWVzc2FnZXNNYXAgPSBuZXcgV2Vha01hcDsKKworICAgIFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGUuRXZlbnQuQ29udGVudERpZENoYW5nZSwgdGhpcy5faGFuZGxlU291cmNlQ29kZUNvbnRlbnRE
aWRDaGFuZ2UsIHRoaXMpOworfTsKKworV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5fdHlw
ZUFuYWx5emVyTWFwID0gbmV3IE1hcDsKK1dlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIuX3R5
cGVBbmFseXplck1hcC5zZXQoV2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGUuU2NyaXB0LCBlc2xp
bnQpOworCitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKKyAgICBj
b25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlciwKKyAgICBfX3Byb3RvX186
IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVibGljCisKKyAgICBn
ZXRBbmFseXplck1lc3NhZ2VzRm9yU291cmNlQ29kZTogZnVuY3Rpb24oc291cmNlQ29kZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
IHsKKyAgICAgICAgICAgIHZhciBhbmFseXplciA9IFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFn
ZXIuX3R5cGVBbmFseXplck1hcC5nZXQoc291cmNlQ29kZS50eXBlKTsKKyAgICAgICAgICAgIGlm
ICghYW5hbHl6ZXIpIHsKKyAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJUaGlzIHJl
c291cmNlIHR5cGUgY2Fubm90IGJlIGFuYWx5emVkLiIpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VDb2RlTWVz
c2FnZXNNYXAuaGFzKHNvdXJjZUNvZGUpKSB7CisgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlz
Ll9zb3VyY2VDb2RlTWVzc2FnZXNNYXAuZ2V0KHNvdXJjZUNvZGUpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJpZXZl
QW5hbHl6ZXJNZXNzYWdlcygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIGFu
YWx5emVyTWVzc2FnZXMgPSBbXTsKKyAgICAgICAgICAgICAgICB2YXIgcmF3QW5hbHl6ZXJNZXNz
YWdlcyA9IGFuYWx5emVyLnZlcmlmeShzb3VyY2VDb2RlLmNvbnRlbnQsIHRoaXMuX2VzbGludENv
bmZpZyk7CisKKyAgICAgICAgICAgICAgICAvLyBSYXcgbGluZSBhbmQgY29sdW1uIG51bWJlcnMg
YXJlIG9uZS1iYXNlZC4gU291cmNlQ29kZUxvY2F0aW9uIGV4cGVjdHMgdGhlbSB0byBiZSB6ZXJv
LWJhc2VkIHNvIHdlIHN1YnRyYWN0IDEgZnJvbSBlYWNoLgorICAgICAgICAgICAgICAgIGZvciAo
dmFyIHJhd0FuYWx5emVyTWVzc2FnZSBvZiByYXdBbmFseXplck1lc3NhZ2VzKQorICAgICAgICAg
ICAgICAgICAgICBhbmFseXplck1lc3NhZ2VzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5BbmFseXpl
ck1lc3NhZ2UobmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24oc291cmNlQ29kZSwg
cmF3QW5hbHl6ZXJNZXNzYWdlLmxpbmUgLSAxLCByYXdBbmFseXplck1lc3NhZ2UuY29sdW1uIC0g
MSksIHJhd0FuYWx5emVyTWVzc2FnZS5tZXNzYWdlLCByYXdBbmFseXplck1lc3NhZ2UucnVsZUlk
KSk7CisKKyAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2VDb2RlTWVzc2FnZXNNYXAuc2V0KHNv
dXJjZUNvZGUsIGFuYWx5emVyTWVzc2FnZXMpOworCisgICAgICAgICAgICAgICAgcmVzb2x2ZShh
bmFseXplck1lc3NhZ2VzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc291cmNlQ29k
ZS5yZXF1ZXN0Q29udGVudChyZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMuYmluZCh0aGlzKSk7Cisg
ICAgICAgIH0uYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIHNvdXJjZUNvZGVDYW5CZUFuYWx5
emVkOiBmdW5jdGlvbihzb3VyY2VDb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNvdXJjZUNv
ZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGUuU2NyaXB0OworICAgIH0sCisK
KyAgICAvLyBQcml2YXRlCisKKyAgICBfaGFuZGxlU291cmNlQ29kZUNvbnRlbnREaWRDaGFuZ2U6
IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUNvZGUgPSBldmVudC50
YXJnZXQ7CisKKyAgICAgICAgLy8gU2luY2Ugc291cmNlQ29kZSBoYXMgY2hhbmdlZCwgcmVtb3Zl
IGl0IGFuZCBpdHMgbWVzc2FnZXMgZnJvbSB0aGUgbWFwIHNvIGdldEFuYWx5emVyTWVzc2FnZXNG
b3JTb3VyY2VDb2RlIHdpbGwgaGF2ZSB0byByZWFuYWx5emUgdGhlIG5leHQgdGltZSBpdCBpcyBj
YWxsZWQuCisgICAgICAgIHRoaXMuX3NvdXJjZUNvZGVNZXNzYWdlc01hcC5kZWxldGUoc291cmNl
Q29kZSk7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01haW4uaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01haW4uaHRtbAppbmRleCBiOTcyOWU5Li5iZjdlMzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCkBAIC0xNjAsNiArMTYwLDggQEAKICAgICA8
c2NyaXB0IHNyYz0iRXh0ZXJuYWwvQ29kZU1pcnJvci9zcWwuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgc3JjPSJFeHRlcm5hbC9Db2RlTWlycm9yL3htbC5qcyI+PC9zY3JpcHQ+CiAKKyAgICA8
c2NyaXB0IHNyYz0iRXh0ZXJuYWwvRVNMaW50L2VzbGludC5qcyI+PC9zY3JpcHQ+CisKICAgICA8
c2NyaXB0IHNyYz0iQmFzZS9XZWJJbnNwZWN0b3IuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJQcm90b2NvbC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iQmFzZS9QbGF0Zm9ybS5qcyI+PC9zY3JpcHQ+CkBAIC0yMDIsNiArMjA0
LDcgQEAKICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1RpbWVsaW5lLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iTW9kZWxzL1RpbWVsaW5lUmVjb3JkLmpzIj48L3NjcmlwdD4KIAorICAg
IDxzY3JpcHQgc3JjPSJNb2RlbHMvQW5hbHl6ZXJNZXNzYWdlLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iTW9kZWxzL0FwcGxpY2F0aW9uQ2FjaGVGcmFtZS5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQmFja0ZvcndhcmRFbnRyeS5qcyI+PC9zY3Jp
cHQ+CkBAIC00NTksNiArNDYyLDcgQEAKIAogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9D
b2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIuanMiPjwvc2NyaXB0PgogCisgICAgPHNjcmlwdCBz
cmM9IkNvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCBzcmM9IkNvbnRyb2xsZXJzL0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQnJhbmNoTWFuYWdlci5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0NTU1N0eWxlTWFuYWdlci5qcyI+PC9zY3Jp
cHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvQW5hbHl6ZXJNZXNzYWdlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL0FuYWx5emVyTWVzc2FnZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lMzA1NTY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL0FuYWx5emVyTWVzc2FnZS5qcwpAQCAtMCwwICsxLDYxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZSA9IGZ1bmN0aW9uKHNv
dXJjZUNvZGVMb2NhdGlvbiwgdGV4dCwgcnVsZUlkZW50aWZpZXIpCit7CisgICAgV2ViSW5zcGVj
dG9yLk9iamVjdC5jYWxsKHRoaXMpOworCisgICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29kZUxv
Y2F0aW9uIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2NhdGlvbik7CisgICAg
Y29uc29sZS5hc3NlcnQodHlwZW9mIHRleHQgPT09ICJzdHJpbmciKTsKKworICAgIHRoaXMuX3Nv
dXJjZUNvZGVMb2NhdGlvbiA9IHNvdXJjZUNvZGVMb2NhdGlvbjsKKyAgICB0aGlzLl90ZXh0ID0g
dGV4dDsKKyAgICB0aGlzLl9ydWxlSWRlbnRpZmllciA9IHJ1bGVJZGVudGlmaWVyOworfTsKKwor
V2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZS5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0
b3I6IFdlYkluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UsCisgICAgX19wcm90b19fOiBXZWJJbnNw
ZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKworICAgIGdldCBzb3VyY2VDb2RlTG9jYXRpb24oKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZUNvZGVMb2NhdGlvbjsKKyAgICB9LAor
CisgICAgZ2V0IHNvdXJjZUNvZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJj
ZUNvZGVMb2NhdGlvbi5zb3VyY2VDb2RlOworICAgIH0sCisKKyAgICBnZXQgdGV4dCgpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDsKKyAgICB9LAorCisgICAgZ2V0IHJ1bGVJZGVu
dGlmaWVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ydWxlSWRlbnRpZmllcjsKKyAg
ICB9Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL1NvdXJjZUNvZGUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Nb2RlbHMvU291cmNlQ29kZS5qcwppbmRleCA4ZWYwYjU4Li5kYmVhMDE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlQ29kZS5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNl
Q29kZS5qcwpAQCAtMzYsNiArMzYsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZSA9IGZ1bmN0
aW9uKCkKICAgICB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAgPSBudWxsOwogfTsKIAorV2ViSW5z
cGVjdG9yLk9iamVjdC5hZGRDb25zdHJ1Y3RvckZ1bmN0aW9ucyhXZWJJbnNwZWN0b3IuU291cmNl
Q29kZSk7CisKIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50ID0gewogICAgIENvbnRlbnRE
aWRDaGFuZ2U6ICJzb3VyY2UtY29kZS1jb250ZW50LWRpZC1jaGFuZ2UiLAogICAgIFNvdXJjZU1h
cEFkZGVkOiAic291cmNlLWNvZGUtc291cmNlLW1hcC1hZGRlZCIsCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>