<?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>60269</bug_id>
          <alias>CPPEventListeners</alias>
          <creation_ts>2011-05-05 08:38:32 -0700</creation_ts>
          <short_desc>[Windows, WinCairo] Implement ability to add C++ event listeners to html dom elements and dom window</short_desc>
          <delta_ts>2011-06-01 14:18:39 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</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>
          
          <blocked>61885</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anthony Johnson">anthony.johnson</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>ap</cc>
    
    <cc>aroben</cc>
    
    <cc>bfulgham</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>398732</commentid>
    <comment_count>0</comment_count>
      <attachid>92420</attachid>
    <who name="Anthony Johnson">anthony.johnson</who>
    <bug_when>2011-05-05 08:38:32 -0700</bug_when>
    <thetext>Created attachment 92420
Patch for adding event listeners

The included patch adds the ability to attach C++ event listeners to an html dom element and to a dom window for the wincairo port.

To give an idea of what I mean, here&apos;s some pseudo-code:
// for dom elements
domElement = webFrame-&gt;DOMDocument()-&gt;getElementById(&quot;myelement&quot;);
domElement-&gt;addEventListener(&quot;click&quot;, myCPPElementEventListener, false);

// for dom windows
domWindow = webFrame-&gt;DOMWindow();
domWindow-&gt;addEventListener(&quot;focus&quot;, myCPPWindowEventListener, false);


Of course, the actual c++ code is a little more involved, but I&apos;ll include that as well (minus all the error checking).
// for dom elements
CComPtr&lt;IDOMElement&gt; domDocument;
webFrame-&gt;DOMDocument(&amp;domDocument);

CComPtr&lt;IDOMElement&gt; domElement;
domDocument-&gt;getElementById(&quot;myelement&quot;, &amp;domElement);
CComPtr&lt;IDOMEventTarget&gt; target;
domElement-&gt;QueryInterface(IID_IDOMEventTarget, &amp;target);
// myCPPElementEventListener is an instantiation of a class I (the end user) define that implements IDOMEventListener
target-&gt;addEventListener(TEXT(&quot;click&quot;), static_cast&lt;IDOMEventListener*&gt;(myCPPElementEventListener), false); 

// for dom windows
CComPtr&lt;IDOMWindow&gt; domWindow;
webFrame-&gt;DOMWindow(&amp;domWindow);
CComPtr&lt;IDOMEventTarget&gt; target;
domWindow-&gt;QueryInterface(IID_IDOMEventTarget, &amp;target);
// myCPPWindowEventListener is an instantiation of a class I (the end user) define that implements IDOMEventListener
target-&gt;addEventListener(TEXT(&quot;focus&quot;), static_cast&lt;IDOMEventListener*&gt;(myCPPWindowEventListener), false);

Now, an explanation of my design.
1. I added a class called CPPEventListener, which inherits WebCore::EventListener and is a wrapper for an IDOMEventListener*, passing events on to that user-defined interface. As far as location of the class definition, I defined the class in DOMEventsClasses.h, and defined the methods in DOMEventsClasses.cpp. Not sure if that&apos;s the best spot to put it.
2. I filled in the DOMNode::addEventListener() and DOMNode::removeEventListener() methods, which instantiates the CPPEventListener class and adds it to the webcore node&apos;s event listeners.
3. I defined a DOMWindow class that implements the IDOMWindow interface as well as the IDOMEventTarget interface, and is a wrapper around WebCore::DOMWindow.
4. I added a DOMWindow() method to the IWebFrame interface and WebFrame class, which instantiates a DOMWindow object and returns its IDOMWindow interface.

Additional points:
- You may want to look at my use of RefPtr in DOMNode::addEventListener(), DOMNode::removeEventListener(), DOMWindow::addEventListener(), and DOMWindow::removeEventListener(). I&apos;m not yet an expert on RefPtr, so I may not have done it in the best-practices method.
- My creation of the CPPEventListener sub-class WebCore::EventListener seems to me to be the most precarious, because I don&apos;t know if it&apos;s proper to sub-class a WebCore class in a platform-specific port. But that seemed to be the only way I could think of to get it to dispatch events to my own code.

Thanks,
Anthony Johnson</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398864</commentid>
    <comment_count>1</comment_count>
      <attachid>92420</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-05 11:30:32 -0700</bug_when>
    <thetext>Comment on attachment 92420
Patch for adding event listeners

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

&gt; Source/WebKit/win/DOMCoreClasses.cpp:409
&gt; +    RefPtr&lt;CPPEventListener&gt; cpplistener = adoptRef(new CPPEventListener(listener));

I don&apos;t think it&apos;s necessary to prefix the classname with CPP.  Maybe call it something like &quot;CustomEventListener&quot; or &quot;UserEventListener&quot;, or even &quot;EventListenerAdapter&quot;?

&gt; Source/WebKit/win/DOMCoreClasses.cpp:423
&gt; +    m_node-&gt;removeEventListener(type, (WebCore::EventListener*)cpplistener.get(), useCapture);

You should use a C++ cast here.

&gt; Source/WebKit/win/DOMCoreClasses.cpp:894
&gt; +    RefPtr&lt;CPPEventListener&gt; cppListener = adoptRef(new CPPEventListener(listener));

Ditto re: naming.

&gt; Source/WebKit/win/DOMCoreClasses.cpp:907
&gt; +    m_window-&gt;removeEventListener(type, (WebCore::EventListener*)cpplistener.get(), useCapture);

Ditto re: Casting

&gt; Source/WebKit/win/DOMCoreClasses.cpp:916
&gt; +        return E_FAIL;

Shouldn&apos;t you be checking result as well?  I&apos;d check evt &amp; result for null and return E_POINTER, and return E_FAIL if m_window is null.

&gt; Source/WebKit/win/DOMCoreClasses.cpp:919
&gt; +    if (![self _node]-&gt;isEventTargetNode())

Do we have a C++ analog for this call?  Which DOM object are we expecting to get here?

&gt; Source/WebKit/win/DOMCoreClasses.cpp:931
&gt; +    WebCore::raiseOnDOMError(ec);

Is this not implemented for the C++ backend? I&apos;m not sure why it&apos;s commented out, since we should be getting an exception code in the previous statement.

&gt; Source/WebKit/win/DOMCoreClasses.cpp:957
&gt; +    hr = newWindow-&gt;QueryInterface(IID_IDOMWindow, (void**)&amp;domWindow);

This should be a C++ cast, even though others in the file are still using C-style casts.

&gt; Source/WebKit/win/DOMEventsClasses.cpp:74
&gt; +    DOMUIEvent * domUIEvent = new DOMUIEvent(ePtr);

