<?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>168699</bug_id>
          
          <creation_ts>2017-02-21 18:13:42 -0800</creation_ts>
          <short_desc>[GTK] Hangs when showing Google search results</short_desc>
          <delta_ts>2017-02-28 22:33:21 -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>WebKitGTK</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Bastien Nocera">bugzilla</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fujii</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1279709</commentid>
    <comment_count>0</comment_count>
    <who name="Bastien Nocera">bugzilla</who>
    <bug_when>2017-02-21 18:13:42 -0800</bug_when>
    <thetext>I see this every 3 or 4 times I show a Google search results page.

epiphany-3.23.90-1.fc26.x86_64
webkitgtk4-2.15.4-4.fc26.x86_64

The only 2 threads that aren&apos;t in poll:
Thread 2 (Thread 0x7f52183c5700 (LWP 13972)):
#0  0x00007f52250d4a2b in futex_wait_cancelable (private=&lt;optimized out&gt;, expected=0, futex_word=0x7f522873a4b0 &lt;bmalloc::PerProcess&lt;bmalloc::Heap&gt;::s_memory+3120&gt;)
    at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  0x00007f52250d4a2b in __pthread_cond_wait_common (abstime=0x0, mutex=0x560f78535ae0, cond=0x7f522873a488 &lt;bmalloc::PerProcess&lt;bmalloc::Heap&gt;::s_memory+3080&gt;) at pthread_cond_wait.c:502
#2  0x00007f52250d4a2b in __pthread_cond_wait (cond=0x7f522873a488 &lt;bmalloc::PerProcess&lt;bmalloc::Heap&gt;::s_memory+3080&gt;, mutex=0x560f78535ae0) at pthread_cond_wait.c:655
#3  0x00007f521f1c97bc in std::condition_variable::wait(std::unique_lock&lt;std::mutex&gt;&amp;) () at /lib64/libstdc++.so.6
#4  0x00007f5228537aa7 in std::_V2::condition_variable_any::wait&lt;std::unique_lock&lt;bmalloc::Mutex&gt; &gt;(std::unique_lock&lt;bmalloc::Mutex&gt;&amp;) (__lock=&lt;synthetic pointer&gt;..., this=&lt;optimized out&gt;)
    at /usr/include/c++/7/condition_variable:251
#5  0x00007f5228537aa7 in std::_V2::condition_variable_any::wait&lt;std::unique_lock&lt;bmalloc::Mutex&gt;, bmalloc::AsyncTask&lt;bmalloc::Heap, void (bmalloc::Heap::*)()&gt;::threadRunLoop()::{lambda()#1}&gt;(std::unique_lock&lt;bmalloc::Mutex&gt;&amp;, bmalloc::AsyncTask&lt;bmalloc::Heap, void (bmalloc::Heap::*)()&gt;::threadRunLoop()::{lambda()#1}) (__p=..., __lock=..., this=&lt;optimized out&gt;) at /usr/include/c++/7/condition_variable:260
#6  0x00007f5228537aa7 in bmalloc::AsyncTask&lt;bmalloc::Heap, void (bmalloc::Heap::*)()&gt;::threadRunLoop() (this=0x7f522873a480 &lt;bmalloc::PerProcess&lt;bmalloc::Heap&gt;::s_memory+3072&gt;)
    at /usr/src/debug/webkitgtk-2.15.4/Source/bmalloc/bmalloc/AsyncTask.h:130
#7  0x00007f5228537be9 in bmalloc::AsyncTask&lt;bmalloc::Heap, void (bmalloc::Heap::*)()&gt;::threadEntryPoint(bmalloc::AsyncTask&lt;bmalloc::Heap, void (bmalloc::Heap::*)()&gt;*) (asyncTask=&lt;optimized out&gt;)
    at /usr/src/debug/webkitgtk-2.15.4/Source/bmalloc/bmalloc/AsyncTask.h:110
#8  0x00007f521f1cfaaf in  () at /lib64/libstdc++.so.6
#9  0x00007f52250ce5bd in start_thread (arg=0x7f52183c5700) at pthread_create.c:456
#10 0x00007f521e927c3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 1 (Thread 0x7f522ce00f80 (LWP 13959)):
#0  0x00007f52250d4a2b in futex_wait_cancelable (private=&lt;optimized out&gt;, expected=0, futex_word=0x7f522cc9e558 &lt;IPC::Connection::SyncMessageState::singleton()::syncMessageState+88&gt;)
    at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  0x00007f52250d4a2b in __pthread_cond_wait_common (abstime=0x0, mutex=0x7f522cc9e508 &lt;IPC::Connection::SyncMessageState::singleton()::syncMessageState+8&gt;, cond=0x7f522cc9e530 &lt;IPC::Connection::SyncMessageState::singleton()::syncMessageState+48&gt;) at pthread_cond_wait.c:502
#2  0x00007f52250d4a2b in __pthread_cond_wait (cond=cond@entry=0x7f522cc9e530 &lt;IPC::Connection::SyncMessageState::singleton()::syncMessageState+48&gt;, mutex=mutex@entry=0x7f522cc9e508 &lt;IPC::Connection::SyncMessageState::singleton()::syncMessageState+8&gt;) at pthread_cond_wait.c:655
#3  0x00007f5228530085 in WTF::ThreadCondition::wait(WTF::Mutex&amp;) (this=this@entry=0x7f522cc9e530 &lt;IPC::Connection::SyncMessageState::singleton()::syncMessageState+48&gt;, mutex=...)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:365
#4  0x00007f522853013b in WTF::ThreadCondition::timedWait(WTF::Mutex&amp;, double) (this=this@entry=0x7f522cc9e530 &lt;IPC::Connection::SyncMessageState::singleton()::syncMessageState+48&gt;, mutex=..., absoluteTime=inf)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:375
#5  0x00007f522c27f024 in WTF::BinarySemaphore::wait(WTF::TimeWithDynamicClockType) (this=0x7f522cc9e500 &lt;IPC::Connection::SyncMessageState::singleton()::syncMessageState&gt;, absoluteTime=...)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/threads/BinarySemaphore.cpp:54
#6  0x00007f522aa2273e in IPC::Connection::SyncMessageState::wait(WTF::TimeWithDynamicClockType) (absoluteTime=..., this=&lt;optimized out&gt;)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/Platform/IPC/Connection.cpp:82
#7  0x00007f522aa2273e in IPC::Connection::waitForSyncReply(unsigned long, WTF::Seconds, WTF::OptionSet&lt;IPC::SendSyncOption&gt;) (this=this@entry=0x7f52179ec180, syncRequestID=syncRequestID@entry=57, timeout=..., 
    timeout@entry=..., sendSyncOptions=...) at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/Platform/IPC/Connection.cpp:586
#8  0x00007f522aa22c09 in IPC::Connection::sendSyncMessage(unsigned long, std::unique_ptr&lt;IPC::Encoder, std::default_delete&lt;IPC::Encoder&gt; &gt;, WTF::Seconds, WTF::OptionSet&lt;IPC::SendSyncOption&gt;) (this=this@entry=0x7f52179ec180, syncRequestID=57, encoder=std::unique_ptr&lt;IPC::Encoder&gt; containing 0x0, timeout=..., timeout@entry=..., sendSyncOptions=..., sendSyncOptions@entry=...)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/Platform/IPC/Connection.cpp:528
#9  0x00007f522abb37b7 in IPC::Connection::sendSync&lt;Messages::StorageManager::GetValues&gt;(Messages::StorageManager::GetValues&amp;&amp;, Messages::StorageManager::GetValues::Reply&amp;&amp;, unsigned long, WTF::Seconds, WTF::OptionSet&lt;IPC::SendSyncOption&gt;) (sendSyncOptions=..., timeout=..., destinationID=0, reply=&lt;optimized out&gt;, message=&lt;optimized out&gt;, this=0x7f52179ec180)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/Platform/IPC/Connection.h:391
#10 0x00007f522abb37b7 in WebKit::StorageAreaMap::loadValuesIfNeeded() (this=0x7f52178b8380) at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp:189
#11 0x00007f522abb3dcb in WebKit::StorageAreaMap::setItem(WebCore::Frame*, WebKit::StorageAreaImpl*, WTF::String const&amp;, WTF::String const&amp;, bool&amp;) (this=0x7f52178b8380, sourceFrame=0x7f51835ad000, sourceArea=0x7f5164896e80, key=..., value=..., quotaException=@0x7ffe0dca0577: false) at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp:120
#12 0x00007f522b9d19ea in WebCore::Storage::setItem(WTF::String const&amp;, WTF::String const&amp;) (this=this@entry=0x7f51382507e0, key=..., value=...)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WebCore/storage/Storage.cpp:102
#13 0x00007f522bed973c in WebCore::jsStoragePrototypeFunctionSetItemCaller (throwScope=..., castedThis=&lt;optimized out&gt;, state=0x7ffe0dca0640)
    at /usr/src/debug/webkitgtk-2.15.4/x86_64-redhat-linux-gnu/DerivedSources/WebCore/JSStorage.cpp:327
#14 0x00007f522bed973c in WebCore::BindingCaller&lt;WebCore::JSStorage&gt;::callOperation&lt;WebCore::jsStoragePrototypeFunctionSetItemCaller&gt; (operationName=0x7f522c2b66cc &quot;setItem&quot;, state=0x7ffe0dca0640)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WebCore/bindings/js/JSDOMBindingCaller.h:71
#15 0x00007f522bed973c in WebCore::jsStoragePrototypeFunctionSetItem(JSC::ExecState*) (state=0x7ffe0dca0640) at /usr/src/debug/webkitgtk-2.15.4/x86_64-redhat-linux-gnu/DerivedSources/WebCore/JSStorage.cpp:313
#16 0x00007f51bbfff028 in  ()
#17 0x00007ffe0dca06c0 in  ()
#18 0x00007f52281780fb in llint_entry () at /lib64/libjavascriptcoregtk-4.0.so.18</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279727</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-02-21 19:04:32 -0800</bug_when>
    <thetext>We&apos;d really need a backtrace with member variables to see what messages are being sent to do anything about this. Also please try again with 2.15.90 and let us know if it&apos;s still broken there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279863</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-22 05:27:40 -0800</bug_when>
    <thetext>No, I don&apos;t need a more details bt, it&apos;s easy to know that it&apos;s blocked in 

WebProcess::singleton().parentProcessConnection()-&gt;sendSync(Messages::StorageManager::GetValues(m_storageMapID, m_currentSeed), Messages::StorageManager::GetValues::Reply(values), 0);

What I need is a bt of the UI process too, to know why it&apos;s not responding to the sync message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279897</commentid>
    <comment_count>3</comment_count>
    <who name="Bastien Nocera">bugzilla</who>
    <bug_when>2017-02-22 08:40:24 -0800</bug_when>
    <thetext>Full bt:
