<?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>87426</bug_id>
          
          <creation_ts>2012-05-24 13:56:02 -0700</creation_ts>
          <short_desc>[Win] ASSERTION FAILED !m_ptr under AccessibilityController::winAddNotificationListener</short_desc>
          <delta_ts>2015-01-26 22:24:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>InRadar, LayoutTestFailure</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jessie Berlin">jberlin</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>adele</cc>
    
    <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>jberlin</cc>
    
    <cc>jhoneycutt</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>633190</commentid>
    <comment_count>0</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-05-24 13:56:02 -0700</bug_when>
    <thetext>The following tests all &apos;crash&apos; when running the tests under debug:

accessibility/menu-list-sends-change-notification.html
accessibility/multiselect-list-reports-active-option.html
platform/win/accessibility/detached-object-notification-crash.html

Unhandled exception at 0x73728b2a (DumpRenderTree.dll) in DumpRenderTree.exe: 0xC0000005: Access violation writing location 0xbbadbeef.

&gt;	DumpRenderTree.dll!COMPtr&lt;IAccessible&gt;::operator&amp;()  Line 76 + 0x3a bytes	C++
 	DumpRenderTree.dll!WTF::HashTraits&lt;COMPtr&lt;IAccessible&gt; &gt;::constructDeletedValue(COMPtr&lt;IAccessible&gt; &amp; slot={...})  Line 223 + 0x1c bytes	C++
 	DumpRenderTree.dll!WTF::PairHashTraits&lt;WTF::HashTraits&lt;COMPtr&lt;IAccessible&gt; &gt;,WTF::HashTraits&lt;OpaqueJSValue *&gt; &gt;::constructDeletedValue(std::pair&lt;COMPtr&lt;IAccessible&gt;,OpaqueJSValue *&gt; &amp; slot=({m_ptr=0xcccccccc },0xcccccccc))  Line 185 + 0xc bytes	C++
 	DumpRenderTree.dll!WTF::HashTable&lt;COMPtr&lt;IAccessible&gt;,std::pair&lt;COMPtr&lt;IAccessible&gt;,OpaqueJSValue *&gt;,WTF::PairFirstExtractor&lt;std::pair&lt;COMPtr&lt;IAccessible&gt;,OpaqueJSValue *&gt; &gt;,WTF::PtrHash&lt;COMPtr&lt;IAccessible&gt; &gt;,WTF::HashMapValueTraits&lt;WTF::HashTraits&lt;COMPtr&lt;IAccessible&gt; &gt;,WTF::HashTraits&lt;OpaqueJSValue *&gt; &gt;,WTF::HashTraits&lt;COMPtr&lt;IAccessible&gt; &gt; &gt;::checkKey&lt;WTF::HashMapTranslator&lt;WTF::HashMapValueTraits&lt;WTF::HashTraits&lt;COMPtr&lt;IAccessible&gt; &gt;,WTF::HashTraits&lt;OpaqueJSValue *&gt; &gt;,WTF::PtrHash&lt;COMPtr&lt;IAccessible&gt; &gt; &gt;,COMPtr&lt;IAccessible&gt; &gt;(const COMPtr&lt;IAccessible&gt; &amp; key={...})  Line 502 + 0x9 bytes	C++
 	DumpRenderTree.dll!WTF::HashTable&lt;COMPtr&lt;IAccessible&gt;,std::pair&lt;COMPtr&lt;IAccessible&gt;,OpaqueJSValue *&gt;,WTF::PairFirstExtractor&lt;std::pair&lt;COMPtr&lt;IAccessible&gt;,OpaqueJSValue *&gt; &gt;,WTF::PtrHash&lt;COMPtr&lt;IAccessible&gt; &gt;,WTF::HashMapValueTraits&lt;WTF::HashTraits&lt;COMPtr&lt;IAccessible&gt; &gt;,WTF::HashTraits&lt;OpaqueJSValue *&gt; &gt;,WTF::HashTraits&lt;COMPtr&lt;IAccessible&gt; &gt; &gt;::add&lt;WTF::HashMapTranslator&lt;WTF::HashMapValueTraits&lt;WTF::HashTraits&lt;COMPtr&lt;IAccessible&gt; &gt;,WTF::HashTraits&lt;OpaqueJSValue *&gt; &gt;,WTF::PtrHash&lt;COMPtr&lt;IAccessible&gt; &gt; &gt;,COMPtr&lt;IAccessible&gt;,OpaqueJSValue *&gt;(const COMPtr&lt;IAccessible&gt; &amp; key={...}, OpaqueJSValue * const &amp; extra=0x03c016c0)  Line 690	C++
 	DumpRenderTree.dll!WTF::HashMap&lt;COMPtr&lt;IAccessible&gt;,OpaqueJSValue *,WTF::PtrHash&lt;COMPtr&lt;IAccessible&gt; &gt;,WTF::HashTraits&lt;COMPtr&lt;IAccessible&gt; &gt;,WTF::HashTraits&lt;OpaqueJSValue *&gt; &gt;::inlineAdd(const COMPtr&lt;IAccessible&gt; &amp; key={...}, OpaqueJSValue * const &amp; mapped=0x03c016c0)  Line 335 + 0x14 bytes	C++
 	DumpRenderTree.dll!WTF::HashMap&lt;COMPtr&lt;IAccessible&gt;,OpaqueJSValue *,WTF::PtrHash&lt;COMPtr&lt;IAccessible&gt; &gt;,WTF::HashTraits&lt;COMPtr&lt;IAccessible&gt; &gt;,WTF::HashTraits&lt;OpaqueJSValue *&gt; &gt;::add(const COMPtr&lt;IAccessible&gt; &amp; key={...}, OpaqueJSValue * const &amp; mapped=0x03c016c0)  Line 362 + 0x14 bytes	C++
 	DumpRenderTree.dll!AccessibilityController::winAddNotificationListener(COMPtr&lt;IAccessible&gt; element={...}, OpaqueJSValue * functionCallback=0x03c016c0)  Line 329 + 0x17 bytes	C++
 	DumpRenderTree.dll!AccessibilityUIElement::addNotificationListener(OpaqueJSValue * functionCallback=0x03c016c0)  Line 622	C++
 	DumpRenderTree.dll!addNotificationListenerCallback(const OpaqueJSContext * context=0x036400b0, OpaqueJSValue * function=0x03c01500, OpaqueJSValue * thisObject=0x03c01540, unsigned int argumentCount=1, const OpaqueJSValue * const * arguments=0x001ee434, const OpaqueJSValue * * exception=0x001ee418)  Line 933 + 0x17 bytes	C++
 	JavaScriptCore.dll!JSC::JSCallbackFunction::call(JSC::ExecState * exec=0x036400b0)  Line 73 + 0x39 bytes	C++
 	JavaScriptCore.dll!cti_op_call_NotJSFunction(void * * args=0x001ee518)  Line 2308 + 0x8 bytes	C++
 	JavaScriptCore.dll!@cti_op_create_this@4()  + 0x16f bytes	C++
 	JavaScriptCore.dll!JSC::JITCode::execute(JSC::RegisterFile * registerFile=0x030040a4, JSC::ExecState * callFrame=0x03640038, JSC::JSGlobalData * globalData=0x02fbe198)  Line 127 + 0x2d bytes	C++
 	JavaScriptCore.dll!JSC::Interpreter::executeCall(JSC::ExecState * callFrame=0x0135c2b8, JSC::JSObject * function=0x03c01840, JSC::CallType callType=CallTypeJS, const JSC::CallData &amp; callData={...}, JSC::JSValue thisValue={...}, const JSC::ArgList &amp; args={...})  Line 1305 + 0x2a bytes	C++
 	JavaScriptCore.dll!JSC::call(JSC::ExecState * exec=0x0135c2b8, JSC::JSValue functionObject={...}, JSC::CallType callType=CallTypeJS, const JSC::CallData &amp; callData={...}, JSC::JSValue thisValue={...}, const JSC::ArgList &amp; args={...})  Line 39 + 0x3c bytes	C++
 	WebKit.dll!WebCore::JSMainThreadExecState::call(JSC::ExecState * exec=0x0135c2b8, JSC::JSValue functionObject={...}, JSC::CallType callType=CallTypeJS, const JSC::CallData &amp; callData={...}, JSC::JSValue thisValue={...}, const JSC::ArgList &amp; args={...})  Line 56 + 0x29 bytes	C++
 	WebKit.dll!WebCore::ScheduledAction::executeFunctionInContext(JSC::JSGlobalObject * globalObject=0x0135c240, JSC::JSValue thisValue={...}, WebCore::ScriptExecutionContext * context=0x04f2367c)  Line 115 + 0x4c bytes	C++
 	WebKit.dll!WebCore::ScheduledAction::execute(WebCore::Document * document=0x04f235c0)  Line 138	C++
 	WebKit.dll!WebCore::ScheduledAction::execute(WebCore::ScriptExecutionContext * context=0x04f2367c)  Line 85	C++
 	WebKit.dll!WebCore::DOMTimer::fired()  Line 151	C++
 	WebKit.dll!WebCore::ThreadTimers::sharedTimerFiredInternal()  Line 115 + 0xf bytes	C++
 	WebKit.dll!WebCore::ThreadTimers::sharedTimerFired()  Line 94	C++
 	WebKit.dll!WebCore::TimerWindowWndProc(HWND__ * hWnd=0x000505ac, unsigned int message=49583, unsigned int wParam=0, long lParam=0)  Line 103 + 0x8 bytes	C++
 	user32.dll!75c26238() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]	
 	user32.dll!75c268ea() 	
 	user32.dll!75c26899() 	
 	user32.dll!75c27d31() 	
 	user32.dll!75c27dfa() 	
 	DumpRenderTree.dll!runTest(const std::basic_string&lt;char,std::char_traits&lt;char&gt;,std::allocator&lt;char&gt; &gt; &amp; testPathOrURL=&quot;C:\cygwin\home\buildbot\OpenSource\LayoutTests\accessibility\menu-list-sends-change-notification.html&quot;)  Line 1053 + 0xf bytes	C++
 	DumpRenderTree.dll!dllLauncherEntryPoint(int argc=2, const char * * argv=0x00c72578)  Line 1435 + 0x28 bytes	C++
 	DumpRenderTree.exe!main(int argc=2, const char * * argv=0x00c72578)  Line 198 + 0x10 bytes	C++
 	DumpRenderTree.exe!__tmainCRTStartup()  Line 597 + 0x17 bytes	C
 	kernel32.dll!75103677() 	
 	ntdll.dll!77989f42() 	
 	ntdll.dll!77989f15()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633195</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2012-05-24 13:57:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/11527899&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633220</commentid>
    <comment_count>2</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-05-24 14:24:24 -0700</bug_when>
    <thetext>Added the tests to the Windows Skipped list in http://trac.webkit.org/changeset/118417</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064073</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-25 21:38:00 -0800</bug_when>
    <thetext>This appears to be some kind of bad interaction between COMPtr and the HashMap implementation. The assertion (that the pointer is non-null) fires during the first invocation of inserting the COMPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064074</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-25 21:49:19 -0800</bug_when>
    <thetext>There may be a bug in COMPtr, or at least a design choice that makes it incompatible with HashMap. However, we can avoid the issue by storing the raw pointer of the IAccessible object in the HashMap.

