<?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>36481</bug_id>
          
          <creation_ts>2010-03-23 00:29:36 -0700</creation_ts>
          <short_desc>Web Inspector: Edit Tag Names</short_desc>
          <delta_ts>2010-03-28 03:35:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>202951</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-23 00:29:36 -0700</bug_when>
    <thetext>There is &quot;Add Attribute&quot; and &quot;Edit Attribute&quot;, how about &quot;Add Child&quot; and &quot;Edit Tag&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202953</commentid>
    <comment_count>1</comment_count>
      <attachid>51398</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-23 00:41:12 -0700</bug_when>
    <thetext>Created attachment 51398
[PATCH] Adds &quot;Add Child&quot; and &quot;Edit Tag&quot; to the Context Menu

I don&apos;t think this is a final patch yet. But I wanted to open this up for discussion. Video to come soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202955</commentid>
    <comment_count>2</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-23 00:44:36 -0700</bug_when>
    <thetext>Video of feature:
http://screencast.com/t/YzhhMTcxYTkt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202959</commentid>
    <comment_count>3</comment_count>
      <attachid>51398</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-23 01:06:31 -0700</bug_when>
    <thetext>Comment on attachment 51398
[PATCH] Adds &quot;Add Child&quot; and &quot;Edit Tag&quot; to the Context Menu

Looks cool! Menu gets populated!!!

General notes go first:
- Given a node with N children, Add Child only solves 1/N part of the problem. I.e. Besides &quot;Add Child&quot; we need &quot;Insert Above&quot; and &quot;Insert Below&quot;.
- I did not track it in the code, but according to the video, adding text nodes capability is missing
- Taking #2 to the greater level, I think Add / Insert Child should be implemented as Edit as HTML. I.e. accept free flow text as an input. That way user would be able to paste portions of HTML as a source for new nodes. I know we lose nice structuring of added nodes, but we gain huge flexibility in return.



&gt; +using namespace HTMLNames;
&gt; +

I think our relationship with HTMLNames is not strong enough to start using using.

&gt; +        frontend-&gt;didRemoveNode(callId, -1);

Bug. -&gt; didAddChild ?

&gt; +
&gt; +        newElem-&gt;copyNonAttributeProperties(oldElem);

Does this take care of JS properties on wrappers?