Thread 18 (Thread 0x7f77dffff700 (LWP 3831)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=2, fds=0x7f77bc001370, timeout=&lt;optimized out&gt;, context=0x7f77bc000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77bc000900, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77bc001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::&lt;lambda()&gt;::operator() (__closure=0x7f77dfffeb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler&lt;void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::&lt;lambda()&gt; &gt;::_M_invoke(const std::_Any_data &amp;) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function&lt;void ()&gt;::operator()() const (this=0x7f77dfffeb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f77f3108140) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9f60) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77dffff700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 17 (Thread 0x7f77c37fe700 (LWP 3747)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=2, fds=0x7f77b0001370, timeout=&lt;optimized out&gt;, context=0x7f77b0000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77b0000900, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77b0001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::&lt;lambda()&gt;::operator() (__closure=0x7f77c37fdb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler&lt;void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::&lt;lambda()&gt; &gt;::_M_invoke(const std::_Any_data &amp;) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function&lt;void ()&gt;::operator()() const (this=0x7f77c37fdb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3910) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f98e0) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77c37fe700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 16 (Thread 0x7f77dcfaa700 (LWP 3739)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=2, fds=0x7f77c8001370, timeout=&lt;optimized out&gt;, context=0x7f77c8000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77c8000900, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77c8001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::&lt;lambda()&gt;::operator() (__closure=0x7f77dcfa9b30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler&lt;void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::&lt;lambda()&gt; &gt;::_M_invoke(const std::_Any_data &amp;) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function&lt;void ()&gt;::operator()() const (this=0x7f77dcfa9b30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3730) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9790) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77dcfaa700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 15 (Thread 0x7f77ddffb700 (LWP 3725)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=2, fds=0x7f77d0001370, timeout=&lt;optimized out&gt;, context=0x7f77d0000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77d0000900, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77d0001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::&lt;lambda()&gt;::operator() (__closure=0x7f77ddffab30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler&lt;void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::&lt;lambda()&gt; &gt;::_M_invoke(const std::_Any_data &amp;) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function&lt;void ()&gt;::operator()() const (this=0x7f77ddffab30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3550) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9640) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77ddffb700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 14 (Thread 0x7f77de7fc700 (LWP 3724)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786ded7d6c in poll (__timeout=-1, __nfds=1, __fds=0x7f77de7fb7c0) at /usr/include/bits/poll2.h:46
#2  0x00007f786ded7d6c in IPC::Connection::sendOutgoingMessage(std::unique_ptr&lt;IPC::Encoder, std::default_delete&lt;IPC::Encoder&gt; &gt;) (this=this@entry=0x7f785d9ecc00, encoder=std::unique_ptr&lt;IPC::Encoder&gt; containing 0x7f77b516bc80) at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:515
#3  0x00007f786dc8c00f in IPC::Connection::sendOutgoingMessages() (this=0x7f785d9ecc00) at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/Platform/IPC/Connection.cpp:825
#4  0x00007f786b2a04be in WTF::Function&lt;void ()&gt;::operator()() const (this=&lt;synthetic pointer&gt;) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Function.h:50
#5  0x00007f786b2a04be in WTF::RunLoop::performWork() (this=0x7f77f3198168) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/RunLoop.cpp:105
#6  0x00007f786b2c8839 in WTF::RunLoop::&lt;lambda(gpointer)&gt;::operator() (__closure=0x0, userData=&lt;optimized out&gt;) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:66
#7  0x00007f786b2c8839 in WTF::RunLoop::&lt;lambda(gpointer)&gt;::_FUN(gpointer) () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:68
#8  0x00007f786a255127 in g_main_dispatch (context=0x7f77cc000900) at gmain.c:3203
#9  0x00007f786a255127 in g_main_context_dispatch (context=context@entry=0x7f77cc000900) at gmain.c:3856
#10 0x00007f786a2554c8 in g_main_context_iterate (context=0x7f77cc000900, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3929
#11 0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77cc001240) at gmain.c:4125
#12 0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#13 0x00007f786b2c7f11 in WTF::WorkQueue::&lt;lambda()&gt;::operator() (__closure=0x7f77de7fbb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#14 0x00007f786b2c7f11 in std::_Function_handler&lt;void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::&lt;lambda()&gt; &gt;::_M_invoke(const std::_Any_data &amp;) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#15 0x00007f786b2a10c5 in std::function&lt;void ()&gt;::operator()() const (this=0x7f77de7fbb30) at /usr/include/c++/7/bits/std_function.h:669
#16 0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3500) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#17 0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9540) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#18 0x00007f78694c75bd in start_thread (arg=0x7f77de7fc700) at pthread_create.c:456
#19 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 13 (Thread 0x7f77df7fe700 (LWP 3714)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=2, fds=0x7f77d4001370, timeout=&lt;optimized out&gt;, context=0x7f77d4000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77d4000900, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77d4001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::&lt;lambda()&gt;::operator() (__closure=0x7f77df7fdb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler&lt;void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::&lt;lambda()&gt; &gt;::_M_invoke(const std::_Any_data &amp;) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function&lt;void ()&gt;::operator()() const (this=0x7f77df7fdb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f34b0) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f93c0) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77df7fe700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 12 (Thread 0x7f77f12ed700 (LWP 3710)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=1, fds=0x7f77d8001370, timeout=&lt;optimized out&gt;, context=0x7f77d8000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77d8000900, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77d8001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::&lt;lambda()&gt;::operator() (__closure=0x7f77f12ecb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler&lt;void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::&lt;lambda()&gt; &gt;::_M_invoke(const std::_Any_data &amp;) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function&lt;void ()&gt;::operator()() const (this=0x7f77f12ecb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3410) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9370) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77f12ed700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 11 (Thread 0x7f77f1aee700 (LWP 3709)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=1, fds=0x7f77e4001370, timeout=&lt;optimized out&gt;, context=0x7f77e4000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77e4000900, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77e4001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::&lt;lambda()&gt;::operator() (__closure=0x7f77f1aedb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler&lt;void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::&lt;lambda()&gt; &gt;::_M_invoke(const std::_Any_data &amp;) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function&lt;void ()&gt;::operator()() const (this=0x7f77f1aedb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f33c0) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9350) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77f1aee700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 10 (Thread 0x7f77f22ef700 (LWP 3708)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=1, fds=0x7f77e0001370, timeout=&lt;optimized out&gt;, context=0x7f77e0000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77e0000900, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77e0001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::&lt;lambda()&gt;::operator() (__closure=0x7f77f22eeb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler&lt;void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::&lt;lambda()&gt; &gt;::_M_invoke(const std::_Any_data &amp;) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function&lt;void ()&gt;::operator()() const (this=0x7f77f22eeb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3370) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9320) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f77f22ef700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 9 (Thread 0x7f77f3bff700 (LWP 3706)):
#0  0x00007f7869f465d9 in syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007f786a29a76f in g_cond_wait (cond=cond@entry=0x56536d18b458, mutex=mutex@entry=0x56536d18b450) at gthread-posix.c:1395
#2  0x00007f786a229b8b in g_async_queue_pop_intern_unlocked (queue=queue@entry=0x56536d18b450, wait=wait@entry=1, end_time=end_time@entry=-1) at gasyncqueue.c:419
#3  0x00007f786a229fb7 in g_async_queue_pop (queue=0x56536d18b450) at gasyncqueue.c:453
#4  0x00007f7873bba0d1 in run_history_service_thread () at /usr/lib64/epiphany/libephymisc.so
#5  0x00007f786a27c6d6 in g_thread_proxy (data=0x56536d033990) at gthread.c:784
#6  0x00007f78694c75bd in start_thread (arg=0x7f77f3bff700) at pthread_create.c:456
#7  0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 8 (Thread 0x7f78013fe700 (LWP 3698)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=2, fds=0x7f77f8001370, timeout=&lt;optimized out&gt;, context=0x7f77f8000900) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f77f8000900, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f77f8001240) at gmain.c:4125
#4  0x00007f786b2c90c0 in WTF::RunLoop::run() () at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/glib/RunLoopGLib.cpp:94
#5  0x00007f786b2c7f11 in WTF::WorkQueue::&lt;lambda()&gt;::operator() (__closure=0x7f78013fdb30) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/generic/WorkQueueGeneric.cpp:44
#6  0x00007f786b2c7f11 in std::_Function_handler&lt;void(), WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::&lt;lambda()&gt; &gt;::_M_invoke(const std::_Any_data &amp;) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
#7  0x00007f786b2a10c5 in std::function&lt;void ()&gt;::operator()() const (this=0x7f78013fdb30) at /usr/include/c++/7/bits/std_function.h:669
#8  0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3230) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#9  0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9060) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#10 0x00007f78694c75bd in start_thread (arg=0x7f78013fe700) at pthread_create.c:456
#11 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 7 (Thread 0x7f78027ff700 (LWP 3696)):
#0  0x00007f78694cdfd6 in futex_abstimed_wait_cancelable (private=&lt;optimized out&gt;, abstime=0x7f78027fe7d0, expected=0, futex_word=0x7f785d95b3a0) at ../sysdeps/unix/sysv/linux/futex-internal.h:205
#1  0x00007f78694cdfd6 in __pthread_cond_wait_common (abstime=0x7f78027fe7d0, mutex=0x7f785d95b350, cond=0x7f785d95b378) at pthread_cond_wait.c:539
#2  0x00007f78694cdfd6 in __pthread_cond_timedwait (cond=0x7f785d95b378, mutex=0x7f785d95b350, abstime=0x7f78027fe7d0) at pthread_cond_wait.c:667
#3  0x00007f786b2c710a in WTF::ThreadCondition::timedWait(WTF::Mutex&amp;, double) (this=this@entry=0x7f785d95b378, mutex=..., absoluteTime=1487774716.346159)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:386
#4  0x00007f786b29e23b in WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda&lt;bool ()&gt; const&amp;, WTF::ScopedLambda&lt;void ()&gt; const&amp;, WTF::TimeWithDynamicClockType const&amp;) (address=address@entry=0x7f78027fe90f, validation=..., beforeSleep=..., timeout=...) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ParkingLot.cpp:597
#5  0x00007f786b29032d in WTF::ParkingLot::parkConditionally&lt;bool WTF::ConditionBase::waitUntil&lt;WTF::Lock&gt;(WTF::Lock&amp;, WTF::TimeWithDynamicClockType const&amp;)::{lambda()#1}, bool WTF::ConditionBase::waitUntil&lt;WTF::Lock&gt;(WTF::Lock&amp;, WTF::TimeWithDynamicClockType const&amp;)::{lambda()#2}&gt;(void const*, bool WTF::ConditionBase::waitUntil&lt;WTF::Lock&gt;(WTF::Lock&amp;, WTF::TimeWithDynamicClockType const&amp;)::{lambda()#1} const&amp;, bool WTF::ConditionBase::waitUntil&lt;WTF::Lock&gt;(WTF::Lock&amp;, WTF::TimeWithDynamicClockType const&amp;)::{lambda()#2} const&amp;, WTF::TimeWithDynamicClockType const&amp;) (timeout=..., beforeSleep=..., validation=..., address=0x7f78027fe90f) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ParkingLot.h:85
#6  0x00007f786b29032d in WTF::ConditionBase::waitUntil&lt;WTF::Lock&gt;(WTF::Lock&amp;, WTF::TimeWithDynamicClockType const&amp;) (timeout=..., lock=..., this=0x7f78027fe90f)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Condition.h:77
#7  0x00007f786b29032d in WTF::ConditionBase::waitFor&lt;WTF::Lock&gt;(WTF::Lock&amp;, WTF::Seconds) (relativeTimeout=..., lock=..., this=0x7f78027fe90f) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Condition.h:117
#8  0x00007f786b29032d in WTF::sleep(double) (value=&lt;optimized out&gt;) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/CurrentTime.cpp:343
#9  0x00007f786df31f2d in WebKit::MemoryPressureMonitor::&lt;lambda()&gt;::operator() (__closure=&lt;optimized out&gt;) at /usr/src/debug/webkitgtk-2.15.4/Source/WebKit2/UIProcess/linux/MemoryPressureMonitor.cpp:254
#10 0x00007f786df31f2d in std::_Function_handler&lt;void(), WebKit::MemoryPressureMonitor::MemoryPressureMonitor()::&lt;lambda()&gt; &gt;::_M_invoke(const std::_Any_data &amp;) (__functor=...)
    at /usr/include/c++/7/bits/std_function.h:316
#11 0x00007f786b2a10c5 in std::function&lt;void ()&gt;::operator()() const (this=0x7f78027feb30) at /usr/include/c++/7/bits/std_function.h:669
#12 0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f31e0) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#13 0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9040) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#14 0x00007f78694c75bd in start_thread (arg=0x7f78027ff700) at pthread_create.c:456
#15 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 6 (Thread 0x7f7803b4a700 (LWP 3693)):
#0  0x00007f78694cda2b in futex_wait_cancelable (private=&lt;optimized out&gt;, expected=0, futex_word=0x7f77f3db21c4) at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  0x00007f78694cda2b in __pthread_cond_wait_common (abstime=0x0, mutex=0x7f77f3db2170, cond=0x7f77f3db2198) at pthread_cond_wait.c:502
#2  0x00007f78694cda2b in __pthread_cond_wait (cond=0x7f77f3db2198, mutex=0x7f77f3db2170) at pthread_cond_wait.c:655
#3  0x00007f786b2c713b in WTF::ThreadCondition::timedWait(WTF::Mutex&amp;, double) (this=this@entry=0x7f77f3db2198, mutex=..., absoluteTime=inf)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:375
#4  0x00007f786b29e23b in WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda&lt;bool ()&gt; const&amp;, WTF::ScopedLambda&lt;void ()&gt; const&amp;, WTF::TimeWithDynamicClockType const&amp;) (address=address@entry=0x7f785d9e8093, validation=..., beforeSleep=..., timeout=...) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ParkingLot.cpp:597
#5  0x00007f786e7a13a9 in WTF::ParkingLot::parkConditionally&lt;bool WTF::ConditionBase::waitUntil&lt;WTF::Lock&gt;(WTF::Lock&amp;, WTF::TimeWithDynamicClockType const&amp;)::{lambda()#1}, bool WTF::ConditionBase::waitUntil&lt;WTF::Lock&gt;(WTF::Lock&amp;, WTF::TimeWithDynamicClockType const&amp;)::{lambda()#2}&gt;(void const*, bool WTF::ConditionBase::waitUntil&lt;WTF::Lock&gt;(WTF::Lock&amp;, WTF::TimeWithDynamicClockType const&amp;)::{lambda()#1} const&amp;, bool WTF::ConditionBase::waitUntil&lt;WTF::Lock&gt;(WTF::Lock&amp;, WTF::TimeWithDynamicClockType const&amp;)::{lambda()#2} const&amp;, WTF::TimeWithDynamicClockType const&amp;) (timeout=..., beforeSleep=..., validation=..., address=0x7f785d9e8093) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ParkingLot.h:85
#6  0x00007f786e7a13a9 in WTF::ConditionBase::waitUntil&lt;WTF::Lock&gt;(WTF::Lock&amp;, WTF::TimeWithDynamicClockType const&amp;) (timeout=..., lock=..., this=0x7f785d9e8093)
    at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Condition.h:77
#7  0x00007f786e7a13a9 in WTF::ConditionBase::wait&lt;WTF::Lock&gt;(WTF::Lock&amp;) (lock=..., this=0x7f785d9e8093) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Condition.h:123
#8  0x00007f786e7a13a9 in WebCore::IconDatabase::syncThreadMainLoop() (this=this@entry=0x7f785d9e8000) at /usr/src/debug/webkitgtk-2.15.4/Source/WebCore/loader/icon/IconDatabase.cpp:1426
#9  0x00007f786e7a2d48 in WebCore::IconDatabase::iconDatabaseSyncThread() (this=0x7f785d9e8000) at /usr/src/debug/webkitgtk-2.15.4/Source/WebCore/loader/icon/IconDatabase.cpp:1028
#10 0x00007f786b2a10c5 in std::function&lt;void ()&gt;::operator()() const (this=0x7f7803b49b30) at /usr/include/c++/7/bits/std_function.h:669
#11 0x00007f786b2a10c5 in WTF::threadEntryPoint(void*) (contextData=0x7f785d9f3190) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/Threading.cpp:88
#12 0x00007f786b2c6b1a in WTF::wtfThreadEntryPoint(void*) (param=0x7f785d9f9010) at /usr/src/debug/webkitgtk-2.15.4/Source/WTF/wtf/ThreadingPthreads.cpp:168
#13 0x00007f78694c75bd in start_thread (arg=0x7f7803b4a700) at pthread_create.c:456
#14 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 5 (Thread 0x7f7855a56700 (LWP 3692)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=7, fds=0x7f784c002fc0, timeout=&lt;optimized out&gt;, context=0x7f7850014340) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=0x7f7850014340, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a2557e2 in g_main_loop_run (loop=0x7f7850013e00) at gmain.c:4125
#4  0x00007f786b7f77a6 in gdbus_shared_thread_func (user_data=0x7f7850014310) at gdbusprivate.c:247
#5  0x00007f786a27c6d6 in g_thread_proxy (data=0x56536c8bd320) at gthread.c:784
#6  0x00007f78694c75bd in start_thread (arg=0x7f7855a56700) at pthread_create.c:456
#7  0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 4 (Thread 0x7f7856257700 (LWP 3691)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=2, fds=0x7f78480008c0, timeout=&lt;optimized out&gt;, context=0x7f7850013af0) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=context@entry=0x7f7850013af0, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a25555c in g_main_context_iteration (context=0x7f7850013af0, may_block=may_block@entry=1) at gmain.c:3990
#4  0x00007f786a2555a1 in glib_worker_main (data=&lt;optimized out&gt;) at gmain.c:5783
#5  0x00007f786a27c6d6 in g_thread_proxy (data=0x56536c8bd2d0) at gthread.c:784
#6  0x00007f78694c75bd in start_thread (arg=0x7f7856257700) at pthread_create.c:456
#7  0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 3 (Thread 0x7f7856a58700 (LWP 3690)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=1, fds=0x7f78500010e0, timeout=&lt;optimized out&gt;, context=0x56536c8c2bc0) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=context@entry=0x56536c8c2bc0, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a25555c in g_main_context_iteration (context=0x56536c8c2bc0, may_block=1) at gmain.c:3990
#4  0x00007f7856a5ff3d in dconf_gdbus_worker_thread () at /usr/lib64/gio/modules/libdconfsettings.so
#5  0x00007f786a27c6d6 in g_thread_proxy (data=0x56536c8bccf0) at gthread.c:784
#6  0x00007f78694c75bd in start_thread (arg=0x7f7856a58700) at pthread_create.c:456
#7  0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 2 (Thread 0x7f785e207700 (LWP 3689)):
#0  0x00007f78694cda2b in futex_wait_cancelable (private=&lt;optimized out&gt;, expected=0, futex_word=0x7f786b4d14b4 &lt;bmalloc::PerProcess&lt;bmalloc::Heap&gt;::s_memory+3124&gt;)
    at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  0x00007f78694cda2b in __pthread_cond_wait_common (abstime=0x0, mutex=0x56536c8a4ae0, cond=0x7f786b4d1488 &lt;bmalloc::PerProcess&lt;bmalloc::Heap&gt;::s_memory+3080&gt;) at pthread_cond_wait.c:502
#2  0x00007f78694cda2b in __pthread_cond_wait (cond=0x7f786b4d1488 &lt;bmalloc::PerProcess&lt;bmalloc::Heap&gt;::s_memory+3080&gt;, mutex=0x56536c8a4ae0) at pthread_cond_wait.c:655
#3  0x00007f7868fe87bc in std::condition_variable::wait(std::unique_lock&lt;std::mutex&gt;&amp;) () at /lib64/libstdc++.so.6
#4  0x00007f786b2ceaa7 in std::_V2::condition_variable_any::wait&lt;std::unique_lock&lt;bmalloc::Mutex&gt; &gt;(std::unique_lock&lt;bmalloc::Mutex&gt;&amp;) (__lock=&lt;synthetic pointer&gt;..., this=&lt;optimized out&gt;)
    at /usr/include/c++/7/condition_variable:251
#5  0x00007f786b2ceaa7 in std::_V2::condition_variable_any::wait&lt;std::unique_lock&lt;bmalloc::Mutex&gt;, bmalloc::AsyncTask&lt;bmalloc::Heap, void (bmalloc::Heap::*)()&gt;::threadRunLoop()::{lambda()#1}&gt;(std::unique_lock&lt;bmalloc::Mutex&gt;&amp;, bmalloc::AsyncTask&lt;bmalloc::Heap, void (bmalloc::Heap::*)()&gt;::threadRunLoop()::{lambda()#1}) (__p=..., __lock=..., this=&lt;optimized out&gt;) at /usr/include/c++/7/condition_variable:260
#6  0x00007f786b2ceaa7 in bmalloc::AsyncTask&lt;bmalloc::Heap, void (bmalloc::Heap::*)()&gt;::threadRunLoop() (this=0x7f786b4d1480 &lt;bmalloc::PerProcess&lt;bmalloc::Heap&gt;::s_memory+3072&gt;)
    at /usr/src/debug/webkitgtk-2.15.4/Source/bmalloc/bmalloc/AsyncTask.h:130
#7  0x00007f786b2cebe9 in bmalloc::AsyncTask&lt;bmalloc::Heap, void (bmalloc::Heap::*)()&gt;::threadEntryPoint(bmalloc::AsyncTask&lt;bmalloc::Heap, void (bmalloc::Heap::*)()&gt;*) (asyncTask=&lt;optimized out&gt;)
    at /usr/src/debug/webkitgtk-2.15.4/Source/bmalloc/bmalloc/AsyncTask.h:110
#8  0x00007f7868feeaaf in  () at /lib64/libstdc++.so.6
#9  0x00007f78694c75bd in start_thread (arg=0x7f785e207700) at pthread_create.c:456
#10 0x00007f7869f4bc3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 1 (Thread 0x7f7873eed680 (LWP 3686)):
#0  0x00007f7869f4029d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f786a255449 in g_main_context_poll (priority=&lt;optimized out&gt;, n_fds=5, fds=0x56536c934b90, timeout=&lt;optimized out&gt;, context=0x56536c8ac250) at gmain.c:4228
#2  0x00007f786a255449 in g_main_context_iterate (context=context@entry=0x56536c8ac250, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3924
#3  0x00007f786a25555c in g_main_context_iteration (context=context@entry=0x56536c8ac250, may_block=may_block@entry=1) at gmain.c:3990
#4  0x00007f786b7ca45d in g_application_run (application=0x56536c933200 [EphyShell], argc=&lt;optimized out&gt;, argv=&lt;optimized out&gt;) at gapplication.c:2381
#5  0x000056536c317888 in main ()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279912</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-22 09:00:43 -0800</bug_when>
    <thetext>For som reason the thread we use to send/receive IPC messages is blocked sending a message, because sendmsg returned EAGAIN or EWOULDBLOCK and the poll never returns. That&apos;s why the UI process doesn&apos;t reply to the sync message from the web process. I don&apos;t know why poll never returns, but we should probably pass a timeout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280220</commentid>
    <comment_count>5</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-02-23 00:31:17 -0800</bug_when>
    <thetext>I see the same problem in WebKit PS4 port.

Bastien didn&apos;t show all threads of web process in Comment 0. I
guess ReceiveQueue thread of web process is also blocked in the
poll in which UI process is. If receive buffers of both processes
become full, and ReceiveQueue threads of both processes is trying
to send, both threads will be blocked and won&apos;t read the data.

Easy workaround is enlarging receive buffers with setsockopt(SO_RCVBUF).

I think there are two choices of solutions:
1) Separate receiving and sending threads
2) Polling POLLIN and POLLOUT if sendmsg returns EWOULDBLOCK or EAGAIN in ReceiveQueue thread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280257</commentid>
    <comment_count>6</comment_count>
      <attachid>302509</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-23 07:16:08 -0800</bug_when>
    <thetext>Created attachment 302509
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280258</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-23 07:17:15 -0800</bug_when>
    <thetext>Attachment 302509 did not pass style-queue:


ERROR: Source/WebKit2/Platform/IPC/glib/GSocketMonitor.cpp:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Platform/IPC/glib/GSocketMonitor.h:46:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Platform/IPC/glib/GSocketMonitor.h:54:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280700</commentid>
    <comment_count>8</comment_count>
      <attachid>302509</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-02-23 23:04:16 -0800</bug_when>
    <thetext>Comment on attachment 302509
Patch

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

&gt; Source/WebKit2/ChangeLog:13
&gt; +        socket monitor as readSocketMonitor and adds another one for polling output. When sendsmg fails with

s/sendsmg/sendmsg/

&gt; Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:365
&gt; +bool Connection::sendOutputMessage(UnixMessage&amp; outputMessage)

Mac port uses unique_ptr. You don&apos;t use unique_ptr&lt;UnixMessage&gt; for outputMessage for performance?

&gt; Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:458
&gt; +                            sendOutputMessage(*message);

You don&apos;t need to check the return value of sendOutputMessage?

&gt; Source/WebKit2/Platform/IPC/unix/UnixMessage.h:66
&gt; +class AttachmentInfo {

You don&apos;t need to move AttachmentInfo, too.

&gt; Source/WebKit2/Platform/IPC/unix/UnixMessage.h:114
&gt; +            memcpy(m_body, other.m_body, m_messageInfo.bodySize());

You don&apos;t need to copy the body if m_messageInfo.isMessageBodyIsOutOfLine().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280701</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-23 23:15:31 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 302509 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=302509&amp;action=review

Thanks for the review Fuji!

&gt; &gt; Source/WebKit2/ChangeLog:13
&gt; &gt; +        socket monitor as readSocketMonitor and adds another one for polling output. When sendsmg fails with
&gt; 
&gt; s/sendsmg/sendmsg/

Oops

&gt; &gt; Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:365
&gt; &gt; +bool Connection::sendOutputMessage(UnixMessage&amp; outputMessage)
&gt; 
&gt; Mac port uses unique_ptr. You don&apos;t use unique_ptr&lt;UnixMessage&gt; for
&gt; outputMessage for performance?

Yes, the case of EWOULDBLOCK hardly ever happens, so only in that case I heap allocate the message to saved it.

&gt; &gt; Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:458
&gt; &gt; +                            sendOutputMessage(*message);
&gt; 
&gt; You don&apos;t need to check the return value of sendOutputMessage?

I&apos;m assuming it won&apos;t fail because the poll said we can write without blocking. In any case, what we do is calling sendOutgoingMessages() that will return early if sendOutputMessage failed.

&gt; &gt; Source/WebKit2/Platform/IPC/unix/UnixMessage.h:66
&gt; &gt; +class AttachmentInfo {
&gt; 
&gt; You don&apos;t need to move AttachmentInfo, too.

Right.

&gt; &gt; Source/WebKit2/Platform/IPC/unix/UnixMessage.h:114
&gt; &gt; +            memcpy(m_body, other.m_body, m_messageInfo.bodySize());
&gt; 
&gt; You don&apos;t need to copy the body if m_messageInfo.isMessageBodyIsOutOfLine().

Good point!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280709</commentid>
    <comment_count>10</comment_count>
      <attachid>302650</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-23 23:49:44 -0800</bug_when>
    <thetext>Created attachment 302650
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280711</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-23 23:52:24 -0800</bug_when>
    <thetext>Attachment 302650 did not pass style-queue:


ERROR: Source/WebKit2/Platform/IPC/glib/GSocketMonitor.cpp:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Platform/IPC/glib/GSocketMonitor.h:46:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/Platform/IPC/glib/GSocketMonitor.h:54:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280770</commentid>
    <comment_count>12</comment_count>
    <who name="Bastien Nocera">bugzilla</who>
    <bug_when>2017-02-24 08:01:10 -0800</bug_when>
    <thetext>Quick testing shows that this indeed fixes the problem for me, on top of the 2.15.90-1 package in Fedora rawhide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281304</commentid>
    <comment_count>13</comment_count>
      <attachid>302650</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-02-26 23:22:06 -0800</bug_when>
    <thetext>Comment on attachment 302650
Updated patch

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

&gt; Source/WebKit2/Platform/IPC/unix/UnixMessage.h:66
&gt; +    UnixMessage(Encoder* encoder)

Encoder could be a reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281316</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-26 23:52:32 -0800</bug_when>
    <thetext>Committed r213030: &lt;http://trac.webkit.org/changeset/213030&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281445</commentid>
    <comment_count>15</comment_count>
      <attachid>302650</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-02-27 11:08:35 -0800</bug_when>
    <thetext>Comment on attachment 302650
Updated patch

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

&gt; Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:477
&gt; +#if PLATFORM(GTK)

Why is there anything GTK-specific in ConnectionUnix.cpp? Can&apos;t we align our code with the other ports to avoid GTK-specific bugs?

At the very very least, all of these should be changed to if USE(GLIB), right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281725</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-27 22:44:54 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 302650 [details]
&gt; Updated patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=302650&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp:477
&gt; &gt; +#if PLATFORM(GTK)
&gt; 
&gt; Why is there anything GTK-specific in ConnectionUnix.cpp? Can&apos;t we align our
&gt; code with the other ports to avoid GTK-specific bugs?

There&apos;s nothing GTK+ specific, it&apos;s glib, but EFL didn&apos;t use our gsocket monitor, I don&apos;t know why, so we had to use PLATFORM(GTK) instead of USE(GLIB). I agree we could have used USE(GLIB) &amp;&amp; !PLATFORM(EFL), though. This bug is not GTK specific at all, the problem was in the poll we used when sendmsg returns EWOULDBLOCK. The solution is GTK+ specific, well, GLib specific, because we use our socket monitor to properly poll the socket also for writing in case of EWOULBLOCK using the run loop.

&gt; At the very very least, all of these should be changed to if USE(GLIB),
&gt; right?

Right, now that EFL is gone, that&apos;s exactly my plan. We could also make it ifdef free by converting our socket monitor into a platform-specific class with platform implementations. However, now that there&apos;s no other unix ports using this code, it&apos;s not easy for me to do that refactoring without knowing the other implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281841</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-02-28 11:38:03 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Right, now that EFL is gone, that&apos;s exactly my plan. We could also make it
&gt; ifdef free by converting our socket monitor into a platform-specific class
&gt; with platform implementations. However, now that there&apos;s no other unix ports
&gt; using this code, it&apos;s not easy for me to do that refactoring without knowing
&gt; the other implementations.

Let&apos;s do this. Solution is to rename it to ConnectionGLib.cpp and just remove ConnectionUnix.cpp. If some future port wants to use it, they can bring it back at that time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282162</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-28 22:33:21 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; Right, now that EFL is gone, that&apos;s exactly my plan. We could also make it
&gt; &gt; ifdef free by converting our socket monitor into a platform-specific class
&gt; &gt; with platform implementations. However, now that there&apos;s no other unix ports
&gt; &gt; using this code, it&apos;s not easy for me to do that refactoring without knowing
&gt; &gt; the other implementations.
&gt; 
&gt; Let&apos;s do this. Solution is to rename it to ConnectionGLib.cpp and just
&gt; remove ConnectionUnix.cpp. If some future port wants to use it, they can
&gt; bring it back at that time.

No, I haven&apos;t proposed this, a possible ConnectionGLib would be quite different (and simpler) using the GSocket API por everything. ConnectionUnix is common code except for the socket monitor, so let&apos;s just change the ifdefs to USE(GLIB). What I proposed was to make the socket monitor a common interface with platform implementations not the whole file. When we added this implementation, we (GTK, EFL and Qt ports) decided not to use platform APIs for this, to share the implementation.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302509</attachid>
            <date>2017-02-23 07:16:08 -0800</date>
            <delta_ts>2017-02-23 23:49:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-send-poll.diff</filename>
            <type>text/plain</type>
            <size>22333</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4MWFmNmE5OWZhNS4uYmUyNGJhNzBiZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OSBAQAorMjAxNy0wMi0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gSGFuZ3Mgd2hlbiBzaG93aW5nIEdvb2dsZSBzZWFy
Y2ggcmVzdWx0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY4Njk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZSgpIGNhbiBwb2xsIGZvcmV2ZXIgaWYg
c2VuZG1zZyBmYWlscyB3aXRoIEVBR0FJTiBvciBFV09VTERCTE9DSy4gRm9yIGV4YW1wbGUgaWYK
KyAgICAgICAgc29ja2V0IHJlYWQgYnVmZmVycyBhcmUgZnVsbCwgcG9sbCB3aWxsIGJlIGJsb2Nr
ZWQgdW50aWwgd2UgcmVhZCB0aGUgcGVuZGluZyBkYXRhLCBidXQgd2UgY2FuJ3QgcmVhZCBiZWNh
dXNlCisgICAgICAgIHRoZSB0aHJlYWQgaXMgYmxvY2tlZCBpbiB0aGUgcG9sbC4gSW4gY2FzZSBv
ZiBFQUdBSU4vRVdPVUxEQkxPQ0sgd2Ugc2hvdWxkIHBvbGwgdXNpbmcgdGhlIHJ1biBsb29wLCB0
byBhbGxvdworICAgICAgICByZWFkcyB0byBoYXBwZW4gaW4gdGhyZWFkIHdoaWxlIHdlIHdhaXQg
Zm9yIHRoZSBzb2NrZXQgdG8gYmUgd3JpdGFibGUgYWdhaW4uIEluIHRoZSBHVEsrIHBvcnQgd2Ug
dXNlCisgICAgICAgIEdTb2NrZXRNb25pdG9yIHRvIHBvbGwgc29ja2V0IGZpbGUgZGVzY3JpcHRv
ciB3aXRob3V0IGJsb2NraW5nLCB1c2luZyB0aGUgcnVuIGxvb3AuIFRoaXMgcGF0Y2ggcmVuYW1l
cyB0aGUKKyAgICAgICAgc29ja2V0IG1vbml0b3IgYXMgcmVhZFNvY2tldE1vbml0b3IgYW5kIGFk
ZHMgYW5vdGhlciBvbmUgZm9yIHBvbGxpbmcgb3V0cHV0LiBXaGVuIHNlbmRzbWcgZmFpbHMgd2l0
aAorICAgICAgICBFQUdBSU4vRVdPVUxEQkxPQ0ssIHRoZSBwZW5kaW5nIG1lc3NhZ2UgaXMgc2F2
ZWQgYW5kIHRoZSB3cml0ZSBtb25pdG9yIHN0YXJ0cyBwb2xsaW5nLiBPbmNlIHRoZSBzb2NrZXQg
aXMKKyAgICAgICAgd3JpdGFibGUgYWdhaW4gd2Ugc2VuZCB0aGUgcGVuZGluZyBtZXNzYWdlLiBI
ZWxwZXIgY2xhc3NlcyBNZXNzYWdlSW5mbywgQXR0YWNobWVudEluZm8gYW5kIGEgbmV3IG9uZSBV
bml4TWVzc2FnZQorICAgICAgICBoYXZlIGJlZW4gbW92ZWQgdG8gaXRzIG93biBoZWFkZXIgZmls
ZSB0byBiZSBhYmxlIHRvIHVzZSBzdGQ6OnVuaXF1ZV9wdHIgbWVtYmVyIHRvIHNhdmUgdGhlIHBl
bmRpbmcgbWVzc2FnZS4KKworICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcDog
SW5jbHVkZSBVbml4TWVzc2FnZS5oIGFzIHJlcXVpcmVkIGJ5IHN0ZDo6dW5pcXVlX3B0ci4KKyAg
ICAgICAgKiBQbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oOiBBZGQgd3JpdGUgc29ja2V0IG1vbml0
b3IgYW5kIGFsc28ga2VlcCB0aGUgR1NvY2tldCBhcyBhIG1lbWJlciB0byByZXVzZSBpdC4KKyAg
ICAgICAgKiBQbGF0Zm9ybS9JUEMvZ2xpYi9HU29ja2V0TW9uaXRvci5jcHA6IFVzZSBGdW5jdGlv
biBpbnN0ZWFkIG9mIHN0ZDo6ZnVuY3Rpb24uCisgICAgICAgIChJUEM6OkdTb2NrZXRNb25pdG9y
OjpzdGFydCk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL2dsaWIvR1NvY2tldE1vbml0b3IuaDoK
KyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHA6CisgICAgICAg
IChJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZSk6IEluaXRpYWxpemUgdGhlIEdT
b2NrZXQgaGVyZSBzaW5jZSB3ZSByZWx5IG9uIGl0IHRvIHRha2UgdGhlIG93bmVyc2hpcCBvZgor
ICAgICAgICB0aGUgZGVzY3JpcHRvci4gV2Ugd2VyZSBsZWFraW5nIGl0IGlmIHRoZSBjb25uZWN0
aW9uIHdhcyBpbnZhbGlkYXRlZCB3aXRob3V0IGJlaW5nIG9wZW5lZC4KKyAgICAgICAgKElQQzo6
Q29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKTogRGVzdHJveSB0aGUgR1NvY2tldCBldmVu
IHdoZW4gbm90IGNvbm5lY3RlZC4gQWxzbyBzdG9wIHRoZSB3cml0ZSBtb25pdG9yLgorICAgICAg
ICAoSVBDOjpDb25uZWN0aW9uOjpwcm9jZXNzTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5l
Y3Rpb246Om9wZW4pOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRP
dXRnb2luZ01lc3NhZ2VzKTogUmV0dXJuIGZhbHNlIGlmIHdlIGhhdmUgYSBwZW5kaW5nIG1lc3Nh
Z2UgdG8gZW5zdXJlCisgICAgICAgIENvbm5lY3Rpb24gZG9lc24ndCB0cnkgdG8gc2VuZCBtb3Jl
IG1lc3NhZ2VzIHVudGlsIHRoZSBwZW5kaW5nIG1lc3NhZ2UgaXMgZGlzcGF0Y2hlZC4gV2UgZG9u
J3QgbmVlZCB0byBjaGVjaworICAgICAgICBtX2lzQ29ubmVjdGVkIGJlY2F1c2UgdGhlIGNhbGxl
ciBhbHJlYWR5IGNoZWNrcyB0aGF0LgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpzZW5kT3V0
Z29pbmdNZXNzYWdlKTogU3BsaXQgaXQgaW4gdHdvLiBUaGlzIGNyZWF0ZXMgYW5kIHByZXBhcmVz
IGEgVW5peE1lc3NhZ2UgYW5kIHRoZW4gY2FsbHMKKyAgICAgICAgc2VuZE91dHB1dE1lc3NhZ2Uo
KSB0byBkbyB0aGUgcmVzdC4KKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6c2VuZE91dHB1dE1l
c3NhZ2UpOiBTZW5kIHRoZSBtZXNzYWdlLCBvciBzYXZlIGl0IGlmIHNlbmRtc2cgZmFpbHMgd2l0
aCBFQUdBSU4gb3IgRVdPVUxEQkxPQ0sKKyAgICAgICAgdG8gYmUgc2VudCBsYXRlciB3aGVuIHRo
ZSBzb2NrZXQgaXMgd3JpdGFibGUuCisgICAgICAgICogUGxhdGZvcm0vSVBDL3VuaXgvVW5peE1l
c3NhZ2UuaDogQWRkZWQuCisgICAgICAgIChJUEM6Ok1lc3NhZ2VJbmZvOjpNZXNzYWdlSW5mbyk6
CisgICAgICAgIChJUEM6Ok1lc3NhZ2VJbmZvOjpzZXRNZXNzYWdlQm9keUlzT3V0T2ZMaW5lKToK
KyAgICAgICAgKElQQzo6TWVzc2FnZUluZm86OmlzTWVzc2FnZUJvZHlJc091dE9mTGluZSk6Cisg
ICAgICAgIChJUEM6Ok1lc3NhZ2VJbmZvOjpib2R5U2l6ZSk6CisgICAgICAgIChJUEM6Ok1lc3Nh
Z2VJbmZvOjphdHRhY2htZW50Q291bnQpOgorICAgICAgICAoSVBDOjpBdHRhY2htZW50SW5mbzo6
c2V0VHlwZSk6CisgICAgICAgIChJUEM6OkF0dGFjaG1lbnRJbmZvOjp0eXBlKToKKyAgICAgICAg
KElQQzo6QXR0YWNobWVudEluZm86OnNldFNpemUpOgorICAgICAgICAoSVBDOjpBdHRhY2htZW50
SW5mbzo6c2l6ZSk6CisgICAgICAgIChJUEM6OkF0dGFjaG1lbnRJbmZvOjpzZXROdWxsKToKKyAg
ICAgICAgKElQQzo6QXR0YWNobWVudEluZm86OmlzTnVsbCk6CisgICAgICAgIChJUEM6OlVuaXhN
ZXNzYWdlOjpVbml4TWVzc2FnZSk6CisgICAgICAgIChJUEM6OlVuaXhNZXNzYWdlOjp+VW5peE1l
c3NhZ2UpOgorICAgICAgICAoSVBDOjpVbml4TWVzc2FnZTo6YXR0YWNobWVudHMpOgorICAgICAg
ICAoSVBDOjpVbml4TWVzc2FnZTo6bWVzc2FnZUluZm8pOgorICAgICAgICAoSVBDOjpVbml4TWVz
c2FnZTo6Ym9keSk6CisgICAgICAgIChJUEM6OlVuaXhNZXNzYWdlOjpib2R5U2l6ZSk6CisgICAg
ICAgIChJUEM6OlVuaXhNZXNzYWdlOjphcHBlbmRBdHRhY2htZW50KToKKyAgICAgICAgKiBQbGF0
Zm9ybUdUSy5jbWFrZToKKwogMjAxNy0wMi0yMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQ3Jhc2ggYXR0ZW1wdGluZyB0byBsb2Fk
IEZsYXNoIHBsdWdpbiBpbiBXYXlsYW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29u
bmVjdGlvbi5jcHAKaW5kZXggZGFhNjUxMGZiOTIuLmJhZjUzMDY2YmUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCkBAIC0zOSw2ICszOSwxMCBAQAogI2lu
Y2x1ZGUgIk1hY2hNZXNzYWdlLmgiCiAjZW5kaWYKIAorI2lmIFVTRShVTklYX0RPTUFJTl9TT0NL
RVRTKQorI2luY2x1ZGUgIlVuaXhNZXNzYWdlLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIElQQyB7
CiAKIHN0cnVjdCBDb25uZWN0aW9uOjpSZXBseUhhbmRsZXIgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0lQQy9Db25uZWN0aW9uLmgKaW5kZXggODdhM2Q5MTA4YjcuLmE1YThhZDdiNGFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgKQEAgLTc5LDYgKzc5LDcgQEAg
ZW51bSBjbGFzcyBXYWl0Rm9yT3B0aW9uIHsKIHdoaWxlICgwKQogCiBjbGFzcyBNYWNoTWVzc2Fn
ZTsKK2NsYXNzIFVuaXhNZXNzYWdlOwogCiBjbGFzcyBDb25uZWN0aW9uIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPENvbm5lY3Rpb24+IHsKIHB1YmxpYzoKQEAgLTMwOCwxMiArMzA5LDE2
IEBAIHByaXZhdGU6CiAgICAgLy8gQ2FsbGVkIG9uIHRoZSBjb25uZWN0aW9uIHF1ZXVlLgogICAg
IHZvaWQgcmVhZHlSZWFkSGFuZGxlcigpOwogICAgIGJvb2wgcHJvY2Vzc01lc3NhZ2UoKTsKKyAg
ICBib29sIHNlbmRPdXRwdXRNZXNzYWdlKFVuaXhNZXNzYWdlJik7CiAKICAgICBWZWN0b3I8dWlu
dDhfdD4gbV9yZWFkQnVmZmVyOwogICAgIFZlY3RvcjxpbnQ+IG1fZmlsZURlc2NyaXB0b3JzOwog
ICAgIGludCBtX3NvY2tldERlc2NyaXB0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVuaXhNZXNz
YWdlPiBtX3BlbmRpbmdPdXRwdXRNZXNzYWdlOwogI2lmIFBMQVRGT1JNKEdUSykKLSAgICBHU29j
a2V0TW9uaXRvciBtX3NvY2tldE1vbml0b3I7CisgICAgR1JlZlB0cjxHU29ja2V0PiBtX3NvY2tl
dDsKKyAgICBHU29ja2V0TW9uaXRvciBtX3JlYWRTb2NrZXRNb25pdG9yOworICAgIEdTb2NrZXRN
b25pdG9yIG1fd3JpdGVTb2NrZXRNb25pdG9yOwogI2VuZGlmCiAjZWxpZiBPUyhEQVJXSU4pCiAg
ICAgLy8gQ2FsbGVkIG9uIHRoZSBjb25uZWN0aW9uIHF1ZXVlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vSVBDL2dsaWIvR1NvY2tldE1vbml0b3IuY3BwIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vSVBDL2dsaWIvR1NvY2tldE1vbml0b3IuY3BwCmluZGV4IDBmYWYyNjZj
Y2JmLi4xNDMyOWI5Mzg5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBD
L2dsaWIvR1NvY2tldE1vbml0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQ
Qy9nbGliL0dTb2NrZXRNb25pdG9yLmNwcApAQCAtNDIsNyArNDIsNyBAQCBnYm9vbGVhbiBHU29j
a2V0TW9uaXRvcjo6c29ja2V0U291cmNlQ2FsbGJhY2soR1NvY2tldCosIEdJT0NvbmRpdGlvbiBj
b25kaXRpb24sCiAgICAgcmV0dXJuIG1vbml0b3ItPm1fY2FsbGJhY2soY29uZGl0aW9uKTsKIH0K
IAotdm9pZCBHU29ja2V0TW9uaXRvcjo6c3RhcnQoR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRp
b24gY29uZGl0aW9uLCBSdW5Mb29wJiBydW5Mb29wLCBzdGQ6OmZ1bmN0aW9uPGdib29sZWFuIChH
SU9Db25kaXRpb24pPiYmIGNhbGxiYWNrKQordm9pZCBHU29ja2V0TW9uaXRvcjo6c3RhcnQoR1Nv
Y2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBSdW5Mb29wJiBydW5Mb29wLCBG
dW5jdGlvbjxnYm9vbGVhbiAoR0lPQ29uZGl0aW9uKT4mJiBjYWxsYmFjaykKIHsKICAgICBzdG9w
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9nbGliL0dTb2Nr
ZXRNb25pdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvZ2xpYi9HU29ja2V0TW9u
aXRvci5oCmluZGV4IDExZTUyOGE4ZWIxLi5mZjM3YmY5ZTU0NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vSVBDL2dsaWIvR1NvY2tldE1vbml0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9JUEMvZ2xpYi9HU29ja2V0TW9uaXRvci5oCkBAIC00Myw3ICs0Myw3
IEBAIHB1YmxpYzoKICAgICBHU29ja2V0TW9uaXRvcigpID0gZGVmYXVsdDsKICAgICB+R1NvY2tl
dE1vbml0b3IoKTsKIAotICAgIHZvaWQgc3RhcnQoR1NvY2tldCosIEdJT0NvbmRpdGlvbiwgUnVu
TG9vcCYsIHN0ZDo6ZnVuY3Rpb248Z2Jvb2xlYW4gKEdJT0NvbmRpdGlvbik+JiYpOworICAgIHZv
aWQgc3RhcnQoR1NvY2tldCosIEdJT0NvbmRpdGlvbiwgUnVuTG9vcCYsIEZ1bmN0aW9uPGdib29s
ZWFuIChHSU9Db25kaXRpb24pPiYmKTsKICAgICB2b2lkIHN0b3AoKTsKIAogcHJpdmF0ZToKQEAg
LTUxLDcgKzUxLDcgQEAgcHJpdmF0ZToKIAogICAgIEdSZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7
CiAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7Ci0gICAgc3RkOjpmdW5j
dGlvbjxnYm9vbGVhbiAoR0lPQ29uZGl0aW9uKT4gbV9jYWxsYmFjazsKKyAgICBGdW5jdGlvbjxn
Ym9vbGVhbiAoR0lPQ29uZGl0aW9uKT4gbV9jYWxsYmFjazsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL3VuaXgvQ29ubmVj
dGlvblVuaXguY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL3VuaXgvQ29ubmVjdGlv
blVuaXguY3BwCmluZGV4IGZjZDEwNDc5YTVlLi5kNTk5NTVjNThmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcApAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNoYXJl
ZE1lbW9yeS5oIgorI2luY2x1ZGUgIlVuaXhNZXNzYWdlLmgiCiAjaW5jbHVkZSA8c3lzL3NvY2tl
dC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGVycm5vLmg+CkBAIC02MCw4NiAr
NjEsMjIgQEAgbmFtZXNwYWNlIElQQyB7CiBzdGF0aWMgY29uc3Qgc2l6ZV90IG1lc3NhZ2VNYXhT
aXplID0gNDA5NjsKIHN0YXRpYyBjb25zdCBzaXplX3QgYXR0YWNobWVudE1heEFtb3VudCA9IDI1
NTsKIAotZW51bSB7Ci0gICAgTWVzc2FnZUJvZHlJc091dE9mTGluZSA9IDFVIDw8IDMxCi19Owot
Ci1jbGFzcyBNZXNzYWdlSW5mbyB7Ci1wdWJsaWM6Ci0gICAgTWVzc2FnZUluZm8oKSB7IH0KLQot
ICAgIE1lc3NhZ2VJbmZvKHNpemVfdCBib2R5U2l6ZSwgc2l6ZV90IGluaXRpYWxBdHRhY2htZW50
Q291bnQpCi0gICAgICAgIDogbV9ib2R5U2l6ZShib2R5U2l6ZSkKLSAgICAgICAgLCBtX2F0dGFj
aG1lbnRDb3VudChpbml0aWFsQXR0YWNobWVudENvdW50KQotICAgICAgICAsIG1faXNNZXNzYWdl
Qm9keU91dE9mTGluZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRNZXNzYWdl
Qm9keUlzT3V0T2ZMaW5lKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNNZXNzYWdlQm9keUlz
T3V0T2ZMaW5lKCkpOwotCi0gICAgICAgIG1faXNNZXNzYWdlQm9keU91dE9mTGluZSA9IHRydWU7
Ci0gICAgICAgIG1fYXR0YWNobWVudENvdW50Kys7Ci0gICAgfQotCi0gICAgYm9vbCBpc01lc3Nh
Z2VCb2R5SXNPdXRPZkxpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzTWVzc2FnZUJvZHlPdXRPZkxp
bmU7IH0KLQotICAgIHNpemVfdCBib2R5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9keVNpemU7
IH0KLQotICAgIHNpemVfdCBhdHRhY2htZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2F0dGFj
aG1lbnRDb3VudDsgfQotCi1wcml2YXRlOgotICAgIHNpemVfdCBtX2JvZHlTaXplOwotICAgIHNp
emVfdCBtX2F0dGFjaG1lbnRDb3VudDsKLSAgICBib29sIG1faXNNZXNzYWdlQm9keU91dE9mTGlu
ZTsKLX07Ci0KLWNsYXNzIEF0dGFjaG1lbnRJbmZvIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBBdHRhY2htZW50SW5mbygpCi0gICAgICAgIDogbV90eXBlKEF0
dGFjaG1lbnQ6OlVuaW5pdGlhbGl6ZWQpCi0gICAgICAgICwgbV9zaXplKDApCi0gICAgICAgICwg
bV9pc051bGwoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgc2V0VHlwZShBdHRhY2ht
ZW50OjpUeXBlIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQotICAgIEF0dGFjaG1lbnQ6OlR5cGUg
Z2V0VHlwZSgpIHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIHZvaWQgc2V0U2l6ZShzaXplX3Qgc2l6
ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gQXR0YWNobWVudDo6TWFwcGVkTWVt
b3J5VHlwZSk7Ci0gICAgICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgfQotCi0gICAgc2l6ZV90IGdl
dFNpemUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBBdHRhY2htZW50OjpNYXBw
ZWRNZW1vcnlUeXBlKTsKLSAgICAgICAgcmV0dXJuIG1fc2l6ZTsKLSAgICB9Ci0KLSAgICAvLyBU
aGUgYXR0YWNobWVudCBpcyBub3QgbnVsbCB1bmxlc3MgZXhwbGljaXRseSBzZXQuCi0gICAgdm9p
ZCBzZXROdWxsKCkgeyBtX2lzTnVsbCA9IHRydWU7IH0KLSAgICBib29sIGlzTnVsbCgpIHsgcmV0
dXJuIG1faXNOdWxsOyB9Ci0KLXByaXZhdGU6Ci0gICAgQXR0YWNobWVudDo6VHlwZSBtX3R5cGU7
Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICBib29sIG1faXNOdWxsOwotfTsKLQogdm9pZCBDb25u
ZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUoSWRlbnRpZmllciBpZGVudGlmaWVyKQogewogICAg
IG1fc29ja2V0RGVzY3JpcHRvciA9IGlkZW50aWZpZXI7CisjaWYgUExBVEZPUk0oR1RLKQorICAg
IG1fc29ja2V0ID0gYWRvcHRHUmVmKGdfc29ja2V0X25ld19mcm9tX2ZkKG1fc29ja2V0RGVzY3Jp
cHRvciwgbnVsbHB0cikpOworI2VuZGlmCiAgICAgbV9yZWFkQnVmZmVyLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobWVzc2FnZU1heFNpemUpOwogICAgIG1fZmlsZURlc2NyaXB0b3JzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYXR0YWNobWVudE1heEFtb3VudCk7CiB9CiAKIHZvaWQgQ29ubmVjdGlv
bjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIHsKLSAgICAvLyBJbiBHVEsrIHBsYXRmb3JtIHRoZSBz
b2NrZXQgaXMgY2xvc2VkIGJ5IHRoZSB3b3JrIHF1ZXVlLgotI2lmICFQTEFURk9STShHVEspCisj
aWYgUExBVEZPUk0oR1RLKQorICAgIC8vIEluIEdUSysgcGxhdGZvcm0gdGhlIHNvY2tldCBkZXNj
cmlwdG9yIGlzIG93bmVkIGJ5IEdTb2NrZXQuCisgICAgbV9zb2NrZXQgPSBudWxscHRyOworI2Vs
c2UKICAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IC0xKQogICAgICAgICBjbG9zZVdpdGhS
ZXRyeShtX3NvY2tldERlc2NyaXB0b3IpOwogI2VuZGlmCkBAIC0xNDgsNyArODUsOCBAQCB2b2lk
IENvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiAgICAgICAgIHJldHVybjsKIAogI2lm
IFBMQVRGT1JNKEdUSykKLSAgICBtX3NvY2tldE1vbml0b3Iuc3RvcCgpOworICAgIG1fcmVhZFNv
Y2tldE1vbml0b3Iuc3RvcCgpOworICAgIG1fd3JpdGVTb2NrZXRNb25pdG9yLnN0b3AoKTsKICNl
bmRpZgogCiAgICAgbV9zb2NrZXREZXNjcmlwdG9yID0gLTE7CkBAIC0xNzksNyArMTE3LDcgQEAg
Ym9vbCBDb25uZWN0aW9uOjpwcm9jZXNzTWVzc2FnZSgpCiAgICAgICAgIG1lc3NhZ2VEYXRhICs9
IHNpemVvZihBdHRhY2htZW50SW5mbykgKiBhdHRhY2htZW50Q291bnQ7CiAKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhdHRhY2htZW50Q291bnQ7ICsraSkgewotICAgICAgICAgICAg
c3dpdGNoIChhdHRhY2htZW50SW5mb1tpXS5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoYXR0YWNobWVudEluZm9baV0udHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEF0dGFjaG1l
bnQ6Ok1hcHBlZE1lbW9yeVR5cGU6CiAgICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnQ6OlNvY2tl
dFR5cGU6CiAgICAgICAgICAgICAgICAgaWYgKCFhdHRhY2htZW50SW5mb1tpXS5pc051bGwoKSkK
QEAgLTIwMSwxMSArMTM5LDExIEBAIGJvb2wgQ29ubmVjdGlvbjo6cHJvY2Vzc01lc3NhZ2UoKQog
ICAgIHNpemVfdCBmZEluZGV4ID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF0dGFj
aG1lbnRDb3VudDsgKytpKSB7CiAgICAgICAgIGludCBmZCA9IC0xOwotICAgICAgICBzd2l0Y2gg
KGF0dGFjaG1lbnRJbmZvW2ldLmdldFR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKGF0dGFjaG1l
bnRJbmZvW2ldLnR5cGUoKSkgewogICAgICAgICBjYXNlIEF0dGFjaG1lbnQ6Ok1hcHBlZE1lbW9y
eVR5cGU6CiAgICAgICAgICAgICBpZiAoIWF0dGFjaG1lbnRJbmZvW2ldLmlzTnVsbCgpKQogICAg
ICAgICAgICAgICAgIGZkID0gbV9maWxlRGVzY3JpcHRvcnNbZmRJbmRleCsrXTsKLSAgICAgICAg
ICAgIGF0dGFjaG1lbnRzW2F0dGFjaG1lbnRDb3VudCAtIGkgLSAxXSA9IEF0dGFjaG1lbnQoZmQs
IGF0dGFjaG1lbnRJbmZvW2ldLmdldFNpemUoKSk7CisgICAgICAgICAgICBhdHRhY2htZW50c1th
dHRhY2htZW50Q291bnQgLSBpIC0gMV0gPSBBdHRhY2htZW50KGZkLCBhdHRhY2htZW50SW5mb1tp
XS5zaXplKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXR0YWNobWVudDo6
U29ja2V0VHlwZToKICAgICAgICAgICAgIGlmICghYXR0YWNobWVudEluZm9baV0uaXNOdWxsKCkp
CkBAIC0yMjgsNyArMTY2LDcgQEAgYm9vbCBDb25uZWN0aW9uOjpwcm9jZXNzTWVzc2FnZSgpCiAg
ICAgICAgIH0KIAogICAgICAgICBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsK
LSAgICAgICAgaGFuZGxlLmFkb3B0QXR0YWNobWVudChJUEM6OkF0dGFjaG1lbnQobV9maWxlRGVz
Y3JpcHRvcnNbYXR0YWNobWVudEZpbGVEZXNjcmlwdG9yQ291bnQgLSAxXSwgYXR0YWNobWVudElu
Zm9bYXR0YWNobWVudENvdW50XS5nZXRTaXplKCkpKTsKKyAgICAgICAgaGFuZGxlLmFkb3B0QXR0
YWNobWVudChJUEM6OkF0dGFjaG1lbnQobV9maWxlRGVzY3JpcHRvcnNbYXR0YWNobWVudEZpbGVE
ZXNjcmlwdG9yQ291bnQgLSAxXSwgYXR0YWNobWVudEluZm9bYXR0YWNobWVudENvdW50XS5zaXpl
KCkpKTsKIAogICAgICAgICBvb2xNZXNzYWdlQm9keSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5Ojpt
YXAoaGFuZGxlLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwog
ICAgICAgICBpZiAoIW9vbE1lc3NhZ2VCb2R5KSB7CkBAIC0zNjUsOCArMzAzLDcgQEAgYm9vbCBD
b25uZWN0aW9uOjpvcGVuKCkKICAgICBSZWZQdHI8Q29ubmVjdGlvbj4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKICAgICBtX2lzQ29ubmVjdGVkID0gdHJ1ZTsKICNpZiBQTEFURk9STShHVEspCi0gICAg
R1JlZlB0cjxHU29ja2V0PiBzb2NrZXQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfbmV3X2Zyb21fZmQo
bV9zb2NrZXREZXNjcmlwdG9yLCBudWxscHRyKSk7Ci0gICAgbV9zb2NrZXRNb25pdG9yLnN0YXJ0
KHNvY2tldC5nZXQoKSwgR19JT19JTiwgbV9jb25uZWN0aW9uUXVldWUtPnJ1bkxvb3AoKSwgW3By
b3RlY3RlZFRoaXNdIChHSU9Db25kaXRpb24gY29uZGl0aW9uKSAtPiBnYm9vbGVhbiB7CisgICAg
bV9yZWFkU29ja2V0TW9uaXRvci5zdGFydChtX3NvY2tldC5nZXQoKSwgR19JT19JTiwgbV9jb25u
ZWN0aW9uUXVldWUtPnJ1bkxvb3AoKSwgW3Byb3RlY3RlZFRoaXNdIChHSU9Db25kaXRpb24gY29u
ZGl0aW9uKSAtPiBnYm9vbGVhbiB7CiAgICAgICAgIGlmIChjb25kaXRpb24gJiBHX0lPX0hVUCB8
fCBjb25kaXRpb24gJiBHX0lPX0VSUiB8fCBjb25kaXRpb24gJiBHX0lPX05WQUwpIHsKICAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPmNvbm5lY3Rpb25EaWRDbG9zZSgpOwogICAgICAgICAgICAg
cmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKQEAgLTM5MiwyMiArMzI5LDIxIEBAIGJvb2wgQ29ubmVj
dGlvbjo6b3BlbigpCiAKIGJvb2wgQ29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdN
ZXNzYWdlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faXNDb25uZWN0ZWQ7CisgICAgcmV0dXJu
ICFtX3BlbmRpbmdPdXRwdXRNZXNzYWdlOwogfQogCiBib29sIENvbm5lY3Rpb246OnNlbmRPdXRn
b2luZ01lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+IGVuY29kZXIpCiB7CiAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKE1lc3NhZ2VJbmZvKSArIGF0dGFjaG1lbnRNYXhBbW91bnQgKiBz
aXplb2Yoc2l6ZV90KSA8PSBtZXNzYWdlTWF4U2l6ZSwgQXR0YWNobWVudHNGaXRUb01lc3NhZ2VJ
bmxpbmUpOwogCi0gICAgVmVjdG9yPEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRzID0gZW5jb2Rlci0+
cmVsZWFzZUF0dGFjaG1lbnRzKCk7Ci0gICAgaWYgKGF0dGFjaG1lbnRzLnNpemUoKSA+IChhdHRh
Y2htZW50TWF4QW1vdW50IC0gMSkpIHsKKyAgICBVbml4TWVzc2FnZSBvdXRwdXRNZXNzYWdlKGVu
Y29kZXIuZ2V0KCkpOworICAgIGlmIChvdXRwdXRNZXNzYWdlLmF0dGFjaG1lbnRzKCkuc2l6ZSgp
ID4gKGF0dGFjaG1lbnRNYXhBbW91bnQgLSAxKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIE1lc3NhZ2VJbmZvIG1l
c3NhZ2VJbmZvKGVuY29kZXItPmJ1ZmZlclNpemUoKSwgYXR0YWNobWVudHMuc2l6ZSgpKTsKLSAg
ICBzaXplX3QgbWVzc2FnZVNpemVXaXRoQm9keUlubGluZSA9IHNpemVvZihtZXNzYWdlSW5mbykg
KyAoYXR0YWNobWVudHMuc2l6ZSgpICogc2l6ZW9mKEF0dGFjaG1lbnRJbmZvKSkgKyBlbmNvZGVy
LT5idWZmZXJTaXplKCk7Ci0gICAgaWYgKG1lc3NhZ2VTaXplV2l0aEJvZHlJbmxpbmUgPiBtZXNz
YWdlTWF4U2l6ZSAmJiBlbmNvZGVyLT5idWZmZXJTaXplKCkpIHsKKyAgICBzaXplX3QgbWVzc2Fn
ZVNpemVXaXRoQm9keUlubGluZSA9IHNpemVvZihNZXNzYWdlSW5mbykgKyAob3V0cHV0TWVzc2Fn
ZS5hdHRhY2htZW50cygpLnNpemUoKSAqIHNpemVvZihBdHRhY2htZW50SW5mbykpICsgb3V0cHV0
TWVzc2FnZS5ib2R5U2l6ZSgpOworICAgIGlmIChtZXNzYWdlU2l6ZVdpdGhCb2R5SW5saW5lID4g
bWVzc2FnZU1heFNpemUgJiYgb3V0cHV0TWVzc2FnZS5ib2R5U2l6ZSgpKSB7CiAgICAgICAgIFJl
ZlB0cjxXZWJLaXQ6OlNoYXJlZE1lbW9yeT4gb29sTWVzc2FnZUJvZHkgPSBXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6YWxsb2NhdGUoZW5jb2Rlci0+YnVmZmVyU2l6ZSgpKTsKICAgICAgICAgaWYgKCFv
b2xNZXNzYWdlQm9keSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQxNiwxMyArMzUy
LDIxIEBAIGJvb2wgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9w
dHI8RW5jb2Rlcj4gZW5jb2RlcikKICAgICAgICAgaWYgKCFvb2xNZXNzYWdlQm9keS0+Y3JlYXRl
SGFuZGxlKGhhbmRsZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBtZXNzYWdlSW5mby5zZXRN
ZXNzYWdlQm9keUlzT3V0T2ZMaW5lKCk7CisgICAgICAgIG91dHB1dE1lc3NhZ2UubWVzc2FnZUlu
Zm8oKS5zZXRNZXNzYWdlQm9keUlzT3V0T2ZMaW5lKCk7CiAKLSAgICAgICAgbWVtY3B5KG9vbE1l
c3NhZ2VCb2R5LT5kYXRhKCksIGVuY29kZXItPmJ1ZmZlcigpLCBlbmNvZGVyLT5idWZmZXJTaXpl
KCkpOworICAgICAgICBtZW1jcHkob29sTWVzc2FnZUJvZHktPmRhdGEoKSwgb3V0cHV0TWVzc2Fn
ZS5ib2R5KCksIG91dHB1dE1lc3NhZ2UuYm9keVNpemUoKSk7CiAKLSAgICAgICAgYXR0YWNobWVu
dHMuYXBwZW5kKGhhbmRsZS5yZWxlYXNlQXR0YWNobWVudCgpKTsKKyAgICAgICAgb3V0cHV0TWVz
c2FnZS5hcHBlbmRBdHRhY2htZW50KGhhbmRsZS5yZWxlYXNlQXR0YWNobWVudCgpKTsKICAgICB9
CiAKKyAgICByZXR1cm4gc2VuZE91dHB1dE1lc3NhZ2Uob3V0cHV0TWVzc2FnZSk7Cit9CisKK2Jv
b2wgQ29ubmVjdGlvbjo6c2VuZE91dHB1dE1lc3NhZ2UoVW5peE1lc3NhZ2UmIG91dHB1dE1lc3Nh
Z2UpCit7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdPdXRwdXRNZXNzYWdlKTsKKworICAgIGF1dG8m
IG1lc3NhZ2VJbmZvID0gb3V0cHV0TWVzc2FnZS5tZXNzYWdlSW5mbygpOwogICAgIHN0cnVjdCBt
c2doZHIgbWVzc2FnZTsKICAgICBtZW1zZXQoJm1lc3NhZ2UsIDAsIHNpemVvZihtZXNzYWdlKSk7
CiAKQEAgLTQzOCw2ICszODIsNyBAQCBib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3Nh
Z2Uoc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+IGVuY29kZXIpCiAgICAgc3RkOjp1bmlxdWVfcHRy
PEF0dGFjaG1lbnRJbmZvW10+IGF0dGFjaG1lbnRJbmZvOwogICAgIE1hbGxvY1B0cjxjaGFyPiBh
dHRhY2htZW50RkRCdWZmZXI7CiAKKyAgICBhdXRvJiBhdHRhY2htZW50cyA9IG91dHB1dE1lc3Nh
Z2UuYXR0YWNobWVudHMoKTsKICAgICBpZiAoIWF0dGFjaG1lbnRzLmlzRW1wdHkoKSkgewogICAg
ICAgICBpbnQqIGZkUHRyID0gMDsKIApAQCAtNDg4LDkgKzQzMyw5IEBAIGJvb2wgQ29ubmVjdGlv
bjo6c2VuZE91dGdvaW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4gZW5jb2RlcikK
ICAgICAgICAgKytpb3ZMZW5ndGg7CiAgICAgfQogCi0gICAgaWYgKCFtZXNzYWdlSW5mby5pc01l
c3NhZ2VCb2R5SXNPdXRPZkxpbmUoKSAmJiBlbmNvZGVyLT5idWZmZXJTaXplKCkpIHsKLSAgICAg
ICAgaW92W2lvdkxlbmd0aF0uaW92X2Jhc2UgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihlbmNv
ZGVyLT5idWZmZXIoKSk7Ci0gICAgICAgIGlvdltpb3ZMZW5ndGhdLmlvdl9sZW4gPSBlbmNvZGVy
LT5idWZmZXJTaXplKCk7CisgICAgaWYgKCFtZXNzYWdlSW5mby5pc01lc3NhZ2VCb2R5SXNPdXRP
ZkxpbmUoKSAmJiBvdXRwdXRNZXNzYWdlLmJvZHlTaXplKCkpIHsKKyAgICAgICAgaW92W2lvdkxl
bmd0aF0uaW92X2Jhc2UgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihvdXRwdXRNZXNzYWdlLmJv
ZHkoKSk7CisgICAgICAgIGlvdltpb3ZMZW5ndGhdLmlvdl9sZW4gPSBvdXRwdXRNZXNzYWdlLmJv
ZHlTaXplKCk7CiAgICAgICAgICsraW92TGVuZ3RoOwogICAgIH0KIApAQCAtNTAwLDYgKzQ0NSwy
NSBAQCBib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRy
PEVuY29kZXI+IGVuY29kZXIpCiAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVX
T1VMREJMT0NLKSB7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAgICAgbV9wZW5kaW5nT3V0
cHV0TWVzc2FnZSA9IHN0ZDo6bWFrZV91bmlxdWU8VW5peE1lc3NhZ2U+KFdURk1vdmUob3V0cHV0
TWVzc2FnZSkpOworICAgICAgICAgICAgbV93cml0ZVNvY2tldE1vbml0b3Iuc3RhcnQobV9zb2Nr
ZXQuZ2V0KCksIEdfSU9fT1VULCBtX2Nvbm5lY3Rpb25RdWV1ZS0+cnVuTG9vcCgpLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoR0lPQ29uZGl0aW9uIGNvbmRpdGlvbikg
LT4gZ2Jvb2xlYW4geworICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb24gJiBHX0lPX09VVCkg
eworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9wZW5kaW5nT3V0cHV0TWVzc2FnZSk7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHN0b3AgdGhlIG1vbml0b3IgZnJvbSB0aGlz
IGxhbWJkYSwgYmVjYXVzZSBzdG9wIGRlc3Ryb3lzIHRoZSBsYW1iZGEuCisgICAgICAgICAgICAg
ICAgICAgIG1fY29ubmVjdGlvblF1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3dyaXRlU29ja2V0
TW9uaXRvci5zdG9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG1lc3NhZ2UgPSBX
VEZNb3ZlKG1fcGVuZGluZ091dHB1dE1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG1faXNDb25uZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kT3V0
cHV0TWVzc2FnZSgqbWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZE91
dGdvaW5nTWVzc2FnZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBH
X1NPVVJDRV9SRU1PVkU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyNlbHNlCiAgICAgICAgICAgICBzdHJ1Y3QgcG9sbGZkIHBvbGxmZDsKIAogICAgICAgICAg
ICAgcG9sbGZkLmZkID0gbV9zb2NrZXREZXNjcmlwdG9yOwpAQCAtNTA3LDYgKzQ3MSw3IEBAIGJv
b2wgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rl
cj4gZW5jb2RlcikKICAgICAgICAgICAgIHBvbGxmZC5yZXZlbnRzID0gMDsKICAgICAgICAgICAg
IHBvbGwoJnBvbGxmZCwgMSwgLTEpOwogICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChtX2lzQ29ubmVjdGVkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vSVBDL3VuaXgvVW5peE1lc3NhZ2UuaCBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0lQQy91bml4L1VuaXhNZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmI1MjY2NGI5MDA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vSVBDL3VuaXgvVW5peE1lc3NhZ2UuaApAQCAtMCwwICsxLDE0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsMjAxNyBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBNZXNzYWdlSW5mbyB7
CitwdWJsaWM6CisgICAgTWVzc2FnZUluZm8oKSA9IGRlZmF1bHQ7CisKKyAgICBNZXNzYWdlSW5m
byhzaXplX3QgYm9keVNpemUsIHNpemVfdCBpbml0aWFsQXR0YWNobWVudENvdW50KQorICAgICAg
ICA6IG1fYm9keVNpemUoYm9keVNpemUpCisgICAgICAgICwgbV9hdHRhY2htZW50Q291bnQoaW5p
dGlhbEF0dGFjaG1lbnRDb3VudCkKKyAgICAgICAgLCBtX2lzTWVzc2FnZUJvZHlPdXRPZkxpbmUo
ZmFsc2UpCisgICAgeworICAgIH0KKworICAgIHZvaWQgc2V0TWVzc2FnZUJvZHlJc091dE9mTGlu
ZSgpCisgICAgeworICAgICAgICBBU1NFUlQoIWlzTWVzc2FnZUJvZHlJc091dE9mTGluZSgpKTsK
KworICAgICAgICBtX2lzTWVzc2FnZUJvZHlPdXRPZkxpbmUgPSB0cnVlOworICAgICAgICBtX2F0
dGFjaG1lbnRDb3VudCsrOworICAgIH0KKworICAgIGJvb2wgaXNNZXNzYWdlQm9keUlzT3V0T2ZM
aW5lKCkgY29uc3QgeyByZXR1cm4gbV9pc01lc3NhZ2VCb2R5T3V0T2ZMaW5lOyB9CisKKyAgICBz
aXplX3QgYm9keVNpemUoKSBjb25zdCB7IHJldHVybiBtX2JvZHlTaXplOyB9CisKKyAgICBzaXpl
X3QgYXR0YWNobWVudENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9hdHRhY2htZW50Q291bnQ7IH0K
KworcHJpdmF0ZToKKyAgICBzaXplX3QgbV9ib2R5U2l6ZSB7IDAgfTsKKyAgICBzaXplX3QgbV9h
dHRhY2htZW50Q291bnQgeyAwIH07CisgICAgYm9vbCBtX2lzTWVzc2FnZUJvZHlPdXRPZkxpbmUg
eyBmYWxzZSB9OworfTsKKworY2xhc3MgQXR0YWNobWVudEluZm8geworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEF0dGFjaG1lbnRJbmZvKCkgPSBkZWZhdWx0Owor
CisgICAgdm9pZCBzZXRUeXBlKEF0dGFjaG1lbnQ6OlR5cGUgdHlwZSkgeyBtX3R5cGUgPSB0eXBl
OyB9CisgICAgQXR0YWNobWVudDo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisgICAgdm9pZCBzZXRTaXplKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBBdHRhY2htZW50OjpNYXBwZWRNZW1vcnlUeXBlKTsKKyAgICAgICAgbV9zaXplID0g
c2l6ZTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQobV90eXBlID09IEF0dGFjaG1lbnQ6Ok1hcHBlZE1lbW9yeVR5cGUpOworICAgICAgICBy
ZXR1cm4gbV9zaXplOworICAgIH0KKworICAgIC8vIFRoZSBhdHRhY2htZW50IGlzIG5vdCBudWxs
IHVubGVzcyBleHBsaWNpdGx5IHNldC4KKyAgICB2b2lkIHNldE51bGwoKSB7IG1faXNOdWxsID0g
dHJ1ZTsgfQorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9pc051bGw7IH0KKwor
cHJpdmF0ZToKKyAgICBBdHRhY2htZW50OjpUeXBlIG1fdHlwZSB7IEF0dGFjaG1lbnQ6OlVuaW5p
dGlhbGl6ZWQgfTsKKyAgICBzaXplX3QgbV9zaXplIHsgMCB9OworICAgIGJvb2wgbV9pc051bGwg
eyBmYWxzZSB9OworfTsKKworY2xhc3MgVW5peE1lc3NhZ2UgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIFVuaXhNZXNzYWdlKEVuY29kZXIqIGVuY29kZXIpCisg
ICAgICAgIDogbV9hdHRhY2htZW50cyhlbmNvZGVyLT5yZWxlYXNlQXR0YWNobWVudHMoKSkKKyAg
ICAgICAgLCBtX21lc3NhZ2VJbmZvKGVuY29kZXItPmJ1ZmZlclNpemUoKSwgbV9hdHRhY2htZW50
cy5zaXplKCkpCisgICAgICAgICwgbV9ib2R5KGVuY29kZXItPmJ1ZmZlcigpKQorICAgIHsKKyAg
ICB9CisKKyAgICBVbml4TWVzc2FnZShVbml4TWVzc2FnZSYmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgbV9hdHRhY2htZW50cyA9IFdURk1vdmUob3RoZXIubV9hdHRhY2htZW50cyk7CisgICAgICAg
IG1fbWVzc2FnZUluZm8gPSBXVEZNb3ZlKG90aGVyLm1fbWVzc2FnZUluZm8pOworICAgICAgICBp
ZiAob3RoZXIubV9ib2R5T3duZWQpIHsKKyAgICAgICAgICAgIHN0ZDo6c3dhcChtX2JvZHksIG90
aGVyLm1fYm9keSk7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV9ib2R5T3duZWQsIG90aGVyLm1f
Ym9keU93bmVkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fYm9keSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9jKG1fbWVzc2FnZUluZm8uYm9keVNpemUoKSkpOwor
ICAgICAgICAgICAgbWVtY3B5KG1fYm9keSwgb3RoZXIubV9ib2R5LCBtX21lc3NhZ2VJbmZvLmJv
ZHlTaXplKCkpOworICAgICAgICAgICAgbV9ib2R5T3duZWQgPSB0cnVlOworICAgICAgICAgICAg
b3RoZXIubV9ib2R5ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG90aGVyLm1fYm9keU93bmVkID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+VW5peE1lc3NhZ2UoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fYm9keU93bmVkKQorICAgICAgICAgICAgZmFzdEZyZWUobV9ib2R5KTsKKyAg
ICB9CisKKyAgICBjb25zdCBWZWN0b3I8QXR0YWNobWVudD4mIGF0dGFjaG1lbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRhY2htZW50czsgfQorICAgIE1lc3NhZ2VJbmZvJiBtZXNzYWdlSW5mbygp
IHsgcmV0dXJuIG1fbWVzc2FnZUluZm87IH0KKworICAgIHVpbnQ4X3QqIGJvZHkoKSBjb25zdCB7
IHJldHVybiBtX2JvZHk7IH0KKyAgICBzaXplX3QgYm9keVNpemUoKSBjb25zdCAgeyByZXR1cm4g
bV9tZXNzYWdlSW5mby5ib2R5U2l6ZSgpOyB9CisKKyAgICB2b2lkIGFwcGVuZEF0dGFjaG1lbnQo
QXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCisgICAgeworICAgICAgICBtX2F0dGFjaG1lbnRzLmFw
cGVuZChXVEZNb3ZlKGF0dGFjaG1lbnQpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9y
PEF0dGFjaG1lbnQ+IG1fYXR0YWNobWVudHM7CisgICAgTWVzc2FnZUluZm8gbV9tZXNzYWdlSW5m
bzsKKyAgICB1aW50OF90KiBtX2JvZHkgeyBudWxscHRyIH07CisgICAgYm9vbCBtX2JvZHlPd25l
ZCB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsu
Y21ha2UKaW5kZXggODhkNWVhZTQ2NzMuLmU2ZjBmYTZjZmY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdU
Sy5jbWFrZQpAQCAtODY1LDYgKzg2NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9E
SVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9zb3VwIgogICAg
ICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy91bml4IgogICAgICIke1dFQktJVDJfRElS
fS9QbGF0Zm9ybS9JUEMvZ2xpYiIKKyAgICAiJHtXRUJLSVQyX0RJUn0vUGxhdGZvcm0vSVBDL3Vu
aXgiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9BUEkvYy9ndGsiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzIgogICAgICIke1dFQktJVDJfRElSfS9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IiCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302650</attachid>
            <date>2017-02-23 23:49:44 -0800</date>
            <delta_ts>2017-02-26 23:22:06 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-send-poll.diff</filename>
            <type>text/plain</type>
            <size>23289</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBkY2I4YjQ2NzliYy4uMTE2NTBjMDk5Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAxNy0wMi0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gSGFuZ3Mgd2hlbiBzaG93aW5nIEdvb2dsZSBzZWFy
Y2ggcmVzdWx0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY4Njk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZSgpIGNhbiBwb2xsIGZvcmV2ZXIgaWYg
c2VuZG1zZyBmYWlscyB3aXRoIEVBR0FJTiBvciBFV09VTERCTE9DSy4gRm9yIGV4YW1wbGUgaWYK
KyAgICAgICAgc29ja2V0IHJlYWQgYnVmZmVycyBhcmUgZnVsbCwgcG9sbCB3aWxsIGJlIGJsb2Nr
ZWQgdW50aWwgd2UgcmVhZCB0aGUgcGVuZGluZyBkYXRhLCBidXQgd2UgY2FuJ3QgcmVhZCBiZWNh
dXNlCisgICAgICAgIHRoZSB0aHJlYWQgaXMgYmxvY2tlZCBpbiB0aGUgcG9sbC4gSW4gY2FzZSBv
ZiBFQUdBSU4vRVdPVUxEQkxPQ0sgd2Ugc2hvdWxkIHBvbGwgdXNpbmcgdGhlIHJ1biBsb29wLCB0
byBhbGxvdworICAgICAgICByZWFkcyB0byBoYXBwZW4gaW4gdGhyZWFkIHdoaWxlIHdlIHdhaXQg
Zm9yIHRoZSBzb2NrZXQgdG8gYmUgd3JpdGFibGUgYWdhaW4uIEluIHRoZSBHVEsrIHBvcnQgd2Ug
dXNlCisgICAgICAgIEdTb2NrZXRNb25pdG9yIHRvIHBvbGwgc29ja2V0IGZpbGUgZGVzY3JpcHRv
ciB3aXRob3V0IGJsb2NraW5nLCB1c2luZyB0aGUgcnVuIGxvb3AuIFRoaXMgcGF0Y2ggcmVuYW1l
cyB0aGUKKyAgICAgICAgc29ja2V0IG1vbml0b3IgYXMgcmVhZFNvY2tldE1vbml0b3IgYW5kIGFk
ZHMgYW5vdGhlciBvbmUgZm9yIHBvbGxpbmcgb3V0cHV0LiBXaGVuIHNlbmRtc2cgZmFpbHMgd2l0
aAorICAgICAgICBFQUdBSU4vRVdPVUxEQkxPQ0ssIHRoZSBwZW5kaW5nIG1lc3NhZ2UgaXMgc2F2
ZWQgYW5kIHRoZSB3cml0ZSBtb25pdG9yIHN0YXJ0cyBwb2xsaW5nLiBPbmNlIHRoZSBzb2NrZXQg
aXMKKyAgICAgICAgd3JpdGFibGUgYWdhaW4gd2Ugc2VuZCB0aGUgcGVuZGluZyBtZXNzYWdlLiBI
ZWxwZXIgY2xhc3MgTWVzc2FnZUluZm8gYW5kIGEgbmV3IG9uZSBVbml4TWVzc2FnZSBoYXZlIGJl
ZW4gbW92ZWQKKyAgICAgICAgdG8gaXRzIG93biBoZWFkZXIgZmlsZSB0byBiZSBhYmxlIHRvIHVz
ZSBzdGQ6OnVuaXF1ZV9wdHIgbWVtYmVyIHRvIHNhdmUgdGhlIHBlbmRpbmcgbWVzc2FnZS4KKwor
ICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcDogSW5jbHVkZSBVbml4TWVzc2Fn
ZS5oIGFzIHJlcXVpcmVkIGJ5IHN0ZDo6dW5pcXVlX3B0ci4KKyAgICAgICAgKiBQbGF0Zm9ybS9J
UEMvQ29ubmVjdGlvbi5oOiBBZGQgd3JpdGUgc29ja2V0IG1vbml0b3IgYW5kIGFsc28ga2VlcCB0
aGUgR1NvY2tldCBhcyBhIG1lbWJlciB0byByZXVzZSBpdC4KKyAgICAgICAgKiBQbGF0Zm9ybS9J
UEMvZ2xpYi9HU29ja2V0TW9uaXRvci5jcHA6IFVzZSBGdW5jdGlvbiBpbnN0ZWFkIG9mIHN0ZDo6
ZnVuY3Rpb24uCisgICAgICAgIChJUEM6OkdTb2NrZXRNb25pdG9yOjpzdGFydCk6CisgICAgICAg
ICogUGxhdGZvcm0vSVBDL2dsaWIvR1NvY2tldE1vbml0b3IuaDoKKyAgICAgICAgKiBQbGF0Zm9y
bS9JUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHA6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6IEluaXRpYWxpemUgdGhlIEdTb2NrZXQgaGVyZSBzaW5jZSB3
ZSByZWx5IG9uIGl0IHRvIHRha2UgdGhlIG93bmVyc2hpcCBvZgorICAgICAgICB0aGUgZGVzY3Jp
cHRvci4gV2Ugd2VyZSBsZWFraW5nIGl0IGlmIHRoZSBjb25uZWN0aW9uIHdhcyBpbnZhbGlkYXRl
ZCB3aXRob3V0IGJlaW5nIG9wZW5lZC4KKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6cGxhdGZv
cm1JbnZhbGlkYXRlKTogRGVzdHJveSB0aGUgR1NvY2tldCBldmVuIHdoZW4gbm90IGNvbm5lY3Rl
ZC4gQWxzbyBzdG9wIHRoZSB3cml0ZSBtb25pdG9yLgorICAgICAgICAoSVBDOjpDb25uZWN0aW9u
Ojpwcm9jZXNzTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246Om9wZW4pOgorICAg
ICAgICAoSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKTog
UmV0dXJuIGZhbHNlIGlmIHdlIGhhdmUgYSBwZW5kaW5nIG1lc3NhZ2UgdG8gZW5zdXJlCisgICAg
ICAgIENvbm5lY3Rpb24gZG9lc24ndCB0cnkgdG8gc2VuZCBtb3JlIG1lc3NhZ2VzIHVudGlsIHRo
ZSBwZW5kaW5nIG1lc3NhZ2UgaXMgZGlzcGF0Y2hlZC4gV2UgZG9uJ3QgbmVlZCB0byBjaGVjawor
ICAgICAgICBtX2lzQ29ubmVjdGVkIGJlY2F1c2UgdGhlIGNhbGxlciBhbHJlYWR5IGNoZWNrcyB0
aGF0LgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKTogU3Bs
aXQgaXQgaW4gdHdvLiBUaGlzIGNyZWF0ZXMgYW5kIHByZXBhcmVzIGEgVW5peE1lc3NhZ2UgYW5k
IHRoZW4gY2FsbHMKKyAgICAgICAgc2VuZE91dHB1dE1lc3NhZ2UoKSB0byBkbyB0aGUgcmVzdC4K
KyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6c2VuZE91dHB1dE1lc3NhZ2UpOiBTZW5kIHRoZSBt
ZXNzYWdlLCBvciBzYXZlIGl0IGlmIHNlbmRtc2cgZmFpbHMgd2l0aCBFQUdBSU4gb3IgRVdPVUxE
QkxPQ0sKKyAgICAgICAgdG8gYmUgc2VudCBsYXRlciB3aGVuIHRoZSBzb2NrZXQgaXMgd3JpdGFi
bGUuCisgICAgICAgICogUGxhdGZvcm0vSVBDL3VuaXgvVW5peE1lc3NhZ2UuaDogQWRkZWQuCisg
ICAgICAgIChJUEM6Ok1lc3NhZ2VJbmZvOjpNZXNzYWdlSW5mbyk6CisgICAgICAgIChJUEM6Ok1l
c3NhZ2VJbmZvOjpzZXRNZXNzYWdlQm9keUlzT3V0T2ZMaW5lKToKKyAgICAgICAgKElQQzo6TWVz
c2FnZUluZm86OmlzTWVzc2FnZUJvZHlJc091dE9mTGluZSk6CisgICAgICAgIChJUEM6Ok1lc3Nh
Z2VJbmZvOjpib2R5U2l6ZSk6CisgICAgICAgIChJUEM6Ok1lc3NhZ2VJbmZvOjphdHRhY2htZW50
Q291bnQpOgorICAgICAgICAoSVBDOjpVbml4TWVzc2FnZTo6VW5peE1lc3NhZ2UpOgorICAgICAg
ICAoSVBDOjpVbml4TWVzc2FnZTo6flVuaXhNZXNzYWdlKToKKyAgICAgICAgKElQQzo6VW5peE1l
c3NhZ2U6OmF0dGFjaG1lbnRzKToKKyAgICAgICAgKElQQzo6VW5peE1lc3NhZ2U6Om1lc3NhZ2VJ
bmZvKToKKyAgICAgICAgKElQQzo6VW5peE1lc3NhZ2U6OmJvZHkpOgorICAgICAgICAoSVBDOjpV
bml4TWVzc2FnZTo6Ym9keVNpemUpOgorICAgICAgICAoSVBDOjpVbml4TWVzc2FnZTo6YXBwZW5k
QXR0YWNobWVudCk6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisKIDIwMTctMDItMjMg
IEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBbUmVzb3Vy
Y2UgVGltaW5nXSBBZGQgRXhwZXJpbWVudGFsIEZlYXR1cmUgRmxhZwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwCmluZGV4IGRhYTY1MTBmYjkyLi5iYWY1MzA2NmJl
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcApAQCAtMzks
NiArMzksMTAgQEAKICNpbmNsdWRlICJNYWNoTWVzc2FnZS5oIgogI2VuZGlmCiAKKyNpZiBVU0Uo
VU5JWF9ET01BSU5fU09DS0VUUykKKyNpbmNsdWRlICJVbml4TWVzc2FnZS5oIgorI2VuZGlmCisK
IG5hbWVzcGFjZSBJUEMgewogCiBzdHJ1Y3QgQ29ubmVjdGlvbjo6UmVwbHlIYW5kbGVyIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCmluZGV4IDg3YTNkOTEwOGI3Li5h
NWE4YWQ3YjRhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0Nvbm5l
Y3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCkBA
IC03OSw2ICs3OSw3IEBAIGVudW0gY2xhc3MgV2FpdEZvck9wdGlvbiB7CiB3aGlsZSAoMCkKIAog
Y2xhc3MgTWFjaE1lc3NhZ2U7CitjbGFzcyBVbml4TWVzc2FnZTsKIAogY2xhc3MgQ29ubmVjdGlv
biA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDb25uZWN0aW9uPiB7CiBwdWJsaWM6CkBA
IC0zMDgsMTIgKzMwOSwxNiBAQCBwcml2YXRlOgogICAgIC8vIENhbGxlZCBvbiB0aGUgY29ubmVj
dGlvbiBxdWV1ZS4KICAgICB2b2lkIHJlYWR5UmVhZEhhbmRsZXIoKTsKICAgICBib29sIHByb2Nl
c3NNZXNzYWdlKCk7CisgICAgYm9vbCBzZW5kT3V0cHV0TWVzc2FnZShVbml4TWVzc2FnZSYpOwog
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcmVhZEJ1ZmZlcjsKICAgICBWZWN0b3I8aW50PiBtX2Zp
bGVEZXNjcmlwdG9yczsKICAgICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxVbml4TWVzc2FnZT4gbV9wZW5kaW5nT3V0cHV0TWVzc2FnZTsKICNpZiBQTEFURk9S
TShHVEspCi0gICAgR1NvY2tldE1vbml0b3IgbV9zb2NrZXRNb25pdG9yOworICAgIEdSZWZQdHI8
R1NvY2tldD4gbV9zb2NrZXQ7CisgICAgR1NvY2tldE1vbml0b3IgbV9yZWFkU29ja2V0TW9uaXRv
cjsKKyAgICBHU29ja2V0TW9uaXRvciBtX3dyaXRlU29ja2V0TW9uaXRvcjsKICNlbmRpZgogI2Vs
aWYgT1MoREFSV0lOKQogICAgIC8vIENhbGxlZCBvbiB0aGUgY29ubmVjdGlvbiBxdWV1ZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9nbGliL0dTb2NrZXRNb25pdG9y
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9nbGliL0dTb2NrZXRNb25pdG9yLmNw
cAppbmRleCAwZmFmMjY2Y2NiZi4uMTQzMjliOTM4OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0lQQy9nbGliL0dTb2NrZXRNb25pdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9JUEMvZ2xpYi9HU29ja2V0TW9uaXRvci5jcHAKQEAgLTQyLDcgKzQyLDcg
QEAgZ2Jvb2xlYW4gR1NvY2tldE1vbml0b3I6OnNvY2tldFNvdXJjZUNhbGxiYWNrKEdTb2NrZXQq
LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAogICAgIHJldHVybiBtb25pdG9yLT5tX2NhbGxiYWNr
KGNvbmRpdGlvbik7CiB9CiAKLXZvaWQgR1NvY2tldE1vbml0b3I6OnN0YXJ0KEdTb2NrZXQqIHNv
Y2tldCwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwgUnVuTG9vcCYgcnVuTG9vcCwgc3RkOjpmdW5j
dGlvbjxnYm9vbGVhbiAoR0lPQ29uZGl0aW9uKT4mJiBjYWxsYmFjaykKK3ZvaWQgR1NvY2tldE1v
bml0b3I6OnN0YXJ0KEdTb2NrZXQqIHNvY2tldCwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwgUnVu
TG9vcCYgcnVuTG9vcCwgRnVuY3Rpb248Z2Jvb2xlYW4gKEdJT0NvbmRpdGlvbik+JiYgY2FsbGJh
Y2spCiB7CiAgICAgc3RvcCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9JUEMvZ2xpYi9HU29ja2V0TW9uaXRvci5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBD
L2dsaWIvR1NvY2tldE1vbml0b3IuaAppbmRleCAxMWU1MjhhOGViMS4uZmYzN2JmOWU1NDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9nbGliL0dTb2NrZXRNb25pdG9y
LmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL2dsaWIvR1NvY2tldE1vbml0b3Iu
aApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgR1NvY2tldE1vbml0b3IoKSA9IGRlZmF1
bHQ7CiAgICAgfkdTb2NrZXRNb25pdG9yKCk7CiAKLSAgICB2b2lkIHN0YXJ0KEdTb2NrZXQqLCBH
SU9Db25kaXRpb24sIFJ1bkxvb3AmLCBzdGQ6OmZ1bmN0aW9uPGdib29sZWFuIChHSU9Db25kaXRp
b24pPiYmKTsKKyAgICB2b2lkIHN0YXJ0KEdTb2NrZXQqLCBHSU9Db25kaXRpb24sIFJ1bkxvb3Am
LCBGdW5jdGlvbjxnYm9vbGVhbiAoR0lPQ29uZGl0aW9uKT4mJik7CiAgICAgdm9pZCBzdG9wKCk7
CiAKIHByaXZhdGU6CkBAIC01MSw3ICs1MSw3IEBAIHByaXZhdGU6CiAKICAgICBHUmVmUHRyPEdT
b3VyY2U+IG1fc291cmNlOwogICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxl
OwotICAgIHN0ZDo6ZnVuY3Rpb248Z2Jvb2xlYW4gKEdJT0NvbmRpdGlvbik+IG1fY2FsbGJhY2s7
CisgICAgRnVuY3Rpb248Z2Jvb2xlYW4gKEdJT0NvbmRpdGlvbik+IG1fY2FsbGJhY2s7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0lQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQ
Qy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAppbmRleCBmY2QxMDQ3OWE1ZS4uMGUwNDIzOGUzN2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy91bml4L0Nvbm5lY3Rpb25V
bml4LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvdW5peC9Db25uZWN0aW9u
VW5peC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIK
ICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJVbml4TWVzc2FnZS5oIgogI2lu
Y2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxlcnJu
by5oPgpAQCAtNjAsNjAgKzYxLDIwIEBAIG5hbWVzcGFjZSBJUEMgewogc3RhdGljIGNvbnN0IHNp
emVfdCBtZXNzYWdlTWF4U2l6ZSA9IDQwOTY7CiBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0dGFjaG1l
bnRNYXhBbW91bnQgPSAyNTU7CiAKLWVudW0gewotICAgIE1lc3NhZ2VCb2R5SXNPdXRPZkxpbmUg
PSAxVSA8PCAzMQotfTsKLQotY2xhc3MgTWVzc2FnZUluZm8gewotcHVibGljOgotICAgIE1lc3Nh
Z2VJbmZvKCkgeyB9Ci0KLSAgICBNZXNzYWdlSW5mbyhzaXplX3QgYm9keVNpemUsIHNpemVfdCBp
bml0aWFsQXR0YWNobWVudENvdW50KQotICAgICAgICA6IG1fYm9keVNpemUoYm9keVNpemUpCi0g
ICAgICAgICwgbV9hdHRhY2htZW50Q291bnQoaW5pdGlhbEF0dGFjaG1lbnRDb3VudCkKLSAgICAg
ICAgLCBtX2lzTWVzc2FnZUJvZHlPdXRPZkxpbmUoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgc2V0TWVzc2FnZUJvZHlJc091dE9mTGluZSgpCi0gICAgewotICAgICAgICBBU1NFUlQo
IWlzTWVzc2FnZUJvZHlJc091dE9mTGluZSgpKTsKLQotICAgICAgICBtX2lzTWVzc2FnZUJvZHlP
dXRPZkxpbmUgPSB0cnVlOwotICAgICAgICBtX2F0dGFjaG1lbnRDb3VudCsrOwotICAgIH0KLQot
ICAgIGJvb2wgaXNNZXNzYWdlQm9keUlzT3V0T2ZMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pc01l
c3NhZ2VCb2R5T3V0T2ZMaW5lOyB9Ci0KLSAgICBzaXplX3QgYm9keVNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2JvZHlTaXplOyB9Ci0KLSAgICBzaXplX3QgYXR0YWNobWVudENvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRhY2htZW50Q291bnQ7IH0KLQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9i
b2R5U2l6ZTsKLSAgICBzaXplX3QgbV9hdHRhY2htZW50Q291bnQ7Ci0gICAgYm9vbCBtX2lzTWVz
c2FnZUJvZHlPdXRPZkxpbmU7Ci19OwotCiBjbGFzcyBBdHRhY2htZW50SW5mbyB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgQXR0YWNobWVudEluZm8oKQotICAg
ICAgICA6IG1fdHlwZShBdHRhY2htZW50OjpVbmluaXRpYWxpemVkKQotICAgICAgICAsIG1fc2l6
ZSgwKQotICAgICAgICAsIG1faXNOdWxsKGZhbHNlKQotICAgIHsKLSAgICB9CisgICAgQXR0YWNo
bWVudEluZm8oKSA9IGRlZmF1bHQ7CiAKICAgICB2b2lkIHNldFR5cGUoQXR0YWNobWVudDo6VHlw
ZSB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KLSAgICBBdHRhY2htZW50OjpUeXBlIGdldFR5cGUo
KSB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBBdHRhY2htZW50OjpUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KICAgICB2b2lkIHNldFNpemUoc2l6ZV90IHNpemUpCiAgICAgewog
ICAgICAgICBBU1NFUlQobV90eXBlID09IEF0dGFjaG1lbnQ6Ok1hcHBlZE1lbW9yeVR5cGUpOwog
ICAgICAgICBtX3NpemUgPSBzaXplOwogICAgIH0KIAotICAgIHNpemVfdCBnZXRTaXplKCkKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEF0
dGFjaG1lbnQ6Ok1hcHBlZE1lbW9yeVR5cGUpOwogICAgICAgICByZXR1cm4gbV9zaXplOwpAQCAt
MTIxLDI1ICs4MiwzMCBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGUgYXR0YWNobWVudCBpcyBub3Qg
bnVsbCB1bmxlc3MgZXhwbGljaXRseSBzZXQuCiAgICAgdm9pZCBzZXROdWxsKCkgeyBtX2lzTnVs
bCA9IHRydWU7IH0KLSAgICBib29sIGlzTnVsbCgpIHsgcmV0dXJuIG1faXNOdWxsOyB9CisgICAg
Ym9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX2lzTnVsbDsgfQogCiBwcml2YXRlOgotICAg
IEF0dGFjaG1lbnQ6OlR5cGUgbV90eXBlOwotICAgIHNpemVfdCBtX3NpemU7Ci0gICAgYm9vbCBt
X2lzTnVsbDsKKyAgICBBdHRhY2htZW50OjpUeXBlIG1fdHlwZSB7IEF0dGFjaG1lbnQ6OlVuaW5p
dGlhbGl6ZWQgfTsKKyAgICBzaXplX3QgbV9zaXplIHsgMCB9OworICAgIGJvb2wgbV9pc051bGwg
eyBmYWxzZSB9OwogfTsKIAogdm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUoSWRl
bnRpZmllciBpZGVudGlmaWVyKQogewogICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGlkZW50aWZp
ZXI7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIG1fc29ja2V0ID0gYWRvcHRHUmVmKGdfc29ja2V0
X25ld19mcm9tX2ZkKG1fc29ja2V0RGVzY3JpcHRvciwgbnVsbHB0cikpOworI2VuZGlmCiAgICAg
bV9yZWFkQnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWVzc2FnZU1heFNpemUpOwogICAg
IG1fZmlsZURlc2NyaXB0b3JzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXR0YWNobWVudE1heEFt
b3VudCk7CiB9CiAKIHZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIHsKLSAg
ICAvLyBJbiBHVEsrIHBsYXRmb3JtIHRoZSBzb2NrZXQgaXMgY2xvc2VkIGJ5IHRoZSB3b3JrIHF1
ZXVlLgotI2lmICFQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0oR1RLKQorICAgIC8vIEluIEdU
SysgcGxhdGZvcm0gdGhlIHNvY2tldCBkZXNjcmlwdG9yIGlzIG93bmVkIGJ5IEdTb2NrZXQuCisg
ICAgbV9zb2NrZXQgPSBudWxscHRyOworI2Vsc2UKICAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9y
ICE9IC0xKQogICAgICAgICBjbG9zZVdpdGhSZXRyeShtX3NvY2tldERlc2NyaXB0b3IpOwogI2Vu
ZGlmCkBAIC0xNDgsNyArMTE0LDggQEAgdm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRh
dGUoKQogICAgICAgICByZXR1cm47CiAKICNpZiBQTEFURk9STShHVEspCi0gICAgbV9zb2NrZXRN
b25pdG9yLnN0b3AoKTsKKyAgICBtX3JlYWRTb2NrZXRNb25pdG9yLnN0b3AoKTsKKyAgICBtX3dy
aXRlU29ja2V0TW9uaXRvci5zdG9wKCk7CiAjZW5kaWYKIAogICAgIG1fc29ja2V0RGVzY3JpcHRv
ciA9IC0xOwpAQCAtMTY1LDcgKzEzMiw3IEBAIGJvb2wgQ29ubmVjdGlvbjo6cHJvY2Vzc01lc3Nh
Z2UoKQogICAgIG1lbWNweSgmbWVzc2FnZUluZm8sIG1lc3NhZ2VEYXRhLCBzaXplb2YobWVzc2Fn
ZUluZm8pKTsKICAgICBtZXNzYWdlRGF0YSArPSBzaXplb2YobWVzc2FnZUluZm8pOwogCi0gICAg
c2l6ZV90IG1lc3NhZ2VMZW5ndGggPSBzaXplb2YoTWVzc2FnZUluZm8pICsgbWVzc2FnZUluZm8u
YXR0YWNobWVudENvdW50KCkgKiBzaXplb2YoQXR0YWNobWVudEluZm8pICsgKG1lc3NhZ2VJbmZv
LmlzTWVzc2FnZUJvZHlJc091dE9mTGluZSgpID8gMCA6IG1lc3NhZ2VJbmZvLmJvZHlTaXplKCkp
OworICAgIHNpemVfdCBtZXNzYWdlTGVuZ3RoID0gc2l6ZW9mKE1lc3NhZ2VJbmZvKSArIG1lc3Nh
Z2VJbmZvLmF0dGFjaG1lbnRDb3VudCgpICogc2l6ZW9mKEF0dGFjaG1lbnRJbmZvKSArIChtZXNz
YWdlSW5mby5pc0JvZHlPdXRPZkxpbmUoKSA/IDAgOiBtZXNzYWdlSW5mby5ib2R5U2l6ZSgpKTsK
ICAgICBpZiAobV9yZWFkQnVmZmVyLnNpemUoKSA8IG1lc3NhZ2VMZW5ndGgpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMTc5LDcgKzE0Niw3IEBAIGJvb2wgQ29ubmVjdGlvbjo6cHJvY2Vz
c01lc3NhZ2UoKQogICAgICAgICBtZXNzYWdlRGF0YSArPSBzaXplb2YoQXR0YWNobWVudEluZm8p
ICogYXR0YWNobWVudENvdW50OwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0
YWNobWVudENvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudEluZm9b
aV0uZ2V0VHlwZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnRJbmZvW2ldLnR5
cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50OjpNYXBwZWRNZW1vcnlUeXBlOgog
ICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50OjpTb2NrZXRUeXBlOgogICAgICAgICAgICAgICAg
IGlmICghYXR0YWNobWVudEluZm9baV0uaXNOdWxsKCkpCkBAIC0xOTEsNyArMTU4LDcgQEAgYm9v
bCBDb25uZWN0aW9uOjpwcm9jZXNzTWVzc2FnZSgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAobWVzc2FnZUluZm8uaXNNZXNzYWdlQm9keUlzT3V0T2ZMaW5lKCkpCisg
ICAgICAgIGlmIChtZXNzYWdlSW5mby5pc0JvZHlPdXRPZkxpbmUoKSkKICAgICAgICAgICAgIGF0
dGFjaG1lbnRDb3VudC0tOwogICAgIH0KIApAQCAtMjAxLDExICsxNjgsMTEgQEAgYm9vbCBDb25u
ZWN0aW9uOjpwcm9jZXNzTWVzc2FnZSgpCiAgICAgc2l6ZV90IGZkSW5kZXggPSAwOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0YWNobWVudENvdW50OyArK2kpIHsKICAgICAgICAgaW50
IGZkID0gLTE7Ci0gICAgICAgIHN3aXRjaCAoYXR0YWNobWVudEluZm9baV0uZ2V0VHlwZSgpKSB7
CisgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudEluZm9baV0udHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQXR0YWNobWVudDo6TWFwcGVkTWVtb3J5VHlwZToKICAgICAgICAgICAgIGlmICghYXR0YWNo
bWVudEluZm9baV0uaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgZmQgPSBtX2ZpbGVEZXNjcmlw
dG9yc1tmZEluZGV4KytdOwotICAgICAgICAgICAgYXR0YWNobWVudHNbYXR0YWNobWVudENvdW50
IC0gaSAtIDFdID0gQXR0YWNobWVudChmZCwgYXR0YWNobWVudEluZm9baV0uZ2V0U2l6ZSgpKTsK
KyAgICAgICAgICAgIGF0dGFjaG1lbnRzW2F0dGFjaG1lbnRDb3VudCAtIGkgLSAxXSA9IEF0dGFj
aG1lbnQoZmQsIGF0dGFjaG1lbnRJbmZvW2ldLnNpemUoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBdHRhY2htZW50OjpTb2NrZXRUeXBlOgogICAgICAgICAgICAgaWYgKCFh
dHRhY2htZW50SW5mb1tpXS5pc051bGwoKSkKQEAgLTIxOSw3ICsxODYsNyBAQCBib29sIENvbm5l
Y3Rpb246OnByb2Nlc3NNZXNzYWdlKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtZXNz
YWdlSW5mby5pc01lc3NhZ2VCb2R5SXNPdXRPZkxpbmUoKSkgeworICAgIGlmIChtZXNzYWdlSW5m
by5pc0JvZHlPdXRPZkxpbmUoKSkgewogICAgICAgICBBU1NFUlQobWVzc2FnZUluZm8uYm9keVNp
emUoKSk7CiAKICAgICAgICAgaWYgKGF0dGFjaG1lbnRJbmZvW2F0dGFjaG1lbnRDb3VudF0uaXNO
dWxsKCkpIHsKQEAgLTIyOCw3ICsxOTUsNyBAQCBib29sIENvbm5lY3Rpb246OnByb2Nlc3NNZXNz
YWdlKCkKICAgICAgICAgfQogCiAgICAgICAgIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUg
aGFuZGxlOwotICAgICAgICBoYW5kbGUuYWRvcHRBdHRhY2htZW50KElQQzo6QXR0YWNobWVudCht
X2ZpbGVEZXNjcmlwdG9yc1thdHRhY2htZW50RmlsZURlc2NyaXB0b3JDb3VudCAtIDFdLCBhdHRh
Y2htZW50SW5mb1thdHRhY2htZW50Q291bnRdLmdldFNpemUoKSkpOworICAgICAgICBoYW5kbGUu
YWRvcHRBdHRhY2htZW50KElQQzo6QXR0YWNobWVudChtX2ZpbGVEZXNjcmlwdG9yc1thdHRhY2ht
ZW50RmlsZURlc2NyaXB0b3JDb3VudCAtIDFdLCBhdHRhY2htZW50SW5mb1thdHRhY2htZW50Q291
bnRdLnNpemUoKSkpOwogCiAgICAgICAgIG9vbE1lc3NhZ2VCb2R5ID0gV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6Om1hcChoYW5kbGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFk
T25seSk7CiAgICAgICAgIGlmICghb29sTWVzc2FnZUJvZHkpIHsKQEAgLTIzNywxMCArMjA0LDEw
IEBAIGJvb2wgQ29ubmVjdGlvbjo6cHJvY2Vzc01lc3NhZ2UoKQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgQVNTRVJUKGF0dGFjaG1lbnRzLnNpemUoKSA9PSAobWVzc2FnZUluZm8uaXNNZXNzYWdl
Qm9keUlzT3V0T2ZMaW5lKCkgPyBtZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKSAtIDEgOiBt
ZXNzYWdlSW5mby5hdHRhY2htZW50Q291bnQoKSkpOworICAgIEFTU0VSVChhdHRhY2htZW50cy5z
aXplKCkgPT0gKG1lc3NhZ2VJbmZvLmlzQm9keU91dE9mTGluZSgpID8gbWVzc2FnZUluZm8uYXR0
YWNobWVudENvdW50KCkgLSAxIDogbWVzc2FnZUluZm8uYXR0YWNobWVudENvdW50KCkpKTsKIAog
ICAgIHVpbnQ4X3QqIG1lc3NhZ2VCb2R5ID0gbWVzc2FnZURhdGE7Ci0gICAgaWYgKG1lc3NhZ2VJ
bmZvLmlzTWVzc2FnZUJvZHlJc091dE9mTGluZSgpKQorICAgIGlmIChtZXNzYWdlSW5mby5pc0Jv
ZHlPdXRPZkxpbmUoKSkKICAgICAgICAgbWVzc2FnZUJvZHkgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihvb2xNZXNzYWdlQm9keS0+ZGF0YSgpKTsKIAogICAgIGF1dG8gZGVjb2RlciA9IHN0
ZDo6bWFrZV91bmlxdWU8RGVjb2Rlcj4obWVzc2FnZUJvZHksIG1lc3NhZ2VJbmZvLmJvZHlTaXpl
KCksIG51bGxwdHIsIFdURk1vdmUoYXR0YWNobWVudHMpKTsKQEAgLTM2NSw4ICszMzIsNyBAQCBi
b29sIENvbm5lY3Rpb246Om9wZW4oKQogICAgIFJlZlB0cjxDb25uZWN0aW9uPiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOwogICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOwogI2lmIFBMQVRGT1JNKEdUSykK
LSAgICBHUmVmUHRyPEdTb2NrZXQ+IHNvY2tldCA9IGFkb3B0R1JlZihnX3NvY2tldF9uZXdfZnJv
bV9mZChtX3NvY2tldERlc2NyaXB0b3IsIG51bGxwdHIpKTsKLSAgICBtX3NvY2tldE1vbml0b3Iu
c3RhcnQoc29ja2V0LmdldCgpLCBHX0lPX0lOLCBtX2Nvbm5lY3Rpb25RdWV1ZS0+cnVuTG9vcCgp
LCBbcHJvdGVjdGVkVGhpc10gKEdJT0NvbmRpdGlvbiBjb25kaXRpb24pIC0+IGdib29sZWFuIHsK
KyAgICBtX3JlYWRTb2NrZXRNb25pdG9yLnN0YXJ0KG1fc29ja2V0LmdldCgpLCBHX0lPX0lOLCBt
X2Nvbm5lY3Rpb25RdWV1ZS0+cnVuTG9vcCgpLCBbcHJvdGVjdGVkVGhpc10gKEdJT0NvbmRpdGlv
biBjb25kaXRpb24pIC0+IGdib29sZWFuIHsKICAgICAgICAgaWYgKGNvbmRpdGlvbiAmIEdfSU9f
SFVQIHx8IGNvbmRpdGlvbiAmIEdfSU9fRVJSIHx8IGNvbmRpdGlvbiAmIEdfSU9fTlZBTCkgewog
ICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+Y29ubmVjdGlvbkRpZENsb3NlKCk7CiAgICAgICAg
ICAgICByZXR1cm4gR19TT1VSQ0VfUkVNT1ZFOwpAQCAtMzkyLDIyICszNTgsMjEgQEAgYm9vbCBD
b25uZWN0aW9uOjpvcGVuKCkKIAogYm9vbCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRn
b2luZ01lc3NhZ2VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pc0Nvbm5lY3RlZDsKKyAgICBy
ZXR1cm4gIW1fcGVuZGluZ091dHB1dE1lc3NhZ2U7CiB9CiAKIGJvb2wgQ29ubmVjdGlvbjo6c2Vu
ZE91dGdvaW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4gZW5jb2RlcikKIHsKICAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoTWVzc2FnZUluZm8pICsgYXR0YWNobWVudE1heEFtb3Vu
dCAqIHNpemVvZihzaXplX3QpIDw9IG1lc3NhZ2VNYXhTaXplLCBBdHRhY2htZW50c0ZpdFRvTWVz
c2FnZUlubGluZSk7CiAKLSAgICBWZWN0b3I8QXR0YWNobWVudD4gYXR0YWNobWVudHMgPSBlbmNv
ZGVyLT5yZWxlYXNlQXR0YWNobWVudHMoKTsKLSAgICBpZiAoYXR0YWNobWVudHMuc2l6ZSgpID4g
KGF0dGFjaG1lbnRNYXhBbW91bnQgLSAxKSkgeworICAgIFVuaXhNZXNzYWdlIG91dHB1dE1lc3Nh
Z2UoZW5jb2Rlci5nZXQoKSk7CisgICAgaWYgKG91dHB1dE1lc3NhZ2UuYXR0YWNobWVudHMoKS5z
aXplKCkgPiAoYXR0YWNobWVudE1heEFtb3VudCAtIDEpKSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgTWVzc2FnZUlu
Zm8gbWVzc2FnZUluZm8oZW5jb2Rlci0+YnVmZmVyU2l6ZSgpLCBhdHRhY2htZW50cy5zaXplKCkp
OwotICAgIHNpemVfdCBtZXNzYWdlU2l6ZVdpdGhCb2R5SW5saW5lID0gc2l6ZW9mKG1lc3NhZ2VJ
bmZvKSArIChhdHRhY2htZW50cy5zaXplKCkgKiBzaXplb2YoQXR0YWNobWVudEluZm8pKSArIGVu
Y29kZXItPmJ1ZmZlclNpemUoKTsKLSAgICBpZiAobWVzc2FnZVNpemVXaXRoQm9keUlubGluZSA+
IG1lc3NhZ2VNYXhTaXplICYmIGVuY29kZXItPmJ1ZmZlclNpemUoKSkgeworICAgIHNpemVfdCBt
ZXNzYWdlU2l6ZVdpdGhCb2R5SW5saW5lID0gc2l6ZW9mKE1lc3NhZ2VJbmZvKSArIChvdXRwdXRN
ZXNzYWdlLmF0dGFjaG1lbnRzKCkuc2l6ZSgpICogc2l6ZW9mKEF0dGFjaG1lbnRJbmZvKSkgKyBv
dXRwdXRNZXNzYWdlLmJvZHlTaXplKCk7CisgICAgaWYgKG1lc3NhZ2VTaXplV2l0aEJvZHlJbmxp
bmUgPiBtZXNzYWdlTWF4U2l6ZSAmJiBvdXRwdXRNZXNzYWdlLmJvZHlTaXplKCkpIHsKICAgICAg
ICAgUmVmUHRyPFdlYktpdDo6U2hhcmVkTWVtb3J5PiBvb2xNZXNzYWdlQm9keSA9IFdlYktpdDo6
U2hhcmVkTWVtb3J5OjphbGxvY2F0ZShlbmNvZGVyLT5idWZmZXJTaXplKCkpOwogICAgICAgICBp
ZiAoIW9vbE1lc3NhZ2VCb2R5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDE2LDEz
ICszODEsMjEgQEAgYm9vbCBDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKHN0ZDo6dW5p
cXVlX3B0cjxFbmNvZGVyPiBlbmNvZGVyKQogICAgICAgICBpZiAoIW9vbE1lc3NhZ2VCb2R5LT5j
cmVhdGVIYW5kbGUoaGFuZGxlLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVh
ZE9ubHkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIG1lc3NhZ2VJbmZv
LnNldE1lc3NhZ2VCb2R5SXNPdXRPZkxpbmUoKTsKKyAgICAgICAgb3V0cHV0TWVzc2FnZS5tZXNz
YWdlSW5mbygpLnNldEJvZHlPdXRPZkxpbmUoKTsKIAotICAgICAgICBtZW1jcHkob29sTWVzc2Fn
ZUJvZHktPmRhdGEoKSwgZW5jb2Rlci0+YnVmZmVyKCksIGVuY29kZXItPmJ1ZmZlclNpemUoKSk7
CisgICAgICAgIG1lbWNweShvb2xNZXNzYWdlQm9keS0+ZGF0YSgpLCBvdXRwdXRNZXNzYWdlLmJv
ZHkoKSwgb3V0cHV0TWVzc2FnZS5ib2R5U2l6ZSgpKTsKIAotICAgICAgICBhdHRhY2htZW50cy5h
cHBlbmQoaGFuZGxlLnJlbGVhc2VBdHRhY2htZW50KCkpOworICAgICAgICBvdXRwdXRNZXNzYWdl
LmFwcGVuZEF0dGFjaG1lbnQoaGFuZGxlLnJlbGVhc2VBdHRhY2htZW50KCkpOwogICAgIH0KIAor
ICAgIHJldHVybiBzZW5kT3V0cHV0TWVzc2FnZShvdXRwdXRNZXNzYWdlKTsKK30KKworYm9vbCBD
b25uZWN0aW9uOjpzZW5kT3V0cHV0TWVzc2FnZShVbml4TWVzc2FnZSYgb3V0cHV0TWVzc2FnZSkK
K3sKKyAgICBBU1NFUlQoIW1fcGVuZGluZ091dHB1dE1lc3NhZ2UpOworCisgICAgYXV0byYgbWVz
c2FnZUluZm8gPSBvdXRwdXRNZXNzYWdlLm1lc3NhZ2VJbmZvKCk7CiAgICAgc3RydWN0IG1zZ2hk
ciBtZXNzYWdlOwogICAgIG1lbXNldCgmbWVzc2FnZSwgMCwgc2l6ZW9mKG1lc3NhZ2UpKTsKIApA
QCAtNDM4LDYgKzQxMSw3IEBAIGJvb2wgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShz
dGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4gZW5jb2RlcikKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXR0
YWNobWVudEluZm9bXT4gYXR0YWNobWVudEluZm87CiAgICAgTWFsbG9jUHRyPGNoYXI+IGF0dGFj
aG1lbnRGREJ1ZmZlcjsKIAorICAgIGF1dG8mIGF0dGFjaG1lbnRzID0gb3V0cHV0TWVzc2FnZS5h
dHRhY2htZW50cygpOwogICAgIGlmICghYXR0YWNobWVudHMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGludCogZmRQdHIgPSAwOwogCkBAIC00ODgsOSArNDYyLDkgQEAgYm9vbCBDb25uZWN0aW9uOjpz
ZW5kT3V0Z29pbmdNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiBlbmNvZGVyKQogICAg
ICAgICArK2lvdkxlbmd0aDsKICAgICB9CiAKLSAgICBpZiAoIW1lc3NhZ2VJbmZvLmlzTWVzc2Fn
ZUJvZHlJc091dE9mTGluZSgpICYmIGVuY29kZXItPmJ1ZmZlclNpemUoKSkgewotICAgICAgICBp
b3ZbaW92TGVuZ3RoXS5pb3ZfYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVuY29kZXIt
PmJ1ZmZlcigpKTsKLSAgICAgICAgaW92W2lvdkxlbmd0aF0uaW92X2xlbiA9IGVuY29kZXItPmJ1
ZmZlclNpemUoKTsKKyAgICBpZiAoIW1lc3NhZ2VJbmZvLmlzQm9keU91dE9mTGluZSgpICYmIG91
dHB1dE1lc3NhZ2UuYm9keVNpemUoKSkgeworICAgICAgICBpb3ZbaW92TGVuZ3RoXS5pb3ZfYmFz
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG91dHB1dE1lc3NhZ2UuYm9keSgpKTsKKyAgICAg
ICAgaW92W2lvdkxlbmd0aF0uaW92X2xlbiA9IG91dHB1dE1lc3NhZ2UuYm9keVNpemUoKTsKICAg
ICAgICAgKytpb3ZMZW5ndGg7CiAgICAgfQogCkBAIC01MDAsNiArNDc0LDI1IEBAIGJvb2wgQ29u
bmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4gZW5j
b2RlcikKICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRVdPVUxEQkxPQ0spIHsK
KyNpZiBQTEFURk9STShHVEspCisgICAgICAgICAgICBtX3BlbmRpbmdPdXRwdXRNZXNzYWdlID0g
c3RkOjptYWtlX3VuaXF1ZTxVbml4TWVzc2FnZT4oV1RGTW92ZShvdXRwdXRNZXNzYWdlKSk7Cisg
ICAgICAgICAgICBtX3dyaXRlU29ja2V0TW9uaXRvci5zdGFydChtX3NvY2tldC5nZXQoKSwgR19J
T19PVVQsIG1fY29ubmVjdGlvblF1ZXVlLT5ydW5Mb29wKCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyldIChHSU9Db25kaXRpb24gY29uZGl0aW9uKSAtPiBnYm9vbGVhbiB7
CisgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAmIEdfSU9fT1VUKSB7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdPdXRwdXRNZXNzYWdlKTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgY2FuJ3Qgc3RvcCB0aGUgbW9uaXRvciBmcm9tIHRoaXMgbGFtYmRhLCBiZWNh
dXNlIHN0b3AgZGVzdHJveXMgdGhlIGxhbWJkYS4KKyAgICAgICAgICAgICAgICAgICAgbV9jb25u
ZWN0aW9uUXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyldIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fd3JpdGVTb2NrZXRNb25pdG9yLnN0b3Ao
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbWVzc2FnZSA9IFdURk1vdmUobV9wZW5k
aW5nT3V0cHV0TWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9pc0Nvbm5l
Y3RlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRPdXRwdXRNZXNzYWdlKCpt
ZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kT3V0Z29pbmdNZXNzYWdl
cygpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIEdfU09VUkNFX1JFTU9W
RTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKICAg
ICAgICAgICAgIHN0cnVjdCBwb2xsZmQgcG9sbGZkOwogCiAgICAgICAgICAgICBwb2xsZmQuZmQg
PSBtX3NvY2tldERlc2NyaXB0b3I7CkBAIC01MDcsNiArNTAwLDcgQEAgYm9vbCBDb25uZWN0aW9u
OjpzZW5kT3V0Z29pbmdNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiBlbmNvZGVyKQog
ICAgICAgICAgICAgcG9sbGZkLnJldmVudHMgPSAwOwogICAgICAgICAgICAgcG9sbCgmcG9sbGZk
LCAxLCAtMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKG1faXNDb25uZWN0ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9JUEMvdW5peC9Vbml4TWVzc2FnZS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBD
L3VuaXgvVW5peE1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uZTk5YTBhNDcxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9JUEMvdW5peC9Vbml4TWVzc2FnZS5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqIENvcHlyaWdodCAoQykgMjAxMSwyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQXR0YWNobWVudC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIE1lc3NhZ2VJbmZvIHsKK3B1YmxpYzoKKyAg
ICBNZXNzYWdlSW5mbygpID0gZGVmYXVsdDsKKworICAgIE1lc3NhZ2VJbmZvKHNpemVfdCBib2R5
U2l6ZSwgc2l6ZV90IGluaXRpYWxBdHRhY2htZW50Q291bnQpCisgICAgICAgIDogbV9ib2R5U2l6
ZShib2R5U2l6ZSkKKyAgICAgICAgLCBtX2F0dGFjaG1lbnRDb3VudChpbml0aWFsQXR0YWNobWVu
dENvdW50KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldEJvZHlPdXRPZkxpbmUoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFpc0JvZHlPdXRPZkxpbmUoKSk7CisKKyAgICAgICAgbV9pc0Jv
ZHlPdXRPZkxpbmUgPSB0cnVlOworICAgICAgICBtX2F0dGFjaG1lbnRDb3VudCsrOworICAgIH0K
KworICAgIGJvb2wgaXNCb2R5T3V0T2ZMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9pc0JvZHlPdXRP
ZkxpbmU7IH0KKyAgICBzaXplX3QgYm9keVNpemUoKSBjb25zdCB7IHJldHVybiBtX2JvZHlTaXpl
OyB9CisgICAgc2l6ZV90IGF0dGFjaG1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0YWNo
bWVudENvdW50OyB9CisKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1fYm9keVNpemUgeyAwIH07Cisg
ICAgc2l6ZV90IG1fYXR0YWNobWVudENvdW50IHsgMCB9OworICAgIGJvb2wgbV9pc0JvZHlPdXRP
ZkxpbmUgeyBmYWxzZSB9OworfTsKKworY2xhc3MgVW5peE1lc3NhZ2UgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFVuaXhNZXNzYWdlKEVuY29kZXIqIGVuY29k
ZXIpCisgICAgICAgIDogbV9hdHRhY2htZW50cyhlbmNvZGVyLT5yZWxlYXNlQXR0YWNobWVudHMo
KSkKKyAgICAgICAgLCBtX21lc3NhZ2VJbmZvKGVuY29kZXItPmJ1ZmZlclNpemUoKSwgbV9hdHRh
Y2htZW50cy5zaXplKCkpCisgICAgICAgICwgbV9ib2R5KGVuY29kZXItPmJ1ZmZlcigpKQorICAg
IHsKKyAgICB9CisKKyAgICBVbml4TWVzc2FnZShVbml4TWVzc2FnZSYmIG90aGVyKQorICAgIHsK
KyAgICAgICAgbV9hdHRhY2htZW50cyA9IFdURk1vdmUob3RoZXIubV9hdHRhY2htZW50cyk7Cisg
ICAgICAgIG1fbWVzc2FnZUluZm8gPSBXVEZNb3ZlKG90aGVyLm1fbWVzc2FnZUluZm8pOworICAg
ICAgICBpZiAob3RoZXIubV9ib2R5T3duZWQpIHsKKyAgICAgICAgICAgIHN0ZDo6c3dhcChtX2Jv
ZHksIG90aGVyLm1fYm9keSk7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV9ib2R5T3duZWQsIG90
aGVyLm1fYm9keU93bmVkKTsKKyAgICAgICAgfSBlbHNlIGlmICghbV9tZXNzYWdlSW5mby5pc0Jv
ZHlPdXRPZkxpbmUoKSkgeworICAgICAgICAgICAgbV9ib2R5ID0gc3RhdGljX2Nhc3Q8dWludDhf
dCo+KGZhc3RNYWxsb2MobV9tZXNzYWdlSW5mby5ib2R5U2l6ZSgpKSk7CisgICAgICAgICAgICBt
ZW1jcHkobV9ib2R5LCBvdGhlci5tX2JvZHksIG1fbWVzc2FnZUluZm8uYm9keVNpemUoKSk7Cisg
ICAgICAgICAgICBtX2JvZHlPd25lZCA9IHRydWU7CisgICAgICAgICAgICBvdGhlci5tX2JvZHkg
PSBudWxscHRyOworICAgICAgICAgICAgb3RoZXIubV9ib2R5T3duZWQgPSBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIH5Vbml4TWVzc2FnZSgpCisgICAgeworICAgICAgICBpZiAobV9i
b2R5T3duZWQpCisgICAgICAgICAgICBmYXN0RnJlZShtX2JvZHkpOworICAgIH0KKworICAgIGNv
bnN0IFZlY3RvcjxBdHRhY2htZW50PiYgYXR0YWNobWVudHMoKSBjb25zdCB7IHJldHVybiBtX2F0
dGFjaG1lbnRzOyB9CisgICAgTWVzc2FnZUluZm8mIG1lc3NhZ2VJbmZvKCkgeyByZXR1cm4gbV9t
ZXNzYWdlSW5mbzsgfQorCisgICAgdWludDhfdCogYm9keSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9k
eTsgfQorICAgIHNpemVfdCBib2R5U2l6ZSgpIGNvbnN0ICB7IHJldHVybiBtX21lc3NhZ2VJbmZv
LmJvZHlTaXplKCk7IH0KKworICAgIHZvaWQgYXBwZW5kQXR0YWNobWVudChBdHRhY2htZW50JiYg
YXR0YWNobWVudCkKKyAgICB7CisgICAgICAgIG1fYXR0YWNobWVudHMuYXBwZW5kKFdURk1vdmUo
YXR0YWNobWVudCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8QXR0YWNobWVudD4g
bV9hdHRhY2htZW50czsKKyAgICBNZXNzYWdlSW5mbyBtX21lc3NhZ2VJbmZvOworICAgIHVpbnQ4
X3QqIG1fYm9keSB7IG51bGxwdHIgfTsKKyAgICBib29sIG1fYm9keU93bmVkIHsgZmFsc2UgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA4
OGQ1ZWFlNDY3My4uZTZmMGZhNmNmZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC04
NjUsNiArODY1LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9E
SVJ9L05ldHdvcmtQcm9jZXNzL3VuaXgiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1BsYXRmb3JtL0lQ
Qy9nbGliIgorICAgICIke1dFQktJVDJfRElSfS9QbGF0Zm9ybS9JUEMvdW5peCIKICAgICAiJHtX
RUJLSVQyX0RJUn0vU2hhcmVkL0FQSS9jL2d0ayIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvciIK
</data>
<flag name="review"
          id="324366"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>