This should be safe, because the actual ownership of the pointer being stored in the HashMap is not meant to be controlled by this lookup table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064082</commentid>
    <comment_count>5</comment_count>
      <attachid>245326</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-25 22:35:12 -0800</bug_when>
    <thetext>Created attachment 245326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064092</commentid>
    <comment_count>6</comment_count>
      <attachid>245326</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-25 23:22:39 -0800</bug_when>
    <thetext>Comment on attachment 245326
Patch

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

Before recording to this I suggest fixing it by:

1) Adding a specialization for IsSmartPtr to COMPtr.h. Check out the one in RefPtr.h.
2) Removing the specialization of PtrHash from COMPtr.h.
3) Refreshing the specialization of HashTraits to more closely match the one for RefPtr in HashTraits.h using a PeekType and deriving from SimpleClassHashTraits instead of from GenericHashTraits. Although I’d suggest using nullptr instead of 0.

If you try these and they don’t work, then I guess you could go with what you posted here, but I think it’s unnecessary.

&gt; Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp:64
&gt; +    for (auto it = m_notificationListeners.begin(); it != m_notificationListeners.end(); ++it) {

Could use a modern for loop. Either:

    for (auto&amp; slot : m_notificationsListeners) {
        slot.key-&gt;Release();

Or if the COMPtr thing pans out then:

    for (auto&amp; value : m_notificationsListeners.values())
        JSValueUnprotect(frame-&gt;globalContext(), it-&gt;value);

&gt; Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp:342
&gt; +    for (auto it = m_notificationListeners.begin(); it != m_notificationListeners.end(); ++it) {

Same thing here:

    for (auto&amp; slot : m_notificationsListeners) {

Then you can use &quot;slot.&quot; instead of &quot;it-&gt;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064173</commentid>
    <comment_count>7</comment_count>
      <attachid>245326</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-01-26 09:30:46 -0800</bug_when>
    <thetext>Comment on attachment 245326
Patch

I think what we really should do is make our containers work with keys/values that override operator&amp;. This means replacing any uses of &amp; in those containers with std::addressof.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064281</commentid>
    <comment_count>8</comment_count>
      <attachid>245381</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-26 15:32:32 -0800</bug_when>
    <thetext>Created attachment 245381
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064282</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-26 15:35:23 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 245326 [details]
&gt; Before recording to this I suggest fixing it by:
&gt; 
&gt; 1) Adding a specialization for IsSmartPtr to COMPtr.h. Check out the one in
&gt; RefPtr.h.
&gt; 2) Removing the specialization of PtrHash from COMPtr.h.
&gt; 3) Refreshing the specialization of HashTraits to more closely match the one
&gt; for RefPtr in HashTraits.h using a PeekType and deriving from
&gt; SimpleClassHashTraits instead of from GenericHashTraits. Although I’d
&gt; suggest using nullptr instead of 0.

I made these changes, but still encountered the assertion. However, by moving from &apos;&amp;&apos; to &apos;std::addressor&apos; in our container classes the problem seems to be resolved.
 
[ ... ]
&gt; Same thing here:
&gt; 
&gt;     for (auto&amp; slot : m_notificationsListeners) {
&gt; 
&gt; Then you can use &quot;slot.&quot; instead of &quot;it-&gt;&quot;

Yes! That is much nicer. Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064369</commentid>
    <comment_count>10</comment_count>
      <attachid>245381</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-26 20:02:52 -0800</bug_when>
    <thetext>Comment on attachment 245381
Patch

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

Fantastic!

&gt; Source/WebCore/platform/win/COMPtr.h:226
&gt;  namespace WTF {
&gt; +template&lt;typename P&gt; struct IsSmartPtr&lt;COMPtr&lt;P&gt;&gt; {

I think there should be a blank line here.

&gt; Source/WebKit/win/WebView.cpp:4198
&gt; -    if (m_page-&gt;isEditable() == flag)
&gt; +    if (m_page-&gt;isEditable() == static_cast&lt;bool&gt;(flag))

How is this change related to the rest of the patch?

&gt; Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp:65
&gt; +    for (auto&amp; slot : m_notificationListeners)
&gt; +        JSValueUnprotect(frame-&gt;globalContext(), slot.value);

This could be even better.

    for (auto&amp; listener : m_notificationListeners.values())
        JSValueUnprotect(frame-&gt;globalContext(), listener);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064406</commentid>
    <comment_count>11</comment_count>
      <attachid>245381</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-26 21:34:09 -0800</bug_when>
    <thetext>Comment on attachment 245381
Patch

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

&gt;&gt; Source/WebCore/platform/win/COMPtr.h:226
&gt;&gt; +template&lt;typename P&gt; struct IsSmartPtr&lt;COMPtr&lt;P&gt;&gt; {
&gt; 
&gt; I think there should be a blank line here.

OK!

&gt;&gt; Source/WebKit/win/WebView.cpp:4198
&gt;&gt; +    if (m_page-&gt;isEditable() == static_cast&lt;bool&gt;(flag))
&gt; 
&gt; How is this change related to the rest of the patch?

This was a drive-by fix. I was tired of seeing this warning during the compile.

&gt;&gt; Tools/DumpRenderTree/win/AccessibilityControllerWin.cpp:65
&gt;&gt; +        JSValueUnprotect(frame-&gt;globalContext(), slot.value);
&gt; 
&gt; This could be even better.
&gt; 
&gt;     for (auto&amp; listener : m_notificationListeners.values())
&gt;         JSValueUnprotect(frame-&gt;globalContext(), listener);

Very nice! Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064429</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-26 22:24:08 -0800</bug_when>
    <thetext>Committed r179170: &lt;http://trac.webkit.org/changeset/179170&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245326</attachid>
            <date>2015-01-25 22:35:12 -0800</date>
            <delta_ts>2015-01-26 15:32:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87426-20150125224210.patch</filename>
            <type>text/plain</type>
            <size>4456</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE3OTEwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI1IEBACisyMDE1LTAxLTI1ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29t
PgorCisgICAgICAgIFtXaW5dIEFTU0VSVElPTiBGQUlMRUQgIW1fcHRyIHVuZGVyIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjp3aW5BZGROb3RpZmljYXRpb25MaXN0ZW5lciAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3NDI2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3RvcCBzdG9yaW5nIENPTVB0ciBt
ZW1iZXJzIGluIHRoZSBub3RpZmljYXRpb24gbGlzdGVuZXIgSGFzaE1hcCwgc2luY2UgQ09NUHRy
IGRvZXMKKyAgICAgICAgbm90IHNlZW0gdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoaXMgc3RvcmFn
ZSBjb250YWluZXIuIEFsdGhvdWdoIHNpbXBseSBzdG9yaW5nIHRoZQorICAgICAgICBiYXJlIHBv
aW50ZXIgc2hvdWxkIGJlIHNhZmUgYmVjYXVzZSBKYXZhU2NyaXB0IChhbmQgdGhlIERPTSkgaXMg
YWxyZWFkeSBjb250cm9sbGluZworICAgICAgICB0aGUgbGlmZXRpbWUgb2YgdGhlc2Ugb2JqZWN0
cy4KKworICAgICAgICBIb3dldmVyLCB0byBhdm9pZCBhbnkgY2hhbmdlcyBpbiBiZWhhdmlvciBJ
J2xsIG1hbnVhbGx5IEFkZFJlZi9SZWxlYXNlIHdoZW4gYWRkaW5nCisgICAgICAgIG9yIHJlbW92
aW5nIHRoZXNlIGVsZW1lbnRzIGluIGNhc2UgdGhlIENPTSBwb3J0aW9uIG9mIHRoZXNlIG9iamVj
dHMgYXJlIG5vdCAKKyAgICAgICAgYmVpbmcgaGVsZCBieSB0aGVzZSBvdGhlciBsaWZlIGN5Y2xl
IGNvbnRyb2xzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJXaW4uY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6On5BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2lu
Tm90aWZpY2F0aW9uUmVjZWl2ZWQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OndpbkFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKToKKwogMjAxNS0wMS0yNSAgcGVhdm9Ab3V0bG9v
ay5jb20gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAgICAgICBbV2luXSBBZGQgV2ViS2l0IG1l
c3NhZ2UgbG9vcCBpbnRlcmZhY2UuCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmgJKHJldmlzaW9uIDE3OTEwMSkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
MCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTkwLDcgKzkwLDcgQEAgcHJpdmF0ZToKIAogICAgIEhXSU5FVkVO
VEhPT0sgbV9hbGxFdmVudHNIb29rOwogICAgIEhXSU5FVkVOVEhPT0sgbV9ub3RpZmljYXRpb25z
RXZlbnRIb29rOwotICAgIEhhc2hNYXA8UGxhdGZvcm1VSUVsZW1lbnQsIEpTT2JqZWN0UmVmPiBt
X25vdGlmaWNhdGlvbkxpc3RlbmVyczsKKyAgICBIYXNoTWFwPElBY2Nlc3NpYmxlKiwgSlNPYmpl
Y3RSZWY+IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShD
T0NPQSkKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gMTc5MTAxKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIw
MTAsIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw4ICs2MSwxMCBAQCBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6fkFjY2Vzc2liaWxpdHlDCiAgICAgaWYgKG1fbm90aWZp
Y2F0aW9uc0V2ZW50SG9vaykKICAgICAgICAgVW5ob29rV2luRXZlbnQobV9ub3RpZmljYXRpb25z
RXZlbnRIb29rKTsKIAotICAgIGZvciAoSGFzaE1hcDxQbGF0Zm9ybVVJRWxlbWVudCwgSlNPYmpl
Y3RSZWY+OjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmJlZ2luKCk7IGl0
ICE9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmVuZCgpOyArK2l0KQorICAgIGZvciAoYXV0byBp
dCA9IG1fbm90aWZpY2F0aW9uTGlzdGVuZXJzLmJlZ2luKCk7IGl0ICE9IG1fbm90aWZpY2F0aW9u
TGlzdGVuZXJzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGl0LT5rZXktPlJlbGVhc2UoKTsKICAg
ICAgICAgSlNWYWx1ZVVucHJvdGVjdChmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBpdC0+dmFsdWUp
OworICAgIH0KIH0KIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6ZWxlbWVudEF0UG9pbnQoaW50IHgsIGludCB5KQpAQCAtMzM3LDcgKzMzOSw3IEBAIHZv
aWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGkKIAogdm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1lbnQg
ZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBldmVudE5hbWUpCiB7Ci0gICAgZm9yIChIYXNoTWFwPFBs
YXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRp
b25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuZW5kKCk7
ICsraXQpIHsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5iZWdp
bigpOyBpdCAhPSBtX25vdGlmaWNhdGlvbkxpc3RlbmVycy5lbmQoKTsgKytpdCkgewogICAgICAg
ICBDT01QdHI8SVNlcnZpY2VQcm92aWRlcj4gdGhpc1NlcnZpY2VQcm92aWRlcihRdWVyeSwgaXQt
PmtleSk7CiAgICAgICAgIGlmICghdGhpc1NlcnZpY2VQcm92aWRlcikKICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMzcxLDcgKzM3Myw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OndpbkFkZE5vdGkKICAgICAgICAgbV9ub3RpZmljYXRpb25zRXZlbnRIb29rID0gU2V0V2luRXZl
bnRIb29rKEVWRU5UX01JTiwgRVZFTlRfTUFYLCBHZXRNb2R1bGVIYW5kbGUoMCksIG5vdGlmaWNh
dGlvbkxpc3RlbmVyUHJvYywgR2V0Q3VycmVudFByb2Nlc3NJZCgpLCAwLCBXSU5FVkVOVF9JTkNP
TlRFWFQpOwogCiAgICAgSlNWYWx1ZVByb3RlY3QoZnJhbWUtPmdsb2JhbENvbnRleHQoKSwgZnVu
Y3Rpb25DYWxsYmFjayk7Ci0gICAgbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuYWRkKGVsZW1lbnQs
IGZ1bmN0aW9uQ2FsbGJhY2spOworICAgIGVsZW1lbnQtPkFkZFJlZigpOworICAgIG1fbm90aWZp
Y2F0aW9uTGlzdGVuZXJzLmFkZChlbGVtZW50LmdldCgpLCBmdW5jdGlvbkNhbGxiYWNrKTsKIH0K
IAogdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5hYmxlRW5oYW5jZWRBY2Nlc3NpYmls
aXR5KGJvb2wpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245381</attachid>
            <date>2015-01-26 15:32:32 -0800</date>
            <delta_ts>2015-01-26 20:02:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87426-20150126153927.patch</filename>
            <type>text/plain</type>
            <size>18781</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzkxNDkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE1LTAxLTI2ICBCcmVudCBGdWxnaGFtICA8YmZ1
bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEFTU0VSVElPTiBGQUlMRUQgIW1fcHRy
IHVuZGVyIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5BZGROb3RpZmljYXRpb25MaXN0ZW5l
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc0MjYK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNTI3ODk5PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJldmlzZSBpbnRlcm5hbCBjb250YWluZXJzIHRv
IHVzZSBzdGQ6OmFkZHJlc3NvZiBpbiBwcmVmZXJlbmNlIHRvCisgICAgICAgIHRvIHVzaW5nIHRo
ZSAnJicgb3BlcmF0b3IuCisKKyAgICAgICAgKiB3dGYvRGVxdWUuaDoKKyAgICAgICAgKFdURjo6
aW5saW5lQ2FwYWNpdHk+OjphcHBlbmQpOgorICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0eT46
OnByZXBlbmQpOgorICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0eT46OnJlbW92ZUZpcnN0KToK
KyAgICAgICAgKFdURjo6aW5saW5lQ2FwYWNpdHk+OjpyZW1vdmVMYXN0KToKKyAgICAgICAgKFdU
Rjo6aW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0
eT46OmFmdGVyKToKKyAgICAgICAgKFdURjo6aW5saW5lQ2FwYWNpdHk+OjpiZWZvcmUpOgorICAg
ICAgICAqIHd0Zi9HZXRQdHIuaDoKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZUJ1Y2tldEluaXRpYWxpemVyPGZhbHNlPjo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgICogd3RmL0hhc2hUcmFpdHMuaDoKKyAgICAgICAgKFdURjo6U2ltcGxlQ2xhc3NIYXNo
VHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjpDdXN0b21IYXNo
VHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAqIHd0Zi9MaXN0SGFzaFNl
dC5oOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFNldENvbnN0SXRlcmF0b3I6OmdldCk6CisgICAg
ICAgICogd3RmL1ZlY3Rvci5oOgorICAgICAgICAoV1RGOjpWZWN0b3I6OnN3YXApOgorICAgICAg
ICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxv
d0hhbmRsZXI+Ojp0cnlBcHBlbmQpOgorICAgICAgICAoV1RGOjpPdmVyZmxvd0hhbmRsZXI+Ojpp
bnNlcnQpOgorCiAyMDE1LTAxLTI0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgUHJvdmlkZSBpbXBsZW1lbnRhdGlvbiBmb3IgV1RGOjpEZWZhdWx0SGFzaDxib29s
PgpJbmRleDogU291cmNlL1dURi93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9EZXF1ZS5oCShyZXZpc2lvbiAxNzkxNDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MTEsNyArNDExLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGV4cGFuZENhcGFjaXR5SWZOZWVk
ZWQoKTsKLSAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9idWZmZXIuYnVmZmVyKClbbV9lbmRdKSBU
KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgICAgICBuZXcgKE5vdE51bGwsIHN0ZDo6YWRk
cmVzc29mKG1fYnVmZmVyLmJ1ZmZlcigpW21fZW5kXSkpIFQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CiAgICAgICAgIGlmIChtX2VuZCA9PSBtX2J1ZmZlci5jYXBhY2l0eSgpIC0gMSkKICAgICAg
ICAgICAgIG1fZW5kID0gMDsKICAgICAgICAgZWxzZQpAQCAtNDI4LDcgKzQyOCw3IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICAgICAgbV9zdGFydCA9IG1fYnVmZmVyLmNhcGFjaXR5KCkgLSAx
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAtLW1fc3RhcnQ7Ci0gICAgICAgIG5ldyAoTm90
TnVsbCwgJm1fYnVmZmVyLmJ1ZmZlcigpW21fc3RhcnRdKSBUKHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOworICAgICAgICBuZXcgKE5vdE51bGwsIHN0ZDo6YWRkcmVzc29mKG1fYnVmZmVyLmJ1ZmZl
cigpW21fc3RhcnRdKSkgVChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKICAgICAgICAgY2hlY2tW
YWxpZGl0eSgpOwogICAgIH0KIApAQCAtNDM4LDcgKzQzOCw3IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsK
ICAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwotICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVz
dHJ1Y3QoJm1fYnVmZmVyLmJ1ZmZlcigpW21fc3RhcnRdLCAmbV9idWZmZXIuYnVmZmVyKClbbV9z
dGFydCArIDFdKTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KHN0ZDo6YWRkcmVz
c29mKG1fYnVmZmVyLmJ1ZmZlcigpW21fc3RhcnRdKSwgc3RkOjphZGRyZXNzb2YobV9idWZmZXIu
YnVmZmVyKClbbV9zdGFydCArIDFdKSk7CiAgICAgICAgIGlmIChtX3N0YXJ0ID09IG1fYnVmZmVy
LmNhcGFjaXR5KCkgLSAxKQogICAgICAgICAgICAgbV9zdGFydCA9IDA7CiAgICAgICAgIGVsc2UK
QEAgLTQ1Niw3ICs0NTYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIG1fZW5kID0g
bV9idWZmZXIuY2FwYWNpdHkoKSAtIDE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIC0tbV9l
bmQ7Ci0gICAgICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdCgmbV9idWZmZXIuYnVmZmVyKClb
bV9lbmRdLCAmbV9idWZmZXIuYnVmZmVyKClbbV9lbmQgKyAxXSk7CisgICAgICAgIFR5cGVPcGVy
YXRpb25zOjpkZXN0cnVjdChzdGQ6OmFkZHJlc3NvZihtX2J1ZmZlci5idWZmZXIoKVttX2VuZF0p
LCBzdGQ6OmFkZHJlc3NvZihtX2J1ZmZlci5idWZmZXIoKVttX2VuZCArIDFdKSk7CiAgICAgICAg
IGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKQEAgLTQ4NCw3ICs0ODQsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwogCiAgICAgICAgIFQqIGJ1ZmZl
ciA9IG1fYnVmZmVyLmJ1ZmZlcigpOwotICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3Qo
JmJ1ZmZlcltwb3NpdGlvbl0sICZidWZmZXJbcG9zaXRpb24gKyAxXSk7CisgICAgICAgIFR5cGVP
cGVyYXRpb25zOjpkZXN0cnVjdChzdGQ6OmFkZHJlc3NvZihidWZmZXJbcG9zaXRpb25dKSwgc3Rk
OjphZGRyZXNzb2YoYnVmZmVyW3Bvc2l0aW9uICsgMV0pKTsKIAogICAgICAgICAvLyBGaW5kIHdo
aWNoIHNlZ21lbnQgb2YgdGhlIGNpcmN1bGFyIGJ1ZmZlciBjb250YWluZWQgdGhlIHJlbW92ZSBl
bGVtZW50LCBhbmQgb25seSBtb3ZlIGVsZW1lbnRzIGluIHRoYXQgcGFydC4KICAgICAgICAgaWYg
KHBvc2l0aW9uID49IG1fc3RhcnQpIHsKQEAgLTY0MSw3ICs2NDEsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgQVNTRVJUKG1faW5k
ZXggIT0gbV9kZXF1ZS0+bV9lbmQpOwotICAgICAgICByZXR1cm4gJm1fZGVxdWUtPm1fYnVmZmVy
LmJ1ZmZlcigpW21faW5kZXhdOworICAgICAgICByZXR1cm4gc3RkOjphZGRyZXNzb2YobV9kZXF1
ZS0+bV9idWZmZXIuYnVmZmVyKClbbV9pbmRleF0pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KQEAgLTY1MCw4ICs2NTAsOCBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBBU1NFUlQobV9p
bmRleCAhPSBtX2RlcXVlLT5tX3N0YXJ0KTsKICAgICAgICAgaWYgKCFtX2luZGV4KQotICAgICAg
ICAgICAgcmV0dXJuICZtX2RlcXVlLT5tX2J1ZmZlci5idWZmZXIoKVttX2RlcXVlLT5tX2J1ZmZl
ci5jYXBhY2l0eSgpIC0gMV07Ci0gICAgICAgIHJldHVybiAmbV9kZXF1ZS0+bV9idWZmZXIuYnVm
ZmVyKClbbV9pbmRleCAtIDFdOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6YWRkcmVzc29mKG1f
ZGVxdWUtPm1fYnVmZmVyLmJ1ZmZlcigpW21fZGVxdWUtPm1fYnVmZmVyLmNhcGFjaXR5KCkgLSAx
XSk7CisgICAgICAgIHJldHVybiBzdGQ6OmFkZHJlc3NvZihtX2RlcXVlLT5tX2J1ZmZlci5idWZm
ZXIoKVttX2luZGV4IC0gMV0pOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9HZXRQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HZXRQ
dHIuaAkocmV2aXNpb24gMTc5MTQ5KQorKysgU291cmNlL1dURi93dGYvR2V0UHRyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgc3RydWN0IEdldFB0ckhlbHBlckJhc2U7CiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KIHN0cnVjdCBHZXRQdHJIZWxwZXJCYXNlPFQsIGZhbHNlIC8qIGlz
U21hcnRQdHIgKi8+IHsKICAgICB0eXBlZGVmIFQqIFB0clR5cGU7Ci0gICAgc3RhdGljIFQqIGdl
dFB0cihUJiBwKSB7IHJldHVybiAmcDsgfQorICAgIHN0YXRpYyBUKiBnZXRQdHIoVCYgcCkgeyBy
ZXR1cm4gc3RkOjphZGRyZXNzb2YocCk7IH0KIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgpJ
bmRleDogU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE3OTE0OSkKKysrIFNvdXJjZS9XVEYvd3RmL0hh
c2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NjYsNyArNzY2LDcgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRhYmxlQnVja2V0SW5pdGlhbGl6ZXI8ZmFs
c2U+IHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBWYWx1ZT4g
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZShWYWx1ZSYgYnVja2V0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBuZXcgKE5vdE51bGwsICZidWNrZXQpIFZhbHVlKFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsK
KyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2YoYnVja2V0KSkgVmFsdWUo
VHJhaXRzOjplbXB0eVZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfTsKIApJbmRleDogU291cmNl
L1dURi93dGYvSGFzaFRyYWl0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hU
cmFpdHMuaAkocmV2aXNpb24gMTc5MTQ5KQorKysgU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgUD4g
c3RydWN0IEhhc2hUcmFpdHM8UAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU2ltcGxl
Q2xhc3NIYXNoVHJhaXRzIDogR2VuZXJpY0hhc2hUcmFpdHM8VD4gewogICAgIHN0YXRpYyBjb25z
dCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVj
dERlbGV0ZWRWYWx1ZShUJiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3QpIFQoSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKTsgfQorICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShU
JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgc3RkOjphZGRyZXNzb2Yoc2xvdCkpIFQoSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKTsgfQogICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFQm
IHZhbHVlKSB7IHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiB9Owog
CkBAIC0xMTMsNyArMTEzLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRGVsZXRl
cj4gcwogICAgIHR5cGVkZWYgc3RkOjpudWxscHRyX3QgRW1wdHlWYWx1ZVR5cGU7CiAgICAgc3Rh
dGljIEVtcHR5VmFsdWVUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBudWxscHRyOyB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoc3RkOjp1bmlxdWVfcHRyPFQsIERl
bGV0ZXI+JiBzbG90KSB7IG5ldyAoTm90TnVsbCwgJnNsb3QpIHN0ZDo6dW5pcXVlX3B0cjxULCBE
ZWxldGVyPiB7IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KC0xKSB9OyB9CisgICAgc3RhdGljIHZvaWQg
Y29uc3RydWN0RGVsZXRlZFZhbHVlKHN0ZDo6dW5pcXVlX3B0cjxULCBEZWxldGVyPiYgc2xvdCkg
eyBuZXcgKE5vdE51bGwsIHN0ZDo6YWRkcmVzc29mKHNsb3QpKSBzdGQ6OnVuaXF1ZV9wdHI8VCwg
RGVsZXRlcj4geyByZWludGVycHJldF9jYXN0PFQqPigtMSkgfTsgfQogICAgIHN0YXRpYyBib29s
IGlzRGVsZXRlZFZhbHVlKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxULCBEZWxldGVyPiYgdmFsdWUp
IHsgcmV0dXJuIHZhbHVlLmdldCgpID09IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KC0xKTsgfQogCiAg
ICAgdHlwZWRlZiBUKiBQZWVrVHlwZTsKQEAgLTIzNiw3ICsyMzYsNyBAQCBzdHJ1Y3QgQ3VzdG9t
SGFzaFRyYWl0cyA6IHB1YmxpYyBHZW5lcmljCiAgICAgCiAgICAgc3RhdGljIHZvaWQgY29uc3Ry
dWN0RGVsZXRlZFZhbHVlKFQmIHNsb3QpCiAgICAgewotICAgICAgICBuZXcgKE5vdE51bGwsICZz
bG90KSBUKFQ6OkRlbGV0ZWRWYWx1ZSk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgc3RkOjphZGRy
ZXNzb2Yoc2xvdCkpIFQoVDo6RGVsZXRlZFZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGlj
IGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVCYgdmFsdWUpCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9MaXN0SGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xpc3RIYXNoU2V0
LmgJKHJldmlzaW9uIDE3OTE0OSkKKysrIFNvdXJjZS9XVEYvd3RmL0xpc3RIYXNoU2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBWYWx1
ZVR5cGUqIGdldCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gJm1fcG9zaXRpb24tPm1f
dmFsdWU7CisgICAgICAgIHJldHVybiBzdGQ6OmFkZHJlc3NvZihtX3Bvc2l0aW9uLT5tX3ZhbHVl
KTsKICAgICB9CiAKICAgICBjb25zdCBWYWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICpnZXQoKTsgfQpJbmRleDogU291cmNlL1dURi93dGYvVmVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvVmVjdG9yLmgJKHJldmlzaW9uIDE3OTE0OSkKKysrIFNvdXJjZS9X
VEYvd3RmL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTMsNyArNzUzLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc3dhcChWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
cj4mIG90aGVyKQogICAgIHsKICNpZiBBU0FOX0VOQUJMRUQKLSAgICAgICAgaWYgKHRoaXMgPT0g
Jm90aGVyKSAvLyBBU2FuIHdpbGwgY3Jhc2ggaWYgd2UgdHJ5IHRvIHJlc3RyaWN0IGFjY2VzcyB0
byB0aGUgc2FtZSBidWZmZXIgdHdpY2UuCisgICAgICAgIGlmICh0aGlzID09IHN0ZDo6YWRkcmVz
c29mKG90aGVyKSkgLy8gQVNhbiB3aWxsIGNyYXNoIGlmIHdlIHRyeSB0byByZXN0cmljdCBhY2Nl
c3MgdG8gdGhlIHNhbWUgYnVmZmVyIHR3aWNlLgogICAgICAgICAgICAgcmV0dXJuOwogI2VuZGlm
CiAKQEAgLTExNzAsNyArMTE3MCw3IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0gKICAgICAgICAgQ1JBU0goKTsKICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VU
byhuZXdTaXplKTsKICAgICBUKiBkZXN0ID0gZW5kKCk7Ci0gICAgVmVjdG9yQ29waWVyPHN0ZDo6
aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtk
YXRhU2l6ZV0sIGRlc3QpOworICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZh
bHVlLCBVPjo6dW5pbml0aWFsaXplZENvcHkoZGF0YSwgc3RkOjphZGRyZXNzb2YoZGF0YVtkYXRh
U2l6ZV0pLCBkZXN0KTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogfQogCkBAIC0xMTg4LDcgKzEx
ODgsNyBAQCBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBhc2FuQnVmZmVyU2l6ZVdpbGxDaGFuZ2VUbyhuZXdTaXplKTsK
ICAgICBUKiBkZXN0ID0gZW5kKCk7Ci0gICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxU
Pjo6dmFsdWUsIFU+Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCAmZGF0YVtkYXRhU2l6ZV0sIGRl
c3QpOworICAgIFZlY3RvckNvcGllcjxzdGQ6OmlzX3RyaXZpYWw8VD46OnZhbHVlLCBVPjo6dW5p
bml0aWFsaXplZENvcHkoZGF0YSwgc3RkOjphZGRyZXNzb2YoZGF0YVtkYXRhU2l6ZV0pLCBkZXN0
KTsKICAgICBtX3NpemUgPSBuZXdTaXplOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTI1NSw3
ICsxMjU1LDcgQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAg
IGFzYW5CdWZmZXJTaXplV2lsbENoYW5nZVRvKG5ld1NpemUpOwogICAgIFQqIHNwb3QgPSBiZWdp
bigpICsgcG9zaXRpb247CiAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90
LCBlbmQoKSwgc3BvdCArIGRhdGFTaXplKTsKLSAgICBWZWN0b3JDb3BpZXI8c3RkOjppc190cml2
aWFsPFQ+Ojp2YWx1ZSwgVT46OnVuaW5pdGlhbGl6ZWRDb3B5KGRhdGEsICZkYXRhW2RhdGFTaXpl
XSwgc3BvdCk7CisgICAgVmVjdG9yQ29waWVyPHN0ZDo6aXNfdHJpdmlhbDxUPjo6dmFsdWUsIFU+
Ojp1bmluaXRpYWxpemVkQ29weShkYXRhLCBzdGQ6OmFkZHJlc3NvZihkYXRhW2RhdGFTaXplXSks
IHNwb3QpOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9CiAgCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxNzkxNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOSBAQAorMjAxNS0wMS0yNiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFw
cGxlLmNvbT4KKworICAgICAgICBbV2luXSBBU1NFUlRJT04gRkFJTEVEICFtX3B0ciB1bmRlciBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2luQWRkTm90aWZpY2F0aW9uTGlzdGVuZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3NDI2CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8xMTUyNzg5OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZXZpc2UgQ09NUHRyIHRvIHdvcmsgYmV0dGVyIHdpdGggb3Vy
IEhhc2hNYXAgaW1wbGVtZW50YXRpb246CisgICAgICAgICgxKSBBZGQgYSBzcGVjaWFsaXphdGlv
biBmb3IgSXNTbWFydFB0ci4KKyAgICAgICAgKDIpIFJlbW92ZSBQdHJIYXNoIHNwZWNpYWxpemF0
aW9uLgorICAgICAgICAoMykgUmVmcmVzaCBIYXNoVHJhaWxzIHNwZWNpYWxpemF0aW9uIGZvciBD
T01QdHIgdG8gbWF0Y2ggd2hhdCB3ZQorICAgICAgICBkbyBmb3IgUmVmUHRyLgorCisgICAgICAg
ICogcGxhdGZvcm0vd2luL0NPTVB0ci5oOgorCiAyMDE1LTAxLTI2ICBCeXVuZ3Nlb24gU2hpbiAg
PHN1bi5zaGluQGxnZS5jb20+CiAKICAgICAgICAgRml4IEJvcmRlci1yYWRpdXMgY2xpcHBpbmcg
aXNzdWUgb24gYSBjb21wb3NpdGVkIGRlc2NlbmRhbnRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vQ09NUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0NPTVB0ci5oCShyZXZpc2lvbiAxNzkxNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ09NUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgZW51bSBD
cmVhdGVUYWcgeyBDcmVhdGUgfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgQ09NUHRy
IHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFQqIFB0clR5cGU7CiAgICAgQ09NUHRyKCkgOiBtX3B0
cigwKSB7IH0KICAgICBDT01QdHIoVCogcHRyKSA6IG1fcHRyKHB0cikgeyBpZiAobV9wdHIpIG1f
cHRyLT5BZGRSZWYoKTsgfQogICAgIENPTVB0cihBZG9wdENPTVRhZywgVCogcHRyKSA6IG1fcHRy
KHB0cikgeyB9CkBAIC0yMjIsMjMgKzIyMywyMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUKIH0KIAogbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQ
PiBzdHJ1Y3QgSXNTbWFydFB0cjxDT01QdHI8UD4+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2
YWx1ZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgSGFzaFRyYWl0
czxDT01QdHI8UD4gPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxDT01QdHI8UD4+IHsKKyAgICBz
dGF0aWMgUCogZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRzPENPTVB0cjxQPiA+IDogR2VuZXJpY0hhc2hU
cmFpdHM8Q09NUHRyPFA+ID4gewotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVl
SXNaZXJvID0gdHJ1ZTsKLSAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVl
KENPTVB0cjxQPiYgc2xvdCkgeyBuZXcgKCZzbG90KSBDT01QdHI8UD4oSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBDT01Q
dHI8UD4mIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBQdHJIYXNoPENPTVB0
cjxQPiA+IDogUHRySGFzaDxQKj4gewotICAgICAgICB1c2luZyBQdHJIYXNoPFAqPjo6aGFzaDsK
LSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ09NUHRyPFA+JiBrZXkpIHsgcmV0
dXJuIGhhc2goa2V5LmdldCgpKTsgfQotICAgICAgICB1c2luZyBQdHJIYXNoPFAqPjo6ZXF1YWw7
Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENPTVB0cjxQPiYgYSwgY29uc3QgQ09N
UHRyPFA+JiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwo
UCogYSwgY29uc3QgQ09NUHRyPFA+JiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgQ09NUHRyPFA+JiBhLCBQKiBiKSB7IHJldHVybiBhID09IGI7
IH0KLSAgICB9OworICAgIHR5cGVkZWYgUCogUGVla1R5cGU7CisgICAgc3RhdGljIFBlZWtUeXBl
IHBlZWsoY29uc3QgQ09NUHRyPFA+JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZ2V0KCk7IH0KKyAg
ICBzdGF0aWMgUGVla1R5cGUgcGVlayhQKiB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBEZWZhdWx0SGFzaDxDT01QdHI8UD4+IHsKKyAg
ICB0eXBlZGVmIFB0ckhhc2g8Q09NUHRyPFA+PiBIYXNoOworfTsKIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFA+IHN0cnVjdCBEZWZhdWx0SGFzaDxDT01QdHI8UD4gPiB7IHR5cGVkZWYgUHRySGFz
aDxDT01QdHI8UD4gPiBIYXNoOyB9OwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE3OTE0OSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE1LTAxLTI2ICBCcmVudCBGdWxnaGFtICA8YmZ1
bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEFTU0VSVElPTiBGQUlMRUQgIW1fcHRy
IHVuZGVyIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp3aW5BZGROb3RpZmljYXRpb25MaXN0ZW5l
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc0MjYK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzExNTI3ODk5PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJldmlzZSBDT01QdHIgdG8gd29yayBiZXR0ZXIg
d2l0aCBvdXIgSGFzaE1hcCBpbXBsZW1lbnRhdGlvbi4gVXNlCisgICAgICAgIG1vZGVybiBsb29w
IHN5bnRheC4KKworICAgICAgICAqIFdlYkhpc3RvcnkuY3BwOgorICAgICAgICAoV2ViSGlzdG9y
eTo6dmlzaXRlZFVSTCk6IEFkanVzdCBmb3IgbmV3IENPTVB0ciBjaGFuZ2VzLgorICAgICAgICAq
IFdlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjpnZXRJbnN0YW5j
ZUZvcklkZW50aWZpZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjpyZW1vdmVS
ZWZlcmVuY2VGb3JJZGVudGlmaWVyKTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy5jcHA6Cisg
ICAgICAgIChXZWJWaWV3OjpzZXRFZGl0YWJsZSk6IERpdHRvLgorCiAyMDE1LTAxLTI1ICBwZWF2
b0BvdXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgogCiAgICAgICAgIFtXaW5dIEFkZCBX
ZWJLaXQgbWVzc2FnZSBsb29wIGludGVyZmFjZS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dl
Ykhpc3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkhpc3Rvcnku
Y3BwCShyZXZpc2lvbiAxNzkxNDkpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDcgKzUwNCw3IEBAIHZvaWQgV2ViSGlzdG9yeTo6dmlz
aXRlZFVSTChjb25zdCBVUkwmIHUKICAgICBpZiAodXJsU3RyaW5nLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgSVdlYkhpc3RvcnlJdGVtKiBlbnRyeSA9IG1fZW50cmllc0J5VVJM
LmdldCh1cmxTdHJpbmcpLmdldCgpOworICAgIElXZWJIaXN0b3J5SXRlbSogZW50cnkgPSBtX2Vu
dHJpZXNCeVVSTC5nZXQodXJsU3RyaW5nKTsKICAgICBpZiAoIWVudHJ5KSB7CiAgICAgICAgIENP
TVB0cjxXZWJIaXN0b3J5SXRlbT4gaXRlbShBZG9wdENPTSwgV2ViSGlzdG9yeUl0ZW06OmNyZWF0
ZUluc3RhbmNlKCkpOwogICAgICAgICBpZiAoIWl0ZW0pCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJQcmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2Vi
UHJlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAxNzkxNDkpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJQcmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBXZWJQ
cmVmZXJlbmNlcyogV2ViUHJlZmVyZW5jZXM6OmdldEluc3RhCiAgICAgaWYgKGlkZW50aWZpZXJT
dHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gc2hhcmVkU3RhbmRhcmRQcmVmZXJlbmNl
cygpOwogCi0gICAgcmV0dXJuIHdlYlByZWZlcmVuY2VzSW5zdGFuY2VzKCkuZ2V0KGlkZW50aWZp
ZXJTdHJpbmcpLmdldCgpOworICAgIHJldHVybiB3ZWJQcmVmZXJlbmNlc0luc3RhbmNlcygpLmdl
dChpZGVudGlmaWVyU3RyaW5nKTsKIH0KIAogdm9pZCBXZWJQcmVmZXJlbmNlczo6c2V0SW5zdGFu
Y2UoV2ViUHJlZmVyZW5jZXMqIGluc3RhbmNlLCBCU1RSIGlkZW50aWZpZXIpCkBAIC0xODIsNyAr
MTgyLDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6cmVtb3ZlUmVmZXJlbmNlRm9ySQogICAgIFdU
Rjo6U3RyaW5nIGlkZW50aWZpZXJTdHJpbmcoaWRlbnRpZmllciwgU3lzU3RyaW5nTGVuKGlkZW50
aWZpZXIpKTsKICAgICBpZiAoaWRlbnRpZmllclN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBXZWJQcmVmZXJlbmNlcyogd2ViUHJlZmVyZW5jZSA9IHdlYlByZWZlcmVuY2Vz
SW5zdGFuY2VzKCkuZ2V0KGlkZW50aWZpZXJTdHJpbmcpLmdldCgpOworICAgIFdlYlByZWZlcmVu
Y2VzKiB3ZWJQcmVmZXJlbmNlID0gd2ViUHJlZmVyZW5jZXNJbnN0YW5jZXMoKS5nZXQoaWRlbnRp
ZmllclN0cmluZyk7CiAgICAgaWYgKHdlYlByZWZlcmVuY2UgJiYgd2ViUHJlZmVyZW5jZS0+bV9y
ZWZDb3VudCA9PSAxKQogICAgICAgICB3ZWJQcmVmZXJlbmNlc0luc3RhbmNlcygpLnJlbW92ZShp
ZGVudGlmaWVyU3RyaW5nKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAx
NzkxNDkpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDE5NSw3ICs0MTk1LDcgQEAgSFJFU1VMVCBXZWJWaWV3OjpzZXRFZGl0YWJsZShCT09MIGZs
YWcpCiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybiBTX09LOwogCi0gICAgaWYgKG1f
cGFnZS0+aXNFZGl0YWJsZSgpID09IGZsYWcpCisgICAgaWYgKG1fcGFnZS0+aXNFZGl0YWJsZSgp
ID09IHN0YXRpY19jYXN0PGJvb2w+KGZsYWcpKQogICAgICAgICByZXR1cm4gU19PSzsKIAogICAg
IG1fcGFnZS0+c2V0RWRpdGFibGUoZmxhZyk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzkxNDkpCisrKyBUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxNS0wMS0yNiAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBBU1NFUlRJT04g
RkFJTEVEICFtX3B0ciB1bmRlciBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2luQWRkTm90aWZp
Y2F0aW9uTGlzdGVuZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg3NDI2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTUyNzg5OT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXZpc2UgQ09NUHRyIHRv
IHdvcmsgYmV0dGVyIHdpdGggb3VyIEhhc2hNYXAgaW1wbGVtZW50YXRpb24uIFVzZQorICAgICAg
ICBtb2Rlcm4gbG9vcCBzeW50YXguCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6On5BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9uUmVjZWl2ZWQpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChkdW1wQmFja0ZvcndhcmRM
aXN0Rm9yQWxsV2luZG93cyk6CisKIDIwMTUtMDEtMjYgIERhdmlkIEtpbHplciAgPGRka2lsemVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgaU9TIEVXUyB0byBidWlsZC53ZWJraXQub3JnL2Rh
c2hib2FyZApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAxNzkxNDkpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MSw4ICs2MSw4IEBAIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjp+QWNjZXNz
aWJpbGl0eUMKICAgICBpZiAobV9ub3RpZmljYXRpb25zRXZlbnRIb29rKQogICAgICAgICBVbmhv
b2tXaW5FdmVudChtX25vdGlmaWNhdGlvbnNFdmVudEhvb2spOwogCi0gICAgZm9yIChIYXNoTWFw
PFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmlj
YXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuZW5k
KCk7ICsraXQpCi0gICAgICAgIEpTVmFsdWVVbnByb3RlY3QoZnJhbWUtPmdsb2JhbENvbnRleHQo
KSwgaXQtPnZhbHVlKTsKKyAgICBmb3IgKGF1dG8mIHNsb3QgOiBtX25vdGlmaWNhdGlvbkxpc3Rl
bmVycykKKyAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChmcmFtZS0+Z2xvYmFsQ29udGV4dCgpLCBz
bG90LnZhbHVlKTsKIH0KIAogQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6ZWxlbWVudEF0UG9pbnQoaW50IHgsIGludCB5KQpAQCAtMzM3LDggKzMzNyw4IEBA
IHZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGkKIAogdm9pZCBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6d2luTm90aWZpY2F0aW9uUmVjZWl2ZWQoUGxhdGZvcm1VSUVsZW1l
bnQgZWxlbWVudCwgY29uc3Qgc3RyaW5nJiBldmVudE5hbWUpCiB7Ci0gICAgZm9yIChIYXNoTWFw
PFBsYXRmb3JtVUlFbGVtZW50LCBKU09iamVjdFJlZj46Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmlj
YXRpb25MaXN0ZW5lcnMuYmVnaW4oKTsgaXQgIT0gbV9ub3RpZmljYXRpb25MaXN0ZW5lcnMuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgQ09NUHRyPElTZXJ2aWNlUHJvdmlkZXI+IHRoaXNTZXJ2aWNl
UHJvdmlkZXIoUXVlcnksIGl0LT5rZXkpOworICAgIGZvciAoYXV0byYgc2xvdCA6IG1fbm90aWZp
Y2F0aW9uTGlzdGVuZXJzKSB7CisgICAgICAgIENPTVB0cjxJU2VydmljZVByb3ZpZGVyPiB0aGlz
U2VydmljZVByb3ZpZGVyKFF1ZXJ5LCBzbG90LmtleSk7CiAgICAgICAgIGlmICghdGhpc1NlcnZp
Y2VQcm92aWRlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0zNjEsNyArMzYxLDcgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6d2luTm90aWZpYwogCiAgICAgICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihBZG9wdCwgSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoZXZlbnROYW1lLmNfc3RyKCkpKTsKICAgICAgICAgSlNWYWx1ZVJlZiBh
cmd1bWVudCA9IEpTVmFsdWVNYWtlU3RyaW5nKGZyYW1lLT5nbG9iYWxDb250ZXh0KCksIGpzTm90
aWZpY2F0aW9uLmdldCgpKTsKLSAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihmcmFtZS0+
Z2xvYmFsQ29udGV4dCgpLCBpdC0+dmFsdWUsIDAsIDEsICZhcmd1bWVudCwgMCk7CisgICAgICAg
IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oZnJhbWUtPmdsb2JhbENvbnRleHQoKSwgc2xvdC52YWx1
ZSwgMCwgMSwgJmFyZ3VtZW50LCAwKTsKICAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMTc5MTQ5KQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjU4LDcgKzY1OCw3IEBAIHN0YXRpYyB2b2lkIGR1bXBCYWNrRm9yd2FyZExpc3RGb3JBbGxX
aW4KICAgICB1bnNpZ25lZCBjb3VudCA9IG9wZW5XaW5kb3dzKCkuc2l6ZSgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgIEhXTkQgd2luZG93ID0g
b3BlbldpbmRvd3MoKVtpXTsKLSAgICAgICAgSVdlYlZpZXcqIHdlYlZpZXcgPSB3aW5kb3dUb1dl
YlZpZXdNYXAoKS5nZXQod2luZG93KS5nZXQoKTsKKyAgICAgICAgSVdlYlZpZXcqIHdlYlZpZXcg
PSB3aW5kb3dUb1dlYlZpZXdNYXAoKS5nZXQod2luZG93KTsKICAgICAgICAgZHVtcEJhY2tGb3J3
YXJkTGlzdCh3ZWJWaWV3KTsKICAgICB9CiB9Cg==
</data>
<flag name="review"
          id="270323"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>