<?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>55606</bug_id>
          
          <creation_ts>2011-03-02 13:07:17 -0800</creation_ts>
          <short_desc>Clean up WebCore tabsToLinks code a little</short_desc>
          <delta_ts>2011-03-02 16:19:25 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>361021</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-02 13:07:17 -0800</bug_when>
    <thetext>It&apos;s really difficult to follow this code. I&apos;m going to make a baby step to its improvement here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361023</commentid>
    <comment_count>1</comment_count>
      <attachid>84453</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-02 13:16:45 -0800</bug_when>
    <thetext>Created attachment 84453
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361085</commentid>
    <comment_count>2</comment_count>
      <attachid>84453</attachid>
    <who name="John Sullivan">sullivan</who>
    <bug_when>2011-03-02 14:41:49 -0800</bug_when>
    <thetext>Comment on attachment 84453
proposed patch

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        (WebCore::eventInvertsTabsToLinksClientCallResult): Merged implementations from plartform

typo, &quot;plartform&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361093</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-02 14:51:45 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/80172&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361137</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-03-02 15:54:32 -0800</bug_when>
    <thetext>This seems to have introduced many assertion failures on the GTK+ debug bots:

warning: Can&apos;t read pathname for load map: Input/output error.
Core was generated by `/home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/Programs/DumpR&apos;.
Program terminated with signal 11, Segmentation fault.
#0  0x00007f8da4ef82b4 in WebCore::EventHandler::tabsToLinks (this=0xb76fb0, event=0x1246350) at ../../Source/WebCore/page/EventHandler.cpp:2750
2750	    ASSERT(!event || event-&gt;keyIdentifier() == &quot;U+0009&quot;);

Thread 2 (Thread 5599):
#0  0x00007f8da08834d9 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#1  0x00007f8da1ea94c2 in g_cond_timed_wait_posix_impl (cond=0x1171d64, entered_mutex=0x189, abs_time=&lt;value optimized out&gt;) at /tmp/buildd/glib2.0-2.27.91/./gthread/gthread-posix.c:242
#2  0x00007f8da19d4d31 in g_async_queue_pop_intern_unlocked (queue=0x117b900, try=0, end_time=0x7f8d98fabbf0) at /tmp/buildd/glib2.0-2.27.91/./glib/gasyncqueue.c:423
#3  0x00007f8da1a29021 in g_thread_pool_wait_for_new_task (data=&lt;value optimized out&gt;) at /tmp/buildd/glib2.0-2.27.91/./glib/gthreadpool.c:274
#4  g_thread_pool_thread_proxy (data=&lt;value optimized out&gt;) at /tmp/buildd/glib2.0-2.27.91/./glib/gthreadpool.c:308
#5  0x00007f8da1a27124 in g_thread_create_proxy (data=0x117b970) at /tmp/buildd/glib2.0-2.27.91/./glib/gthread.c:1897
#6  0x00007f8da087e8ba in start_thread () from /lib/libpthread.so.0
#7  0x00007f8da05e602d in clone () from /lib/libc.so.6
#8  0x0000000000000000 in ?? ()

Thread 1 (Thread 5597):
#0  0x00007f8da4ef82b4 in WebCore::EventHandler::tabsToLinks (this=0xb76fb0, event=0x1246350) at ../../Source/WebCore/page/EventHandler.cpp:2750
#1  0x00007f8da4cc9fb2 in WebCore::HTMLAnchorElement::isKeyboardFocusable (this=0x12196a0, event=0x1246350) at ../../Source/WebCore/html/HTMLAnchorElement.cpp:105
#2  0x00007f8da4efd34f in WebCore::FocusController::findFocusCandidateInContainer (this=0xb27690, container=0x1197000, startingRect=..., direction=WebCore::FocusDirectionDown, event=0x1246350, closest=...) at ../../Source/WebCore/page/FocusController.cpp:491
#3  0x00007f8da4efd5e8 in WebCore::FocusController::advanceFocusDirectionallyInContainer (this=0xb27690, container=0x1197000, startingRect=..., direction=WebCore::FocusDirectionDown, event=0x1246350) at ../../Source/WebCore/page/FocusController.cpp:515
#4  0x00007f8da4efdbb9 in WebCore::FocusController::advanceFocusDirectionally (this=0xb27690, direction=WebCore::FocusDirectionDown, event=0x1246350) at ../../Source/WebCore/page/FocusController.cpp:602
#5  0x00007f8da4efbc77 in WebCore::FocusController::advanceFocus (this=0xb27690, direction=WebCore::FocusDirectionDown, event=0x1246350, initialFocus=false) at ../../Source/WebCore/page/FocusController.cpp:185
#6  0x00007f8da4ef84e3 in WebCore::EventHandler::defaultArrowEventHandler (this=0xb76fb0, focusDirection=WebCore::FocusDirectionDown, event=0x1246350) at ../../Source/WebCore/page/EventHandler.cpp:2813
#7  0x00007f8da4ef701b in WebCore::EventHandler::defaultKeyboardEventHandler (this=0xb76fb0, event=0x1246350) at ../../Source/WebCore/page/EventHandler.cpp:2468
#8  0x00007f8da4b9aeb2 in WebCore::Node::defaultEventHandler (this=0x1201fd0, event=0x1246350) at ../../Source/WebCore/dom/Node.cpp:3007
#9  0x00007f8da4cca6af in WebCore::HTMLAnchorElement::defaultEventHandler (this=0x1201fd0, event=0x1246350) at ../../Source/WebCore/html/HTMLAnchorElement.cpp:172
#10 0x00007f8da4b992c3 in WebCore::Node::dispatchGenericEvent (this=0x1201fd0, prpEvent=...) at ../../Source/WebCore/dom/Node.cpp:2714
#11 0x00007f8da4b98a0e in WebCore::Node::dispatchEvent (this=0x1201fd0, prpEvent=...) at ../../Source/WebCore/dom/Node.cpp:2612
#12 0x00007f8da4b7e009 in WebCore::EventTarget::dispatchEvent (this=0x1201fd0, event=..., ec=@0x7fff6c9d60dc) at ../../Source/WebCore/dom/EventTarget.cpp:297
#13 0x00007f8da4ef6907 in WebCore::EventHandler::keyEvent (this=0xb76fb0, initialKeyEvent=...) at ../../Source/WebCore/page/EventHandler.cpp:2401
#14 0x00007f8da486477f in webkit_web_view_key_press_event (widget=0xb62010, event=0xb1d580) at ../../Source/WebKit/gtk/webkit/webkitwebview.cpp:769
#15 0x00007f8da393cc18 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#16 0x00007f8da22be289 in g_closure_invoke (closure=0xafd2a0, return_value=0x7fff6c9d6410, n_param_values=2, param_values=0x117d750, invocation_hint=0x7fff6c9d63d0) at /tmp/buildd/glib2.0-2.27.91/./gobject/gclosure.c:767
#17 0x00007f8da22d6ff2 in signal_emit_unlocked_R (node=0xafd310, detail=&lt;value optimized out&gt;, instance=&lt;value optimized out&gt;, emission_return=&lt;value optimized out&gt;, instance_and_params=&lt;value optimized out&gt;) at /tmp/buildd/glib2.0-2.27.91/./gobject/gsignal.c:3290
#18 0x00007f8da22d897c in g_signal_emit_valist (instance=0xb62010, signal_id=&lt;value optimized out&gt;, detail=0, var_args=0x7fff6c9d65c0) at /tmp/buildd/glib2.0-2.27.91/./gobject/gsignal.c:2993
#19 0x00007f8da22d9363 in g_signal_emit (instance=0x7fff6c9d50e0, signal_id=0, detail=2693217792) at /tmp/buildd/glib2.0-2.27.91/./gobject/gsignal.c:3040
#20 0x00007f8da3a52f3f in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#21 0x00007f8da3a6341b in gtk_window_propagate_key_event () from /usr/lib/libgtk-x11-2.0.so.0
#22 0x00007f8da3a664ab in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#23 0x00007f8da393cc18 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#24 0x00007f8da22be33e in g_closure_invoke (closure=0xafd2a0, return_value=0x7fff6c9d68e0, n_param_values=2, param_values=0x117d6c0, invocation_hint=0x7fff6c9d68a0) at /tmp/buildd/glib2.0-2.27.91/./gobject/gclosure.c:767
#25 0x00007f8da22d6ff2 in signal_emit_unlocked_R (node=0xafd310, detail=&lt;value optimized out&gt;, instance=&lt;value optimized out&gt;, emission_return=&lt;value optimized out&gt;, instance_and_params=&lt;value optimized out&gt;) at /tmp/buildd/glib2.0-2.27.91/./gobject/gsignal.c:3290
#26 0x00007f8da22d897c in g_signal_emit_valist (instance=0xaf6280, signal_id=&lt;value optimized out&gt;, detail=0, var_args=0x7fff6c9d6a90) at /tmp/buildd/glib2.0-2.27.91/./gobject/gsignal.c:2993
#27 0x00007f8da22d9363 in g_signal_emit (instance=0x7fff6c9d50e0, signal_id=0, detail=2693217792) at /tmp/buildd/glib2.0-2.27.91/./gobject/gsignal.c:3040
#28 0x00007f8da3a52f3f in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#29 0x00007f8da39351d4 in gtk_propagate_event () from /usr/lib/libgtk-x11-2.0.so.0
#30 0x00007f8da39361bb in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0
#31 0x0000000000422881 in dispatchEvent (event=0xb1d580) at ../../Tools/DumpRenderTree/gtk/EventSender.cpp:535
#32 0x0000000000423128 in keyDownCallback (context=0x7f8d533aa168, function=0x7f8d53384850, thisObject=0x7f8d53384620, argumentCount=1, arguments=0x7fff6c9d6d48, exception=0x7fff6c9d6de8) at ../../Tools/DumpRenderTree/gtk/EventSender.cpp:714
#33 0x00007f8da565ecc8 in JSC::JSCallbackFunction::call (exec=0x7f8d533aa168) at ../../Source/JavaScriptCore/API/JSCallbackFunction.cpp:67
#34 0x00007f8da5703959 in JSC::cti_op_call_NotJSFunction (args=0x7fff6c9d6f20) at ../../Source/JavaScriptCore/jit/JITStubs.cpp:2094
#35 0x00007f8da56fe88f in JSC::JITThunks::tryCacheGetByID (callFrame=0x7f8d533aa118, codeBlock=0x7fff6c9d6f20, returnAddress=..., baseValue=..., propertyName=..., slot=..., stubInfo=0xb989e0) at ../../Source/JavaScriptCore/jit/JITStubs.cpp:869
#36 0x00007f8da56d1983 in JSC::JITCode::execute (this=0x11fbd68, registerFile=0xb98948, callFrame=0x7f8d533aa048, globalData=0xb989e0) at ../../Source/JavaScriptCore/jit/JITCode.h:77
#37 0x00007f8da56cea65 in JSC::Interpreter::executeCall (this=0xb98930, callFrame=0x11a7ab8, function=0x7f8d53397350, callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...) at ../../Source/JavaScriptCore/interpreter/Interpreter.cpp:844
#38 0x00007f8da575b8c4 in JSC::call (exec=0x11a7ab8, functionObject=..., callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...) at ../../Source/JavaScriptCore/runtime/CallData.cpp:38
#39 0x00007f8da4954fd7 in WebCore::JSMainThreadExecState::call (exec=0x11a7ab8, functionObject=..., callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...) at ../../Source/WebCore/bindings/js/JSMainThreadExecState.h:48
#40 0x00007f8da498814d in WebCore::JSEventListener::handleEvent (this=0x11f4820, scriptExecutionContext=0x1197068, event=0x12162a0) at ../../Source/WebCore/bindings/js/JSEventListener.cpp:123
#41 0x00007f8da4b7e39d in WebCore::EventTarget::fireEventListeners (this=0xb9c8b0, event=0x12162a0, d=0xb9c980, entry=...) at ../../Source/WebCore/dom/EventTarget.cpp:354
#42 0x00007f8da4b7e22c in WebCore::EventTarget::fireEventListeners (this=0xb9c8b0, event=0x12162a0) at ../../Source/WebCore/dom/EventTarget.cpp:323
#43 0x00007f8da4ee2762 in WebCore::DOMWindow::dispatchEvent (this=0xb9c8b0, prpEvent=..., prpTarget=...) at ../../Source/WebCore/page/DOMWindow.cpp:1585
#44 0x00007f8da4ee2876 in WebCore::DOMWindow::dispatchTimedEvent (this=0xb9c8b0, event=..., target=0x1197000, startTime=0x1172968, endTime=0x1172970) at ../../Source/WebCore/page/DOMWindow.cpp:1597
#45 0x00007f8da4ee2422 in WebCore::DOMWindow::dispatchLoadEvent (this=0xb9c8b0) at ../../Source/WebCore/page/DOMWindow.cpp:1557
#46 0x00007f8da4b35dbe in WebCore::Document::dispatchWindowLoadEvent (this=0x1197000) at ../../Source/WebCore/dom/Document.cpp:3504
#47 0x00007f8da4b3079d in WebCore::Document::implicitClose (this=0x1197000) at ../../Source/WebCore/dom/Document.cpp:2090
#48 0x00007f8da4e5c9a5 in WebCore::FrameLoader::checkCallImplicitClose (this=0xb768a0) at ../../Source/WebCore/loader/FrameLoader.cpp:891
#49 0x00007f8da4e5c778 in WebCore::FrameLoader::checkCompleted (this=0xb768a0) at ../../Source/WebCore/loader/FrameLoader.cpp:839
#50 0x00007f8da4e5daeb in WebCore::FrameLoader::completed (this=0x120f850) at ../../Source/WebCore/loader/FrameLoader.cpp:1202
#51 0x00007f8da4e5c79b in WebCore::FrameLoader::checkCompleted (this=0x120f850) at ../../Source/WebCore/loader/FrameLoader.cpp:843
#52 0x00007f8da4e5c4e7 in WebCore::FrameLoader::finishedParsing (this=0x120f850) at ../../Source/WebCore/loader/FrameLoader.cpp:773
#53 0x00007f8da4b390b2 in WebCore::Document::finishedParsing (this=0x1204ca0) at ../../Source/WebCore/dom/Document.cpp:4270
#54 0x00007f8da4d699ac in WebCore::HTMLTreeBuilder::finished (this=0x11a5700) at ../../Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2804
#55 0x00007f8da4d404cc in WebCore::HTMLDocumentParser::end (this=0x1206100) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:354
#56 0x00007f8da4d405c9 in WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd (this=0x1206100) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:363
#57 0x00007f8da4d3f8f9 in WebCore::HTMLDocumentParser::prepareToStopParsing (this=0x1206100) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:151
#58 0x00007f8da4d4060e in WebCore::HTMLDocumentParser::attemptToEnd (this=0x1206100) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:375
#59 0x00007f8da4d406c7 in WebCore::HTMLDocumentParser::finish (this=0x1206100) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:403
#60 0x00007f8da4b30eae in WebCore::Document::finishParsing (this=0x1204ca0) at ../../Source/WebCore/dom/Document.cpp:2257
#61 0x00007f8da4e56427 in WebCore::DocumentWriter::endIfNotLoadingMainResource (this=0x1218a20) at ../../Source/WebCore/loader/DocumentWriter.cpp:222
#62 0x00007f8da4e5637d in WebCore::DocumentWriter::end (this=0x1218a20) at ../../Source/WebCore/loader/DocumentWriter.cpp:207
#63 0x00007f8da4e4b495 in WebCore::DocumentLoader::finishedLoading (this=0x1218920) at ../../Source/WebCore/loader/DocumentLoader.cpp:284
#64 0x00007f8da4e62a37 in WebCore::FrameLoader::finishedLoading (this=0x120f850) at ../../Source/WebCore/loader/FrameLoader.cpp:2188
#65 0x00007f8da4e936d6 in WebCore::MainResourceLoader::didFinishLoading (this=0x12168f0, finishTime=0) at ../../Source/WebCore/loader/MainResourceLoader.cpp:465
#66 0x00007f8da4e9f89d in WebCore::ResourceLoader::didFinishLoading (this=0x12168f0, finishTime=0) at ../../Source/WebCore/loader/ResourceLoader.cpp:436
#67 0x00007f8da48047b0 in WebCore::readCallback (source=0x118f9e0, asyncResult=0x118f980, data=0x0) at ../../Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:781
#68 0x00007f8da2556f65 in async_ready_callback_wrapper (source_object=0x118f9e0, res=0x118f980, user_data=0x0) at /tmp/buildd/glib2.0-2.27.91/./gio/ginputstream.c:470
#69 0x00007f8da25682bc in complete_in_idle_cb (data=0x118f980) at /tmp/buildd/glib2.0-2.27.91/./gio/gsimpleasyncresult.c:757
#70 0x00007f8da19fd362 in g_main_dispatch (context=0xaf82c0) at /tmp/buildd/glib2.0-2.27.91/./glib/gmain.c:2440
#71 g_main_context_dispatch (context=0xaf82c0) at /tmp/buildd/glib2.0-2.27.91/./glib/gmain.c:3013
#72 0x00007f8da1a01a28 in g_main_context_iterate (context=0xaf82c0, block=&lt;value optimized out&gt;, dispatch=&lt;value optimized out&gt;, self=&lt;value optimized out&gt;) at /tmp/buildd/glib2.0-2.27.91/./glib/gmain.c:3091
#73 0x00007f8da1a01f35 in g_main_loop_run (loop=0x1172dc0) at /tmp/buildd/glib2.0-2.27.91/./glib/gmain.c:3299
#74 0x00007f8da3936657 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#75 0x000000000041e379 in runTest (testPathOrURL=...) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:679
#76 0x000000000041da0b in runTestingServerLoop () at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:489
#77 0x000000000041faf0 in main (argc=2, argv=0x7fff6c9d8958) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:1143</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361156</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-02 16:19:25 -0800</bug_when>
    <thetext>Build fix in &lt;http://trac.webkit.org/changeset/80173&gt;, spatial navigation assertion fix in &lt;http://trac.webkit.org/changeset/80182&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84453</attachid>
            <date>2011-03-02 13:16:45 -0800</date>
            <delta_ts>2011-03-02 14:41:49 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>RenameTabsToLinks.txt</filename>
            <type>text/plain</type>
            <size>12454</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMTYwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDMtMDIgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgV2ViQ29yZSB0YWJzVG9MaW5rcyBjb2RlIGEg
bGl0dGxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NTYwNgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvciwgc28gbm8gdGVzdHMuCisKKyAg
ICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOiAoV2ViQ29yZTo6SFRNTEZv
cm1Db250cm9sRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZSk6CisgICAgICAgIFRoaXMgaXMg
dGhlIG9ubHkgY2FsbGVyIG9mIHRhYnNUb0FsbENvbnRyb2xzKCkuIFJlbmFtZWQgdGhpcyBmdW5j
dGlvbiB0byB0YWJzVG9BbGxGb3JtQ29udHJvbHMoKS4KKworICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aXNLZXlib2FyZE9w
dGlvblRhYik6IE1vdmVkIGZyb20gcGxhdGZvcm0gc3BlY2lmaWMgZmlsZXMuIFRoaXMKKyAgICAg
ICAgZnVuY3Rpb24gY2Fubm90IGJlIGZpbGUgc3RhdGljLCBiZWNhdXNlIEV2ZW50SGFuZGxlck1h
Yy5tbSB1c2VzIGl0LgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRJbnZlcnRzVGFic1RvTGlua3ND
bGllbnRDYWxsUmVzdWx0KTogTWVyZ2VkIGltcGxlbWVudGF0aW9ucyBmcm9tIHBsYXJ0Zm9ybQor
ICAgICAgICBzcGVjaWZpYyBmaWxlcy4gV2UgY2FuIGp1c3QgYXMgd2VsbCBoYXZlICNpZiBoZXJl
LiBSZW5hbWVkIGZvciBjbGFyaXR5LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp0
YWJzVG9MaW5rcyk6IFJld3JvdGUgaW4gYSB3YXkgdGhhdCBtYWtlcyBpdCBjbGVhcmVyIGhvdyAi
aW52ZXJ0IgorICAgICAgICB3b3Jrcy4KKyAgICAgICAgCisgICAgICAgICogcGFnZS9FdmVudEhh
bmRsZXIuaDogV2Ugbm8gbG9uZ2VyIG5lZWQgaW52ZXJ0U2Vuc2VPZlRhYnNUb0xpbmtzKCkgaGVy
ZSwgaXQncyBvbmx5IHVzZWQKKyAgICAgICAgaW4gRXZlbnRIYW5kbGVyLmNwcC4KKworICAgICAg
ICAqIHBhZ2UvYW5kcm9pZC9FdmVudEhhbmRsZXJBbmRyb2lkLmNwcDogKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6dGFic1RvQWxsRm9ybUNvbnRyb2xzKToKKyAgICAgICAgKiBwYWdlL2JyZXcvRXZl
bnRIYW5kbGVyQnJldy5jcHA6IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnRhYnNUb0FsbEZvcm1D
b250cm9scyk6CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5j
cHA6IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnRhYnNUb0FsbEZvcm1Db250cm9scyk6CisgICAg
ICAgICogcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcDogKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6dGFic1RvQWxsRm9ybUNvbnRyb2xzKToKKyAgICAgICAgKiBwYWdlL2d0ay9FdmVudEhhbmRs
ZXJHdGsuY3BwOiAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxGb3JtQ29udHJvbHMp
OgorICAgICAgICAqIHBhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwOiAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxGb3JtQ29udHJvbHMpOgorICAgICAgICAqIHBhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbTogKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dGFic1RvQWxsRm9y
bUNvbnRyb2xzKToKKyAgICAgICAgKiBwYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcDogKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6dGFic1RvQWxsRm9ybUNvbnRyb2xzKToKKyAgICAgICAgKiBwYWdl
L3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwOiAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp0YWJzVG9B
bGxGb3JtQ29udHJvbHMpOgorICAgICAgICAqIHBhZ2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwOiAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxGb3JtQ29udHJvbHMpOgorICAgICAgICBV
cGRhdGluZyBhbGwgcG9ydCBmaWxlcy4KKwogMjAxMS0wMy0wMiAgRGltaXRyaSBHbGF6a292ICA8
ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVwZGF0ZSBsb2NhdGlvbiBvZiBtZWRp
YS1maWxlLmpzLCB3aGljaCB3YXMgbW92ZWQgaW4gcjc5NjMwLgpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3OTkzNykK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1MSw3ICsyNTEsNyBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmlzS2V5Ym9hcmRGCiB7CiAgICAgaWYgKGlzRm9jdXNhYmxlKCkpCiAgICAgICAgIGlmIChkb2N1
bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50KCktPmZyYW1lKCkt
PmV2ZW50SGFuZGxlcigpLT50YWJzVG9BbGxDb250cm9scyhldmVudCk7CisgICAgICAgICAgICBy
ZXR1cm4gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnRhYnNUb0FsbEZvcm1D
b250cm9scyhldmVudCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA3OTkzNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyNywyMyArMjcyNywz
MyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVGV4dElucHV0RXZlbnQoCiAgICAgcmV0dXJu
IGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwogfQogICAgIAotI2lmICFQTEFURk9STShNQUMpICYm
ICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEhBSUtVKSAmJiAhUExBVEZPUk0oRUZMKQotYm9v
bCBFdmVudEhhbmRsZXI6OmludmVydFNlbnNlT2ZUYWJzVG9MaW5rcyhLZXlib2FyZEV2ZW50Kikg
Y29uc3QKK2Jvb2wgRXZlbnRIYW5kbGVyOjppc0tleWJvYXJkT3B0aW9uVGFiKEtleWJvYXJkRXZl
bnQqIGV2ZW50KQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZXZlbnQKKyAgICAg
ICAgJiYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCB8fCBldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQorICAgICAgICAmJiBldmVu
dC0+YWx0S2V5KCkKKyAgICAgICAgJiYgZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDA5
IjsgICAgCiB9CisKK3N0YXRpYyBib29sIGV2ZW50SW52ZXJ0c1RhYnNUb0xpbmtzQ2xpZW50Q2Fs
bFJlc3VsdChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyNpZiBQTEFURk9STShNQUMpIHx8IFBM
QVRGT1JNKFFUKSB8fCBQTEFURk9STShIQUlLVSkgfHwgUExBVEZPUk0oRUZMKQorICAgIHJldHVy
biBFdmVudEhhbmRsZXI6OmlzS2V5Ym9hcmRPcHRpb25UYWIoZXZlbnQpOworI2Vsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYKK30KIAogYm9vbCBFdmVudEhhbmRsZXI6OnRhYnNUb0xpbmtz
KEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAogeworICAgIEFTU0VSVChldmVudC0+a2V5SWRl
bnRpZmllcigpID09ICJVKzAwMDkiKTsKKwogICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdl
KCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocGFn
ZS0+Y2hyb21lKCktPmNsaWVudCgpLT50YWJzVG9MaW5rcygpKQotICAgICAgICByZXR1cm4gIWlu
dmVydFNlbnNlT2ZUYWJzVG9MaW5rcyhldmVudCk7Ci0KLSAgICByZXR1cm4gaW52ZXJ0U2Vuc2VP
ZlRhYnNUb0xpbmtzKGV2ZW50KTsKKyAgICBib29sIHRhYnNUb0xpbmtzQ2xpZW50Q2FsbFJlc3Vs
dCA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+dGFic1RvTGlua3MoKTsKKyAgICByZXR1cm4g
ZXZlbnRJbnZlcnRzVGFic1RvTGlua3NDbGllbnRDYWxsUmVzdWx0KGV2ZW50KSA/ICF0YWJzVG9M
aW5rc0NsaWVudENhbGxSZXN1bHQgOiB0YWJzVG9MaW5rc0NsaWVudENhbGxSZXN1bHQ7CiB9CiAK
IHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0VGV4dElucHV0RXZlbnRIYW5kbGVyKFRleHRFdmVu
dCogZXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHJldmlzaW9uIDc5
OTM3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZFR1cm5WZXJ0aWNh
bFRpY2tzSW50b0hvcml6b250YWwoY29uc3QgSGl0VGVzdFJlc3VsdCYpIGNvbnN0OwogCiAgICAg
Ym9vbCB0YWJzVG9MaW5rcyhLZXlib2FyZEV2ZW50KikgY29uc3Q7Ci0gICAgYm9vbCB0YWJzVG9B
bGxDb250cm9scyhLZXlib2FyZEV2ZW50KikgY29uc3Q7CisgICAgYm9vbCB0YWJzVG9BbGxGb3Jt
Q29udHJvbHMoS2V5Ym9hcmRFdmVudCopIGNvbnN0OwogCiAgICAgYm9vbCBtb3VzZURvd25NYXlT
dGFydFNlbGVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbW91c2VEb3duTWF5U3RhcnRTZWxlY3Q7IH0K
IApAQCAtMjI2LDYgKzIyNiw4IEBAIHB1YmxpYzoKICAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQo
Y29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50Jik7CiAjZW5kaWYKIAorICAgIHN0YXRpYyBib29sIGlz
S2V5Ym9hcmRPcHRpb25UYWIoS2V5Ym9hcmRFdmVudCopOworCiBwcml2YXRlOgogI2lmIEVOQUJM
RShEUkFHX1NVUFBPUlQpCiAgICAgZW51bSBEcmFnQW5kRHJvcEhhbmRsZVR5cGUgewpAQCAtMzQ4
LDggKzM1MCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBldmVudExvb3BIYW5kbGVNb3VzZURyYWdn
ZWQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwogI2VuZGlmCiAKLSAgICBi
b29sIGludmVydFNlbnNlT2ZUYWJzVG9MaW5rcyhLZXlib2FyZEV2ZW50KikgY29uc3Q7Ci0KICNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uRm9yTW91c2VE
cmFnKE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9hbmRyb2lkL0V2ZW50SGFuZGxlckFuZHJvaWQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9FdmVudEhhbmRs
ZXJBbmRyb2lkLmNwcAkocmV2aXNpb24gNzk5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
ZHJvaWQvRXZlbnRIYW5kbGVyQW5kcm9pZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEV2ZW50SGFuZGxlcjo6dGFic1Rv
QWxsQ29udHJvbHMoS2V5Ym9hcmRFdmVudCopIGNvbnN0Citib29sIEV2ZW50SGFuZGxlcjo6dGFi
c1RvQWxsRm9ybUNvbnRyb2xzKEtleWJvYXJkRXZlbnQqKSBjb25zdAogewogICAgIHJldHVybiB0
cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9icmV3L0V2ZW50SGFuZGxlckJyZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYnJldy9FdmVudEhhbmRsZXJC
cmV3LmNwcAkocmV2aXNpb24gNzk5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRXZl
bnRIYW5kbGVyQnJldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxsQ29udHJvbHMo
S2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0Citib29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxs
Rm9ybUNvbnRyb2xzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAogewogICAgIHJldHVybiB0
cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9F
dmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc5OTM3KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNCw3ICsxMTQsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50
VG9XCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxs
Q29udHJvbHMoS2V5Ym9hcmRFdmVudCopIGNvbnN0Citib29sIEV2ZW50SGFuZGxlcjo6dGFic1Rv
QWxsRm9ybUNvbnRyb2xzKEtleWJvYXJkRXZlbnQqKSBjb25zdAogewogICAgIHJldHVybiB0cnVl
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3Bw
CShyZXZpc2lvbiA3OTkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxl
ckVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDIwICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY29uc3QgZG91YmxlIEV2ZW50SGFuZGxlcjo6VGV4dERyYWdEZWxheSA9IDAuMDsK
IAotc3RhdGljIGJvb2wgaXNLZXlib2FyZE9wdGlvblRhYihLZXlib2FyZEV2ZW50KiBldmVudCkK
LXsKLSAgICByZXR1cm4gZXZlbnQKLSAgICAgICAgJiYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmtleWRvd25FdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlw
cmVzc0V2ZW50KQotICAgICAgICAmJiBldmVudC0+YWx0S2V5KCkKLSAgICAgICAgJiYgZXZlbnQt
PmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDA5IjsKLX0KLQotYm9vbCBFdmVudEhhbmRsZXI6Omlu
dmVydFNlbnNlT2ZUYWJzVG9MaW5rcyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gaXNLZXlib2FyZE9wdGlvblRhYihldmVudCk7Ci19Ci0KLWJvb2wgRXZlbnRIYW5k
bGVyOjp0YWJzVG9BbGxDb250cm9scyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKK2Jvb2wg
RXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxGb3JtQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5jcHAJKHJldmlzaW9uIDc5OTM3KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IGRvdWJsZSBFdmVudEhhbmRs
ZXI6OlRleHREcmFnRGVsYXkgPSAwLjA7CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxD
b250cm9scyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKK2Jvb2wgRXZlbnRIYW5kbGVyOjp0
YWJzVG9BbGxGb3JtQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiB7CiAgICAg
Ly8gV2UgYWx3YXlzIGFsbG93IHRhYnMgdG8gYWxsIGNvbnRyb2xzCiAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1
LmNwcAkocmV2aXNpb24gNzk5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50
SGFuZGxlckhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMjEgKzUwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjb25zdCBkb3VibGUgRXZlbnRIYW5kbGVyOjpUZXh0RHJhZ0RlbGF5
ID0gMC4wOwogCi1zdGF0aWMgYm9vbCBpc0tleWJvYXJkT3B0aW9uVGFiKEtleWJvYXJkRXZlbnQq
IGV2ZW50KQotewotICAgIHJldHVybiBldmVudAotICAgICAgICAmJiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50Ci0gICAgICAgICAgICB8fCBldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQotICAgICAgICAmJiBldmVudC0+YWx0S2V5
KCkKLSAgICAgICAgJiYgZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDA5IjsKLX0KLQot
Ym9vbCBFdmVudEhhbmRsZXI6OmludmVydFNlbnNlT2ZUYWJzVG9MaW5rcyhLZXlib2FyZEV2ZW50
KiBldmVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNLZXlib2FyZE9wdGlvblRhYihldmVudCk7
Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxDb250cm9scyhLZXlib2FyZEV2ZW50
KiBldmVudCkgY29uc3QKK2Jvb2wgRXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxGb3JtQ29udHJvbHMo
S2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiB7CiAgICAgYm9vbCBoYW5kbGluZ09wdGlvblRh
YiA9IGlzS2V5Ym9hcmRPcHRpb25UYWIoZXZlbnQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCShyZXZpc2lvbiA3OTkzNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzE4
LDIwICs3MTgsNyBAQCBQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhCiAK
ICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNLZXlib2FyZE9wdGlvblRhYihLZXlib2Fy
ZEV2ZW50KiBldmVudCkKLXsKLSAgICByZXR1cm4gZXZlbnQKLSAgICAgICAgJiYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQotICAgICAgICAmJiBldmVudC0+YWx0S2V5KCkKLSAg
ICAgICAgJiYgZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDA5IjsgICAgCi19Ci0KLWJv
b2wgRXZlbnRIYW5kbGVyOjppbnZlcnRTZW5zZU9mVGFic1RvTGlua3MoS2V5Ym9hcmRFdmVudCog
ZXZlbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzS2V5Ym9hcmRPcHRpb25UYWIoZXZlbnQpOwot
fQotCi1ib29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxsQ29udHJvbHMoS2V5Ym9hcmRFdmVudCog
ZXZlbnQpIGNvbnN0Citib29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxsRm9ybUNvbnRyb2xzKEtl
eWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAogewogICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVu
dEhhbmRsZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVu
dEhhbmRsZXJRdC5jcHAJKHJldmlzaW9uIDc5OTM3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9x
dC9FdmVudEhhbmRsZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDIwICs2Miw3IEBAIGNv
bnN0IGRvdWJsZSBFdmVudEhhbmRsZXI6OlRleHREcmFnRGVsYXkKIGNvbnN0IGRvdWJsZSBFdmVu
dEhhbmRsZXI6OlRleHREcmFnRGVsYXkgPSAwLjA7CiAjZW5kaWYKIAotc3RhdGljIGJvb2wgaXNL
ZXlib2FyZE9wdGlvblRhYihLZXlib2FyZEV2ZW50KiBldmVudCkKLXsKLSAgICByZXR1cm4gZXZl
bnQKLSAgICAgICAgJiYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVu
dCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQotICAgICAg
ICAmJiBldmVudC0+YWx0S2V5KCkKLSAgICAgICAgJiYgZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9
PSAiVSswMDA5IjsKLX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OmludmVydFNlbnNlT2ZUYWJzVG9M
aW5rcyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNLZXlib2Fy
ZE9wdGlvblRhYihldmVudCk7Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxDb250
cm9scyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKK2Jvb2wgRXZlbnRIYW5kbGVyOjp0YWJz
VG9BbGxGb3JtQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIChpc0tleWJvYXJkT3B0aW9uVGFiKGV2ZW50KSA/ICFxdF90YWJfYWxsX3dpZGdldHMgOiBx
dF90YWJfYWxsX3dpZGdldHMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZl
bnRIYW5kbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9F
dmVudEhhbmRsZXJXaW4uY3BwCShyZXZpc2lvbiA3OTkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZQogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+
aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnRh
YnNUb0FsbENvbnRyb2xzKEtleWJvYXJkRXZlbnQqKSBjb25zdAorYm9vbCBFdmVudEhhbmRsZXI6
OnRhYnNUb0FsbEZvcm1Db250cm9scyhLZXlib2FyZEV2ZW50KikgY29uc3QKIHsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZlbnRIYW5kbGVyV3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZlbnRIYW5kbGVyV3gu
Y3BwCShyZXZpc2lvbiA3OTkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRXZlbnRIYW5k
bGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2UKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVW
aWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQo
ZXZlbnQpOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxsQ29udHJvbHMoS2V5Ym9h
cmRFdmVudCogZXZlbnQpIGNvbnN0IAorYm9vbCBFdmVudEhhbmRsZXI6OnRhYnNUb0FsbEZvcm1D
b250cm9scyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QgCiB7IAogICAgIG5vdEltcGxlbWVu
dGVkKCk7IAogICAgIHJldHVybiBmYWxzZTsgCg==
</data>
<flag name="review"
          id="76433"
          type_id="1"
          status="+"
          setter="sullivan"
    />
          </attachment>
      

    </bug>

</bugzilla>