&gt; +    if (code) {
&gt; +        frontend-&gt;didChangeTagName(callId, -3);

Do you handle these error codes? If not, why differentiating?

&gt; +            // Short delay for the UI to catch up
&gt; +            setTimeout(function() {

Oh no.

I&apos;ll review front-end code in greater detail later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202968</commentid>
    <comment_count>4</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-03-23 01:39:46 -0700</bug_when>
    <thetext>I think it is fine to just have &quot;add&quot; and no &quot;insert&quot;. Later I think we will have drag and drop reordering that will allow you to fix the order as a developer. Or if it matters, use edit HTML to control placement better.

Or have 2 other menu items, Add Previous Sibling and Add Next Sibling and you are done. Add Child would be there too.

I like Edit Tag! I think it is easier than Edit HTML. I would like to see the close tag update as you type the new tag name. It was weird to me to see it stay as the old tag until commit, espicually in a structured edit mode (not free form),

I think I might agree with Pavel that adding a new element should just just be free-form and not structured. But I&apos;m on the fence. I usually prefer the structured mode…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203332</commentid>
    <comment_count>5</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-23 23:12:43 -0700</bug_when>
    <thetext>Thanks for the comments. I&apos;ll further then discussion.

&gt; - Given a node with N children, Add Child only solves 1/N part of the problem.
&gt; I.e. Besides &quot;Add Child&quot; we need &quot;Insert Above&quot; and &quot;Insert Below&quot;.

&gt; Or have 2 other menu items, Add Previous Sibling and Add Next Sibling and you
&gt; are done. Add Child would be there too.

I think Drag &amp; Drop reordering would handle this nicely. I did originally plan on having &quot;Add Next Sibling&quot; but I didn&apos;t get it in before midnight so I stopped with this patch =).

&gt; - I did not track it in the code, but according to the video, adding text nodes
&gt; capability is missing

You&apos;re correct. Great point! Anything left? Processing Instructions / Comments would be over overkill.

&gt; - Taking #2 to the greater level, I think Add / Insert Child should be
&gt; implemented as Edit as HTML. I.e. accept free flow text as an input. That way
&gt; user would be able to paste portions of HTML as a source for new nodes. I know
&gt; we lose nice structuring of added nodes, but we gain huge flexibility in
&gt; return.

&gt; I like Edit Tag! I think it is easier than Edit HTML. I would like to see the
&gt; close tag update as you type the new tag name. It was weird to me to see it
&gt; stay as the old tag until commit, espicually in a structured edit mode (not
&gt; free form),
&gt; 
&gt; I think I might agree with Pavel that adding a new element should just just be
&gt; free-form and not structured. But I&apos;m on the fence. I usually prefer the
&gt; structured mode…

I am a big fan of the structured mode. Mostly because it typically handles errors more gracefully. At the very least, if I want to create an element right now the first thing that comes to mind is _not_ &quot;Edit HTML&quot;. Instead I&apos;d rather $0.appendChild(document.createElement(...).


It sounds like I should add the following context menu items. Any way to limit this without something too clever? With Drag and Drop we could just have &quot;Add Sibling&quot; and have the user drag it after making it.

  - Edit Tag
  - Add Child Element
  - Add Child Text Node
  - Add Previous Sibling
  - Add Next Sibling





&gt; &gt; +using namespace HTMLNames;
&gt; &gt; +
&gt; 
&gt; I think our relationship with HTMLNames is not strong enough to start using
&gt; using.

Point taken. Is there a convention here?


&gt; &gt; +        frontend-&gt;didRemoveNode(callId, -1);
&gt; 
&gt; Bug. -&gt; didAddChild ?

Good catch.


&gt; &gt; +        newElem-&gt;copyNonAttributeProperties(oldElem);
&gt; 
&gt; Does this take care of JS properties on wrappers?

I actually don&apos;t even know what it does. Shame on me. 

What do you mean by property wrappers? Just generic properties added to the node via JS? Can anyone think of things I should copy other than Attributes and Children?


&gt; &gt; +    if (code) {
&gt; &gt; +        frontend-&gt;didChangeTagName(callId, -3);
&gt; 
&gt; Do you handle these error codes? If not, why differentiating?

This was actually debugging code for me, to know when it error&apos;d out. I can change them all to -1.

&gt; &gt; +            // Short delay for the UI to catch up
&gt; &gt; +            setTimeout(function() {
&gt; 
&gt; Oh no.
&gt; 
&gt; I&apos;ll review front-end code in greater detail later.

Again, I wanted to get some discussion out the door (which it looks like I did). I have to investigate a number of UI issues with this patch. You can hold off a detailed look, I may ask you some questions on IRC the next time I look at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203335</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-23 23:54:12 -0700</bug_when>
    <thetext>&gt; I am a big fan of the structured mode. Mostly because it typically handles
&gt; errors more gracefully.

I actually think this is very wrong. I came from the IDE business where it is considered a classical mistake. Although this approach is very appealing to the implementor from the strict coding point of view, developers do not use structured editing. Do you use anything like that in your coding life? Things like IDE&apos;s ability to add classes / attributes via the tree view to the left? I bet you don&apos;t.

The right way of handling this is free flow editing with syntax highlighting and error underline. It is much more flexible and much, much more usable and faster. Fixing attribute value while typing element&apos;s body is a nightmare using structured editing. And I think that even with no highlighting and error detection free text editing would be more usable. You just open an editor field for the user to type things in.

&gt; At the very least, if I want to create an element right
&gt; now the first thing that comes to mind is _not_ &quot;Edit HTML&quot;. Instead I&apos;d rather
&gt; $0.appendChild(document.createElement(...).

The real reason here is that you don&apos;t want to mess with context menu and html parsing (scrolling to the end). You would much rather type a lot in the console. And you don&apos;t use structured console editing - it is free flow. And you are nor afraid to make mistakes :P.

&gt; 
&gt;   - Edit Tag

This really should be triggered as double click on the tag name as well (as we do for attributes). Context menu action is only useful for discoverability.

&gt;   - Add Child Element
&gt;   - Add Child Text Node

I don&apos;t want to make such a decision early. I am not yet sure I&apos;ll do text or I want to wrap it with &lt;span&gt;. Or I changed my mind as I was doing it. As pointed out above, I&apos;d like simple text area where I can put my html and surround it with &lt;span&gt; half-baked.

&gt;   - Add Previous Sibling
&gt;   - Add Next Sibling

These are formally correct, but Insert Above and Insert Below look much more friendly.
&gt; 
&gt; I actually don&apos;t even know what it does. Shame on me. 
&gt; 
&gt; What do you mean by property wrappers? Just generic properties added to the
&gt; node via JS? Can anyone think of things I should copy other than Attributes and
&gt; Children?

Custom properties added to the node via JS was what I was talking about. Local action such as tweaking tag name makes you responsible for preserving literally everything, including js properties and element identity (references to it in JS). I am not sure you can achieve this (and that is probably the reason behind the lack of such an action in FB). Edit As HTML removes this responsibility from you.
I know that people would use this for design purposes (probably to toggle between div and span - I&apos;ve never needed such a thing for anything else), but those loosing references to their objects would be surprised. How do we manage this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204927</commentid>
    <comment_count>7</comment_count>
      <attachid>51810</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-26 21:12:30 -0700</bug_when>
    <thetext>Created attachment 51810
[PATCH] Converge on `long` for Inspector* id&apos;s

This has been bothering me for a long time. Sometimes they are &quot;long&quot;, other times they are &quot;int&quot;. I&apos;ve made everything into a long. The only &quot;int&quot; that remains is the contextMenu, which I didn&apos;t track down why it was an int.

Searching for remaining ints produced nothing obvious:

&gt; shell&gt; cd inspector/
&gt; shell&gt; ack &apos;int .*?id =&apos;
&gt; shell&gt; ack &apos;int .*?Id =&apos;
&gt; InspectorDatabaseResource.cpp
&gt; 43:int InspectorDatabaseResource::s_nextUnusedId = 1;
&gt; InspectorDOMStorageResource.cpp
&gt; 50:int InspectorDOMStorageResource::s_nextUnusedId = 1;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204931</commentid>
    <comment_count>8</comment_count>
      <attachid>51811</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-26 21:21:00 -0700</bug_when>
    <thetext>Created attachment 51811
[PATCH] &quot;Edit Tag&quot; and &quot;Add Child Element&quot;

This really just cleans up the code and adds a few ideas but has some serious UI issues that I have to work out. Some notes in no particular order:

- Blacklisted elements for &quot;Edit Tag&quot;. I do not allow editing the tag name of html, head, title, or body in either the double click or context menu. I think doing so would likely be accidental.

- Update the closing tag. Unfortunately I do this onkeyup, which is noticeably slow. On key down does not yet have the content in a convenient form... I will likely need to switch this to onkeydown and do a String.fromCharCode( event.charCode ) and make it lowercase or not depending on if the shift key is down or not. I felt that was considerably ugly. The closing tag can be in any number of states (non-expanded, expanded, non-existent). I gracefully handle updating it all cases.

- There are serious UI jitters between committing the change, the front end getting the update, and the tree being repopulated. I have to work on making this a lot smoother. I know the setTimeout is unacceptable. I may instead add a function to a queue of actions to be performed when the updates arrive directly to the front-end instead of the hacky wait. I also need to prevent an expanded node collapsing the tree before the new update comes in and expands again.

Any ideas on the UI problems would be much appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204943</commentid>
    <comment_count>9</comment_count>
      <attachid>51810</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-26 23:53:36 -0700</bug_when>
    <thetext>Comment on attachment 51810
[PATCH] Converge on `long` for Inspector* id&apos;s

r+ with comments.

&gt;&gt; This has been bothering me for a long time. Sometimes they are &quot;long&quot;, other times they are &quot;int&quot;.

True, it is just that it was not that easy before Yury introduced &quot;long&quot; setters in the ScriptObject bindings.
Please file a separate bug and land it there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204946</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-27 00:06:53 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=51811) [details]
&gt; [PATCH] &quot;Edit Tag&quot; and &quot;Add Child Element&quot;
&gt; 
&gt; This really just cleans up the code and adds a few ideas but has some serious
&gt; UI issues that I have to work out. Some notes in no particular order:
&gt; 
&gt; - Blacklisted elements for &quot;Edit Tag&quot;. I do not allow editing the tag name of
&gt; html, head, title, or body in either the double click or context menu. I think
&gt; doing so would likely be accidental.
&gt; 

I would agree on html, head and body. Not so sure about title.

&gt; - Update the closing tag. Unfortunately I do this onkeyup, which is noticeably
&gt; slow. On key down does not yet have the content in a convenient form... I will
&gt; likely need to switch this to onkeydown and do a String.fromCharCode(
&gt; event.charCode ) and make it lowercase or not depending on if the shift key is
&gt; down or not. I felt that was considerably ugly. The closing tag can be in any
&gt; number of states (non-expanded, expanded, non-existent). I gracefully handle
&gt; updating it all cases.
&gt; 

Did you try textInput event? It should come when you need it and have an appropriate data in place. Lowercase is no good for XML/XHTML where tag names are case sensitive. Wrt closing tag states, can we refactor the code so that you could handle it all at once? (Note that Alexander is currently working on making close tag selectable, so one of you would need to merge).

&gt; - There are serious UI jitters between committing the change, the front end
&gt; getting the update, and the tree being repopulated. I have to work on making
&gt; this a lot smoother. I know the setTimeout is unacceptable. I may instead add a
&gt; function to a queue of actions to be performed when the updates arrive directly
&gt; to the front-end instead of the hacky wait. I also need to prevent an expanded
&gt; node collapsing the tree before the new update comes in and expands again.
&gt; 
&gt; Any ideas on the UI problems would be much appreciated.

It is not that setTimeout is unacceptable, it will simply not work in Chromium since front-end is truly asynchronous. The reason you have delay is that we do coalescing dom update upon events in the front-end (see updateModifiedNodesSoon vs updateModifiedNodes). You should call updateModifiedNodes from within didChangeTagName to have instant update (look at how Edit as HTML is implemented).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204948</commentid>
    <comment_count>11</comment_count>
      <attachid>51811</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-27 00:16:15 -0700</bug_when>
    <thetext>Comment on attachment 51811
[PATCH] &quot;Edit Tag&quot; and &quot;Add Child Element&quot;

&gt; +void InspectorBackend::addChildElement(long callId, long nodeId)
&gt; +{

This code should be in InspectorDOMAgent that is responsible for mutating DOM. See other dom-related methods in backend. InspectorBackend also should not be HTMLNames aware. Sorry if I missed it previously.
InspectorBackend is just a facade to InspectorController from the front-end side. It only handles trivial InspectorController duties in place. Heavy-weight stuff goes either into InspectorController or InspectorDOMAgent or to where appropriate.

&gt; +void InspectorBackend::changeTagName(long callId, long nodeId, const AtomicString&amp; tagName)

Ditto. Please look at other DOM-related methods.

&gt; +        if (WebInspector.ElementsTreeElement.EditTagBlacklist.indexOf(this.representedObject.localName) === -1) {

Nit: I got used to using maps for these even if there are not too many items. Appending .keySet() to array definition makes a set.

&gt; +        contextMenu.appendItem(WebInspector.UIString(&quot;Add Child Element&quot;), this._addChildElement.bind(this));

Please do not ignore my concerns about adding text nodes or mixed content. It really bothers me and I think I have a strong point.

&gt; +            // FIXME: Short delay for the UI to catch up.
&gt; +            setTimeout(function() {

See suggestions on the bug comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205093</commentid>
    <comment_count>12</comment_count>
      <attachid>51850</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-27 20:36:46 -0700</bug_when>
    <thetext>Created attachment 51850
[PATCH] Part 1 - Add &quot;Edit Tag&quot; on Double Click

Break things out a bit.  This is just Edit Tag Name. Changes are:
- follow the editHTML style of updates. Much smoother!
- no context menu item, only double click.

I am still not 100% certain if InspectorDOMAgent::changeTagName is 100% correct. I will be investigating that the next time I look at this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205095</commentid>
    <comment_count>13</comment_count>
      <attachid>51852</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-27 20:39:40 -0700</bug_when>
    <thetext>Created attachment 51852
[PATCH] Part 2 - Fix Tabbing and Attribute Editing

While enabling a backwards tab from attributes to the tag name I found a bunch of (new to me) issues with editing attributes. Here I fix a number of them and clean up the code a bit.
- Added: tab between tag name and attributes
- Fixed: tab to new attribute, tab back, tab forward; nolonger has extra whitespace
- Fixed: create new attribute, tab forward; no longer has mis-styled attribute

I can break this one down further. But I should post a video in a moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205096</commentid>
    <comment_count>14</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-27 20:44:11 -0700</bug_when>
    <thetext>Video as promised:
http://screencast.com/t/MzVhY2Fm

I forgot to mention I still do keyup when mirroring the closing tag. So that is another open issue right now =/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205101</commentid>
    <comment_count>15</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-03-27 22:00:01 -0700</bug_when>
    <thetext>WebCore adds a &lt;br&gt; if you delete everything in a contenteditable area. So that is what you see. We can maybe style any &lt;br&gt; in these area to no cause a break.

Looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205106</commentid>
    <comment_count>16</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-27 22:44:17 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; WebCore adds a &lt;br&gt; if you delete everything in a contenteditable area. So that
&gt; is what you see. We can maybe style any &lt;br&gt; in these area to no cause a break.

Awesome! That saved me a lot of time!

This made it work perfectly:

  .editing br { display: none; }

Are there any places you can think of where we would want a &lt;br&gt; while editing? Otherwise I&apos;ll add this to the patch (in inspector.css).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205110</commentid>
    <comment_count>17</comment_count>
      <attachid>51850</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-28 00:46:04 -0700</bug_when>
    <thetext>Comment on attachment 51850
[PATCH] Part 1 - Add &quot;Edit Tag&quot; on Double Click

&gt; +void InspectorDOMAgent::changeTagName(long callId, long nodeId, const AtomicString&amp; tagName, bool expanded)
&gt; +{
&gt; +    Node* oldNode = nodeForId(nodeId);
&gt; +    if (!oldNode) {
&gt; +        // Use -1 to denote an error condition.
&gt; +        m_frontend-&gt;didChangeTagName(callId, -1);
&gt; +        return;

Assert non-element case early as well?

&gt; +    }
&gt; +
&gt; +    // FIXME: Exception codes are ignored until the end.
&gt; +    ExceptionCode code;
&gt; +    RefPtr&lt;Node&gt; newNode = oldNode-&gt;document()-&gt;createElement(tagName, code);
&gt; +
&gt; +    // Copy over the original node&apos;s attributes.
&gt; +    if (oldNode-&gt;isElementNode() &amp;&amp; newNode-&gt;isElementNode()) {
&gt; +        Element* oldElem = static_cast&lt;Element*&gt;(oldNode);
&gt; +        Element* newElem = static_cast&lt;Element*&gt;(newNode.get());
&gt; +
&gt; +        newElem-&gt;copyNonAttributeProperties(oldElem);
&gt; +        if (oldElem-&gt;attributes())
&gt; +            newElem-&gt;attributes()-&gt;setAttributes(*(oldElem-&gt;attributes(true)));
&gt; +    }
&gt; +
&gt; +    // Copy over the original node&apos;s children.
&gt; +    Node* child;
&gt; +    while ((child = oldNode-&gt;firstChild()))
&gt; +        newNode-&gt;appendChild(child, code);

If you ignore previous call code, you should at least clear it before the subsequent one I guess.

&gt;  
&gt; +    _tagNameEditingCommitted: function(element, newText, oldText, tagName, moveDirection)
&gt; +    {
&gt; +        delete this._editing;
&gt; +
&gt; +        function cancel()
&gt; +        {
&gt; +            var closingTagElement = this._distinctClosingTagElement();
&gt; +            if (closingTagElement)
&gt; +                closingTagElement.textContent = &quot;&lt;/&quot; + tagName + &quot;&gt;&quot;;
&gt; +
&gt; +            this._editingCancelled(element, tagName);
&gt; +            moveToNextAttributeIfNeeded.call(this);
&gt; +        }
&gt; +
&gt; +        function moveToNextAttributeIfNeeded()

Nit: can we generalize traversal logic more and extract it from here?

&gt; +        try {
&gt; +            document.createElement(newText);
&gt; +        } catch(e) {
&gt; +            cancel.call(this);
&gt; +            return;
&gt; +        }

I am not sure this is necessary. You should rely on error codes on backend side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205111</commentid>
    <comment_count>18</comment_count>
      <attachid>51852</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-28 00:56:48 -0700</bug_when>
    <thetext>Comment on attachment 51852
[PATCH] Part 2 - Fix Tabbing and Attribute Editing

&gt; +            var previous = element.previousSibling;
&gt; +            if (!previous || previous.nodeType !== Node.TEXT_NODE)
&gt; +                element.parentNode.insertBefore(document.createTextNode(&quot; &quot;), element);
&gt; +            element.outerHTML = &quot;&lt;span class=\&quot;webkit-html-attribute\&quot;&gt;&quot; +
&gt; +                                  &quot;&lt;span class=\&quot;webkit-html-attribute-name\&quot;&gt;&quot; + attr.name.escapeHTML() + &quot;&lt;/span&gt;=&amp;#8203;\&quot;&quot; +
&gt; +                                  &quot;&lt;span class=\&quot;webkit-html-attribute-value\&quot;&gt;&quot; + attr.value.escapeHTML() + &quot;&lt;/span&gt;&amp;#8203;\&quot;&quot; +
&gt; +                                &quot;&lt;/span&gt;&quot;;

I really don&apos;t like these snippets spread all over the code in various methods. We really should do it in single place!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205117</commentid>
    <comment_count>19</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-28 01:54:22 -0700</bug_when>
    <thetext>Committed r56683
	M	WebCore/ChangeLog
	M	WebCore/inspector/InspectorFrontend.cpp
	M	WebCore/inspector/InspectorBackend.h
	M	WebCore/inspector/InspectorDOMAgent.h
	M	WebCore/inspector/InspectorBackend.idl
	M	WebCore/inspector/front-end/ElementsTreeOutline.js
	M	WebCore/inspector/front-end/DOMAgent.js
	M	WebCore/inspector/front-end/treeoutline.js
	M	WebCore/inspector/InspectorFrontend.h
	M	WebCore/inspector/InspectorBackend.cpp
	M	WebCore/inspector/InspectorDOMAgent.cpp
r56683 = bb9632f89ccbbeb6ff2a4c8913567bbe2337180f (trunk)
http://trac.webkit.org/changeset/56683

Committed r56684
	M	WebCore/ChangeLog
	M	WebCore/inspector/front-end/ElementsTreeOutline.js
	M	WebCore/inspector/front-end/inspector.css
http://trac.webkit.org/changeset/56684


(In reply to comment #17)
&gt; (From update of attachment 51850 [details])
&gt; &gt; +void InspectorDOMAgent::changeTagName(long callId, long nodeId, const AtomicString&amp; tagName, bool expanded)
&gt; Assert non-element case early as well?
&gt; 

Done. I thought about this before and I agree. I also removed usage of &quot;newNode&quot; and just used &quot;newElem&quot; throughout, since Element is the result from document()-&gt;createElement(...).

&gt; If you ignore previous call code, you should at least clear it before the
&gt; subsequent one I guess.

ContainerNode::appendChild clears out the exception code each time. And, I don&apos;t check it for these operations, since even if I&apos;m half way through, I want to keep going.

&gt; &gt; +        try {
&gt; &gt; +            document.createElement(newText);
&gt; &gt; +        } catch(e) {
&gt; &gt; +            cancel.call(this);
&gt; &gt; +            return;
&gt; &gt; +        }
&gt; 
&gt; I am not sure this is necessary. You should rely on error codes on backend
&gt; side.

I removed this in favor of checking the exception code from the backend&apos;s createElement call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205130</commentid>
    <comment_count>20</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-28 03:15:10 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; I really don&apos;t like these snippets spread all over the code in various methods.
&gt; We really should do it in single place!

See bug 36719.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205132</commentid>
    <comment_count>21</comment_count>
      <attachid>51855</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-28 03:17:23 -0700</bug_when>
    <thetext>Created attachment 51855
[PATCH] Fix Blacklist

The Blacklist was broken. It does not handle all cases that the tag name could be edited (namely, tabbing back from an attribute). I moved the black list check directly into _startEditingTagName so the blacklist is always checked. I also moved the code to a more convenient place, alongside similar code I didn&apos;t notice before!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205133</commentid>
    <comment_count>22</comment_count>
      <attachid>51856</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-28 03:21:22 -0700</bug_when>
    <thetext>Created attachment 51856
[PATCH] Fix Blacklist

I was too greedy with git! This is the correct patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205134</commentid>
    <comment_count>23</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-03-28 03:35:59 -0700</bug_when>
    <thetext>Follow up fix committed:

Committed r56687
	M	WebCore/ChangeLog
	M	WebCore/inspector/front-end/ElementsTreeOutline.js
r56687 = 1d333db025c4379abe021858b6a6942b35fa84ac (trunk)
http://trac.webkit.org/changeset/56687</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51398</attachid>
            <date>2010-03-23 00:41:12 -0700</date>
            <delta_ts>2010-03-26 21:12:30 -0700</delta_ts>
            <desc>[PATCH] Adds &quot;Add Child&quot; and &quot;Edit Tag&quot; to the Context Menu</desc>
            <filename>edit_tag.patch</filename>
            <type>text/plain</type>
            <size>22470</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmI4N2RjYy4uNjZkNTU3NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMC0wMy0yMyAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVkaXQgVGFnIE5hbWVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQ4MQorICAgICAgICAK
KyAgICAgICAgQWxsb3cgIkVkaXQgVGFnIiBhbmQgIkFkZCBDaGlsZCIgaW4gdGhlIGNvbnRleHQg
bWVudSBvZiBlbGVtZW50cyBpbgorICAgICAgICB0aGUgRWxlbWVudHMgVHJlZSBIZWlyYXJjaHku
CisKKyAgICAgICAgICBUaGUgdXN1YWwgYXN5bmNocm9ub3VzIEluc3BlY3RvckJhY2tlbmQsIEZy
b250ZW5kLCBhbmQgRE9NQWdlbnQgZmxvdy4KKyAgICAgICAgCisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2Vu
ZDo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6Y2hhbmdl
VGFnTmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250
ZW5kOjpkaWRBZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6
ZGlkQ2hhbmdlVGFnTmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qczoKKworICAgICAg
ICAgIEFsbG93IGZvciBlZGl0aW5nIGFuIGVsZW1lbnQncyB0YWcgbmFtZS4gQWRkIGNvbnRleHQg
bWVudSBpdGVtcy4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVl
T3V0bGluZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnBy
b3RvdHlwZS5fcG9wdWxhdGVUYWdDb250ZXh0TWVudSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX2FkZENoaWxkLmFkZENoaWxkQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9h
ZGRDaGlsZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90
b3R5cGUuX3RhZ05hbWVFZGl0aW5nQ29tbWl0dGVkLm1vdmVUb05leHRBdHRyaWJ1dGVJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUu
X3RhZ05hbWVFZGl0aW5nQ29tbWl0dGVkLmVkaXRUYWdOYW1lQ2FsbGJhY2spOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl90YWdOYW1lRWRpdGlu
Z0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5w
cm90b3R5cGUuX3N0YXJ0RWRpdGluZ1RhZ05hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVs
ZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9hdHRyaWJ1dGVFZGl0aW5nQ29tbWl0dGVkLm1v
dmVUb05leHRBdHRyaWJ1dGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVu
dHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX2F0dHJpYnV0ZUVkaXRpbmdDb21taXR0ZWQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9ub2RlVGl0
bGVJbmZvKToKKyAgICAgICAgCisgICAgICAgICAgTWlzY2VsbGFuZW91cyBjaGFuZ2VzLgorICAg
ICAgICAKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3RyZWVvdXRsaW5lLmpzOiBGaXhl
ZCB0eXBvIGluIGNvbW1lbnQuCisgICAgICAgICogRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJp
bmdzLmpzOiAiRWRpdCBUYWciIGFuZCAiQWRkIENoaWxkIgorCiAyMDEwLTAzLTIyICBEbWl0cnkg
VGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5hdGUg
Q2hhcGluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmlu
Z3MuanMgYi9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwppbmRleCAw
YTU1MjUwOGQ5M2MwYzY2M2FlYTI1NWYyYTg3ZDM1MmY3Nzk2ZTU1Li5mOTNkZWVhMjc1NjRkNzNm
MzE4MWVhNTAwOTU0OTMxMmVmYzJkN2E5IDEwMDY0NApHSVQgYmluYXJ5IHBhdGNoCmRlbHRhIDY4
CnpjbWJPPGtMbDJTclZUPjxsalpuU0NhPGFIO0I7b2xWOH4/MVZNdipyJFM9d2M8eE90bilTWVpz
JSlefD5rVW5gfgpTbksofWYxQ1lnXyM5Kzw5I1EqQG5DbFNwNgoKZGVsdGEgOQpRY21YPiFwSn4h
T3JWVD48MDJNOSs9S3VmegoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5k
ZXggMDYzMGVlMS4uY2UzNzA2YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJJbmpl
Y3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKQEAgLTcwLDYg
KzcxLDggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCiBJbnNwZWN0b3JCYWNrZW5kOjpJbnNwZWN0b3JC
YWNrZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpCiAgICAgOiBt
X2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKIHsKQEAgLTMyNiw3ICsz
MjksNyBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNvcHlOb2RlKGxvbmcgbm9kZUlkKQogICAg
IFN0cmluZyBtYXJrdXAgPSBjcmVhdGVNYXJrdXAobm9kZSk7CiAgICAgUGFzdGVib2FyZDo6Z2Vu
ZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQobWFya3VwKTsKIH0KLSAgICAKKwogdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpyZW1vdmVOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkK
IHsKICAgICBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQgPSBpbnNwZWN0b3JGcm9udGVuZCgp
OwpAQCAtMzU2LDYgKzM1OSw4NyBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJlbW92ZU5vZGUo
bG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQogICAgIGZyb250ZW5kLT5kaWRSZW1vdmVOb2RlKGNh
bGxJZCwgbm9kZUlkKTsKIH0KIAordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjphZGRDaGlsZChsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQpCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5k
ID0gaW5zcGVjdG9yRnJvbnRlbmQoKTsKKyAgICBpZiAoIWZyb250ZW5kKQorICAgICAgICByZXR1
cm47CisKKyAgICBOb2RlKiBwYXJlbnROb2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CisgICAgaWYg
KCFwYXJlbnROb2RlKSB7CisgICAgICAgIC8vIFVzZSAtMSB0byBkZW5vdGUgYW4gZXJyb3IgY29u
ZGl0aW9uLgorICAgICAgICBmcm9udGVuZC0+ZGlkUmVtb3ZlTm9kZShjYWxsSWQsIC0xKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEV4Y2VwdGlvbkNvZGUgY29kZSA9IDA7CisgICAg
UmVmUHRyPE5vZGU+IG5ld1NwYW5Ob2RlID0gcGFyZW50Tm9kZS0+ZG9jdW1lbnQoKS0+Y3JlYXRl
RWxlbWVudChzcGFuVGFnLCBmYWxzZSk7CisgICAgcGFyZW50Tm9kZS0+YXBwZW5kQ2hpbGQobmV3
U3Bhbk5vZGUsIGNvZGUpOworICAgIGlmIChjb2RlKSB7CisgICAgICAgIGZyb250ZW5kLT5kaWRB
ZGRDaGlsZChjYWxsSWQsIC0xKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChJ
bnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2VudCgpKSB7CisgICAg
ICAgIGxvbmcgY2hpbGRJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5ld1Nw
YW5Ob2RlLmdldCgpKTsKKyAgICAgICAgZnJvbnRlbmQtPmRpZEFkZENoaWxkKGNhbGxJZCwgY2hp
bGRJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmcm9udGVuZC0+ZGlkQWRkQ2hp
bGQoY2FsbElkLCAtMSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6Y2hhbmdlVGFnTmFt
ZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkK
K3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQgPSBpbnNwZWN0b3JGcm9udGVuZCgp
OworICAgIGlmICghZnJvbnRlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIE5vZGUqIG9sZE5v
ZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIW9sZE5vZGUpIHsKKyAgICAgICAgLy8g
VXNlIC0xIHRvIGRlbm90ZSBhbiBlcnJvciBjb25kaXRpb24uCisgICAgICAgIGZyb250ZW5kLT5k
aWRDaGFuZ2VUYWdOYW1lKGNhbGxJZCwgLTEpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgRXhjZXB0aW9uQ29kZSBjb2RlOworICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0gb2xkTm9k
ZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudCh0YWdOYW1lLCBjb2RlKTsKKyAgICAvLyBJZ25v
cmUgZXhjZXB0aW9uIGNvZGUuCisKKyAgICAvLyBDb3B5IG92ZXIgYXR0cmlidXRlcworICAgIGlm
IChvbGROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgbmV3Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7
CisgICAgICAgIEVsZW1lbnQqIG9sZEVsZW0gPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ob2xkTm9k
ZSk7CisgICAgICAgIEVsZW1lbnQqIG5ld0VsZW0gPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obmV3
Tm9kZS5nZXQoKSk7CisKKyAgICAgICAgbmV3RWxlbS0+Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRp
ZXMob2xkRWxlbSk7CisgICAgICAgIGlmIChvbGRFbGVtLT5hdHRyaWJ1dGVzKCkpCisgICAgICAg
ICAgICBuZXdFbGVtLT5hdHRyaWJ1dGVzKCktPnNldEF0dHJpYnV0ZXMoKihvbGRFbGVtLT5hdHRy
aWJ1dGVzKHRydWUpKSk7CisgICAgfQorCisgICAgLy8gQ29weSBvdmVyIGNoaWxkcmVuCisgICAg
Tm9kZSogY2hpbGQ7CisgICAgd2hpbGUgKChjaGlsZCA9IG9sZE5vZGUtPmZpcnN0Q2hpbGQoKSkp
CisgICAgICAgIG5ld05vZGUtPmFwcGVuZENoaWxkKGNoaWxkLCBjb2RlKTsKKworICAgIC8vIFJl
cGxhY2UgdGhlIG9sZCBub2RlIHdpdGggdGhlIG5ldyBub2RlCisgICAgTm9kZSogcGFyZW50ID0g
b2xkTm9kZS0+cGFyZW50Tm9kZSgpOworICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld05vZGUs
IG9sZE5vZGUtPm5leHRTaWJsaW5nKCksIGNvZGUpOworICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGQo
b2xkTm9kZSwgY29kZSk7CisKKyAgICBpZiAoY29kZSkgeworICAgICAgICBmcm9udGVuZC0+ZGlk
Q2hhbmdlVGFnTmFtZShjYWxsSWQsIC0zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2VudCgpKSB7
CisgICAgICAgIGxvbmcgbmV3SWQgPSBkb21BZ2VudC0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChu
ZXdOb2RlLmdldCgpKTsKKyAgICAgICAgZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05hbWUoY2FsbElk
LCBuZXdJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmcm9udGVuZC0+ZGlkQ2hh
bmdlVGFnTmFtZShjYWxsSWQsIC00KTsKK30KKwogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRT
dHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpCiB7CiAgICAg
aWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckRPTUFnZW50KCkpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5kZXggM2NjMjU0NS4uZGU4MThmOSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApAQCAtNiwxMyArNiwxMyBAQAogICogYXJl
IG1ldDoKICAqCiAgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAogICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLiAKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKQEAgLTExMiw2ICsxMTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRFdmVudExp
c3RlbmVyc0Zvck5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKICAgICB2b2lkIGNvcHlO
b2RlKGxvbmcgbm9kZUlkKTsKICAgICB2b2lkIHJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcg
bm9kZUlkKTsKKyAgICB2b2lkIGFkZENoaWxkKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7Cisg
ICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lKTsKIAogICAgIHZvaWQgZ2V0U3R5bGVzKGxvbmcgY2FsbElkLCBs
b25nIG5vZGVJZCwgYm9vbCBhdXRoT25seSk7CiAgICAgdm9pZCBnZXRBbGxTdHlsZXMobG9uZyBj
YWxsSWQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5p
ZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCAyYjNjYjZm
Li5jYWIzM2Y4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtODcs
NiArODcsOCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIHZvaWQgZ2V0RXZlbnRMaXN0ZW5lcnNG
b3JOb2RlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgY29w
eU5vZGUoaW4gbG9uZyBub2RlSWQpOwogICAgICAgICB2b2lkIHJlbW92ZU5vZGUoaW4gbG9uZyBj
YWxsSWQsIGluIGxvbmcgbm9kZUlkKTsKKyAgICAgICAgdm9pZCBhZGRDaGlsZChpbiBsb25nIGNh
bGxJZCwgaW4gbG9uZyBub2RlSWQpOworICAgICAgICB2b2lkIGNoYW5nZVRhZ05hbWUoaW4gbG9u
ZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBpbiBET01TdHJpbmcgbmV3VGFnTmFtZSk7CiAgICAg
ICAgIHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShpbiBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQg
aGlkZURPTU5vZGVIaWdobGlnaHQoKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmQuY3BwCmluZGV4IDYyNzY1NGYuLmQ3YTA0ZGEgMTAwNzU1Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZC5jcHAKQEAgLTQ3MCw2ICs0NzAsMjQgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6ZGlkUmVtb3ZlTm9kZShpbnQgY2FsbElkLCBpbnQgbm9kZUlkKQogICAgIGZ1bmN0aW9uLmNh
bGwoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQWRkQ2hpbGQoaW50IGNhbGxJ
ZCwgaW50IGNoaWxkSWQpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2Vi
SW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRp
ZEFkZENoaWxkIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKKyAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudChjaGlsZElkKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZENoYW5nZVRhZ05hbWUoaW50IGNhbGxJZCwg
aW50IG5vZGVJZCkKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNw
ZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkQ2hh
bmdlVGFnTmFtZSIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7CisgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQobm9kZUlkKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9
CisKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldENoaWxkTm9kZXMoaW50IGNhbGxJZCkK
IHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNw
YXRjaCIpOyAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCmluZGV4IDlkODViNzEu
LjJjODhmNGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaApAQCAtMTMyLDYg
KzEzMiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkaWRBcHBseURvbUNo
YW5nZShpbnQgY2FsbElkLCBib29sIHN1Y2Nlc3MpOwogICAgICAgICB2b2lkIGRpZEdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShpbnQgY2FsbElkLCBpbnQgbm9kZUlkLCBjb25zdCBTY3JpcHRBcnJh
eSYgbGlzdGVuZXJzQXJyYXkpOwogICAgICAgICB2b2lkIGRpZFJlbW92ZU5vZGUoaW50IGNhbGxJ
ZCwgaW50IG5vZGVJZCk7CisgICAgICAgIHZvaWQgZGlkQWRkQ2hpbGQoaW50IGNhbGxJZCwgaW50
IGNoaWxkSWQpOworICAgICAgICB2b2lkIGRpZENoYW5nZVRhZ05hbWUoaW50IGNhbGxJZCwgaW50
IG5vZGVJZCk7CiAKICAgICAgICAgdm9pZCBkaWRHZXRTdHlsZXMobG9uZyBjYWxsSWQsIGNvbnN0
IFNjcmlwdFZhbHVlJiBzdHlsZXMpOwogICAgICAgICB2b2lkIGRpZEdldEFsbFN0eWxlcyhsb25n
IGNhbGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIHN0eWxlcyk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRE9NQWdlbnQuanMKaW5kZXggMmIxNWY2MS4uZWM1Nzk4NSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpAQCAtNjc1LDYgKzY3NSw4IEBAIFdlYkluc3BlY3Rv
ci5kaWRBcHBseURvbUNoYW5nZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJh
Y2s7CiBXZWJJbnNwZWN0b3IuZGlkUmVtb3ZlQXR0cmlidXRlID0gV2ViSW5zcGVjdG9yLkNhbGxi
YWNrLnByb2Nlc3NDYWxsYmFjazsKIFdlYkluc3BlY3Rvci5kaWRTZXRUZXh0Tm9kZVZhbHVlID0g
V2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIFdlYkluc3BlY3Rvci5kaWRS
ZW1vdmVOb2RlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKK1dlYklu
c3BlY3Rvci5kaWRBZGRDaGlsZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJh
Y2s7CitXZWJJbnNwZWN0b3IuZGlkQ2hhbmdlVGFnTmFtZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFj
ay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JO
b2RlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIAogV2ViSW5zcGVj
dG9yLmRpZEdldFN0eWxlcyA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0
bGluZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5l
LmpzCmluZGV4IDhjYTBiNTcuLmM4OWZiYjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzCkBAIC0yMTMsNyArMjEzLDcgQEAgV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlID0gewogCiAgICAgICAgIHJl
dHVybiBlbGVtZW50OwogICAgIH0sCi0gICAgCisKICAgICBfa2V5RG93bjogZnVuY3Rpb24oZXZl
bnQpCiAgICAgewogICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSB0aGlzLnRyZWVPdXRsaW5l
LmVsZW1lbnQpCkBAIC00NzIsNyArNDcyLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVs
ZW1lbnQucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4oKTsKICAg
ICB9LAotICAgIAorCiAgICAgdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKGZ1bGxSZWZyZXNoKQog
ICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmdldENoaWxkTm9kZXNBc3luYyh0
aGlzLnJlcHJlc2VudGVkT2JqZWN0LCB0aGlzLl91cGRhdGVDaGlsZHJlbi5iaW5kKHRoaXMsIGZ1
bGxSZWZyZXNoKSk7CkBAIC02NjUsNyArNjY1LDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJl
ZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5pc0V2ZW50V2l0aGluRGlz
Y2xvc3VyZVRyaWFuZ2xlKGV2ZW50KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBp
ZiAodGhpcy50cmVlT3V0bGluZS5zaG93SW5FbGVtZW50c1BhbmVsRW5hYmxlZCkgeyAgICAKKyAg
ICAgICAgaWYgKHRoaXMudHJlZU91dGxpbmUuc2hvd0luRWxlbWVudHNQYW5lbEVuYWJsZWQpIHsK
ICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zaG93RWxlbWVudHNQYW5lbCgpOwogICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy5mb2N1c2VkRE9NTm9kZSA9IHRoaXMucmVw
cmVzZW50ZWRPYmplY3Q7CiAgICAgICAgIH0KQEAgLTczNiw2ICs3MzYsMTEgQEAgV2ViSW5zcGVj
dG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgY29udGV4
dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVkaXQgQXR0cmlidXRlIiks
IHRoaXMuX3N0YXJ0RWRpdGluZ0F0dHJpYnV0ZS5iaW5kKHRoaXMsIGF0dHJpYnV0ZSwgZXZlbnQu
dGFyZ2V0KSk7CiAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZFNlcGFyYXRvcigpOwogCisgICAg
ICAgIC8vIEFkZCBOb2RlcworICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiQWRkIENoaWxkIiksIHRoaXMuX2FkZENoaWxkLmJpbmQodGhpcykpOwor
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRWRp
dCBUYWciKSwgdGhpcy5fc3RhcnRFZGl0aW5nVGFnTmFtZS5iaW5kKHRoaXMpKTsKKyAgICAgICAg
Y29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7CisKICAgICAgICAgLy8gQWRkIG5vZGUtcmVs
YXRlZCBhY3Rpb25zLgogICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiRWRpdCBhcyBIVE1MIiksIHRoaXMuX2VkaXRBc0hUTUwuYmluZCh0aGlzKSk7
CiAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJD
b3B5IGFzIEhUTUwiKSwgdGhpcy5fY29weUhUTUwuYmluZCh0aGlzKSk7CkBAIC04NTQsNiArODU5
LDI1IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSwKIAorICAgIF9zdGFydEVkaXRpbmdUYWdOYW1lOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgdGFnTmFtZUVsZW1lbnQgPSB0aGlzLmxpc3RJ
dGVtRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ3ZWJraXQtaHRtbC10YWctbmFtZSIp
WzBdOworICAgICAgICBpZiAoIXRhZ05hbWVFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNCZWluZ0VkaXRlZCh0YWdOYW1lRWxl
bWVudCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICB2YXIgdGFnTmFtZSA9
IHRhZ05hbWVFbGVtZW50LmlubmVyVGV4dDsKKworICAgICAgICB0aGlzLl9lZGl0aW5nID0gdHJ1
ZTsKKworICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRhZ05hbWVFbGVtZW50LCB0
aGlzLl90YWdOYW1lRWRpdGluZ0NvbW1pdHRlZC5iaW5kKHRoaXMpLCB0aGlzLl9lZGl0aW5nQ2Fu
Y2VsbGVkLmJpbmQodGhpcyksIHRhZ05hbWUpOworICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkuc2V0QmFzZUFuZEV4dGVudCh0YWdOYW1lRWxlbWVudCwgMCwgdGFnTmFtZUVsZW1lbnQsIDEp
OworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0sCisKICAgICBfc3RhcnRFZGl0aW5nQXNI
VE1MOiBmdW5jdGlvbihjb21taXRDYWxsYmFjaywgaW5pdGlhbFZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKHRoaXMuX2h0bWxFZGl0RWxlbWVudCAmJiBXZWJJbnNwZWN0b3IuaXNCZWluZ0VkaXRl
ZCh0aGlzLl9odG1sRWRpdEVsZW1lbnQpKQpAQCAtOTQxLDcgKzk2NSw3IEBAIFdlYkluc3BlY3Rv
ci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmIChtb3Zl
VG9BdHRyaWJ1dGUpCiAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlckVkaXRBdHRyaWJ1dGUo
bW92ZVRvQXR0cmlidXRlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG5ld0F0dHJpYnV0ZSkKLSAg
ICAgICAgICAgICAgICB0aGlzLl9hZGROZXdBdHRyaWJ1dGUodGhpcy5saXN0SXRlbUVsZW1lbnQp
OworICAgICAgICAgICAgICAgIHRoaXMuX2FkZE5ld0F0dHJpYnV0ZSgpOwogICAgICAgICB9CiAK
ICAgICAgICAgdmFyIHBhcnNlQ29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKQEAgLTk3Nyw2ICsxMDAxLDUyIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1Ry
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgbW92ZVRvTmV4dEF0dHJpYnV0ZUlmTmVl
ZGVkLmNhbGwodGhpcyk7CiAgICAgfSwKIAorICAgIF90YWdOYW1lRWRpdGluZ0NvbW1pdHRlZDog
ZnVuY3Rpb24oZWxlbWVudCwgbmV3VGV4dCwgb2xkVGV4dCwgdGFnTmFtZSwgbW92ZURpcmVjdGlv
bikKKyAgICB7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9lZGl0aW5nOworCisgICAgICAgIHZhciBz
ZWxmID0gdGhpczsKKyAgICAgICAgdmFyIHRyZWVPdXRsaW5lID0gdGhpcy50cmVlT3V0bGluZTsK
KworICAgICAgICBmdW5jdGlvbiBtb3ZlVG9OZXh0QXR0cmlidXRlSWZOZWVkZWQoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIXNlbGYgfHwgIW1vdmVEaXJlY3Rpb24gfHwgbW92ZURpcmVj
dGlvbiAhPT0gImZvcndhcmQiKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LmF0dHJpYnV0ZXM7Cisg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5sZW5ndGggPiAwKQorICAgICAgICAgICAgICAgIHRo
aXMuX3RyaWdnZXJFZGl0QXR0cmlidXRlKGF0dHJpYnV0ZXNbMF0ubmFtZSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5fYWRkTmV3QXR0cmlidXRlKCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobmV3VGV4dCA9PT0gb2xkVGV4dCkgeworICAgICAgICAgICAgdGhp
cy5fZWRpdGluZ0NhbmNlbGxlZChlbGVtZW50LCB0YWdOYW1lKTsKKyAgICAgICAgICAgIG1vdmVU
b05leHRBdHRyaWJ1dGVJZk5lZWRlZC5jYWxsKHRoaXMsIHRoaXMucmVwcmVzZW50ZWRPYmplY3Qp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZWRp
dFRhZ05hbWVDYWxsYmFjayhub2RlSWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFNob3J0
IGRlbGF5IGZvciB0aGUgVUkgdG8gY2F0Y2ggdXAuCisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmIChub2RlSWQgPCAwKSB7CisgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2VkaXRpbmdDYW5jZWxsZWQoZWxlbWVudCwgdGFnTmFtZSk7CisgICAg
ICAgICAgICAgICAgICAgIG1vdmVUb05leHRBdHRyaWJ1dGVJZk5lZWRlZC5jYWxsKHNlbGYsIHNl
bGYucmVwcmVzZW50ZWRPYmplY3QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBXZWJJbnNwZWN0b3Iu
ZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZCk7CisgICAgICAgICAgICAgICAgdmFyIHRyZWVJdGVt
ID0gdHJlZU91dGxpbmUuZmluZFRyZWVFbGVtZW50KG5vZGUpOworICAgICAgICAgICAgICAgIHRy
ZWVPdXRsaW5lLnJldmVhbEFuZFNlbGVjdE5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgbW92
ZVRvTmV4dEF0dHJpYnV0ZUlmTmVlZGVkLmNhbGwodHJlZUl0ZW0sIG5vZGUpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgY2FsbElkID0gV2ViSW5zcGVjdG9yLkNh
bGxiYWNrLndyYXAoZWRpdFRhZ05hbWVDYWxsYmFjayk7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuY2hhbmdlVGFnTmFtZShjYWxsSWQsIHRoaXMucmVwcmVzZW50ZWRPYmplY3QuaWQsIG5ld1Rl
eHQpOworICAgIH0sCisKICAgICBfdGV4dE5vZGVFZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlvbihl
bGVtZW50LCBuZXdUZXh0KQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMuX2VkaXRpbmc7CkBA
IC0xMDU1LDI1ICsxMTI1LDI2IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnBy
b3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBub2RlID0gdGhpcy5yZXByZXNlbnRlZE9i
amVjdDsKICAgICAgICAgdmFyIGluZm8gPSB7dGl0bGU6ICIiLCBoYXNDaGlsZHJlbjogdGhpcy5o
YXNDaGlsZHJlbn07Ci0gICAgICAgIAorCiAgICAgICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkg
ewogICAgICAgICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6CiAgICAgICAgICAgICAgICAg
aW5mby50aXRsZSA9ICJEb2N1bWVudCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgCisKICAgICAgICAgICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RF
OgogICAgICAgICAgICAgICAgIGluZm8udGl0bGUgPSAiRG9jdW1lbnQgRnJhZ21lbnQiOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RF
OgogICAgICAgICAgICAgICAgIHZhciB0YWdOYW1lID0gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpLmVzY2FwZUhUTUwoKTsKLSAgICAgICAgICAgICAgICBpbmZvLnRpdGxlID0gIjxzcGFuIGNs
YXNzPVwid2Via2l0LWh0bWwtdGFnXCI+Jmx0OyIgKyB0YWdOYW1lOwotICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGluZm8udGl0bGUgPSAiPHNwYW4gY2xhc3M9XCJ3ZWJraXQtaHRt
bC10YWdcIj4mbHQ7IjsKKyAgICAgICAgICAgICAgICBpbmZvLnRpdGxlICs9ICI8c3BhbiBjbGFz
cz1cIndlYmtpdC1odG1sLXRhZy1uYW1lXCI+IiArIHRhZ05hbWUgKyAiPC9zcGFuPiI7CisKICAg
ICAgICAgICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyID0gbm9kZS5hdHRyaWJ1dGVzW2ldOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5mby50aXRsZSArPSAiIDxzcGFuIGNsYXNzPVwid2Vi
a2l0LWh0bWwtYXR0cmlidXRlXCI+PHNwYW4gY2xhc3M9XCJ3ZWJraXQtaHRtbC1hdHRyaWJ1dGUt
bmFtZVwiPiIgKyBhdHRyLm5hbWUuZXNjYXBlSFRNTCgpICsgIjwvc3Bhbj49JiM4MjAzO1wiIjsK
LSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
dmFsdWUgPSBhdHRyLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmtpZnkg
JiYgKGF0dHIubmFtZSA9PT0gInNyYyIgfHwgYXR0ci5uYW1lID09PSAiaHJlZiIpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvKFtcLzs6
XClcXVx9XSkvZywgIiQxXHUyMDBCIik7CkBAIC0xMDg3LDcgKzExNTgsNyBAQCBXZWJJbnNwZWN0
b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaW5mby50aXRsZSArPSAiJmd0
Ozwvc3Bhbj4mIzgyMDM7IjsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNv
bnN0IGNsb3NpbmdUYWdIVE1MID0gIjxzcGFuIGNsYXNzPVwid2Via2l0LWh0bWwtdGFnXCI+Jmx0
Oy8iICsgdGFnTmFtZSArICImZ3Q7PC9zcGFuPiYjODIwMzsiOwogICAgICAgICAgICAgICAgIHZh
ciB0ZXh0Q2hpbGQgPSBvbmx5VGV4dENoaWxkLmNhbGwobm9kZSk7CiAgICAgICAgICAgICAgICAg
dmFyIHNob3dJbmxpbmVUZXh0ID0gdGV4dENoaWxkICYmIHRleHRDaGlsZC50ZXh0Q29udGVudC5s
ZW5ndGggPCBQcmVmZXJlbmNlcy5tYXhJbmxpbmVUZXh0Q2hpbGRMZW5ndGg7CkBAIC0xMTA2LDcg
KzExNzcsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICAgICAgICAgIGluZm8uaGFzQ2hpbGRyZW4gPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCisKICAg
ICAgICAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6CiAgICAgICAgICAgICAgICAgaWYgKGlzTm9k
ZVdoaXRlc3BhY2UuY2FsbChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgaW5mby50aXRsZSA9
ICIod2hpdGVzcGFjZSkiOwpAQCAtMTExNywyNiArMTE4OCwyNiBAQCBXZWJJbnNwZWN0b3IuRWxl
bWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBqYXZhc2NyaXB0U3ludGF4SGlnaGxpZ2h0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTVN5
bnRheEhpZ2hsaWdodGVyKCJ0ZXh0L2phdmFzY3JpcHQiKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGphdmFzY3JpcHRTeW50YXhIaWdobGlnaHRlci5zeW50YXhIaWdobGlnaHROb2RlKG5ld05v
ZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAg
IGluZm8udGl0bGUgPSAiPHNwYW4gY2xhc3M9XCJ3ZWJraXQtaHRtbC10ZXh0LW5vZGUgd2Via2l0
LWh0bWwtanMtbm9kZVwiPiIgKyBuZXdOb2RlLmlubmVySFRNTC5yZXBsYWNlKC9eW1xuXHJdKi8s
ICIiKS5yZXBsYWNlKC9ccyokLywgIiIpICsgIjwvc3Bhbj4iOwogICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG5vZGUucGFyZW50Tm9kZSAmJiBub2RlLnBhcmVudE5vZGUubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKSA9PSAic3R5bGUiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
bmV3Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld05vZGUudGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50OwotICAgICAg
ICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjc3NTeW50
YXhIaWdobGlnaHRlciA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NU3ludGF4SGlnaGxpZ2h0ZXIoInRl
eHQvY3NzIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBjc3NTeW50YXhIaWdobGlnaHRlci5z
eW50YXhIaWdobGlnaHROb2RlKG5ld05vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisK
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8udGl0bGUgPSAiPHNwYW4gY2xhc3M9XCJ3ZWJr
aXQtaHRtbC10ZXh0LW5vZGUgd2Via2l0LWh0bWwtY3NzLW5vZGVcIj4iICsgbmV3Tm9kZS5pbm5l
ckhUTUwucmVwbGFjZSgvXltcblxyXSovLCAiIikucmVwbGFjZSgvXHMqJC8sICIiKSArICI8L3Nw
YW4+IjsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGluZm8udGl0bGUgPSAiXCI8c3BhbiBjbGFzcz1cIndlYmtpdC1odG1sLXRleHQtbm9kZVwi
PiIgKyBub2RlLm5vZGVWYWx1ZS5lc2NhcGVIVE1MKCkgKyAiPC9zcGFuPlwiIjsgCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvLnRpdGxlID0gIlwiPHNwYW4gY2xhc3M9XCJ3ZWJraXQtaHRt
bC10ZXh0LW5vZGVcIj4iICsgbm9kZS5ub2RlVmFsdWUuZXNjYXBlSFRNTCgpICsgIjwvc3Bhbj5c
IiI7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKKwogICAg
ICAgICAgICAgY2FzZSBOb2RlLkNPTU1FTlRfTk9ERToKICAgICAgICAgICAgICAgICBpbmZvLnRp
dGxlID0gIjxzcGFuIGNsYXNzPVwid2Via2l0LWh0bWwtY29tbWVudFwiPiZsdDshLS0iICsgbm9k
ZS5ub2RlVmFsdWUuZXNjYXBlSFRNTCgpICsgIi0tJmd0Ozwvc3Bhbj4iOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYXNlIE5vZGUuRE9D
VU1FTlRfVFlQRV9OT0RFOgogICAgICAgICAgICAgICAgIGluZm8udGl0bGUgPSAiPHNwYW4gY2xh
c3M9XCJ3ZWJraXQtaHRtbC1kb2N0eXBlXCI+Jmx0OyFET0NUWVBFICIgKyBub2RlLm5vZGVOYW1l
OwogICAgICAgICAgICAgICAgIGlmIChub2RlLnB1YmxpY0lkKSB7CkBAIC0xMTUyLDcgKzEyMjMs
NyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGluZm8udGl0bGUgPSBub2RlLm5vZGVO
YW1lLnRvTG93ZXJDYXNlKCkuY29sbGFwc2VXaGl0ZXNwYWNlKCkuZXNjYXBlSFRNTCgpOwogICAg
ICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBpbmZvOwogICAgIH0sCiAKQEAgLTEx
NjUsNyArMTIzNiw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSwKLSAgICAKKwog
ICAgIHJlbW92ZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHBhcmVudEVsZW1lbnQg
PSB0aGlzLnBhcmVudDsKQEAgLTExODgsNiArMTI1OSwyOSBAQCBXZWJJbnNwZWN0b3IuRWxlbWVu
dHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVt
b3ZlTm9kZShjYWxsSWQsIHRoaXMucmVwcmVzZW50ZWRPYmplY3QuaWQpOwogICAgIH0sCiAKKyAg
ICBfYWRkQ2hpbGQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB0cmVlT3V0bGluZSA9
IHRoaXMudHJlZU91dGxpbmU7CisKKyAgICAgICAgZnVuY3Rpb24gYWRkQ2hpbGRDYWxsYmFjayhj
aGlsZElkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBTaG9ydCBkZWxheSBmb3IgdGhlIFVJ
IHRvIGNhdGNoIHVwCisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIGlmIChjaGlsZElkID09PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQubm9k
ZUZvcklkKGNoaWxkSWQpOworICAgICAgICAgICAgICAgIHZhciB0cmVlSXRlbSA9IHRyZWVPdXRs
aW5lLmZpbmRUcmVlRWxlbWVudChub2RlKTsKKyAgICAgICAgICAgICAgICB0cmVlT3V0bGluZS5y
ZXZlYWxBbmRTZWxlY3ROb2RlKG5vZGUpOworICAgICAgICAgICAgICAgIGlmICh0cmVlSXRlbSkK
KyAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW0uX3N0YXJ0RWRpdGluZ1RhZ05hbWUoKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGNhbGxJZCA9IFdlYkluc3Bl
Y3Rvci5DYWxsYmFjay53cmFwKGFkZENoaWxkQ2FsbGJhY2spOworICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLmFkZENoaWxkKGNhbGxJZCwgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5pZCk7CisgICAg
fSwKKwogICAgIF9lZGl0QXNIVE1MOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB2YXIgdHJl
ZU91dGxpbmUgPSB0aGlzLnRyZWVPdXRsaW5lOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL3RyZWVvdXRsaW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L3RyZWVvdXRsaW5lLmpzCmluZGV4IGI2ZTM1YmIuLmIxOTFjODUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUuanMKQEAgLTI4Nyw3ICsyODcsNyBAQCBUcmVlT3V0
bGluZS5wcm90b3R5cGUuZmluZFRyZWVFbGVtZW50ID0gZnVuY3Rpb24ocmVwcmVzZW50ZWRPYmpl
Y3QsIGlzQW5jZXN0b3IsCiAgICAgaWYgKGNhY2hlZEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBj
YWNoZWRFbGVtZW50OwogCi0gICAgLy8gVGhlIHJlcHJlc2VudGVkT2JqZWN0IGlzbid0IGtub3cs
IHNvIHdlIHN0YXJ0IGF0IHRoZSB0b3Agb2YgdGhlIHRyZWUgYW5kIHdvcmsgZG93biB0byBmaW5k
IHRoZSBmaXJzdAorICAgIC8vIFRoZSByZXByZXNlbnRlZE9iamVjdCBpc24ndCBrbm93biwgc28g
d2Ugc3RhcnQgYXQgdGhlIHRvcCBvZiB0aGUgdHJlZSBhbmQgd29yayBkb3duIHRvIGZpbmQgdGhl
IGZpcnN0CiAgICAgLy8gdHJlZSBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyByZXByZXNlbnRlZE9i
amVjdCBvciBvbmUgb2YgaXRzIGFuY2VzdG9ycy4KICAgICB2YXIgaXRlbTsKICAgICB2YXIgZm91
bmQgPSBmYWxzZTsK
</data>
<flag name="review"
          id="34635"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51810</attachid>
            <date>2010-03-26 21:12:30 -0700</date>
            <delta_ts>2010-03-27 20:36:46 -0700</delta_ts>
            <desc>[PATCH] Converge on `long` for Inspector* id&apos;s</desc>
            <filename>patch1</filename>
            <type>text/plain</type>
            <size>21412</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmI4N2RjYy4uYjVlMTQ2NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0wMy0yNiAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVkaXQgVGFnIE5hbWVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQ4MQorCisgICAgICAg
ICAgUGFydCAxOiBDb252ZXJnZSBvbiBgbG9uZ2AgZm9yIGNhbGxJZHMsIG5vZGVJZHMsIGFuZCBv
dGhlciBJZHMuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Lmg6CisKIDIwMTAtMDMtMjIgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgTmF0ZSBDaGFwaW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGU4ODNkNTMuLmIwZWE2ZjcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xMDk2LDcgKzEwOTYsNyBAQCB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnNlbGVjdERhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkK
ICAgICB9CiB9CiAKLURhdGFiYXNlKiBJbnNwZWN0b3JDb250cm9sbGVyOjpkYXRhYmFzZUZvcklk
KGludCBkYXRhYmFzZUlkKQorRGF0YWJhc2UqIEluc3BlY3RvckNvbnRyb2xsZXI6OmRhdGFiYXNl
Rm9ySWQobG9uZyBkYXRhYmFzZUlkKQogewogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVy
YXRvciBpdCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuZmluZChkYXRhYmFzZUlkKTsKICAgICBpZiAo
aXQgPT0gbV9kYXRhYmFzZVJlc291cmNlcy5lbmQoKSkKQEAgLTEyMjAsNyArMTIyMCw3IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2VsZWN0RE9NU3RvcmFnZShTdG9yYWdlKiBzdG9yYWdl
KQogICAgIEZyYW1lKiBmcmFtZSA9IHN0b3JhZ2UtPmZyYW1lKCk7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgYm9vbCBpc0xvY2FsU3RvcmFnZSA9IChmcmFtZS0+ZG9tV2luZG93KCkt
PmxvY2FsU3RvcmFnZShlYykgPT0gc3RvcmFnZSAmJiAhZWMpOwotICAgIGludCBzdG9yYWdlUmVz
b3VyY2VJZCA9IDA7CisgICAgbG9uZyBzdG9yYWdlUmVzb3VyY2VJZCA9IDA7CiAgICAgRE9NU3Rv
cmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fZG9tU3RvcmFnZVJl
c291cmNlcy5lbmQoKTsKICAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7
ICsraXQpIHsKICAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZUhvc3RBbmRUeXBlKGZyYW1l
LCBpc0xvY2FsU3RvcmFnZSkpIHsKQEAgLTEyMzIsNyArMTIzMiw3IEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c2VsZWN0RE9NU3RvcmFnZShTdG9yYWdlKiBzdG9yYWdlKQogICAgICAgICBt
X2Zyb250ZW5kLT5zZWxlY3RET01TdG9yYWdlKHN0b3JhZ2VSZXNvdXJjZUlkKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRET01TdG9yYWdlRW50cmllcyhpbnQgY2FsbElkLCBp
bnQgc3RvcmFnZUlkKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRET01TdG9yYWdlRW50
cmllcyhsb25nIGNhbGxJZCwgbG9uZyBzdG9yYWdlSWQpCiB7CiAgICAgaWYgKCFtX2Zyb250ZW5k
KQogICAgICAgICByZXR1cm47CkBAIC0xMjgzLDcgKzEyODMsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKGxvbmcgY2FsbElkLCBsb25nIHN0b3JhZ2VJ
ZCwgY29ucwogICAgIG1fZnJvbnRlbmQtPmRpZFJlbW92ZURPTVN0b3JhZ2VJdGVtKGNhbGxJZCwg
c3VjY2Vzcyk7CiB9CiAKLUluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogSW5zcGVjdG9yQ29u
dHJvbGxlcjo6Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQoaW50IHN0b3JhZ2VJZCkKK0luc3Bl
Y3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0RE9NU3RvcmFn
ZVJlc291cmNlRm9ySWQobG9uZyBzdG9yYWdlSWQpCiB7CiAgICAgRE9NU3RvcmFnZVJlc291cmNl
c01hcDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZmluZChzdG9yYWdlSWQp
OwogICAgIGlmIChpdCA9PSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCkpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZjQ3NDU0OS4uMGEzNDA4NSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMTk0LDcgKzE5NCw3IEBAIHB1
YmxpYzoKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgdm9pZCBkaWRVc2VET01TdG9yYWdl
KFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZy
YW1lKTsKICAgICB2b2lkIHNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSk7Ci0gICAg
dm9pZCBnZXRET01TdG9yYWdlRW50cmllcyhpbnQgY2FsbElkLCBpbnQgc3RvcmFnZUlkKTsKKyAg
ICB2b2lkIGdldERPTVN0b3JhZ2VFbnRyaWVzKGxvbmcgY2FsbElkLCBsb25nIHN0b3JhZ2VJZCk7
CiAgICAgdm9pZCBzZXRET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgbG9uZyBzdG9yYWdlSWQs
IGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICB2b2lkIHJlbW92
ZURPTVN0b3JhZ2VJdGVtKGxvbmcgY2FsbElkLCBsb25nIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5n
JiBrZXkpOwogI2VuZGlmCkBAIC0yODQsMTAgKzI4NCwxMCBAQCBwcml2YXRlOgogI2VuZGlmCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogICAgIHZvaWQgc2VsZWN0RGF0YWJhc2UoRGF0YWJhc2UqIGRh
dGFiYXNlKTsKLSAgICBEYXRhYmFzZSogZGF0YWJhc2VGb3JJZChpbnQgZGF0YWJhc2VJZCk7Cisg
ICAgRGF0YWJhc2UqIGRhdGFiYXNlRm9ySWQobG9uZyBkYXRhYmFzZUlkKTsKICNlbmRpZgogI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKLSAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIGdl
dERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKGludCBzdG9yYWdlSWQpOworICAgIEluc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZSogZ2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQobG9uZyBzdG9yYWdl
SWQpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgIFNjcmlwdE9iamVjdCBidWlsZE9iamVjdEZvckNvb2tpZShjb25z
dCBDb29raWUmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA4
NWMxZDZlLi5iMzkyZjA2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5iaW5kKE5vZGUq
IG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKICAgICAgICAgc3RvcExpc3RlbmluZyhmcmFt
ZU93bmVyLT5jb250ZW50RG9jdW1lbnQoKSk7CiAgICAgfQogCi0gICAgaW50IGlkID0gbm9kZXNN
YXAtPmdldChub2RlKTsKKyAgICBsb25nIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBp
ZiAoIWlkKQogICAgICAgICByZXR1cm47CiAgICAgbV9pZFRvTm9kZS5yZW1vdmUoaWQpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCmluZGV4IDYyNzY1NGYuLjEwZjEyOWYg
MTAwNzU1Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKQEAgLTE1Nyw3ICsxNTcs
NyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpyZW1vdmVSZXNvdXJjZSh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckZy
b250ZW5kOjpkaWRHZXRSZXNvdXJjZUNvbnRlbnQoaW50IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBj
b250ZW50KQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0UmVzb3VyY2VDb250ZW50KGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25D
YWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsKICAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudCgiZGlkR2V0UmVzb3VyY2VDb250ZW50Iik7CkBAIC0zODAsNyArMzgwLDcg
QEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2V0UmVjb3JkaW5nUHJvZmlsZShib29sIGlzUHJv
ZmlsaW5nKQogICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6ZGlkR2V0UHJvZmlsZUhlYWRlcnMoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGhl
YWRlcnMpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRQcm9maWxlSGVhZGVycyhsb25n
IGNhbGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGhlYWRlcnMpCiB7CiAgICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQoImRpZEdldFByb2ZpbGVIZWFkZXJzIik7CkBAIC0zODksNyArMzg5
LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0UHJvZmlsZUhlYWRlcnMoaW50IGNh
bGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGhlYWQKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldFByb2ZpbGUoaW50IGNhbGxJZCwgY29uc3Qg
U2NyaXB0VmFsdWUmIHByb2ZpbGUpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRQcm9m
aWxlKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRWYWx1ZSYgcHJvZmlsZSkKIHsKICAgICBTY3Jp
cHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkR2V0UHJvZmlsZSIpOwpAQCAtNDE1LDcgKzQx
NSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNldERldGFjaGVkUm9vdChjb25zdCBTY3Jp
cHRPYmplY3QmIHJvb3QpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpzZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJZCwgY29uc3QgU2NyaXB0QXJyYXkm
IG5vZGVzKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2V0Q2hpbGROb2Rlcyhsb25nIHBhcmVu
dElkLCBjb25zdCBTY3JpcHRBcnJheSYgbm9kZXMpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxs
IGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoInNldENoaWxkTm9kZXMiKTsKQEAgLTQyNCw3ICs0MjQsNyBAQCB2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpzZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJZCwgY29uc3QgU2NyaXB0
QXJyYXkmIG5vZGVzKQogICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6Y2hpbGROb2RlQ291bnRVcGRhdGVkKGludCBpZCwgaW50IG5ld1ZhbHVlKQordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6Y2hpbGROb2RlQ291bnRVcGRhdGVkKGxvbmcgaWQsIGludCBu
ZXdWYWx1ZSkKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0
b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY2hpbGROb2Rl
Q291bnRVcGRhdGVkIik7CkBAIC00MzMsNyArNDMzLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6Y2hpbGROb2RlQ291bnRVcGRhdGVkKGludCBpZCwgaW50IG5ld1ZhbHVlKQogICAgIGZ1bmN0
aW9uLmNhbGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6Y2hpbGROb2RlSW5zZXJ0
ZWQoaW50IHBhcmVudElkLCBpbnQgcHJldklkLCBjb25zdCBTY3JpcHRPYmplY3QmIG5vZGUpCit2
b2lkIEluc3BlY3RvckZyb250ZW5kOjpjaGlsZE5vZGVJbnNlcnRlZChsb25nIHBhcmVudElkLCBs
b25nIHByZXZJZCwgY29uc3QgU2NyaXB0T2JqZWN0JiBub2RlKQogewogICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KCJjaGlsZE5vZGVJbnNlcnRlZCIpOwpAQCAtNDQzLDcgKzQ0Myw3
IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmNoaWxkTm9kZUluc2VydGVkKGludCBwYXJlbnRJ
ZCwgaW50IHByZXZJZCwgY29uc3QgU2NyaXB0CiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12
b2lkIEluc3BlY3RvckZyb250ZW5kOjpjaGlsZE5vZGVSZW1vdmVkKGludCBwYXJlbnRJZCwgaW50
IGlkKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6Y2hpbGROb2RlUmVtb3ZlZChsb25nIHBhcmVu
dElkLCBsb25nIGlkKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYklu
c3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJjaGls
ZE5vZGVSZW1vdmVkIik7CkBAIC00NTIsNyArNDUyLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6Y2hpbGROb2RlUmVtb3ZlZChpbnQgcGFyZW50SWQsIGludCBpZCkKICAgICBmdW5jdGlvbi5j
YWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmF0dHJpYnV0ZXNVcGRhdGVkKGlu
dCBpZCwgY29uc3QgU2NyaXB0QXJyYXkmIGF0dHJpYnV0ZXMpCit2b2lkIEluc3BlY3RvckZyb250
ZW5kOjphdHRyaWJ1dGVzVXBkYXRlZChsb25nIGlkLCBjb25zdCBTY3JpcHRBcnJheSYgYXR0cmli
dXRlcykKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3Is
ICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiYXR0cmlidXRlc1Vw
ZGF0ZWQiKTsKQEAgLTQ2MSw3ICs0NjEsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjphdHRy
aWJ1dGVzVXBkYXRlZChpbnQgaWQsIGNvbnN0IFNjcmlwdEFycmF5JiBhdHRyaWJ1dGVzKQogICAg
IGZ1bmN0aW9uLmNhbGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkUmVtb3Zl
Tm9kZShpbnQgY2FsbElkLCBpbnQgbm9kZUlkKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlk
UmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCiB7CiAgICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQoImRpZFJlbW92ZU5vZGUiKTsKQEAgLTQ3MCw3ICs0NzAsNyBAQCB2
b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRSZW1vdmVOb2RlKGludCBjYWxsSWQsIGludCBub2Rl
SWQpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjpk
aWRHZXRDaGlsZE5vZGVzKGludCBjYWxsSWQpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRH
ZXRDaGlsZE5vZGVzKGxvbmcgY2FsbElkKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KCJkaWRHZXRDaGlsZE5vZGVzIik7CkBAIC00NzgsNyArNDc4LDcgQEAgdm9pZCBJbnNw
ZWN0b3JGcm9udGVuZDo6ZGlkR2V0Q2hpbGROb2RlcyhpbnQgY2FsbElkKQogICAgIGZ1bmN0aW9u
LmNhbGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQXBwbHlEb21DaGFuZ2Uo
aW50IGNhbGxJZCwgYm9vbCBzdWNjZXNzKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQXBw
bHlEb21DaGFuZ2UobG9uZyBjYWxsSWQsIGJvb2wgc3VjY2VzcykKIHsKICAgICBTY3JpcHRGdW5j
dGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkQXBwbHlEb21DaGFuZ2UiKTsKQEAgLTQ4Nyw3ICs0ODcs
NyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRBcHBseURvbUNoYW5nZShpbnQgY2FsbElk
LCBib29sIHN1Y2Nlc3MpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpkaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoaW50IGNhbGxJZCwgaW50IG5v
ZGVJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGxpc3RlbmVyc0FycmF5KQordm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6ZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGxpc3RlbmVyc0FycmF5KQogewogICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUiKTsKQEAg
LTUzMyw3ICs1MzMsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRJbmxpbmVTdHls
ZShsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlKQogICAgIGZ1bmN0aW9uLmNh
bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQXBwbHlTdHlsZVRleHQoaW50
IGNhbGxJZCwgYm9vbCBzdWNjZXNzLCBjb25zdCBTY3JpcHRWYWx1ZSYgc3R5bGUsIGNvbnN0IFNj
cmlwdEFycmF5JiBjaGFuZ2VkUHJvcGVydGllcykKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRp
ZEFwcGx5U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBib29sIHN1Y2Nlc3MsIGNvbnN0IFNjcmlwdFZh
bHVlJiBzdHlsZSwgY29uc3QgU2NyaXB0QXJyYXkmIGNoYW5nZWRQcm9wZXJ0aWVzKQogewogICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7
IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRBcHBseVN0eWxlVGV4dCIpOwpAQCAt
NTQ0LDcgKzU0NCw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEFwcGx5U3R5bGVUZXh0
KGludCBjYWxsSWQsIGJvb2wgc3VjY2VzcywgY29uc3QgU2NyaXB0CiAgICAgZnVuY3Rpb24uY2Fs
bCgpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRTZXRTdHlsZVRleHQoaW50IGNh
bGxJZCwgYm9vbCBzdWNjZXNzKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkU2V0U3R5bGVU
ZXh0KGxvbmcgY2FsbElkLCBib29sIHN1Y2Nlc3MpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxs
IGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoImRpZFNldFN0eWxlVGV4dCIpOwpAQCAtNTUzLDcgKzU1Myw3IEBAIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFNldFN0eWxlVGV4dChpbnQgY2FsbElkLCBib29sIHN1Y2Nl
c3MpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjpk
aWRTZXRTdHlsZVByb3BlcnR5KGludCBjYWxsSWQsIGJvb2wgc3VjY2VzcykKK3ZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OmRpZFNldFN0eWxlUHJvcGVydHkobG9uZyBjYWxsSWQsIGJvb2wgc3VjY2Vz
cykKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJk
aXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkU2V0U3R5bGVQcm9w
ZXJ0eSIpOwpAQCAtNTYyLDcgKzU2Miw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFNl
dFN0eWxlUHJvcGVydHkoaW50IGNhbGxJZCwgYm9vbCBzdWNjZXNzKQogICAgIGZ1bmN0aW9uLmNh
bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkVG9nZ2xlU3R5bGVFbmFibGVk
KGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBzdHlsZSkKK3ZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OmRpZFRvZ2dsZVN0eWxlRW5hYmxlZChsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFs
dWUmIHN0eWxlKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3Bl
Y3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRUb2dn
bGVTdHlsZUVuYWJsZWQiKTsKQEAgLTU3MSw3ICs1NzEsNyBAQCB2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpkaWRUb2dnbGVTdHlsZUVuYWJsZWQoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUm
IHN0eQogICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
ZGlkU2V0UnVsZVNlbGVjdG9yKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBydWxlLCBi
b29sIHNlbGVjdG9yQWZmZWN0c05vZGUpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRTZXRS
dWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBydWxlLCBib29sIHNl
bGVjdG9yQWZmZWN0c05vZGUpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1f
d2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQo
ImRpZFNldFJ1bGVTZWxlY3RvciIpOwpAQCAtNTgxLDcgKzU4MSw3IEBAIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OmRpZFNldFJ1bGVTZWxlY3RvcihpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRWYWx1
ZSYgcnVsZSwKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OmRpZEFkZFJ1bGUoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHJ1bGUsIGJvb2wg
c2VsZWN0b3JBZmZlY3RzTm9kZSkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEFkZFJ1bGUo
bG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBydWxlLCBib29sIHNlbGVjdG9yQWZmZWN0
c05vZGUpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9y
LCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZEFkZFJ1bGUi
KTsKQEAgLTYxMSw3ICs2MTEsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjp3aWxsRGVzdHJv
eVdvcmtlcihjb25zdCBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZSYgd29ya2VyKQogfQogI2VuZGlm
IC8vIEVOQUJMRShXT1JLRVJTKQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRDb29r
aWVzKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBjb29raWVzLCBjb25zdCBTdHJpbmcm
IGNvb2tpZXNTdHJpbmcpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRDb29raWVzKGxv
bmcgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgY29va2llcywgY29uc3QgU3RyaW5nJiBjb29r
aWVzU3RyaW5nKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3Bl
Y3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXRD
b29raWVzIik7CkBAIC02MjEsNyArNjIxLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlk
R2V0Q29va2llcyhpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgY29va2llcywgY28KICAg
ICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZERpc3Bh
dGNoT25JbmplY3RlZFNjcmlwdChpbnQgY2FsbElkLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJl
c3VsdCwgYm9vbCBpc0V4Y2VwdGlvbikKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZERpc3Bh
dGNoT25JbmplY3RlZFNjcmlwdChsb25nIGNhbGxJZCwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBy
ZXN1bHQsIGJvb2wgaXNFeGNlcHRpb24pCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0
aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQoImRpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdCIpOwpAQCAtNjU0LDcgKzY1NCw4IEBA
IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNlbGVjdERhdGFiYXNlKGludCBkYXRhYmFzZUlkKQog
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGRhdGFiYXNlSWQpOwogICAgIGZ1bmN0aW9uLmNh
bGwoKTsKIH0KLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldERhdGFiYXNlVGFibGVOYW1l
cyhpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgdGFibGVOYW1lcykKKwordm9pZCBJbnNw
ZWN0b3JGcm9udGVuZDo6ZGlkR2V0RGF0YWJhc2VUYWJsZU5hbWVzKGxvbmcgY2FsbElkLCBjb25z
dCBTY3JpcHRBcnJheSYgdGFibGVOYW1lcykKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVu
Y3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudCgiZGlkR2V0RGF0YWJhc2VUYWJsZU5hbWVzIik7CkBAIC02NzUsNyArNjc2LDcgQEAg
Ym9vbCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkRE9NU3RvcmFnZShjb25zdCBTY3JpcHRPYmplY3Qm
IGRvbVN0b3JhZ2VPYmopCiAgICAgcmV0dXJuICFoYWRFeGNlcHRpb247CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OnNlbGVjdERPTVN0b3JhZ2UoaW50IHN0b3JhZ2VJZCkKK3ZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OnNlbGVjdERPTVN0b3JhZ2UobG9uZyBzdG9yYWdlSWQpCiB7CiAgICAg
U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsg
CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInNlbGVjdERPTVN0b3JhZ2UiKTsKQEAgLTY4
Myw3ICs2ODQsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZWxlY3RET01TdG9yYWdlKGlu
dCBzdG9yYWdlSWQpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckZy
b250ZW5kOjpkaWRHZXRET01TdG9yYWdlRW50cmllcyhpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRB
cnJheSYgZW50cmllcykKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldERPTVN0b3JhZ2VF
bnRyaWVzKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgZW50cmllcykKIHsKICAgICBT
Y3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkR2V0RE9NU3RvcmFnZUVudHJpZXMiKTsK
QEAgLTY5Miw3ICs2OTMsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRET01TdG9y
YWdlRW50cmllcyhpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgZQogICAgIGZ1bmN0aW9u
LmNhbGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkU2V0RE9NU3RvcmFnZUl0
ZW0oaW50IGNhbGxJZCwgYm9vbCBzdWNjZXNzKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlk
U2V0RE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIGJvb2wgc3VjY2VzcykKIHsKICAgICBTY3Jp
cHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkU2V0RE9NU3RvcmFnZUl0ZW0iKTsKQEAgLTcw
MSw3ICs3MDIsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRTZXRET01TdG9yYWdlSXRl
bShpbnQgY2FsbElkLCBib29sIHN1Y2Nlc3MpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12
b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRSZW1vdmVET01TdG9yYWdlSXRlbShpbnQgY2FsbElk
LCBib29sIHN1Y2Nlc3MpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRSZW1vdmVET01TdG9y
YWdlSXRlbShsb25nIGNhbGxJZCwgYm9vbCBzdWNjZXNzKQogewogICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KCJkaWRSZW1vdmVET01TdG9yYWdlSXRlbSIpOwpAQCAtNzEwLDcgKzcx
MSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFJlbW92ZURPTVN0b3JhZ2VJdGVtKGlu
dCBjYWxsSWQsIGJvb2wgc3VjY2VzcykKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZURPTVN0b3JhZ2UoaW50IHN0b3JhZ2VJZCkKK3ZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZURPTVN0b3JhZ2UobG9uZyBzdG9yYWdlSWQpCiB7CiAg
ICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2gi
KTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInVwZGF0ZURPTVN0b3JhZ2UiKTsKQEAg
LTc0MCw3ICs3NDEsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpjb250ZXh0TWVudUNsZWFy
ZWQoKQogICAgIGNhbGxTaW1wbGVGdW5jdGlvbigiY29udGV4dE1lbnVDbGVhcmVkIik7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoaW50IGNh
bGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpldmFs
dWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCkK
IHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNw
YXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZXZhbHVhdGVGb3JUZXN0SW5G
cm9udGVuZCIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKaW5kZXggOWQ4NWI3
MS4uYjYxZWI1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCkBAIC02OCw3
ICs2OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIHVwZGF0ZVJlc291
cmNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU2NyaXB0T2JqZWN0JiByZXNvdXJj
ZU9iaik7CiAgICAgICAgIHZvaWQgcmVtb3ZlUmVzb3VyY2UodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKTsKLSAgICAgICAgdm9pZCBkaWRHZXRSZXNvdXJjZUNvbnRlbnQoaW50IGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBjb250ZW50KTsKKyAgICAgICAgdm9pZCBkaWRHZXRSZXNvdXJjZUNvbnRlbnQo
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgY29udGVudCk7CiAKICAgICAgICAgdm9pZCB1cGRh
dGVGb2N1c2VkTm9kZShsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5k
b3coYm9vbCBhdHRhY2hlZCk7CkBAIC0xMDIsNDcgKzEwMiw0NyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgcHJvZmlsZXJXYXNEaXNhYmxlZCgpOwogICAgICAgICB2b2lkIGFk
ZFByb2ZpbGVIZWFkZXIoY29uc3QgU2NyaXB0VmFsdWUmIHByb2ZpbGUpOwogICAgICAgICB2b2lk
IHNldFJlY29yZGluZ1Byb2ZpbGUoYm9vbCBpc1Byb2ZpbGluZyk7Ci0gICAgICAgIHZvaWQgZGlk
R2V0UHJvZmlsZUhlYWRlcnMoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGhlYWRlcnMp
OwotICAgICAgICB2b2lkIGRpZEdldFByb2ZpbGUoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0VmFs
dWUmIHByb2ZpbGUpOworICAgICAgICB2b2lkIGRpZEdldFByb2ZpbGVIZWFkZXJzKGxvbmcgY2Fs
bElkLCBjb25zdCBTY3JpcHRBcnJheSYgaGVhZGVycyk7CisgICAgICAgIHZvaWQgZGlkR2V0UHJv
ZmlsZShsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHByb2ZpbGUpOwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIGJvb2wgYWRkRGF0YWJhc2UoY29uc3QgU2Ny
aXB0T2JqZWN0JiBkYk9iaik7CiAgICAgICAgIHZvaWQgc2VsZWN0RGF0YWJhc2UoaW50IGRhdGFi
YXNlSWQpOwotICAgICAgICB2b2lkIGRpZEdldERhdGFiYXNlVGFibGVOYW1lcyhpbnQgY2FsbElk
LCBjb25zdCBTY3JpcHRBcnJheSYgdGFibGVOYW1lcyk7CisgICAgICAgIHZvaWQgZGlkR2V0RGF0
YWJhc2VUYWJsZU5hbWVzKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgdGFibGVOYW1l
cyk7CiAjZW5kaWYKICAgICAgICAgCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgICAgICBi
b29sIGFkZERPTVN0b3JhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBkb21TdG9yYWdlT2JqKTsKLSAg
ICAgICAgdm9pZCBzZWxlY3RET01TdG9yYWdlKGludCBzdG9yYWdlSWQpOwotICAgICAgICB2b2lk
IGRpZEdldERPTVN0b3JhZ2VFbnRyaWVzKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBl
bnRyaWVzKTsKLSAgICAgICAgdm9pZCBkaWRTZXRET01TdG9yYWdlSXRlbShpbnQgY2FsbElkLCBi
b29sIHN1Y2Nlc3MpOwotICAgICAgICB2b2lkIGRpZFJlbW92ZURPTVN0b3JhZ2VJdGVtKGludCBj
YWxsSWQsIGJvb2wgc3VjY2Vzcyk7Ci0gICAgICAgIHZvaWQgdXBkYXRlRE9NU3RvcmFnZShpbnQg
c3RvcmFnZUlkKTsKKyAgICAgICAgdm9pZCBzZWxlY3RET01TdG9yYWdlKGxvbmcgc3RvcmFnZUlk
KTsKKyAgICAgICAgdm9pZCBkaWRHZXRET01TdG9yYWdlRW50cmllcyhsb25nIGNhbGxJZCwgY29u
c3QgU2NyaXB0QXJyYXkmIGVudHJpZXMpOworICAgICAgICB2b2lkIGRpZFNldERPTVN0b3JhZ2VJ
dGVtKGxvbmcgY2FsbElkLCBib29sIHN1Y2Nlc3MpOworICAgICAgICB2b2lkIGRpZFJlbW92ZURP
TVN0b3JhZ2VJdGVtKGxvbmcgY2FsbElkLCBib29sIHN1Y2Nlc3MpOworICAgICAgICB2b2lkIHVw
ZGF0ZURPTVN0b3JhZ2UobG9uZyBzdG9yYWdlSWQpOwogI2VuZGlmCiAKICAgICAgICAgdm9pZCBz
ZXREb2N1bWVudChjb25zdCBTY3JpcHRPYmplY3QmIHJvb3QpOwogICAgICAgICB2b2lkIHNldERl
dGFjaGVkUm9vdChjb25zdCBTY3JpcHRPYmplY3QmIHJvb3QpOwotICAgICAgICB2b2lkIHNldENo
aWxkTm9kZXMoaW50IHBhcmVudElkLCBjb25zdCBTY3JpcHRBcnJheSYgbm9kZXMpOwotICAgICAg
ICB2b2lkIGNoaWxkTm9kZUNvdW50VXBkYXRlZChpbnQgaWQsIGludCBuZXdWYWx1ZSk7Ci0gICAg
ICAgIHZvaWQgY2hpbGROb2RlSW5zZXJ0ZWQoaW50IHBhcmVudElkLCBpbnQgcHJldklkLCBjb25z
dCBTY3JpcHRPYmplY3QmIG5vZGUpOwotICAgICAgICB2b2lkIGNoaWxkTm9kZVJlbW92ZWQoaW50
IHBhcmVudElkLCBpbnQgaWQpOwotICAgICAgICB2b2lkIGF0dHJpYnV0ZXNVcGRhdGVkKGludCBp
ZCwgY29uc3QgU2NyaXB0QXJyYXkmIGF0dHJpYnV0ZXMpOwotICAgICAgICB2b2lkIGRpZEdldENo
aWxkTm9kZXMoaW50IGNhbGxJZCk7Ci0gICAgICAgIHZvaWQgZGlkQXBwbHlEb21DaGFuZ2UoaW50
IGNhbGxJZCwgYm9vbCBzdWNjZXNzKTsKLSAgICAgICAgdm9pZCBkaWRHZXRFdmVudExpc3RlbmVy
c0Zvck5vZGUoaW50IGNhbGxJZCwgaW50IG5vZGVJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGxpc3Rl
bmVyc0FycmF5KTsKLSAgICAgICAgdm9pZCBkaWRSZW1vdmVOb2RlKGludCBjYWxsSWQsIGludCBu
b2RlSWQpOworICAgICAgICB2b2lkIHNldENoaWxkTm9kZXMobG9uZyBwYXJlbnRJZCwgY29uc3Qg
U2NyaXB0QXJyYXkmIG5vZGVzKTsKKyAgICAgICAgdm9pZCBjaGlsZE5vZGVDb3VudFVwZGF0ZWQo
bG9uZyBpZCwgaW50IG5ld1ZhbHVlKTsKKyAgICAgICAgdm9pZCBjaGlsZE5vZGVJbnNlcnRlZChs
b25nIHBhcmVudElkLCBsb25nIHByZXZJZCwgY29uc3QgU2NyaXB0T2JqZWN0JiBub2RlKTsKKyAg
ICAgICAgdm9pZCBjaGlsZE5vZGVSZW1vdmVkKGxvbmcgcGFyZW50SWQsIGxvbmcgaWQpOworICAg
ICAgICB2b2lkIGF0dHJpYnV0ZXNVcGRhdGVkKGxvbmcgaWQsIGNvbnN0IFNjcmlwdEFycmF5JiBh
dHRyaWJ1dGVzKTsKKyAgICAgICAgdm9pZCBkaWRHZXRDaGlsZE5vZGVzKGxvbmcgY2FsbElkKTsK
KyAgICAgICAgdm9pZCBkaWRBcHBseURvbUNoYW5nZShsb25nIGNhbGxJZCwgYm9vbCBzdWNjZXNz
KTsKKyAgICAgICAgdm9pZCBkaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUobG9uZyBjYWxsSWQs
IGxvbmcgbm9kZUlkLCBjb25zdCBTY3JpcHRBcnJheSYgbGlzdGVuZXJzQXJyYXkpOworICAgICAg
ICB2b2lkIGRpZFJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKIAogICAgICAg
ICB2b2lkIGRpZEdldFN0eWxlcyhsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxl
cyk7CiAgICAgICAgIHZvaWQgZGlkR2V0QWxsU3R5bGVzKGxvbmcgY2FsbElkLCBjb25zdCBTY3Jp
cHRBcnJheSYgc3R5bGVzKTsKICAgICAgICAgdm9pZCBkaWRHZXRJbmxpbmVTdHlsZShsb25nIGNh
bGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlKTsKICAgICAgICAgdm9pZCBkaWRHZXRDb21w
dXRlZFN0eWxlKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRWYWx1ZSYgc3R5bGUpOwotICAgICAg
ICB2b2lkIGRpZEFwcGx5U3R5bGVUZXh0KGludCBjYWxsSWQsIGJvb2wgc3VjY2VzcywgY29uc3Qg
U2NyaXB0VmFsdWUmIHN0eWxlLCBjb25zdCBTY3JpcHRBcnJheSYgY2hhbmdlZFByb3BlcnRpZXMp
OwotICAgICAgICB2b2lkIGRpZFNldFN0eWxlVGV4dChpbnQgY2FsbElkLCBib29sIHN1Y2Nlc3Mp
OwotICAgICAgICB2b2lkIGRpZFNldFN0eWxlUHJvcGVydHkoaW50IGNhbGxJZCwgYm9vbCBzdWNj
ZXNzKTsKLSAgICAgICAgdm9pZCBkaWRUb2dnbGVTdHlsZUVuYWJsZWQoaW50IGNhbGxJZCwgY29u
c3QgU2NyaXB0VmFsdWUmIHN0eWxlKTsKLSAgICAgICAgdm9pZCBkaWRTZXRSdWxlU2VsZWN0b3Io
aW50IGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHJ1bGUsIGJvb2wgc2VsZWN0b3JBZmZlY3Rz
Tm9kZSk7Ci0gICAgICAgIHZvaWQgZGlkQWRkUnVsZShpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRW
YWx1ZSYgcnVsZSwgYm9vbCBzZWxlY3RvckFmZmVjdHNOb2RlKTsKKyAgICAgICAgdm9pZCBkaWRB
cHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgYm9vbCBzdWNjZXNzLCBjb25zdCBTY3JpcHRWYWx1
ZSYgc3R5bGUsIGNvbnN0IFNjcmlwdEFycmF5JiBjaGFuZ2VkUHJvcGVydGllcyk7CisgICAgICAg
IHZvaWQgZGlkU2V0U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBib29sIHN1Y2Nlc3MpOworICAgICAg
ICB2b2lkIGRpZFNldFN0eWxlUHJvcGVydHkobG9uZyBjYWxsSWQsIGJvb2wgc3VjY2Vzcyk7Cisg
ICAgICAgIHZvaWQgZGlkVG9nZ2xlU3R5bGVFbmFibGVkKGxvbmcgY2FsbElkLCBjb25zdCBTY3Jp
cHRWYWx1ZSYgc3R5bGUpOworICAgICAgICB2b2lkIGRpZFNldFJ1bGVTZWxlY3Rvcihsb25nIGNh
bGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHJ1bGUsIGJvb2wgc2VsZWN0b3JBZmZlY3RzTm9kZSk7
CisgICAgICAgIHZvaWQgZGlkQWRkUnVsZShsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUm
IHJ1bGUsIGJvb2wgc2VsZWN0b3JBZmZlY3RzTm9kZSk7CiAKICAgICAgICAgdm9pZCB0aW1lbGlu
ZVByb2ZpbGVyV2FzU3RhcnRlZCgpOwogICAgICAgICB2b2lkIHRpbWVsaW5lUHJvZmlsZXJXYXNT
dG9wcGVkKCk7CkBAIC0xNTMsOCArMTUzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2b2lkIHdpbGxEZXN0cm95V29ya2VyKGNvbnN0IEluc3BlY3RvcldvcmtlclJlc291cmNlJik7
CiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUikKIAotICAgICAgICB2b2lkIGRpZEdldENvb2tpZXMo
aW50IGNhbGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGNvb2tpZXMsIGNvbnN0IFN0cmluZyYgY29v
a2llc1N0cmluZyk7Ci0gICAgICAgIHZvaWQgZGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGlu
dCBjYWxsSWQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzdWx0LCBib29sIGlzRXhjZXB0aW9u
KTsKKyAgICAgICAgdm9pZCBkaWRHZXRDb29raWVzKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRB
cnJheSYgY29va2llcywgY29uc3QgU3RyaW5nJiBjb29raWVzU3RyaW5nKTsKKyAgICAgICAgdm9p
ZCBkaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQobG9uZyBjYWxsSWQsIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSogcmVzdWx0LCBib29sIGlzRXhjZXB0aW9uKTsKIAogICAgICAgICB2b2lkIGFkZE5v
ZGVzVG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKTsKIApAQCAtMTYzLDcgKzE2
Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3dlYkluc3BlY3Rvci5zY3JpcHRTdGF0ZSgpOyB9CiAK
LSAgICAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGludCBjYWxsSWQsIGNvbnN0
IFN0cmluZyYgc2NyaXB0KTsKKyAgICAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5k
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCk7CiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCBjYWxsU2ltcGxlRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUpOwog
ICAgICAgICBTY3JpcHRPYmplY3QgbV93ZWJJbnNwZWN0b3I7Cg==
</data>
<flag name="review"
          id="35161"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51811</attachid>
            <date>2010-03-26 21:21:00 -0700</date>
            <delta_ts>2010-03-27 20:36:46 -0700</delta_ts>
            <desc>[PATCH] &quot;Edit Tag&quot; and &quot;Add Child Element&quot;</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>26540</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjVlMTQ2NS4uNmU5YjdiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTUsNiArNSw1MiBAQAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBF
ZGl0IFRhZyBOYW1lcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzY0ODEKIAorICAgICAgICBBbGxvdyBlZGl0aW5nIGFuIEVsZW1lbnQncyBUYWcgTmFt
ZSB0aHJvdWdoIHRoZSBFbGVtZW50J3MgVHJlZQorICAgICAgICBIaWVyYXJjaHkuIEFkZGVkICJF
ZGl0IFRhZyIgYW5kICJBZGQgQ2hpbGQgRWxlbWVudCIgdG8gdGhlCisgICAgICAgIFRyZWUncyBD
b250ZXh0IE1lbnUuIERvdWJsZSBjbGljayBvbiB0aGUgdGFnIGFsc28gd29ya3MuCisKKyAgICAg
ICAgICBUaGUgdXN1YWwgYXN5bmNocm9ub3VzIEluc3BlY3RvckJhY2tlbmQsIEluc3BlY3RvckZy
b250ZW5kLCBET01BZ2VudCBmbG93LgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6YWRkQ2hpbGRF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmNoYW5nZVRhZ05h
bWUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmg6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6
ZGlkQWRkQ2hpbGRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
OjpkaWRDaGFuZ2VUYWdOYW1lKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzOgorCisgICAg
ICAgICAgSGFuZGxlIGVkaXRpbmcgYW4gZWxlbWVudCdzIHRhZyBuYW1lLiBVSSBhbmQgQ29udGV4
dCBNZW51LgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRs
aW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90
eXBlLm9ubW91c2Vkb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVt
ZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nRnJvbUV2ZW50KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fcG9wdWxhdGVUYWdDb250ZXh0TWVu
dSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUu
X3N0YXJ0RWRpdGluZ1RhZ05hbWUua2V5dXBMaXN0ZW5lcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3N0YXJ0RWRpdGluZ1RhZ05hbWUuZWRp
dGluZ0NvbWl0dGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50
LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nVGFnTmFtZS5lZGl0aW5nQ2FuY2VsbGVkKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0
aW5nVGFnTmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5w
cm90b3R5cGUuX2F0dHJpYnV0ZUVkaXRpbmdDb21taXR0ZWQubW92ZVRvTmV4dEF0dHJpYnV0ZUlm
TmVlZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3Rv
dHlwZS5fYXR0cmlidXRlRWRpdGluZ0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3RhZ05hbWVFZGl0aW5nQ29tbWl0dGVkLmNh
bmNlbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5
cGUuX3RhZ05hbWVFZGl0aW5nQ29tbWl0dGVkLm1vdmVUb05leHRBdHRyaWJ1dGVJZk5lZWRlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3Rh
Z05hbWVFZGl0aW5nQ29tbWl0dGVkLmVkaXRUYWdOYW1lQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl90YWdOYW1lRWRpdGluZ0Nv
bW1pdHRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90
b3R5cGUuX25vZGVUaXRsZUluZm8pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJl
ZUVsZW1lbnQuRWRpdFRhZ0JsYWNrbGlzdCk6IEVsZW1lbnRzIHdoaWNoIGVkaXQgdGFnIGlzIG5v
dCBhbGxvd2VkIHRvIHdvcmsgb24KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdHJl
ZW91dGxpbmUuanM6IEZpeGVkIGEgdHlwby4KKyAgICAgICAgKiBFbmdsaXNoLmxwcm9qL2xvY2Fs
aXplZFN0cmluZ3MuanM6ICJFZGl0IFRhZyIgYW5kICJBZGQgQ2hpbGQgRWxlbWVudCIKKworMjAx
MC0wMy0yNiAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVk
aXQgVGFnIE5hbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNjQ4MQorCiAgICAgICAgICAgUGFydCAxOiBDb252ZXJnZSBvbiBgbG9uZ2AgZm9yIGNh
bGxJZHMsIG5vZGVJZHMsIGFuZCBvdGhlciBJZHMuCiAKICAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHA6CmRpZmYgLS1naXQgYS9XZWJDb3JlL0VuZ2xpc2gubHByb2ov
bG9jYWxpemVkU3RyaW5ncy5qcyBiL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJp
bmdzLmpzCmluZGV4IDBhNTUyNTA4ZDkzYzBjNjYzYWVhMjU1ZjJhODdkMzUyZjc3OTZlNTUuLmU2
MmNmNjVlNDE0ZmViMGU0N2VhNTk2M2M1YWQ4YTlmYWE1Nzk0MjUgMTAwNjQ0CkdJVCBiaW5hcnkg
cGF0Y2gKZGVsdGEgOTgKemNtYk88a0xsNVRyVlQ+PGxqWm5TQ2ZnUEJGZWZza1BoTUNpJkskeSFJ
Qyl7Vj8mTE1xOUt5fkY4NFFeV0lTZVRiCmozSms3NUkrWT1KdlNGXzk8VUQ+MzF1U3d2YDg8WGEx
fDxlLTF9Kzh3azA9O2QKCmRlbHRhIDkKUWNtYURmcEp+IU9yVlQ+PDAyV1JKMkxKIzcKCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCmluZGV4IDA2MzBlZTEuLjhkZThkZGYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhU
TUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCkBAIC0zMjYsNyArMzI3LDcgQEAgdm9pZCBJbnNwZWN0
b3JCYWNrZW5kOjpjb3B5Tm9kZShsb25nIG5vZGVJZCkKICAgICBTdHJpbmcgbWFya3VwID0gY3Jl
YXRlTWFya3VwKG5vZGUpOwogICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndy
aXRlUGxhaW5UZXh0KG1hcmt1cCk7CiB9Ci0gICAgCisKIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6
cmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCiB7CiAgICAgSW5zcGVjdG9yRnJv
bnRlbmQqIGZyb250ZW5kID0gaW5zcGVjdG9yRnJvbnRlbmQoKTsKQEAgLTM1Niw2ICszNTcsODcg
QEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpyZW1vdmVOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCkKICAgICBmcm9udGVuZC0+ZGlkUmVtb3ZlTm9kZShjYWxsSWQsIG5vZGVJZCk7CiB9CiAK
K3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6YWRkQ2hpbGRFbGVtZW50KGxvbmcgY2FsbElkLCBsb25n
IG5vZGVJZCkKK3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQgPSBpbnNwZWN0b3JG
cm9udGVuZCgpOworICAgIGlmICghZnJvbnRlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIE5v
ZGUqIHBhcmVudE5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIXBhcmVudE5vZGUp
IHsKKyAgICAgICAgLy8gVXNlIC0xIHRvIGRlbm90ZSBhbiBlcnJvciBjb25kaXRpb24uCisgICAg
ICAgIGZyb250ZW5kLT5kaWRBZGRDaGlsZEVsZW1lbnQoY2FsbElkLCAtMSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGNvZGUgPSAwOworICAgIFJlZlB0cjxO
b2RlPiBuZXdTcGFuTm9kZSA9IHBhcmVudE5vZGUtPmRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQo
SFRNTE5hbWVzOjpzcGFuVGFnLCBmYWxzZSk7CisgICAgcGFyZW50Tm9kZS0+YXBwZW5kQ2hpbGQo
bmV3U3Bhbk5vZGUsIGNvZGUpOworICAgIGlmIChjb2RlKSB7CisgICAgICAgIGZyb250ZW5kLT5k
aWRBZGRDaGlsZEVsZW1lbnQoY2FsbElkLCAtMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdlbnQo
KSkgeworICAgICAgICBsb25nIGNoaWxkSWQgPSBkb21BZ2VudC0+cHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChuZXdTcGFuTm9kZS5nZXQoKSk7CisgICAgICAgIGZyb250ZW5kLT5kaWRBZGRDaGlsZEVs
ZW1lbnQoY2FsbElkLCBjaGlsZElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZy
b250ZW5kLT5kaWRBZGRDaGlsZEVsZW1lbnQoY2FsbElkLCAtMSk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQmFja2VuZDo6Y2hhbmdlVGFnTmFtZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0
IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRl
bmQgPSBpbnNwZWN0b3JGcm9udGVuZCgpOworICAgIGlmICghZnJvbnRlbmQpCisgICAgICAgIHJl
dHVybjsKKworICAgIE5vZGUqIG9sZE5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKKyAgICBpZiAo
IW9sZE5vZGUpIHsKKyAgICAgICAgLy8gVXNlIC0xIHRvIGRlbm90ZSBhbiBlcnJvciBjb25kaXRp
b24uCisgICAgICAgIGZyb250ZW5kLT5kaWRDaGFuZ2VUYWdOYW1lKGNhbGxJZCwgLTEpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWdub3JlIGV4Y2VwdGlvbiBjb2RlcworICAg
IEV4Y2VwdGlvbkNvZGUgY29kZTsKKyAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IG9sZE5vZGUt
PmRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgY29kZSk7CisKKyAgICAvLyBDb3B5
IG92ZXIgYXR0cmlidXRlcworICAgIGlmIChvbGROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgbmV3
Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIEVsZW1lbnQqIG9sZEVsZW0gPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4ob2xkTm9kZSk7CisgICAgICAgIEVsZW1lbnQqIG5ld0VsZW0gPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obmV3Tm9kZS5nZXQoKSk7CisKKyAgICAgICAgbmV3RWxlbS0+
Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMob2xkRWxlbSk7CisgICAgICAgIGlmIChvbGRFbGVt
LT5hdHRyaWJ1dGVzKCkpCisgICAgICAgICAgICBuZXdFbGVtLT5hdHRyaWJ1dGVzKCktPnNldEF0
dHJpYnV0ZXMoKihvbGRFbGVtLT5hdHRyaWJ1dGVzKHRydWUpKSk7CisgICAgfQorCisgICAgLy8g
Q29weSBvdmVyIGNoaWxkcmVuCisgICAgTm9kZSogY2hpbGQ7CisgICAgd2hpbGUgKChjaGlsZCA9
IG9sZE5vZGUtPmZpcnN0Q2hpbGQoKSkpCisgICAgICAgIG5ld05vZGUtPmFwcGVuZENoaWxkKGNo
aWxkLCBjb2RlKTsKKworICAgIC8vIFJlcGxhY2UgdGhlIG9sZCBub2RlIHdpdGggdGhlIG5ldyBu
b2RlCisgICAgTm9kZSogcGFyZW50ID0gb2xkTm9kZS0+cGFyZW50Tm9kZSgpOworICAgIHBhcmVu
dC0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsIG9sZE5vZGUtPm5leHRTaWJsaW5nKCksIGNvZGUpOwor
ICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGQob2xkTm9kZSwgY29kZSk7CisKKyAgICBpZiAoY29kZSkg
eworICAgICAgICBmcm9udGVuZC0+ZGlkQ2hhbmdlVGFnTmFtZShjYWxsSWQsIC0xKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQg
PSBpbnNwZWN0b3JET01BZ2VudCgpKSB7CisgICAgICAgIGxvbmcgbmV3SWQgPSBkb21BZ2VudC0+
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChuZXdOb2RlLmdldCgpKTsKKyAgICAgICAgZnJvbnRlbmQt
PmRpZENoYW5nZVRhZ05hbWUoY2FsbElkLCBuZXdJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBmcm9udGVuZC0+ZGlkQ2hhbmdlVGFnTmFtZShjYWxsSWQsIC0xKTsKK30KKwogdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBi
b29sIGF1dGhvck9ubHkpCiB7CiAgICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9
IGluc3BlY3RvckRPTUFnZW50KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5k
ZXggM2NjMjU0NS4uNDIzNmVjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApA
QCAtNiwxMyArNiwxMyBAQAogICogYXJlIG1ldDoKICAqCiAgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KICAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
ICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTExMiw2ICsxMTIsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUobG9uZyBjYWxsSWQsIGxvbmcg
bm9kZUlkKTsKICAgICB2b2lkIGNvcHlOb2RlKGxvbmcgbm9kZUlkKTsKICAgICB2b2lkIHJlbW92
ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKKyAgICB2b2lkIGFkZENoaWxkRWxlbWVu
dChsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOworICAgIHZvaWQgY2hhbmdlVGFnTmFtZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAKICAg
ICB2b2lkIGdldFN0eWxlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aE9ubHkp
OwogICAgIHZvaWQgZ2V0QWxsU3R5bGVzKGxvbmcgY2FsbElkKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5pZGwKaW5kZXggMmIzY2I2Zi4uZGUyZDQ5NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwKQEAgLTg3LDYgKzg3LDggQEAgbW9kdWxlIGNvcmUgewog
ICAgICAgICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShpbiBsb25nIGNhbGxJZCwgaW4g
bG9uZyBub2RlSWQpOwogICAgICAgICB2b2lkIGNvcHlOb2RlKGluIGxvbmcgbm9kZUlkKTsKICAg
ICAgICAgdm9pZCByZW1vdmVOb2RlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCk7Cisg
ICAgICAgIHZvaWQgYWRkQ2hpbGRFbGVtZW50KGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJ
ZCk7CisgICAgICAgIHZvaWQgY2hhbmdlVGFnTmFtZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBu
b2RlSWQsIGluIERPTVN0cmluZyBuZXdUYWdOYW1lKTsKICAgICAgICAgdm9pZCBoaWdobGlnaHRE
T01Ob2RlKGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdo
dCgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5j
cHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggMTBmMTI5
Zi4uNGZlMGY0OSAxMDA3NTUKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAt
NDcwLDYgKzQ3MCwyNCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRSZW1vdmVOb2RlKGxv
bmcgY2FsbElkLCBsb25nIG5vZGVJZCkKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKK3ZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEFkZENoaWxkRWxlbWVudChsb25nIGNhbGxJZCwgbG9uZyBj
aGlsZElkKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3Rv
ciwgImRpc3BhdGNoIik7IAorICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRBZGRDaGls
ZEVsZW1lbnQiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOworICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNoaWxkSWQpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQ2hhbmdlVGFnTmFtZShsb25nIGNhbGxJZCwg
bG9uZyBub2RlSWQpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5z
cGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZENo
YW5nZVRhZ05hbWUiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOworICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG5vZGVJZCk7CisgICAgZnVuY3Rpb24uY2FsbCgpOwor
fQorCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRDaGlsZE5vZGVzKGxvbmcgY2FsbElk
KQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRp
c3BhdGNoIik7IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKaW5kZXggYjYxZWI1
Ni4uN2NlZjdmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCkBAIC0xMzIs
NiArMTMyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRpZEFwcGx5RG9t
Q2hhbmdlKGxvbmcgY2FsbElkLCBib29sIHN1Y2Nlc3MpOwogICAgICAgICB2b2lkIGRpZEdldEV2
ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFNjcmlw
dEFycmF5JiBsaXN0ZW5lcnNBcnJheSk7CiAgICAgICAgIHZvaWQgZGlkUmVtb3ZlTm9kZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQpOworICAgICAgICB2b2lkIGRpZEFkZENoaWxkRWxlbWVudChs
b25nIGNhbGxJZCwgbG9uZyBjaGlsZElkKTsKKyAgICAgICAgdm9pZCBkaWRDaGFuZ2VUYWdOYW1l
KGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7CiAKICAgICAgICAgdm9pZCBkaWRHZXRTdHlsZXMo
bG9uZyBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBzdHlsZXMpOwogICAgICAgICB2b2lkIGRp
ZEdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIHN0eWxlcyk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKaW5kZXggMmIxNWY2MS4uMzJjM2Q2
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpAQCAtNjc1LDYgKzY3
NSw4IEBAIFdlYkluc3BlY3Rvci5kaWRBcHBseURvbUNoYW5nZSA9IFdlYkluc3BlY3Rvci5DYWxs
YmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkUmVtb3ZlQXR0cmlidXRlID0g
V2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIFdlYkluc3BlY3Rvci5kaWRT
ZXRUZXh0Tm9kZVZhbHVlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsK
IFdlYkluc3BlY3Rvci5kaWRSZW1vdmVOb2RlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nl
c3NDYWxsYmFjazsKK1dlYkluc3BlY3Rvci5kaWRBZGRDaGlsZEVsZW1lbnQgPSBXZWJJbnNwZWN0
b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOworV2ViSW5zcGVjdG9yLmRpZENoYW5nZVRhZ05h
bWUgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwogV2ViSW5zcGVjdG9y
LmRpZEdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9j
ZXNzQ2FsbGJhY2s7CiAKIFdlYkluc3BlY3Rvci5kaWRHZXRTdHlsZXMgPSBXZWJJbnNwZWN0b3Iu
Q2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwppbmRleCA4Y2EwYjU3Li5iMzYyYWZmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5q
cwpAQCAtMjEzLDcgKzIxMyw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lLnBy
b3RvdHlwZSA9IHsKIAogICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICB9LAotICAgIAorCiAg
ICAgX2tleURvd246IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKGV2ZW50LnRh
cmdldCAhPT0gdGhpcy50cmVlT3V0bGluZS5lbGVtZW50KQpAQCAtNDcyLDcgKzQ3Miw3IEBAIFdl
Ykluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0
aGlzLnVwZGF0ZUNoaWxkcmVuKCk7CiAgICAgfSwKLSAgICAKKwogICAgIHVwZGF0ZUNoaWxkcmVu
OiBmdW5jdGlvbihmdWxsUmVmcmVzaCkKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5kb21B
Z2VudC5nZXRDaGlsZE5vZGVzQXN5bmModGhpcy5yZXByZXNlbnRlZE9iamVjdCwgdGhpcy5fdXBk
YXRlQ2hpbGRyZW4uYmluZCh0aGlzLCBmdWxsUmVmcmVzaCkpOwpAQCAtNjY1LDcgKzY2NSw3IEBA
IFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAg
aWYgKHRoaXMuaXNFdmVudFdpdGhpbkRpc2Nsb3N1cmVUcmlhbmdsZShldmVudCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKHRoaXMudHJlZU91dGxpbmUuc2hvd0luRWxlbWVu
dHNQYW5lbEVuYWJsZWQpIHsgICAgCisgICAgICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lLnNob3dJ
bkVsZW1lbnRzUGFuZWxFbmFibGVkKSB7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd0Vs
ZW1lbnRzUGFuZWwoKTsKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVudHMu
Zm9jdXNlZERPTU5vZGUgPSB0aGlzLnJlcHJlc2VudGVkT2JqZWN0OwogICAgICAgICB9CkBAIC03
MTgsNiArNzE4LDEyIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZSkKICAgICAgICAgICAgIHJldHVybiB0aGlzLl9z
dGFydEVkaXRpbmdBdHRyaWJ1dGUoYXR0cmlidXRlLCBldmVudC50YXJnZXQpOwogCisgICAgICAg
IGlmIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5FZGl0VGFnQmxhY2tsaXN0Lmlu
ZGV4T2YodGhpcy5yZXByZXNlbnRlZE9iamVjdC5sb2NhbE5hbWUpID09PSAtMSkgeworICAgICAg
ICAgICAgdmFyIHRhZ05hbWUgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhD
bGFzcygid2Via2l0LWh0bWwtdGFnLW5hbWUiKTsKKyAgICAgICAgICAgIGlmICh0YWdOYW1lKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydEVkaXRpbmdUYWdOYW1lKHRhZ05hbWUp
OworICAgICAgICB9CisKICAgICAgICAgdmFyIG5ld0F0dHJpYnV0ZSA9IGV2ZW50LnRhcmdldC5l
bmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJhZGQtYXR0cmlidXRlIik7CiAgICAgICAgIGlm
IChuZXdBdHRyaWJ1dGUpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRkTmV3QXR0cmlidXRl
KCk7CkBAIC03MzYsNyArNzQyLDEzIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJFZGl0IEF0dHJpYnV0ZSIpLCB0aGlzLl9zdGFydEVkaXRpbmdBdHRy
aWJ1dGUuYmluZCh0aGlzLCBhdHRyaWJ1dGUsIGV2ZW50LnRhcmdldCkpOwogICAgICAgICBjb250
ZXh0TWVudS5hcHBlbmRTZXBhcmF0b3IoKTsKIAotICAgICAgICAvLyBBZGQgbm9kZS1yZWxhdGVk
IGFjdGlvbnMuCisgICAgICAgIC8vIEFkZCBzdHJ1Y3R1cmVkIG5vZGUtcmVsYXRlZCBhY3Rpb25z
LgorICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQuRWRpdFRhZ0Js
YWNrbGlzdC5pbmRleE9mKHRoaXMucmVwcmVzZW50ZWRPYmplY3QubG9jYWxOYW1lKSA9PT0gLTEp
CisgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiRWRpdCBUYWciKSwgdGhpcy5fc3RhcnRFZGl0aW5nVGFnTmFtZS5iaW5kKHRoaXMpKTsKKyAg
ICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFkZCBD
aGlsZCBFbGVtZW50IiksIHRoaXMuX2FkZENoaWxkRWxlbWVudC5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7CisKKyAgICAgICAgLy8gQWRkIGZyZWUt
Zm9ybSBub2RlLXJlbGF0ZWQgYWN0aW9ucy4KICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRl
bShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVkaXQgYXMgSFRNTCIpLCB0aGlzLl9lZGl0QXNIVE1M
LmJpbmQodGhpcykpOwogICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiQ29weSBhcyBIVE1MIiksIHRoaXMuX2NvcHlIVE1MLmJpbmQodGhpcykpOwog
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGVs
ZXRlIE5vZGUiKSwgdGhpcy5yZW1vdmUuYmluZCh0aGlzKSk7CkBAIC04NTQsNiArODY2LDQ2IEBA
IFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfSwKIAorICAgIF9zdGFydEVkaXRpbmdUYWdOYW1lOiBmdW5jdGlv
bih0YWdOYW1lRWxlbWVudCkKKyAgICB7CisgICAgICAgIGlmICghdGFnTmFtZUVsZW1lbnQpIHsK
KyAgICAgICAgICAgIHRhZ05hbWVFbGVtZW50ID0gdGhpcy5saXN0SXRlbUVsZW1lbnQuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSgid2Via2l0LWh0bWwtdGFnLW5hbWUiKVswXTsKKyAgICAgICAgICAg
IGlmICghdGFnTmFtZUVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5pc0JlaW5nRWRpdGVkKHRhZ05hbWVF
bGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB0aGlzLl9lZGl0aW5n
ID0gdHJ1ZTsKKworICAgICAgICB2YXIgY2xvc2luZ1RhZ0VsZW1lbnQgPSB0aGlzLl9kaXN0aW5j
dENsb3NpbmdUYWdFbGVtZW50KCk7CisKKyAgICAgICAgZnVuY3Rpb24ga2V5dXBMaXN0ZW5lcihl
dmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNsb3NpbmdUYWdFbGVtZW50KQorICAg
ICAgICAgICAgICAgIGNsb3NpbmdUYWdFbGVtZW50LnRleHRDb250ZW50ID0gIjwvIiArIHRhZ05h
bWVFbGVtZW50LnRleHRDb250ZW50ICsgIj4iCisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biBlZGl0aW5nQ29taXR0ZWQoKQorICAgICAgICB7CisgICAgICAgICAgICB0YWdOYW1lRWxlbWVu
dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGtleXVwTGlzdGVuZXIsIHRydWUpOworICAg
ICAgICAgICAgdGhpcy5fdGFnTmFtZUVkaXRpbmdDb21taXR0ZWQuYXBwbHkodGhpcywgYXJndW1l
bnRzKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGVkaXRpbmdDYW5jZWxsZWQoKQor
ICAgICAgICB7CisgICAgICAgICAgICB0YWdOYW1lRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVy
KCdrZXl1cCcsIGtleXVwTGlzdGVuZXIsIHRydWUpOworICAgICAgICAgICAgdGhpcy5fZWRpdGlu
Z0NhbmNlbGxlZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIHRhZ05hbWUgPSB0YWdOYW1lRWxlbWVudC50ZXh0Q29udGVudDsKKyAgICAgICAgdGFnTmFt
ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXl1cExpc3RlbmVyLCB0cnVlKTsK
KworICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRhZ05hbWVFbGVtZW50LCBlZGl0
aW5nQ29taXR0ZWQuYmluZCh0aGlzKSwgZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpLCB0YWdO
YW1lKTsKKyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQodGFn
TmFtZUVsZW1lbnQsIDAsIHRhZ05hbWVFbGVtZW50LCAxKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSwKKwogICAgIF9zdGFydEVkaXRpbmdBc0hUTUw6IGZ1bmN0aW9uKGNvbW1pdENhbGxi
YWNrLCBpbml0aWFsVmFsdWUpCiAgICAgewogICAgICAgICBpZiAodGhpcy5faHRtbEVkaXRFbGVt
ZW50ICYmIFdlYkluc3BlY3Rvci5pc0JlaW5nRWRpdGVkKHRoaXMuX2h0bWxFZGl0RWxlbWVudCkp
CkBAIC05NDEsNyArOTkzLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJv
dG90eXBlID0gewogICAgICAgICAgICAgaWYgKG1vdmVUb0F0dHJpYnV0ZSkKICAgICAgICAgICAg
ICAgICB0aGlzLl90cmlnZ2VyRWRpdEF0dHJpYnV0ZShtb3ZlVG9BdHRyaWJ1dGUpOwogICAgICAg
ICAgICAgZWxzZSBpZiAobmV3QXR0cmlidXRlKQotICAgICAgICAgICAgICAgIHRoaXMuX2FkZE5l
d0F0dHJpYnV0ZSh0aGlzLmxpc3RJdGVtRWxlbWVudCk7CisgICAgICAgICAgICAgICAgdGhpcy5f
YWRkTmV3QXR0cmlidXRlKCk7CiAgICAgICAgIH0KIAogICAgICAgICB2YXIgcGFyc2VDb250YWlu
ZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwpAQCAtOTc3LDYgKzEw
MjksNzIgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewog
ICAgICAgICBtb3ZlVG9OZXh0QXR0cmlidXRlSWZOZWVkZWQuY2FsbCh0aGlzKTsKICAgICB9LAog
CisgICAgX3RhZ05hbWVFZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlvbihlbGVtZW50LCBuZXdUZXh0
LCBvbGRUZXh0LCB0YWdOYW1lLCBtb3ZlRGlyZWN0aW9uKQorICAgIHsKKyAgICAgICAgZGVsZXRl
IHRoaXMuX2VkaXRpbmc7CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2YXIg
dHJlZU91dGxpbmUgPSB0aGlzLnRyZWVPdXRsaW5lOworICAgICAgICB2YXIgd2FzRXhwYW5kZWQg
PSB0aGlzLmV4cGFuZGVkOworCisgICAgICAgIGZ1bmN0aW9uIGNhbmNlbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHZhciBjbG9zaW5nVGFnRWxlbWVudCA9IHRoaXMuX2Rpc3RpbmN0Q2xvc2lu
Z1RhZ0VsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChjbG9zaW5nVGFnRWxlbWVudCkKKyAgICAg
ICAgICAgICAgICBjbG9zaW5nVGFnRWxlbWVudC50ZXh0Q29udGVudCA9ICI8LyIgKyB0YWdOYW1l
ICsgIj4iOworCisgICAgICAgICAgICB0aGlzLl9lZGl0aW5nQ2FuY2VsbGVkKGVsZW1lbnQsIHRh
Z05hbWUpOworICAgICAgICAgICAgbW92ZVRvTmV4dEF0dHJpYnV0ZUlmTmVlZGVkLmNhbGwodGhp
cywgdGhpcy5yZXByZXNlbnRlZE9iamVjdCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biBtb3ZlVG9OZXh0QXR0cmlidXRlSWZOZWVkZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoIXNlbGYgfHwgIW1vdmVEaXJlY3Rpb24gfHwgbW92ZURpcmVjdGlvbiAhPT0gImZvcndhcmQi
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMg
PSB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LmF0dHJpYnV0ZXM7CisgICAgICAgICAgICBpZiAoYXR0
cmlidXRlcy5sZW5ndGggPiAwKQorICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJFZGl0QXR0
cmlidXRlKGF0dHJpYnV0ZXNbMF0ubmFtZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgdGhpcy5fYWRkTmV3QXR0cmlidXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBuZXdU
ZXh0ID0gbmV3VGV4dC50cmltKCk7CisgICAgICAgIGlmIChuZXdUZXh0ID09PSBvbGRUZXh0KSB7
CisgICAgICAgICAgICBjYW5jZWwuY2FsbCh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KG5ld1RleHQpOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIGNhbmNlbC5j
YWxsKHRoaXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gZWRpdFRhZ05hbWVDYWxsYmFjayhub2RlSWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBTaG9ydCBkZWxheSBmb3IgdGhlIFVJIHRvIGNhdGNoIHVwLgorICAgICAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZUlkID09
PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBjYW5jZWwuY2FsbChzZWxmKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IHZhciBub2RlID0gV2ViSW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOworICAg
ICAgICAgICAgICAgIHZhciB0cmVlSXRlbSA9IHRyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVudChu
b2RlKTsKKyAgICAgICAgICAgICAgICB0cmVlT3V0bGluZS5yZXZlYWxBbmRTZWxlY3ROb2RlKG5v
ZGUpOworICAgICAgICAgICAgICAgIGlmICh3YXNFeHBhbmRlZCkKKyAgICAgICAgICAgICAgICAg
ICAgdHJlZUl0ZW0uZXhwYW5kKCk7CisKKyAgICAgICAgICAgICAgICBtb3ZlVG9OZXh0QXR0cmli
dXRlSWZOZWVkZWQuY2FsbCh0cmVlSXRlbSwgbm9kZSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZhciBjYWxsSWQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChl
ZGl0VGFnTmFtZUNhbGxiYWNrKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5jaGFuZ2VUYWdO
YW1lKGNhbGxJZCwgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5pZCwgbmV3VGV4dCk7CisgICAgfSwK
KwogICAgIF90ZXh0Tm9kZUVkaXRpbmdDb21taXR0ZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld1Rl
eHQpCiAgICAgewogICAgICAgICBkZWxldGUgdGhpcy5fZWRpdGluZzsKQEAgLTEwMDMsNiArMTEy
MSwyNCBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHRoaXMudXBkYXRlVGl0bGUoKTsKICAgICB9LAogCisgICAgX2Rpc3RpbmN0Q2xvc2lu
Z1RhZ0VsZW1lbnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXByb3Zl
IHRoZSBUcmVlIEVsZW1lbnQgLyBPdXRsaW5lIEFic3RyYWN0aW9uIHRvIHByZXZlbnQgY3Jhd2xp
bmcgdGhlIERPTQorCisgICAgICAgIC8vIEZvciBhbiBleHBhbmRlZCBlbGVtZW50LCBpdCB3aWxs
IGJlIHRoZSBsYXN0IGVsZW1lbnQgd2l0aCBjbGFzcyAiY2xvc2UiCisgICAgICAgIC8vIGluIHRo
ZSBjaGlsZCBlbGVtZW50IGxpc3QuCisgICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7CisgICAg
ICAgICAgICB2YXIgY2xvc2VycyA9IHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUucXVlcnlTZWxlY3Rv
ckFsbCgiLmNsb3NlIik7CisgICAgICAgICAgICByZXR1cm4gY2xvc2Vyc1tjbG9zZXJzLmxlbmd0
aC0xXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbWFpbmluZyBjYXNlcyBhcmUgc2luZ2xl
IGxpbmUgbm9uLWV4cGFuZGVkIGVsZW1lbnRzIHdpdGggYSBjbG9zaW5nCisgICAgICAgIC8vIHRh
Zywgb3IgSFRNTCBlbGVtZW50cyB3aXRob3V0IGEgY2xvc2luZyB0YWcgKHN1Y2ggYXMgPGJyPiku
IFJldHVybgorICAgICAgICAvLyBudWxsIGluIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzbid0IGEg
Y2xvc2luZyB0YWcuCisgICAgICAgIHZhciB0YWdzID0gdGhpcy5saXN0SXRlbUVsZW1lbnQuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZSgid2Via2l0LWh0bWwtdGFnIik7CisgICAgICAgIHJldHVybiAo
dGFncy5sZW5ndGggPT09IDEgPyBudWxsIDogdGFnc1t0YWdzLmxlbmd0aC0xXSk7CisgICAgfSwK
KwogICAgIHVwZGF0ZVRpdGxlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICAvLyBJZiB3ZSBh
cmUgZWRpdGluZywgcmV0dXJuIGVhcmx5IHRvIHByZXZlbnQgY2FuY2VsaW5nIHRoZSBlZGl0LgpA
QCAtMTA1NSwyNSArMTE5MSwyNiBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5w
cm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB2YXIgbm9kZSA9IHRoaXMucmVwcmVzZW50ZWRP
YmplY3Q7CiAgICAgICAgIHZhciBpbmZvID0ge3RpdGxlOiAiIiwgaGFzQ2hpbGRyZW46IHRoaXMu
aGFzQ2hpbGRyZW59OwotICAgICAgICAKKwogICAgICAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUp
IHsKICAgICAgICAgICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9OT0RFOgogICAgICAgICAgICAgICAg
IGluZm8udGl0bGUgPSAiRG9jdW1lbnQiOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIAorCiAgICAgICAgICAgICBjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9E
RToKICAgICAgICAgICAgICAgICBpbmZvLnRpdGxlID0gIkRvY3VtZW50IEZyYWdtZW50IjsKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9E
RToKICAgICAgICAgICAgICAgICB2YXIgdGFnTmFtZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNh
c2UoKS5lc2NhcGVIVE1MKCk7Ci0gICAgICAgICAgICAgICAgaW5mby50aXRsZSA9ICI8c3BhbiBj
bGFzcz1cIndlYmtpdC1odG1sLXRhZ1wiPiZsdDsiICsgdGFnTmFtZTsKLSAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpbmZvLnRpdGxlID0gIjxzcGFuIGNsYXNzPVwid2Via2l0LWh0
bWwtdGFnXCI+Jmx0OyI7CisgICAgICAgICAgICAgICAgaW5mby50aXRsZSArPSAiPHNwYW4gY2xh
c3M9XCJ3ZWJraXQtaHRtbC10YWctbmFtZVwiPiIgKyB0YWdOYW1lICsgIjwvc3Bhbj4iOworCiAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlcygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IG5vZGUuYXR0cmlidXRlc1tpXTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8udGl0bGUgKz0gIiA8c3BhbiBjbGFzcz1cIndl
YmtpdC1odG1sLWF0dHJpYnV0ZVwiPjxzcGFuIGNsYXNzPVwid2Via2l0LWh0bWwtYXR0cmlidXRl
LW5hbWVcIj4iICsgYXR0ci5uYW1lLmVzY2FwZUhUTUwoKSArICI8L3NwYW4+PSYjODIwMztcIiI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHZhbHVlID0gYXR0ci52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5raWZ5
ICYmIChhdHRyLm5hbWUgPT09ICJzcmMiIHx8IGF0dHIubmFtZSA9PT0gImhyZWYiKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyhbXC87
OlwpXF1cfV0pL2csICIkMVx1MjAwQiIpOwpAQCAtMTA4Nyw3ICsxMjI0LDcgQEAgV2ViSW5zcGVj
dG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGluZm8udGl0bGUgKz0gIiZn
dDs8L3NwYW4+JiM4MjAzOyI7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBj
b25zdCBjbG9zaW5nVGFnSFRNTCA9ICI8c3BhbiBjbGFzcz1cIndlYmtpdC1odG1sLXRhZ1wiPiZs
dDsvIiArIHRhZ05hbWUgKyAiJmd0Ozwvc3Bhbj4mIzgyMDM7IjsKICAgICAgICAgICAgICAgICB2
YXIgdGV4dENoaWxkID0gb25seVRleHRDaGlsZC5jYWxsKG5vZGUpOwogICAgICAgICAgICAgICAg
IHZhciBzaG93SW5saW5lVGV4dCA9IHRleHRDaGlsZCAmJiB0ZXh0Q2hpbGQudGV4dENvbnRlbnQu
bGVuZ3RoIDwgUHJlZmVyZW5jZXMubWF4SW5saW5lVGV4dENoaWxkTGVuZ3RoOwpAQCAtMTEwNiw3
ICsxMjQzLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgICAgICAgICBpbmZvLmhhc0NoaWxkcmVuID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOgogICAgICAgICAgICAgICAgIGlmIChpc05v
ZGVXaGl0ZXNwYWNlLmNhbGwobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIGluZm8udGl0bGUg
PSAiKHdoaXRlc3BhY2UpIjsKQEAgLTExMTcsMjYgKzEyNTQsMjYgQEAgV2ViSW5zcGVjdG9yLkVs
ZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogCiAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgamF2YXNjcmlwdFN5bnRheEhpZ2hsaWdodGVyID0gbmV3IFdlYkluc3BlY3Rvci5ET01T
eW50YXhIaWdobGlnaHRlcigidGV4dC9qYXZhc2NyaXB0Iik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBqYXZhc2NyaXB0U3ludGF4SGlnaGxpZ2h0ZXIuc3ludGF4SGlnaGxpZ2h0Tm9kZShuZXdO
b2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmZvLnRpdGxlID0gIjxzcGFuIGNsYXNzPVwid2Via2l0LWh0bWwtdGV4dC1ub2RlIHdlYmtp
dC1odG1sLWpzLW5vZGVcIj4iICsgbmV3Tm9kZS5pbm5lckhUTUwucmVwbGFjZSgvXltcblxyXSov
LCAiIikucmVwbGFjZSgvXHMqJC8sICIiKSArICI8L3NwYW4+IjsKICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgPT0gInN0eWxlIikgewogICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IG5ld05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdOb2RlLnRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3NzU3lu
dGF4SGlnaGxpZ2h0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTVN5bnRheEhpZ2hsaWdodGVyKCJ0
ZXh0L2NzcyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgY3NzU3ludGF4SGlnaGxpZ2h0ZXIu
c3ludGF4SGlnaGxpZ2h0Tm9kZShuZXdOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAor
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnRpdGxlID0gIjxzcGFuIGNsYXNzPVwid2Vi
a2l0LWh0bWwtdGV4dC1ub2RlIHdlYmtpdC1odG1sLWNzcy1ub2RlXCI+IiArIG5ld05vZGUuaW5u
ZXJIVE1MLnJlcGxhY2UoL15bXG5ccl0qLywgIiIpLnJlcGxhY2UoL1xzKiQvLCAiIikgKyAiPC9z
cGFuPiI7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvLnRpdGxlID0gIlwiPHNwYW4gY2xhc3M9XCJ3ZWJraXQtaHRtbC10ZXh0LW5vZGVc
Ij4iICsgbm9kZS5ub2RlVmFsdWUuZXNjYXBlSFRNTCgpICsgIjwvc3Bhbj5cIiI7IAorICAgICAg
ICAgICAgICAgICAgICAgICAgaW5mby50aXRsZSA9ICJcIjxzcGFuIGNsYXNzPVwid2Via2l0LWh0
bWwtdGV4dC1ub2RlXCI+IiArIG5vZGUubm9kZVZhbHVlLmVzY2FwZUhUTUwoKSArICI8L3NwYW4+
XCIiOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCisKICAg
ICAgICAgICAgIGNhc2UgTm9kZS5DT01NRU5UX05PREU6CiAgICAgICAgICAgICAgICAgaW5mby50
aXRsZSA9ICI8c3BhbiBjbGFzcz1cIndlYmtpdC1odG1sLWNvbW1lbnRcIj4mbHQ7IS0tIiArIG5v
ZGUubm9kZVZhbHVlLmVzY2FwZUhUTUwoKSArICItLSZndDs8L3NwYW4+IjsKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FzZSBOb2RlLkRP
Q1VNRU5UX1RZUEVfTk9ERToKICAgICAgICAgICAgICAgICBpbmZvLnRpdGxlID0gIjxzcGFuIGNs
YXNzPVwid2Via2l0LWh0bWwtZG9jdHlwZVwiPiZsdDshRE9DVFlQRSAiICsgbm9kZS5ub2RlTmFt
ZTsKICAgICAgICAgICAgICAgICBpZiAobm9kZS5wdWJsaWNJZCkgewpAQCAtMTE1Miw3ICsxMjg5
LDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpbmZvLnRpdGxlID0gbm9kZS5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpLmNvbGxhcHNlV2hpdGVzcGFjZSgpLmVzY2FwZUhUTUwoKTsKICAg
ICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gaW5mbzsKICAgICB9LAogCkBAIC0x
MTY1LDcgKzEzMDIsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5
cGUgPSB7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0sCi0gICAgCisK
ICAgICByZW1vdmU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50
ID0gdGhpcy5wYXJlbnQ7CkBAIC0xMTg4LDYgKzEzMjUsMjkgQEAgV2ViSW5zcGVjdG9yLkVsZW1l
bnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJl
bW92ZU5vZGUoY2FsbElkLCB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LmlkKTsKICAgICB9LAogCisg
ICAgX2FkZENoaWxkRWxlbWVudDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHRyZWVP
dXRsaW5lID0gdGhpcy50cmVlT3V0bGluZTsKKworICAgICAgICBmdW5jdGlvbiBhZGRDaGlsZEVs
ZW1lbnRDYWxsYmFjayhjaGlsZElkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGSVhNRTog
U2hvcnQgZGVsYXkgZm9yIHRoZSBVSSB0byBjYXRjaCB1cC4KKyAgICAgICAgICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkSWQgPT09IC0xKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IFdl
Ykluc3BlY3Rvci5kb21BZ2VudC5ub2RlRm9ySWQoY2hpbGRJZCk7CisgICAgICAgICAgICAgICAg
dmFyIHRyZWVJdGVtID0gdHJlZU91dGxpbmUuZmluZFRyZWVFbGVtZW50KG5vZGUpOworICAgICAg
ICAgICAgICAgIHRyZWVPdXRsaW5lLnJldmVhbEFuZFNlbGVjdE5vZGUobm9kZSk7CisgICAgICAg
ICAgICAgICAgaWYgKHRyZWVJdGVtKQorICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbS5fc3Rh
cnRFZGl0aW5nVGFnTmFtZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAg
ICB2YXIgY2FsbElkID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoYWRkQ2hpbGRFbGVtZW50
Q2FsbGJhY2spOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmFkZENoaWxkRWxlbWVudChjYWxs
SWQsIHRoaXMucmVwcmVzZW50ZWRPYmplY3QuaWQpOworICAgIH0sCisKICAgICBfZWRpdEFzSFRN
TDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHRyZWVPdXRsaW5lID0gdGhpcy50cmVl
T3V0bGluZTsKQEAgLTEyNDIsMyArMTQwMiw1IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVF
bGVtZW50LnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1l
bnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFRyZWVFbGVtZW50LnByb3RvdHlwZTsKKworV2ViSW5z
cGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQuRWRpdFRhZ0JsYWNrbGlzdCA9IFsiaHRtbCIsICJo
ZWFkIiwgImJvZHkiLCAidGl0bGUiXTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUuanMgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUuanMKaW5kZXggYjZlMzViYi4uYjE5
MWM4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RyZWVvdXRsaW5l
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5qcwpAQCAt
Mjg3LDcgKzI4Nyw3IEBAIFRyZWVPdXRsaW5lLnByb3RvdHlwZS5maW5kVHJlZUVsZW1lbnQgPSBm
dW5jdGlvbihyZXByZXNlbnRlZE9iamVjdCwgaXNBbmNlc3RvciwKICAgICBpZiAoY2FjaGVkRWxl
bWVudCkKICAgICAgICAgcmV0dXJuIGNhY2hlZEVsZW1lbnQ7CiAKLSAgICAvLyBUaGUgcmVwcmVz
ZW50ZWRPYmplY3QgaXNuJ3Qga25vdywgc28gd2Ugc3RhcnQgYXQgdGhlIHRvcCBvZiB0aGUgdHJl
ZSBhbmQgd29yayBkb3duIHRvIGZpbmQgdGhlIGZpcnN0CisgICAgLy8gVGhlIHJlcHJlc2VudGVk
T2JqZWN0IGlzbid0IGtub3duLCBzbyB3ZSBzdGFydCBhdCB0aGUgdG9wIG9mIHRoZSB0cmVlIGFu
ZCB3b3JrIGRvd24gdG8gZmluZCB0aGUgZmlyc3QKICAgICAvLyB0cmVlIGVsZW1lbnQgdGhhdCBy
ZXByZXNlbnRzIHJlcHJlc2VudGVkT2JqZWN0IG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzLgogICAg
IHZhciBpdGVtOwogICAgIHZhciBmb3VuZCA9IGZhbHNlOwo=
</data>
<flag name="review"
          id="35162"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51850</attachid>
            <date>2010-03-27 20:36:46 -0700</date>
            <delta_ts>2010-03-28 00:46:04 -0700</delta_ts>
            <desc>[PATCH] Part 1 - Add &quot;Edit Tag&quot; on Double Click</desc>
            <filename>edittag.patch</filename>
            <type>text/plain</type>
            <size>23604</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmMwMjhmNC4uOTFmMGI4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMC0wMy0yNyAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVkaXQgVGFnIE5hbWVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQ4MQorICAgICAgICAK
KyAgICAgICAgQWxsb3cgZWRpdGluZyBhbiBFbGVtZW50J3MgVGFnIE5hbWUgYnkgZG91YmxlIGNs
aWNraW5nCisgICAgICAgIG9uIHRoZSB0YWcgbmFtZSBpbiB0aGUgRWxlbWVudCdzIFRyZWUgSGll
cmFyY2h5LgorICAgICAgICAKKyAgICAgICAgICBUaGUgdXN1YWwgYXN5bmNocm9ub3VzIEluc3Bl
Y3RvckJhY2tlbmQsIEluc3BlY3RvckRPTUFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCBmbG93Lgor
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwOiBtb3ZlZCBET00gbWFu
aXB1bGF0aW9uIHRvIEluc3BlY3RvckRPTUFnZW50CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCYWNrZW5kOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tl
bmQ6OmNoYW5nZVRhZ05hbWUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01BZ2VudDo6Y2hhbmdlVGFnTmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpkaWRDaGFuZ2VUYWdOYW1lKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKworICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanM6CisKKyAgICAgICAgICBIYW5kbGUgdGhlIFVJIGZv
ciBlZGl0aW5nIGFuIEVsZW1lbnQncyB0YWcgbmFtZS4KKworICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5F
bGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nRnJvbUV2ZW50KTogYWxs
b3cgZWRpdGluZyBmcm9tIGRvdWJsZSBjbGljay4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVt
ZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nVGFnTmFtZS5rZXl1cExpc3Rl
bmVyKTogdXBkYXRlIHRoZSBjbG9zaW5nIHRhZworICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1l
bnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9zdGFydEVkaXRpbmdUYWdOYW1lLmVkaXRpbmdDb21p
dHRlZCk6IHJlbW92ZSBleHRyYSBsaXN0ZW5lciBhbmQgY29tbWl0CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3N0YXJ0RWRpdGluZ1RhZ05hbWUu
ZWRpdGluZ0NhbmNlbGxlZCk6IHJlbW92ZSBleHRyYSBsaXN0ZW5lciBhbmQgY2FuY2VsCisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3N0YXJ0RWRp
dGluZ1RhZ05hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQu
cHJvdG90eXBlLl90YWdOYW1lRWRpdGluZ0NvbW1pdHRlZC5jYW5jZWwpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl90YWdOYW1lRWRpdGluZ0Nv
bW1pdHRlZC5tb3ZlVG9OZXh0QXR0cmlidXRlSWZOZWVkZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl90YWdOYW1lRWRpdGluZ0NvbW1pdHRl
ZC5lZGl0VGFnTmFtZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1Ry
ZWVFbGVtZW50LnByb3RvdHlwZS5fdGFnTmFtZUVkaXRpbmdDb21taXR0ZWQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9kaXN0aW5jdENsb3Np
bmdUYWdFbGVtZW50KTogZ2V0IHRoZSBjbG9zaW5nIHRhZyBmb3IgYW4gb3BlbmluZyB0YWcKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fbm9kZVRp
dGxlSW5mbyk6IHdyYXAgdGhlIHRhZ05hbWUgaW4gc3Bhbi53ZWJraXQtaHRtbC10YWctbmFtZQor
CisgICAgICAgICAgTWlzY2VsbGFuZW91cyB1cGRhdGVzLgorCisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC90cmVlb3V0bGluZS5qczogZml4ZWQgYSB0eXBvLgorCiAyMDEwLTAzLTI2ICBK
b3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5k
ZXggMDYzMGVlMS4uYWVkOGYyYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKQEAgLTMyNiwzNCArMzI2LDE3IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6Y29weU5vZGUo
bG9uZyBub2RlSWQpCiAgICAgU3RyaW5nIG1hcmt1cCA9IGNyZWF0ZU1hcmt1cChub2RlKTsKICAg
ICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT53cml0ZVBsYWluVGV4dChtYXJrdXAp
OwogfQotICAgIAorCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnJlbW92ZU5vZGUobG9uZyBjYWxs
SWQsIGxvbmcgbm9kZUlkKQogewotICAgIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IGlu
c3BlY3RvckZyb250ZW5kKCk7Ci0gICAgaWYgKCFmcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghbm9kZSkgewot
ICAgICAgICAvLyBVc2UgLTEgdG8gZGVub3RlIGFuIGVycm9yIGNvbmRpdGlvbi4KLSAgICAgICAg
ZnJvbnRlbmQtPmRpZFJlbW92ZU5vZGUoY2FsbElkLCAtMSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBOb2RlKiBwYXJlbnROb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIGlm
ICghcGFyZW50Tm9kZSkgewotICAgICAgICBmcm9udGVuZC0+ZGlkUmVtb3ZlTm9kZShjYWxsSWQs
IC0xKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEV4Y2VwdGlvbkNvZGUgY29kZTsK
LSAgICBwYXJlbnROb2RlLT5yZW1vdmVDaGlsZChub2RlLCBjb2RlKTsKLSAgICBpZiAoY29kZSkg
ewotICAgICAgICBmcm9udGVuZC0+ZGlkUmVtb3ZlTm9kZShjYWxsSWQsIC0xKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5z
cGVjdG9yRE9NQWdlbnQoKSkKKyAgICAgICAgZG9tQWdlbnQtPnJlbW92ZU5vZGUoY2FsbElkLCBu
b2RlSWQpOworfQogCi0gICAgZnJvbnRlbmQtPmRpZFJlbW92ZU5vZGUoY2FsbElkLCBub2RlSWQp
Owordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpjaGFuZ2VUYWdOYW1lKGxvbmcgY2FsbElkLCBsb25n
IG5vZGVJZCwgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBib29sIGV4cGFuZGVkKQorewor
ICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2VudCgp
KQorICAgICAgICBkb21BZ2VudC0+Y2hhbmdlVGFnTmFtZShjYWxsSWQsIG5vZGVJZCwgdGFnTmFt
ZSwgZXhwYW5kZWQpOwogfQogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmdldFN0eWxlcyhsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmQuaAppbmRleCAzY2MyNTQ1Li43MzMxODQzIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5oCkBAIC02LDEzICs2LDEzIEBACiAgKiBhcmUgbWV0OgogICoKICAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgogICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApAQCAtMTEy
LDYgKzExMiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShs
b25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwogICAgIHZvaWQgY29weU5vZGUobG9uZyBub2RlSWQp
OwogICAgIHZvaWQgcmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOworICAgIHZv
aWQgY2hhbmdlVGFnTmFtZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IEF0b21pY1N0
cmluZyYgdGFnTmFtZSwgYm9vbCBleHBhbmRlZCk7CiAKICAgICB2b2lkIGdldFN0eWxlcyhsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aE9ubHkpOwogICAgIHZvaWQgZ2V0QWxsU3R5
bGVzKGxvbmcgY2FsbElkKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmQuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwKaW5k
ZXggMmIzY2I2Zi4uY2YwZmUwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5p
ZGwKQEAgLTg3LDYgKzg3LDcgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICB2b2lkIGdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQpOwogICAgICAg
ICB2b2lkIGNvcHlOb2RlKGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCByZW1vdmVOb2Rl
KGluIGxvbmcgY2FsbElkLCBpbiBsb25nIG5vZGVJZCk7CisgICAgICAgIHZvaWQgY2hhbmdlVGFn
TmFtZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQsIGluIERPTVN0cmluZyBuZXdUYWdO
YW1lLCBpbiBib29sZWFuIGV4cGFuZGVkKTsKICAgICAgICAgdm9pZCBoaWdobGlnaHRET01Ob2Rl
KGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggYjhkZGQyZi4uYTQ3
MjQ2YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMzUyLDYg
KzM1Miw3NSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVBdHRyaWJ1dGUobG9uZyBj
YWxsSWQsIGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJpbgogICAgIH0KIH0KIAordm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCit7Cisg
ICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOworICAgIGlmICghbm9kZSkgeworICAg
ICAgICAvLyBVc2UgLTEgdG8gZGVub3RlIGFuIGVycm9yIGNvbmRpdGlvbi4KKyAgICAgICAgbV9m
cm9udGVuZC0+ZGlkUmVtb3ZlTm9kZShjYWxsSWQsIC0xKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIE5vZGUqIHBhcmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgaWYg
KCFwYXJlbnROb2RlKSB7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZFJlbW92ZU5vZGUoY2FsbElk
LCAtMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFeGNlcHRpb25Db2RlIGNvZGU7
CisgICAgcGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQobm9kZSwgY29kZSk7CisgICAgaWYgKGNvZGUp
IHsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkUmVtb3ZlTm9kZShjYWxsSWQsIC0xKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZnJvbnRlbmQtPmRpZFJlbW92ZU5vZGUoY2FsbElk
LCBub2RlSWQpOworfQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFuZ2VUYWdOYW1lKGxv
bmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBib29s
IGV4cGFuZGVkKQoreworICAgIE5vZGUqIG9sZE5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKKyAg
ICBpZiAoIW9sZE5vZGUpIHsKKyAgICAgICAgLy8gVXNlIC0xIHRvIGRlbm90ZSBhbiBlcnJvciBj
b25kaXRpb24uCisgICAgICAgIG1fZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05hbWUoY2FsbElkLCAt
MSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogRXhjZXB0aW9uIGNv
ZGVzIGFyZSBpZ25vcmVkIHVudGlsIHRoZSBlbmQuCisgICAgRXhjZXB0aW9uQ29kZSBjb2RlOwor
ICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0gb2xkTm9kZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWxl
bWVudCh0YWdOYW1lLCBjb2RlKTsKKworICAgIC8vIENvcHkgb3ZlciB0aGUgb3JpZ2luYWwgbm9k
ZSdzIGF0dHJpYnV0ZXMuCisgICAgaWYgKG9sZE5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBuZXdO
b2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgRWxlbWVudCogb2xkRWxlbSA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihvbGROb2RlKTsKKyAgICAgICAgRWxlbWVudCogbmV3RWxlbSA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihuZXdOb2RlLmdldCgpKTsKKworICAgICAgICBuZXdFbGVtLT5j
b3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcyhvbGRFbGVtKTsKKyAgICAgICAgaWYgKG9sZEVsZW0t
PmF0dHJpYnV0ZXMoKSkKKyAgICAgICAgICAgIG5ld0VsZW0tPmF0dHJpYnV0ZXMoKS0+c2V0QXR0
cmlidXRlcygqKG9sZEVsZW0tPmF0dHJpYnV0ZXModHJ1ZSkpKTsKKyAgICB9CisKKyAgICAvLyBD
b3B5IG92ZXIgdGhlIG9yaWdpbmFsIG5vZGUncyBjaGlsZHJlbi4KKyAgICBOb2RlKiBjaGlsZDsK
KyAgICB3aGlsZSAoKGNoaWxkID0gb2xkTm9kZS0+Zmlyc3RDaGlsZCgpKSkKKyAgICAgICAgbmV3
Tm9kZS0+YXBwZW5kQ2hpbGQoY2hpbGQsIGNvZGUpOworCisgICAgLy8gUmVwbGFjZSB0aGUgb2xk
IG5vZGUgd2l0aCB0aGUgbmV3IG5vZGUKKyAgICBOb2RlKiBwYXJlbnQgPSBvbGROb2RlLT5wYXJl
bnROb2RlKCk7CisgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgb2xkTm9kZS0+bmV4
dFNpYmxpbmcoKSwgY29kZSk7CisgICAgcGFyZW50LT5yZW1vdmVDaGlsZChvbGROb2RlLCBjb2Rl
KTsKKworICAgIGlmIChjb2RlKSB7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05h
bWUoY2FsbElkLCAtMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb25nIG5ld0lk
ID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChuZXdOb2RlLmdldCgpKTsKKyAgICBpZiAoZXhwYW5k
ZWQpCisgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChuZXdJZCk7CisgICAgbV9mcm9u
dGVuZC0+ZGlkQ2hhbmdlVGFnTmFtZShjYWxsSWQsIG5ld0lkKTsKK30KKwogdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6c2V0VGV4dE5vZGVWYWx1ZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggMTMxMjdiNy4uNTNlOTEz
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC05Niw2ICs5Niw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBnZXRDaGlsZE5vZGVzKGxvbmcgY2Fs
bElkLCBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgc2V0QXR0cmlidXRlKGxvbmcgY2FsbElk
LCBsb25nIGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKICAgICAgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUobG9uZyBjYWxsSWQsIGxvbmcgZWxlbWVu
dElkLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgICAgICB2b2lkIHJlbW92ZU5vZGUobG9uZyBj
YWxsSWQsIGxvbmcgbm9kZUlkKTsKKyAgICAgICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGxvbmcgY2Fs
bElkLCBsb25nIG5vZGVJZCwgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBib29sIGV4cGFu
ZGVkKTsKICAgICAgICAgdm9pZCBzZXRUZXh0Tm9kZVZhbHVlKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgIHZvaWQgZ2V0RXZlbnRMaXN0ZW5l
cnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kLmNwcAppbmRleCAzNTk5YmVkLi5kODlhZTcxIDEwMDc1NQotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBAIC00NzAsNiArNDcwLDE1IEBAIHZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OmRpZFJlbW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQog
ICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQ2hh
bmdlVGFnTmFtZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCit7CisgICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQoImRpZENoYW5nZVRhZ05hbWUiKTsKKyAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChjYWxsSWQpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG5vZGVJZCk7
CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRH
ZXRDaGlsZE5vZGVzKGxvbmcgY2FsbElkKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kLmgKaW5kZXggMjZkMDEzMy4uMGU3ZDdiMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5oCkBAIC0xMzIsNiArMTMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2b2lkIGRpZEFwcGx5RG9tQ2hhbmdlKGxvbmcgY2FsbElkLCBib29sIHN1Y2Nlc3Mp
OwogICAgICAgICB2b2lkIGRpZEdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwg
bG9uZyBub2RlSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBsaXN0ZW5lcnNBcnJheSk7CiAgICAgICAg
IHZvaWQgZGlkUmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOworICAgICAgICB2
b2lkIGRpZENoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKIAogICAgICAg
ICB2b2lkIGRpZEdldFN0eWxlcyhsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxl
cyk7CiAgICAgICAgIHZvaWQgZGlkR2V0QWxsU3R5bGVzKGxvbmcgY2FsbElkLCBjb25zdCBTY3Jp
cHRBcnJheSYgc3R5bGVzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9ET01BZ2VudC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpp
bmRleCAxNTE1ZmU2Li5iZGY2OWMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRE9NQWdlbnQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFn
ZW50LmpzCkBAIC02NzYsNiArNjc2LDcgQEAgV2ViSW5zcGVjdG9yLmRpZEFwcGx5RG9tQ2hhbmdl
ID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIFdlYkluc3BlY3Rvci5k
aWRSZW1vdmVBdHRyaWJ1dGUgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNr
OwogV2ViSW5zcGVjdG9yLmRpZFNldFRleHROb2RlVmFsdWUgPSBXZWJJbnNwZWN0b3IuQ2FsbGJh
Y2sucHJvY2Vzc0NhbGxiYWNrOwogV2ViSW5zcGVjdG9yLmRpZFJlbW92ZU5vZGUgPSBXZWJJbnNw
ZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOworV2ViSW5zcGVjdG9yLmRpZENoYW5nZVRh
Z05hbWUgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwogV2ViSW5zcGVj
dG9yLmRpZEdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5w
cm9jZXNzQ2FsbGJhY2s7CiAKIFdlYkluc3BlY3Rvci5kaWRHZXRTdHlsZXMgPSBXZWJJbnNwZWN0
b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwppbmRleCAyNmExOTQ5Li44MmE0MzVmIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGlu
ZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGlu
ZS5qcwpAQCAtMjE4LDcgKzIxOCw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5l
LnByb3RvdHlwZSA9IHsKIAogICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICB9LAotICAgIAor
CiAgICAgX2tleURvd246IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKGV2ZW50
LnRhcmdldCAhPT0gdGhpcy50cmVlT3V0bGluZS5lbGVtZW50KQpAQCAtNDc3LDcgKzQ3Nyw3IEBA
IFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKIAogICAgICAg
ICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7CiAgICAgfSwKLSAgICAKKwogICAgIHVwZGF0ZUNoaWxk
cmVuOiBmdW5jdGlvbihmdWxsUmVmcmVzaCkKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5k
b21BZ2VudC5nZXRDaGlsZE5vZGVzQXN5bmModGhpcy5yZXByZXNlbnRlZE9iamVjdCwgdGhpcy5f
dXBkYXRlQ2hpbGRyZW4uYmluZCh0aGlzLCBmdWxsUmVmcmVzaCkpOwpAQCAtNjcwLDcgKzY3MCw3
IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAg
ICAgaWYgKHRoaXMuaXNFdmVudFdpdGhpbkRpc2Nsb3N1cmVUcmlhbmdsZShldmVudCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKHRoaXMudHJlZU91dGxpbmUuc2hvd0luRWxl
bWVudHNQYW5lbEVuYWJsZWQpIHsgICAgCisgICAgICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lLnNo
b3dJbkVsZW1lbnRzUGFuZWxFbmFibGVkKSB7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2hv
d0VsZW1lbnRzUGFuZWwoKTsKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVu
dHMuZm9jdXNlZERPTU5vZGUgPSB0aGlzLnJlcHJlc2VudGVkT2JqZWN0OwogICAgICAgICB9CkBA
IC03MjMsNiArNzIzLDEyIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZSkKICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9zdGFydEVkaXRpbmdBdHRyaWJ1dGUoYXR0cmlidXRlLCBldmVudC50YXJnZXQpOwogCisgICAg
ICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lLmlzWE1MTWltZVR5cGUgfHwgIVdlYkluc3BlY3Rvci5F
bGVtZW50c1RyZWVFbGVtZW50LkVkaXRUYWdCbGFja2xpc3RbdGhpcy5yZXByZXNlbnRlZE9iamVj
dC5sb2NhbE5hbWVdKSB7CisgICAgICAgICAgICB2YXIgdGFnTmFtZSA9IGV2ZW50LnRhcmdldC5l
bmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtaHRtbC10YWctbmFtZSIpOworICAg
ICAgICAgICAgaWYgKHRhZ05hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0
RWRpdGluZ1RhZ05hbWUodGFnTmFtZSk7CisgICAgICAgIH0KKwogICAgICAgICB2YXIgbmV3QXR0
cmlidXRlID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoImFkZC1h
dHRyaWJ1dGUiKTsKICAgICAgICAgaWYgKG5ld0F0dHJpYnV0ZSkKICAgICAgICAgICAgIHJldHVy
biB0aGlzLl9hZGROZXdBdHRyaWJ1dGUoKTsKQEAgLTc0MSw3ICs3NDcsNyBAQCBXZWJJbnNwZWN0
b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjb250ZXh0
TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRWRpdCBBdHRyaWJ1dGUiKSwg
dGhpcy5fc3RhcnRFZGl0aW5nQXR0cmlidXRlLmJpbmQodGhpcywgYXR0cmlidXRlLCBldmVudC50
YXJnZXQpKTsKICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kU2VwYXJhdG9yKCk7CiAKLSAgICAg
ICAgLy8gQWRkIG5vZGUtcmVsYXRlZCBhY3Rpb25zLgorICAgICAgICAvLyBBZGQgZnJlZS1mb3Jt
IG5vZGUtcmVsYXRlZCBhY3Rpb25zLgogICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiRWRpdCBhcyBIVE1MIiksIHRoaXMuX2VkaXRBc0hUTUwuYmlu
ZCh0aGlzKSk7CiAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJDb3B5IGFzIEhUTUwiKSwgdGhpcy5fY29weUhUTUwuYmluZCh0aGlzKSk7CiAgICAg
ICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEZWxldGUg
Tm9kZSIpLCB0aGlzLnJlbW92ZS5iaW5kKHRoaXMpKTsKQEAgLTg1OSw2ICs4NjUsNDAgQEAgV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9LAogCisgICAgX3N0YXJ0RWRpdGluZ1RhZ05hbWU6IGZ1bmN0aW9uKHRh
Z05hbWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5pc0JlaW5nRWRp
dGVkKHRhZ05hbWVFbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IHRoaXMuX2VkaXRpbmcgPSB0cnVlOworCisgICAgICAgIHZhciBjbG9zaW5nVGFnRWxlbWVudCA9
IHRoaXMuX2Rpc3RpbmN0Q2xvc2luZ1RhZ0VsZW1lbnQoKTsKKworICAgICAgICBmdW5jdGlvbiBr
ZXl1cExpc3RlbmVyKGV2ZW50KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2xvc2luZ1Rh
Z0VsZW1lbnQpCisgICAgICAgICAgICAgICAgY2xvc2luZ1RhZ0VsZW1lbnQudGV4dENvbnRlbnQg
PSAiPC8iICsgdGFnTmFtZUVsZW1lbnQudGV4dENvbnRlbnQgKyAiPiI7CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiBlZGl0aW5nQ29taXR0ZWQoZWxlbWVudCwgbmV3VGFnTmFtZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgdGFnTmFtZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcign
a2V5dXAnLCBrZXl1cExpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgICAgICB0aGlzLl90YWdOYW1l
RWRpdGluZ0NvbW1pdHRlZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gZWRpdGluZ0NhbmNlbGxlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRhZ05hbWVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywga2V5dXBMaXN0ZW5l
ciwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0NhbmNlbGxlZC5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOworICAgICAgICB9CisKKyAgICAgICAgdGFnTmFtZUVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigna2V5dXAnLCBrZXl1cExpc3RlbmVyLCBmYWxzZSk7CisKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0YWdOYW1lRWxlbWVudCwgZWRpdGluZ0NvbWl0dGVkLmJp
bmQodGhpcyksIGVkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzKSwgdGFnTmFtZUVsZW1lbnQudGV4
dENvbnRlbnQpOworICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVu
dCh0YWdOYW1lRWxlbWVudCwgMCwgdGFnTmFtZUVsZW1lbnQsIDEpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9LAorCiAgICAgX3N0YXJ0RWRpdGluZ0FzSFRNTDogZnVuY3Rpb24oY29tbWl0
Q2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9odG1sRWRp
dEVsZW1lbnQgJiYgV2ViSW5zcGVjdG9yLmlzQmVpbmdFZGl0ZWQodGhpcy5faHRtbEVkaXRFbGVt
ZW50KSkKQEAgLTk0Niw3ICs5ODYsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVu
dC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAobW92ZVRvQXR0cmlidXRlKQogICAgICAg
ICAgICAgICAgIHRoaXMuX3RyaWdnZXJFZGl0QXR0cmlidXRlKG1vdmVUb0F0dHJpYnV0ZSk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChuZXdBdHRyaWJ1dGUpCi0gICAgICAgICAgICAgICAgdGhpcy5f
YWRkTmV3QXR0cmlidXRlKHRoaXMubGlzdEl0ZW1FbGVtZW50KTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9hZGROZXdBdHRyaWJ1dGUoKTsKICAgICAgICAgfQogCiAgICAgICAgIHZhciBwYXJzZUNv
bnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CkBAIC05ODIs
NiArMTAyMiw3MCBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIG1vdmVUb05leHRBdHRyaWJ1dGVJZk5lZWRlZC5jYWxsKHRoaXMpOwogICAg
IH0sCiAKKyAgICBfdGFnTmFtZUVkaXRpbmdDb21taXR0ZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5l
d1RleHQsIG9sZFRleHQsIHRhZ05hbWUsIG1vdmVEaXJlY3Rpb24pCisgICAgeworICAgICAgICBk
ZWxldGUgdGhpcy5fZWRpdGluZzsKKworICAgICAgICBmdW5jdGlvbiBjYW5jZWwoKQorICAgICAg
ICB7CisgICAgICAgICAgICB2YXIgY2xvc2luZ1RhZ0VsZW1lbnQgPSB0aGlzLl9kaXN0aW5jdENs
b3NpbmdUYWdFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAoY2xvc2luZ1RhZ0VsZW1lbnQpCisg
ICAgICAgICAgICAgICAgY2xvc2luZ1RhZ0VsZW1lbnQudGV4dENvbnRlbnQgPSAiPC8iICsgdGFn
TmFtZSArICI+IjsKKworICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0NhbmNlbGxlZChlbGVtZW50
LCB0YWdOYW1lKTsKKyAgICAgICAgICAgIG1vdmVUb05leHRBdHRyaWJ1dGVJZk5lZWRlZC5jYWxs
KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbW92ZVRvTmV4dEF0dHJpYnV0
ZUlmTmVlZGVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1vdmVEaXJlY3Rpb24gIT09
ICJmb3J3YXJkIikKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHZhciBh
dHRyaWJ1dGVzID0gdGhpcy5yZXByZXNlbnRlZE9iamVjdC5hdHRyaWJ1dGVzOworICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMubGVuZ3RoID4gMCkKKyAgICAgICAgICAgICAgICB0aGlzLl90cmln
Z2VyRWRpdEF0dHJpYnV0ZShhdHRyaWJ1dGVzWzBdLm5hbWUpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHRoaXMuX2FkZE5ld0F0dHJpYnV0ZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgbmV3VGV4dCA9IG5ld1RleHQudHJpbSgpOworICAgICAgICBpZiAobmV3VGV4dCA9PT0g
b2xkVGV4dCkgeworICAgICAgICAgICAgY2FuY2VsLmNhbGwodGhpcyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudChuZXdUZXh0KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAg
ICBjYW5jZWwuY2FsbCh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciB0cmVlT3V0bGluZSA9IHRoaXMudHJlZU91dGxpbmU7CisgICAgICAgIHZhciB3
YXNFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7CisKKyAgICAgICAgZnVuY3Rpb24gY2hhbmdlVGFn
TmFtZUNhbGxiYWNrKG5vZGVJZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGVJZCA9
PT0gLTEpIHsKKyAgICAgICAgICAgICAgICBjYW5jZWwuY2FsbCh0aGlzKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNlbGVjdCBpdCBh
bmQgZXhwYW5kIGlmIG5lY2Vzc2FyeS4gV2UgZm9yY2UgdHJlZSB1cGRhdGUgc28gdGhhdCBpdCBw
cm9jZXNzZXMgZG9tIGV2ZW50cyBhbmQgaXMgdXAgdG8gZGF0ZS4KKyAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5wYW5lbHMuZWxlbWVudHMudXBkYXRlTW9kaWZpZWROb2RlcygpOworCisgICAgICAg
ICAgICBXZWJJbnNwZWN0b3IudXBkYXRlRm9jdXNlZE5vZGUobm9kZUlkKTsKKyAgICAgICAgICAg
IHZhciBuZXdUcmVlSXRlbSA9IHRyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVudChXZWJJbnNwZWN0
b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZCkpOworICAgICAgICAgICAgaWYgKHdhc0V4cGFu
ZGVkKQorICAgICAgICAgICAgICAgIG5ld1RyZWVJdGVtLmV4cGFuZCgpOworCisgICAgICAgICAg
ICBtb3ZlVG9OZXh0QXR0cmlidXRlSWZOZWVkZWQuY2FsbChuZXdUcmVlSXRlbSk7CisgICAgICAg
IH0KKworICAgICAgICB2YXIgY2FsbElkID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2hh
bmdlVGFnTmFtZUNhbGxiYWNrKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5jaGFuZ2VUYWdO
YW1lKGNhbGxJZCwgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5pZCwgbmV3VGV4dCwgd2FzRXhwYW5k
ZWQpOworICAgIH0sCisKICAgICBfdGV4dE5vZGVFZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlvbihl
bGVtZW50LCBuZXdUZXh0KQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMuX2VkaXRpbmc7CkBA
IC0xMDA4LDYgKzExMTIsMjQgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7CiAgICAgfSwKIAorICAgIF9k
aXN0aW5jdENsb3NpbmdUYWdFbGVtZW50OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICAvLyBG
SVhNRTogSW1wcm92ZSB0aGUgVHJlZSBFbGVtZW50IC8gT3V0bGluZSBBYnN0cmFjdGlvbiB0byBw
cmV2ZW50IGNyYXdsaW5nIHRoZSBET00KKworICAgICAgICAvLyBGb3IgYW4gZXhwYW5kZWQgZWxl
bWVudCwgaXQgd2lsbCBiZSB0aGUgbGFzdCBlbGVtZW50IHdpdGggY2xhc3MgImNsb3NlIgorICAg
ICAgICAvLyBpbiB0aGUgY2hpbGQgZWxlbWVudCBsaXN0LgorICAgICAgICBpZiAodGhpcy5leHBh
bmRlZCkgeworICAgICAgICAgICAgdmFyIGNsb3NlcnMgPSB0aGlzLl9jaGlsZHJlbkxpc3ROb2Rl
LnF1ZXJ5U2VsZWN0b3JBbGwoIi5jbG9zZSIpOworICAgICAgICAgICAgcmV0dXJuIGNsb3NlcnNb
Y2xvc2Vycy5sZW5ndGgtMV07CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1haW5pbmcgY2Fz
ZXMgYXJlIHNpbmdsZSBsaW5lIG5vbi1leHBhbmRlZCBlbGVtZW50cyB3aXRoIGEgY2xvc2luZwor
ICAgICAgICAvLyB0YWcsIG9yIEhUTUwgZWxlbWVudHMgd2l0aG91dCBhIGNsb3NpbmcgdGFnIChz
dWNoIGFzIDxicj4pLiBSZXR1cm4KKyAgICAgICAgLy8gbnVsbCBpbiB0aGUgY2FzZSB3aGVyZSB0
aGVyZSBpc24ndCBhIGNsb3NpbmcgdGFnLgorICAgICAgICB2YXIgdGFncyA9IHRoaXMubGlzdEl0
ZW1FbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIndlYmtpdC1odG1sLXRhZyIpOworICAg
ICAgICByZXR1cm4gKHRhZ3MubGVuZ3RoID09PSAxID8gbnVsbCA6IHRhZ3NbdGFncy5sZW5ndGgt
MV0pOworICAgIH0sCisKICAgICB1cGRhdGVUaXRsZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgLy8gSWYgd2UgYXJlIGVkaXRpbmcsIHJldHVybiBlYXJseSB0byBwcmV2ZW50IGNhbmNlbGlu
ZyB0aGUgZWRpdC4KQEAgLTEwNjAsMjUgKzExODIsMjUgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRz
VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdmFyIG5vZGUgPSB0aGlz
LnJlcHJlc2VudGVkT2JqZWN0OwogICAgICAgICB2YXIgaW5mbyA9IHt0aXRsZTogIiIsIGhhc0No
aWxkcmVuOiB0aGlzLmhhc0NoaWxkcmVufTsKLSAgICAgICAgCisKICAgICAgICAgc3dpdGNoIChu
b2RlLm5vZGVUeXBlKSB7CiAgICAgICAgICAgICBjYXNlIE5vZGUuRE9DVU1FTlRfTk9ERToKICAg
ICAgICAgICAgICAgICBpbmZvLnRpdGxlID0gIkRvY3VtZW50IjsKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5U
X0ZSQUdNRU5UX05PREU6CiAgICAgICAgICAgICAgICAgaW5mby50aXRsZSA9ICJEb2N1bWVudCBG
cmFnbWVudCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgTm9k
ZS5FTEVNRU5UX05PREU6CiAgICAgICAgICAgICAgICAgdmFyIHRhZ05hbWUgPSB0aGlzLnRyZWVP
dXRsaW5lLm5vZGVOYW1lVG9Db3JyZWN0Q2FzZShub2RlLm5vZGVOYW1lKS5lc2NhcGVIVE1MKCk7
Ci0gICAgICAgICAgICAgICAgaW5mby50aXRsZSA9ICI8c3BhbiBjbGFzcz1cIndlYmtpdC1odG1s
LXRhZ1wiPiZsdDsiICsgdGFnTmFtZTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpbmZvLnRpdGxlID0gIjxzcGFuIGNsYXNzPVwid2Via2l0LWh0bWwtdGFnXCI+Jmx0OyI7Cisg
ICAgICAgICAgICAgICAgaW5mby50aXRsZSArPSAiPHNwYW4gY2xhc3M9XCJ3ZWJraXQtaHRtbC10
YWctbmFtZVwiPiIgKyB0YWdOYW1lICsgIjwvc3Bhbj4iOwogICAgICAgICAgICAgICAgIGlmIChu
b2RlLmhhc0F0dHJpYnV0ZXMoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG5vZGUuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGF0dHIgPSBub2RlLmF0dHJpYnV0ZXNbaV07CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvLnRpdGxlICs9ICIgPHNwYW4gY2xhc3M9XCJ3ZWJraXQtaHRtbC1hdHRyaWJ1dGVc
Ij48c3BhbiBjbGFzcz1cIndlYmtpdC1odG1sLWF0dHJpYnV0ZS1uYW1lXCI+IiArIGF0dHIubmFt
ZS5lc2NhcGVIVE1MKCkgKyAiPC9zcGFuPj0mIzgyMDM7XCIiOwotICAgICAgICAgICAgICAgICAg
ICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF0dHIudmFsdWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlua2lmeSAmJiAoYXR0ci5uYW1lID09PSAi
c3JjIiB8fCBhdHRyLm5hbWUgPT09ICJocmVmIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8oW1wvOzpcKVxdXH1dKS9nLCAiJDFcdTIw
MEIiKTsKQEAgLTEwOTIsNyArMTIxNCw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVt
ZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBpbmZvLnRpdGxlICs9ICImZ3Q7PC9zcGFuPiYjODIwMzsiOwot
ICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY29uc3QgY2xvc2luZ1RhZ0hUTUwg
PSAiPHNwYW4gY2xhc3M9XCJ3ZWJraXQtaHRtbC10YWdcIj4mbHQ7LyIgKyB0YWdOYW1lICsgIiZn
dDs8L3NwYW4+JiM4MjAzOyI7CiAgICAgICAgICAgICAgICAgdmFyIHRleHRDaGlsZCA9IG9ubHlU
ZXh0Q2hpbGQuY2FsbChub2RlKTsKICAgICAgICAgICAgICAgICB2YXIgc2hvd0lubGluZVRleHQg
PSB0ZXh0Q2hpbGQgJiYgdGV4dENoaWxkLnRleHRDb250ZW50Lmxlbmd0aCA8IFByZWZlcmVuY2Vz
Lm1heElubGluZVRleHRDaGlsZExlbmd0aDsKQEAgLTExMTEsNyArMTIzMyw3IEBAIFdlYkluc3Bl
Y3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICAg
ICAgaW5mby5oYXNDaGlsZHJlbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FzZSBOb2Rl
LlRFWFRfTk9ERToKICAgICAgICAgICAgICAgICBpZiAoaXNOb2RlV2hpdGVzcGFjZS5jYWxsKG5v
ZGUpKQogICAgICAgICAgICAgICAgICAgICBpbmZvLnRpdGxlID0gIih3aGl0ZXNwYWNlKSI7CkBA
IC0xMTMwLDEyICsxMjUyLDEyIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnBy
b3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNzc1N5bnRheEhpZ2hs
aWdodGVyID0gbmV3IFdlYkluc3BlY3Rvci5ET01TeW50YXhIaWdobGlnaHRlcigidGV4dC9jc3Mi
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNzc1N5bnRheEhpZ2hsaWdodGVyLnN5bnRheEhp
Z2hsaWdodE5vZGUobmV3Tm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5mby50aXRsZSA9ICI8c3BhbiBjbGFzcz1cIndlYmtpdC1odG1s
LXRleHQtbm9kZSB3ZWJraXQtaHRtbC1jc3Mtbm9kZVwiPiIgKyBuZXdOb2RlLmlubmVySFRNTC5y
ZXBsYWNlKC9eW1xuXHJdKi8sICIiKS5yZXBsYWNlKC9ccyokLywgIiIpICsgIjwvc3Bhbj4iOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5m
by50aXRsZSA9ICJcIjxzcGFuIGNsYXNzPVwid2Via2l0LWh0bWwtdGV4dC1ub2RlXCI+IiArIG5v
ZGUubm9kZVZhbHVlLmVzY2FwZUhUTUwoKSArICI8L3NwYW4+XCIiOyAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm8udGl0bGUgPSAiXCI8c3BhbiBjbGFzcz1cIndlYmtpdC1odG1sLXRleHQt
bm9kZVwiPiIgKyBub2RlLm5vZGVWYWx1ZS5lc2NhcGVIVE1MKCkgKyAiPC9zcGFuPlwiIjsKICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIE5vZGUuQ09NTUVO
VF9OT0RFOgpAQCAtMTI0NywzICsxMzY5LDUgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVs
ZW1lbnQucHJvdG90eXBlID0gewogfQogCiBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVu
dC5wcm90b3R5cGUuX19wcm90b19fID0gVHJlZUVsZW1lbnQucHJvdG90eXBlOworCitXZWJJbnNw
ZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5FZGl0VGFnQmxhY2tsaXN0ID0gWyJodG1sIiwgImhl
YWQiLCAiYm9keSJdLmtleVNldCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL3RyZWVvdXRsaW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RyZWVv
dXRsaW5lLmpzCmluZGV4IGI2ZTM1YmIuLmIxOTFjODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvdHJlZW91dGxpbmUuanMKQEAgLTI4Nyw3ICsyODcsNyBAQCBUcmVlT3V0bGluZS5w
cm90b3R5cGUuZmluZFRyZWVFbGVtZW50ID0gZnVuY3Rpb24ocmVwcmVzZW50ZWRPYmplY3QsIGlz
QW5jZXN0b3IsCiAgICAgaWYgKGNhY2hlZEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBjYWNoZWRF
bGVtZW50OwogCi0gICAgLy8gVGhlIHJlcHJlc2VudGVkT2JqZWN0IGlzbid0IGtub3csIHNvIHdl
IHN0YXJ0IGF0IHRoZSB0b3Agb2YgdGhlIHRyZWUgYW5kIHdvcmsgZG93biB0byBmaW5kIHRoZSBm
aXJzdAorICAgIC8vIFRoZSByZXByZXNlbnRlZE9iamVjdCBpc24ndCBrbm93biwgc28gd2Ugc3Rh
cnQgYXQgdGhlIHRvcCBvZiB0aGUgdHJlZSBhbmQgd29yayBkb3duIHRvIGZpbmQgdGhlIGZpcnN0
CiAgICAgLy8gdHJlZSBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyByZXByZXNlbnRlZE9iamVjdCBv
ciBvbmUgb2YgaXRzIGFuY2VzdG9ycy4KICAgICB2YXIgaXRlbTsKICAgICB2YXIgZm91bmQgPSBm
YWxzZTsK
</data>
<flag name="review"
          id="35207"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51852</attachid>
            <date>2010-03-27 20:39:40 -0700</date>
            <delta_ts>2010-03-28 00:56:48 -0700</delta_ts>
            <desc>[PATCH] Part 2 - Fix Tabbing and Attribute Editing</desc>
            <filename>editattr.patch</filename>
            <type>text/plain</type>
            <size>6534</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTFmMGI4ZS4uODg0MWZkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTQsNiArNCwyMiBAQAogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IEVkaXQgVGFnIE5hbWVzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNjQ4MQorCisgICAgICAgIEFsbG93IHRhYmJpbmcgYmFjayBhbmQgZm9ydGggYmV0
d2VlbiB0aGUgdGFnIG5hbWUgYW5kIGVsZW1lbnQKKyAgICAgICAgYXR0cmlidXRlcyB3aGVuIGVk
aXRpbmcuIEFsc28sIGZpeGVkIGEgbnVtYmVyIG9mIG1pbm9yIGlzc3VlcyB3aXRoCisgICAgICAg
IGVkaXRpbmcgYXR0cmlidXRlcyBhbmQgdGFiYmluZy4KKworICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5F
bGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nVGFnTmFtZSk6IGZpbmQg
dGhlIHRhZyBuYW1lIGlmIGl0IHdhc24ndCBwcm92aWRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fYXR0cmlidXRlRWRpdGluZ0NvbW1pdHRl
ZCk6IGZpeCB0YWJiaW5nIGlzc3VlcywgZW5hYmxlIHRhYiB0byB0YWcgbmFtZS4KKyAgICAgICAg
KFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fYXR0cmlidXRlRWRp
dGluZ0NvbW1pdHRlZC5yZWdlbmVyYXRlU3R5bGVkQXR0cmlidXRlKTogY2xlYW51cCBzdHlsZXMg
d2hlbiB0YWJiaW5nLgorCisyMDEwLTAzLTI3ICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgV2ViIEluc3BlY3RvcjogRWRpdCBUYWcgTmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NDgxCiAgICAgICAgIAogICAgICAgICBBbGxvdyBl
ZGl0aW5nIGFuIEVsZW1lbnQncyBUYWcgTmFtZSBieSBkb3VibGUgY2xpY2tpbmcKICAgICAgICAg
b24gdGhlIHRhZyBuYW1lIGluIHRoZSBFbGVtZW50J3MgVHJlZSBIaWVyYXJjaHkuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzCmluZGV4
IDgyYTQzNWYuLjk3YjIzYzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzCkBAIC04MTAsNyArODEwLDcgQEAgV2ViSW5zcGVjdG9y
LkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0uaGFzU3R5bGVDbGFz
cygid2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVlIikpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fc3RhcnRFZGl0aW5nQXR0cmlidXRlKGF0dHJpYnV0ZUVsZW1lbnRzW2ld
LnBhcmVudE5vZGUsIGVsZW0pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3N0YXJ0RWRpdGluZ0F0dHJpYnV0ZShlbGVtLnBhcmVudE5vZGUsIGVsZW0pOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtODY3LDYgKzg2NywxMiBAQCBX
ZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAKICAgICBfc3Rh
cnRFZGl0aW5nVGFnTmFtZTogZnVuY3Rpb24odGFnTmFtZUVsZW1lbnQpCiAgICAgeworICAgICAg
ICBpZiAoIXRhZ05hbWVFbGVtZW50KSB7CisgICAgICAgICAgICB0YWdOYW1lRWxlbWVudCA9IHRo
aXMubGlzdEl0ZW1FbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIndlYmtpdC1odG1sLXRh
Zy1uYW1lIilbMF07CisgICAgICAgICAgICBpZiAoIXRhZ05hbWVFbGVtZW50KQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorIAogICAgICAgICBpZiAoV2ViSW5zcGVj
dG9yLmlzQmVpbmdFZGl0ZWQodGFnTmFtZUVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKQEAgLTk1OSwzNCArOTY1LDYyIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVt
ZW50LnByb3RvdHlwZSA9IHsKIAogICAgICAgICAvLyBCZWZvcmUgd2UgZG8gYW55dGhpbmcsIGRl
dGVybWluZSB3aGVyZSB3ZSBzaG91bGQgbW92ZQogICAgICAgICAvLyBuZXh0IGJhc2VkIG9uIHRo
ZSBjdXJyZW50IGVsZW1lbnQncyBzZXR0aW5ncwotICAgICAgICB2YXIgbW92ZVRvQXR0cmlidXRl
OwotICAgICAgICB2YXIgbmV3QXR0cmlidXRlOworICAgICAgICB2YXIgbW92ZVRvQXR0cmlidXRl
LCBtb3ZlVG9UYWdOYW1lLCBtb3ZlVG9OZXdBdHRyaWJ1dGU7CiAgICAgICAgIGlmIChtb3ZlRGly
ZWN0aW9uKSB7CiAgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTsKKworICAgICAgICAgICAg
Ly8gU2VhcmNoIGZvciB0aGUgYXR0cmlidXRlJ3MgcG9zaXRpb24sIGFuZCB0aGVuIGRlY2lkZSB3
aGVyZSB0byBtb3ZlIHRvLgogICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLnJlcHJl
c2VudGVkT2JqZWN0LmF0dHJpYnV0ZXM7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVu
ID0gYXR0cmlidXRlcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXNbaV0ubmFtZSA9PT0gYXR0cmlidXRlTmFtZSkgewogICAgICAgICAgICAg
ICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtb3ZlRGlyZWN0
aW9uID09PSAiYmFja3dhcmQiICYmIGkgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgbW92
ZVRvQXR0cmlidXRlID0gYXR0cmlidXRlc1tpIC0gMV0ubmFtZTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobW92ZURpcmVjdGlvbiA9PT0gImZvcndhcmQiICYmIGkgPCBhdHRyaWJ1dGVz
Lmxlbmd0aCAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlVG9BdHRyaWJ1dGUgPSBh
dHRyaWJ1dGVzW2kgKyAxXS5uYW1lOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtb3Zl
RGlyZWN0aW9uID09PSAiZm9yd2FyZCIgJiYgaSA9PT0gYXR0cmlidXRlcy5sZW5ndGggLSAxKQot
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXR0cmlidXRlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1vdmVEaXJlY3Rpb24gPT09ICJiYWNrd2FyZCIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpID09PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1v
dmVUb1RhZ05hbWUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1vdmVUb0F0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaSAtIDFd
Lm5hbWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW92ZURpcmVjdGlvbiA9PT0g
ImZvcndhcmQiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gYXR0cmlidXRl
cy5sZW5ndGggLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUb05ld0F0dHJp
YnV0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vdmVUb0F0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaSArIDFdLm5hbWU7
CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICghZm91bmQgJiYgbW92ZURpcmVjdGlvbiA9PT0gImJhY2t3YXJk
IiAmJiBhdHRyaWJ1dGVzLmxlbmd0aCA+IDApCi0gICAgICAgICAgICAgICAgbW92ZVRvQXR0cmli
dXRlID0gYXR0cmlidXRlc1thdHRyaWJ1dGVzLmxlbmd0aCAtIDFdLm5hbWU7Ci0gICAgICAgICAg
ICBlbHNlIGlmICghZm91bmQgJiYgbW92ZURpcmVjdGlvbiA9PT0gImZvcndhcmQiICYmICEvXlxz
KiQvLnRlc3QobmV3VGV4dCkpCi0gICAgICAgICAgICAgICAgbmV3QXR0cmlidXRlID0gdHJ1ZTsK
KyAgICAgICAgICAgIC8vIE1vdmluZyBGcm9tIHRoZSAiTmV3IEF0dHJpYnV0ZSIgcG9zaXRpb24u
CisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKG1vdmVEaXJl
Y3Rpb24gPT09ICJiYWNrd2FyZCIgJiYgYXR0cmlidXRlcy5sZW5ndGggPiAwKQorICAgICAgICAg
ICAgICAgICAgICBtb3ZlVG9BdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZXMubGVuZ3Ro
IC0gMV0ubmFtZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtb3ZlRGlyZWN0aW9uID09PSAi
Zm9yd2FyZCIgJiYgIS9eXHMqJC8udGVzdChuZXdUZXh0KSkKKyAgICAgICAgICAgICAgICAgICAg
bW92ZVRvTmV3QXR0cmlidXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0g
ICAgICAgIGZ1bmN0aW9uIG1vdmVUb05leHRBdHRyaWJ1dGVJZk5lZWRlZCgpIHsKKyAgICAgICAg
ZnVuY3Rpb24gbW92ZVRvTmV4dEF0dHJpYnV0ZUlmTmVlZGVkKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gQ2xlYW51cCBlbXB0eSBuZXcgYXR0cmlidXRlIHNlY3Rpb25zLgorICAgICAgICAg
ICAgaWYgKGVsZW1lbnQudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCA9PT0gMCkKKyAgICAgICAg
ICAgICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7CisKKyAgICAg
ICAgICAgIC8vIE1ha2UgdGhlIG1vdmUuCiAgICAgICAgICAgICBpZiAobW92ZVRvQXR0cmlidXRl
KQogICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJFZGl0QXR0cmlidXRlKG1vdmVUb0F0dHJp
YnV0ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChuZXdBdHRyaWJ1dGUpCisgICAgICAgICAgICBl
bHNlIGlmIChtb3ZlVG9OZXdBdHRyaWJ1dGUpCiAgICAgICAgICAgICAgICAgdGhpcy5fYWRkTmV3
QXR0cmlidXRlKCk7CisgICAgICAgICAgICBlbHNlIGlmIChtb3ZlVG9UYWdOYW1lKQorICAgICAg
ICAgICAgICAgIHRoaXMuX3N0YXJ0RWRpdGluZ1RhZ05hbWUoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHJlZ2VuZXJhdGVTdHlsZWRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHZhciBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNTaWJsaW5n
OworICAgICAgICAgICAgaWYgKCFwcmV2aW91cyB8fCBwcmV2aW91cy5ub2RlVHlwZSAhPT0gTm9k
ZS5URVhUX05PREUpCisgICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJl
Zm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpLCBlbGVtZW50KTsKKyAgICAgICAgICAg
IGVsZW1lbnQub3V0ZXJIVE1MID0gIjxzcGFuIGNsYXNzPVwid2Via2l0LWh0bWwtYXR0cmlidXRl
XCI+IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzcGFuIGNsYXNzPVwi
d2Via2l0LWh0bWwtYXR0cmlidXRlLW5hbWVcIj4iICsgYXR0ci5uYW1lLmVzY2FwZUhUTUwoKSAr
ICI8L3NwYW4+PSYjODIwMztcIiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICI8c3BhbiBjbGFzcz1cIndlYmtpdC1odG1sLWF0dHJpYnV0ZS12YWx1ZVwiPiIgKyBhdHRyLnZh
bHVlLmVzY2FwZUhUTUwoKSArICI8L3NwYW4+JiM4MjAzO1wiIiArCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICI8L3NwYW4+IjsKICAgICAgICAgfQogCiAgICAgICAgIHZhciBwYXJz
ZUNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CkBAIC0x
MDExLDYgKzEwNDUsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZm91bmRPcmlnaW5h
bEF0dHJpYnV0ZSB8fCBhdHRyLm5hbWUgPT09IGF0dHJpYnV0ZU5hbWU7CiAgICAgICAgICAgICB0
cnkgewogICAgICAgICAgICAgICAgIHRoaXMucmVwcmVzZW50ZWRPYmplY3Quc2V0QXR0cmlidXRl
KGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7CisgICAgICAgICAgICAgICAgcmVnZW5lcmF0ZVN0eWxl
ZEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpOwogICAgICAgICAgICAgfSBjYXRjaChl
KSB7fSAvLyBpZ25vcmUgaW52YWxpZCBhdHRyaWJ1dGUgKGlubmVySFRNTCBkb2Vzbid0IHRocm93
IGVycm9ycywgYnV0IHRoaXMgY2FuKQogICAgICAgICB9CiAK
</data>
<flag name="review"
          id="35208"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51855</attachid>
            <date>2010-03-28 03:17:23 -0700</date>
            <delta_ts>2010-03-28 03:24:41 -0700</delta_ts>
            <desc>[PATCH] Fix Blacklist</desc>
            <filename>cleanup</filename>
            <type>text/plain</type>
            <size>9760</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWRiMDM3MC4uYzE4MmI3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0wMy0yOCAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IENvbnNvbGlkYXRlIFRyZWUgSGllcmFy
Y2h5IEF0dHJpYnV0ZSBIVE1MIEdlbmVyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NzE5CisKKyAgICAgICAgICBDb25zb2xpZGF0ZXMgdGhl
IGdlbmVyYXRpb24gb2YgRWxlbWVudCBUcmVlIEhpZXJhcmNoeSBhdHRyaWJ1dGUgY29kZQorICAg
ICAgICAgIGdlbmVyYXRpb24gdG8gYSBzaW5nbGUgZnVuY3Rpb246IF9hdHRyaWJ1dGVIVE1MLgor
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9hZGRO
ZXdBdHRyaWJ1dGUpOiBjb252ZXJ0IHRvIHVzZSBhdHRyaWJ1dGVIVE1MLgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9hdHRyaWJ1dGVFZGl0aW5n
Q29tbWl0dGVkLnJlZ2VuZXJhdGVTdHlsZWRBdHRyaWJ1dGUpOiBjb252ZXJ0IHRvIHVzZSBhdHRy
aWJ1dGVIVE1MLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJv
dG90eXBlLl9hdHRyaWJ1dGVFZGl0aW5nQ29tbWl0dGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fYXR0cmlidXRlSFRNTCk6IGEgc2luZ2xl
IHBvaW50IGZvciBnZW5lcmF0aW5nIHRoZSBodG1sIGZvciBhdHRyaWJ1dGVzLgorCisyMDEwLTAz
LTI4ICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogRWRpdCBU
YWcgTmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM2NDgxCisKKyAgICAgICAgICBFbnN1cmUgYmxhY2tsaXN0aW5nIGhhcHBlbnMgYnkgY2hlY2tp
bmcgaXQgaW4gX3N0YXJ0RWRpdGluZ1RhZ05hbWUKKyAgICAgICAgICBpbnN0ZWFkIG9mIGFsbCB0
aGUgcG9zc2libGUgZW50cnkgcG9pbnRzLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRz
VHJlZUVsZW1lbnQucHJvdG90eXBlLl9zdGFydEVkaXRpbmdGcm9tRXZlbnQpOiBkb24ndCBjaGVj
ayBibGFja2xpc3QgaGVyZS4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVt
ZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nVGFnTmFtZSk6IGNoZWNrIGJsYWNrbGlzdCBoZXJl
LgorCiAyMDEwLTAzLTI3ICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMKaW5kZXggYTlmM2FjYi4uMDJk
NDcyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJl
ZU91dGxpbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJl
ZU91dGxpbmUuanMKQEAgLTMzNyw2ICszMzcsMTEgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJl
ZUVsZW1lbnQuRm9yYmlkZGVuQ2xvc2luZ1RhZ0VsZW1lbnRzID0gWwogICAgICJociIsICJpbWci
LCAiaW5wdXQiLCAiaXNpbmRleCIsICJrZXlnZW4iLCAibGluayIsICJtZXRhIiwgInBhcmFtIiwg
InNvdXJjZSIKIF0ua2V5U2V0KCk7CiAKKy8vIFRoZXNlIHRhZ3Mgd2UgZG8gbm90IGFsbG93IGVk
aXRpbmcgdGhlaXIgdGFnIG5hbWUuCitXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5F
ZGl0VGFnQmxhY2tsaXN0ID0gWworICAgICJodG1sIiwgImhlYWQiLCAiYm9keSIKK10ua2V5U2V0
KCk7CisKIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAg
ICBoaWdobGlnaHRTZWFyY2hSZXN1bHRzOiBmdW5jdGlvbihzZWFyY2hRdWVyeSkKICAgICB7CkBA
IC03MjMsMTEgKzcyOCw5IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZSkKICAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9zdGFydEVkaXRpbmdBdHRyaWJ1dGUoYXR0cmlidXRlLCBldmVudC50YXJnZXQpOwogCi0gICAg
ICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lLmlzWE1MTWltZVR5cGUgfHwgIVdlYkluc3BlY3Rvci5F
bGVtZW50c1RyZWVFbGVtZW50LkVkaXRUYWdCbGFja2xpc3RbdGhpcy5yZXByZXNlbnRlZE9iamVj
dC5sb2NhbE5hbWVdKSB7Ci0gICAgICAgICAgICB2YXIgdGFnTmFtZSA9IGV2ZW50LnRhcmdldC5l
bmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtaHRtbC10YWctbmFtZSIpOwotICAg
ICAgICAgICAgaWYgKHRhZ05hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0
RWRpdGluZ1RhZ05hbWUodGFnTmFtZSk7Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIHRhZ05hbWUg
PSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWh0bWwt
dGFnLW5hbWUiKTsKKyAgICAgICAgaWYgKHRhZ05hbWUpCisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fc3RhcnRFZGl0aW5nVGFnTmFtZSh0YWdOYW1lKTsKIAogICAgICAgICB2YXIgbmV3QXR0cmli
dXRlID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoImFkZC1hdHRy
aWJ1dGUiKTsKICAgICAgICAgaWYgKG5ld0F0dHJpYnV0ZSkKQEAgLTc4MywxNyArNzg2LDEzIEBA
IFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKIAogICAgIF9h
ZGROZXdBdHRyaWJ1dGU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBhdHRyID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICBhdHRyLmNsYXNzTmFtZSA9ICJ3
ZWJraXQtaHRtbC1hdHRyaWJ1dGUiOworICAgICAgICAvLyBDYW5ub3QganVzdCBjb252ZXJ0IHRo
ZSB0ZXh0dWFsIGh0bWwgaW50byBhbiBlbGVtZW50IHdpdGhvdXQKKyAgICAgICAgLy8gYSBwYXJl
bnQgbm9kZS4gVXNlIGEgdGVtcG9yYXJ5IHNwYW4gY29udGFpbmVyIGZvciB0aGUgSFRNTC4KKyAg
ICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAg
ICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IHRoaXMuX2F0dHJpYnV0ZUhUTUwoIiAiLCAiIik7
CisgICAgICAgIHZhciBhdHRyID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7CiAgICAgICAgIGF0dHIu
c3R5bGUubWFyZ2luTGVmdCA9ICIycHgiOyAvLyBvdmVycmlkZXMgdGhlIC5lZGl0aW5nIG1hcmdp
biBydWxlCiAgICAgICAgIGF0dHIuc3R5bGUubWFyZ2luUmlnaHQgPSAiMnB4IjsgLy8gb3ZlcnJp
ZGVzIHRoZSAuZWRpdGluZyBtYXJnaW4gcnVsZQotICAgICAgICB2YXIgbmFtZSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgbmFtZS5jbGFzc05hbWUgPSAid2Via2l0
LWh0bWwtYXR0cmlidXRlLW5hbWUgbmV3LWF0dHJpYnV0ZSI7Ci0gICAgICAgIG5hbWUudGV4dENv
bnRlbnQgPSAiICI7Ci0gICAgICAgIHZhciB2YWx1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InNwYW4iKTsKLSAgICAgICAgdmFsdWUuY2xhc3NOYW1lID0gIndlYmtpdC1odG1sLWF0dHJpYnV0
ZS12YWx1ZSI7Ci0gICAgICAgIGF0dHIuYXBwZW5kQ2hpbGQobmFtZSk7Ci0gICAgICAgIGF0dHIu
YXBwZW5kQ2hpbGQodmFsdWUpOwogCiAgICAgICAgIHZhciB0YWcgPSB0aGlzLmxpc3RJdGVtRWxl
bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ3ZWJraXQtaHRtbC10YWciKVswXTsKICAgICAg
ICAgdGhpcy5faW5zZXJ0SW5MYXN0QXR0cmlidXRlUG9zaXRpb24odGFnLCBhdHRyKTsKQEAgLTg3
Miw3ICs4NzEsMTEgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgaWYgKCF0YWdOYW1lRWxlbWVudCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAKKworICAgICAgICB2YXIgdGFnTmFtZSA9IHRhZ05h
bWVFbGVtZW50LnRleHRDb250ZW50OworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLkVsZW1lbnRz
VHJlZUVsZW1lbnQuRWRpdFRhZ0JsYWNrbGlzdFt0YWdOYW1lLnRvTG93ZXJDYXNlKCldKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNCZWlu
Z0VkaXRlZCh0YWdOYW1lRWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAt
OTAwLDcgKzkwMyw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlw
ZSA9IHsKIAogICAgICAgICB0YWdOYW1lRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcs
IGtleXVwTGlzdGVuZXIsIGZhbHNlKTsKIAotICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0
aW5nKHRhZ05hbWVFbGVtZW50LCBlZGl0aW5nQ29taXR0ZWQuYmluZCh0aGlzKSwgZWRpdGluZ0Nh
bmNlbGxlZC5iaW5kKHRoaXMpLCB0YWdOYW1lRWxlbWVudC50ZXh0Q29udGVudCk7CisgICAgICAg
IFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcodGFnTmFtZUVsZW1lbnQsIGVkaXRpbmdDb21pdHRl
ZC5iaW5kKHRoaXMpLCBlZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcyksIHRhZ05hbWUpOwogICAg
ICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudCh0YWdOYW1lRWxlbWVu
dCwgMCwgdGFnTmFtZUVsZW1lbnQsIDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LApA
QCAtOTgyLDcgKzk4NSw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlRGlyZWN0aW9uID09
PSAiZm9yd2FyZCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBhdHRyaWJ1
dGVzLmxlbmd0aCAtIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZVRvTmV3QXR0
cmlidXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZVRvQXR0
cmlidXRlID0gYXR0cmlidXRlc1tpICsgMV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KQEAgLTEwMTcsMTAgKzEwMjAsNyBAQCBXZWJJbnNwZWN0b3IuRWxl
bWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB2YXIgcHJldmlvdXMg
PSBlbGVtZW50LnByZXZpb3VzU2libGluZzsKICAgICAgICAgICAgIGlmICghcHJldmlvdXMgfHwg
cHJldmlvdXMubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKQogICAgICAgICAgICAgICAgIGVs
ZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAi
KSwgZWxlbWVudCk7Ci0gICAgICAgICAgICBlbGVtZW50Lm91dGVySFRNTCA9ICI8c3BhbiBjbGFz
cz1cIndlYmtpdC1odG1sLWF0dHJpYnV0ZVwiPiIgKwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICI8c3BhbiBjbGFzcz1cIndlYmtpdC1odG1sLWF0dHJpYnV0ZS1uYW1lXCI+IiAr
IGF0dHIubmFtZS5lc2NhcGVIVE1MKCkgKyAiPC9zcGFuPj0mIzgyMDM7XCIiICsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiPHNwYW4gY2xhc3M9XCJ3ZWJraXQtaHRtbC1hdHRy
aWJ1dGUtdmFsdWVcIj4iICsgYXR0ci52YWx1ZS5lc2NhcGVIVE1MKCkgKyAiPC9zcGFuPiYjODIw
MztcIiIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9zcGFuPiI7CisgICAg
ICAgICAgICBlbGVtZW50Lm91dGVySFRNTCA9IHRoaXMuX2F0dHJpYnV0ZUhUTUwobmFtZSwgdmFs
dWUpOwogICAgICAgICB9CiAKICAgICAgICAgdmFyIHBhcnNlQ29udGFpbmVyRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKQEAgLTEwNDUsNyArMTA0NSw3IEBAIFdlYklu
c3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGZv
dW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IGF0dHIubmFt
ZSA9PT0gYXR0cmlidXRlTmFtZTsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAg
dGhpcy5yZXByZXNlbnRlZE9iamVjdC5zZXRBdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnZhbHVl
KTsKLSAgICAgICAgICAgICAgICByZWdlbmVyYXRlU3R5bGVkQXR0cmlidXRlKGF0dHIubmFtZSwg
YXR0ci52YWx1ZSk7CisgICAgICAgICAgICAgICAgcmVnZW5lcmF0ZVN0eWxlZEF0dHJpYnV0ZS5j
YWxsKHRoaXMsIGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7CiAgICAgICAgICAgICB9IGNhdGNoKGUp
IHt9IC8vIGlnbm9yZSBpbnZhbGlkIGF0dHJpYnV0ZSAoaW5uZXJIVE1MIGRvZXNuJ3QgdGhyb3cg
ZXJyb3JzLCBidXQgdGhpcyBjYW4pCiAgICAgICAgIH0KIApAQCAtMTIwNyw2ICsxMjA3LDI5IEBA
IFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAg
cmV0dXJuIGhyZWZWYWx1ZTsKICAgICB9LAogCisgICAgX2F0dHJpYnV0ZUhUTUw6IGZ1bmN0aW9u
KG5hbWUsIHZhbHVlLCBub2RlLCBsaW5raWZ5LCB0b29sdGlwVGV4dCkKKyAgICB7CisgICAgICAg
IHZhciBoYXNUZXh0ID0gKHZhbHVlLmxlbmd0aCA+IDApOworICAgICAgICB2YXIgaHRtbCA9ICI8
c3BhbiBjbGFzcz1cIndlYmtpdC1odG1sLWF0dHJpYnV0ZVwiPjxzcGFuIGNsYXNzPVwid2Via2l0
LWh0bWwtYXR0cmlidXRlLW5hbWVcIj4iICsgbmFtZS5lc2NhcGVIVE1MKCkgKyAiPC9zcGFuPiI7
CisKKyAgICAgICAgaWYgKGhhc1RleHQpCisgICAgICAgICAgICBodG1sICs9ICI9JiM4MjAzO1wi
IjsKKworICAgICAgICBpZiAobGlua2lmeSAmJiAobmFtZSA9PT0gInNyYyIgfHwgbmFtZSA9PT0g
ImhyZWYiKSkgeworICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8oW1wvOzpcKVxd
XH1dKS9nLCAiJDFcdTIwMEIiKTsKKyAgICAgICAgICAgIGh0bWwgKz0gbGlua2lmeSh0aGlzLl9y
ZXdyaXRlQXR0ckhyZWYobm9kZSwgdmFsdWUpLCB2YWx1ZSwgIndlYmtpdC1odG1sLWF0dHJpYnV0
ZS12YWx1ZSIsIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImEiLCB0b29sdGlwVGV4
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmVzY2FwZUhU
TUwoKS5yZXBsYWNlKC8oW1wvOzpcKVxdXH1dKS9nLCAiJDEmIzgyMDM7Iik7CisgICAgICAgICAg
ICBodG1sICs9ICI8c3BhbiBjbGFzcz1cIndlYmtpdC1odG1sLWF0dHJpYnV0ZS12YWx1ZVwiPiIg
KyB2YWx1ZSArICI8L3NwYW4+IjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNUZXh0KQor
ICAgICAgICAgICAgaHRtbCArPSAiXCIiOworCisgICAgICAgIGh0bWwgKz0gIjwvc3Bhbj4iOwor
ICAgICAgICByZXR1cm4gaHRtbDsKKyAgICB9LAorCiAgICAgX25vZGVUaXRsZUluZm86IGZ1bmN0
aW9uKGxpbmtpZnksIHRvb2x0aXBUZXh0KQogICAgIHsKICAgICAgICAgdmFyIG5vZGUgPSB0aGlz
LnJlcHJlc2VudGVkT2JqZWN0OwpAQCAtMTIyOCwxOCArMTI1MSw3IEBAIFdlYkluc3BlY3Rvci5F
bGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBpZiAobm9k
ZS5oYXNBdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBhdHRyID0gbm9kZS5hdHRyaWJ1dGVzW2ldOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mby50aXRsZSArPSAiIDxzcGFuIGNsYXNzPVwid2Via2l0LWh0bWwtYXR0cmlidXRlXCI+
PHNwYW4gY2xhc3M9XCJ3ZWJraXQtaHRtbC1hdHRyaWJ1dGUtbmFtZVwiPiIgKyBhdHRyLm5hbWUu
ZXNjYXBlSFRNTCgpICsgIjwvc3Bhbj49JiM4MjAzO1wiIjsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHZhbHVlID0gYXR0ci52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChsaW5raWZ5ICYmIChhdHRyLm5hbWUgPT09ICJzcmMiIHx8IGF0dHIubmFtZSA9PT0gImhyZWYi
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlLnJlcGxh
Y2UoLyhbXC87OlwpXF1cfV0pL2csICIkMVx1MjAwQiIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm8udGl0bGUgKz0gbGlua2lmeSh0aGlzLl9yZXdyaXRlQXR0ckhyZWYobm9kZSwg
YXR0ci52YWx1ZSksIHZhbHVlLCAid2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVlIiwgbm9kZS5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpID09ICJhIiwgdG9vbHRpcFRleHQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFs
dWUgPSB2YWx1ZS5lc2NhcGVIVE1MKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSB2YWx1ZS5yZXBsYWNlKC8oW1wvOzpcKVxdXH1dKS9nLCAiJDEmIzgyMDM7Iik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5mby50aXRsZSArPSAiPHNwYW4gY2xhc3M9XCJ3ZWJr
aXQtaHRtbC1hdHRyaWJ1dGUtdmFsdWVcIj4iICsgdmFsdWUgKyAiPC9zcGFuPiI7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnRpdGxlICs9
ICJcIjwvc3Bhbj4iOworICAgICAgICAgICAgICAgICAgICAgICAgaW5mby50aXRsZSArPSAiICIg
KyB0aGlzLl9hdHRyaWJ1dGVIVE1MKGF0dHIubmFtZSwgYXR0ci52YWx1ZSwgbm9kZSwgbGlua2lm
eSwgdG9vbHRpcFRleHQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGluZm8udGl0bGUgKz0gIiZndDs8L3NwYW4+JiM4MjAzOyI7CkBA
IC0xMzk4LDUgKzE0MTAsMyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90
b3R5cGUgPSB7CiB9CiAKIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlw
ZS5fX3Byb3RvX18gPSBUcmVlRWxlbWVudC5wcm90b3R5cGU7Ci0KLVdlYkluc3BlY3Rvci5FbGVt
ZW50c1RyZWVFbGVtZW50LkVkaXRUYWdCbGFja2xpc3QgPSBbImh0bWwiLCAiaGVhZCIsICJib2R5
Il0ua2V5U2V0KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51856</attachid>
            <date>2010-03-28 03:21:22 -0700</date>
            <delta_ts>2010-03-28 03:24:05 -0700</delta_ts>
            <desc>[PATCH] Fix Blacklist</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>3877</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWRiMDM3MC4uYWJmMmE1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0wMy0yOCAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVkaXQgVGFnIE5hbWVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQ4MQorCisgICAgICAg
ICAgRW5zdXJlIGJsYWNrbGlzdGluZyBoYXBwZW5zIGJ5IGNoZWNraW5nIGl0IGluIF9zdGFydEVk
aXRpbmdUYWdOYW1lCisgICAgICAgICAgaW5zdGVhZCBvZiBhbGwgdGhlIHBvc3NpYmxlIGVudHJ5
IHBvaW50cy4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0
bGluZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3Rv
dHlwZS5fc3RhcnRFZGl0aW5nRnJvbUV2ZW50KTogZG9uJ3QgY2hlY2sgYmxhY2tsaXN0IGhlcmUu
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUuX3N0
YXJ0RWRpdGluZ1RhZ05hbWUpOiBjaGVjayBibGFja2xpc3QgaGVyZS4KKwogMjAxMC0wMy0yNyAg
Sm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9F
bGVtZW50c1RyZWVPdXRsaW5lLmpzCmluZGV4IGE5ZjNhY2IuLjU1NTg4ZmQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzCkBAIC0z
MzcsNiArMzM3LDExIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LkZvcmJpZGRl
bkNsb3NpbmdUYWdFbGVtZW50cyA9IFsKICAgICAiaHIiLCAiaW1nIiwgImlucHV0IiwgImlzaW5k
ZXgiLCAia2V5Z2VuIiwgImxpbmsiLCAibWV0YSIsICJwYXJhbSIsICJzb3VyY2UiCiBdLmtleVNl
dCgpOwogCisvLyBUaGVzZSB0YWdzIHdlIGRvIG5vdCBhbGxvdyBlZGl0aW5nIHRoZWlyIHRhZyBu
YW1lLgorV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQuRWRpdFRhZ0JsYWNrbGlzdCA9
IFsKKyAgICAiaHRtbCIsICJoZWFkIiwgImJvZHkiCitdLmtleVNldCgpOworCiBXZWJJbnNwZWN0
b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgaGlnaGxpZ2h0U2VhcmNo
UmVzdWx0czogZnVuY3Rpb24oc2VhcmNoUXVlcnkpCiAgICAgewpAQCAtNzIzLDExICs3MjgsOSBA
QCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IGlmIChhdHRyaWJ1dGUpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRFZGl0aW5nQXR0
cmlidXRlKGF0dHJpYnV0ZSwgZXZlbnQudGFyZ2V0KTsKIAotICAgICAgICBpZiAodGhpcy50cmVl
T3V0bGluZS5pc1hNTE1pbWVUeXBlIHx8ICFXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVu
dC5FZGl0VGFnQmxhY2tsaXN0W3RoaXMucmVwcmVzZW50ZWRPYmplY3QubG9jYWxOYW1lXSkgewot
ICAgICAgICAgICAgdmFyIHRhZ05hbWUgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2Vs
ZldpdGhDbGFzcygid2Via2l0LWh0bWwtdGFnLW5hbWUiKTsKLSAgICAgICAgICAgIGlmICh0YWdO
YW1lKQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydEVkaXRpbmdUYWdOYW1lKHRh
Z05hbWUpOwotICAgICAgICB9CisgICAgICAgIHZhciB0YWdOYW1lID0gZXZlbnQudGFyZ2V0LmVu
Y2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoIndlYmtpdC1odG1sLXRhZy1uYW1lIik7CisgICAg
ICAgIGlmICh0YWdOYW1lKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0RWRpdGluZ1Rh
Z05hbWUodGFnTmFtZSk7CiAKICAgICAgICAgdmFyIG5ld0F0dHJpYnV0ZSA9IGV2ZW50LnRhcmdl
dC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJhZGQtYXR0cmlidXRlIik7CiAgICAgICAg
IGlmIChuZXdBdHRyaWJ1dGUpCkBAIC04NzIsNyArODc1LDExIEBAIFdlYkluc3BlY3Rvci5FbGVt
ZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmICghdGFnTmFtZUVs
ZW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gCisKKyAg
ICAgICAgdmFyIHRhZ05hbWUgPSB0YWdOYW1lRWxlbWVudC50ZXh0Q29udGVudDsKKyAgICAgICAg
aWYgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LkVkaXRUYWdCbGFja2xpc3RbdGFn
TmFtZS50b0xvd2VyQ2FzZSgpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgICAg
ICBpZiAoV2ViSW5zcGVjdG9yLmlzQmVpbmdFZGl0ZWQodGFnTmFtZUVsZW1lbnQpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTkwMCw3ICs5MDcsNyBAQCBXZWJJbnNwZWN0b3IuRWxl
bWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGFnTmFtZUVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXl1cExpc3RlbmVyLCBmYWxzZSk7CiAKLSAgICAg
ICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0YWdOYW1lRWxlbWVudCwgZWRpdGluZ0NvbWl0
dGVkLmJpbmQodGhpcyksIGVkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzKSwgdGFnTmFtZUVsZW1l
bnQudGV4dENvbnRlbnQpOworICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRhZ05h
bWVFbGVtZW50LCBlZGl0aW5nQ29taXR0ZWQuYmluZCh0aGlzKSwgZWRpdGluZ0NhbmNlbGxlZC5i
aW5kKHRoaXMpLCB0YWdOYW1lKTsKICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldEJh
c2VBbmRFeHRlbnQodGFnTmFtZUVsZW1lbnQsIDAsIHRhZ05hbWVFbGVtZW50LCAxKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfSwKQEAgLTk4Miw3ICs5ODksNyBAQCBXZWJJbnNwZWN0b3Iu
RWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobW92ZURpcmVjdGlvbiA9PT0gImZvcndhcmQiKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaSA9PT0gYXR0cmlidXRlcy5sZW5ndGggLSAxKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1vdmVUb05ld0F0dHJpYnV0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vdmVUb0F0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaSArIDFdLm5hbWU7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xMzk4LDUgKzE0
MDUsMyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiB9
CiAKIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fX3Byb3RvX18g
PSBUcmVlRWxlbWVudC5wcm90b3R5cGU7Ci0KLVdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVt
ZW50LkVkaXRUYWdCbGFja2xpc3QgPSBbImh0bWwiLCAiaGVhZCIsICJib2R5Il0ua2V5U2V0KCk7
Cg==
</data>
<flag name="review"
          id="35211"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>