This would be better as a COMPtr (see #include &lt;WebCore/COMPtr.h&gt;).

&gt; Source/WebKit/win/DOMEventsClasses.cpp:76
&gt; +    IDOMEvent* iDOMUIEvent = 0;

Ditto regarding COMPtr.

&gt; Source/WebKit/win/DOMEventsClasses.cpp:77
&gt; +    domUIEvent-&gt;QueryInterface(IID_IDOMEvent, (void**)&amp;iDOMUIEvent);

This should be a C++-style cast.

&gt; Source/WebKit/win/Interfaces/IWebFrame.idl:104
&gt; +

Note: You need to add new methods at the bottom of the IDL file to avoid breaking existing Windows clients.

&gt; Source/WebKit/win/WebFrame.cpp:483
&gt; +HRESULT STDMETHODCALLTYPE WebFrame::DOMWindow(

You don&apos;t need to declare the STDMETHODCALLTYPE here (it&apos;s in the header), even though other methods in this file use this redundant declaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398865</commentid>
    <comment_count>2</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-05 11:32:11 -0700</bug_when>
    <thetext>This patch is relevant to both the standard Windows port and the WinCairo port.

I added some style comments, but I&apos;m not really qualified to discuss the architectural merits of this approach, though at a glance it looks like a good idea.

I&apos;m wondering if there might be a way to get rid of the helper class you created, and have this functionality be part of the IDOMEventListener* directly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398904</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-05 12:16:43 -0700</bug_when>
    <thetext>Obviously, the most difficult part here is getting object lifetime issues right. I think that DOM JS garbage collection relies on listeners being JavaScript objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398944</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-05-05 12:48:21 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Obviously, the most difficult part here is getting object lifetime issues right. 

This biggest potential lifetime problem is that the listener may create a reference cycle, if the listener object directly or indirectly references the event target.

This problem is unique to reference counted environments -- GC can break cycles; reference counting cannot.

&gt; I think that DOM JS garbage collection relies on listeners being JavaScript objects.

This shouldn&apos;t be a problem. We already support a bunch of non-JS listener types. Search for &quot;public EventListener&quot; to see them all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398947</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-05-05 12:49:46 -0700</bug_when>
    <thetext>By the way, I think &quot;CPPEventListener&quot; is a bad name. The listener type should be named after the environment in which it will be used, not the programming language. We have lots of event listeners that are implemented in C++.

I would suggest COMEventListener, or something similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398978</commentid>
    <comment_count>6</comment_count>
    <who name="Anthony Johnson">anthony.johnson</who>
    <bug_when>2011-05-05 13:30:51 -0700</bug_when>
    <thetext>If I make these changes mentioned, do I just submit a new patch file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398983</commentid>
    <comment_count>7</comment_count>
    <who name="Anthony Johnson">anthony.johnson</who>
    <bug_when>2011-05-05 13:38:52 -0700</bug_when>
    <thetext>
&gt; I&apos;m wondering if there might be a way to get rid of the helper class you created, and have this functionality be part of the IDOMEventListener* directly?

I don&apos;t see a possibility right now. Since it seems to me like the design is such that the user accessing the API would only go through the COM interface, they would not have access to the definition of WebCore::EventListener, and in order to override WebCore::EventListener::handleEvent(), they&apos;d need access to the class definition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398988</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-05 13:48:12 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; If I make these changes mentioned, do I just submit a new patch file?

Yes.  Just mark the old version as obsolete.  You should also mark the patch as &quot;?&quot; to get it in the review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399003</commentid>
    <comment_count>9</comment_count>
    <who name="Anthony Johnson">anthony.johnson</who>
    <bug_when>2011-05-05 14:06:33 -0700</bug_when>
    <thetext>(In reply to comment #4)

&gt; This biggest potential lifetime problem is that the listener may create a reference cycle, if the listener object directly or indirectly references the event target.
&gt; 
&gt; This problem is unique to reference counted environments -- GC can break cycles; reference counting cannot.
&gt; 

Is there a way to prevent or discourage reference cycles through the implementation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399025</commentid>
    <comment_count>10</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-05 14:16:22 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; I&apos;m wondering if there might be a way to get rid of the helper class you created, and have this functionality be part of the IDOMEventListener* directly?
&gt; 
&gt; I don&apos;t see a possibility right now. Since it seems to me like the design is such that the user accessing the API would only go through the COM interface, they would not have access to the definition of WebCore::EventListener, and in order to override WebCore::EventListener::handleEvent(), they&apos;d need access to the class definition.

The more I look at this, the less I understand the design of the listener handling.  What is the point of an IDOMEventListener, if it can&apos;t be round-tripped through WebCore such that its &apos;handleEvent&apos; method ends up getting called?

Are we just not understanding how this is meant to be connected to WebCore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399094</commentid>
    <comment_count>11</comment_count>
    <who name="Anthony Johnson">anthony.johnson</who>
    <bug_when>2011-05-05 15:10:31 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #7)
&gt; &gt; &gt; I&apos;m wondering if there might be a way to get rid of the helper class you created, and have this functionality be part of the IDOMEventListener* directly?
&gt; &gt; 
&gt; &gt; I don&apos;t see a possibility right now. Since it seems to me like the design is such that the user accessing the API would only go through the COM interface, they would not have access to the definition of WebCore::EventListener, and in order to override WebCore::EventListener::handleEvent(), they&apos;d need access to the class definition.
&gt; 
&gt; The more I look at this, the less I understand the design of the listener handling.  What is the point of an IDOMEventListener, if it can&apos;t be round-tripped through WebCore such that its &apos;handleEvent&apos; method ends up getting called?
&gt; 
&gt; Are we just not understanding how this is meant to be connected to WebCore?

First, please realize that a lot of this was already implemented with empty stubs when I got to it. I&apos;m just trying to fill it out like I imagine the original guy would have. I think the idea is that an end user would only see the COM interfaces, i.e. IDOMEventTarget, IDOMEventListener, presumably so that the interfaces can be accessed via non-c++ functionality as well as c++ functionality. So, if I as an end user just see the interface definitions, then in order to get the stuff to call my handleEvent() method, I essentially have to define my own class that implements the IDOMEventListener interface:

class AnthonyEventListener : public IDOMEventListener {
  handleEvent(IDOMEvent* e);
  ...
};

Then when I need to attach to an element event, I create an instance of AnthonyEventListener, then pass my instantiation to IDOMEventTarget::addEventListener(). At that point I assume that when the event is fired, my handleEvent() method will be fired.

Now, in order for the implementation to do a direct pass-through from WebCore to my class handleEvent() method, my class definition would also need to inherit from WebCore::EventListener.

class AnthonyEventListener : public WebCore::EventListener, public IDOMEventListener{
  handleEvent(WebCore::ScriptExecutionContext* s, WebCore::Event* e);// EventListener override
  handleEvent(IDOMEvent* e); // IDOMEventListener override
  ...
}

There are a few issues with this. First, the end-user would need to sub-class WebCore::EventListener, which by design they should not have a definition of (they just see the COM interfaces). Second, IDOMEventTarget::addEventListener() would have to assume that the IDOMEventListener passed would also be a sub-class of WebCore::EventListener, because it needs to translate it into that in order to call WebCore::Node::addEventListener(), which isn&apos;t very good design and would break for non-c++ COM bindings.

So, it seemed to me that the best way to do it would be to create a go-between class within the COM implementation, that handles the translation from IDOMEventListener to WebCore::EventListener. The class inherits from WebCore::EventListener, so it can be added using WebCore::Node::addEventListener() and its handleEvent() method will be properly called, and it also holds a pointer to an IDOMEventListener (the user&apos;s implementation), so that it can pass the handleEvent to the IDOMEventListener. In this way, the end-user can just worry about implementing his own IDOMEventListener interface, and the go-between will automatically handle the COM-to-WebCore translation and back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399098</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-05 15:21:01 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; Are we just not understanding how this is meant to be connected to WebCore?
&gt; 
&gt; First, please realize that a lot of this was already implemented with empty stubs when I got to it. I&apos;m just trying to fill it out like I imagine the original guy would have. I think the idea is that an end user would only see the COM interfaces, i.e. IDOMEventTarget, IDOMEventListener, presumably so that the interfaces can be accessed via non-c++ functionality as well as c++ functionality. 

Right -- I understand you are working with the existing stubs.  I just meant that I don&apos;t get why you were forced to go through an extra layer to connect up to WebCore.  This should work along the lines of WebHistory or one of the other API calls, where the COM object is converted internally to the correct WebCore type.

I guess you are basically creating this layer, though I would have thought that WebCore would already have had an analogous object that could be filled in with the contents of the IDOMEventListener such that it would get triggered appropriately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399122</commentid>
    <comment_count>13</comment_count>
    <who name="Anthony Johnson">anthony.johnson</who>
    <bug_when>2011-05-05 15:51:50 -0700</bug_when>
    <thetext>
&gt; Right -- I understand you are working with the existing stubs.  I just meant that I don&apos;t get why you were forced to go through an extra layer to connect up to WebCore.  This should work along the lines of WebHistory or one of the other API calls, where the COM object is converted internally to the correct WebCore type.
&gt; 
&gt; I guess you are basically creating this layer, though I would have thought that WebCore would already have had an analogous object that could be filled in with the contents of the IDOMEventListener such that it would get triggered appropriately.

Sure, if there&apos;s a class or translation mechanism that already does it, let me know. I&apos;m still very new and untrained in all this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399509</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-05-06 07:45:45 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; By the way, I think &quot;CPPEventListener&quot; is a bad name. The listener type should be named after the environment in which it will be used, not the programming language. We have lots of event listeners that are implemented in C++.
&gt; 
&gt; I would suggest COMEventListener, or something similar.

A more typical name for a class in WebKit would be &quot;WebEventListener&quot;.

(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; &gt; Are we just not understanding how this is meant to be connected to WebCore?
&gt; &gt; 
&gt; &gt; First, please realize that a lot of this was already implemented with empty stubs when I got to it. I&apos;m just trying to fill it out like I imagine the original guy would have. I think the idea is that an end user would only see the COM interfaces, i.e. IDOMEventTarget, IDOMEventListener, presumably so that the interfaces can be accessed via non-c++ functionality as well as c++ functionality. 
&gt; 
&gt; Right -- I understand you are working with the existing stubs.  I just meant that I don&apos;t get why you were forced to go through an extra layer to connect up to WebCore.  This should work along the lines of WebHistory or one of the other API calls, where the COM object is converted internally to the correct WebCore type.
&gt; 
&gt; I guess you are basically creating this layer, though I would have thought that WebCore would already have had an analogous object that could be filled in with the contents of the IDOMEventListener such that it would get triggered appropriately.

I think the approach taken in this patch makes sense. We do similar things in other parts of the WebKit API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399522</commentid>
    <comment_count>15</comment_count>
      <attachid>92420</attachid>
    <who name="Anthony Johnson">anthony.johnson</who>
    <bug_when>2011-05-06 08:19:53 -0700</bug_when>
    <thetext>Comment on attachment 92420
Patch for adding event listeners

I&apos;m setting this to rejected. I&apos;ll post a new patch once I&apos;ve got it done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399663</commentid>
    <comment_count>16</comment_count>
      <attachid>92613</attachid>
    <who name="Anthony Johnson">anthony.johnson</who>
    <bug_when>2011-05-06 11:28:00 -0700</bug_when>
    <thetext>Created attachment 92613
Patch for adding event listeners v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399769</commentid>
    <comment_count>17</comment_count>
      <attachid>92613</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-06 13:27:59 -0700</bug_when>
    <thetext>Comment on attachment 92613
Patch for adding event listeners v2

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

This looks great.  I hope we can land this soon, as this would be useful in a variety of contexts!

&gt; DOMCoreClasses.cpp:409
&gt; +	RefPtr&lt;WebEventListener&gt; cpplistener = WebEventListener::create(listener);

I&apos;d change &apos;cpplistener&apos; to &apos;webListener&apos;

&gt; DOMCoreClasses.cpp:421
&gt; +		return E_POINTER;

Extra indention

&gt; DOMCoreClasses.cpp:424
&gt; +    RefPtr&lt;WebEventListener&gt; cpplistener = WebEventListener::create(listener);

Ditto: &apos;cpplistener&apos; -&gt; &apos;webListener&apos;

&gt; DOMCoreClasses.cpp:434
&gt; +		return E_POINTER;

Ditto: indent

&gt; DOMCoreClasses.cpp:897
&gt; +		return E_POINTER;

Ditto: Indent

&gt; DOMCoreClasses.cpp:900
&gt; +    RefPtr&lt;WebEventListener&gt; cppListener = adoptRef(new WebEventListener(listener));

cppListener -&gt; webListener

&gt; DOMCoreClasses.cpp:911
&gt; +		return E_POINTER;

Ditto: Indent

&gt; DOMCoreClasses.cpp:914
&gt; +	RefPtr&lt;WebEventListener&gt; cpplistener = WebEventListener::create(listener);

Ditto: cppListener -&gt; webListener

&gt; DOMCoreClasses.cpp:929
&gt; +    if (![self _node]-&gt;isEventTargetNode())

What is your plan for this logic?  I assume this is copied from the Cocoa implementation.  Is there an analogous method we can be calling in our C++ code?

&gt; DOMCoreClasses.cpp:941
&gt; +    WebCore::raiseOnDOMError(ec);

Is this not implemented in C++?  Why is it commented out?

&gt; DOMEventsClasses.cpp:63
&gt; +}

Style guide requires an empty line between these implementations.

&gt; DOMEventsClasses.cpp:67
&gt; +}

Ditto

&gt; DOMEventsClasses.cpp:72
&gt; +}

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399770</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-06 13:29:24 -0700</bug_when>
    <thetext>I haven&apos;t seen anyone address the question of object lifetime raised by ggaren and ap. Do we need to be doing anything in the COM layer to make sure we don&apos;t create problems?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399803</commentid>
    <comment_count>19</comment_count>
      <attachid>92636</attachid>
    <who name="Anthony Johnson">anthony.johnson</who>
    <bug_when>2011-05-06 14:12:27 -0700</bug_when>
    <thetext>Created attachment 92636
Patch for adding event listeners v3

Implemented Brent&apos;s styling suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399807</commentid>
    <comment_count>20</comment_count>
    <who name="Anthony Johnson">anthony.johnson</who>
    <bug_when>2011-05-06 14:20:18 -0700</bug_when>
    <thetext>&gt; What is your plan for this logic?  I assume this is copied from the Cocoa implementation.  Is there an analogous method we can be calling in our C++ code?
&gt; 
&gt; &gt; DOMCoreClasses.cpp:941
&gt; &gt; +    WebCore::raiseOnDOMError(ec);
&gt; 
&gt; Is this not implemented in C++?  Why is it commented out?
&gt; 

It seems like my annotation comments don&apos;t generate a new entry in the main comment stream. Anyway, in case you didn&apos;t see my reply on that, the code was a straight copy from DOMNode::dispatchEvent() at line 429. I only changed m_node to m_window, and left everything else the same. Being a newbie, I&apos;m going for least impact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399808</commentid>
    <comment_count>21</comment_count>
      <attachid>92636</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-06 14:20:38 -0700</bug_when>
    <thetext>Comment on attachment 92636
Patch for adding event listeners v3

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

This looks great!  Let&apos;s get ggaren or Adam to review object lifecycle, and we need to figure out what to do about the &quot;isEventTargetNode&quot; test you have commented out.

&gt; DOMCoreClasses.cpp:929
&gt; +    if (![self _node]-&gt;isEventTargetNode())

I think this is the only remaining question -- what goes here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399811</commentid>
    <comment_count>22</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-06 14:22:31 -0700</bug_when>
    <thetext>It looks like the patch doesn&apos;t apply cleanly against ToT (see http://queues.webkit.org/results/8611068).  Someone must have added IDL changes in the last day or so.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399812</commentid>
    <comment_count>23</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-06 14:23:06 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; &gt; What is your plan for this logic?  I assume this is copied from the Cocoa implementation.  Is there an analogous method we can be calling in our C++ code?
&gt; &gt; 
&gt; &gt; &gt; DOMCoreClasses.cpp:941
&gt; &gt; &gt; +    WebCore::raiseOnDOMError(ec);
&gt; &gt; 
&gt; &gt; Is this not implemented in C++?  Why is it commented out?
&gt; &gt; 
&gt; 
&gt; It seems like my annotation comments don&apos;t generate a new entry in the main comment stream. Anyway, in case you didn&apos;t see my reply on that, the code was a straight copy from DOMNode::dispatchEvent() at line 429. I only changed m_node to m_window, and left everything else the same. Being a newbie, I&apos;m going for least impact.

Ah!  Makes sense.  Let&apos;s see if we can find ggaren/ap/aroben to finish this review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399854</commentid>
    <comment_count>24</comment_count>
    <who name="Anthony Johnson">anthony.johnson</who>
    <bug_when>2011-05-06 15:26:56 -0700</bug_when>
    <thetext>&gt; Ah!  Makes sense.  Let&apos;s see if we can find ggaren/ap/aroben to finish this review.

Reviewers, please don&apos;t forget to look at my WebEventListener::== operator, and advise whether it&apos;s OK for WebEventListener to take exclusivity on the enum type WebCore::EventListener::CPPEventListenerType, or whether I should create a new WebCore::EventListener::WebEventListenerType for my class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399915</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-06 16:56:39 -0700</bug_when>
    <thetext>See also: &lt;http://trac.webkit.org/changeset/48884&gt;, which removed  dysfunctional code for COM event listeners on Windows. Not sure if there is anything to learn from that, but perhaps someone will remember something that&apos;s important for this patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405982</commentid>
    <comment_count>26</comment_count>
      <attachid>92636</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-05-18 13:18:47 -0700</bug_when>
    <thetext>Comment on attachment 92636
Patch for adding event listeners v3

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

The WebCore code here looks fine to me. I&apos;m not sure who should review the COM code.

&gt; DOMEventsClasses.cpp:59
&gt; +    :EventListener(CPPEventListenerType)

Needs a space after &quot;:&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406148</commentid>
    <comment_count>27</comment_count>
      <attachid>94014</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-18 17:45:30 -0700</bug_when>
    <thetext>Created attachment 94014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406150</commentid>
    <comment_count>28</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-18 17:46:48 -0700</bug_when>
    <thetext>I updated Anthony&apos;s patch with one that passes code review, and that should apply cleanly on the EWS bots.

After doing some research, I tracked down the answer about the Cocoa &quot;isEventNodeTarget&quot; accessor (no longer used), and added logic for handling any exception conditions in the dispatch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407357</commentid>
    <comment_count>29</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-20 15:26:55 -0700</bug_when>
    <thetext>I double-checked the COM changes with bweinstein and confirmed that they are okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407392</commentid>
    <comment_count>30</comment_count>
      <attachid>94014</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-20 16:35:38 -0700</bug_when>
    <thetext>Comment on attachment 94014
Patch

Double-checked with bweinstein to confirm COM implementation is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407394</commentid>
    <comment_count>31</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-20 16:39:00 -0700</bug_when>
    <thetext>Landed patch in http://trac.webkit.org/changeset/87000.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407395</commentid>
    <comment_count>32</comment_count>
      <attachid>94014</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-20 16:39:28 -0700</bug_when>
    <thetext>Comment on attachment 94014
Patch

Clearing review flag so I can leave this bug open while a new test is added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410788</commentid>
    <comment_count>33</comment_count>
      <attachid>95029</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-26 13:40:40 -0700</bug_when>
    <thetext>Created attachment 95029
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413656</commentid>
    <comment_count>34</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-06-01 14:16:46 -0700</bug_when>
    <thetext>Closing as the feature is in place. A new bug will be used for a test case, and an example program.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92420</attachid>
            <date>2011-05-05 08:38:32 -0700</date>
            <delta_ts>2011-05-06 11:28:00 -0700</delta_ts>
            <desc>Patch for adding event listeners</desc>
            <filename>eventlisteners.patch</filename>
            <type>text/plain</type>
            <size>14212</size>
            <attacher name="Anthony Johnson">anthony.johnson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNwcA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIFNvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNwcAkocmV2aXNpb24gODU4NDkp
DQorKysgU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMuY3BwCSh3b3JraW5nIGNvcHkp
DQpAQCAtOTAsNiArOTAsOCBAQA0KICAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElE
T01Ob2RlKj4odGhpcyk7CiAgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2Yo
RE9NTm9kZSkpKQogICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8RE9NTm9kZSo+KHRo
aXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElET01FdmVudFRh
cmdldCkpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SURPTUV2ZW50VGFyZ2V0
Kj4odGhpcyk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gRE9NT2JqZWN0OjpRdWVyeUludGVy
ZmFjZShyaWlkLCBwcHZPYmplY3QpOwogCkBAIC0zOTksMjAgKzQwMSwyNyBAQA0KIAogLy8gRE9N
Tm9kZSAtIElET01FdmVudFRhcmdldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTU5vZGU6OmFk
ZEV2ZW50TGlzdGVuZXIoIAotICAgIC8qIFtpbl0gKi8gQlNUUiAvKnR5cGUqLywKLSAgICAvKiBb
aW5dICovIElET01FdmVudExpc3RlbmVyKiAvKmxpc3RlbmVyKi8sCi0gICAgLyogW2luXSAqLyBC
T09MIC8qdXNlQ2FwdHVyZSovKQorSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01Ob2RlOjph
ZGRFdmVudExpc3RlbmVyKAorICAgIC8qIFtpbl0gKi8gQlNUUiB0eXBlLAorICAgIC8qIFtpbl0g
Ki8gSURPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLAorICAgIC8qIFtpbl0gKi8gQk9PTCB1c2VD
YXB0dXJlKQogewotICAgIHJldHVybiBFX05PVElNUEw7CisgICAgUmVmUHRyPENQUEV2ZW50TGlz
dGVuZXI+IGNwcGxpc3RlbmVyID0gYWRvcHRSZWYobmV3IENQUEV2ZW50TGlzdGVuZXIobGlzdGVu
ZXIpKTsKKyAgICBtX25vZGUtPmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY3BwbGlzdGVuZXIsIHVz
ZUNhcHR1cmUpOworCisgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRE9NTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lciggCi0gICAgLyogW2luXSAqLyBCU1RS
IC8qdHlwZSovLAotICAgIC8qIFtpbl0gKi8gSURPTUV2ZW50TGlzdGVuZXIqIC8qbGlzdGVuZXIq
LywKLSAgICAvKiBbaW5dICovIEJPT0wgLyp1c2VDYXB0dXJlKi8pCitIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIERPTU5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoCisgICAgLyogW2luXSAqLyBC
U1RSIHR5cGUsCisgICAgLyogW2luXSAqLyBJRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsCisg
ICAgLyogW2luXSAqLyBCT09MIHVzZUNhcHR1cmUpCiB7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsK
KyAgICBpZiAoIW1fbm9kZSB8fCAhbGlzdGVuZXIpCisgICAgICAgIHJldHVybiBFX0ZBSUw7Cisg
ICAgUmVmUHRyPENQUEV2ZW50TGlzdGVuZXI+IGNwcGxpc3RlbmVyID0gYWRvcHRSZWYobmV3IENQ
UEV2ZW50TGlzdGVuZXIobGlzdGVuZXIpKTsKKyAgICBtX25vZGUtPnJlbW92ZUV2ZW50TGlzdGVu
ZXIodHlwZSwgKFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIqKWNwcGxpc3RlbmVyLmdldCgpLCB1c2VD
YXB0dXJlKTsKKyAgICByZXR1cm4gU19PSzsKIH0KIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBET01Ob2RlOjpkaXNwYXRjaEV2ZW50KCAKQEAgLTgxOCw2ICs4MjcsMTQxIEBADQogICAgIHJl
dHVybiBkb21Eb2N1bWVudDsKIH0KIAorLy8gRE9NV2luZG93IC0gSVVua25vd24gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRE9NV2luZG93OjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwg
dm9pZCoqIHBwdk9iamVjdCkKK3sKKyAgICAqcHB2T2JqZWN0ID0gMDsKKyAgICBpZiAoSXNFcXVh
bEdVSUQocmlpZCwgSUlEX0lET01XaW5kb3cpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SURPTVdpbmRvdyo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQs
IElJRF9JRE9NRXZlbnRUYXJnZXQpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SURPTUV2ZW50VGFyZ2V0Kj4odGhpcyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRE9NT2Jq
ZWN0OjpRdWVyeUludGVyZmFjZShyaWlkLCBwcHZPYmplY3QpOworCisgICAgQWRkUmVmKCk7Cisg
ICAgcmV0dXJuIFNfT0s7Cit9CisKKy8vIERPTVdpbmRvdyAtIElET01XaW5kb3cgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRE9NV2luZG93Ojpkb2N1bWVudCgKKyAgICAvKiBbb3V0LCByZXR2
YWxdICovIElET01Eb2N1bWVudCoqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAg
ICB9CisKKyAgICAqcmVzdWx0ID0gRE9NRG9jdW1lbnQ6OmNyZWF0ZUluc3RhbmNlKG1fd2luZG93
LT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gKnJlc3VsdCA/IFNfT0sgOiBFX0ZBSUw7Cit9CisK
K0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NV2luZG93OjpnZXRDb21wdXRlZFN0eWxlKAor
ICAgIC8qIFtpbl0gKi8gSURPTUVsZW1lbnQqIGVsZW1lbnQsIAorICAgIC8qIFtpbl0gKi8gQlNU
UiBwc2V1ZG9FbGVtZW50KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NV2luZG93Ojpn
ZXRNYXRjaGVkQ1NTUnVsZXMoCisgICAgLyogW2luXSAqLyBJRE9NRWxlbWVudCogZWxlbWVudCwg
CisgICAgLyogW2luXSAqLyBCU1RSIHBzZXVkb0VsZW1lbnQsIAorICAgIC8qIFtpbl0gKi8gQk9P
TCBhdXRob3JPbmx5LCAKKyAgICAvKiBbb3V0LCByZXR2YWxdICovIElET01DU1NSdWxlTGlzdCoq
IHJlc3VsdCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRV9OT1RJ
TVBMOworfQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTVdpbmRvdzo6ZGV2aWNlUGl4
ZWxSYXRpbygKKyAgICAvKiBbb3V0LCByZXR2YWxdICovIGRvdWJsZSogcmVzdWx0KQoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKKy8vIERP
TVdpbmRvdyAtIElET01FdmVudFRhcmdldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01X
aW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIoCisgICAgLyogW2luXSAqLyBCU1RSIHR5cGUsCisgICAg
LyogW2luXSAqLyBJRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsCisgICAgLyogW2luXSAqLyBC
T09MIHVzZUNhcHR1cmUpCit7CisgICAgaWYgKCFtX3dpbmRvdykKKyAgICAgICAgcmV0dXJuIEVf
RkFJTDsKKyAgICBSZWZQdHI8Q1BQRXZlbnRMaXN0ZW5lcj4gY3BwTGlzdGVuZXIgPSBhZG9wdFJl
ZihuZXcgQ1BQRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcikpOworICAgIG1fd2luZG93LT5hZGRFdmVu
dExpc3RlbmVyKHR5cGUsIGNwcExpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01XaW5kb3c6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoCisgICAgLyogW2luXSAqLyBCU1RSIHR5cGUsCisgICAgLyogW2luXSAqLyBJRE9N
RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsCisgICAgLyogW2luXSAqLyBCT09MIHVzZUNhcHR1cmUp
Cit7CisgICAgaWYgKCFtX3dpbmRvdykKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICBSZWZQ
dHI8Q1BQRXZlbnRMaXN0ZW5lcj4gY3BwbGlzdGVuZXIgPSBhZG9wdFJlZihuZXcgQ1BQRXZlbnRM
aXN0ZW5lcihsaXN0ZW5lcikpOworICAgIG1fd2luZG93LT5yZW1vdmVFdmVudExpc3RlbmVyKHR5
cGUsIChXZWJDb3JlOjpFdmVudExpc3RlbmVyKiljcHBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVy
ZSk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9N
V2luZG93OjpkaXNwYXRjaEV2ZW50KAorICAgIC8qIFtpbl0gKi8gSURPTUV2ZW50KiBldnQsCisg
ICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCit7CisgICAgaWYgKCFtX3dpbmRv
dyB8fCAhZXZ0KQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisjaWYgMCAvLyBGSVhNRSAtIHJh
aXNlIGRvbSBleGNlcHRpb25zCisgICAgaWYgKCFbc2VsZiBfbm9kZV0tPmlzRXZlbnRUYXJnZXRO
b2RlKCkpCisgICAgICAgIFdlYkNvcmU6OnJhaXNlRE9NRXhjZXB0aW9uKERPTV9OT1RfU1VQUE9S
VEVEX0VSUik7CisjZW5kaWYKKworICAgIENPTVB0cjxET01FdmVudD4gZG9tRXZlbnQ7CisgICAg
SFJFU1VMVCBociA9IGV2dC0+UXVlcnlJbnRlcmZhY2UoSUlEX0RPTUV2ZW50LCAodm9pZCoqKSAm
ZG9tRXZlbnQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAqcmVzdWx0ID0gbV93aW5kb3ct
PmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQtPmNvcmVFdmVudCgpLCBlYykgPyBUUlVFIDogRkFMU0U7
CisjaWYgMCAvLyBGSVhNRSAtIHJhaXNlIGRvbSBleGNlcHRpb25zCisgICAgV2ViQ29yZTo6cmFp
c2VPbkRPTUVycm9yKGVjKTsKKyNlbmRpZgorICAgIHJldHVybiBTX09LOworfQorCisKKy8vIERP
TVdpbmRvdyAtIERPTVdpbmRvdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitET01XaW5kb3c6OkRPTVdpbmRvdyhXZWJDb3JlOjpET01XaW5kb3cq
IHcpCis6IG1fd2luZG93KHcpCit7Cit9CisKK0RPTVdpbmRvdzo6fkRPTVdpbmRvdygpCit7Cit9
CisKK0lET01XaW5kb3cqIERPTVdpbmRvdzo6Y3JlYXRlSW5zdGFuY2UoV2ViQ29yZTo6RE9NV2lu
ZG93KiB3KQoreworICAgIGlmICghdykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIUkVTVUxU
IGhyOworICAgIElET01XaW5kb3cqIGRvbVdpbmRvdyA9IDA7CisKKyAgICBET01XaW5kb3cqIG5l
d1dpbmRvdyA9IG5ldyBET01XaW5kb3codyk7CisgICAgaHIgPSBuZXdXaW5kb3ctPlF1ZXJ5SW50
ZXJmYWNlKElJRF9JRE9NV2luZG93LCAodm9pZCoqKSZkb21XaW5kb3cpOworCisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGRvbVdpbmRvdzsKK30K
KwogLy8gRE9NRWxlbWVudCAtIElVbmtub3duIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERP
TUVsZW1lbnQ6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQpJ
bmRleDogU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMuaA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFNvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmgJKHJldmlzaW9uIDg1ODQ5KQ0KKysr
IFNvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmgJKHdvcmtpbmcgY29weSkNCkBAIC0z
Miw2ICszMiw3IEBADQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRWxlbWVudDsKIGNsYXNz
IERvY3VtZW50OworY2xhc3MgRE9NV2luZG93OwogY2xhc3MgTm9kZTsKIGNsYXNzIE5vZGVMaXN0
OwogfQpAQCAtNTMzLDYgKzUzNCw5MSBAQA0KICAgICBXZWJDb3JlOjpEb2N1bWVudCogbV9kb2N1
bWVudDsKIH07CiAKK2NsYXNzIERPTVdpbmRvdyA6IHB1YmxpYyBET01PYmplY3QsIHB1YmxpYyBJ
RE9NV2luZG93LCBwdWJsaWMgSURPTUV2ZW50VGFyZ2V0IHsKK3Byb3RlY3RlZDoKKyAgICBET01X
aW5kb3coV2ViQ29yZTo6RE9NV2luZG93Kik7CisgICAgfkRPTVdpbmRvdygpOworCitwdWJsaWM6
CisgICAgc3RhdGljIElET01XaW5kb3cqIGNyZWF0ZUluc3RhbmNlKFdlYkNvcmU6OkRPTVdpbmRv
dyopOworCitwdWJsaWM6CisgICAgLy8gSVVua25vd24KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmpl
Y3QpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZvaWQpIHsg
cmV0dXJuIERPTU9iamVjdDo6QWRkUmVmKCk7IH0KKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhP
RENBTExUWVBFIFJlbGVhc2Uodm9pZCkgeyByZXR1cm4gRE9NT2JqZWN0OjpSZWxlYXNlKCk7IH0K
KworICAgIC8vIElXZWJTY3JpcHRPYmplY3QKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgdGhyb3dFeGNlcHRpb24oCisgICAgICAgIC8qIFtpbl0gKi8gQlNUUiBleGNlcHRp
b25NZXNzYWdlLAorICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3VsdCkgeyBy
ZXR1cm4gRE9NT2JqZWN0Ojp0aHJvd0V4Y2VwdGlvbihleGNlcHRpb25NZXNzYWdlLCByZXN1bHQp
OyB9CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNhbGxXZWJT
Y3JpcHRNZXRob2QoCisgICAgICAgIC8qIFtpbl0gKi8gQlNUUiBuYW1lLAorICAgICAgICAvKiBb
c2l6ZV9pc11baW5dICovIGNvbnN0IFZBUklBTlQgYXJnc1sgIF0sCisgICAgICAgIC8qIFtpbl0g
Ki8gaW50IGNBcmdzLAorICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIFZBUklBTlQqIHJlc3Vs
dCkgeyByZXR1cm4gRE9NT2JqZWN0OjpjYWxsV2ViU2NyaXB0TWV0aG9kKG5hbWUsIGFyZ3MsIGNB
cmdzLCByZXN1bHQpOyB9CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIGV2YWx1YXRlV2ViU2NyaXB0KAorICAgICAgICAvKiBbaW5dICovIEJTVFIgc2NyaXB0LAor
ICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIFZBUklBTlQqIHJlc3VsdCkgeyByZXR1cm4gRE9N
T2JqZWN0OjpldmFsdWF0ZVdlYlNjcmlwdChzY3JpcHQsIHJlc3VsdCk7IH0KKyAgICAKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcmVtb3ZlV2ViU2NyaXB0S2V5KAorICAg
ICAgICAvKiBbaW5dICovIEJTVFIgbmFtZSkgeyByZXR1cm4gRE9NT2JqZWN0OjpyZW1vdmVXZWJT
Y3JpcHRLZXkobmFtZSk7IH0KKyAgICAKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgc3RyaW5nUmVwcmVzZW50YXRpb24oCisgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8g
QlNUUiogc3RyaW5nUmVwcmVzZW50YXRpb24pIHsgcmV0dXJuIERPTU9iamVjdDo6c3RyaW5nUmVw
cmVzZW50YXRpb24oc3RyaW5nUmVwcmVzZW50YXRpb24pOyB9CisgICAgCisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdlYlNjcmlwdFZhbHVlQXRJbmRleCgKKyAgICAgICAg
LyogW2luXSAqLyB1bnNpZ25lZCBpbnQgaW5kZXgsCisgICAgICAgIC8qIFtyZXR2YWxdW291dF0g
Ki8gVkFSSUFOVCogcmVzdWx0KSB7IHJldHVybiBET01PYmplY3Q6OndlYlNjcmlwdFZhbHVlQXRJ
bmRleChpbmRleCwgcmVzdWx0KTsgfQorICAgIAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBzZXRXZWJTY3JpcHRWYWx1ZUF0SW5kZXgoCisgICAgICAgIC8qIFtpbl0gKi8g
dW5zaWduZWQgaW50IGluZGV4LAorICAgICAgICAvKiBbaW5dICovIFZBUklBTlQgdmFsKSB7IHJl
dHVybiBET01PYmplY3Q6OnNldFdlYlNjcmlwdFZhbHVlQXRJbmRleChpbmRleCwgdmFsKTsgfQor
ICAgIAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRFeGNlcHRpb24o
CisgICAgICAgIC8qIFtpbl0gKi8gQlNUUiBkZXNjcmlwdGlvbikgeyByZXR1cm4gRE9NT2JqZWN0
OjpzZXRFeGNlcHRpb24oZGVzY3JpcHRpb24pOyB9CisKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgZG9jdW1lbnQoCisgICAgICAgIC8qIFtvdXQsIHJldHZhbF0gKi8gSURP
TURvY3VtZW50KiopOworCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdl
dENvbXB1dGVkU3R5bGUoCisgICAgICAgIC8qIFtpbl0gKi8gSURPTUVsZW1lbnQqLCAKKyAgICAg
ICAgLyogW2luXSAqLyBCU1RSKTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBnZXRNYXRjaGVkQ1NTUnVsZXMoCisgICAgICAgIC8qIFtpbl0gKi8gSURPTUVsZW1lbnQq
LCAKKyAgICAgICAgLyogW2luXSAqLyBCU1RSLCAKKyAgICAgICAgLyogW2luXSAqLyBCT09MLCAK
KyAgICAgICAgLyogW291dCwgcmV0dmFsXSAqLyBJRE9NQ1NTUnVsZUxpc3QqKik7CisKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGV2aWNlUGl4ZWxSYXRpbygKKyAgICAg
ICAgLyogW291dCwgcmV0dmFsXSAqLyBkb3VibGUqKTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBhZGRFdmVudExpc3RlbmVyKCAKKyAgICAgICAgLyogW2luXSAqLyBC
U1RSLAorICAgICAgICAvKiBbaW5dICovIElET01FdmVudExpc3RlbmVyICosCisgICAgICAgIC8q
IFtpbl0gKi8gQk9PTCk7CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIHJlbW92ZUV2ZW50TGlzdGVuZXIoCisgICAgICAgIC8qIFtpbl0gKi8gQlNUUiwKKyAgICAg
ICAgLyogW2luXSAqLyBJRE9NRXZlbnRMaXN0ZW5lciAqLAorICAgICAgICAvKiBbaW5dICovIEJP
T0wpOworICAgIAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaXNwYXRj
aEV2ZW50KAorICAgICAgICAvKiBbaW5dICovIElET01FdmVudCAqLAorICAgICAgICAvKiBbcmV0
dmFsXVtvdXRdICovIEJPT0wgKik7CisKKyAgICAvLyBET01XaW5kb3cKKyAgICBXZWJDb3JlOjpE
T01XaW5kb3cqIHdpbmRvdygpIHsgcmV0dXJuIG1fd2luZG93OyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBXZWJDb3JlOjpET01XaW5kb3cqIG1fd2luZG93OworfTsKKworCisKIGNsYXNzIERPTUVsZW1l
bnQgOiBwdWJsaWMgRE9NTm9kZSwgcHVibGljIElET01FbGVtZW50LCBwdWJsaWMgSURPTUVsZW1l
bnRQcml2YXRlLCBwdWJsaWMgSURPTU5vZGVFeHRlbnNpb25zLCBwdWJsaWMgSURPTUVsZW1lbnRD
U1NJbmxpbmVTdHlsZSwgcHVibGljIElET01FbGVtZW50RXh0ZW5zaW9ucyB7CiBwcm90ZWN0ZWQ6
CiAgICAgRE9NRWxlbWVudChXZWJDb3JlOjpFbGVtZW50KiBlKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luL0RPTUV2ZW50c0NsYXNzZXMuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktp
dC93aW4vRE9NRXZlbnRzQ2xhc3Nlcy5jcHAJKHJldmlzaW9uIDg1ODQ5KQ0KKysrIFNvdXJjZS9X
ZWJLaXQvd2luL0RPTUV2ZW50c0NsYXNzZXMuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMjksNiAr
MjksNyBAQA0KICNpbmNsdWRlICJET01FdmVudHNDbGFzc2VzLmgiCiAKICNpbmNsdWRlIDxXZWJD
b3JlL0RPTVdpbmRvdy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tleWJv
YXJkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01vdXNlRXZlbnQuaD4KQEAgLTUzLDYgKzU0
LDMyIEBADQogICAgIHJldHVybiBFX05PVElNUEw7CiB9CiAKK0NQUEV2ZW50TGlzdGVuZXI6OkNQ
UEV2ZW50TGlzdGVuZXIoSURPTUV2ZW50TGlzdGVuZXIqIGkpCisgICAgOkV2ZW50TGlzdGVuZXIo
Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgLCBtX2lET01FdmVudExpc3RlbmVyKGkpCit7Cisg
ICAgbV9pRE9NRXZlbnRMaXN0ZW5lci0+QWRkUmVmKCk7Cit9CitDUFBFdmVudExpc3RlbmVyOjp+
Q1BQRXZlbnRMaXN0ZW5lcigpCit7CisgICAgbV9pRE9NRXZlbnRMaXN0ZW5lci0+UmVsZWFzZSgp
OworfQorYm9vbCBDUFBFdmVudExpc3RlbmVyOjpvcGVyYXRvcj09KGNvbnN0IFdlYkNvcmU6OkV2
ZW50TGlzdGVuZXImIG90aGVyKQoreworICAgIHJldHVybiAodHlwZSgpID09IG90aGVyLnR5cGUo
KSAmJiAoKENQUEV2ZW50TGlzdGVuZXIqKSZvdGhlciktPm1faURPTUV2ZW50TGlzdGVuZXIgPT0g
bV9pRE9NRXZlbnRMaXN0ZW5lcik7Cit9Cit2b2lkIENQUEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2
ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHMsIFdlYkNvcmU6OkV2ZW50KiBl
KQoreworICAgIFJlZlB0cjxXZWJDb3JlOjpFdmVudD4gZVB0cihlKTsKKyAgICBET01VSUV2ZW50
ICogZG9tVUlFdmVudCA9IG5ldyBET01VSUV2ZW50KGVQdHIpOworICAgIGRvbVVJRXZlbnQtPkFk
ZFJlZigpOworICAgIElET01FdmVudCogaURPTVVJRXZlbnQgPSAwOworICAgIGRvbVVJRXZlbnQt
PlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9NRXZlbnQsICh2b2lkKiopJmlET01VSUV2ZW50KTsKKyAg
ICBtX2lET01FdmVudExpc3RlbmVyLT5oYW5kbGVFdmVudChpRE9NVUlFdmVudCk7CisgICAgaURP
TVVJRXZlbnQtPlJlbGVhc2UoKTsKKyAgICBkb21VSUV2ZW50LT5SZWxlYXNlKCk7Cit9CisKIC8v
IERPTUV2ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRE9NRXZlbnQ6OkRPTUV2ZW50KFBhc3NSZWZQdHI8V2Vi
Q29yZTo6RXZlbnQ+IGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9ET01FdmVudHNDbGFzc2Vz
LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L3dpbi9ET01FdmVudHNDbGFzc2VzLmgJ
KHJldmlzaW9uIDg1ODQ5KQ0KKysrIFNvdXJjZS9XZWJLaXQvd2luL0RPTUV2ZW50c0NsYXNzZXMu
aAkod29ya2luZyBjb3B5KQ0KQEAgLTI4LDYgKzI4LDcgQEANCiAKICNpbmNsdWRlICJXZWJLaXQu
aCIKICNpbmNsdWRlICJET01Db3JlQ2xhc3Nlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRM
aXN0ZW5lci5oPgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CkBAIC00MSw2ICs0MiwxNyBAQA0KIAogY2xhc3MgRE9NVUlFdmVudDsKIAorY2xh
c3MgQ1BQRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBXZWJDb3JlOjpFdmVudExpc3RlbmVyCit7Citw
dWJsaWM6CisgICAgQ1BQRXZlbnRMaXN0ZW5lcihJRE9NRXZlbnRMaXN0ZW5lciopOworICAgIH5D
UFBFdmVudExpc3RlbmVyKCk7CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZl
bnRMaXN0ZW5lciYpOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqKTsKK3ByaXZhdGU6CisgICAgSURP
TUV2ZW50TGlzdGVuZXIqIG1faURPTUV2ZW50TGlzdGVuZXI7Cit9OworCiBjbGFzcyBET01FdmVu
dExpc3RlbmVyIDogcHVibGljIERPTU9iamVjdCwgcHVibGljIElET01FdmVudExpc3RlbmVyCiB7
CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJGcmFtZS5p
ZGwNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJGcmFt
ZS5pZGwJKHJldmlzaW9uIDg1ODQ5KQ0KKysrIFNvdXJjZS9XZWJLaXQvd2luL0ludGVyZmFjZXMv
SVdlYkZyYW1lLmlkbAkod29ya2luZyBjb3B5KQ0KQEAgLTk1LDYgKzk1LDE0IEBADQogICAgIEhS
RVNVTFQgRE9NRG9jdW1lbnQoW291dCwgcmV0dmFsXSBJRE9NRG9jdW1lbnQqKiBkb2N1bWVudCk7
CiAKICAgICAvKiEKKyAgICAgICAgQG1ldGhvZCBET01XaW5kb3cKKyAgICAgICAgQGFic3RyYWN0
IFJldHVybnMgdGhlIERPTSB3aW5kb3cgb2YgdGhlIGZyYW1lLgorICAgICAgICBAZGVzY3JpcHRp
b24gUmV0dXJucyBuaWwgaWYgdGhlIGZyYW1lIGRvZXMgbm90IGNvbnRhaW4gYSBET00gd2luZG93
IHN1Y2ggYXMgYSBzdGFuZGFsb25lIGltYWdlLgorICAgICAgICAtIChET01XaW5kb3cgKilET01X
aW5kb3c7CisgICAgKi8KKyAgICBIUkVTVUxUIERPTVdpbmRvdyhbb3V0LCByZXR2YWxdIElET01X
aW5kb3cqKiB3aW5kb3cpOworCisgICAgLyohCiAgICAgICAgIEBtZXRob2QgZnJhbWVFbGVtZW50
CiAgICAgICAgIEBhYnN0cmFjdCBSZXR1cm5zIHRoZSBmcmFtZSBlbGVtZW50IG9mIHRoZSBmcmFt
ZS4KICAgICAgICAgQGRlc2NyaXB0aW9uIFRoZSBjbGFzcyBvZiB0aGUgcmVzdWx0IGlzIGVpdGhl
ciBET01IVE1MRnJhbWVFbGVtZW50LCBET01IVE1MSUZyYW1lRWxlbWVudCBvciBET01IVE1MT2Jq
ZWN0RWxlbWVudC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gODU4NDkp
DQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAt
NDc5LDYgKzQ3OSwyNCBAQA0KICAgICByZXR1cm4gKnJlc3VsdCA/IFNfT0sgOiBFX0ZBSUw7CiB9
CiAKKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJGcmFtZTo6RE9NV2luZG93KAorICAg
IC8qIFtyZXR2YWxdW291dF0gKi8gSURPTVdpbmRvdyoqIHdpbmRvdykKK3sKKyAgICBpZiAoIXdp
bmRvdykgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKKyAgICB9CisKKyAgICAqd2luZG93ID0gMDsKKworICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZSh0aGlzKSkKKyAgICAgICAgaWYgKFdlYkNvcmU6OkRPTVdpbmRvdyogY29y
ZVdpbmRvdyA9IGNvcmVGcmFtZS0+ZG9tV2luZG93KCkpCisgICAgICAgICAgICAqd2luZG93ID0g
OjpET01XaW5kb3c6OmNyZWF0ZUluc3RhbmNlKGNvcmVXaW5kb3cpOworCisgICAgcmV0dXJuICp3
aW5kb3cgPyBTX09LIDogRV9GQUlMOworfQorCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdl
YkZyYW1lOjpmcmFtZUVsZW1lbnQoIAogICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSURPTUhUTUxF
bGVtZW50KiogZnJhbWVFbGVtZW50KQogewpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViRnJh
bWUuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmgJKHJldmlz
aW9uIDg1ODQ5KQ0KKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmgJKHdvcmtpbmcgY29w
eSkNCkBAIC0xMDUsNiArMTA1LDkgQEANCiAKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgRE9NRG9jdW1lbnQoIAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElET01E
b2N1bWVudCoqIGRvY3VtZW50KTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBET01XaW5kb3coIAorICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElET01XaW5kb3cq
KiB3aW5kb3cpOwogICAgIAogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBm
cmFtZUVsZW1lbnQoIAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElET01IVE1MRWxlbWVu
dCAqKmZyYW1lRWxlbWVudCk7Cg==
</data>
<flag name="review"
          id="85573"
          type_id="1"
          status="-"
          setter="anthony.johnson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92613</attachid>
            <date>2011-05-06 11:28:00 -0700</date>
            <delta_ts>2011-05-06 14:12:27 -0700</delta_ts>
            <desc>Patch for adding event listeners v2</desc>
            <filename>eventlisteners.patch</filename>
            <type>text/plain</type>
            <size>14163</size>
            <attacher name="Anthony Johnson">anthony.johnson</attacher>
            
              <data encoding="base64">SW5kZXg6IERPTUNvcmVDbGFzc2VzLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIERPTUNvcmVDbGFzc2Vz
LmNwcAkocmV2aXNpb24gODU4NzYpDQorKysgRE9NQ29yZUNsYXNzZXMuY3BwCSh3b3JraW5nIGNv
cHkpDQpAQCAtOTAsNiArOTAsOCBAQA0KICAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0
PElET01Ob2RlKj4odGhpcyk7CiAgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlk
b2YoRE9NTm9kZSkpKQogICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8RE9NTm9kZSo+
KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElET01FdmVu
dFRhcmdldCkpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SURPTUV2ZW50VGFy
Z2V0Kj4odGhpcyk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gRE9NT2JqZWN0OjpRdWVyeUlu
dGVyZmFjZShyaWlkLCBwcHZPYmplY3QpOwogCkBAIC0zOTksMjcgKzQwMSwzOCBAQA0KIAogLy8g
RE9NTm9kZSAtIElET01FdmVudFRhcmdldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTU5vZGU6
OmFkZEV2ZW50TGlzdGVuZXIoIAotICAgIC8qIFtpbl0gKi8gQlNUUiAvKnR5cGUqLywKLSAgICAv
KiBbaW5dICovIElET01FdmVudExpc3RlbmVyKiAvKmxpc3RlbmVyKi8sCi0gICAgLyogW2luXSAq
LyBCT09MIC8qdXNlQ2FwdHVyZSovKQorSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01Ob2Rl
OjphZGRFdmVudExpc3RlbmVyKAorICAgIC8qIFtpbl0gKi8gQlNUUiB0eXBlLAorICAgIC8qIFtp
bl0gKi8gSURPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLAorICAgIC8qIFtpbl0gKi8gQk9PTCB1
c2VDYXB0dXJlKQogewotICAgIHJldHVybiBFX05PVElNUEw7CisJUmVmUHRyPFdlYkV2ZW50TGlz
dGVuZXI+IGNwcGxpc3RlbmVyID0gV2ViRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGxpc3RlbmVyKTsK
KyAgICBtX25vZGUtPmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY3BwbGlzdGVuZXIsIHVzZUNhcHR1
cmUpOworCisgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
RE9NTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lciggCi0gICAgLyogW2luXSAqLyBCU1RSIC8qdHlw
ZSovLAotICAgIC8qIFtpbl0gKi8gSURPTUV2ZW50TGlzdGVuZXIqIC8qbGlzdGVuZXIqLywKLSAg
ICAvKiBbaW5dICovIEJPT0wgLyp1c2VDYXB0dXJlKi8pCitIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIERPTU5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoCisgICAgLyogW2luXSAqLyBCU1RSIHR5
cGUsCisgICAgLyogW2luXSAqLyBJRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsCisgICAgLyog
W2luXSAqLyBCT09MIHVzZUNhcHR1cmUpCiB7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKKwlpZigh
bGlzdGVuZXIgfHwgIXR5cGUpCisJCXJldHVybiBFX1BPSU5URVI7CisgICAgaWYgKCFtX25vZGUp
CisgICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgUmVmUHRyPFdlYkV2ZW50TGlzdGVuZXI+IGNw
cGxpc3RlbmVyID0gV2ViRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGxpc3RlbmVyKTsKKyAgICBtX25v
ZGUtPnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY3BwbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1
cmUpOworICAgIHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERP
TU5vZGU6OmRpc3BhdGNoRXZlbnQoIAogICAgIC8qIFtpbl0gKi8gSURPTUV2ZW50KiBldnQsCiAg
ICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCiB7Ci0gICAgaWYgKCFtX25vZGUg
fHwgIWV2dCkKKwlpZighZXZ0IHx8ICFyZXN1bHQpCisJCXJldHVybiBFX1BPSU5URVI7CisgICAg
aWYgKCFtX25vZGUpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKICNpZiAwICAgLy8gRklYTUUg
LSByYWlzZSBkb20gZXhjZXB0aW9ucwpAQCAtODE4LDYgKzgzMSwxNDcgQEANCiAgICAgcmV0dXJu
IGRvbURvY3VtZW50OwogfQogCisvLyBET01XaW5kb3cgLSBJVW5rbm93biAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBET01XaW5kb3c6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lk
KiogcHB2T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFsR1VJ
RChyaWlkLCBJSURfSURPTVdpbmRvdykpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2Fz
dDxJRE9NV2luZG93Kj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlE
X0lET01FdmVudFRhcmdldCkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJRE9N
RXZlbnRUYXJnZXQqPih0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBET01PYmplY3Q6
OlF1ZXJ5SW50ZXJmYWNlKHJpaWQsIHBwdk9iamVjdCk7CisKKyAgICBBZGRSZWYoKTsKKyAgICBy
ZXR1cm4gU19PSzsKK30KKworLy8gRE9NV2luZG93IC0gSURPTVdpbmRvdyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBET01XaW5kb3c6OmRvY3VtZW50KAorICAgIC8qIFtvdXQsIHJldHZhbF0g
Ki8gSURPTURvY3VtZW50KiogcmVzdWx0KQoreworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgIH0K
KworICAgICpyZXN1bHQgPSBET01Eb2N1bWVudDo6Y3JlYXRlSW5zdGFuY2UobV93aW5kb3ctPmRv
Y3VtZW50KCkpOworICAgIHJldHVybiAqcmVzdWx0ID8gU19PSyA6IEVfRkFJTDsKK30KKworSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01XaW5kb3c6OmdldENvbXB1dGVkU3R5bGUoCisgICAg
LyogW2luXSAqLyBJRE9NRWxlbWVudCogZWxlbWVudCwgCisgICAgLyogW2luXSAqLyBCU1RSIHBz
ZXVkb0VsZW1lbnQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEVf
Tk9USU1QTDsKK30KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01XaW5kb3c6OmdldE1h
dGNoZWRDU1NSdWxlcygKKyAgICAvKiBbaW5dICovIElET01FbGVtZW50KiBlbGVtZW50LCAKKyAg
ICAvKiBbaW5dICovIEJTVFIgcHNldWRvRWxlbWVudCwgCisgICAgLyogW2luXSAqLyBCT09MIGF1
dGhvck9ubHksIAorICAgIC8qIFtvdXQsIHJldHZhbF0gKi8gSURPTUNTU1J1bGVMaXN0KiogcmVz
dWx0KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBFX05PVElNUEw7
Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NV2luZG93OjpkZXZpY2VQaXhlbFJh
dGlvKAorICAgIC8qIFtvdXQsIHJldHZhbF0gKi8gZG91YmxlKiByZXN1bHQpCit7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworLy8gRE9NV2lu
ZG93IC0gSURPTUV2ZW50VGFyZ2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTVdpbmRv
dzo6YWRkRXZlbnRMaXN0ZW5lcigKKyAgICAvKiBbaW5dICovIEJTVFIgdHlwZSwKKyAgICAvKiBb
aW5dICovIElET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lciwKKyAgICAvKiBbaW5dICovIEJPT0wg
dXNlQ2FwdHVyZSkKK3sKKwlpZighdHlwZSB8fCAhbGlzdGVuZXIpCisJCXJldHVybiBFX1BPSU5U
RVI7CisgICAgaWYgKCFtX3dpbmRvdykKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICBSZWZQ
dHI8V2ViRXZlbnRMaXN0ZW5lcj4gY3BwTGlzdGVuZXIgPSBhZG9wdFJlZihuZXcgV2ViRXZlbnRM
aXN0ZW5lcihsaXN0ZW5lcikpOworICAgIG1fd2luZG93LT5hZGRFdmVudExpc3RlbmVyKHR5cGUs
IGNwcExpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIoCisgICAg
LyogW2luXSAqLyBCU1RSIHR5cGUsCisgICAgLyogW2luXSAqLyBJRE9NRXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIsCisgICAgLyogW2luXSAqLyBCT09MIHVzZUNhcHR1cmUpCit7CisJaWYoIXR5cGUg
fHwgIWxpc3RlbmVyKQorCQlyZXR1cm4gRV9QT0lOVEVSOworICAgIGlmICghbV93aW5kb3cpCisg
ICAgICAgIHJldHVybiBFX0ZBSUw7CisJUmVmUHRyPFdlYkV2ZW50TGlzdGVuZXI+IGNwcGxpc3Rl
bmVyID0gV2ViRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGxpc3RlbmVyKTsKKyAgICBtX3dpbmRvdy0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjcHBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSk7
CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NV2lu
ZG93OjpkaXNwYXRjaEV2ZW50KAorICAgIC8qIFtpbl0gKi8gSURPTUV2ZW50KiBldnQsCisgICAg
LyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCit7CisgICAgaWYgKCFyZXN1bHQgfHwg
IWV2dCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKwlpZiAoIW1fd2luZG93KQorCQlyZXR1
cm4gRV9GQUlMOworCisjaWYgMCAvLyBGSVhNRSAtIHJhaXNlIGRvbSBleGNlcHRpb25zCisgICAg
aWYgKCFbc2VsZiBfbm9kZV0tPmlzRXZlbnRUYXJnZXROb2RlKCkpCisgICAgICAgIFdlYkNvcmU6
OnJhaXNlRE9NRXhjZXB0aW9uKERPTV9OT1RfU1VQUE9SVEVEX0VSUik7CisjZW5kaWYKKworICAg
IENPTVB0cjxET01FdmVudD4gZG9tRXZlbnQ7CisgICAgSFJFU1VMVCBociA9IGV2dC0+UXVlcnlJ
bnRlcmZhY2UoSUlEX0RPTUV2ZW50LCAodm9pZCoqKSAmZG9tRXZlbnQpOworICAgIGlmIChGQUlM
RUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICAqcmVzdWx0ID0gbV93aW5kb3ctPmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQt
PmNvcmVFdmVudCgpLCBlYykgPyBUUlVFIDogRkFMU0U7CisjaWYgMCAvLyBGSVhNRSAtIHJhaXNl
IGRvbSBleGNlcHRpb25zCisgICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKKyNlbmRp
ZgorICAgIHJldHVybiBTX09LOworfQorCisKKy8vIERPTVdpbmRvdyAtIERPTVdpbmRvdyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitET01XaW5k
b3c6OkRPTVdpbmRvdyhXZWJDb3JlOjpET01XaW5kb3cqIHcpCis6IG1fd2luZG93KHcpCit7Cit9
CisKK0RPTVdpbmRvdzo6fkRPTVdpbmRvdygpCit7Cit9CisKK0lET01XaW5kb3cqIERPTVdpbmRv
dzo6Y3JlYXRlSW5zdGFuY2UoV2ViQ29yZTo6RE9NV2luZG93KiB3KQoreworICAgIGlmICghdykK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIUkVTVUxUIGhyOworICAgIElET01XaW5kb3cqIGRv
bVdpbmRvdyA9IDA7CisKKyAgICBET01XaW5kb3cqIG5ld1dpbmRvdyA9IG5ldyBET01XaW5kb3co
dyk7CisgICAgaHIgPSBuZXdXaW5kb3ctPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9NV2luZG93LCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmRvbVdpbmRvdykpOworCisgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGRvbVdpbmRvdzsKK30KKwogLy8g
RE9NRWxlbWVudCAtIElVbmtub3duIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUVsZW1l
bnQ6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQpJbmRleDog
RE9NQ29yZUNsYXNzZXMuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIERPTUNvcmVDbGFzc2VzLmgJKHJldmlz
aW9uIDg1ODc2KQ0KKysrIERPTUNvcmVDbGFzc2VzLmgJKHdvcmtpbmcgY29weSkNCkBAIC0zMiw2
ICszMiw3IEBADQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRWxlbWVudDsKIGNsYXNzIERv
Y3VtZW50OworY2xhc3MgRE9NV2luZG93OwogY2xhc3MgTm9kZTsKIGNsYXNzIE5vZGVMaXN0Owog
fQpAQCAtNTMzLDYgKzUzNCw5MSBAQA0KICAgICBXZWJDb3JlOjpEb2N1bWVudCogbV9kb2N1bWVu
dDsKIH07CiAKK2NsYXNzIERPTVdpbmRvdyA6IHB1YmxpYyBET01PYmplY3QsIHB1YmxpYyBJRE9N
V2luZG93LCBwdWJsaWMgSURPTUV2ZW50VGFyZ2V0IHsKK3Byb3RlY3RlZDoKKyAgICBET01XaW5k
b3coV2ViQ29yZTo6RE9NV2luZG93Kik7CisgICAgfkRPTVdpbmRvdygpOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIElET01XaW5kb3cqIGNyZWF0ZUluc3RhbmNlKFdlYkNvcmU6OkRPTVdpbmRvdyop
OworCitwdWJsaWM6CisgICAgLy8gSVVua25vd24KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3Qp
OworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZvaWQpIHsgcmV0
dXJuIERPTU9iamVjdDo6QWRkUmVmKCk7IH0KKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENB
TExUWVBFIFJlbGVhc2Uodm9pZCkgeyByZXR1cm4gRE9NT2JqZWN0OjpSZWxlYXNlKCk7IH0KKwor
ICAgIC8vIElXZWJTY3JpcHRPYmplY3QKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgdGhyb3dFeGNlcHRpb24oCisgICAgICAgIC8qIFtpbl0gKi8gQlNUUiBleGNlcHRpb25N
ZXNzYWdlLAorICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3VsdCkgeyByZXR1
cm4gRE9NT2JqZWN0Ojp0aHJvd0V4Y2VwdGlvbihleGNlcHRpb25NZXNzYWdlLCByZXN1bHQpOyB9
CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNhbGxXZWJTY3Jp
cHRNZXRob2QoCisgICAgICAgIC8qIFtpbl0gKi8gQlNUUiBuYW1lLAorICAgICAgICAvKiBbc2l6
ZV9pc11baW5dICovIGNvbnN0IFZBUklBTlQgYXJnc1sgIF0sCisgICAgICAgIC8qIFtpbl0gKi8g
aW50IGNBcmdzLAorICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIFZBUklBTlQqIHJlc3VsdCkg
eyByZXR1cm4gRE9NT2JqZWN0OjpjYWxsV2ViU2NyaXB0TWV0aG9kKG5hbWUsIGFyZ3MsIGNBcmdz
LCByZXN1bHQpOyB9CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IGV2YWx1YXRlV2ViU2NyaXB0KAorICAgICAgICAvKiBbaW5dICovIEJTVFIgc2NyaXB0LAorICAg
ICAgICAvKiBbcmV0dmFsXVtvdXRdICovIFZBUklBTlQqIHJlc3VsdCkgeyByZXR1cm4gRE9NT2Jq
ZWN0OjpldmFsdWF0ZVdlYlNjcmlwdChzY3JpcHQsIHJlc3VsdCk7IH0KKyAgICAKKyAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcmVtb3ZlV2ViU2NyaXB0S2V5KAorICAgICAg
ICAvKiBbaW5dICovIEJTVFIgbmFtZSkgeyByZXR1cm4gRE9NT2JqZWN0OjpyZW1vdmVXZWJTY3Jp
cHRLZXkobmFtZSk7IH0KKyAgICAKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgc3RyaW5nUmVwcmVzZW50YXRpb24oCisgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNU
Uiogc3RyaW5nUmVwcmVzZW50YXRpb24pIHsgcmV0dXJuIERPTU9iamVjdDo6c3RyaW5nUmVwcmVz
ZW50YXRpb24oc3RyaW5nUmVwcmVzZW50YXRpb24pOyB9CisgICAgCisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHdlYlNjcmlwdFZhbHVlQXRJbmRleCgKKyAgICAgICAgLyog
W2luXSAqLyB1bnNpZ25lZCBpbnQgaW5kZXgsCisgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8g
VkFSSUFOVCogcmVzdWx0KSB7IHJldHVybiBET01PYmplY3Q6OndlYlNjcmlwdFZhbHVlQXRJbmRl
eChpbmRleCwgcmVzdWx0KTsgfQorICAgIAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBzZXRXZWJTY3JpcHRWYWx1ZUF0SW5kZXgoCisgICAgICAgIC8qIFtpbl0gKi8gdW5z
aWduZWQgaW50IGluZGV4LAorICAgICAgICAvKiBbaW5dICovIFZBUklBTlQgdmFsKSB7IHJldHVy
biBET01PYmplY3Q6OnNldFdlYlNjcmlwdFZhbHVlQXRJbmRleChpbmRleCwgdmFsKTsgfQorICAg
IAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRFeGNlcHRpb24oCisg
ICAgICAgIC8qIFtpbl0gKi8gQlNUUiBkZXNjcmlwdGlvbikgeyByZXR1cm4gRE9NT2JqZWN0Ojpz
ZXRFeGNlcHRpb24oZGVzY3JpcHRpb24pOyB9CisKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgZG9jdW1lbnQoCisgICAgICAgIC8qIFtvdXQsIHJldHZhbF0gKi8gSURPTURv
Y3VtZW50KiopOworCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldENv
bXB1dGVkU3R5bGUoCisgICAgICAgIC8qIFtpbl0gKi8gSURPTUVsZW1lbnQqLCAKKyAgICAgICAg
LyogW2luXSAqLyBCU1RSKTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBnZXRNYXRjaGVkQ1NTUnVsZXMoCisgICAgICAgIC8qIFtpbl0gKi8gSURPTUVsZW1lbnQqLCAK
KyAgICAgICAgLyogW2luXSAqLyBCU1RSLCAKKyAgICAgICAgLyogW2luXSAqLyBCT09MLCAKKyAg
ICAgICAgLyogW291dCwgcmV0dmFsXSAqLyBJRE9NQ1NTUnVsZUxpc3QqKik7CisKKyAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGV2aWNlUGl4ZWxSYXRpbygKKyAgICAgICAg
LyogW291dCwgcmV0dmFsXSAqLyBkb3VibGUqKTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBhZGRFdmVudExpc3RlbmVyKCAKKyAgICAgICAgLyogW2luXSAqLyBCU1RS
LAorICAgICAgICAvKiBbaW5dICovIElET01FdmVudExpc3RlbmVyICosCisgICAgICAgIC8qIFtp
bl0gKi8gQk9PTCk7CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IHJlbW92ZUV2ZW50TGlzdGVuZXIoCisgICAgICAgIC8qIFtpbl0gKi8gQlNUUiwKKyAgICAgICAg
LyogW2luXSAqLyBJRE9NRXZlbnRMaXN0ZW5lciAqLAorICAgICAgICAvKiBbaW5dICovIEJPT0wp
OworICAgIAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaXNwYXRjaEV2
ZW50KAorICAgICAgICAvKiBbaW5dICovIElET01FdmVudCAqLAorICAgICAgICAvKiBbcmV0dmFs
XVtvdXRdICovIEJPT0wgKik7CisKKyAgICAvLyBET01XaW5kb3cKKyAgICBXZWJDb3JlOjpET01X
aW5kb3cqIHdpbmRvdygpIHsgcmV0dXJuIG1fd2luZG93OyB9CisKK3Byb3RlY3RlZDoKKyAgICBX
ZWJDb3JlOjpET01XaW5kb3cqIG1fd2luZG93OworfTsKKworCisKIGNsYXNzIERPTUVsZW1lbnQg
OiBwdWJsaWMgRE9NTm9kZSwgcHVibGljIElET01FbGVtZW50LCBwdWJsaWMgSURPTUVsZW1lbnRQ
cml2YXRlLCBwdWJsaWMgSURPTU5vZGVFeHRlbnNpb25zLCBwdWJsaWMgSURPTUVsZW1lbnRDU1NJ
bmxpbmVTdHlsZSwgcHVibGljIElET01FbGVtZW50RXh0ZW5zaW9ucyB7CiBwcm90ZWN0ZWQ6CiAg
ICAgRE9NRWxlbWVudChXZWJDb3JlOjpFbGVtZW50KiBlKTsKSW5kZXg6IERPTUV2ZW50c0NsYXNz
ZXMuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gRE9NRXZlbnRzQ2xhc3Nlcy5jcHAJKHJldmlzaW9uIDg1
ODc2KQ0KKysrIERPTUV2ZW50c0NsYXNzZXMuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMjksOSAr
MjksMTEgQEANCiAjaW5jbHVkZSAiRE9NRXZlbnRzQ2xhc3Nlcy5oIgogCiAjaW5jbHVkZSA8V2Vi
Q29yZS9ET01XaW5kb3cuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9LZXli
b2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Nb3VzZUV2ZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9DT01QdHIuaD4KIAogLy8gRE9NRXZlbnRMaXN0ZW5lciAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01Myw2ICs1
NSwzNCBAQA0KICAgICByZXR1cm4gRV9OT1RJTVBMOwogfQogCitXZWJFdmVudExpc3RlbmVyOjpX
ZWJFdmVudExpc3RlbmVyKElET01FdmVudExpc3RlbmVyKiBpKQorICAgIDpFdmVudExpc3RlbmVy
KENQUEV2ZW50TGlzdGVuZXJUeXBlKQorICAgICwgbV9pRE9NRXZlbnRMaXN0ZW5lcihpKQorewor
ICAgIG1faURPTUV2ZW50TGlzdGVuZXItPkFkZFJlZigpOworfQorV2ViRXZlbnRMaXN0ZW5lcjo6
fldlYkV2ZW50TGlzdGVuZXIoKQoreworICAgIG1faURPTUV2ZW50TGlzdGVuZXItPlJlbGVhc2Uo
KTsKK30KK2Jvb2wgV2ViRXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PShjb25zdCBXZWJDb3JlOjpF
dmVudExpc3RlbmVyJiBvdGhlcikKK3sKKyAgICByZXR1cm4gKG90aGVyLnR5cGUoKSA9PSBDUFBF
dmVudExpc3RlbmVyVHlwZSAKKwkJJiYgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBXZWJFdmVudExp
c3RlbmVyKj4oJm90aGVyKS0+bV9pRE9NRXZlbnRMaXN0ZW5lciA9PSBtX2lET01FdmVudExpc3Rl
bmVyKTsKK30KK3ZvaWQgV2ViRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogcywgV2ViQ29yZTo6RXZlbnQqIGUpCit7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkV2ZW50PiBlUHRyKGUpOworICAgIENPTVB0cjxJRE9NRXZlbnQ+IGRvbUV2ZW50
ID0gRE9NRXZlbnQ6OmNyZWF0ZUluc3RhbmNlKGVQdHIpOworICAgIG1faURPTUV2ZW50TGlzdGVu
ZXItPmhhbmRsZUV2ZW50KGRvbUV2ZW50LmdldCgpKTsKK30KKworCitQYXNzUmVmUHRyPFdlYkV2
ZW50TGlzdGVuZXI+IFdlYkV2ZW50TGlzdGVuZXI6OmNyZWF0ZShJRE9NRXZlbnRMaXN0ZW5lciog
ZCkKK3sKKwlyZXR1cm4gYWRvcHRSZWYobmV3IFdlYkV2ZW50TGlzdGVuZXIoZCkpOworfQorCiAv
LyBET01FdmVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIERPTUV2ZW50OjpET01FdmVudChQYXNzUmVmUHRyPFdl
YkNvcmU6OkV2ZW50PiBlKQpJbmRleDogRE9NRXZlbnRzQ2xhc3Nlcy5oDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gRE9NRXZlbnRzQ2xhc3Nlcy5oCShyZXZpc2lvbiA4NTg3NikNCisrKyBET01FdmVudHNDbGFz
c2VzLmgJKHdvcmtpbmcgY29weSkNCkBAIC0yOCw2ICsyOCw3IEBADQogCiAjaW5jbHVkZSAiV2Vi
S2l0LmgiCiAjaW5jbHVkZSAiRE9NQ29yZUNsYXNzZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0V2
ZW50TGlzdGVuZXIuaD4KIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgpAQCAtNDEsNiArNDIsMTggQEANCiAKIGNsYXNzIERPTVVJRXZlbnQ7CiAK
K2NsYXNzIFdlYkV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcgor
eworcHVibGljOgorICAgIFdlYkV2ZW50TGlzdGVuZXIoSURPTUV2ZW50TGlzdGVuZXIqKTsKKyAg
ICB+V2ViRXZlbnRMaXN0ZW5lcigpOworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEV2ZW50TGlzdGVuZXImKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvcmU6OkV2ZW50Kik7CisJc3RhdGljIFBhc3NS
ZWZQdHI8V2ViRXZlbnRMaXN0ZW5lcj4gY3JlYXRlKElET01FdmVudExpc3RlbmVyKiBkKTsKK3By
aXZhdGU6CisgICAgSURPTUV2ZW50TGlzdGVuZXIqIG1faURPTUV2ZW50TGlzdGVuZXI7Cit9Owor
CiBjbGFzcyBET01FdmVudExpc3RlbmVyIDogcHVibGljIERPTU9iamVjdCwgcHVibGljIElET01F
dmVudExpc3RlbmVyCiB7CiBwdWJsaWM6CkluZGV4OiBJbnRlcmZhY2VzL0lXZWJGcmFtZS5pZGwN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBJbnRlcmZhY2VzL0lXZWJGcmFtZS5pZGwJKHJldmlzaW9uIDg1ODc2
KQ0KKysrIEludGVyZmFjZXMvSVdlYkZyYW1lLmlkbAkod29ya2luZyBjb3B5KQ0KQEAgLTI2MCw0
ICsyNjAsMTIgQEANCiAgICAgICAgQGRpc2N1c3Npb24gUGVyZm9ybXMgSFRUUC8xLjEgZW5kLXRv
LWVuZCByZWxvYWQuCiAgICAqLwogICAgSFJFU1VMVCByZWxvYWRGcm9tT3JpZ2luKCk7CisKKyAg
ICAvKiEKKyAgICAgICAgQG1ldGhvZCBET01XaW5kb3cKKyAgICAgICAgQGFic3RyYWN0IFJldHVy
bnMgdGhlIERPTSB3aW5kb3cgb2YgdGhlIGZyYW1lLgorICAgICAgICBAZGVzY3JpcHRpb24gUmV0
dXJucyBuaWwgaWYgdGhlIGZyYW1lIGRvZXMgbm90IGNvbnRhaW4gYSBET00gd2luZG93IHN1Y2gg
YXMgYSBzdGFuZGFsb25lIGltYWdlLgorICAgICAgICAtIChET01XaW5kb3cgKilET01XaW5kb3c7
CisgICAgKi8KKyAgICBIUkVTVUxUIERPTVdpbmRvdyhbb3V0LCByZXR2YWxdIElET01XaW5kb3cq
KiB3aW5kb3cpOwogfQpJbmRleDogV2ViRnJhbWUuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViRnJh
bWUuY3BwCShyZXZpc2lvbiA4NTg3NikNCisrKyBXZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkN
CkBAIC00NzksNiArNDc5LDI0IEBADQogICAgIHJldHVybiAqcmVzdWx0ID8gU19PSyA6IEVfRkFJ
TDsKIH0KIAorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkZyYW1lOjpET01XaW5kb3co
CisgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJRE9NV2luZG93Kiogd2luZG93KQoreworICAgIGlm
ICghd2luZG93KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworICAgIH0KKworICAgICp3aW5kb3cgPSAwOworCisgICAgaWYgKEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKHRoaXMpKQorICAgICAgICBpZiAoV2ViQ29yZTo6RE9NV2luZG93
KiBjb3JlV2luZG93ID0gY29yZUZyYW1lLT5kb21XaW5kb3coKSkKKyAgICAgICAgICAgICp3aW5k
b3cgPSA6OkRPTVdpbmRvdzo6Y3JlYXRlSW5zdGFuY2UoY29yZVdpbmRvdyk7CisKKyAgICByZXR1
cm4gKndpbmRvdyA/IFNfT0sgOiBFX0ZBSUw7Cit9CisKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViRnJhbWU6OmZyYW1lRWxlbWVudCggCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJRE9N
SFRNTEVsZW1lbnQqKiBmcmFtZUVsZW1lbnQpCiB7CkluZGV4OiBXZWJGcmFtZS5oDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gV2ViRnJhbWUuaAkocmV2aXNpb24gODU4NzYpDQorKysgV2ViRnJhbWUuaAkod29y
a2luZyBjb3B5KQ0KQEAgLTEwNSw2ICsxMDUsOSBAQA0KIAogICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBET01Eb2N1bWVudCggCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0g
Ki8gSURPTURvY3VtZW50KiogZG9jdW1lbnQpOworCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIERPTVdpbmRvdyggCisgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSURP
TVdpbmRvdyoqIHdpbmRvdyk7CiAgICAgCiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIGZyYW1lRWxlbWVudCggCiAgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSURPTUhU
TUxFbGVtZW50ICoqZnJhbWVFbGVtZW50KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92636</attachid>
            <date>2011-05-06 14:12:27 -0700</date>
            <delta_ts>2011-05-18 17:45:23 -0700</delta_ts>
            <desc>Patch for adding event listeners v3</desc>
            <filename>eventlisteners.patch</filename>
            <type>text/plain</type>
            <size>14224</size>
            <attacher name="Anthony Johnson">anthony.johnson</attacher>
            
              <data encoding="base64">SW5kZXg6IERPTUNvcmVDbGFzc2VzLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIERPTUNvcmVDbGFzc2Vz
LmNwcAkocmV2aXNpb24gODU4NzYpDQorKysgRE9NQ29yZUNsYXNzZXMuY3BwCSh3b3JraW5nIGNv
cHkpDQpAQCAtOTAsNiArOTAsOCBAQA0KICAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0
PElET01Ob2RlKj4odGhpcyk7CiAgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlk
b2YoRE9NTm9kZSkpKQogICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8RE9NTm9kZSo+
KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElET01FdmVu
dFRhcmdldCkpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SURPTUV2ZW50VGFy
Z2V0Kj4odGhpcyk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gRE9NT2JqZWN0OjpRdWVyeUlu
dGVyZmFjZShyaWlkLCBwcHZPYmplY3QpOwogCkBAIC0zOTksMjcgKzQwMSwzOCBAQA0KIAogLy8g
RE9NTm9kZSAtIElET01FdmVudFRhcmdldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTU5vZGU6
OmFkZEV2ZW50TGlzdGVuZXIoIAotICAgIC8qIFtpbl0gKi8gQlNUUiAvKnR5cGUqLywKLSAgICAv
KiBbaW5dICovIElET01FdmVudExpc3RlbmVyKiAvKmxpc3RlbmVyKi8sCi0gICAgLyogW2luXSAq
LyBCT09MIC8qdXNlQ2FwdHVyZSovKQorSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01Ob2Rl
OjphZGRFdmVudExpc3RlbmVyKAorICAgIC8qIFtpbl0gKi8gQlNUUiB0eXBlLAorICAgIC8qIFtp
bl0gKi8gSURPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLAorICAgIC8qIFtpbl0gKi8gQk9PTCB1
c2VDYXB0dXJlKQogewotICAgIHJldHVybiBFX05PVElNUEw7CisgICAgUmVmUHRyPFdlYkV2ZW50
TGlzdGVuZXI+IHdlYkxpc3RlbmVyID0gV2ViRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGxpc3RlbmVy
KTsKKyAgICBtX25vZGUtPmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgd2ViTGlzdGVuZXIsIHVzZUNh
cHR1cmUpOworCisgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgRE9NTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lciggCi0gICAgLyogW2luXSAqLyBCU1RSIC8q
dHlwZSovLAotICAgIC8qIFtpbl0gKi8gSURPTUV2ZW50TGlzdGVuZXIqIC8qbGlzdGVuZXIqLywK
LSAgICAvKiBbaW5dICovIEJPT0wgLyp1c2VDYXB0dXJlKi8pCitIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIERPTU5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoCisgICAgLyogW2luXSAqLyBCU1RS
IHR5cGUsCisgICAgLyogW2luXSAqLyBJRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsCisgICAg
LyogW2luXSAqLyBCT09MIHVzZUNhcHR1cmUpCiB7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKKyAg
ICBpZighbGlzdGVuZXIgfHwgIXR5cGUpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAg
aWYgKCFtX25vZGUpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgUmVmUHRyPFdlYkV2ZW50
TGlzdGVuZXI+IHdlYkxpc3RlbmVyID0gV2ViRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGxpc3RlbmVy
KTsKKyAgICBtX25vZGUtPnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgd2ViTGlzdGVuZXIuZ2V0
KCksIHVzZUNhcHR1cmUpOworICAgIHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIERPTU5vZGU6OmRpc3BhdGNoRXZlbnQoIAogICAgIC8qIFtpbl0gKi8gSURPTUV2
ZW50KiBldnQsCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MKiByZXN1bHQpCiB7Ci0gICAg
aWYgKCFtX25vZGUgfHwgIWV2dCkKKyAgICBpZighZXZ0IHx8ICFyZXN1bHQpCisgICAgICAgIHJl
dHVybiBFX1BPSU5URVI7CisgICAgaWYgKCFtX25vZGUpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7
CiAKICNpZiAwICAgLy8gRklYTUUgLSByYWlzZSBkb20gZXhjZXB0aW9ucwpAQCAtODE4LDYgKzgz
MSwxNDcgQEANCiAgICAgcmV0dXJuIGRvbURvY3VtZW50OwogfQogCisvLyBET01XaW5kb3cgLSBJ
VW5rbm93biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01XaW5kb3c6OlF1ZXJ5SW50ZXJm
YWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSAw
OworICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSURPTVdpbmRvdykpCisgICAgICAgICpw
cHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJRE9NV2luZG93Kj4odGhpcyk7CisgICAgZWxzZSBpZiAo
SXNFcXVhbEdVSUQocmlpZCwgSUlEX0lET01FdmVudFRhcmdldCkpCisgICAgICAgICpwcHZPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxJRE9NRXZlbnRUYXJnZXQqPih0aGlzKTsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiBET01PYmplY3Q6OlF1ZXJ5SW50ZXJmYWNlKHJpaWQsIHBwdk9iamVjdCk7CisK
KyAgICBBZGRSZWYoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworLy8gRE9NV2luZG93IC0gSURP
TVdpbmRvdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01XaW5kb3c6OmRvY3VtZW50KAor
ICAgIC8qIFtvdXQsIHJldHZhbF0gKi8gSURPTURvY3VtZW50KiogcmVzdWx0KQoreworICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworICAgIH0KKworICAgICpyZXN1bHQgPSBET01Eb2N1bWVudDo6Y3JlYXRl
SW5zdGFuY2UobV93aW5kb3ctPmRvY3VtZW50KCkpOworICAgIHJldHVybiAqcmVzdWx0ID8gU19P
SyA6IEVfRkFJTDsKK30KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01XaW5kb3c6Omdl
dENvbXB1dGVkU3R5bGUoCisgICAgLyogW2luXSAqLyBJRE9NRWxlbWVudCogZWxlbWVudCwgCisg
ICAgLyogW2luXSAqLyBCU1RSIHBzZXVkb0VsZW1lbnQpCit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBET01XaW5kb3c6OmdldE1hdGNoZWRDU1NSdWxlcygKKyAgICAvKiBbaW5dICovIElET01F
bGVtZW50KiBlbGVtZW50LCAKKyAgICAvKiBbaW5dICovIEJTVFIgcHNldWRvRWxlbWVudCwgCisg
ICAgLyogW2luXSAqLyBCT09MIGF1dGhvck9ubHksIAorICAgIC8qIFtvdXQsIHJldHZhbF0gKi8g
SURPTUNTU1J1bGVMaXN0KiogcmVzdWx0KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9N
V2luZG93OjpkZXZpY2VQaXhlbFJhdGlvKAorICAgIC8qIFtvdXQsIHJldHZhbF0gKi8gZG91Ymxl
KiByZXN1bHQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEVfTk9U
SU1QTDsKK30KKworLy8gRE9NV2luZG93IC0gSURPTUV2ZW50VGFyZ2V0IC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIERPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcigKKyAgICAvKiBbaW5dICov
IEJTVFIgdHlwZSwKKyAgICAvKiBbaW5dICovIElET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lciwK
KyAgICAvKiBbaW5dICovIEJPT0wgdXNlQ2FwdHVyZSkKK3sKKyAgICBpZighdHlwZSB8fCAhbGlz
dGVuZXIpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgaWYgKCFtX3dpbmRvdykKKyAg
ICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICBSZWZQdHI8V2ViRXZlbnRMaXN0ZW5lcj4gd2ViTGlz
dGVuZXIgPSBXZWJFdmVudExpc3RlbmVyOjpjcmVhdGUobGlzdGVuZXIpOworICAgIG1fd2luZG93
LT5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHdlYkxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICBy
ZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01XaW5kb3c6OnJl
bW92ZUV2ZW50TGlzdGVuZXIoCisgICAgLyogW2luXSAqLyBCU1RSIHR5cGUsCisgICAgLyogW2lu
XSAqLyBJRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsCisgICAgLyogW2luXSAqLyBCT09MIHVz
ZUNhcHR1cmUpCit7CisgICAgaWYoIXR5cGUgfHwgIWxpc3RlbmVyKQorICAgICAgICByZXR1cm4g
RV9QT0lOVEVSOworICAgIGlmICghbV93aW5kb3cpCisgICAgICAgIHJldHVybiBFX0ZBSUw7Cisg
ICAgUmVmUHRyPFdlYkV2ZW50TGlzdGVuZXI+IHdlYkxpc3RlbmVyID0gV2ViRXZlbnRMaXN0ZW5l
cjo6Y3JlYXRlKGxpc3RlbmVyKTsKKyAgICBtX3dpbmRvdy0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0
eXBlLCB3ZWJMaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSk7CisgICAgcmV0dXJuIFNfT0s7Cit9
CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NV2luZG93OjpkaXNwYXRjaEV2ZW50KAor
ICAgIC8qIFtpbl0gKi8gSURPTUV2ZW50KiBldnQsCisgICAgLyogW3JldHZhbF1bb3V0XSAqLyBC
T09MKiByZXN1bHQpCit7CisgICAgaWYgKCFyZXN1bHQgfHwgIWV2dCkKKyAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKyAgICBpZiAoIW1fd2luZG93KQorICAgICAgICByZXR1cm4gRV9GQUlMOwor
CisjaWYgMCAvLyBGSVhNRSAtIHJhaXNlIGRvbSBleGNlcHRpb25zCisgICAgaWYgKCFbc2VsZiBf
bm9kZV0tPmlzRXZlbnRUYXJnZXROb2RlKCkpCisgICAgICAgIFdlYkNvcmU6OnJhaXNlRE9NRXhj
ZXB0aW9uKERPTV9OT1RfU1VQUE9SVEVEX0VSUik7CisjZW5kaWYKKworICAgIENPTVB0cjxET01F
dmVudD4gZG9tRXZlbnQ7CisgICAgSFJFU1VMVCBociA9IGV2dC0+UXVlcnlJbnRlcmZhY2UoSUlE
X0RPTUV2ZW50LCAodm9pZCoqKSAmZG9tRXZlbnQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAg
ICAgICByZXR1cm4gaHI7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICAqcmVzdWx0ID0gbV93aW5kb3ctPmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQtPmNvcmVFdmVudCgp
LCBlYykgPyBUUlVFIDogRkFMU0U7CisjaWYgMCAvLyBGSVhNRSAtIHJhaXNlIGRvbSBleGNlcHRp
b25zCisgICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9yKGVjKTsKKyNlbmRpZgorICAgIHJldHVy
biBTX09LOworfQorCisKKy8vIERPTVdpbmRvdyAtIERPTVdpbmRvdyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitET01XaW5kb3c6OkRPTVdpbmRv
dyhXZWJDb3JlOjpET01XaW5kb3cqIHcpCis6IG1fd2luZG93KHcpCit7Cit9CisKK0RPTVdpbmRv
dzo6fkRPTVdpbmRvdygpCit7Cit9CisKK0lET01XaW5kb3cqIERPTVdpbmRvdzo6Y3JlYXRlSW5z
dGFuY2UoV2ViQ29yZTo6RE9NV2luZG93KiB3KQoreworICAgIGlmICghdykKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBIUkVTVUxUIGhyOworICAgIElET01XaW5kb3cqIGRvbVdpbmRvdyA9IDA7
CisKKyAgICBET01XaW5kb3cqIG5ld1dpbmRvdyA9IG5ldyBET01XaW5kb3codyk7CisgICAgaHIg
PSBuZXdXaW5kb3ctPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRE9NV2luZG93LCByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJmRvbVdpbmRvdykpOworCisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIGRvbVdpbmRvdzsKK30KKwogLy8gRE9NRWxlbWVudCAt
IElVbmtub3duIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUVsZW1lbnQ6OlF1ZXJ5SW50
ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQpJbmRleDogRE9NQ29yZUNsYXNz
ZXMuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIERPTUNvcmVDbGFzc2VzLmgJKHJldmlzaW9uIDg1ODc2KQ0K
KysrIERPTUNvcmVDbGFzc2VzLmgJKHdvcmtpbmcgY29weSkNCkBAIC0zMiw2ICszMiw3IEBADQog
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRWxlbWVudDsKIGNsYXNzIERvY3VtZW50OworY2xh
c3MgRE9NV2luZG93OwogY2xhc3MgTm9kZTsKIGNsYXNzIE5vZGVMaXN0OwogfQpAQCAtNTMzLDYg
KzUzNCw5MSBAQA0KICAgICBXZWJDb3JlOjpEb2N1bWVudCogbV9kb2N1bWVudDsKIH07CiAKK2Ns
YXNzIERPTVdpbmRvdyA6IHB1YmxpYyBET01PYmplY3QsIHB1YmxpYyBJRE9NV2luZG93LCBwdWJs
aWMgSURPTUV2ZW50VGFyZ2V0IHsKK3Byb3RlY3RlZDoKKyAgICBET01XaW5kb3coV2ViQ29yZTo6
RE9NV2luZG93Kik7CisgICAgfkRPTVdpbmRvdygpOworCitwdWJsaWM6CisgICAgc3RhdGljIElE
T01XaW5kb3cqIGNyZWF0ZUluc3RhbmNlKFdlYkNvcmU6OkRPTVdpbmRvdyopOworCitwdWJsaWM6
CisgICAgLy8gSVVua25vd24KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpOworICAgIHZpcnR1
YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZvaWQpIHsgcmV0dXJuIERPTU9iamVj
dDo6QWRkUmVmKCk7IH0KKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVh
c2Uodm9pZCkgeyByZXR1cm4gRE9NT2JqZWN0OjpSZWxlYXNlKCk7IH0KKworICAgIC8vIElXZWJT
Y3JpcHRPYmplY3QKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgdGhyb3dF
eGNlcHRpb24oCisgICAgICAgIC8qIFtpbl0gKi8gQlNUUiBleGNlcHRpb25NZXNzYWdlLAorICAg
ICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3VsdCkgeyByZXR1cm4gRE9NT2JqZWN0
Ojp0aHJvd0V4Y2VwdGlvbihleGNlcHRpb25NZXNzYWdlLCByZXN1bHQpOyB9CisgICAgCisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNhbGxXZWJTY3JpcHRNZXRob2QoCisg
ICAgICAgIC8qIFtpbl0gKi8gQlNUUiBuYW1lLAorICAgICAgICAvKiBbc2l6ZV9pc11baW5dICov
IGNvbnN0IFZBUklBTlQgYXJnc1sgIF0sCisgICAgICAgIC8qIFtpbl0gKi8gaW50IGNBcmdzLAor
ICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIFZBUklBTlQqIHJlc3VsdCkgeyByZXR1cm4gRE9N
T2JqZWN0OjpjYWxsV2ViU2NyaXB0TWV0aG9kKG5hbWUsIGFyZ3MsIGNBcmdzLCByZXN1bHQpOyB9
CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGV2YWx1YXRlV2Vi
U2NyaXB0KAorICAgICAgICAvKiBbaW5dICovIEJTVFIgc2NyaXB0LAorICAgICAgICAvKiBbcmV0
dmFsXVtvdXRdICovIFZBUklBTlQqIHJlc3VsdCkgeyByZXR1cm4gRE9NT2JqZWN0OjpldmFsdWF0
ZVdlYlNjcmlwdChzY3JpcHQsIHJlc3VsdCk7IH0KKyAgICAKKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgcmVtb3ZlV2ViU2NyaXB0S2V5KAorICAgICAgICAvKiBbaW5dICov
IEJTVFIgbmFtZSkgeyByZXR1cm4gRE9NT2JqZWN0OjpyZW1vdmVXZWJTY3JpcHRLZXkobmFtZSk7
IH0KKyAgICAKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc3RyaW5nUmVw
cmVzZW50YXRpb24oCisgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiogc3RyaW5nUmVw
cmVzZW50YXRpb24pIHsgcmV0dXJuIERPTU9iamVjdDo6c3RyaW5nUmVwcmVzZW50YXRpb24oc3Ry
aW5nUmVwcmVzZW50YXRpb24pOyB9CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIHdlYlNjcmlwdFZhbHVlQXRJbmRleCgKKyAgICAgICAgLyogW2luXSAqLyB1bnNp
Z25lZCBpbnQgaW5kZXgsCisgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gVkFSSUFOVCogcmVz
dWx0KSB7IHJldHVybiBET01PYmplY3Q6OndlYlNjcmlwdFZhbHVlQXRJbmRleChpbmRleCwgcmVz
dWx0KTsgfQorICAgIAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRX
ZWJTY3JpcHRWYWx1ZUF0SW5kZXgoCisgICAgICAgIC8qIFtpbl0gKi8gdW5zaWduZWQgaW50IGlu
ZGV4LAorICAgICAgICAvKiBbaW5dICovIFZBUklBTlQgdmFsKSB7IHJldHVybiBET01PYmplY3Q6
OnNldFdlYlNjcmlwdFZhbHVlQXRJbmRleChpbmRleCwgdmFsKTsgfQorICAgIAorICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRFeGNlcHRpb24oCisgICAgICAgIC8qIFtp
bl0gKi8gQlNUUiBkZXNjcmlwdGlvbikgeyByZXR1cm4gRE9NT2JqZWN0OjpzZXRFeGNlcHRpb24o
ZGVzY3JpcHRpb24pOyB9CisKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
ZG9jdW1lbnQoCisgICAgICAgIC8qIFtvdXQsIHJldHZhbF0gKi8gSURPTURvY3VtZW50KiopOwor
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldENvbXB1dGVkU3R5bGUo
CisgICAgICAgIC8qIFtpbl0gKi8gSURPTUVsZW1lbnQqLCAKKyAgICAgICAgLyogW2luXSAqLyBC
U1RSKTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRNYXRjaGVk
Q1NTUnVsZXMoCisgICAgICAgIC8qIFtpbl0gKi8gSURPTUVsZW1lbnQqLCAKKyAgICAgICAgLyog
W2luXSAqLyBCU1RSLCAKKyAgICAgICAgLyogW2luXSAqLyBCT09MLCAKKyAgICAgICAgLyogW291
dCwgcmV0dmFsXSAqLyBJRE9NQ1NTUnVsZUxpc3QqKik7CisKKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgZGV2aWNlUGl4ZWxSYXRpbygKKyAgICAgICAgLyogW291dCwgcmV0
dmFsXSAqLyBkb3VibGUqKTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBhZGRFdmVudExpc3RlbmVyKCAKKyAgICAgICAgLyogW2luXSAqLyBCU1RSLAorICAgICAgICAv
KiBbaW5dICovIElET01FdmVudExpc3RlbmVyICosCisgICAgICAgIC8qIFtpbl0gKi8gQk9PTCk7
CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHJlbW92ZUV2ZW50
TGlzdGVuZXIoCisgICAgICAgIC8qIFtpbl0gKi8gQlNUUiwKKyAgICAgICAgLyogW2luXSAqLyBJ
RE9NRXZlbnRMaXN0ZW5lciAqLAorICAgICAgICAvKiBbaW5dICovIEJPT0wpOworICAgIAorICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaXNwYXRjaEV2ZW50KAorICAgICAg
ICAvKiBbaW5dICovIElET01FdmVudCAqLAorICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJP
T0wgKik7CisKKyAgICAvLyBET01XaW5kb3cKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIHdpbmRv
dygpIHsgcmV0dXJuIG1fd2luZG93OyB9CisKK3Byb3RlY3RlZDoKKyAgICBXZWJDb3JlOjpET01X
aW5kb3cqIG1fd2luZG93OworfTsKKworCisKIGNsYXNzIERPTUVsZW1lbnQgOiBwdWJsaWMgRE9N
Tm9kZSwgcHVibGljIElET01FbGVtZW50LCBwdWJsaWMgSURPTUVsZW1lbnRQcml2YXRlLCBwdWJs
aWMgSURPTU5vZGVFeHRlbnNpb25zLCBwdWJsaWMgSURPTUVsZW1lbnRDU1NJbmxpbmVTdHlsZSwg
cHVibGljIElET01FbGVtZW50RXh0ZW5zaW9ucyB7CiBwcm90ZWN0ZWQ6CiAgICAgRE9NRWxlbWVu
dChXZWJDb3JlOjpFbGVtZW50KiBlKTsKSW5kZXg6IERPTUV2ZW50c0NsYXNzZXMuY3BwDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gRE9NRXZlbnRzQ2xhc3Nlcy5jcHAJKHJldmlzaW9uIDg1ODc2KQ0KKysrIERP
TUV2ZW50c0NsYXNzZXMuY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMjksOSArMjksMTEgQEANCiAj
aW5jbHVkZSAiRE9NRXZlbnRzQ2xhc3Nlcy5oIgogCiAjaW5jbHVkZSA8V2ViQ29yZS9ET01XaW5k
b3cuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0V2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Nb3VzZUV2ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9DT01Q
dHIuaD4KIAogLy8gRE9NRXZlbnRMaXN0ZW5lciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01Myw2ICs1NSwzNiBAQA0KICAg
ICByZXR1cm4gRV9OT1RJTVBMOwogfQogCitXZWJFdmVudExpc3RlbmVyOjpXZWJFdmVudExpc3Rl
bmVyKElET01FdmVudExpc3RlbmVyKiBpKQorICAgIDpFdmVudExpc3RlbmVyKENQUEV2ZW50TGlz
dGVuZXJUeXBlKQorICAgICwgbV9pRE9NRXZlbnRMaXN0ZW5lcihpKQoreworICAgIG1faURPTUV2
ZW50TGlzdGVuZXItPkFkZFJlZigpOworfQorCitXZWJFdmVudExpc3RlbmVyOjp+V2ViRXZlbnRM
aXN0ZW5lcigpCit7CisgICAgbV9pRE9NRXZlbnRMaXN0ZW5lci0+UmVsZWFzZSgpOworfQorCiti
b29sIFdlYkV2ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0oY29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0
ZW5lciYgb3RoZXIpCit7CisgICAgcmV0dXJuIChvdGhlci50eXBlKCkgPT0gQ1BQRXZlbnRMaXN0
ZW5lclR5cGUgCisgICAgICAgICYmIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgV2ViRXZlbnRMaXN0
ZW5lcio+KCZvdGhlciktPm1faURPTUV2ZW50TGlzdGVuZXIgPT0gbV9pRE9NRXZlbnRMaXN0ZW5l
cik7Cit9CisKK3ZvaWQgV2ViRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogcywgV2ViQ29yZTo6RXZlbnQqIGUpCit7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkV2ZW50PiBlUHRyKGUpOworICAgIENPTVB0cjxJRE9NRXZlbnQ+IGRvbUV2ZW50
ID0gRE9NRXZlbnQ6OmNyZWF0ZUluc3RhbmNlKGVQdHIpOworICAgIG1faURPTUV2ZW50TGlzdGVu
ZXItPmhhbmRsZUV2ZW50KGRvbUV2ZW50LmdldCgpKTsKK30KKworUGFzc1JlZlB0cjxXZWJFdmVu
dExpc3RlbmVyPiBXZWJFdmVudExpc3RlbmVyOjpjcmVhdGUoSURPTUV2ZW50TGlzdGVuZXIqIGQp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJFdmVudExpc3RlbmVyKGQpKTsKK30KKwog
Ly8gRE9NRXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBET01FdmVudDo6RE9NRXZlbnQoUGFzc1JlZlB0cjxX
ZWJDb3JlOjpFdmVudD4gZSkKSW5kZXg6IERPTUV2ZW50c0NsYXNzZXMuaA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIERPTUV2ZW50c0NsYXNzZXMuaAkocmV2aXNpb24gODU4NzYpDQorKysgRE9NRXZlbnRzQ2xh
c3Nlcy5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMjgsNiArMjgsNyBAQA0KIAogI2luY2x1ZGUgIldl
YktpdC5oIgogI2luY2x1ZGUgIkRPTUNvcmVDbGFzc2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9F
dmVudExpc3RlbmVyLmg+CiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KQEAgLTQxLDYgKzQyLDE4IEBADQogCiBjbGFzcyBET01VSUV2ZW50Owog
CitjbGFzcyBXZWJFdmVudExpc3RlbmVyIDogcHVibGljIFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIK
K3sKK3B1YmxpYzoKKyAgICBXZWJFdmVudExpc3RlbmVyKElET01FdmVudExpc3RlbmVyKik7Cisg
ICAgfldlYkV2ZW50TGlzdGVuZXIoKTsKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBFdmVudExpc3RlbmVyJik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYkV2ZW50TGlzdGVuZXI+IGNyZWF0ZShJRE9NRXZlbnRMaXN0ZW5lciogZCk7
Citwcml2YXRlOgorICAgIElET01FdmVudExpc3RlbmVyKiBtX2lET01FdmVudExpc3RlbmVyOwor
fTsKKwogY2xhc3MgRE9NRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBET01PYmplY3QsIHB1YmxpYyBJ
RE9NRXZlbnRMaXN0ZW5lcgogewogcHVibGljOgpJbmRleDogSW50ZXJmYWNlcy9JV2ViRnJhbWUu
aWRsDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotLS0gSW50ZXJmYWNlcy9JV2ViRnJhbWUuaWRsCShyZXZpc2lvbiA4
NTg3NikNCisrKyBJbnRlcmZhY2VzL0lXZWJGcmFtZS5pZGwJKHdvcmtpbmcgY29weSkNCkBAIC0y
NjAsNCArMjYwLDEyIEBADQogICAgICAgIEBkaXNjdXNzaW9uIFBlcmZvcm1zIEhUVFAvMS4xIGVu
ZC10by1lbmQgcmVsb2FkLgogICAgKi8KICAgIEhSRVNVTFQgcmVsb2FkRnJvbU9yaWdpbigpOwor
CisgICAgLyohCisgICAgICAgIEBtZXRob2QgRE9NV2luZG93CisgICAgICAgIEBhYnN0cmFjdCBS
ZXR1cm5zIHRoZSBET00gd2luZG93IG9mIHRoZSBmcmFtZS4KKyAgICAgICAgQGRlc2NyaXB0aW9u
IFJldHVybnMgbmlsIGlmIHRoZSBmcmFtZSBkb2VzIG5vdCBjb250YWluIGEgRE9NIHdpbmRvdyBz
dWNoIGFzIGEgc3RhbmRhbG9uZSBpbWFnZS4KKyAgICAgICAgLSAoRE9NV2luZG93ICopRE9NV2lu
ZG93OworICAgICovCisgICAgSFJFU1VMVCBET01XaW5kb3coW291dCwgcmV0dmFsXSBJRE9NV2lu
ZG93Kiogd2luZG93KTsKIH0KSW5kZXg6IFdlYkZyYW1lLmNwcA0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdl
YkZyYW1lLmNwcAkocmV2aXNpb24gODU4NzYpDQorKysgV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNv
cHkpDQpAQCAtNDc5LDYgKzQ3OSwyNCBAQA0KICAgICByZXR1cm4gKnJlc3VsdCA/IFNfT0sgOiBF
X0ZBSUw7CiB9CiAKKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJGcmFtZTo6RE9NV2lu
ZG93KAorICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSURPTVdpbmRvdyoqIHdpbmRvdykKK3sKKyAg
ICBpZiAoIXdpbmRvdykgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKKyAgICB9CisKKyAgICAqd2luZG93ID0gMDsKKworICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gY29yZSh0aGlzKSkKKyAgICAgICAgaWYgKFdlYkNvcmU6OkRPTVdp
bmRvdyogY29yZVdpbmRvdyA9IGNvcmVGcmFtZS0+ZG9tV2luZG93KCkpCisgICAgICAgICAgICAq
d2luZG93ID0gOjpET01XaW5kb3c6OmNyZWF0ZUluc3RhbmNlKGNvcmVXaW5kb3cpOworCisgICAg
cmV0dXJuICp3aW5kb3cgPyBTX09LIDogRV9GQUlMOworfQorCiBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkZyYW1lOjpmcmFtZUVsZW1lbnQoIAogICAgIC8qIFtyZXR2YWxdW291dF0gKi8g
SURPTUhUTUxFbGVtZW50KiogZnJhbWVFbGVtZW50KQogewpJbmRleDogV2ViRnJhbWUuaA0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLS0tIFdlYkZyYW1lLmgJKHJldmlzaW9uIDg1ODc2KQ0KKysrIFdlYkZyYW1lLmgJ
KHdvcmtpbmcgY29weSkNCkBAIC0xMDUsNiArMTA1LDkgQEANCiAKICAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NRG9jdW1lbnQoIAogICAgICAgICAvKiBbcmV0dmFsXVtv
dXRdICovIElET01Eb2N1bWVudCoqIGRvY3VtZW50KTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBET01XaW5kb3coIAorICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICov
IElET01XaW5kb3cqKiB3aW5kb3cpOwogICAgIAogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBmcmFtZUVsZW1lbnQoIAogICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElE
T01IVE1MRWxlbWVudCAqKmZyYW1lRWxlbWVudCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>94014</attachid>
            <date>2011-05-18 17:45:30 -0700</date>
            <delta_ts>2011-05-20 16:40:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60269-20110518174529.patch</filename>
            <type>text/plain</type>
            <size>18452</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2ODA1KQorKysgU291cmNlL1dlYktpdC93
aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTEtMDUtMTgg
IEFudGhvbnkgSm9obnNvbiA8YW50aG9ueS5qb2huc29uQGZsZXhzaW0uY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCB0aGUgYWJp
bGl0eSB0byBhZGQgQysrIGV2ZW50IGxpc3RlbmVycyB0byBodG1sIGRvbQorICAgICAgICBlbGVt
ZW50cyBhbmQgZG9tIHdpbmRvdy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYwMjY5CisKKyAgICAgICAgKiBET01Db3JlQ2xhc3Nlcy5jcHA6IEFkZCBu
ZXcgRE9NV2luZG93IGNsYXNzIGFuZCBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgIChET01Ob2Rl
OjpRdWVyeUludGVyZmFjZSk6IFJlcG9ydCB0aGF0IHRoZSBET01Ob2RlIGltcGxlbWVudHMKKyAg
ICAgICAgIHRoZSBJRG9tRXZlbnRUYXJnZXQgaW50ZXJmYWNlLgorICAgICAgICAoRE9NTm9kZTo6
YWRkRXZlbnRMaXN0ZW5lcik6IEFkZCBpbXBsZW1lbnRhdGlvbiBvZiBhIENPTS1iYXNlZAorICAg
ICAgICAgZXZlbnQgbGlzdGVuZXIuCisgICAgICAgIChET01Ob2RlOjpyZW1vdmVFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKERPTU5vZGU6OmRpc3BhdGNoRXZlbnQpOiAKKyAgICAgICAgKERPTURv
Y3VtZW50OjpjcmVhdGVJbnN0YW5jZSk6CisgICAgICAgIChET01XaW5kb3c6OlF1ZXJ5SW50ZXJm
YWNlKTogTmV3IGltcGxlbWVudGF0aW9uLgorICAgICAgICAoRE9NV2luZG93Ojpkb2N1bWVudCk6
IE5ldyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKERPTVdpbmRvdzo6Z2V0Q29tcHV0ZWRTdHls
ZSk6IFN0dWIuCisgICAgICAgIChET01XaW5kb3c6OmdldE1hdGNoZWRDU1NSdWxlcyk6IFN0dWIu
CisgICAgICAgIChET01XaW5kb3c6OmRldmljZVBpeGVsUmF0aW8pOiBTdHViLgorICAgICAgICAo
RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyKTogTmV3IGltcGxlbWVudGF0aW9uLgorICAgICAg
ICAoRE9NV2luZG93OjpyZW1vdmVFdmVudExpc3RlbmVyKTogTmV3IGltcGxlbWVudGF0aW9uLgor
ICAgICAgICAoRE9NV2luZG93OjpkaXNwYXRjaEV2ZW50KTogTmV3IGltcGxlbWVudGF0aW9uLgor
ICAgICAgICAoRE9NV2luZG93OjpET01XaW5kb3cpOiBOZXcgaW1wbGVtZW50YXRpb24uCisgICAg
ICAgIChET01XaW5kb3c6On5ET01XaW5kb3cpOiBOZXcgaW1wbGVtZW50YXRpb24uCisgICAgICAg
IChET01XaW5kb3c6OmNyZWF0ZUluc3RhbmNlKTogTmV3IGltcGxlbWVudGF0aW9uLgorICAgICAg
ICAqIERPTUNvcmVDbGFzc2VzLmg6IEFkZCBuZXcgRE9NV2luZG93IGNsYXNzIGFuZCBkZWNsYXJh
dGlvbnMuCisgICAgICAgIChET01XaW5kb3c6OkFkZFJlZik6IE5ldyBkZWNsYXJhdGlvbi4KKyAg
ICAgICAgKERPTVdpbmRvdzo6UmVsZWFzZSk6IE5ldyBkZWNsYXJhdGlvbi4KKyAgICAgICAgKERP
TVdpbmRvdzo6dGhyb3dFeGNlcHRpb24pOiBOZXcgZGVjbGFyYXRpb24uCisgICAgICAgIChET01X
aW5kb3c6OmNhbGxXZWJTY3JpcHRNZXRob2QpOiBOZXcgZGVjbGFyYXRpb24uCisgICAgICAgIChE
T01XaW5kb3c6OmV2YWx1YXRlV2ViU2NyaXB0KTogTmV3IGRlY2xhcmF0aW9uLgorICAgICAgICAo
RE9NV2luZG93OjpyZW1vdmVXZWJTY3JpcHRLZXkpOiBOZXcgZGVjbGFyYXRpb24uCisgICAgICAg
IChET01XaW5kb3c6OnN0cmluZ1JlcHJlc2VudGF0aW9uKTogTmV3IGRlY2xhcmF0aW9uLgorICAg
ICAgICAoRE9NV2luZG93Ojp3ZWJTY3JpcHRWYWx1ZUF0SW5kZXgpOiBOZXcgZGVjbGFyYXRpb24u
CisgICAgICAgIChET01XaW5kb3c6OnNldFdlYlNjcmlwdFZhbHVlQXRJbmRleCk6IE5ldyBkZWNs
YXJhdGlvbi4KKyAgICAgICAgKERPTVdpbmRvdzo6c2V0RXhjZXB0aW9uKTogTmV3IGRlY2xhcmF0
aW9uLgorICAgICAgICAoRE9NV2luZG93Ojp3aW5kb3cpOiBOZXcgZGVjbGFyYXRpb24uCisgICAg
ICAgICogRE9NRXZlbnRzQ2xhc3Nlcy5jcHA6IEFkZCBuZXcgV2ViRXZlbnRMaXN0ZW5lciBhbmQg
aW1wbGVtZW50YXRpb24uCisgICAgICAgIChET01FdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6
IE5ldyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkV2ZW50TGlzdGVuZXI6OldlYkV2ZW50
TGlzdGVuZXIpOiBOZXcgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJFdmVudExpc3RlbmVy
Ojp+V2ViRXZlbnRMaXN0ZW5lcik6IE5ldyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkV2
ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0pOiBOZXcgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChX
ZWJFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6IE5ldyBpbXBsZW1lbnRhdGlvbi4KKyAgICAg
ICAgKFdlYkV2ZW50TGlzdGVuZXI6OmNyZWF0ZSk6IE5ldyBpbXBsZW1lbnRhdGlvbi4KKyAgICAg
ICAgKiBET01FdmVudHNDbGFzc2VzLmg6IEFkZCBuZXcgV2ViRXZlbnRMaXN0ZW5lciBjbGFzcyBk
ZWNsYXJhdGlvbi4KKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJGcmFtZS5pZGw6IEFkZCBuZXcg
RE9NV2luZG93IGFjY2Vzc29yIHRvIHRoZQorICAgICAgICAgbWFpbiBXZWIgRnJhbWUgaW50ZXJm
YWNlLgorICAgICAgICAqIFdlYkZyYW1lLmNwcDogQWRkIGltcGxlbWVudGF0aW9uIG9mIG5ldyBE
T01XaW5kb3cgY3JlYXRpb24gbWV0aG9kLgorICAgICAgICAoV2ViRnJhbWU6OkRPTVdpbmRvdyk6
CisgICAgICAgICogV2ViRnJhbWUuaDogQWRkIERPTVdpbmRvdyBkZWNsYXJhdGlvbi4KKwogMjAx
MS0wNS0xMyAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU2ltb24gRnJhc2VyLgpJbmRleDogU291cmNlL1dlYktpdC93aW4vRE9NQ29yZUNsYXNzZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0RPTUNvcmVDbGFzc2VzLmNwcAko
cmV2aXNpb24gODY3OTkpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9ET01Db3JlQ2xhc3Nlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBET01Ob2RlOjpRdWVyeQogICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SURPTU5v
ZGUqPih0aGlzKTsKICAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihET01O
b2RlKSkpCiAgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxET01Ob2RlKj4odGhpcyk7
CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSURPTUV2ZW50VGFyZ2V0
KSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJRE9NRXZlbnRUYXJnZXQqPih0
aGlzKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBET01PYmplY3Q6OlF1ZXJ5SW50ZXJmYWNl
KHJpaWQsIHBwdk9iamVjdCk7CiAKQEAgLTM5OSwzNCArNDAxLDQwIEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgRE9NTm9kZTo6c2V0VGUKIAogLy8gRE9NTm9kZSAtIElET01FdmVudFRhcmdl
dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1I
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTU5vZGU6OmFkZEV2ZW50TGlzdGVuZXIoIAotICAg
IC8qIFtpbl0gKi8gQlNUUiAvKnR5cGUqLywKLSAgICAvKiBbaW5dICovIElET01FdmVudExpc3Rl
bmVyKiAvKmxpc3RlbmVyKi8sCi0gICAgLyogW2luXSAqLyBCT09MIC8qdXNlQ2FwdHVyZSovKQor
SFJFU1VMVCBET01Ob2RlOjphZGRFdmVudExpc3RlbmVyKAorICAgIC8qIFtpbl0gKi8gQlNUUiB0
eXBlLAorICAgIC8qIFtpbl0gKi8gSURPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLAorICAgIC8q
IFtpbl0gKi8gQk9PTCB1c2VDYXB0dXJlKQogewotICAgIHJldHVybiBFX05PVElNUEw7CisgICAg
UmVmUHRyPFdlYkV2ZW50TGlzdGVuZXI+IHdlYkxpc3RlbmVyID0gV2ViRXZlbnRMaXN0ZW5lcjo6
Y3JlYXRlKGxpc3RlbmVyKTsKKyAgICBtX25vZGUtPmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgd2Vi
TGlzdGVuZXIsIHVzZUNhcHR1cmUpOworCisgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgRE9NTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lciggCi0gICAgLyog
W2luXSAqLyBCU1RSIC8qdHlwZSovLAotICAgIC8qIFtpbl0gKi8gSURPTUV2ZW50TGlzdGVuZXIq
IC8qbGlzdGVuZXIqLywKLSAgICAvKiBbaW5dICovIEJPT0wgLyp1c2VDYXB0dXJlKi8pCitIUkVT
VUxUIERPTU5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoCisgICAgLyogW2luXSAqLyBCU1RSIHR5
cGUsCisgICAgLyogW2luXSAqLyBJRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsCisgICAgLyog
W2luXSAqLyBCT09MIHVzZUNhcHR1cmUpCiB7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKKyAgICBp
ZiAoIWxpc3RlbmVyIHx8ICF0eXBlKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgIGlm
ICghbV9ub2RlKQorICAgICAgICByZXR1cm4gRV9GQUlMOworICAgIFJlZlB0cjxXZWJFdmVudExp
c3RlbmVyPiB3ZWJMaXN0ZW5lciA9IFdlYkV2ZW50TGlzdGVuZXI6OmNyZWF0ZShsaXN0ZW5lcik7
CisgICAgbV9ub2RlLT5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHdlYkxpc3RlbmVyLmdldCgp
LCB1c2VDYXB0dXJlKTsKKyAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBET01Ob2RlOjpkaXNwYXRjaEV2ZW50KCAKK0hSRVNVTFQgRE9NTm9kZTo6ZGlzcGF0
Y2hFdmVudCgKICAgICAvKiBbaW5dICovIElET01FdmVudCogZXZ0LAogICAgIC8qIFtyZXR2YWxd
W291dF0gKi8gQk9PTCogcmVzdWx0KQogewotICAgIGlmICghbV9ub2RlIHx8ICFldnQpCisgICAg
aWYgKCFldnQgfHwgIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICBpZiAo
IW1fbm9kZSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotI2lmIDAgICAvLyBGSVhNRSAtIHJh
aXNlIGRvbSBleGNlcHRpb25zCi0gICAgaWYgKCFbc2VsZiBfbm9kZV0tPmlzRXZlbnRUYXJnZXRO
b2RlKCkpCi0gICAgICAgIFdlYkNvcmU6OnJhaXNlRE9NRXhjZXB0aW9uKERPTV9OT1RfU1VQUE9S
VEVEX0VSUik7Ci0jZW5kaWYKLQogICAgIENPTVB0cjxET01FdmVudD4gZG9tRXZlbnQ7CiAgICAg
SFJFU1VMVCBociA9IGV2dC0+UXVlcnlJbnRlcmZhY2UoSUlEX0RPTUV2ZW50LCAodm9pZCoqKSAm
ZG9tRXZlbnQpOwogICAgIGlmIChGQUlMRUQoaHIpKQpAQCAtNDM0LDEwICs0NDIsNyBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIERPTU5vZGU6OmRpc3BhCiAKICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICAqcmVzdWx0ID0gbV9ub2RlLT5kaXNwYXRjaEV2ZW50KGRv
bUV2ZW50LT5jb3JlRXZlbnQoKSwgZWMpID8gVFJVRSA6IEZBTFNFOwotI2lmIDAgICAvLyBGSVhN
RSAtIHJhaXNlIGRvbSBleGNlcHRpb25zCi0gICAgV2ViQ29yZTo6cmFpc2VPbkRPTUVycm9yKGVj
KTsKLSNlbmRpZgotICAgIHJldHVybiBTX09LOworICAgIHJldHVybiBlYyA/IEVfRkFJTCA6IFNf
T0s7CiB9CiAKIC8vIERPTU5vZGUgLSBET01Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTgxOCw2ICs4MjMsMTM4IEBAIElE
T01Eb2N1bWVudCogRE9NRG9jdW1lbnQ6OmNyZWF0ZUluc3RhbmMKICAgICByZXR1cm4gZG9tRG9j
dW1lbnQ7CiB9CiAKKy8vIERPTVdpbmRvdyAtIElVbmtub3duIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIUkVTVUxUIERPTVdpbmRvdzo6
UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBw
dk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JRE9NV2luZG93KSkK
KyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElET01XaW5kb3cqPih0aGlzKTsKKyAg
ICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSURPTUV2ZW50VGFyZ2V0KSkKKyAgICAg
ICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElET01FdmVudFRhcmdldCo+KHRoaXMpOworICAg
IGVsc2UKKyAgICAgICAgcmV0dXJuIERPTU9iamVjdDo6UXVlcnlJbnRlcmZhY2UocmlpZCwgcHB2
T2JqZWN0KTsKKworICAgIEFkZFJlZigpOworICAgIHJldHVybiBTX09LOworfQorCisvLyBET01X
aW5kb3cgLSBJRE9NV2luZG93IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCitIUkVTVUxUIERPTVdpbmRvdzo6ZG9jdW1lbnQoCisgICAgLyog
W291dCwgcmV0dmFsXSAqLyBJRE9NRG9jdW1lbnQqKiByZXN1bHQpCit7CisgICAgaWYgKCFyZXN1
bHQpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBFX1BP
SU5URVI7CisgICAgfQorCisgICAgKnJlc3VsdCA9IERPTURvY3VtZW50OjpjcmVhdGVJbnN0YW5j
ZShtX3dpbmRvdy0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuICpyZXN1bHQgPyBTX09LIDogRV9G
QUlMOworfQorCitIUkVTVUxUIERPTVdpbmRvdzo6Z2V0Q29tcHV0ZWRTdHlsZSgKKyAgICAvKiBb
aW5dICovIElET01FbGVtZW50KiBlbGVtZW50LCAKKyAgICAvKiBbaW5dICovIEJTVFIgcHNldWRv
RWxlbWVudCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRV9OT1RJ
TVBMOworfQorCitIUkVTVUxUIERPTVdpbmRvdzo6Z2V0TWF0Y2hlZENTU1J1bGVzKAorICAgIC8q
IFtpbl0gKi8gSURPTUVsZW1lbnQqIGVsZW1lbnQsIAorICAgIC8qIFtpbl0gKi8gQlNUUiBwc2V1
ZG9FbGVtZW50LCAKKyAgICAvKiBbaW5dICovIEJPT0wgYXV0aG9yT25seSwgCisgICAgLyogW291
dCwgcmV0dmFsXSAqLyBJRE9NQ1NTUnVsZUxpc3QqKiByZXN1bHQpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBET01XaW5k
b3c6OmRldmljZVBpeGVsUmF0aW8oCisgICAgLyogW291dCwgcmV0dmFsXSAqLyBkb3VibGUqIHJl
c3VsdCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRV9OT1RJTVBM
OworfQorCisvLyBET01XaW5kb3cgLSBJRE9NRXZlbnRUYXJnZXQgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQgRE9NV2luZG93
OjphZGRFdmVudExpc3RlbmVyKAorICAgIC8qIFtpbl0gKi8gQlNUUiB0eXBlLAorICAgIC8qIFtp
bl0gKi8gSURPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLAorICAgIC8qIFtpbl0gKi8gQk9PTCB1
c2VDYXB0dXJlKQoreworICAgIGlmICghdHlwZSB8fCAhbGlzdGVuZXIpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisgICAgaWYgKCFtX3dpbmRvdykKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsK
KyAgICBSZWZQdHI8V2ViRXZlbnRMaXN0ZW5lcj4gd2ViTGlzdGVuZXIgPSBXZWJFdmVudExpc3Rl
bmVyOjpjcmVhdGUobGlzdGVuZXIpOworICAgIG1fd2luZG93LT5hZGRFdmVudExpc3RlbmVyKHR5
cGUsIHdlYkxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJF
U1VMVCBET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIoCisgICAgLyogW2luXSAqLyBCU1RS
IHR5cGUsCisgICAgLyogW2luXSAqLyBJRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsCisgICAg
LyogW2luXSAqLyBCT09MIHVzZUNhcHR1cmUpCit7CisgICAgaWYgKCF0eXBlIHx8ICFsaXN0ZW5l
cikKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICBpZiAoIW1fd2luZG93KQorICAgICAg
ICByZXR1cm4gRV9GQUlMOworICAgIFJlZlB0cjxXZWJFdmVudExpc3RlbmVyPiB3ZWJMaXN0ZW5l
ciA9IFdlYkV2ZW50TGlzdGVuZXI6OmNyZWF0ZShsaXN0ZW5lcik7CisgICAgbV93aW5kb3ctPnJl
bW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgd2ViTGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1cmUpOwor
ICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIERPTVdpbmRvdzo6ZGlzcGF0Y2hFdmVudCgK
KyAgICAvKiBbaW5dICovIElET01FdmVudCogZXZ0LAorICAgIC8qIFtyZXR2YWxdW291dF0gKi8g
Qk9PTCogcmVzdWx0KQoreworICAgIGlmICghcmVzdWx0IHx8ICFldnQpCisgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CisgICAgaWYgKCFtX3dpbmRvdykKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsK
KworICAgIENPTVB0cjxET01FdmVudD4gZG9tRXZlbnQ7CisgICAgSFJFU1VMVCBociA9IGV2dC0+
UXVlcnlJbnRlcmZhY2UoSUlEX0RPTUV2ZW50LCAodm9pZCoqKSAmZG9tRXZlbnQpOworICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICAqcmVzdWx0ID0gbV93aW5kb3ctPmRpc3BhdGNoRXZlbnQoZG9t
RXZlbnQtPmNvcmVFdmVudCgpLCBlYykgPyBUUlVFIDogRkFMU0U7CisgICAgcmV0dXJuIGVjID8g
RV9GQUlMIDogU19PSzsKK30KKworCisvLyBET01XaW5kb3cgLSBET01XaW5kb3cgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRE9NV2luZG93OjpE
T01XaW5kb3coV2ViQ29yZTo6RE9NV2luZG93KiB3KQorOiBtX3dpbmRvdyh3KQoreworfQorCitE
T01XaW5kb3c6On5ET01XaW5kb3coKQoreworfQorCitJRE9NV2luZG93KiBET01XaW5kb3c6OmNy
ZWF0ZUluc3RhbmNlKFdlYkNvcmU6OkRPTVdpbmRvdyogdykKK3sKKyAgICBpZiAoIXcpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgRE9NV2luZG93KiBuZXdXaW5kb3cgPSBuZXcgRE9NV2luZG93
KHcpOworCisgICAgSURPTVdpbmRvdyogZG9tV2luZG93ID0gMDsKKyAgICBIUkVTVUxUIGhyID0g
bmV3V2luZG93LT5RdWVyeUludGVyZmFjZShJSURfSURPTVdpbmRvdywgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZkb21XaW5kb3cpKTsKKworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBkb21XaW5kb3c7Cit9CisKIC8vIERPTUVsZW1lbnQgLSBJ
VW5rbm93biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBET01FbGVtZW50OjpRdWVyeUludGVy
ZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
d2luL0RPTUNvcmVDbGFzc2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vRE9N
Q29yZUNsYXNzZXMuaAkocmV2aXNpb24gODY3OTkpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9ET01D
b3JlQ2xhc3Nlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBET01XaW5k
b3c7CiBjbGFzcyBOb2RlOwogY2xhc3MgTm9kZUxpc3Q7CiB9CkBAIC01MzMsNiArNTM0LDkxIEBA
IHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpEb2N1bWVudCogbV9kb2N1bWVudDsKIH07CiAKK2Ns
YXNzIERPTVdpbmRvdyA6IHB1YmxpYyBET01PYmplY3QsIHB1YmxpYyBJRE9NV2luZG93LCBwdWJs
aWMgSURPTUV2ZW50VGFyZ2V0IHsKK3Byb3RlY3RlZDoKKyAgICBET01XaW5kb3coV2ViQ29yZTo6
RE9NV2luZG93Kik7CisgICAgfkRPTVdpbmRvdygpOworCitwdWJsaWM6CisgICAgc3RhdGljIElE
T01XaW5kb3cqIGNyZWF0ZUluc3RhbmNlKFdlYkNvcmU6OkRPTVdpbmRvdyopOworCitwdWJsaWM6
CisgICAgLy8gSVVua25vd24KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpOworICAgIHZpcnR1
YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZvaWQpIHsgcmV0dXJuIERPTU9iamVj
dDo6QWRkUmVmKCk7IH0KKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVh
c2Uodm9pZCkgeyByZXR1cm4gRE9NT2JqZWN0OjpSZWxlYXNlKCk7IH0KKworICAgIC8vIElXZWJT
Y3JpcHRPYmplY3QKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgdGhyb3dF
eGNlcHRpb24oCisgICAgICAgIC8qIFtpbl0gKi8gQlNUUiBleGNlcHRpb25NZXNzYWdlLAorICAg
ICAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3VsdCkgeyByZXR1cm4gRE9NT2JqZWN0
Ojp0aHJvd0V4Y2VwdGlvbihleGNlcHRpb25NZXNzYWdlLCByZXN1bHQpOyB9CisgICAgCisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNhbGxXZWJTY3JpcHRNZXRob2QoCisg
ICAgICAgIC8qIFtpbl0gKi8gQlNUUiBuYW1lLAorICAgICAgICAvKiBbc2l6ZV9pc11baW5dICov
IGNvbnN0IFZBUklBTlQgYXJnc1sgIF0sCisgICAgICAgIC8qIFtpbl0gKi8gaW50IGNBcmdzLAor
ICAgICAgICAvKiBbcmV0dmFsXVtvdXRdICovIFZBUklBTlQqIHJlc3VsdCkgeyByZXR1cm4gRE9N
T2JqZWN0OjpjYWxsV2ViU2NyaXB0TWV0aG9kKG5hbWUsIGFyZ3MsIGNBcmdzLCByZXN1bHQpOyB9
CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGV2YWx1YXRlV2Vi
U2NyaXB0KAorICAgICAgICAvKiBbaW5dICovIEJTVFIgc2NyaXB0LAorICAgICAgICAvKiBbcmV0
dmFsXVtvdXRdICovIFZBUklBTlQqIHJlc3VsdCkgeyByZXR1cm4gRE9NT2JqZWN0OjpldmFsdWF0
ZVdlYlNjcmlwdChzY3JpcHQsIHJlc3VsdCk7IH0KKyAgICAKKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgcmVtb3ZlV2ViU2NyaXB0S2V5KAorICAgICAgICAvKiBbaW5dICov
IEJTVFIgbmFtZSkgeyByZXR1cm4gRE9NT2JqZWN0OjpyZW1vdmVXZWJTY3JpcHRLZXkobmFtZSk7
IH0KKyAgICAKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc3RyaW5nUmVw
cmVzZW50YXRpb24oCisgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiogc3RyaW5nUmVw
cmVzZW50YXRpb24pIHsgcmV0dXJuIERPTU9iamVjdDo6c3RyaW5nUmVwcmVzZW50YXRpb24oc3Ry
aW5nUmVwcmVzZW50YXRpb24pOyB9CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIHdlYlNjcmlwdFZhbHVlQXRJbmRleCgKKyAgICAgICAgLyogW2luXSAqLyB1bnNp
Z25lZCBpbnQgaW5kZXgsCisgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gVkFSSUFOVCogcmVz
dWx0KSB7IHJldHVybiBET01PYmplY3Q6OndlYlNjcmlwdFZhbHVlQXRJbmRleChpbmRleCwgcmVz
dWx0KTsgfQorICAgIAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRX
ZWJTY3JpcHRWYWx1ZUF0SW5kZXgoCisgICAgICAgIC8qIFtpbl0gKi8gdW5zaWduZWQgaW50IGlu
ZGV4LAorICAgICAgICAvKiBbaW5dICovIFZBUklBTlQgdmFsKSB7IHJldHVybiBET01PYmplY3Q6
OnNldFdlYlNjcmlwdFZhbHVlQXRJbmRleChpbmRleCwgdmFsKTsgfQorICAgIAorICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRFeGNlcHRpb24oCisgICAgICAgIC8qIFtp
bl0gKi8gQlNUUiBkZXNjcmlwdGlvbikgeyByZXR1cm4gRE9NT2JqZWN0OjpzZXRFeGNlcHRpb24o
ZGVzY3JpcHRpb24pOyB9CisKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
ZG9jdW1lbnQoCisgICAgICAgIC8qIFtvdXQsIHJldHZhbF0gKi8gSURPTURvY3VtZW50KiopOwor
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGdldENvbXB1dGVkU3R5bGUo
CisgICAgICAgIC8qIFtpbl0gKi8gSURPTUVsZW1lbnQqLCAKKyAgICAgICAgLyogW2luXSAqLyBC
U1RSKTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBnZXRNYXRjaGVk
Q1NTUnVsZXMoCisgICAgICAgIC8qIFtpbl0gKi8gSURPTUVsZW1lbnQqLCAKKyAgICAgICAgLyog
W2luXSAqLyBCU1RSLCAKKyAgICAgICAgLyogW2luXSAqLyBCT09MLCAKKyAgICAgICAgLyogW291
dCwgcmV0dmFsXSAqLyBJRE9NQ1NTUnVsZUxpc3QqKik7CisKKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgZGV2aWNlUGl4ZWxSYXRpbygKKyAgICAgICAgLyogW291dCwgcmV0
dmFsXSAqLyBkb3VibGUqKTsKKworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBhZGRFdmVudExpc3RlbmVyKAorICAgICAgICAvKiBbaW5dICovIEJTVFIsCisgICAgICAgIC8q
IFtpbl0gKi8gSURPTUV2ZW50TGlzdGVuZXIgKiwKKyAgICAgICAgLyogW2luXSAqLyBCT09MKTsK
KyAgICAKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcmVtb3ZlRXZlbnRM
aXN0ZW5lcigKKyAgICAgICAgLyogW2luXSAqLyBCU1RSLAorICAgICAgICAvKiBbaW5dICovIElE
T01FdmVudExpc3RlbmVyICosCisgICAgICAgIC8qIFtpbl0gKi8gQk9PTCk7CisgICAgCisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpc3BhdGNoRXZlbnQoCisgICAgICAg
IC8qIFtpbl0gKi8gSURPTUV2ZW50ICosCisgICAgICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQk9P
TCAqKTsKKworICAgIC8vIERPTVdpbmRvdworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogd2luZG93
KCkgeyByZXR1cm4gbV93aW5kb3c7IH0KKworcHJvdGVjdGVkOgorICAgIFdlYkNvcmU6OkRPTVdp
bmRvdyogbV93aW5kb3c7Cit9OworCisKKwogY2xhc3MgRE9NRWxlbWVudCA6IHB1YmxpYyBET01O
b2RlLCBwdWJsaWMgSURPTUVsZW1lbnQsIHB1YmxpYyBJRE9NRWxlbWVudFByaXZhdGUsIHB1Ymxp
YyBJRE9NTm9kZUV4dGVuc2lvbnMsIHB1YmxpYyBJRE9NRWxlbWVudENTU0lubGluZVN0eWxlLCBw
dWJsaWMgSURPTUVsZW1lbnRFeHRlbnNpb25zIHsKIHByb3RlY3RlZDoKICAgICBET01FbGVtZW50
KFdlYkNvcmU6OkVsZW1lbnQqIGUpOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vRE9NRXZlbnRz
Q2xhc3Nlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vRE9NRXZlbnRzQ2xh
c3Nlcy5jcHAJKHJldmlzaW9uIDg2Nzk5KQorKysgU291cmNlL1dlYktpdC93aW4vRE9NRXZlbnRz
Q2xhc3Nlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMiBAQAogI2luY2x1ZGUg
PGluaXRndWlkLmg+CiAjaW5jbHVkZSAiRE9NRXZlbnRzQ2xhc3Nlcy5oIgogCisjaW5jbHVkZSA8
V2ViQ29yZS9DT01QdHIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RPTVdpbmRvdy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL01vdXNlRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaD4KIAogLy8gRE9NRXZlbnRMaXN0ZW5lciAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01Myw2
ICs1NSwzNiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUV2ZW50TGlzdGVuCiAgICAg
cmV0dXJuIEVfTk9USU1QTDsKIH0KIAorV2ViRXZlbnRMaXN0ZW5lcjo6V2ViRXZlbnRMaXN0ZW5l
cihJRE9NRXZlbnRMaXN0ZW5lciogaSkKKyAgICA6IEV2ZW50TGlzdGVuZXIoQ1BQRXZlbnRMaXN0
ZW5lclR5cGUpCisgICAgLCBtX2lET01FdmVudExpc3RlbmVyKGkpCit7CisgICAgbV9pRE9NRXZl
bnRMaXN0ZW5lci0+QWRkUmVmKCk7Cit9CisKK1dlYkV2ZW50TGlzdGVuZXI6On5XZWJFdmVudExp
c3RlbmVyKCkKK3sKKyAgICBtX2lET01FdmVudExpc3RlbmVyLT5SZWxlYXNlKCk7Cit9CisKK2Jv
b2wgV2ViRXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PShjb25zdCBXZWJDb3JlOjpFdmVudExpc3Rl
bmVyJiBvdGhlcikKK3sKKyAgICByZXR1cm4gKG90aGVyLnR5cGUoKSA9PSBDUFBFdmVudExpc3Rl
bmVyVHlwZSAKKyAgICAgICAgJiYgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBXZWJFdmVudExpc3Rl
bmVyKj4oJm90aGVyKS0+bV9pRE9NRXZlbnRMaXN0ZW5lciA9PSBtX2lET01FdmVudExpc3RlbmVy
KTsKK30KKwordm9pZCBXZWJFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzLCBXZWJDb3JlOjpFdmVudCogZSkKK3sKKyAgICBSZWZQdHI8
V2ViQ29yZTo6RXZlbnQ+IGVQdHIoZSk7CisgICAgQ09NUHRyPElET01FdmVudD4gZG9tRXZlbnQg
PSBET01FdmVudDo6Y3JlYXRlSW5zdGFuY2UoZVB0cik7CisgICAgbV9pRE9NRXZlbnRMaXN0ZW5l
ci0+aGFuZGxlRXZlbnQoZG9tRXZlbnQuZ2V0KCkpOworfQorCitQYXNzUmVmUHRyPFdlYkV2ZW50
TGlzdGVuZXI+IFdlYkV2ZW50TGlzdGVuZXI6OmNyZWF0ZShJRE9NRXZlbnRMaXN0ZW5lciogZCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkV2ZW50TGlzdGVuZXIoZCkpOworfQorCiAv
LyBET01FdmVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIERPTUV2ZW50OjpET01FdmVudChQYXNzUmVmUHRyPFdl
YkNvcmU6OkV2ZW50PiBlKQpAQCAtNTYxLDcgKzU5Myw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRE9NTXV0YXRpb25FdmUKICAgICByZXR1cm4gRV9OT1RJTVBMOwogfQogCi1IUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIERPTU11dGF0aW9uRXZlbnQ6OmluaXRNdXRhdGlvbkV2ZW50KCAK
K0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NTXV0YXRpb25FdmVudDo6aW5pdE11dGF0aW9u
RXZlbnQoCiAgICAgLyogW2luXSAqLyBCU1RSIC8qdHlwZSovLAogICAgIC8qIFtpbl0gKi8gQk9P
TCAvKmNhbkJ1YmJsZSovLAogICAgIC8qIFtpbl0gKi8gQk9PTCAvKmNhbmNlbGFibGUqLywKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvd2luL0RPTUV2ZW50c0NsYXNzZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3dpbi9ET01FdmVudHNDbGFzc2VzLmgJKHJldmlzaW9uIDg2Nzk5KQorKysg
U291cmNlL1dlYktpdC93aW4vRE9NRXZlbnRzQ2xhc3Nlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlICJET01Db3JlQ2xh
c3Nlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgogCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00MSw2ICs0Miwx
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERPTVVJRXZlbnQ7CiAKK2NsYXNzIFdl
YkV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6
CisgICAgV2ViRXZlbnRMaXN0ZW5lcihJRE9NRXZlbnRMaXN0ZW5lciopOworICAgIH5XZWJFdmVu
dExpc3RlbmVyKCk7CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0
ZW5lciYpOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJFdmVudExpc3RlbmVyPiBjcmVhdGUoSURPTUV2ZW50TGlzdGVuZXIqKTsKK3ByaXZhdGU6Cisg
ICAgSURPTUV2ZW50TGlzdGVuZXIqIG1faURPTUV2ZW50TGlzdGVuZXI7Cit9OworCiBjbGFzcyBE
T01FdmVudExpc3RlbmVyIDogcHVibGljIERPTU9iamVjdCwgcHVibGljIElET01FdmVudExpc3Rl
bmVyCiB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCShyZXZpc2lvbiA4Njc5
OSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDgwLDYgKzQ4MCwyNCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkZyYW1lOjpET01E
CiAgICAgcmV0dXJuICpyZXN1bHQgPyBTX09LIDogRV9GQUlMOwogfQogCisKK0hSRVNVTFQgV2Vi
RnJhbWU6OkRPTVdpbmRvdygvKiBbcmV0dmFsXVtvdXRdICovIElET01XaW5kb3cqKiB3aW5kb3cp
Cit7CisgICAgaWYgKCF3aW5kb3cpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgfQorCisgICAgKndpbmRvdyA9IDA7CisKKyAg
ICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUodGhpcykpIHsKKyAgICAgICAgaWYgKFdlYkNv
cmU6OkRPTVdpbmRvdyogY29yZVdpbmRvdyA9IGNvcmVGcmFtZS0+ZG9tV2luZG93KCkpCisgICAg
ICAgICAgICAqd2luZG93ID0gOjpET01XaW5kb3c6OmNyZWF0ZUluc3RhbmNlKGNvcmVXaW5kb3cp
OworICAgIH0KKworICAgIHJldHVybiAqd2luZG93ID8gU19PSyA6IEVfRkFJTDsKK30KKwogSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJGcmFtZTo6ZnJhbWVFbGVtZW50KCAKICAgICAvKiBb
cmV0dmFsXVtvdXRdICovIElET01IVE1MRWxlbWVudCoqIGZyYW1lRWxlbWVudCkKIHsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC93aW4vV2ViRnJhbWUuaAkocmV2aXNpb24gODY3OTkpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDggQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTURvY3VtZW50KCAKICAgICAg
ICAgLyogW3JldHZhbF1bb3V0XSAqLyBJRE9NRG9jdW1lbnQqKiBkb2N1bWVudCk7CisKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NV2luZG93KC8qIFtyZXR2YWxdW291
dF0gKi8gSURPTVdpbmRvdyoqKTsKICAgICAKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgZnJhbWVFbGVtZW50KCAKICAgICAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJRE9N
SFRNTEVsZW1lbnQgKipmcmFtZUVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vSW50
ZXJmYWNlcy9JV2ViRnJhbWUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0lu
dGVyZmFjZXMvSVdlYkZyYW1lLmlkbAkocmV2aXNpb24gODY3OTkpCisrKyBTb3VyY2UvV2ViS2l0
L3dpbi9JbnRlcmZhY2VzL0lXZWJGcmFtZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw0ICsy
NjAsMTIgQEAgaW50ZXJmYWNlIElXZWJGcmFtZSA6IElVbmtub3duCiAgICAgICAgQGRpc2N1c3Np
b24gUGVyZm9ybXMgSFRUUC8xLjEgZW5kLXRvLWVuZCByZWxvYWQuCiAgICAqLwogICAgSFJFU1VM
VCByZWxvYWRGcm9tT3JpZ2luKCk7CisKKyAgICAvKiEKKyAgICAgICAgQG1ldGhvZCBET01XaW5k
b3cKKyAgICAgICAgQGFic3RyYWN0IFJldHVybnMgdGhlIERPTSB3aW5kb3cgb2YgdGhlIGZyYW1l
LgorICAgICAgICBAZGVzY3JpcHRpb24gUmV0dXJucyBuaWwgaWYgdGhlIGZyYW1lIGRvZXMgbm90
IGNvbnRhaW4gYSBET00gd2luZG93IHN1Y2ggYXMgYSBzdGFuZGFsb25lIGltYWdlLgorICAgICAg
ICAtIChET01XaW5kb3cgKilET01XaW5kb3c7CisgICAgKi8KKyAgICBIUkVTVUxUIERPTVdpbmRv
dyhbb3V0LCByZXR2YWxdIElET01XaW5kb3cqKiB3aW5kb3cpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95029</attachid>
            <date>2011-05-26 13:40:40 -0700</date>
            <delta_ts>2011-06-01 14:16:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60269-20110526134039.patch</filename>
            <type>text/plain</type>
            <size>11346</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg3MzI1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjIgQEAKKzIwMTEtMDUtMjUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENyZWF0
ZSBhIHNpbXBsZSBleGFtcGxlIG9mIHVzaW5nIHRoZSBDT00tYmFzZWQgQysrIGxpc3RlbmVycy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjY5CisK
KyAgICAgICAgKiBXaW5MYXVuY2hlci9ET01EZWZhdWx0SW1wbC5oOiBBZGRlZC4gIFN0dWIgaW1w
bGVtZW50YXRpb24gb2YKKyAgICAgICAgICB0aGUgV2ViU2NyaXB0T2JqZWN0IGFuZCBET01FdmVu
dExpc3RlbmVyLgorICAgICAgICAqIFdpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcDoKKyAgICAg
ICAgKFNpbXBsZUV2ZW50TGlzdGVuZXI6OlNpbXBsZUV2ZW50TGlzdGVuZXIpOiBFeGFtcGxlIGlt
cGxlbWVudGF0aW9uCisgICAgICAgICAgb2YgYSBzaW1wbGUgRE9NIGV2ZW50IGxpc3RlbmVyLgor
ICAgICAgICAoU2ltcGxlRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOiAKKyAgICAgICAgKFdp
bkxhdW5jaGVyV2ViSG9zdDo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKTogQWRkZWQgaW1wbGVtZW50
YXRpb24KKyAgICAgICAgIHRvIGJpbmQgYSBDKysgbWV0aG9kIHRvIHRoZSAnb25jbGljaycgZXZl
bnQgZm9yIHRoZSBXZWJLaXQgbG9nby4KKyAgICAgICAgKF90V2luTWFpbik6CisgICAgICAgICog
V2luTGF1bmNoZXIvV2luTGF1bmNoZXIuaDoKKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5MYXVu
Y2hlci52Y3Byb2o6IEFkZCBuZXcgRE9NRGVmYXVsdEltcGwuaCBmaWxlLgorCiAyMDExLTA1LTI1
ICBKb24gSG9uZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVT
U0lPTiAoV2ViS2l0Mik6IENyYXNoIGluIEZsYXNoIG9uIFVTQSBUb2RheSBwaG90byBnYWxsZXJ5
CkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9ET01EZWZhdWx0SW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dpbkxhdW5jaGVyL0RPTURlZmF1bHRJbXBsLmgJKHJldmlzaW9uIDApCisrKyBUb29s
cy9XaW5MYXVuY2hlci9ET01EZWZhdWx0SW1wbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBbnRob255IEpvaG5zb24uIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQnJlbnQgRnVsZ2hhbS4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgRE9NRGVmYXVsdEltcGxfaAorI2RlZmluZSBET01EZWZhdWx0SW1wbF9oCisK
KyNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Lmg+CisKK2NsYXNzIFdlYlNjcmlwdE9iamVjdCA6IHB1
YmxpYyBJV2ViU2NyaXB0T2JqZWN0IHsKK3B1YmxpYzoKKyAgICBXZWJTY3JpcHRPYmplY3QoKSA6
IG1fcmVmQ291bnQoMCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+V2ViU2NyaXB0T2Jq
ZWN0KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gSVVua25vd24KKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBw
cHZPYmplY3QpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZv
aWQpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSh2b2lkKTsK
KworICAgIC8vIElXZWJTY3JpcHRPYmplY3QKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgdGhyb3dFeGNlcHRpb24oQlNUUiwgQk9PTCopIHsgcmV0dXJuIEVfTk9USU1QTDsg
fQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjYWxsV2ViU2NyaXB0TWV0
aG9kKEJTVFIsIGNvbnN0IFZBUklBTlRbXSwgaW50LCBWQVJJQU5UKikgeyByZXR1cm4gRV9OT1RJ
TVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGV2YWx1YXRlV2Vi
U2NyaXB0KEJTVFIsIFZBUklBTlQqKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcmVtb3ZlV2ViU2NyaXB0S2V5KEJTVFIpIHsgcmV0
dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBz
dHJpbmdSZXByZXNlbnRhdGlvbihCU1RSKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdlYlNjcmlwdFZhbHVlQXRJbmRleCh1bnNp
Z25lZCBpbnQsIFZBUklBTlQqKSAgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldFdlYlNjcmlwdFZhbHVlQXRJbmRleCh1bnNpZ25l
ZCBpbnQsIFZBUklBTlQpICB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0RXhjZXB0aW9uKEJTVFIpICB7IHJldHVybiBFX05PVElN
UEw7IH0KKworcHJvdGVjdGVkOgorICAgIFVMT05HIG1fcmVmQ291bnQ7Cit9OworCisKK2NsYXNz
IERPTU9iamVjdCA6IHB1YmxpYyBXZWJTY3JpcHRPYmplY3QsIHB1YmxpYyBJRE9NT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICAvLyBJVW5rbm93bgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7Cit9
OworCisKK2NsYXNzIERPTUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRE9NT2JqZWN0LCBwdWJsaWMg
SURPTUV2ZW50TGlzdGVuZXIgeworcHVibGljOgorICAgIC8vIElVbmtub3duCisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2
b2lkKiogcHB2T2JqZWN0KTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFk
ZFJlZih2b2lkKTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uo
dm9pZCk7CisKKyAgICAvLyBJV2ViU2NyaXB0T2JqZWN0CisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIHRocm93RXhjZXB0aW9uKEJTVFIsIEJPT0wqKSAgeyByZXR1cm4gRV9O
T1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNhbGxXZWJT
Y3JpcHRNZXRob2QoQlNUUiwgY29uc3QgVkFSSUFOVFtdLCBpbnQsIFZBUklBTlQqKSAgeyByZXR1
cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGV2
YWx1YXRlV2ViU2NyaXB0KEJTVFIsIFZBUklBTlQqKSAgeyByZXR1cm4gRV9OT1RJTVBMOyB9Cisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHJlbW92ZVdlYlNjcmlwdEtleShC
U1RSKSAgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIHN0cmluZ1JlcHJlc2VudGF0aW9uKEJTVFIqKSAgeyByZXR1cm4gRV9OT1RJTVBM
OyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdlYlNjcmlwdFZhbHVl
QXRJbmRleCh1bnNpZ25lZCBpbnQsIFZBUklBTlQqKSAgeyByZXR1cm4gRV9OT1RJTVBMOyB9Cisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldFdlYlNjcmlwdFZhbHVlQXRJ
bmRleCh1bnNpZ25lZCBpbnQsIFZBUklBTlQpICB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0RXhjZXB0aW9uKEJTVFIpIHsgcmV0
dXJuIEVfTk9USU1QTDsgfQorCisgICAgLy8gSURPTUV2ZW50TGlzdGVuZXIKKyAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgaGFuZGxlRXZlbnQoSURPTUV2ZW50KikgeyByZXR1
cm4gRV9OT1RJTVBMOyB9Cit9OworCisvLyBJVW5rbm93biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIUkVTVUxUIFdl
YlNjcmlwdE9iamVjdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmpl
Y3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJ
RF9JVW5rbm93bikpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViU2NyaXB0
T2JqZWN0Kj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lXZWJT
Y3JpcHRPYmplY3QpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYlNjcmlw
dE9iamVjdCo+KHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7
CisKKyAgICBBZGRSZWYoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworVUxPTkcgV2ViU2NyaXB0
T2JqZWN0OjpBZGRSZWYodm9pZCkKK3sKKyAgICByZXR1cm4gKyttX3JlZkNvdW50OworfQorCitV
TE9ORyBXZWJTY3JpcHRPYmplY3Q6OlJlbGVhc2Uodm9pZCkKK3sKKyAgICBVTE9ORyBuZXdSZWYg
PSAtLW1fcmVmQ291bnQ7CisgICAgaWYgKCFuZXdSZWYpCisgICAgICAgIGRlbGV0ZSh0aGlzKTsK
KworICAgIHJldHVybiBuZXdSZWY7Cit9CisKKy8vIERPTU9iamVjdCAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIUkVT
VUxUIERPTU9iamVjdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmpl
Y3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJ
RF9JRE9NT2JqZWN0KSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElET01PYmpl
Y3QqPih0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBXZWJTY3JpcHRPYmplY3Q6OlF1
ZXJ5SW50ZXJmYWNlKHJpaWQsIHBwdk9iamVjdCk7CisKKyAgICBXZWJTY3JpcHRPYmplY3Q6OkFk
ZFJlZigpOworICAgIHJldHVybiBTX09LOworfQorCisKKy8vIERPTUV2ZW50TGlzdGVuZXIgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorSFJFU1VMVCBET01FdmVudExpc3RlbmVyOjpRdWVyeUludGVyZmFjZShjb25zdCBJ
SUQgJnJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAg
aWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JRE9NRXZlbnRMaXN0ZW5lcikpCisgICAgICAgICpw
cHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJRE9NRXZlbnRMaXN0ZW5lcio+KHRoaXMpOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuIERPTU9iamVjdDo6UXVlcnlJbnRlcmZhY2UocmlpZCwgcHB2T2Jq
ZWN0KTsKKworICAgIEFkZFJlZigpOworICAgIHJldHVybiBTX09LOworfQorCitVTE9ORyBET01F
dmVudExpc3RlbmVyOjpBZGRSZWYodm9pZCkKK3sKKyAgICByZXR1cm4gV2ViU2NyaXB0T2JqZWN0
OjpBZGRSZWYoKTsKK30KKworVUxPTkcgRE9NRXZlbnRMaXN0ZW5lcjo6UmVsZWFzZSh2b2lkKQor
eworICAgIHJldHVybiBXZWJTY3JpcHRPYmplY3Q6OlJlbGVhc2UoKTsKK30KKworI2VuZGlmCklu
ZGV4OiBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuY3BwCShyZXZpc2lvbiA4NzI5OCkKKysrIFRvb2xz
L1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTkgKzI3
LDE5IEBACiAKICNpbmNsdWRlICJzdGRhZnguaCIKICNpbmNsdWRlICJXaW5MYXVuY2hlci5oIgot
I2luY2x1ZGUgPFdlYktpdC9XZWJLaXRDT01BUEkuaD4KIAotI2luY2x1ZGUgPHN0cmluZz4KKyNp
bmNsdWRlICJET01EZWZhdWx0SW1wbC5oIgorI2luY2x1ZGUgIlByaW50V2ViVUlEZWxlZ2F0ZS5o
IgorI2luY2x1ZGUgPFdlYktpdC9XZWJLaXRDT01BUEkuaD4KIAogI2luY2x1ZGUgPGNvbW1jdHJs
Lmg+CiAjaW5jbHVkZSA8Y29tbWRsZy5oPgogI2luY2x1ZGUgPG9iamJhc2UuaD4KICNpbmNsdWRl
IDxzaGVsbGFwaS5oPgogI2luY2x1ZGUgPHNobHdhcGkuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CiAj
aW5jbHVkZSA8d2luaW5ldC5oPgogCi0jaW5jbHVkZSAiUHJpbnRXZWJVSURlbGVnYXRlLmgiCi0K
ICNkZWZpbmUgTUFYX0xPQURTVFJJTkcgMTAwCiAjZGVmaW5lIFVSTEJBUl9IRUlHSFQgIDI0CiAK
QEAgLTgyLDYgKzgyLDI3IEBAIHN0YXRpYyBib29sIHNob3VsZFVzZUZ1bGxEZXNrdG9wKCkKICAg
ICByZXR1cm4gc19mdWxsRGVza3RvcDsKIH0KIAorY2xhc3MgU2ltcGxlRXZlbnRMaXN0ZW5lciA6
IHB1YmxpYyBET01FdmVudExpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBTaW1wbGVFdmVudExpc3Rl
bmVyKExQV1NUUiB0eXBlKQorICAgIHsKKyAgICAgICAgd2NzbmNweV9zKG1fZXZlbnRUeXBlLCAx
MDAsIHR5cGUsIDEwMCk7CisgICAgICAgIG1fZXZlbnRUeXBlWzk5XSA9IDA7CisgICAgfQorCisg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGhhbmRsZUV2ZW50KElET01FdmVu
dCogZXZ0KQorICAgIHsKKyAgICAgICAgd2NoYXJfdCBtZXNzYWdlWzI1NV07CisgICAgICAgIHdj
c2NweV9zKG1lc3NhZ2UsIDI1NSwgbV9ldmVudFR5cGUpOworICAgICAgICB3Y3NjYXRfcyhtZXNz
YWdlLCAyNTUsIEwiIGV2ZW50IGZpcmVkISIpOworICAgICAgICA6Ok1lc3NhZ2VCb3goMCwgbWVz
c2FnZSwgTCJFdmVudCBIYW5kbGVyIiwgTUJfT0spOworICAgICAgICByZXR1cm4gU19PSzsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgd2NoYXJfdCBtX2V2ZW50VHlwZVsxMDBdOworfTsKKwogSFJF
U1VMVCBXaW5MYXVuY2hlcldlYkhvc3Q6OnVwZGF0ZUFkZHJlc3NCYXIoSVdlYlZpZXcqIHdlYlZp
ZXcpCiB7CiAgICAgSVdlYkZyYW1lKiBtYWluRnJhbWUgPSAwOwpAQCAtMTUwLDYgKzE3MSwzNiBA
QCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBXaW5MYXVuY2hlcldlYkhvCiAgICAgcmV0dXJuIG5l
d1JlZjsKIH0KIAorSFJFU1VMVCBXaW5MYXVuY2hlcldlYkhvc3Q6OmRpZEZpbmlzaExvYWRGb3JG
cmFtZShJV2ViVmlldyogd2ViVmlldywgSVdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBJRE9NRG9j
dW1lbnQqIGRvYyA9IDA7CisgICAgZnJhbWUtPkRPTURvY3VtZW50KCZkb2MpOworCisgICAgSURP
TUVsZW1lbnQqIGVsZW1lbnQgPSAwOworICAgIElET01FdmVudFRhcmdldCogdGFyZ2V0ID0gMDsK
KyAgICBIUkVTVUxUIGhyID0gZG9jLT5nZXRFbGVtZW50QnlJZChMIndlYmtpdCBsb2dvIiwgJmVs
ZW1lbnQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgZ290byBleGl0OworCisg
ICAgaHIgPSBlbGVtZW50LT5RdWVyeUludGVyZmFjZShJSURfSURPTUV2ZW50VGFyZ2V0LCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJnRhcmdldCkpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgZ290byBleGl0OworCisgICAgaHIgPSB0YXJnZXQtPmFkZEV2ZW50TGlzdGVuZXIo
TCJjbGljayIsIG5ldyBTaW1wbGVFdmVudExpc3RlbmVyIChMIndlYmtpdCBsb2dvIGNsaWNrIiks
IEZBTFNFKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIGdvdG8gZXhpdDsKKwor
ZXhpdDoKKyAgICBpZiAodGFyZ2V0KQorICAgICAgICB0YXJnZXQtPlJlbGVhc2UoKTsKKyAgICBp
ZiAoZWxlbWVudCkKKyAgICAgICAgZWxlbWVudC0+UmVsZWFzZSgpOworICAgIGlmIChkb2MpCisg
ICAgICAgIGRvYy0+UmVsZWFzZSgpOworCisgICAgcmV0dXJuIGhyOworfQorCiBzdGF0aWMgdm9p
ZCByZXNpemVTdWJWaWV3cygpCiB7CiAgICAgaWYgKHVzZXNMYXllcmVkV2ViVmlldygpIHx8ICFn
Vmlld1dpbmRvdykKQEAgLTI5Miw3ICszNDMsNyBAQCBpbnQgQVBJRU5UUlkgX3RXaW5NYWluKEhJ
TlNUQU5DRSBoSW5zdGFuCiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIGdvdG8gZXhpdDsK
IAotICAgIHN0YXRpYyBCU1RSIGRlZmF1bHRIVE1MID0gU3lzQWxsb2NTdHJpbmcoVEVYVCgiPHAg
c3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjMDBGRjAwXCI+VGVzdGluZzwvcD48aW1nIHNyYz1c
Imh0dHA6Ly93ZWJraXQub3JnL2ltYWdlcy9pY29uLWdvbGQucG5nXCIgYWx0PVwiRmFjZVwiPjxk
aXYgc3R5bGU9XCJib3JkZXI6IHNvbGlkIGJsdWU7IGJhY2tncm91bmQ6IHdoaXRlO1wiIGNvbnRl
bnRlZGl0YWJsZT1cInRydWVcIj5kaXYgd2l0aCBibHVlIGJvcmRlcjwvZGl2Pjx1bD48bGk+Zm9v
PGxpPmJhcjxsaT5iYXo8L3VsPiIpKTsKKyAgICBzdGF0aWMgQlNUUiBkZWZhdWx0SFRNTCA9IFN5
c0FsbG9jU3RyaW5nKFRFWFQoIjxwIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogIzAwRkYwMFwi
PlRlc3Rpbmc8L3A+PGltZyBpZD1cIndlYmtpdCBsb2dvXCIgc3JjPVwiaHR0cDovL3dlYmtpdC5v
cmcvaW1hZ2VzL2ljb24tZ29sZC5wbmdcIiBhbHQ9XCJGYWNlXCI+PGRpdiBzdHlsZT1cImJvcmRl
cjogc29saWQgYmx1ZTsgYmFja2dyb3VuZDogd2hpdGU7XCIgY29udGVudGVkaXRhYmxlPVwidHJ1
ZVwiPmRpdiB3aXRoIGJsdWUgYm9yZGVyPC9kaXY+PHVsPjxsaT5mb288bGk+YmFyPGxpPmJhejwv
dWw+IikpOwogICAgIGZyYW1lLT5sb2FkSFRNTFN0cmluZyhkZWZhdWx0SFRNTCwgMCk7CiAgICAg
ZnJhbWUtPlJlbGVhc2UoKTsKIApJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5oCShyZXZpc2lv
biA4NzI5OCkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUoIAogICAgICAgICAvKiBbaW5d
ICovIElXZWJWaWV3KiB3ZWJWaWV3LAotICAgICAgICAvKiBbaW5dICovIElXZWJGcmFtZSogLypm
cmFtZSovKSB7IHJldHVybiBTX09LOyB9CisgICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lKiAv
KmZyYW1lKi8pOwogICAgIAogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBk
aWRGYWlsTG9hZFdpdGhFcnJvciggCiAgICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZp
ZXcsCkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci52Y3Byb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIudmNwcm9qCShyZXZpc2lvbiA4NzI5
OCkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDU4LDYgKzQ1OCwxMCBAQAogCQkJVW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5
QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iCiAJCQk+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLlxET01EZWZhdWx0SW1wbC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuXFByaW50V2ViVUlEZWxlZ2F0ZS5oIgogCQkJCT4KIAkJCTwvRmls
ZT4K
</data>

          </attachment>
      

    </bug>

</bugzilla>