<?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>50489</bug_id>
          
          <creation_ts>2010-12-03 14:54:47 -0800</creation_ts>
          <short_desc>Move DocumentWriter to DocumentLoader</short_desc>
          <delta_ts>2022-03-01 02:43:01 -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>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>50594</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>317074</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-03 14:54:47 -0800</bug_when>
    <thetext>Currently, DocumentWriter is owned by FrameLoader, but it&apos;s logically per-load functionality, so it should probably belong to DocumentLoader.

Patch coming shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317077</commentid>
    <comment_count>1</comment_count>
      <attachid>75549</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-03 15:06:25 -0800</bug_when>
    <thetext>Created attachment 75549
Attempt #1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317245</commentid>
    <comment_count>2</comment_count>
      <attachid>75549</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-04 00:49:04 -0800</bug_when>
    <thetext>Comment on attachment 75549
Attempt #1

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

This patch is great.  Thanks for doing this!  Some comments below to think about before landing.

&gt; WebKit/wx/WebKitSupport/FrameLoaderClientWx.cpp:437
&gt; -            FrameLoader* fl = loader-&gt;frameLoader();
&gt; -            fl-&gt;writer()-&gt;setEncoding(m_response.textEncodingName(), false);
&gt; +            loader-&gt;writer()-&gt;setEncoding(m_response.textEncodingName(), false);

:)

&gt; WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.cpp:453
&gt; -        FrameLoader* loader = documentLoader-&gt;frameLoader();
&gt; -        loader-&gt;writer()-&gt;setEncoding(m_response.textEncodingName(), false);
&gt; +        documentLoader-&gt;writer()-&gt;setEncoding(m_response.textEncodingName(), false);

:)

&gt; WebCore/dom/Document.cpp:432
&gt; +        m_documentLoader-&gt;writer()-&gt;setFrame(frame);

Hum...  This is a small sadness.

&gt; WebCore/dom/Document.cpp:4449
&gt; -        DocumentLoader* documentLoader = m_frame-&gt;loader()-&gt;documentLoader();
&gt; -        if (documentLoader &amp;&amp; documentLoader-&gt;substituteData().isValid())
&gt; +        if (m_documentLoader-&gt;substituteData().isValid())

I really like that Document has a pointer to DocumentLoader.  Going through the Frame / FrameLoader to get the DocumentLoader is just asking for trouble.

&gt; WebCore/dom/Document.cpp:4528
&gt;      f-&gt;loader()-&gt;setURL(url);

I dream that someday you&apos;ll get your patch to remove this working.  :)

&gt; WebCore/html/HTMLLinkElement.cpp:219
&gt; -        if (charset.isEmpty() &amp;&amp; document()-&gt;frame())
&gt; -            charset = document()-&gt;frame()-&gt;loader()-&gt;writer()-&gt;encoding();
&gt; +        if (charset.isEmpty())
&gt; +            charset = document()-&gt;loader()-&gt;writer()-&gt;encoding();

Nice.

&gt; WebCore/loader/FrameLoader.cpp:235
&gt; -    writer()-&gt;begin(KURL(), false);
&gt; -    writer()-&gt;end();
&gt; +    m_documentLoader-&gt;writer()-&gt;begin(KURL(), false);
&gt; +    m_documentLoader-&gt;writer()-&gt;end();

This doesn&apos;t need to be m_provisionalDocumentLoader ?  I guess nothing would work if it was wrong, so it must be right.

&gt; WebCore/loader/FrameLoader.cpp:595
&gt;      m_frame-&gt;setDocument(0);
&gt; -    writer()-&gt;clear();
&gt; +    if (activeDocumentLoader())
&gt; +        activeDocumentLoader()-&gt;writer()-&gt;clear();

Does it make sense to get the document loader from the document here instead?

&gt; WebCore/loader/FrameLoader.cpp:2676
&gt;      Settings* settings = m_frame-&gt;settings();
&gt; -    request.setResponseContentDispositionEncodingFallbackArray(&quot;UTF-8&quot;, writer()-&gt;deprecatedFrameEncoding(), settings ? settings-&gt;defaultTextEncodingName() : String());
&gt; +    request.setResponseContentDispositionEncodingFallbackArray(&quot;UTF-8&quot;, activeDocumentLoader()-&gt;writer()-&gt;deprecatedFrameEncoding(), settings ? settings-&gt;defaultTextEncodingName() : String());

Sigh.  This code is so evil, but not really your fault.

&gt; WebCore/loader/DocumentLoader.cpp:378
&gt; +    m_writer.setFrame(frame);

Why do we need to call setFrame in two places?  I would have expected this one to be sufficient.

By the way, another approach is to give DocumentWriter a back-pointer to DocumentLoader, which then has this back-pointer to Frame.  I&apos;m not sure that really buys you anything over the approach you have here though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317641</commentid>
    <comment_count>3</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-06 08:31:41 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; WebCore/dom/Document.cpp:432
&gt; &gt; +        m_documentLoader-&gt;writer()-&gt;setFrame(frame);
&gt; 
&gt; Hum...  This is a small sadness.
&gt; 

Indeed.  I&apos;ll double-check that it&apos;s really necessary, but I&apos;m afraid it is.

&gt; &gt; WebCore/dom/Document.cpp:4449
&gt; &gt; -        DocumentLoader* documentLoader = m_frame-&gt;loader()-&gt;documentLoader();
&gt; &gt; -        if (documentLoader &amp;&amp; documentLoader-&gt;substituteData().isValid())
&gt; &gt; +        if (m_documentLoader-&gt;substituteData().isValid())
&gt; 
&gt; I really like that Document has a pointer to DocumentLoader.  Going through the Frame / FrameLoader to get the DocumentLoader is just asking for trouble.

:)

&gt; 
&gt; &gt; WebCore/dom/Document.cpp:4528
&gt; &gt;      f-&gt;loader()-&gt;setURL(url);
&gt; 
&gt; I dream that someday you&apos;ll get your patch to remove this working.  :)

I should take another stab at that, but I cringe every time I think about it...


&gt; 
&gt; &gt; WebCore/loader/FrameLoader.cpp:235
&gt; &gt; -    writer()-&gt;begin(KURL(), false);
&gt; &gt; -    writer()-&gt;end();
&gt; &gt; +    m_documentLoader-&gt;writer()-&gt;begin(KURL(), false);
&gt; &gt; +    m_documentLoader-&gt;writer()-&gt;end();
&gt; 
&gt; This doesn&apos;t need to be m_provisionalDocumentLoader ?  I guess nothing would work if it was wrong, so it must be right.

I think about suing activeDocumentLoader() here, but decided that it would be clearer if I didn&apos;t.  The quirkiness here is that DocumentLoader::finishedLoading() causes us to commit, so the previous line guarantees we&apos;ll be committed at this point.

&gt; 
&gt; &gt; WebCore/loader/FrameLoader.cpp:595
&gt; &gt;      m_frame-&gt;setDocument(0);
&gt; &gt; -    writer()-&gt;clear();
&gt; &gt; +    if (activeDocumentLoader())
&gt; &gt; +        activeDocumentLoader()-&gt;writer()-&gt;clear();
&gt; 
&gt; Does it make sense to get the document loader from the document here instead?

Probably, I&apos;ll try it out.

&gt; &gt; WebCore/loader/DocumentLoader.cpp:378
&gt; &gt; +    m_writer.setFrame(frame);
&gt; 
&gt; Why do we need to call setFrame in two places?  I would have expected this one to be sufficient.

I think one of these setFrame() calls is vestigal, but I need to make sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317830</commentid>
    <comment_count>4</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-06 13:44:48 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/73392</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318130</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-12-07 04:40:44 -0800</bug_when>
    <thetext>This change has been causing some crashes on the GTK+ bots with the following tests:

fast/frames/iframe-onload-remove-self-no-crash.html
fast/loader/frame-creation-removal.html

Here&apos;s the stack trace from one of these crashes:

Thread 1 (Thread 25202):
#0  0x00002b8c57da23bc in WebCore::DocumentWriter::end (this=0x100) at ../../WebCore/loader/DocumentWriter.cpp:206
#1  0x00002b8c57da5a67 in WebCore::FrameLoader::init (this=0x527fc28) at ../../WebCore/loader/FrameLoader.cpp:235
#2  0x00002b8c58175c46 in WebCore::Frame::init (this=0x527fbd0) at ../../WebCore/page/Frame.h:253
#3  0x00002b8c582f0ad6 in WebKit::FrameLoaderClient::createFrame (this=0x1a2ce00, url=..., name=..., ownerElement=0x532dee0, referrer=..., allowsScrolling=true, marginWidth=-1, marginHeight=-1) at ../../WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:590
#4  0x00002b8c57df674f in WebCore::SubframeLoader::loadSubframe (this=0x1a33a28, ownerElement=0x532dee0, url=..., name=..., referrer=...) at ../../WebCore/loader/SubframeLoader.cpp:266
#5  0x00002b8c57df653d in WebCore::SubframeLoader::loadOrRedirectSubframe (this=0x1a33a28, ownerElement=0x532dee0, url=..., frameName=..., lockHistory=true, lockBackForwardList=true) at ../../WebCore/loader/SubframeLoader.cpp:244
#6  0x00002b8c57df5b27 in WebCore::SubframeLoader::requestFrame (this=0x1a33a28, ownerElement=0x532dee0, urlString=..., frameName=..., lockHistory=true, lockBackForwardList=true) at ../../WebCore/loader/SubframeLoader.cpp:82
#7  0x00002b8c57c5417f in WebCore::HTMLFrameElementBase::openURL (this=0x532dee0, lockHistory=true, lockBackForwardList=true) at ../../WebCore/html/HTMLFrameElementBase.cpp:105
#8  0x00002b8c57c547a6 in WebCore::HTMLFrameElementBase::setNameAndOpenURL (this=0x532dee0) at ../../WebCore/html/HTMLFrameElementBase.cpp:156
#9  0x00002b8c57c548e7 in WebCore::HTMLFrameElementBase::insertedIntoDocument (this=0x532dee0) at ../../WebCore/html/HTMLFrameElementBase.cpp:190
#10 0x00002b8c57c58f73 in WebCore::HTMLIFrameElement::insertedIntoDocument (this=0x532dee0) at ../../WebCore/html/HTMLIFrameElement.cpp:149
#11 0x00002b8c57a9cb42 in WebCore::notifyChildInserted (child=0x532dee0) at ../../WebCore/dom/ContainerNode.cpp:1015
#12 0x00002b8c57a9b1e9 in WebCore::ContainerNode::appendChild (this=0x5172310, newChild=..., ec=@0x7ffff9f2d61c, shouldLazyAttach=true) at ../../WebCore/dom/ContainerNode.cpp:604
#13 0x00002b8c57b10724 in WebCore::Node::appendChild (this=0x5172310, newChild=..., ec=@0x7ffff9f2d61c, shouldLazyAttach=true) at ../../WebCore/dom/Node.cpp:569
#14 0x00002b8c57934bed in WebCore::JSNode::appendChild (this=0x2b8cf0290440, exec=0x2b8cefe430d8) at ../../WebCore/bindings/js/JSNodeCustom.cpp:108
#15 0x00002b8c5847f921 in WebCore::jsNodePrototypeFunctionAppendChild (exec=0x2b8cefe430d8) at DerivedSources/WebCore/JSNode.cpp:484
#16 0x00002b8c6fe331b8 in ?? ()
#17 0x00007ffff9f2d740 in ?? ()
#18 0x00002b8c6ff0b1d9 in ?? ()
#19 0x00007ffff9f2d6c0 in ?? ()
#20 0x00002b8cf0290440 in ?? ()
#21 0x0000000004f20078 in ?? ()
#22 0x00002b8cf028d340 in ?? ()
#23 0x00007ffff9f2d6f0 in ?? ()
#24 0x00002b8c5790bc13 in JSC::Register::Register (this=0x50dfe70) at ../../JavaScriptCore/interpreter/Register.h:106
#25 0x00002b8c586db9bd in JSC::JITCode::execute (this=0x50d4c58, registerFile=0x1ae11f8, callFrame=0x2b8cefe43040, globalData=0x1ade980) at ../../JavaScriptCore/jit/JITCode.h:77
#26 0x00002b8c586d88f3 in JSC::Interpreter::executeCall (this=0x1ae11e0, callFrame=0x5065ff8, function=0x2b8cf028ffc0, callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...) at ../../JavaScriptCore/interpreter/Interpreter.cpp:849
#27 0x00002b8c58767a1f in JSC::call (exec=0x5065ff8, functionObject=..., callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...) at ../../JavaScriptCore/runtime/CallData.cpp:38
#28 0x00002b8c578e8619 in WebCore::JSMainThreadExecState::call (exec=0x5065ff8, functionObject=..., callType=JSC::CallTypeJS, callData=..., thisValue=..., args=...) at ../../WebCore/bindings/js/JSMainThreadExecState.h:48
#29 0x00002b8c57922794 in WebCore::JSEventListener::handleEvent (this=0x50fef00, scriptExecutionContext=0x50893e8, event=0x50d4bf0) at ../../WebCore/bindings/js/JSEventListener.cpp:124
#30 0x00002b8c57b0136d in WebCore::EventTarget::fireEventListeners (this=0x4d62850, event=0x50d4bf0, d=0x4d62930, entry=...) at ../../WebCore/dom/EventTarget.cpp:342
#31 0x00002b8c57b011fc in WebCore::EventTarget::fireEventListeners (this=0x4d62850, event=0x50d4bf0) at ../../WebCore/dom/EventTarget.cpp:311
#32 0x00002b8c57e35564 in WebCore::DOMWindow::dispatchEvent (this=0x4d62850, prpEvent=..., prpTarget=...) at ../../WebCore/page/DOMWindow.cpp:1549
#33 0x00002b8c57e3566e in WebCore::DOMWindow::dispatchTimedEvent (this=0x4d62850, event=..., target=0x5089380, startTime=0x50dfe68, endTime=0x50dfe70) at ../../WebCore/page/DOMWindow.cpp:1561
#34 0x00002b8c57e351b3 in WebCore::DOMWindow::dispatchLoadEvent (this=0x4d62850) at ../../WebCore/page/DOMWindow.cpp:1515
#35 0x00002b8c57ab9abd in WebCore::Document::dispatchWindowLoadEvent (this=0x5089380) at ../../WebCore/dom/Document.cpp:3461
#36 0x00002b8c57ab4aff in WebCore::Document::implicitClose (this=0x5089380) at ../../WebCore/dom/Document.cpp:2110
#37 0x00002b8c57da8a8d in WebCore::FrameLoader::checkCallImplicitClose (this=0x5280778) at ../../WebCore/loader/FrameLoader.cpp:901
#38 0x00002b8c57da8860 in WebCore::FrameLoader::checkCompleted (this=0x5280778) at ../../WebCore/loader/FrameLoader.cpp:849
#39 0x00002b8c57da85df in WebCore::FrameLoader::finishedParsing (this=0x5280778) at ../../WebCore/loader/FrameLoader.cpp:783
#40 0x00002b8c57abccd0 in WebCore::Document::finishedParsing (this=0x5089380) at ../../WebCore/dom/Document.cpp:4227
#41 0x00002b8c57cc8a85 in WebCore::HTMLTreeBuilder::finished (this=0x5281c20) at ../../WebCore/html/parser/HTMLTreeBuilder.cpp:2794
#42 0x00002b8c57ca0f94 in WebCore::HTMLDocumentParser::end (this=0x4f3c520) at ../../WebCore/html/parser/HTMLDocumentParser.cpp:323
#43 0x00002b8c57ca1087 in WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd (this=0x4f3c520) at ../../WebCore/html/parser/HTMLDocumentParser.cpp:332
#44 0x00002b8c57ca0578 in WebCore::HTMLDocumentParser::prepareToStopParsing (this=0x4f3c520) at ../../WebCore/html/parser/HTMLDocumentParser.cpp:150
#45 0x00002b8c57ca10cc in WebCore::HTMLDocumentParser::attemptToEnd (this=0x4f3c520) at ../../WebCore/html/parser/HTMLDocumentParser.cpp:344
#46 0x00002b8c57ca1185 in WebCore::HTMLDocumentParser::finish (this=0x4f3c520) at ../../WebCore/html/parser/HTMLDocumentParser.cpp:372
#47 0x00002b8c57ab50fa in WebCore::Document::finishParsing (this=0x5089380) at ../../WebCore/dom/Document.cpp:2261
#48 0x00002b8c57da2485 in WebCore::DocumentWriter::endIfNotLoadingMainResource (this=0x50df680) at ../../WebCore/loader/DocumentWriter.cpp:222
#49 0x00002b8c57da23db in WebCore::DocumentWriter::end (this=0x50df680) at ../../WebCore/loader/DocumentWriter.cpp:207
#50 0x00002b8c57d97167 in WebCore::DocumentLoader::finishedLoading (this=0x50df580) at ../../WebCore/loader/DocumentLoader.cpp:281
#51 0x00002b8c57daec27 in WebCore::FrameLoader::finishedLoading (this=0x5280778) at ../../WebCore/loader/FrameLoader.cpp:2165
#52 0x00002b8c57de2f51 in WebCore::MainResourceLoader::didFinishLoading (this=0x4e2efc0, finishTime=0) at ../../WebCore/loader/MainResourceLoader.cpp:457
#53 0x00002b8c57deee57 in WebCore::ResourceLoader::didFinishLoading (this=0x4e2efc0, finishTime=0) at ../../WebCore/loader/ResourceLoader.cpp:435
#54 0x00002b8c582c4269 in WebCore::closeCallback (source=0x2b8c680160c0, res=0x2b8c68016240) at ../../WebCore/platform/network/soup/ResourceHandleSoup.cpp:810
#55 0x00002b8c5b673620 in async_ready_close_callback_wrapper (source_object=0x2b8c680160c0, res=0x2b8c68016240, user_data=0x0) at /tmp/buildd/glib2.0-2.24.1/gio/ginputstream.c:485
#56 0x00002b8c5b681ac8 in complete_in_idle_cb_for_thread (_data=&lt;value optimized out&gt;) at /tmp/buildd/glib2.0-2.24.1/gio/gsimpleasyncresult.c:653
#57 0x00002b8c5c1766c2 in g_main_dispatch (context=0xffff000000000002) at /tmp/buildd/glib2.0-2.24.1/glib/gmain.c:1960
#58 IA__g_main_context_dispatch (context=0xffff000000000002) at /tmp/buildd/glib2.0-2.24.1/glib/gmain.c:2513
#59 0x00002b8c5c17a538 in g_main_context_iterate (context=0x1977f70, block=&lt;value optimized out&gt;, dispatch=&lt;value optimized out&gt;, self=&lt;value optimized out&gt;) at /tmp/buildd/glib2.0-2.24.1/glib/gmain.c:2591
#60 0x00002b8c5c17aa45 in IA__g_main_loop_run (loop=0x501cb70) at /tmp/buildd/glib2.0-2.24.1/glib/gmain.c:2799
#61 0x00002b8c5a17f657 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#62 0x000000000041a6d8 in runTest (testPathOrURL=...) at ../../WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp:648
#63 0x0000000000419dad in runTestingServerLoop () at ../../WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp:462
#64 0x000000000041bcae in main (argc=2, argv=0x7ffff9f2ef78) at ../../WebKitTools/DumpRenderTree/gtk/DumpRenderTree.cpp:1089</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318131</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-12-07 04:41:31 -0800</bug_when>
    <thetext>Committed r73436: &lt;http://trac.webkit.org/changeset/73436&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318208</commentid>
    <comment_count>7</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-07 08:34:08 -0800</bug_when>
    <thetext>Current theory for the crashes: My use of m_documentLoader-&gt;writer() instead of activeDocumentLoader()-&gt;writer() in FrameLoader::init() is only safe on certain platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318862</commentid>
    <comment_count>8</comment_count>
      <attachid>75922</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-08 10:17:08 -0800</bug_when>
    <thetext>Created attachment 75922
Attempt to fix crashes in FrameLoader::init()

As described in the previous comment, the only difference between this and r73392 is the use of activeDocumentLoader() instead of m_documentLoader in FrameLoader::init().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318949</commentid>
    <comment_count>9</comment_count>
      <attachid>75922</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-08 12:43:13 -0800</bug_when>
    <thetext>Comment on attachment 75922
Attempt to fix crashes in FrameLoader::init()

Never mind, apparently the gtk crashes are still present with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321777</commentid>
    <comment_count>10</comment_count>
      <attachid>75549</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-14 01:28:51 -0800</bug_when>
    <thetext>Comment on attachment 75549
Attempt #1

Cleared Adam Barth&apos;s review+ from obsolete attachment 75549 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324557</commentid>
    <comment_count>11</comment_count>
      <attachid>77034</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-20 13:56:06 -0800</bug_when>
    <thetext>Created attachment 77034
Attempt to fix crashes #2

Changes from the version that was committed and reverted:

FrameLoaderClientQt.cpp : Use m_frame-&gt;loader()-&gt;activeDocumentLoader() instead of m_frame-&gt;document()-&gt;loader().  I believe that this will be safer if we catch the loader in the middle of a navigation.

FrameLoaderClientGtk.h/cpp : Use an m_hasRepresentation boolean in the same way the qt and chromium FrameLoaderClients do.  This should keep us from blowing away our DocumentLoader in FrameLoader::init().

mrobinson and ossy, could I trouble you to verify this patch on your respective platforms at your leisure?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324956</commentid>
    <comment_count>12</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-12-21 05:17:58 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=77034) [details]
&gt; Attempt to fix crashes #2
&gt; 
&gt; Changes from the version that was committed and reverted:
&gt; 
&gt; FrameLoaderClientQt.cpp : Use m_frame-&gt;loader()-&gt;activeDocumentLoader() instead of m_frame-&gt;document()-&gt;loader().  I believe that this will be safer if we catch the loader in the middle of a navigation.
&gt; 
&gt; FrameLoaderClientGtk.h/cpp : Use an m_hasRepresentation boolean in the same way the qt and chromium FrameLoaderClients do.  This should keep us from blowing away our DocumentLoader in FrameLoader::init().
&gt; 
&gt; mrobinson and ossy, could I trouble you to verify this patch on your respective platforms at your leisure?

I tried this patch with QtWebKit. The previously crashed API test passes, 
but unfortunately it caused a flakey layout test regression. Sometimes 
(every second or third execution of run-webkit-tests) there are 24 failing
tests with this error message &quot;FAIL: Timed out waiting for notifyDone to be
called&quot;

list of failing tests:
fast/tokenizer/flush-characters-in-document-write-evil.html
fast/tokenizer/flush-characters-in-document-write.html
fast/viewport/viewport-128.html
fast/workers/dedicated-worker-lifecycle.html
fast/workers/shared-worker-exception.html
fast/workers/shared-worker-lifecycle.html
fast/workers/shared-worker-name.html
fast/workers/shared-worker-script-error.html
fast/workers/stress-js-execution.html
fast/workers/termination-early.html
fast/workers/termination-with-port-messages.html
fast/workers/worker-cloneport.html
fast/workers/worker-close-more.html
fast/workers/worker-close.html
fast/workers/worker-context-multi-port.html
fast/workers/worker-gc2.html
fast/workers/worker-lifecycle.html
fast/workers/worker-messageport-gc.html
fast/workers/worker-multi-port.html
fast/workers/worker-terminate.html
fast/workers/storage/change-version-sync.html
fast/workers/storage/interrupt-database.html
fast/xmlhttprequest/null-document-xmlhttprequest-open.html
fast/xmlhttprequest/xmlhttprequest-nonexistent-file.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326612</commentid>
    <comment_count>13</comment_count>
      <attachid>77034</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-24 08:06:25 -0800</bug_when>
    <thetext>Comment on attachment 77034
Attempt to fix crashes #2

Based on comments in the bug, this patch still causes problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333659</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-01-13 06:34:42 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Created an attachment (id=77034) [details] [details]
&gt; &gt; Attempt to fix crashes #2
&gt; &gt; 
&gt; &gt; Changes from the version that was committed and reverted:
&gt; &gt; 
&gt; &gt; FrameLoaderClientQt.cpp : Use m_frame-&gt;loader()-&gt;activeDocumentLoader() instead of m_frame-&gt;document()-&gt;loader().  I believe that this will be safer if we catch the loader in the middle of a navigation.
&gt; &gt; 
&gt; &gt; FrameLoaderClientGtk.h/cpp : Use an m_hasRepresentation boolean in the same way the qt and chromium FrameLoaderClients do.  This should keep us from blowing away our DocumentLoader in FrameLoader::init().
&gt; &gt; 
&gt; &gt; mrobinson and ossy, could I trouble you to verify this patch on your respective platforms at your leisure?
&gt; 
&gt; I tried this patch with QtWebKit. The previously crashed API test passes, 
&gt; but unfortunately it caused a flakey layout test regression. Sometimes 
&gt; (every second or third execution of run-webkit-tests) there are 24 failing
&gt; tests with this error message &quot;FAIL: Timed out waiting for notifyDone to be
&gt; called&quot;
&gt; 
&gt; list of failing tests:
&gt; fast/tokenizer/flush-characters-in-document-write-evil.html
&gt; fast/tokenizer/flush-characters-in-document-write.html
&gt; fast/viewport/viewport-128.html
&gt; fast/workers/dedicated-worker-lifecycle.html
&gt; fast/workers/shared-worker-exception.html
&gt; fast/workers/shared-worker-lifecycle.html
&gt; fast/workers/shared-worker-name.html
&gt; fast/workers/shared-worker-script-error.html
&gt; fast/workers/stress-js-execution.html
&gt; fast/workers/termination-early.html
&gt; fast/workers/termination-with-port-messages.html
&gt; fast/workers/worker-cloneport.html
&gt; fast/workers/worker-close-more.html
&gt; fast/workers/worker-close.html
&gt; fast/workers/worker-context-multi-port.html
&gt; fast/workers/worker-gc2.html
&gt; fast/workers/worker-lifecycle.html
&gt; fast/workers/worker-messageport-gc.html
&gt; fast/workers/worker-multi-port.html
&gt; fast/workers/worker-terminate.html
&gt; fast/workers/storage/change-version-sync.html
&gt; fast/workers/storage/interrupt-database.html
&gt; fast/xmlhttprequest/null-document-xmlhttprequest-open.html
&gt; fast/xmlhttprequest/xmlhttprequest-nonexistent-file.html

Sorry, it was false positive alarm. :(( It caused by a Qt-DRT bug: https://bugs.webkit.org/show_bug.cgi?id=42578#c34

I retested your patch again (Attempt to fix crashes #2) and it works on Qt now. (I hade to resolve conflicts in 2 files to make the patch appliable)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333920</commentid>
    <comment_count>15</comment_count>
      <attachid>78852</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-01-13 13:55:03 -0800</bug_when>
    <thetext>Created attachment 78852
Merge previous patch to trunk

Thanks for the update on the state of the qt piece of this!

It sounds like that means there are no more known concerns with this patch.  I&apos;ve uploaded a new version which is identical to the old one, but merged to tip of tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348593</commentid>
    <comment_count>16</comment_count>
      <attachid>78852</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-09 14:43:13 -0800</bug_when>
    <thetext>Comment on attachment 78852
Merge previous patch to trunk

Ok.  This code will probably need some more merging, but no need to upload for review again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349829</commentid>
    <comment_count>17</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-02-11 10:28:04 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78342</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75549</attachid>
            <date>2010-12-03 15:06:25 -0800</date>
            <delta_ts>2010-12-14 01:28:50 -0800</delta_ts>
            <desc>Attempt #1</desc>
            <filename>writer.txt</filename>
            <type>text/plain</type>
            <size>34821</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzMyODApCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMTItMDMgIE5hdGUg
Q2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY2FsbHMgdG8gRG9jdW1lbnRXcml0ZXIuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDQ4OQorCisg
ICAgICAgICogc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkNvbnRleHRNZW51Q2xpZW50SW1wbDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgor
ICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAgICogc3Jj
L1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZW5jb2Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmxvYWRKYXZhU2NyaXB0VVJMKToK
KyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFn
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzZXJpYWxpemUpOgor
ICAgICAgICAqIHNyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R2V0Rm9ybUVuY29kaW5nKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFnZUVuY29kaW5nKToKKwogMjAxMC0xMS0yOSAg
SmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxp
emVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2Vy
aWFsaXplckltcGwuY3BwCShyZXZpc2lvbiA3MzI3MykKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3
IEBACiAgICAgICAgICAgICAvLyBHZXQgZW5jb2RpbmcgaW5mby4KICAgICAgICAgICAgIFN0cmlu
ZyB4bWxFbmNvZGluZyA9IHBhcmFtLT5kb2N1bWVudC0+eG1sRW5jb2RpbmcoKTsKICAgICAgICAg
ICAgIGlmICh4bWxFbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgeG1sRW5jb2Rp
bmcgPSBwYXJhbS0+ZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2Rp
bmcoKTsKKyAgICAgICAgICAgICAgICB4bWxFbmNvZGluZyA9IHBhcmFtLT5kb2N1bWVudC0+bG9h
ZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwogICAgICAgICAgICAgaWYgKHhtbEVuY29kaW5n
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICB4bWxFbmNvZGluZyA9IFVURjhFbmNvZGluZygp
Lm5hbWUoKTsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIjw/eG1sIHZlcnNpb249XCIiKTsK
QEAgLTUwNSw3ICs1MDUsNyBAQAogCiAgICAgICAgIGRpZFNlcmlhbGl6YXRpb24gPSB0cnVlOwog
Ci0gICAgICAgIFN0cmluZyBlbmNvZGluZyA9IHdlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+
d3JpdGVyKCktPmVuY29kaW5nKCk7CisgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IGRvY3VtZW50
LT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CiAgICAgICAgIGNvbnN0IFRleHRFbmNv
ZGluZyYgdGV4dEVuY29kaW5nID0gZW5jb2RpbmcuaXNFbXB0eSgpID8gVVRGOEVuY29kaW5nKCkg
OiBUZXh0RW5jb2RpbmcoZW5jb2RpbmcpOwogICAgICAgICBTdHJpbmcgZGlyZWN0b3J5TmFtZSA9
IHVybCA9PSBtYWluVVJMID8gbV9sb2NhbERpcmVjdG9yeU5hbWUgOiAiIjsKIApJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDczMjczKQorKysgV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MzEsNyArMTQz
MSw3IEBACiAgICAgaWYgKCFtX3BhZ2UuZ2V0KCkpCiAgICAgICAgIHJldHVybiBXZWJTdHJpbmco
KTsKIAotICAgIHJldHVybiBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCkt
PmVuY29kaW5nKCk7CisgICAgcmV0dXJuIG1fcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkt
PmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6
c2V0UGFnZUVuY29kaW5nKGNvbnN0IFdlYlN0cmluZyYgZW5jb2RpbmdOYW1lKQpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkocmV2aXNpb24g
NzMyNzMpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOTcsNyArMTA5Nyw3IEBACiAgICAgICAgIC8vIEhvd2V2ZXIs
IHdlIG9ubHkgd2FudCB0byBkbyB0aGlzIGlmIG1ha2VSZXByZXNlbnRhdGlvbiBoYXMgYmVlbiBj
YWxsZWQsIHRvCiAgICAgICAgIC8vIG1hdGNoIHRoZSBiZWhhdmlvciBvbiB0aGUgTWFjLgogICAg
ICAgICBpZiAobV9oYXNSZXByZXNlbnRhdGlvbikKLSAgICAgICAgICAgIGRsLT5mcmFtZUxvYWRl
cigpLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcoIiIsIGZhbHNlKTsKKyAgICAgICAgICAgIGRsLT53
cml0ZXIoKS0+c2V0RW5jb2RpbmcoIiIsIGZhbHNlKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDcz
MjczKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAKIAogICAgIC8vIElmIGl0J3Mgbm90IGEg
bGluaywgYW4gaW1hZ2UsIGEgbWVkaWEgZWxlbWVudCwgb3IgYW4gaW1hZ2UvbWVkaWEgbGluaywK
ICAgICAvLyBzaG93IGEgc2VsZWN0aW9uIG1lbnUgb3IgYSBtb3JlIGdlbmVyaWMgcGFnZSBtZW51
LgotICAgIGRhdGEuZnJhbWVFbmNvZGluZyA9IHNlbGVjdGVkRnJhbWUtPmxvYWRlcigpLT53cml0
ZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICBkYXRhLmZyYW1lRW5jb2RpbmcgPSBzZWxlY3RlZEZyYW1l
LT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CiAKICAgICAvLyBT
ZW5kIHRoZSBmcmFtZSBhbmQgcGFnZSBVUkxzIGluIGFueSBjYXNlLgogICAgIGRhdGEucGFnZVVS
TCA9IHVybEZyb21GcmFtZShtX3dlYlZpZXctPm1haW5GcmFtZUltcGwoKS0+ZnJhbWUoKSk7Cklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiA3MzI3MykKKysr
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQ1LDcgKzU0NSw3IEBACiAKIFdlYlN0cmluZyBXZWJGcmFtZUltcGw6OmVuY29kaW5nKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygp
OworICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVu
Y29kaW5nKCk7CiB9CiAKIFdlYlNpemUgV2ViRnJhbWVJbXBsOjpzY3JvbGxPZmZzZXQoKSBjb25z
dApAQCAtMjI3MSw3ICsyMjcxLDcgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2Zy
YW1lLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPmxvY2F0aW9uQ2hhbmdlUGVuZGluZygpKQotICAg
ICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPnJlcGxhY2VEb2N1bWVudChzY3JpcHRS
ZXN1bHQpOworICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCkt
PnJlcGxhY2VEb2N1bWVudChzY3JpcHRSZXN1bHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5j
cHAJKHJldmlzaW9uIDczMjczKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxl
Rm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw3IEBACiAgICAgICAgIGlm
IChlbmNvZGluZy0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBj
b25zdCBGcmFtZSogZnJhbWUgPSBmb3JtLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAgICplbmNv
ZGluZyA9IGZyYW1lID8gVGV4dEVuY29kaW5nKGZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVu
Y29kaW5nKCkpIDogTGF0aW4xRW5jb2RpbmcoKTsKKyAgICAqZW5jb2RpbmcgPSBUZXh0RW5jb2Rp
bmcoZm9ybS0+ZG9jdW1lbnQoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpKTsKIH0K
IAogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzdWJtaXQgcmVxdWVzdCByZXN1bHRzIGluIGFuIEhU
VFAgVVJMLgpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFF0LmNwcAkocmV2aXNpb24gNzMyNzMpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxOSw3ICs2MTks
NyBAQAogICAgICAgICAvLyBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBpZiBtYWtl
UmVwcmVzZW50YXRpb24gaGFzIGJlZW4gY2FsbGVkLCB0bwogICAgICAgICAvLyBtYXRjaCB0aGUg
YmVoYXZpb3Igb24gdGhlIE1hYy4KICAgICAgICAgaWYgKG1faGFzUmVwcmVzZW50YXRpb24pCi0g
ICAgICAgICAgICBsb2FkZXItPmZyYW1lTG9hZGVyKCktPndyaXRlcigpLT5zZXRFbmNvZGluZygi
IiwgZmFsc2UpOworICAgICAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcoIiIs
IGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9wbHVnaW5WaWV3LT5p
c1BsdWdpblZpZXcoKSkKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzMyODApCisrKyBXZWJLaXQvcXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMTItMDMgIE5hdGUgQ2hh
cGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY2FsbHMgdG8gRG9jdW1lbnRXcml0ZXIuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDQ4OQorCisgICAg
ICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWU6OnNldFVybCk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpmaW5pc2hlZExvYWRpbmcpOgorCiAyMDEw
LTEyLTAxICBKaWEgUHUgIDxqcHVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkocmV2aXNpb24gNzMyNzMpCisrKyBXZWJL
aXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMyw4ICs3MDMsOCBA
QAogdm9pZCBRV2ViRnJhbWU6OnNldFVybChjb25zdCBRVXJsICZ1cmwpCiB7CiAgICAgY29uc3Qg
UVVybCBhYnNvbHV0ZSA9IGVuc3VyZUFic29sdXRlVXJsKHVybCk7Ci0gICAgZC0+ZnJhbWUtPmxv
YWRlcigpLT53cml0ZXIoKS0+YmVnaW4oYWJzb2x1dGUpOwotICAgIGQtPmZyYW1lLT5sb2FkZXIo
KS0+d3JpdGVyKCktPmVuZCgpOworICAgIGQtPmZyYW1lLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+
d3JpdGVyKCktPmJlZ2luKGFic29sdXRlKTsKKyAgICBkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bG9h
ZGVyKCktPndyaXRlcigpLT5lbmQoKTsKICAgICBsb2FkKGFic29sdXRlKTsKIH0KIApJbmRleDog
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHAJKHJldmlzaW9uIDczMjczKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsMTAgKzEwMTIsOSBAQAog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpbmcoV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQogewotICAgIGlmICghbV9wbHVnaW5WaWV3KSB7Ci0g
ICAgICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBkb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIo
KTsKLSAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0
RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKLSAgICB9IGVsc2UgeworICAgIGlmICghbV9wbHVnaW5W
aWV3KQorICAgICAgICBkb2N1bWVudExvYWRlci0+d3JpdGVyKCktPnNldEVuY29kaW5nKG1fcmVz
cG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7CisgICAgZWxzZSB7CiAgICAgICAgIG1f
cGx1Z2luVmlldy0+ZGlkRmluaXNoTG9hZGluZygpOwogICAgICAgICBtX3BsdWdpblZpZXcgPSAw
OwogICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7CkluZGV4OiBXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gNzMyNzMpCisrKyBXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUwOSw3ICs0NTA5
LDcgQEAKIGNvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2VuY29kaW5nKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKLSAgICBTdHJpbmcgZW5jb2RpbmcgPSBjb3JlKHdlYlZp
ZXcpLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOworICAgIFN0
cmluZyBlbmNvZGluZyA9IGNvcmUod2ViVmlldyktPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5s
b2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CiAgICAgaWYgKGVuY29kaW5nLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgd2ViVmlldy0+cHJpdi0+ZW5jb2RpbmcgPSBlbmNv
ZGluZy51dGY4KCk7CkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNzMyODApCisrKyBXZWJLaXQvZ3RrL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTEyLTAzICBOYXRlIENo
YXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIERvY3VtZW50V3JpdGVyLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0ODkKKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAgICog
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9l
bmNvZGluZyk6CisKIDIwMTAtMTItMDIgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KSW5kZXg6IFdlYktpdC93
eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCShyZXZpc2lvbiA3
MzI3MykKKysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MzQsOCArNDM0LDcgQEAKIHsKICAgICBpZiAoIW1fcGx1Z2lu
VmlldykgewogICAgICAgICBpZiAobV9maXJzdERhdGEpIHsKLSAgICAgICAgICAgIEZyYW1lTG9h
ZGVyKiBmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKLSAgICAgICAgICAgIGZsLT53cml0ZXIo
KS0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKKyAg
ICAgICAgICAgIGxvYWRlci0+d3JpdGVyKCktPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVu
Y29kaW5nTmFtZSgpLCBmYWxzZSk7CiAgICAgICAgICAgICBtX2ZpcnN0RGF0YSA9IGZhbHNlOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKSW5kZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2aXNpb24gNzMyODApCisrKyBXZWJLaXQv
d3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTItMDMg
IE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY2FsbHMgdG8gRG9jdW1lbnRXcml0
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDQ4
OQorCisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50V3g6OmZpbmlzaGVkTG9hZGluZyk6CisK
IDIwMTAtMTItMDEgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzMyODApCisrKyBXZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTEyLTAzICBOYXRl
IENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIERvY3VtZW50V3JpdGVyLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0ODkKKwor
ICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9jYW5Q
cm92aWRlRG9jdW1lbnRTb3VyY2VdKToKKwogMjAxMC0xMi0wMiAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZlcnQgcjczMjE3IGFuZCByNzMyMjcg
YmVjYXVzZSBvZiBjb250aW51ZWQgYnVzdGFnZS4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0J
KHJldmlzaW9uIDczMjczKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MzMsNyArOTMzLDcgQEAKIC0gKEJPT0wpX2NhblByb3ZpZGVEb2N1bWVu
dFNvdXJjZQogewogICAgIEZyYW1lKiBmcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7Ci0gICAg
U3RyaW5nIG1pbWVUeXBlID0gZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+bWltZVR5cGUoKTsK
KyAgICBTdHJpbmcgbWltZVR5cGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+bG9hZGVyKCktPndyaXRl
cigpLT5taW1lVHlwZSgpOwogICAgIFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEgPSBmcmFtZS0+cGFn
ZSgpID8gZnJhbWUtPnBhZ2UoKS0+cGx1Z2luRGF0YSgpIDogMDsKIAogICAgIGlmIChXZWJDb3Jl
OjpET01JbXBsZW1lbnRhdGlvbjo6aXNUZXh0TUlNRVR5cGUobWltZVR5cGUpIHx8CkluZGV4OiBX
ZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuY3BwCShyZXZpc2lvbiA3MzI3MykKKysrIFdlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUwLDggKzQ1
MCw3IEBACiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmZpbmlzaGVkTG9hZGluZyhEb2N1
bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCiB7CiAgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsK
LSAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGRvY3VtZW50TG9hZGVyLT5mcmFtZUxvYWRl
cigpOwotICAgICAgICBsb2FkZXItPndyaXRlcigpLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRl
eHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOworICAgICAgICBkb2N1bWVudExvYWRlci0+d3JpdGVy
KCktPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFdlYktpdC93aW5jZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwkocmV2aXNpb24gNzMyODApCisrKyBX
ZWJLaXQvd2luY2UvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTAtMTItMDMgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY2FsbHMgdG8gRG9j
dW1lbnRXcml0ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MDQ4OQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
aW5DRS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50V2luQ0U6OmZpbmlz
aGVkTG9hZGluZyk6CisKIDIwMTAtMTItMDEgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDczMjcz
KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIkNvbGxlY3Rpb25UeXBlLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNp
bmNsdWRlICJDb250YWluZXJOb2RlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudFRp
bWluZy5oIgogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKQEAgLTU1LDYgKzU2LDcgQEAKIGNs
YXNzIEFYT2JqZWN0Q2FjaGU7CiBjbGFzcyBDREFUQVNlY3Rpb247CiBjbGFzcyBDYWNoZWRDU1NT
dHlsZVNoZWV0OworY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBDYWNoZWRTY3Jp
cHQ7CiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgQ2hhcmFjdGVyRGF0YTsK
QEAgLTY3LDcgKzY5LDYgQEAKIGNsYXNzIERPTVNlbGVjdGlvbjsKIGNsYXNzIERPTVdpbmRvdzsK
IGNsYXNzIERhdGFiYXNlVGhyZWFkOwotY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFz
cyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3MgRG9jdW1lbnRX
ZWFrUmVmZXJlbmNlOwpAQCAtNTQ4LDYgKzU0OSw5IEBACiAgICAgLy8gdG8gZ2V0IHZpc3VhbGx5
IG9yZGVyZWQgaGVicmV3IGFuZCBhcmFiaWMgcGFnZXMgcmlnaHQKICAgICB2b2lkIHNldFZpc3Vh
bGx5T3JkZXJlZCgpOwogICAgIGJvb2wgdmlzdWFsbHlPcmRlcmVkKCkgY29uc3QgeyByZXR1cm4g
bV92aXN1YWxseU9yZGVyZWQ7IH0KKyAgICAKKyAgICB2b2lkIHNldERvY3VtZW50TG9hZGVyKERv
Y3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikgeyBtX2RvY3VtZW50TG9hZGVyID0gZG9jdW1l
bnRMb2FkZXI7IH0KKyAgICBEb2N1bWVudExvYWRlciogbG9hZGVyKCkgY29uc3QgeyByZXR1cm4g
bV9kb2N1bWVudExvYWRlcjsgfQogCiAgICAgdm9pZCBvcGVuKERvY3VtZW50KiBvd25lckRvY3Vt
ZW50ID0gMCk7CiAgICAgdm9pZCBpbXBsaWNpdE9wZW4oKTsKQEAgLTExMzYsNiArMTE0MCw3IEBA
CiAgICAgYm9vbCBtX2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3I7CiAKICAgICBGcmFtZSogbV9m
cmFtZTsKKyAgICBEb2N1bWVudExvYWRlciogbV9kb2N1bWVudExvYWRlcjsKICAgICBPd25QdHI8
Q2FjaGVkUmVzb3VyY2VMb2FkZXI+IG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiAgICAgUmVmUHRy
PERvY3VtZW50UGFyc2VyPiBtX3BhcnNlcjsKICAgICBib29sIG1fd2VsbEZvcm1lZDsKSW5kZXg6
IFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzI3MykKKysrIFdlYkNvcmUvZG9tL1Njcmlw
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOCArMjkyLDggQEAKIAogICAgIC8v
IElmIGNoYXJzZXQgaGFzIG5vdCBiZWVuIGRlY2xhcmVkIGluIHNjcmlwdCB0YWcsIGZhbGwgYmFj
ayB0byBmcmFtZSBlbmNvZGluZy4KICAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAg
ICAgICAgICAgIGNoYXJzZXQgPSBmcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygp
OworICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+bG9hZGVyKCkpCisgICAgICAgICAgICBjaGFyc2V0ID0gbG9hZGVyLT53cml0ZXIoKS0+
ZW5jb2RpbmcoKTsKICAgICB9CiAKICAgICByZXR1cm4gY2hhcnNldDsKSW5kZXg6IFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDczMjczKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MjcsNiArNDI3LDkgQEAKICAgICBtX2lnbm9yZUF1dG9mb2N1cyA9IGZhbHNlOwog
CiAgICAgbV9mcmFtZSA9IGZyYW1lOworICAgIG1fZG9jdW1lbnRMb2FkZXIgPSBmcmFtZSA/IGZy
YW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSA6IDA7CisgICAgaWYgKG1fZG9j
dW1lbnRMb2FkZXIpCisgICAgICAgIG1fZG9jdW1lbnRMb2FkZXItPndyaXRlcigpLT5zZXRGcmFt
ZShmcmFtZSk7CiAKICAgICBpZiAoZnJhbWUgfHwgIXVybC5pc0VtcHR5KCkpCiAgICAgICAgIHNl
dFVSTCh1cmwpOwpAQCAtMjA1Myw5ICsyMDU2LDggQEAKICAgICBGcmFtZSogZnJhbWUgPSB0aGlz
LT5mcmFtZSgpOwogICAgIGlmIChmcmFtZSkgewogICAgICAgICAvLyBUaGlzIGNvZGUgY2FsbHMg
aW1wbGljaXRDbG9zZSgpIGlmIGFsbCBsb2FkaW5nIGhhcyBjb21wbGV0ZWQuCi0gICAgICAgIEZy
YW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICAgICAgZnJhbWVM
b2FkZXItPndyaXRlcigpLT5lbmRJZk5vdExvYWRpbmdNYWluUmVzb3VyY2UoKTsKLSAgICAgICAg
ZnJhbWVMb2FkZXItPmNoZWNrQ29tcGxldGVkKCk7CisgICAgICAgIGxvYWRlcigpLT53cml0ZXIo
KS0+ZW5kSWZOb3RMb2FkaW5nTWFpblJlc291cmNlKCk7CisgICAgICAgIGZyYW1lLT5sb2FkZXIo
KS0+Y2hlY2tDb21wbGV0ZWQoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBCZWNhdXNlIHdl
IGhhdmUgbm8gZnJhbWUsIHdlIGRvbid0IGtub3cgaWYgYWxsIGxvYWRpbmcgaGFzIGNvbXBsZXRl
ZCwKICAgICAgICAgLy8gc28gd2UganVzdCBjYWxsIGltcGxpY2l0Q2xvc2UoKSBpbW1lZGlhdGVs
eS4gRklYTUU6IFRoaXMgbWlnaHQgZmlyZQpAQCAtMzcxMiw3ICszNzE0LDcgQEAKICAgICBEYXRl
Q29tcG9uZW50cyBkYXRlOwogICAgIGJvb2wgZm91bmREYXRlID0gZmFsc2U7CiAgICAgaWYgKG1f
ZnJhbWUpIHsKLSAgICAgICAgU3RyaW5nIGh0dHBMYXN0TW9kaWZpZWQgPSBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoIkxhc3Qt
TW9kaWZpZWQiKTsKKyAgICAgICAgU3RyaW5nIGh0dHBMYXN0TW9kaWZpZWQgPSBtX2RvY3VtZW50
TG9hZGVyLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZCgiTGFzdC1Nb2RpZmllZCIpOwogICAg
ICAgICBpZiAoIWh0dHBMYXN0TW9kaWZpZWQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBkYXRl
LnNldE1pbGxpc2Vjb25kc1NpbmNlRXBvY2hGb3JEYXRlVGltZShwYXJzZURhdGUoaHR0cExhc3RN
b2RpZmllZCkpOwogICAgICAgICAgICAgZm91bmREYXRlID0gdHJ1ZTsKQEAgLTQyMzAsNyArNDIz
Miw3IEBACiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKEluc3BlY3RvckNvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSBwYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAg
ICAgICAgIGNvbnRyb2xsZXItPm1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50KGYtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLCB1cmwoKSk7CisgICAgICAgICAgICBjb250cm9sbGVy
LT5tYWluUmVzb3VyY2VGaXJlZERPTUNvbnRlbnRFdmVudChtX2RvY3VtZW50TG9hZGVyLCB1cmwo
KSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC00NDQ0LDggKzQ0NDYsNyBAQAogICAgICAgICAvLyBs
b2FkIGxvY2FsIHJlc291cmNlcy4gIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY3NTYKICAgICAgICAgLy8gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTc2MCBmb3IgZnVydGhlcgogICAgICAgICAvLyBkaXNjdXNzaW9uLgot
ICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKTsKLSAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyICYmIGRvY3Vt
ZW50TG9hZGVyLT5zdWJzdGl0dXRlRGF0YSgpLmlzVmFsaWQoKSkKKyAgICAgICAgaWYgKG1fZG9j
dW1lbnRMb2FkZXItPnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpKQogICAgICAgICAgICAgc2Vj
dXJpdHlPcmlnaW4oKS0+Z3JhbnRMb2FkTG9jYWxSZXNvdXJjZXMoKTsKICAgICB9CiAKQEAgLTQ1
MjUsNyArNDUyNiw3IEBACiAgICAgLy8gRklYTUU6IEVsaW1pbmF0ZSB0aGlzIHJlZHVuZGFuY3ku
CiAgICAgc2V0VVJMKHVybCk7CiAgICAgZi0+bG9hZGVyKCktPnNldFVSTCh1cmwpOwotICAgIGYt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXBsYWNlUmVxdWVzdFVSTEZvclNhbWVEb2N1
bWVudE5hdmlnYXRpb24odXJsKTsKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5yZXBsYWNlUmVxdWVz
dFVSTEZvclNhbWVEb2N1bWVudE5hdmlnYXRpb24odXJsKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6
c3RhdGVQb3BwZWQoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzdGF0ZU9iamVjdCkKSW5kZXg6IFdl
YkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gNzMyNzMpCisrKyBXZWJD
b3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgs
NyArMTY4LDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgY2hhcnNl
dCA9IGF0dHJzLmdldCgiY2hhcnNldCIpOwogICAgICAgICAgICAgICAgIGlmIChjaGFyc2V0Lmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IGRvY3VtZW50KCktPmZyYW1l
KCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAg
Y2hhcnNldCA9IGRvY3VtZW50KCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKIAog
ICAgICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpLT5yZXF1ZXN0Q1NTU3R5bGVTaGVldCh1cmwsIGNoYXJzZXQpOwogICAgICAgICAg
ICAgfQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDczMjgwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw2MyBAQAorMjAxMC0xMi0wMyAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1ha2UgRG9jdW1lbnRXcml0ZXIgYSBtZW1iZXIgb2YgRG9jdW1lbnRMb2FkZXIKKyAgICAg
ICAgaW5zdGVhZCBvZiBGcmFtZUxvYWRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUwNDg5CisKKyAgICAgICAgUmVmYWN0b3IsIG5vIG5ldyB0ZXN0
cy4KKworICAgICAgICAqIGJpbmRpbmdzL1NjcmlwdENvbnRyb2xsZXJCYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwpOgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNsb3NlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpsYXN0TW9kaWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OmZpbmlzaGVkUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW5p
dFNlY3VyaXR5Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlVVJM
Rm9yUHVzaE9yUmVwbGFjZVN0YXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXREb2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6bG9hZGVyKToKKyAgICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y2hlY2tT
dHlsZVNoZWV0KToKKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpzY3JpcHRDaGFyc2V0KToKKyAgICAgICAgKiBodG1sL0hU
TUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnBy
b2Nlc3MpOgorICAgICAgICAqIGh0bWwvTWVkaWFEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYURvY3VtZW50OjpyZXBsYWNlTWVkaWFFbGVtZW50VGltZXJGaXJlZCk6CisgICAg
ICAgICogaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5E
b2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnRTdHJ1Y3R1cmUpOgorICAgICAgICAqIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
RG9jdW1lbnRMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmZpbmlz
aGVkTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6Y29tbWl0RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0dXBGb3JSZXBsYWNlQnlN
SU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0RnJhbWUpOgor
ICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI6OndyaXRlcik6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50V3JpdGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFdyaXRlcjo6c2V0RnJhbWUpOgorICAgICAgICAq
IGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
RnJhbWVMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmluaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpyZWNlaXZlZEZpcnN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6dHJhbnNpdGlvblRvQ29tbWl0dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyOjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpmaW5pc2hlZExvYWRp
bmdEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6YWRkRXh0cmFGaWVs
ZHNUb1JlcXVlc3QpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6Om5vdGlmaWVyKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RQcmVsb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmVu
Y29kaW5nRnJvbUFjY2VwdENoYXJzZXQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZGF0YUNoYW5nZWQpOgorCiAyMDEw
LTEyLTAzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhQnVpbGRlci5jcHAJKHJldmlzaW9uIDczMjczKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDEwICs5NCw3
IEBACiAgICAgICAgICAgICByZXR1cm4gZW5jb2Rpbmc7CiAgICAgfQogCi0gICAgaWYgKEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gZnJhbWUtPmxvYWRl
cigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKLQotICAgIHJldHVybiBMYXRpbjFFbmNvZGluZygp
OworICAgIHJldHVybiBkb2N1bWVudC0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwog
fQogCiBWZWN0b3I8Y2hhcj4gRm9ybURhdGFCdWlsZGVyOjpnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5
U3RyaW5nKCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3Bw
CShyZXZpc2lvbiA3MzI3MykKKysrIFdlYkNvcmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAvLyAgICAgICAg
c3luY2hyb25vdXNseSBjYW4gY2F1c2UgY3Jhc2hlczoKICAgICAvLyAgICAgICAgaHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3ODIKICAgICBpZiAoc2hvdWxkUmVwbGFj
ZURvY3VtZW50SWZKYXZhU2NyaXB0VVJMID09IFJlcGxhY2VEb2N1bWVudElmSmF2YVNjcmlwdFVS
TCkKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5yZXBsYWNlRG9jdW1lbnQo
c2NyaXB0UmVzdWx0KTsKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bG9hZGVyKCktPndy
aXRlcigpLT5yZXBsYWNlRG9jdW1lbnQoc2NyaXB0UmVzdWx0KTsKIAogICAgIHJldHVybiB0cnVl
OwogfQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gNzMyNzMpCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
OCwxMCArMjc4LDEwIEBACiAgICAgICAgIGxvYWRlci0+bG9hZChmYWtlUmVxdWVzdCwgZmFsc2Up
OyAvLyBNYWtlIHN1cmUgdGhlIERvY3VtZW50TG9hZGVyIGlzIGNyZWF0ZWQKICAgICAgICAgbG9h
ZGVyLT5wb2xpY3lDaGVja2VyKCktPmNhbmNlbENoZWNrKCk7IC8vIGNhbmNlbCBhbnkgcG9saWN5
IGNoZWNrcwogICAgICAgICBsb2FkZXItPmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpOwotICAgICAg
ICBsb2FkZXItPndyaXRlcigpLT5zZXRNSU1FVHlwZSgiaW1hZ2Uvc3ZnK3htbCIpOwotICAgICAg
ICBsb2FkZXItPndyaXRlcigpLT5iZWdpbihLVVJMKCkpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRv
Y3VtZW50Ci0gICAgICAgIGxvYWRlci0+d3JpdGVyKCktPmFkZERhdGEoZGF0YSgpLT5kYXRhKCks
IGRhdGEoKS0+c2l6ZSgpKTsKLSAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+ZW5kKCk7CisgICAg
ICAgIGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPnNldE1JTUVUeXBl
KCJpbWFnZS9zdmcreG1sIik7CisgICAgICAgIGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIo
KS0+d3JpdGVyKCktPmJlZ2luKEtVUkwoKSk7IC8vIGNyZWF0ZSB0aGUgZW1wdHkgZG9jdW1lbnQK
KyAgICAgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+YWRkRGF0
YShkYXRhKCktPmRhdGEoKSwgZGF0YSgpLT5zaXplKCkpOworICAgICAgICBsb2FkZXItPmFjdGl2
ZURvY3VtZW50TG9hZGVyKCktPndyaXRlcigpLT5lbmQoKTsKICAgICAgICAgZnJhbWUtPnZpZXco
KS0+c2V0VHJhbnNwYXJlbnQodHJ1ZSk7IC8vIFNWRyBJbWFnZXMgYXJlIHRyYW5zcGFyZW50Lgog
ICAgIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDczMjczKQor
KysgV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
NSw4ICsyMTUsOCBAQAogICAgICAgICAvLyBhbHNvLCBkb24ndCBsb2FkIHN0eWxlIHNoZWV0cyBm
b3Igc3RhbmRhbG9uZSBkb2N1bWVudHMKICAgICAgICAgCiAgICAgICAgIFN0cmluZyBjaGFyc2V0
ID0gZ2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKLSAgICAgICAgaWYgKGNoYXJzZXQuaXNFbXB0
eSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICBjaGFyc2V0ID0gZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOworICAgICAgICBp
ZiAoY2hhcnNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjaGFyc2V0ID0gZG9jdW1lbnQoKS0+
bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwogCiAgICAgICAgIGlmIChtX2NhY2hlZFNo
ZWV0KSB7CiAgICAgICAgICAgICBpZiAobV9sb2FkaW5nKQpJbmRleDogV2ViQ29yZS9odG1sL1Bs
dWdpbkRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiA3MzI3MykKKysrIFdlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAKICAgICBtX2VtYmVkRWxl
bWVudC0+c2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2luIik7CiAgICAgbV9lbWJlZEVsZW1l
bnQtPnNldEF0dHJpYnV0ZShzcmNBdHRyLCBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7Ci0g
ICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5taW1lVHlwZSgpKTsKKyAgICBtX2VtYmVkRWxlbWVu
dC0+c2V0QXR0cmlidXRlKHR5cGVBdHRyLCBkb2N1bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCkt
Pm1pbWVUeXBlKCkpOwogCiAgICAgc3RhdGljX2Nhc3Q8UGx1Z2luRG9jdW1lbnQqPihkb2N1bWVu
dCgpKS0+c2V0UGx1Z2luTm9kZShtX2VtYmVkRWxlbWVudCk7CiAKSW5kZXg6IFdlYkNvcmUvaHRt
bC9NZWRpYURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvTWVkaWFEb2N1
bWVudC5jcHAJKHJldmlzaW9uIDczMjczKQorKysgV2ViQ29yZS9odG1sL01lZGlhRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAKICAgICAgICAgZW1iZWRFbGVt
ZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEwMCUiKTsKICAgICAgICAgZW1iZWRFbGVt
ZW50LT5zZXRBdHRyaWJ1dGUobmFtZUF0dHIsICJwbHVnaW4iKTsKICAgICAgICAgZW1iZWRFbGVt
ZW50LT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdXJsKCkuc3RyaW5nKCkpOwotICAgICAgICBlbWJl
ZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgZnJhbWUoKS0+bG9hZGVyKCktPndyaXRl
cigpLT5taW1lVHlwZSgpKTsKKyAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUodHlw
ZUF0dHIsIGxvYWRlcigpLT53cml0ZXIoKS0+bWltZVR5cGUoKSk7CiAKICAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYzsKICAgICAgICAgdmlkZW9FbGVtZW50LT5wYXJlbnROb2RlKCktPnJlcGxhY2VD
aGlsZChlbWJlZEVsZW1lbnQsIHZpZGVvRWxlbWVudCwgZWMpOwpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAkocmV2aXNpb24gNzMyNzMpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNiBAQAogICAgICwgbV9wb2xpY3lDaGVj
a2VyKGZyYW1lKQogICAgICwgbV9oaXN0b3J5KGZyYW1lKQogICAgICwgbV9ub3RpZmVyKGZyYW1l
KQotICAgICwgbV93cml0ZXIoZnJhbWUpCiAgICAgLCBtX3N1YmZyYW1lTG9hZGVyKGZyYW1lKQog
ICAgICwgbV9zdGF0ZShGcmFtZVN0YXRlQ29tbWl0dGVkUGFnZSkKICAgICAsIG1fbG9hZFR5cGUo
RnJhbWVMb2FkVHlwZVN0YW5kYXJkKQpAQCAtMjMyLDggKzIzMSw4IEBACiAgICAgc2V0U3RhdGUo
RnJhbWVTdGF0ZVByb3Zpc2lvbmFsKTsKICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIt
PnNldFJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UoS1VSTCgpLCAidGV4dC9odG1sIiwgMCwgU3Ry
aW5nKCksIFN0cmluZygpKSk7CiAgICAgbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyLT5maW5p
c2hlZExvYWRpbmcoKTsKLSAgICB3cml0ZXIoKS0+YmVnaW4oS1VSTCgpLCBmYWxzZSk7Ci0gICAg
d3JpdGVyKCktPmVuZCgpOworICAgIG1fZG9jdW1lbnRMb2FkZXItPndyaXRlcigpLT5iZWdpbihL
VVJMKCksIGZhbHNlKTsKKyAgICBtX2RvY3VtZW50TG9hZGVyLT53cml0ZXIoKS0+ZW5kKCk7CiAg
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y2FuY2VsUGFyc2luZygpOwogICAgIG1fc3RhdGVNYWNo
aW5lLmFkdmFuY2VUbyhGcmFtZUxvYWRlclN0YXRlTWFjaGluZTo6RGlzcGxheWluZ0luaXRpYWxF
bXB0eURvY3VtZW50KTsKICAgICBtX2RpZENhbGxJbXBsaWNpdENsb3NlID0gdHJ1ZTsKQEAgLTU5
Miw3ICs1OTEsOCBAQAogICAgIC8vIERvIG5vdCBkcm9wIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhl
IFNjcmlwdENvbnRyb2xsZXIgYW5kIHZpZXcgYXJlIGNsZWFyZWQKICAgICAvLyBhcyBzb21lIGRl
c3RydWN0b3JzIG1pZ2h0IHN0aWxsIHRyeSB0byBhY2Nlc3MgdGhlIGRvY3VtZW50LgogICAgIG1f
ZnJhbWUtPnNldERvY3VtZW50KDApOwotICAgIHdyaXRlcigpLT5jbGVhcigpOworICAgIGlmIChh
Y3RpdmVEb2N1bWVudExvYWRlcigpKQorICAgICAgICBhY3RpdmVEb2N1bWVudExvYWRlcigpLT53
cml0ZXIoKS0+Y2xlYXIoKTsKIAogICAgIG1fc3ViZnJhbWVMb2FkZXIuY2xlYXIoKTsKIApAQCAt
NjExLDggKzYxMSw4IEBACiAKIHZvaWQgRnJhbWVMb2FkZXI6OnJlY2VpdmVkRmlyc3REYXRhKCkK
IHsKLSAgICB3cml0ZXIoKS0+YmVnaW4obV93b3JraW5nVVJMLCBmYWxzZSk7Ci0gICAgd3JpdGVy
KCktPnNldERvY3VtZW50V2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uKCk7CisgICAgYWN0aXZl
RG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPmJlZ2luKG1fd29ya2luZ1VSTCwgZmFsc2UpOwor
ICAgIGFjdGl2ZURvY3VtZW50TG9hZGVyKCktPndyaXRlcigpLT5zZXREb2N1bWVudFdhc0xvYWRl
ZEFzUGFydE9mTmF2aWdhdGlvbigpOwogCiAgICAgZGlzcGF0Y2hEaWRDb21taXRMb2FkKCk7CiAg
ICAgZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdHNJbkFsbFdvcmxkcygpOwpAQCAtMjAxMiw3
ICsyMDEyLDcgQEAKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAot
ICAgIHdyaXRlcigpLT5zZXRNSU1FVHlwZShkbC0+cmVzcG9uc2VNSU1FVHlwZSgpKTsKKyAgICBt
X2RvY3VtZW50TG9hZGVyLT53cml0ZXIoKS0+c2V0TUlNRVR5cGUoZGwtPnJlc3BvbnNlTUlNRVR5
cGUoKSk7CiAKICAgICAvLyBUZWxsIHRoZSBjbGllbnQgd2UndmUgY29tbWl0dGVkIHRoaXMgVVJM
LgogICAgIEFTU0VSVChtX2ZyYW1lLT52aWV3KCkpOwpAQCAtMjE0OCw4ICsyMTQ4LDYgQEAKICAg
ICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+c2V0VVJMKGRvY3VtZW50LT51cmwoKSk7CiAgICAgbV9m
cmFtZS0+ZG9tV2luZG93KCktPnNldFNlY3VyaXR5T3JpZ2luKGRvY3VtZW50LT5zZWN1cml0eU9y
aWdpbigpKTsKIAotICAgIHdyaXRlcigpLT5zZXREZWNvZGVyKGRvY3VtZW50LT5kZWNvZGVyKCkp
OwotCiAgICAgdXBkYXRlRmlyc3RQYXJ0eUZvckNvb2tpZXMoKTsKIAogICAgIGNhY2hlZEZyYW1l
LnJlc3RvcmUoKTsKQEAgLTIyNDIsNyArMjI0MCw3IEBACiAgICAgQXJjaGl2ZVJlc291cmNlKiBt
YWluUmVzb3VyY2UgPSBhcmNoaXZlLT5tYWluUmVzb3VyY2UoKTsKICAgICBsb2FkZXItPnNldFBh
cnNlZEFyY2hpdmVEYXRhKG1haW5SZXNvdXJjZS0+ZGF0YSgpKTsKIAotICAgIHdyaXRlcigpLT5z
ZXRNSU1FVHlwZShtYWluUmVzb3VyY2UtPm1pbWVUeXBlKCkpOworICAgIGxvYWRlci0+d3JpdGVy
KCktPnNldE1JTUVUeXBlKG1haW5SZXNvdXJjZS0+bWltZVR5cGUoKSk7CiAKICAgICBjbG9zZVVS
TCgpOwogICAgIGRpZE9wZW5VUkwobWFpblJlc291cmNlLT51cmwoKSk7CkBAIC0yMjUwLDggKzIy
NDgsOCBAQAogICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKICAgICBTdHJpbmcgdXNl
ckNob3NlbkVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXIoKS0+b3ZlcnJpZGVFbmNvZGluZygpOwog
ICAgIGJvb2wgZW5jb2RpbmdJc1VzZXJDaG9zZW4gPSAhdXNlckNob3NlbkVuY29kaW5nLmlzTnVs
bCgpOwotICAgIHdyaXRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZ0lzVXNlckNob3NlbiA/IHVz
ZXJDaG9zZW5FbmNvZGluZyA6IG1haW5SZXNvdXJjZS0+dGV4dEVuY29kaW5nKCksIGVuY29kaW5n
SXNVc2VyQ2hvc2VuKTsKLSAgICB3cml0ZXIoKS0+YWRkRGF0YShtYWluUmVzb3VyY2UtPmRhdGEo
KS0+ZGF0YSgpLCBtYWluUmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKTsKKyAgICBsb2FkZXItPndy
aXRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZ0lzVXNlckNob3NlbiA/IHVzZXJDaG9zZW5FbmNv
ZGluZyA6IG1haW5SZXNvdXJjZS0+dGV4dEVuY29kaW5nKCksIGVuY29kaW5nSXNVc2VyQ2hvc2Vu
KTsKKyAgICBsb2FkZXItPndyaXRlcigpLT5hZGREYXRhKG1haW5SZXNvdXJjZS0+ZGF0YSgpLT5k
YXRhKCksIG1haW5SZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpOwogfQogCiBib29sIEZyYW1lTG9h
ZGVyOjppc1JlcGxhY2luZygpIGNvbnN0CkBAIC0yNjc1LDcgKzI2NzMsNyBAQAogICAgIC8vIEFs
d2F5cyB0cnkgVVRGLTguIElmIHRoYXQgZmFpbHMsIHRyeSBmcmFtZSBlbmNvZGluZyAoaWYgYW55
KSBhbmQgdGhlbiB0aGUgZGVmYXVsdC4KICAgICAvLyBGb3IgYSBuZXdseSBvcGVuZWQgZnJhbWUg
d2l0aCBhbiBlbXB0eSBVUkwsIGVuY29kaW5nKCkgc2hvdWxkIG5vdCBiZSB1c2VkLCBiZWNhdXNl
IHRoaXMgbWV0aG9kcyBhc2tzIGRlY29kZXIsIHdoaWNoIHVzZXMgSVNPLTg4NTktMS4KICAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwotICAgIHJlcXVlc3Quc2V0
UmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkoIlVURi04Iiwg
d3JpdGVyKCktPmRlcHJlY2F0ZWRGcmFtZUVuY29kaW5nKCksIHNldHRpbmdzID8gc2V0dGluZ3Mt
PmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkgOiBTdHJpbmcoKSk7CisgICAgcmVxdWVzdC5zZXRS
ZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSgiVVRGLTgiLCBh
Y3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+ZGVwcmVjYXRlZEZyYW1lRW5jb2Rpbmco
KSwgc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSA6IFN0cmlu
ZygpKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6YWRkSFRUUE9yaWdpbklmTmVlZGVkKFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RyaW5nIG9yaWdpbikKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDczMjczKQorKysg
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MDYsNyArNDA2LDcgQEAKIHsKICAgICBTdHJpbmcgZW5jb2Rpbmc7CiAgICAgaWYg
KHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCB8fCB0eXBlID09IENhY2hlZFJlc291cmNl
OjpDU1NTdHlsZVNoZWV0KQotICAgICAgICBlbmNvZGluZyA9IGNoYXJzZXQuaXNFbXB0eSgpID8g
bV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpIDogY2hh
cnNldDsKKyAgICAgICAgZW5jb2RpbmcgPSBjaGFyc2V0LmlzRW1wdHkoKSA/IG1fZG9jdW1lbnQt
PmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKSA6IGNoYXJzZXQ7CiAKICAgICBDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UgPSByZXF1ZXN0UmVzb3VyY2UodHlwZSwgdXJsLCBlbmNvZGluZywg
dHJ1ZSk7CiAgICAgaWYgKCFyZXNvdXJjZSB8fCAobV9wcmVsb2FkcyAmJiBtX3ByZWxvYWRzLT5j
b250YWlucyhyZXNvdXJjZSkpKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCShyZXZpc2lv
biA3MzI3MykKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgRG9jdW1lbnRMb2FkZXJfaAogCiAjaW5jbHVk
ZSAiRG9jdW1lbnRMb2FkVGltaW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRXcml0ZXIuaCIKICNp
bmNsdWRlICJOYXZpZ2F0aW9uQWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgog
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtNzIsNiArNzMsOCBAQAogICAgICAgICBG
cmFtZUxvYWRlciogZnJhbWVMb2FkZXIoKSBjb25zdDsKICAgICAgICAgTWFpblJlc291cmNlTG9h
ZGVyKiBtYWluUmVzb3VyY2VMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX21haW5SZXNvdXJjZUxv
YWRlci5nZXQoKTsgfQogICAgICAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbWFpblJlc291
cmNlRGF0YSgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgRG9jdW1lbnRXcml0ZXIqIHdyaXRl
cigpIGNvbnN0IHsgcmV0dXJuICZtX3dyaXRlcjsgfQogCiAgICAgICAgIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0KCkgY29uc3Q7CiAgICAgICAgIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0Q29weSgpIGNvbnN0OwpAQCAtMjQ2LDYgKzI0OSw4IEBA
CiAgICAgICAgIFJlc291cmNlTG9hZGVyU2V0IG1fcGx1Z0luU3RyZWFtTG9hZGVyczsKIAogICAg
ICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX21haW5SZXNvdXJjZURhdGE7CisgICAgICAgIAor
ICAgICAgICBtdXRhYmxlIERvY3VtZW50V3JpdGVyIG1fd3JpdGVyOwogCiAgICAgICAgIC8vIEEg
cmVmZXJlbmNlIHRvIGFjdHVhbCByZXF1ZXN0IHVzZWQgdG8gY3JlYXRlIHRoZSBkYXRhIHNvdXJj
ZS4KICAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IHRoZSByZXNvdXJjZUxv
YWREZWxlZ2F0ZSdzCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmgJKHJldmlzaW9uIDczMjcz
KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNiArNTMsOCBAQAogICAgIHZvaWQgZW5kKCk7CiAgICAgdm9pZCBlbmRJZk5vdExvYWRpbmdN
YWluUmVzb3VyY2UoKTsKICAgICB2b2lkIGNsZWFyKCk7CisgICAgCisgICAgdm9pZCBzZXRGcmFt
ZShGcmFtZSogZnJhbWUpIHsgbV9mcmFtZSA9IGZyYW1lOyB9CiAKICAgICBTdHJpbmcgZW5jb2Rp
bmcoKSBjb25zdDsKICAgICB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgZW5jb2Rpbmcs
IGJvb2wgdXNlckNob3Nlbik7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZp
c2lvbiA3MzI3MykKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJE
b2N1bWVudFdyaXRlci5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNDksNyArNTAsNyBAQAogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKLQorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CkBAIC03Nyw2ICs3OCw3IEBACiBEb2N1bWVudExvYWRl
cjo6RG9jdW1lbnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXEsIGNvbnN0IFN1YnN0
aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkKICAgICA6IG1fZGVmZXJNYWluUmVzb3VyY2VEYXRh
TG9hZCh0cnVlKQogICAgICwgbV9mcmFtZSgwKQorICAgICwgbV93cml0ZXIobV9mcmFtZSkKICAg
ICAsIG1fb3JpZ2luYWxSZXF1ZXN0KHJlcSkKICAgICAsIG1fc3Vic3RpdHV0ZURhdGEoc3Vic3Rp
dHV0ZURhdGEpCiAgICAgLCBtX29yaWdpbmFsUmVxdWVzdENvcHkocmVxKQpAQCAtMjc2LDcgKzI3
OCw3IEBACiAgICAgY29tbWl0SWZSZWFkeSgpOwogICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVy
ID0gZnJhbWVMb2FkZXIoKSkgewogICAgICAgICBsb2FkZXItPmZpbmlzaGVkTG9hZGluZ0RvY3Vt
ZW50KHRoaXMpOwotICAgICAgICBsb2FkZXItPndyaXRlcigpLT5lbmQoKTsKKyAgICAgICAgbV93
cml0ZXIuZW5kKCk7CiAgICAgfQogfQogCkBAIC0zMDQsMTAgKzMwNiw5IEBACiAgICAgICAgIHVz
ZXJDaG9zZW4gPSBmYWxzZTsKICAgICAgICAgZW5jb2RpbmcgPSByZXNwb25zZSgpLnRleHRFbmNv
ZGluZ05hbWUoKTsKICAgICB9Ci0gICAgLy8gRklYTUU6IERvY3VtZW50V3JpdGVyIHNob3VsZCBi
ZSBvd25lZCBieSBEb2N1bWVudExvYWRlci4KLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGVy
KCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAgICBtX3dyaXRlci5zZXRF
bmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CiAgICAgQVNTRVJUKG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnBhcnNpbmcoKSk7Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5hZGRE
YXRhKGJ5dGVzLCBsZW5ndGgpOworICAgIG1fd3JpdGVyLmFkZERhdGEoYnl0ZXMsIGxlbmd0aCk7
CiB9CiAKIGJvb2wgRG9jdW1lbnRMb2FkZXI6OmRvZXNQcm9ncmVzc2l2ZUxvYWQoY29uc3QgU3Ry
aW5nJiBNSU1FVHlwZSkgY29uc3QKQEAgLTMzNyw3ICszMzgsNyBAQAogICAgIH0KICAgICAKICAg
ICBmcmFtZUxvYWRlcigpLT5maW5pc2hlZExvYWRpbmdEb2N1bWVudCh0aGlzKTsKLSAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuZCgpOworICAgIG1fd3JpdGVyLmVuZCgpOwogICAg
IAogICAgIGZyYW1lTG9hZGVyKCktPnNldFJlcGxhY2luZygpOwogICAgIG1fZ290Rmlyc3RCeXRl
ID0gZmFsc2U7CkBAIC0zNzQsNiArMzc1LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VS
VChmcmFtZSAmJiAhbV9mcmFtZSk7CiAgICAgbV9mcmFtZSA9IGZyYW1lOworICAgIG1fd3JpdGVy
LnNldEZyYW1lKGZyYW1lKTsKICAgICBhdHRhY2hUb0ZyYW1lKCk7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuaAkocmV2aXNpb24gNzMyNzMpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjZGVmaW5lIEZyYW1lTG9hZGVy
X2gKIAogI2luY2x1ZGUgIkNhY2hlUG9saWN5LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRXcml0ZXIu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJIaXN0b3J5Q29udHJvbGxlci5oIgpAQCAtOTgsNyAr
OTcsNiBAQAogICAgIFBvbGljeUNoZWNrZXIqIHBvbGljeUNoZWNrZXIoKSBjb25zdCB7IHJldHVy
biAmbV9wb2xpY3lDaGVja2VyOyB9CiAgICAgSGlzdG9yeUNvbnRyb2xsZXIqIGhpc3RvcnkoKSBj
b25zdCB7IHJldHVybiAmbV9oaXN0b3J5OyB9CiAgICAgUmVzb3VyY2VMb2FkTm90aWZpZXIqIG5v
dGlmaWVyKCkgY29uc3QgeyByZXR1cm4gJm1fbm90aWZlcjsgfQotICAgIERvY3VtZW50V3JpdGVy
KiB3cml0ZXIoKSBjb25zdCB7IHJldHVybiAmbV93cml0ZXI7IH0KICAgICBTdWJmcmFtZUxvYWRl
ciogc3ViZnJhbWVMb2FkZXIoKSBjb25zdCB7IHJldHVybiAmbV9zdWJmcmFtZUxvYWRlcjsgfQog
CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGNvb2wsIHBlb3BsZS4gVGhlcmUgYXJlIHRvbyBt
YW55IGRpZmZlcmVudCBmdW5jdGlvbnMgdGhhdCBhbGwgc3RhcnQgbG9hZHMuCkBAIC00MjcsNyAr
NDI1LDYgQEAKICAgICBtdXRhYmxlIFBvbGljeUNoZWNrZXIgbV9wb2xpY3lDaGVja2VyOwogICAg
IG11dGFibGUgSGlzdG9yeUNvbnRyb2xsZXIgbV9oaXN0b3J5OwogICAgIG11dGFibGUgUmVzb3Vy
Y2VMb2FkTm90aWZpZXIgbV9ub3RpZmVyOwotICAgIG11dGFibGUgRG9jdW1lbnRXcml0ZXIgbV93
cml0ZXI7CiAgICAgbXV0YWJsZSBTdWJmcmFtZUxvYWRlciBtX3N1YmZyYW1lTG9hZGVyOwogICAg
IG11dGFibGUgRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUgbV9zdGF0ZU1hY2hpbmU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75922</attachid>
            <date>2010-12-08 10:17:08 -0800</date>
            <delta_ts>2010-12-08 12:43:13 -0800</delta_ts>
            <desc>Attempt to fix crashes in FrameLoader::init()</desc>
            <filename>writer2.txt</filename>
            <type>text/plain</type>
            <size>35542</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzM1MjcpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMTItMDggIE5hdGUg
Q2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY2FsbHMgdG8gRG9jdW1lbnRXcml0ZXIuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDQ4OQorCisg
ICAgICAgICogc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkNvbnRleHRNZW51Q2xpZW50SW1wbDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgor
ICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAgICogc3Jj
L1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZW5jb2Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmxvYWRKYXZhU2NyaXB0VVJMKToK
KyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFn
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzZXJpYWxpemUpOgor
ICAgICAgICAqIHNyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R2V0Rm9ybUVuY29kaW5nKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFnZUVuY29kaW5nKToKKwogMjAxMC0xMi0wNiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
IFdlaW5pZy4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVy
SW1wbC5jcHAJKHJldmlzaW9uIDczNDQ3KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdl
U2VyaWFsaXplckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAKICAg
ICAgICAgICAgIC8vIEdldCBlbmNvZGluZyBpbmZvLgogICAgICAgICAgICAgU3RyaW5nIHhtbEVu
Y29kaW5nID0gcGFyYW0tPmRvY3VtZW50LT54bWxFbmNvZGluZygpOwogICAgICAgICAgICAgaWYg
KHhtbEVuY29kaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB4bWxFbmNvZGluZyA9IHBh
cmFtLT5kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwor
ICAgICAgICAgICAgICAgIHhtbEVuY29kaW5nID0gcGFyYW0tPmRvY3VtZW50LT5sb2FkZXIoKS0+
d3JpdGVyKCktPmVuY29kaW5nKCk7CiAgICAgICAgICAgICBpZiAoeG1sRW5jb2RpbmcuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIHhtbEVuY29kaW5nID0gVVRGOEVuY29kaW5nKCkubmFtZSgp
OwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiPD94bWwgdmVyc2lvbj1cIiIpOwpAQCAtNTA1
LDcgKzUwNSw3IEBACiAKICAgICAgICAgZGlkU2VyaWFsaXphdGlvbiA9IHRydWU7CiAKLSAgICAg
ICAgU3RyaW5nIGVuY29kaW5nID0gd2ViRnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIo
KS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gZG9jdW1lbnQtPmxvYWRl
cigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKICAgICAgICAgY29uc3QgVGV4dEVuY29kaW5nJiB0
ZXh0RW5jb2RpbmcgPSBlbmNvZGluZy5pc0VtcHR5KCkgPyBVVEY4RW5jb2RpbmcoKSA6IFRleHRF
bmNvZGluZyhlbmNvZGluZyk7CiAgICAgICAgIFN0cmluZyBkaXJlY3RvcnlOYW1lID0gdXJsID09
IG1haW5VUkwgPyBtX2xvY2FsRGlyZWN0b3J5TmFtZSA6ICIiOwogCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gNzM0NDcpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzMSw3ICsxNDMxLDcgQEAK
ICAgICBpZiAoIW1fcGFnZS5nZXQoKSkKICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwogCi0g
ICAgcmV0dXJuIG1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2Rp
bmcoKTsKKyAgICByZXR1cm4gbV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+bG9hZGVy
KCktPndyaXRlcigpLT5lbmNvZGluZygpOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRQYWdl
RW5jb2RpbmcoY29uc3QgV2ViU3RyaW5nJiBlbmNvZGluZ05hbWUpCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA3MzQ0NykK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA5OCw3ICsxMDk4LDcgQEAKICAgICAgICAgLy8gSG93ZXZlciwgd2Ugb25s
eSB3YW50IHRvIGRvIHRoaXMgaWYgbWFrZVJlcHJlc2VudGF0aW9uIGhhcyBiZWVuIGNhbGxlZCwg
dG8KICAgICAgICAgLy8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9uIHRoZSBNYWMuCiAgICAgICAgIGlm
IChtX2hhc1JlcHJlc2VudGF0aW9uKQotICAgICAgICAgICAgZGwtPmZyYW1lTG9hZGVyKCktPndy
aXRlcigpLT5zZXRFbmNvZGluZygiIiwgZmFsc2UpOworICAgICAgICAgICAgZGwtPndyaXRlcigp
LT5zZXRFbmNvZGluZygiIiwgZmFsc2UpOwogICAgIH0KIH0KIApJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gNzM0NDcpCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQAogCiAgICAgLy8gSWYgaXQncyBub3QgYSBsaW5rLCBh
biBpbWFnZSwgYSBtZWRpYSBlbGVtZW50LCBvciBhbiBpbWFnZS9tZWRpYSBsaW5rLAogICAgIC8v
IHNob3cgYSBzZWxlY3Rpb24gbWVudSBvciBhIG1vcmUgZ2VuZXJpYyBwYWdlIG1lbnUuCi0gICAg
ZGF0YS5mcmFtZUVuY29kaW5nID0gc2VsZWN0ZWRGcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5l
bmNvZGluZygpOworICAgIGRhdGEuZnJhbWVFbmNvZGluZyA9IHNlbGVjdGVkRnJhbWUtPmRvY3Vt
ZW50KCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKIAogICAgIC8vIFNlbmQgdGhl
IGZyYW1lIGFuZCBwYWdlIFVSTHMgaW4gYW55IGNhc2UuCiAgICAgZGF0YS5wYWdlVVJMID0gdXJs
RnJvbUZyYW1lKG1fd2ViVmlldy0+bWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpKTsKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDczNDQ3KQorKysgV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDUsNyAr
NTQ1LDcgQEAKIAogV2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6ZW5jb2RpbmcoKSBjb25zdAogewot
ICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CisgICAg
cmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2Rpbmco
KTsKIH0KIAogV2ViU2l6ZSBXZWJGcmFtZUltcGw6OnNjcm9sbE9mZnNldCgpIGNvbnN0CkBAIC0y
MjcxLDcgKzIyNzEsNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fZnJhbWUtPm5h
dmlnYXRpb25TY2hlZHVsZXIoKS0+bG9jYXRpb25DaGFuZ2VQZW5kaW5nKCkpCi0gICAgICAgIG1f
ZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+cmVwbGFjZURvY3VtZW50KHNjcmlwdFJlc3VsdCk7
CisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmxvYWRlcigpLT53cml0ZXIoKS0+cmVwbGFj
ZURvY3VtZW50KHNjcmlwdFJlc3VsdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAkocmV2
aXNpb24gNzM0NDcpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDcgQEAKICAgICAgICAgaWYgKGVuY29k
aW5nLT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNvbnN0IEZy
YW1lKiBmcmFtZSA9IGZvcm0tPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgKmVuY29kaW5nID0g
ZnJhbWUgPyBUZXh0RW5jb2RpbmcoZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2Rpbmco
KSkgOiBMYXRpbjFFbmNvZGluZygpOworICAgICplbmNvZGluZyA9IFRleHRFbmNvZGluZyhmb3Jt
LT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCkpOwogfQogCiAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHN1Ym1pdCByZXF1ZXN0IHJlc3VsdHMgaW4gYW4gSFRUUCBVUkwu
CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
UXQuY3BwCShyZXZpc2lvbiA3MzQ0NykKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE5LDcgKzYxOSw3IEBACiAg
ICAgICAgIC8vIEhvd2V2ZXIsIHdlIG9ubHkgd2FudCB0byBkbyB0aGlzIGlmIG1ha2VSZXByZXNl
bnRhdGlvbiBoYXMgYmVlbiBjYWxsZWQsIHRvCiAgICAgICAgIC8vIG1hdGNoIHRoZSBiZWhhdmlv
ciBvbiB0aGUgTWFjLgogICAgICAgICBpZiAobV9oYXNSZXByZXNlbnRhdGlvbikKLSAgICAgICAg
ICAgIGxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+d3JpdGVyKCktPnNldEVuY29kaW5nKCIiLCBmYWxz
ZSk7CisgICAgICAgICAgICBsb2FkZXItPndyaXRlcigpLT5zZXRFbmNvZGluZygiIiwgZmFsc2Up
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX3BsdWdpblZpZXctPmlzUGx1Z2lu
VmlldygpKQpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
cXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzUyNykKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0xMi0wOCAgTmF0ZSBDaGFwaW4gIDxq
YXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0byBEb2N1bWVudFdyaXRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNDg5CisKKyAgICAgICAgKiBB
cGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZTo6c2V0VXJsKToKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmZpbmlzaGVkTG9hZGluZyk6CisKIDIwMTAtMTItMDcg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFRyeSB0byBmaXggYnVp
bGQuCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCShyZXZpc2lvbiA3MzQ0NykKKysrIFdlYktpdC9xdC9B
cGkvcXdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAzLDggKzcwMyw4IEBACiB2b2lk
IFFXZWJGcmFtZTo6c2V0VXJsKGNvbnN0IFFVcmwgJnVybCkKIHsKICAgICBjb25zdCBRVXJsIGFi
c29sdXRlID0gZW5zdXJlQWJzb2x1dGVVcmwodXJsKTsKLSAgICBkLT5mcmFtZS0+bG9hZGVyKCkt
PndyaXRlcigpLT5iZWdpbihhYnNvbHV0ZSk7Ci0gICAgZC0+ZnJhbWUtPmxvYWRlcigpLT53cml0
ZXIoKS0+ZW5kKCk7CisgICAgZC0+ZnJhbWUtPmRvY3VtZW50KCktPmxvYWRlcigpLT53cml0ZXIo
KS0+YmVnaW4oYWJzb2x1dGUpOworICAgIGQtPmZyYW1lLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+
d3JpdGVyKCktPmVuZCgpOwogICAgIGxvYWQoYWJzb2x1dGUpOwogfQogCkluZGV4OiBXZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkocmV2
aXNpb24gNzM0NDcpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxNiwxMCArMTAxNiw5IEBACiAKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZyhXZWJDb3JlOjpEb2N1bWVudExvYWRl
ciogZG9jdW1lbnRMb2FkZXIpCiB7Ci0gICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKLSAgICAgICAg
RnJhbWVMb2FkZXIqIGxvYWRlciA9IGRvY3VtZW50TG9hZGVyLT5mcmFtZUxvYWRlcigpOwotICAg
ICAgICBsb2FkZXItPndyaXRlcigpLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGlu
Z05hbWUoKSwgZmFsc2UpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKCFtX3BsdWdpblZpZXcpCisg
ICAgICAgIGRvY3VtZW50TG9hZGVyLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50
ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKKyAgICBlbHNlIHsKICAgICAgICAgbV9wbHVnaW5W
aWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7CiAgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CiAgICAg
ICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKSW5kZXg6IFdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiA3MzQ0NykKKysrIFdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTA5LDcgKzQ1MDksNyBAQAog
Y29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfdmlld19nZXRfZW5jb2RpbmcoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVco
d2ViVmlldyksIE5VTEwpOwotICAgIFN0cmluZyBlbmNvZGluZyA9IGNvcmUod2ViVmlldyktPm1h
aW5GcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CisgICAgU3RyaW5nIGVu
Y29kaW5nID0gY29yZSh3ZWJWaWV3KS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPmxvYWRlcigp
LT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKICAgICBpZiAoZW5jb2RpbmcuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICB3ZWJWaWV3LT5wcml2LT5lbmNvZGluZyA9IGVuY29kaW5nLnV0
ZjgoKTsKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9n
dGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzUyNykKKysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMTItMDggIE5hdGUgQ2hhcGluICA8
amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBVcGRhdGUgY2FsbHMgdG8gRG9jdW1lbnRXcml0ZXIuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDQ4OQorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKToKKyAgICAgICAgKiB3ZWJraXQv
d2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2VuY29kaW5n
KToKKwogMjAxMC0xMi0wOCAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KSW5kZXg6IFdlYktpdC93eC9XZWJLaXRT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9X
ZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCShyZXZpc2lvbiA3MzQ0NykKKysr
IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MzQsOCArNDM0LDcgQEAKIHsKICAgICBpZiAoIW1fcGx1Z2luVmlldykgewog
ICAgICAgICBpZiAobV9maXJzdERhdGEpIHsKLSAgICAgICAgICAgIEZyYW1lTG9hZGVyKiBmbCA9
IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKLSAgICAgICAgICAgIGZsLT53cml0ZXIoKS0+c2V0RW5j
b2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKKyAgICAgICAgICAg
IGxvYWRlci0+d3JpdGVyKCktPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFt
ZSgpLCBmYWxzZSk7CiAgICAgICAgICAgICBtX2ZpcnN0RGF0YSA9IGZhbHNlOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKSW5kZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2aXNpb24gNzM1MjcpCisrKyBXZWJLaXQvd3gvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTItMDggIE5hdGUgQ2hh
cGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY2FsbHMgdG8gRG9jdW1lbnRXcml0ZXIuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDQ4OQorCisgICAg
ICAgICogV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50V3g6OmZpbmlzaGVkTG9hZGluZyk6CisKIDIwMTAtMTIt
MDcgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MzM5Mi4KSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzUyNykKKysr
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTAtMTItMDggIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY2FsbHMgdG8gRG9j
dW1lbnRXcml0ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MDQ4OQorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1b
V2ViRnJhbWUgX2NhblByb3ZpZGVEb2N1bWVudFNvdXJjZV0pOgorCiAyMDEwLTEyLTA3ICBCcmlh
biBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBKb2huIFN1bGxpdmFuLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gNzM0
NDcpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTkzMyw3ICs5MzMsNyBAQAogLSAoQk9PTClfY2FuUHJvdmlkZURvY3VtZW50U291cmNlCiB7CiAg
ICAgRnJhbWUqIGZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKLSAgICBTdHJpbmcgbWltZVR5
cGUgPSBmcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5taW1lVHlwZSgpOworICAgIFN0cmluZyBt
aW1lVHlwZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPm1pbWVUeXBl
KCk7CiAgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSA9IGZyYW1lLT5wYWdlKCkgPyBmcmFtZS0+
cGFnZSgpLT5wbHVnaW5EYXRhKCkgOiAwOwogCiAgICAgaWYgKFdlYkNvcmU6OkRPTUltcGxlbWVu
dGF0aW9uOjppc1RleHRNSU1FVHlwZShtaW1lVHlwZSkgfHwKSW5kZXg6IFdlYktpdC93aW5jZS9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHAJKHJl
dmlzaW9uIDczNDQ3KQorKysgV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50V2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTAsOCArNDUwLDcgQEAKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBk
b2N1bWVudExvYWRlcikKIHsKICAgICBpZiAoIW1fcGx1Z2luVmlldykgewotICAgICAgICBGcmFt
ZUxvYWRlciogbG9hZGVyID0gZG9jdW1lbnRMb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgICAg
IGxvYWRlci0+d3JpdGVyKCktPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFt
ZSgpLCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50TG9hZGVyLT53cml0ZXIoKS0+c2V0RW5jb2Rp
bmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApJbmRleDogV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvd2luY2UvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzUyNykKKysrIFdlYktpdC93aW5jZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0xMi0wOCAgTmF0
ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0byBEb2N1bWVudFdyaXRlci4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNDg5CisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRXaW5DRTo6ZmluaXNoZWRMb2FkaW5nKToK
KwogMjAxMC0xMi0wNyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjczMzkyLgpJbmRleDogV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZp
c2lvbiA3MzQ0NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDb2xsZWN0aW9uVHlwZS5oIgogI2luY2x1ZGUgIkNv
bG9yLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRUaW1pbmcuaCIKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCkBAIC01NSw2ICs1
Niw3IEBACiBjbGFzcyBBWE9iamVjdENhY2hlOwogY2xhc3MgQ0RBVEFTZWN0aW9uOwogY2xhc3Mg
Q2FjaGVkQ1NTU3R5bGVTaGVldDsKK2NsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogY2xhc3Mg
Q2FjaGVkU2NyaXB0OwogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKIGNsYXNzIENoYXJh
Y3RlckRhdGE7CkBAIC02Nyw3ICs2OSw2IEBACiBjbGFzcyBET01TZWxlY3Rpb247CiBjbGFzcyBE
T01XaW5kb3c7CiBjbGFzcyBEYXRhYmFzZVRocmVhZDsKLWNsYXNzIENhY2hlZFJlc291cmNlTG9h
ZGVyOwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIERvY3VtZW50VHlwZTsKIGNsYXNz
IERvY3VtZW50V2Vha1JlZmVyZW5jZTsKQEAgLTU0OSw2ICs1NTAsOSBAQAogICAgIC8vIHRvIGdl
dCB2aXN1YWxseSBvcmRlcmVkIGhlYnJldyBhbmQgYXJhYmljIHBhZ2VzIHJpZ2h0CiAgICAgdm9p
ZCBzZXRWaXN1YWxseU9yZGVyZWQoKTsKICAgICBib29sIHZpc3VhbGx5T3JkZXJlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlzdWFsbHlPcmRlcmVkOyB9CisgICAgCisgICAgdm9pZCBzZXREb2N1bWVu
dExvYWRlcihEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpIHsgbV9kb2N1bWVudExvYWRl
ciA9IGRvY3VtZW50TG9hZGVyOyB9CisgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZG9jdW1lbnRMb2FkZXI7IH0KIAogICAgIHZvaWQgb3BlbihEb2N1bWVudCog
b3duZXJEb2N1bWVudCA9IDApOwogICAgIHZvaWQgaW1wbGljaXRPcGVuKCk7CkBAIC0xMTM3LDYg
KzExNDEsNyBAQAogICAgIGJvb2wgbV9kaWRDYWxjdWxhdGVTdHlsZVNlbGVjdG9yOwogCiAgICAg
RnJhbWUqIG1fZnJhbWU7CisgICAgRG9jdW1lbnRMb2FkZXIqIG1fZG9jdW1lbnRMb2FkZXI7CiAg
ICAgT3duUHRyPENhY2hlZFJlc291cmNlTG9hZGVyPiBtX2NhY2hlZFJlc291cmNlTG9hZGVyOwog
ICAgIFJlZlB0cjxEb2N1bWVudFBhcnNlcj4gbV9wYXJzZXI7CiAgICAgYm9vbCBtX3dlbGxGb3Jt
ZWQ7CkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gNzM0NDcpCisrKyBXZWJDb3Jl
L2RvbS9TY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDggKzI5Miw4IEBA
CiAKICAgICAvLyBJZiBjaGFyc2V0IGhhcyBub3QgYmVlbiBkZWNsYXJlZCBpbiBzY3JpcHQgdGFn
LCBmYWxsIGJhY2sgdG8gZnJhbWUgZW5jb2RpbmcuCiAgICAgaWYgKGNoYXJzZXQuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmZy
YW1lKCkpCi0gICAgICAgICAgICBjaGFyc2V0ID0gZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+
ZW5jb2RpbmcoKTsKKyAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPmxvYWRlcigpKQorICAgICAgICAgICAgY2hhcnNldCA9IGxvYWRlci0+
d3JpdGVyKCktPmVuY29kaW5nKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNoYXJzZXQ7CkluZGV4
OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiA3MzQ0NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDI4LDYgKzQyOCw3IEBACiAgICAgbV9pZ25vcmVBdXRvZm9jdXMg
PSBmYWxzZTsKIAogICAgIG1fZnJhbWUgPSBmcmFtZTsKKyAgICBtX2RvY3VtZW50TG9hZGVyID0g
ZnJhbWUgPyBmcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgOiAwOwogCiAg
ICAgaWYgKGZyYW1lIHx8ICF1cmwuaXNFbXB0eSgpKQogICAgICAgICBzZXRVUkwodXJsKTsKQEAg
LTIwNTQsOSArMjA1NSw4IEBACiAgICAgRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKICAg
ICBpZiAoZnJhbWUpIHsKICAgICAgICAgLy8gVGhpcyBjb2RlIGNhbGxzIGltcGxpY2l0Q2xvc2Uo
KSBpZiBhbGwgbG9hZGluZyBoYXMgY29tcGxldGVkLgotICAgICAgICBGcmFtZUxvYWRlciogZnJh
bWVMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgICAgIGZyYW1lTG9hZGVyLT53cml0ZXIo
KS0+ZW5kSWZOb3RMb2FkaW5nTWFpblJlc291cmNlKCk7Ci0gICAgICAgIGZyYW1lTG9hZGVyLT5j
aGVja0NvbXBsZXRlZCgpOworICAgICAgICBsb2FkZXIoKS0+d3JpdGVyKCktPmVuZElmTm90TG9h
ZGluZ01haW5SZXNvdXJjZSgpOworICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNoZWNrQ29tcGxl
dGVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQmVjYXVzZSB3ZSBoYXZlIG5vIGZyYW1l
LCB3ZSBkb24ndCBrbm93IGlmIGFsbCBsb2FkaW5nIGhhcyBjb21wbGV0ZWQsCiAgICAgICAgIC8v
IHNvIHdlIGp1c3QgY2FsbCBpbXBsaWNpdENsb3NlKCkgaW1tZWRpYXRlbHkuIEZJWE1FOiBUaGlz
IG1pZ2h0IGZpcmUKQEAgLTM3MTMsNyArMzcxMyw3IEBACiAgICAgRGF0ZUNvbXBvbmVudHMgZGF0
ZTsKICAgICBib29sIGZvdW5kRGF0ZSA9IGZhbHNlOwogICAgIGlmIChtX2ZyYW1lKSB7Ci0gICAg
ICAgIFN0cmluZyBodHRwTGFzdE1vZGlmaWVkID0gbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKCJMYXN0LU1vZGlmaWVkIik7Cisg
ICAgICAgIFN0cmluZyBodHRwTGFzdE1vZGlmaWVkID0gbV9kb2N1bWVudExvYWRlci0+cmVzcG9u
c2UoKS5odHRwSGVhZGVyRmllbGQoIkxhc3QtTW9kaWZpZWQiKTsKICAgICAgICAgaWYgKCFodHRw
TGFzdE1vZGlmaWVkLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29u
ZHNTaW5jZUVwb2NoRm9yRGF0ZVRpbWUocGFyc2VEYXRlKGh0dHBMYXN0TW9kaWZpZWQpKTsKICAg
ICAgICAgICAgIGZvdW5kRGF0ZSA9IHRydWU7CkBAIC00MjMxLDcgKzQyMzEsNyBAQAogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9s
bGVyID0gcGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBjb250cm9s
bGVyLT5tYWluUmVzb3VyY2VGaXJlZERPTUNvbnRlbnRFdmVudChmLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKSwgdXJsKCkpOworICAgICAgICAgICAgY29udHJvbGxlci0+bWFpblJlc291cmNl
RmlyZWRET01Db250ZW50RXZlbnQobV9kb2N1bWVudExvYWRlciwgdXJsKCkpOwogI2VuZGlmCiAg
ICAgfQogfQpAQCAtNDQ0NSw4ICs0NDQ1LDcgQEAKICAgICAgICAgLy8gbG9hZCBsb2NhbCByZXNv
dXJjZXMuICBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzU2
CiAgICAgICAgIC8vIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk3NjAgZm9yIGZ1cnRoZXIKICAgICAgICAgLy8gZGlzY3Vzc2lvbi4KLSAgICAgICAgRG9jdW1l
bnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCk7Ci0gICAgICAgIGlmIChkb2N1bWVudExvYWRlciAmJiBkb2N1bWVudExvYWRlci0+c3Vi
c3RpdHV0ZURhdGEoKS5pc1ZhbGlkKCkpCisgICAgICAgIGlmIChtX2RvY3VtZW50TG9hZGVyLT5z
dWJzdGl0dXRlRGF0YSgpLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHNlY3VyaXR5T3JpZ2luKCkt
PmdyYW50TG9hZExvY2FsUmVzb3VyY2VzKCk7CiAgICAgfQogCkBAIC00NTI2LDcgKzQ1MjUsNyBA
QAogICAgIC8vIEZJWE1FOiBFbGltaW5hdGUgdGhpcyByZWR1bmRhbmN5LgogICAgIHNldFVSTCh1
cmwpOwogICAgIGYtPmxvYWRlcigpLT5zZXRVUkwodXJsKTsKLSAgICBmLT5sb2FkZXIoKS0+ZG9j
dW1lbnRMb2FkZXIoKS0+cmVwbGFjZVJlcXVlc3RVUkxGb3JTYW1lRG9jdW1lbnROYXZpZ2F0aW9u
KHVybCk7CisgICAgbV9kb2N1bWVudExvYWRlci0+cmVwbGFjZVJlcXVlc3RVUkxGb3JTYW1lRG9j
dW1lbnROYXZpZ2F0aW9uKHVybCk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnN0YXRlUG9wcGVkKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSogc3RhdGVPYmplY3QpCkluZGV4OiBXZWJDb3JlL2RvbS9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Byb2Nlc3Np
bmdJbnN0cnVjdGlvbi5jcHAJKHJldmlzaW9uIDczNDQ3KQorKysgV2ViQ29yZS9kb20vUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBACiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGNoYXJzZXQgPSBhdHRycy5nZXQo
ImNoYXJzZXQiKTsKICAgICAgICAgICAgICAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+
d3JpdGVyKCktPmVuY29kaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBkb2N1
bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CiAKICAgICAgICAgICAgICAg
ICBtX2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVx
dWVzdENTU1N0eWxlU2hlZXQodXJsLCBjaGFyc2V0KTsKICAgICAgICAgICAgIH0KSW5kZXg6IFdl
YkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biA3MzUyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NjUgQEAKKzIwMTAtMTItMDggIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIERvY3Vt
ZW50V3JpdGVyIGEgbWVtYmVyIG9mIERvY3VtZW50TG9hZGVyCisgICAgICAgIGluc3RlYWQgb2Yg
RnJhbWVMb2FkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MDQ4OQorCisgICAgICAgIFJlZmFjdG9yLCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9TY3JpcHRDb250cm9sbGVyQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDb250cm9sbGVyOjpleGVjdXRlSWZKYXZhU2NyaXB0VVJMKToKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6bGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpmaW5pc2hl
ZFBhcnNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZVVSTEZvclB1c2hPclJlcGxh
Y2VTdGF0ZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6c2V0RG9jdW1lbnRMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmxvYWRlcik6CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVldCk6Cisg
ICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RWxlbWVudDo6c2NyaXB0Q2hhcnNldCk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKToKKyAgICAg
ICAgKiBodG1sL01lZGlhRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFEb2N1
bWVudDo6cmVwbGFjZU1lZGlhRWxlbWVudFRpbWVyRmlyZWQpOgorICAgICAgICAqIGh0bWwvUGx1
Z2luRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRG9jdW1lbnRQYXJzZXI6
OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OkRvY3VtZW50TG9hZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpmaW5pc2hlZExvYWRpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmNvbW1pdERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNldHVwRm9yUmVwbGFjZUJ5TUlNRVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OnNldEZyYW1lKToKKyAgICAgICAgKiBsb2Fk
ZXIvRG9jdW1lbnRMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjp3
cml0ZXIpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFdyaXRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudFdyaXRlcjo6YmVnaW4pOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVu
dFdyaXRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRXcml0ZXI6OnNldEZyYW1lKToK
KyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OkZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpp
bml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjbGVhcik6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6cmVjZWl2ZWRGaXJzdERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlcjo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Zmlu
aXNoZWRMb2FkaW5nRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmFk
ZEV4dHJhRmllbGRzVG9SZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpub3RpZmllcik6CisgICAgICAgICogbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UHJlbG9hZCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFC
dWlsZGVyOjplbmNvZGluZ0Zyb21BY2NlcHRDaGFyc2V0KToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRhdGFDaGFuZ2Vk
KToKKwogMjAxMC0xMi0wOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAJKHJldmlzaW9uIDczNDQ3KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk0LDEwICs5NCw3IEBACiAgICAgICAgICAgICByZXR1cm4gZW5jb2Rpbmc7CiAgICAg
fQogCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICBy
ZXR1cm4gZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKLQotICAgIHJldHVy
biBMYXRpbjFFbmNvZGluZygpOworICAgIHJldHVybiBkb2N1bWVudC0+bG9hZGVyKCktPndyaXRl
cigpLT5lbmNvZGluZygpOwogfQogCiBWZWN0b3I8Y2hhcj4gRm9ybURhdGFCdWlsZGVyOjpnZW5l
cmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvU2NyaXB0
Q29udHJvbGxlckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvU2NyaXB0
Q29udHJvbGxlckJhc2UuY3BwCShyZXZpc2lvbiA3MzQ0NykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
U2NyaXB0Q29udHJvbGxlckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcg
QEAKICAgICAvLyAgICAgICAgc3luY2hyb25vdXNseSBjYW4gY2F1c2UgY3Jhc2hlczoKICAgICAv
LyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3ODIKICAg
ICBpZiAoc2hvdWxkUmVwbGFjZURvY3VtZW50SWZKYXZhU2NyaXB0VVJMID09IFJlcGxhY2VEb2N1
bWVudElmSmF2YVNjcmlwdFVSTCkKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPndyaXRlcigp
LT5yZXBsYWNlRG9jdW1lbnQoc2NyaXB0UmVzdWx0KTsKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+bG9hZGVyKCktPndyaXRlcigpLT5yZXBsYWNlRG9jdW1lbnQoc2NyaXB0UmVzdWx0KTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAko
cmV2aXNpb24gNzM0NDcpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3OCwxMCArMjc4LDEwIEBACiAgICAgICAgIGxvYWRlci0+bG9hZChm
YWtlUmVxdWVzdCwgZmFsc2UpOyAvLyBNYWtlIHN1cmUgdGhlIERvY3VtZW50TG9hZGVyIGlzIGNy
ZWF0ZWQKICAgICAgICAgbG9hZGVyLT5wb2xpY3lDaGVja2VyKCktPmNhbmNlbENoZWNrKCk7IC8v
IGNhbmNlbCBhbnkgcG9saWN5IGNoZWNrcwogICAgICAgICBsb2FkZXItPmNvbW1pdFByb3Zpc2lv
bmFsTG9hZCgpOwotICAgICAgICBsb2FkZXItPndyaXRlcigpLT5zZXRNSU1FVHlwZSgiaW1hZ2Uv
c3ZnK3htbCIpOwotICAgICAgICBsb2FkZXItPndyaXRlcigpLT5iZWdpbihLVVJMKCkpOyAvLyBj
cmVhdGUgdGhlIGVtcHR5IGRvY3VtZW50Ci0gICAgICAgIGxvYWRlci0+d3JpdGVyKCktPmFkZERh
dGEoZGF0YSgpLT5kYXRhKCksIGRhdGEoKS0+c2l6ZSgpKTsKLSAgICAgICAgbG9hZGVyLT53cml0
ZXIoKS0+ZW5kKCk7CisgICAgICAgIGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3Jp
dGVyKCktPnNldE1JTUVUeXBlKCJpbWFnZS9zdmcreG1sIik7CisgICAgICAgIGxvYWRlci0+YWN0
aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPmJlZ2luKEtVUkwoKSk7IC8vIGNyZWF0ZSB0
aGUgZW1wdHkgZG9jdW1lbnQKKyAgICAgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigp
LT53cml0ZXIoKS0+YWRkRGF0YShkYXRhKCktPmRhdGEoKSwgZGF0YSgpLT5zaXplKCkpOworICAg
ICAgICBsb2FkZXItPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPndyaXRlcigpLT5lbmQoKTsKICAg
ICAgICAgZnJhbWUtPnZpZXcoKS0+c2V0VHJhbnNwYXJlbnQodHJ1ZSk7IC8vIFNWRyBJbWFnZXMg
YXJlIHRyYW5zcGFyZW50LgogICAgIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDczNDQ3KQorKysgV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzMCw4ICsyMzAsOCBAQAogICAgICAgICAvLyBhbHNvLCBkb24ndCBs
b2FkIHN0eWxlIHNoZWV0cyBmb3Igc3RhbmRhbG9uZSBkb2N1bWVudHMKICAgICAgICAgCiAgICAg
ICAgIFN0cmluZyBjaGFyc2V0ID0gZ2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKLSAgICAgICAg
aWYgKGNoYXJzZXQuaXNFbXB0eSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAg
ICBjaGFyc2V0ID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNv
ZGluZygpOworICAgICAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjaGFy
c2V0ID0gZG9jdW1lbnQoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwogCiAgICAg
ICAgIGlmIChtX2NhY2hlZFNoZWV0KSB7CiAgICAgICAgICAgICBpZiAobV9sb2FkaW5nKQpJbmRl
eDogV2ViQ29yZS9odG1sL1BsdWdpbkRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA3MzQ0NykKKysrIFdlYkNvcmUvaHRt
bC9QbHVnaW5Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAKICAg
ICAKICAgICBtX2VtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2luIik7
CiAgICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShzcmNBdHRyLCBkb2N1bWVudCgpLT51
cmwoKS5zdHJpbmcoKSk7Ci0gICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0
ciwgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5taW1lVHlwZSgpKTsK
KyAgICBtX2VtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHR5cGVBdHRyLCBkb2N1bWVudCgpLT5s
b2FkZXIoKS0+d3JpdGVyKCktPm1pbWVUeXBlKCkpOwogCiAgICAgc3RhdGljX2Nhc3Q8UGx1Z2lu
RG9jdW1lbnQqPihkb2N1bWVudCgpKS0+c2V0UGx1Z2luTm9kZShtX2VtYmVkRWxlbWVudCk7CiAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAJKHJldmlzaW9uIDczNDQ3KQorKysgV2ViQ29yZS9o
dG1sL01lZGlhRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAK
ICAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEwMCUiKTsK
ICAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUobmFtZUF0dHIsICJwbHVnaW4iKTsK
ICAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgdXJsKCkuc3RyaW5n
KCkpOwotICAgICAgICBlbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgZnJhbWUo
KS0+bG9hZGVyKCktPndyaXRlcigpLT5taW1lVHlwZSgpKTsKKyAgICAgICAgZW1iZWRFbGVtZW50
LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIGxvYWRlcigpLT53cml0ZXIoKS0+bWltZVR5cGUoKSk7
CiAKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICAgICAgdmlkZW9FbGVtZW50LT5wYXJl
bnROb2RlKCktPnJlcGxhY2VDaGlsZChlbWJlZEVsZW1lbnQsIHZpZGVvRWxlbWVudCwgZWMpOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNzM0NDcpCisrKyBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNiBAQAog
ICAgICwgbV9wb2xpY3lDaGVja2VyKGZyYW1lKQogICAgICwgbV9oaXN0b3J5KGZyYW1lKQogICAg
ICwgbV9ub3RpZmVyKGZyYW1lKQotICAgICwgbV93cml0ZXIoZnJhbWUpCiAgICAgLCBtX3N1YmZy
YW1lTG9hZGVyKGZyYW1lKQogICAgICwgbV9zdGF0ZShGcmFtZVN0YXRlQ29tbWl0dGVkUGFnZSkK
ICAgICAsIG1fbG9hZFR5cGUoRnJhbWVMb2FkVHlwZVN0YW5kYXJkKQpAQCAtMjMyLDggKzIzMSw4
IEBACiAgICAgc2V0U3RhdGUoRnJhbWVTdGF0ZVByb3Zpc2lvbmFsKTsKICAgICBtX3Byb3Zpc2lv
bmFsRG9jdW1lbnRMb2FkZXItPnNldFJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UoS1VSTCgpLCAi
dGV4dC9odG1sIiwgMCwgU3RyaW5nKCksIFN0cmluZygpKSk7CiAgICAgbV9wcm92aXNpb25hbERv
Y3VtZW50TG9hZGVyLT5maW5pc2hlZExvYWRpbmcoKTsKLSAgICB3cml0ZXIoKS0+YmVnaW4oS1VS
TCgpLCBmYWxzZSk7Ci0gICAgd3JpdGVyKCktPmVuZCgpOworICAgIGFjdGl2ZURvY3VtZW50TG9h
ZGVyKCktPndyaXRlcigpLT5iZWdpbihLVVJMKCksIGZhbHNlKTsKKyAgICBhY3RpdmVEb2N1bWVu
dExvYWRlcigpLT53cml0ZXIoKS0+ZW5kKCk7CiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y2Fu
Y2VsUGFyc2luZygpOwogICAgIG1fc3RhdGVNYWNoaW5lLmFkdmFuY2VUbyhGcmFtZUxvYWRlclN0
YXRlTWFjaGluZTo6RGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3VtZW50KTsKICAgICBtX2RpZENh
bGxJbXBsaWNpdENsb3NlID0gdHJ1ZTsKQEAgLTU5MCw3ICs1ODksNiBAQAogICAgIC8vIERvIG5v
dCBkcm9wIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhlIFNjcmlwdENvbnRyb2xsZXIgYW5kIHZpZXcg
YXJlIGNsZWFyZWQKICAgICAvLyBhcyBzb21lIGRlc3RydWN0b3JzIG1pZ2h0IHN0aWxsIHRyeSB0
byBhY2Nlc3MgdGhlIGRvY3VtZW50LgogICAgIG1fZnJhbWUtPnNldERvY3VtZW50KDApOwotICAg
IHdyaXRlcigpLT5jbGVhcigpOwogCiAgICAgbV9zdWJmcmFtZUxvYWRlci5jbGVhcigpOwogCkBA
IC02MDksOCArNjA3LDggQEAKIAogdm9pZCBGcmFtZUxvYWRlcjo6cmVjZWl2ZWRGaXJzdERhdGEo
KQogewotICAgIHdyaXRlcigpLT5iZWdpbihtX3dvcmtpbmdVUkwsIGZhbHNlKTsKLSAgICB3cml0
ZXIoKS0+c2V0RG9jdW1lbnRXYXNMb2FkZWRBc1BhcnRPZk5hdmlnYXRpb24oKTsKKyAgICBhY3Rp
dmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+YmVnaW4obV93b3JraW5nVVJMLCBmYWxzZSk7
CisgICAgYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPnNldERvY3VtZW50V2FzTG9h
ZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uKCk7CiAKICAgICBkaXNwYXRjaERpZENvbW1pdExvYWQoKTsK
ICAgICBkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0c0luQWxsV29ybGRzKCk7CkBAIC0yMDA4
LDcgKzIwMDYsNyBAQAogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQog
Ci0gICAgd3JpdGVyKCktPnNldE1JTUVUeXBlKGRsLT5yZXNwb25zZU1JTUVUeXBlKCkpOworICAg
IG1fZG9jdW1lbnRMb2FkZXItPndyaXRlcigpLT5zZXRNSU1FVHlwZShkbC0+cmVzcG9uc2VNSU1F
VHlwZSgpKTsKIAogICAgIC8vIFRlbGwgdGhlIGNsaWVudCB3ZSd2ZSBjb21taXR0ZWQgdGhpcyBV
UkwuCiAgICAgQVNTRVJUKG1fZnJhbWUtPnZpZXcoKSk7CkBAIC0yMTQ0LDggKzIxNDIsNiBAQAog
ICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5zZXRVUkwoZG9jdW1lbnQtPnVybCgpKTsKICAgICBt
X2ZyYW1lLT5kb21XaW5kb3coKS0+c2V0U2VjdXJpdHlPcmlnaW4oZG9jdW1lbnQtPnNlY3VyaXR5
T3JpZ2luKCkpOwogCi0gICAgd3JpdGVyKCktPnNldERlY29kZXIoZG9jdW1lbnQtPmRlY29kZXIo
KSk7Ci0KICAgICB1cGRhdGVGaXJzdFBhcnR5Rm9yQ29va2llcygpOwogCiAgICAgY2FjaGVkRnJh
bWUucmVzdG9yZSgpOwpAQCAtMjIzOCw3ICsyMjM0LDcgQEAKICAgICBBcmNoaXZlUmVzb3VyY2Uq
IG1haW5SZXNvdXJjZSA9IGFyY2hpdmUtPm1haW5SZXNvdXJjZSgpOwogICAgIGxvYWRlci0+c2V0
UGFyc2VkQXJjaGl2ZURhdGEobWFpblJlc291cmNlLT5kYXRhKCkpOwogCi0gICAgd3JpdGVyKCkt
PnNldE1JTUVUeXBlKG1haW5SZXNvdXJjZS0+bWltZVR5cGUoKSk7CisgICAgbG9hZGVyLT53cml0
ZXIoKS0+c2V0TUlNRVR5cGUobWFpblJlc291cmNlLT5taW1lVHlwZSgpKTsKIAogICAgIGNsb3Nl
VVJMKCk7CiAgICAgZGlkT3BlblVSTChtYWluUmVzb3VyY2UtPnVybCgpKTsKQEAgLTIyNDYsOCAr
MjI0Miw4IEBACiAgICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCkpOwogICAgIFN0cmluZyB1
c2VyQ2hvc2VuRW5jb2RpbmcgPSBkb2N1bWVudExvYWRlcigpLT5vdmVycmlkZUVuY29kaW5nKCk7
CiAgICAgYm9vbCBlbmNvZGluZ0lzVXNlckNob3NlbiA9ICF1c2VyQ2hvc2VuRW5jb2RpbmcuaXNO
dWxsKCk7Ci0gICAgd3JpdGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5nSXNVc2VyQ2hvc2VuID8g
dXNlckNob3NlbkVuY29kaW5nIDogbWFpblJlc291cmNlLT50ZXh0RW5jb2RpbmcoKSwgZW5jb2Rp
bmdJc1VzZXJDaG9zZW4pOwotICAgIHdyaXRlcigpLT5hZGREYXRhKG1haW5SZXNvdXJjZS0+ZGF0
YSgpLT5kYXRhKCksIG1haW5SZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpOworICAgIGxvYWRlci0+
d3JpdGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5nSXNVc2VyQ2hvc2VuID8gdXNlckNob3NlbkVu
Y29kaW5nIDogbWFpblJlc291cmNlLT50ZXh0RW5jb2RpbmcoKSwgZW5jb2RpbmdJc1VzZXJDaG9z
ZW4pOworICAgIGxvYWRlci0+d3JpdGVyKCktPmFkZERhdGEobWFpblJlc291cmNlLT5kYXRhKCkt
PmRhdGEoKSwgbWFpblJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7CiB9CiAKIGJvb2wgRnJhbWVM
b2FkZXI6OmlzUmVwbGFjaW5nKCkgY29uc3QKQEAgLTI2NzEsNyArMjY2Nyw3IEBACiAgICAgLy8g
QWx3YXlzIHRyeSBVVEYtOC4gSWYgdGhhdCBmYWlscywgdHJ5IGZyYW1lIGVuY29kaW5nIChpZiBh
bnkpIGFuZCB0aGVuIHRoZSBkZWZhdWx0LgogICAgIC8vIEZvciBhIG5ld2x5IG9wZW5lZCBmcmFt
ZSB3aXRoIGFuIGVtcHR5IFVSTCwgZW5jb2RpbmcoKSBzaG91bGQgbm90IGJlIHVzZWQsIGJlY2F1
c2UgdGhpcyBtZXRob2RzIGFza3MgZGVjb2Rlciwgd2hpY2ggdXNlcyBJU08tODg1OS0xLgogICAg
IFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgcmVxdWVzdC5z
ZXRSZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSgiVVRGLTgi
LCB3cml0ZXIoKS0+ZGVwcmVjYXRlZEZyYW1lRW5jb2RpbmcoKSwgc2V0dGluZ3MgPyBzZXR0aW5n
cy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSA6IFN0cmluZygpKTsKKyAgICByZXF1ZXN0LnNl
dFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KCJVVEYtOCIs
IGFjdGl2ZURvY3VtZW50TG9hZGVyKCktPndyaXRlcigpLT5kZXByZWNhdGVkRnJhbWVFbmNvZGlu
ZygpLCBzZXR0aW5ncyA/IHNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpIDogU3Ry
aW5nKCkpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjphZGRIVFRQT3JpZ2luSWZOZWVkZWQoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdHJpbmcgb3JpZ2luKQpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNzM0NDcpCisr
KyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwNiw3ICs0MDYsNyBAQAogewogICAgIFN0cmluZyBlbmNvZGluZzsKICAgICBp
ZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3Vy
Y2U6OkNTU1N0eWxlU2hlZXQpCi0gICAgICAgIGVuY29kaW5nID0gY2hhcnNldC5pc0VtcHR5KCkg
PyBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCkgOiBj
aGFyc2V0OworICAgICAgICBlbmNvZGluZyA9IGNoYXJzZXQuaXNFbXB0eSgpID8gbV9kb2N1bWVu
dC0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpIDogY2hhcnNldDsKIAogICAgIENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSA9IHJlcXVlc3RSZXNvdXJjZSh0eXBlLCB1cmwsIGVuY29kaW5n
LCB0cnVlKTsKICAgICBpZiAoIXJlc291cmNlIHx8IChtX3ByZWxvYWRzICYmIG1fcHJlbG9hZHMt
PmNvbnRhaW5zKHJlc291cmNlKSkpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgJKHJldmlz
aW9uIDczNDQ3KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBEb2N1bWVudExvYWRlcl9oCiAKICNpbmNs
dWRlICJEb2N1bWVudExvYWRUaW1pbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudFdyaXRlci5oIgog
I2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC03Miw2ICs3Myw4IEBACiAgICAgICAg
IEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlcigpIGNvbnN0OwogICAgICAgICBNYWluUmVzb3VyY2VM
b2FkZXIqIG1haW5SZXNvdXJjZUxvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFpblJlc291cmNl
TG9hZGVyLmdldCgpOyB9CiAgICAgICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBtYWluUmVz
b3VyY2VEYXRhKCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBEb2N1bWVudFdyaXRlciogd3Jp
dGVyKCkgY29uc3QgeyByZXR1cm4gJm1fd3JpdGVyOyB9CiAKICAgICAgICAgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QoKSBjb25zdDsKICAgICAgICAgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3RDb3B5KCkgY29uc3Q7CkBAIC0yNDYsNiArMjQ5LDgg
QEAKICAgICAgICAgUmVzb3VyY2VMb2FkZXJTZXQgbV9wbHVnSW5TdHJlYW1Mb2FkZXJzOwogCiAg
ICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fbWFpblJlc291cmNlRGF0YTsKKyAgICAgICAg
CisgICAgICAgIG11dGFibGUgRG9jdW1lbnRXcml0ZXIgbV93cml0ZXI7CiAKICAgICAgICAgLy8g
QSByZWZlcmVuY2UgdG8gYWN0dWFsIHJlcXVlc3QgdXNlZCB0byBjcmVhdGUgdGhlIGRhdGEgc291
cmNlLgogICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgdGhlIHJlc291cmNl
TG9hZERlbGVnYXRlJ3MKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuaAkocmV2aXNpb24gNzM0
NDcpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw4IEBACiAgICAgdm9pZCBhZGREYXRhKGNvbnN0IGNoYXIqIHN0cmluZywgaW50
IGxlbmd0aCA9IC0xLCBib29sIGZsdXNoID0gZmFsc2UpOwogICAgIHZvaWQgZW5kKCk7CiAgICAg
dm9pZCBlbmRJZk5vdExvYWRpbmdNYWluUmVzb3VyY2UoKTsKLSAgICB2b2lkIGNsZWFyKCk7Cisg
ICAgCisgICAgdm9pZCBzZXRGcmFtZShGcmFtZSogZnJhbWUpIHsgbV9mcmFtZSA9IGZyYW1lOyB9
CiAKICAgICBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdDsKICAgICB2b2lkIHNldEVuY29kaW5nKGNv
bnN0IFN0cmluZyYgZW5jb2RpbmcsIGJvb2wgdXNlckNob3Nlbik7CkBAIC03NSw2ICs3Niw3IEBA
CiAKIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnQoY29u
c3QgS1VSTCYpOworICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIEZyYW1lKiBtX2ZyYW1lOwogCklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZpc2lvbiA3MzQ0NykKKysrIFdlYkNv
cmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudFdyaXRlci5oIgogI2lu
Y2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgpAQCAtNDksNyArNTAsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLQorI2luY2x1ZGUg
IlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2Rl
Lmg+CkBAIC03Nyw2ICs3OCw3IEBACiBEb2N1bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXEsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRl
RGF0YSkKICAgICA6IG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCh0cnVlKQogICAgICwgbV9m
cmFtZSgwKQorICAgICwgbV93cml0ZXIobV9mcmFtZSkKICAgICAsIG1fb3JpZ2luYWxSZXF1ZXN0
KHJlcSkKICAgICAsIG1fc3Vic3RpdHV0ZURhdGEoc3Vic3RpdHV0ZURhdGEpCiAgICAgLCBtX29y
aWdpbmFsUmVxdWVzdENvcHkocmVxKQpAQCAtMjc2LDcgKzI3OCw3IEBACiAgICAgY29tbWl0SWZS
ZWFkeSgpOwogICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVMb2FkZXIoKSkgewog
ICAgICAgICBsb2FkZXItPmZpbmlzaGVkTG9hZGluZ0RvY3VtZW50KHRoaXMpOwotICAgICAgICBs
b2FkZXItPndyaXRlcigpLT5lbmQoKTsKKyAgICAgICAgbV93cml0ZXIuZW5kKCk7CiAgICAgfQog
fQogCkBAIC0zMDQsMTAgKzMwNiw5IEBACiAgICAgICAgIHVzZXJDaG9zZW4gPSBmYWxzZTsKICAg
ICAgICAgZW5jb2RpbmcgPSByZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKICAgICB9Ci0g
ICAgLy8gRklYTUU6IERvY3VtZW50V3JpdGVyIHNob3VsZCBiZSBvd25lZCBieSBEb2N1bWVudExv
YWRlci4KLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPnNldEVuY29kaW5nKGVuY29k
aW5nLCB1c2VyQ2hvc2VuKTsKKyAgICBtX3dyaXRlci5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNl
ckNob3Nlbik7CiAgICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCktPnBhcnNpbmcoKSk7Ci0g
ICAgbV9mcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5hZGREYXRhKGJ5dGVzLCBsZW5ndGgpOwor
ICAgIG1fd3JpdGVyLmFkZERhdGEoYnl0ZXMsIGxlbmd0aCk7CiB9CiAKIGJvb2wgRG9jdW1lbnRM
b2FkZXI6OmRvZXNQcm9ncmVzc2l2ZUxvYWQoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSkgY29uc3QK
QEAgLTMzNyw3ICszMzgsNyBAQAogICAgIH0KICAgICAKICAgICBmcmFtZUxvYWRlcigpLT5maW5p
c2hlZExvYWRpbmdEb2N1bWVudCh0aGlzKTsKLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGVy
KCktPmVuZCgpOworICAgIG1fd3JpdGVyLmVuZCgpOwogICAgIAogICAgIGZyYW1lTG9hZGVyKCkt
PnNldFJlcGxhY2luZygpOwogICAgIG1fZ290Rmlyc3RCeXRlID0gZmFsc2U7CkBAIC0zNzQsNiAr
Mzc1LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChmcmFtZSAmJiAhbV9mcmFtZSk7
CiAgICAgbV9mcmFtZSA9IGZyYW1lOworICAgIG1fd3JpdGVyLnNldEZyYW1lKGZyYW1lKTsKICAg
ICBhdHRhY2hUb0ZyYW1lKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3Jp
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAJ
KHJldmlzaW9uIDczNDQ3KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDcgQEAKIAogICAgIGJvb2wgcmVzZXRTY3JpcHRp
bmcgPSAhKG1fZnJhbWUtPmxvYWRlcigpLT5zdGF0ZU1hY2hpbmUoKS0+aXNEaXNwbGF5aW5nSW5p
dGlhbEVtcHR5RG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5pc1NlY3VyZVRyYW5zaXRpb25Ubyh1cmwpKTsKICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
Y2xlYXIocmVzZXRTY3JpcHRpbmcsIHJlc2V0U2NyaXB0aW5nKTsKKyAgICBjbGVhcigpOwogICAg
IGlmIChyZXNldFNjcmlwdGluZykKICAgICAgICAgbV9mcmFtZS0+c2NyaXB0KCktPnVwZGF0ZVBs
YXRmb3JtU2NyaXB0T2JqZWN0cygpOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9u
IDczNDQ3KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNiBAQAogI2RlZmluZSBGcmFtZUxvYWRlcl9oCiAKICNpbmNsdWRlICJDYWNo
ZVBvbGljeS5oIgotI2luY2x1ZGUgIkRvY3VtZW50V3JpdGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJTdGF0ZU1hY2hpbmUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5j
bHVkZSAiSGlzdG9yeUNvbnRyb2xsZXIuaCIKQEAgLTk4LDcgKzk3LDYgQEAKICAgICBQb2xpY3lD
aGVja2VyKiBwb2xpY3lDaGVja2VyKCkgY29uc3QgeyByZXR1cm4gJm1fcG9saWN5Q2hlY2tlcjsg
fQogICAgIEhpc3RvcnlDb250cm9sbGVyKiBoaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gJm1faGlz
dG9yeTsgfQogICAgIFJlc291cmNlTG9hZE5vdGlmaWVyKiBub3RpZmllcigpIGNvbnN0IHsgcmV0
dXJuICZtX25vdGlmZXI7IH0KLSAgICBEb2N1bWVudFdyaXRlciogd3JpdGVyKCkgY29uc3QgeyBy
ZXR1cm4gJm1fd3JpdGVyOyB9CiAgICAgU3ViZnJhbWVMb2FkZXIqIHN1YmZyYW1lTG9hZGVyKCkg
Y29uc3QgeyByZXR1cm4gJm1fc3ViZnJhbWVMb2FkZXI7IH0KIAogICAgIC8vIEZJWE1FOiBUaGlz
IGlzIG5vdCBjb29sLCBwZW9wbGUuIFRoZXJlIGFyZSB0b28gbWFueSBkaWZmZXJlbnQgZnVuY3Rp
b25zIHRoYXQgYWxsIHN0YXJ0IGxvYWRzLgpAQCAtNDI3LDcgKzQyNSw2IEBACiAgICAgbXV0YWJs
ZSBQb2xpY3lDaGVja2VyIG1fcG9saWN5Q2hlY2tlcjsKICAgICBtdXRhYmxlIEhpc3RvcnlDb250
cm9sbGVyIG1faGlzdG9yeTsKICAgICBtdXRhYmxlIFJlc291cmNlTG9hZE5vdGlmaWVyIG1fbm90
aWZlcjsKLSAgICBtdXRhYmxlIERvY3VtZW50V3JpdGVyIG1fd3JpdGVyOwogICAgIG11dGFibGUg
U3ViZnJhbWVMb2FkZXIgbV9zdWJmcmFtZUxvYWRlcjsKICAgICBtdXRhYmxlIEZyYW1lTG9hZGVy
U3RhdGVNYWNoaW5lIG1fc3RhdGVNYWNoaW5lOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77034</attachid>
            <date>2010-12-20 13:56:06 -0800</date>
            <delta_ts>2011-01-13 13:55:03 -0800</delta_ts>
            <desc>Attempt to fix crashes #2</desc>
            <filename>writer3.txt</filename>
            <type>text/plain</type>
            <size>36748</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzQwMjgpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMTItMDggIE5hdGUg
Q2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY2FsbHMgdG8gRG9jdW1lbnRXcml0ZXIuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDQ4OQorCisg
ICAgICAgICogc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkNvbnRleHRNZW51Q2xpZW50SW1wbDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgor
ICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAgICogc3Jj
L1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZW5jb2Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmxvYWRKYXZhU2NyaXB0VVJMKToK
KyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFn
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzZXJpYWxpemUpOgor
ICAgICAgICAqIHNyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R2V0Rm9ybUVuY29kaW5nKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFnZUVuY29kaW5nKToKKwogMjAxMC0xMi0xMyAg
TWlrZSBMYXd0aGVyICA8bWlrZWxhd3RoZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdl
U2VyaWFsaXplckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UGFnZVNlcmlhbGl6ZXJJbXBsLmNwcAkocmV2aXNpb24gNzQwMjgpCisrKyBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3
ICsxNjgsNyBAQAogICAgICAgICAgICAgLy8gR2V0IGVuY29kaW5nIGluZm8uCiAgICAgICAgICAg
ICBTdHJpbmcgeG1sRW5jb2RpbmcgPSBwYXJhbS0+ZG9jdW1lbnQtPnhtbEVuY29kaW5nKCk7CiAg
ICAgICAgICAgICBpZiAoeG1sRW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHht
bEVuY29kaW5nID0gcGFyYW0tPmRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCkt
PmVuY29kaW5nKCk7CisgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBwYXJhbS0+ZG9jdW1l
bnQtPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKICAgICAgICAgICAgIGlmICh4bWxF
bmNvZGluZy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBVVEY4RW5j
b2RpbmcoKS5uYW1lKCk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI8P3htbCB2ZXJzaW9u
PVwiIik7CkBAIC01MDUsNyArNTA1LDcgQEAKIAogICAgICAgICBkaWRTZXJpYWxpemF0aW9uID0g
dHJ1ZTsKIAotICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSB3ZWJGcmFtZS0+ZnJhbWUoKS0+bG9h
ZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOworICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBk
b2N1bWVudC0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwogICAgICAgICBjb25zdCBU
ZXh0RW5jb2RpbmcmIHRleHRFbmNvZGluZyA9IGVuY29kaW5nLmlzRW1wdHkoKSA/IFVURjhFbmNv
ZGluZygpIDogVGV4dEVuY29kaW5nKGVuY29kaW5nKTsKICAgICAgICAgU3RyaW5nIGRpcmVjdG9y
eU5hbWUgPSB1cmwgPT0gbWFpblVSTCA/IG1fbG9jYWxEaXJlY3RvcnlOYW1lIDogIiI7CiAKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA3NDAyOCkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQy
LDcgKzE0NDIsNyBAQAogICAgIGlmICghbV9wYWdlLmdldCgpKQogICAgICAgICByZXR1cm4gV2Vi
U3RyaW5nKCk7CiAKLSAgICByZXR1cm4gbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPndy
aXRlcigpLT5lbmNvZGluZygpOworICAgIHJldHVybiBtX3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1
bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CiB9CiAKIHZvaWQgV2ViVmll
d0ltcGw6OnNldFBhZ2VFbmNvZGluZyhjb25zdCBXZWJTdHJpbmcmIGVuY29kaW5nTmFtZSkKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHJl
dmlzaW9uIDc0MDI4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk4LDcgKzEwOTgsNyBAQAogICAgICAgICAvLyBI
b3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBpZiBtYWtlUmVwcmVzZW50YXRpb24gaGFz
IGJlZW4gY2FsbGVkLCB0bwogICAgICAgICAvLyBtYXRjaCB0aGUgYmVoYXZpb3Igb24gdGhlIE1h
Yy4KICAgICAgICAgaWYgKG1faGFzUmVwcmVzZW50YXRpb24pCi0gICAgICAgICAgICBkbC0+ZnJh
bWVMb2FkZXIoKS0+d3JpdGVyKCktPnNldEVuY29kaW5nKCIiLCBmYWxzZSk7CisgICAgICAgICAg
ICBkbC0+d3JpdGVyKCktPnNldEVuY29kaW5nKCIiLCBmYWxzZSk7CiAgICAgfQogfQogCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCShyZXZp
c2lvbiA3NDAyOCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDcgKzIyOCw3IEBACiAKICAgICAvLyBJZiBpdCdz
IG5vdCBhIGxpbmssIGFuIGltYWdlLCBhIG1lZGlhIGVsZW1lbnQsIG9yIGFuIGltYWdlL21lZGlh
IGxpbmssCiAgICAgLy8gc2hvdyBhIHNlbGVjdGlvbiBtZW51IG9yIGEgbW9yZSBnZW5lcmljIHBh
Z2UgbWVudS4KLSAgICBkYXRhLmZyYW1lRW5jb2RpbmcgPSBzZWxlY3RlZEZyYW1lLT5sb2FkZXIo
KS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CisgICAgZGF0YS5mcmFtZUVuY29kaW5nID0gc2VsZWN0
ZWRGcmFtZS0+ZG9jdW1lbnQoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwogCiAg
ICAgLy8gU2VuZCB0aGUgZnJhbWUgYW5kIHBhZ2UgVVJMcyBpbiBhbnkgY2FzZS4KICAgICBkYXRh
LnBhZ2VVUkwgPSB1cmxGcm9tRnJhbWUobV93ZWJWaWV3LT5tYWluRnJhbWVJbXBsKCktPmZyYW1l
KCkpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gNzQw
MjgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU0NSw3ICs1NDUsNyBAQAogCiBXZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjplbmNvZGlu
ZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5j
b2RpbmcoKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+bG9hZGVyKCktPndyaXRl
cigpLT5lbmNvZGluZygpOwogfQogCiBXZWJTaXplIFdlYkZyYW1lSW1wbDo6c2Nyb2xsT2Zmc2V0
KCkgY29uc3QKQEAgLTIyNzEsNyArMjI3MSw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghbV9mcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5sb2NhdGlvbkNoYW5nZVBlbmRpbmco
KSkKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5yZXBsYWNlRG9jdW1lbnQo
c2NyaXB0UmVzdWx0KTsKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bG9hZGVyKCktPndy
aXRlcigpLT5yZXBsYWNlRG9jdW1lbnQoc2NyaXB0UmVzdWx0KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9y
bURhdGEuY3BwCShyZXZpc2lvbiA3NDAyOCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Vh
cmNoYWJsZUZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsOCArNjEsNyBAQAogICAg
ICAgICBpZiAoZW5jb2RpbmctPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgY29uc3QgRnJhbWUqIGZyYW1lID0gZm9ybS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAg
ICAqZW5jb2RpbmcgPSBmcmFtZSA/IFRleHRFbmNvZGluZyhmcmFtZS0+bG9hZGVyKCktPndyaXRl
cigpLT5lbmNvZGluZygpKSA6IExhdGluMUVuY29kaW5nKCk7CisgICAgKmVuY29kaW5nID0gVGV4
dEVuY29kaW5nKGZvcm0tPmRvY3VtZW50KCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2Rpbmco
KSk7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3VibWl0IHJlcXVlc3QgcmVzdWx0cyBp
biBhbiBIVFRQIFVSTC4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRRdC5jcHAJKHJldmlzaW9uIDc0MDI4KQorKysgV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjEs
NyArNjIxLDcgQEAKICAgICAgICAgLy8gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIGRvIHRoaXMg
aWYgbWFrZVJlcHJlc2VudGF0aW9uIGhhcyBiZWVuIGNhbGxlZCwgdG8KICAgICAgICAgLy8gbWF0
Y2ggdGhlIGJlaGF2aW9yIG9uIHRoZSBNYWMuCiAgICAgICAgIGlmIChtX2hhc1JlcHJlc2VudGF0
aW9uKQotICAgICAgICAgICAgbG9hZGVyLT5mcmFtZUxvYWRlcigpLT53cml0ZXIoKS0+c2V0RW5j
b2RpbmcoIiIsIGZhbHNlKTsKKyAgICAgICAgICAgIGxvYWRlci0+d3JpdGVyKCktPnNldEVuY29k
aW5nKCIiLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1fcGx1Z2lu
Vmlldy0+aXNQbHVnaW5WaWV3KCkpCkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0MDI4KQorKysgV2ViS2l0L3F0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTEyLTA4ICBO
YXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIERvY3VtZW50V3JpdGVy
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0ODkK
KworICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lOjpzZXRV
cmwpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZmluaXNoZWRMb2FkaW5nKToK
KwogMjAxMC0xMC0yOCAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2ViZnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkocmV2aXNp
b24gNzQwMjgpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1NCw4ICs3NTQsOCBAQAogdm9pZCBRV2ViRnJhbWU6OnNldFVybChjb25zdCBRVXJsICZ1
cmwpCiB7CiAgICAgY29uc3QgUVVybCBhYnNvbHV0ZSA9IGVuc3VyZUFic29sdXRlVXJsKHVybCk7
Ci0gICAgZC0+ZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+YmVnaW4oYWJzb2x1dGUpOwotICAg
IGQtPmZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuZCgpOworICAgIGQtPmZyYW1lLT5sb2Fk
ZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPmJlZ2luKGFic29sdXRlKTsK
KyAgICBkLT5mcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPndyaXRlcigp
LT5lbmQoKTsKICAgICBsb2FkKGFic29sdXRlKTsKIH0KIApJbmRleDogV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDc0
MDI4KQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDcgQEAKICAgICA6IG1fZnJhbWUoZnJhbWUp
CiAgICAgLCBtX3BvbGljeURlY2lzaW9uKDApCiAgICAgLCBtX2xvYWRpbmdFcnJvclBhZ2UoZmFs
c2UpCisgICAgLCBtX2hhc1JlcHJlc2VudGF0aW9uKGZhbHNlKQogICAgICwgbV9wbHVnaW5WaWV3
KDApCiAgICAgLCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luKGZhbHNlKQogewpAQCAtNzc3LDcg
Kzc3OCw3IEBACiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6Om1ha2VSZXByZXNlbnRhdGlvbihX
ZWJDb3JlOjpEb2N1bWVudExvYWRlciopCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBt
X2hhc1JlcHJlc2VudGF0aW9uID0gdHJ1ZTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6
Zm9yY2VMYXlvdXQoKQpAQCAtOTc3LDcgKzk3OCw3IEBACiAKIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnQ6OnJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciopCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX2hhc1JlcHJlc2VudGF0aW9uID0gdHJ1ZTsK
IH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6d2lsbENoYW5nZVRpdGxlKFdlYkNvcmU6OkRv
Y3VtZW50TG9hZGVyKikKQEAgLTEwMjQsMTQgKzEwMjUsMTIgQEAKIAogdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBkb2N1bWVu
dExvYWRlcikKIHsKLSAgICBpZiAoIW1fcGx1Z2luVmlldykgewotICAgICAgICBGcmFtZUxvYWRl
ciogbG9hZGVyID0gZG9jdW1lbnRMb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgICAgIGxvYWRl
ci0+d3JpdGVyKCktPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBm
YWxzZSk7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7CiAgICAgICAgIG1f
cGx1Z2luVmlldy0+ZGlkRmluaXNoTG9hZGluZygpOwogICAgICAgICBtX3BsdWdpblZpZXcgPSAw
OwogICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7Ci0gICAgfQorICAg
IH0gZWxzZSBpZiAobV9oYXNSZXByZXNlbnRhdGlvbikKKyAgICAgICAgZG9jdW1lbnRMb2FkZXIt
PndyaXRlcigpLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFs
c2UpOwogfQogCiAKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmgJKHJldmlzaW9uIDc0MDI4KQorKysgV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNiAr
MTk0LDcgQEAKICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIG1fcG9saWN5RGVjaXNp
b247CiAKICAgICAgICAgYm9vbCBtX2xvYWRpbmdFcnJvclBhZ2U7CisgICAgICAgIGJvb2wgbV9o
YXNSZXByZXNlbnRhdGlvbjsKIAogICAgICAgICAvLyBQbHVnaW4gdmlldyB0byByZWRpcmVjdCBk
YXRhIHRvCiAgICAgICAgIFdlYkNvcmU6OlBsdWdpblZpZXcqIG1fcGx1Z2luVmlldzsKSW5kZXg6
IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiA3NDAyOCkKKysrIFdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjQxLDcg
KzQ2NDEsNyBAQAogY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfdmlld19nZXRfZW5jb2RpbmcoV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfV0VCX1ZJRVcod2ViVmlldyksIE5VTEwpOwotICAgIFN0cmluZyBlbmNvZGluZyA9IGNvcmUo
d2ViVmlldyktPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7Cisg
ICAgU3RyaW5nIGVuY29kaW5nID0gY29yZSh3ZWJWaWV3KS0+bWFpbkZyYW1lKCktPmRvY3VtZW50
KCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKICAgICBpZiAoZW5jb2RpbmcuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICB3ZWJWaWV3LT5wcml2LT5lbmNvZGluZyA9
IGVuY29kaW5nLnV0ZjgoKTsKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NDAyOCkKKysrIFdlYktpdC9ndGsv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMTItMDggIE5h
dGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY2FsbHMgdG8gRG9jdW1lbnRXcml0ZXIu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDQ4OQor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKToKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2VuY29kaW5nKToKKwogMjAxMC0xMi0xNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpJ
bmRleDogV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5j
cHAJKHJldmlzaW9uIDc0MDI4KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw4ICs0MzQsNyBAQAogewogICAg
IGlmICghbV9wbHVnaW5WaWV3KSB7CiAgICAgICAgIGlmIChtX2ZpcnN0RGF0YSkgewotICAgICAg
ICAgICAgRnJhbWVMb2FkZXIqIGZsID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOwotICAgICAgICAg
ICAgZmwtPndyaXRlcigpLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUo
KSwgZmFsc2UpOworICAgICAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9y
ZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICAgICAgICAgIG1fZmlyc3RE
YXRhID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpJbmRleDogV2ViS2l0L3d4L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NDAy
OCkKKysrIFdlYktpdC93eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAxMC0xMi0wOCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBjYWxscyB0
byBEb2N1bWVudFdyaXRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUwNDg5CisKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRXeDo6ZmluaXNo
ZWRMb2FkaW5nKToKKwogMjAxMC0xMC0yOCAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgpJbmRleDogV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDc0MDI4KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMyBAQAorMjAxMC0xMi0wOCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBj
YWxscyB0byBEb2N1bWVudFdyaXRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUwNDg5CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgor
ICAgICAgICAoLVtXZWJGcmFtZSBfY2FuUHJvdmlkZURvY3VtZW50U291cmNlXSk6CisKIDIwMTAt
MTItMTMgIE1pa2UgVGhvbGUgIDxtdGhvbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1z
dGFtcGVkIGJ5IEpvaG4gU3VsbGl2YW4uCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZp
c2lvbiA3NDAyOCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtOTMzLDcgKzkzMyw3IEBACiAtIChCT09MKV9jYW5Qcm92aWRlRG9jdW1lbnRTb3Vy
Y2UKIHsKICAgICBGcmFtZSogZnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwotICAgIFN0cmlu
ZyBtaW1lVHlwZSA9IGZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPm1pbWVUeXBlKCk7CisgICAg
U3RyaW5nIG1pbWVUeXBlID0gZnJhbWUtPmRvY3VtZW50KCktPmxvYWRlcigpLT53cml0ZXIoKS0+
bWltZVR5cGUoKTsKICAgICBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhID0gZnJhbWUtPnBhZ2UoKSA/
IGZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKSA6IDA7CiAKICAgICBpZiAoV2ViQ29yZTo6RE9N
SW1wbGVtZW50YXRpb246OmlzVGV4dE1JTUVUeXBlKG1pbWVUeXBlKSB8fApJbmRleDogV2ViS2l0
L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNF
LmNwcAkocmV2aXNpb24gNzQwMjgpCisrKyBXZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MCw4ICs0NTAsNyBA
QAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRM
b2FkZXIqIGRvY3VtZW50TG9hZGVyKQogewogICAgIGlmICghbV9wbHVnaW5WaWV3KSB7Ci0gICAg
ICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBkb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKTsK
LSAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5j
b2RpbmdOYW1lKCksIGZhbHNlKTsKKyAgICAgICAgZG9jdW1lbnRMb2FkZXItPndyaXRlcigpLT5z
ZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkluZGV4OiBXZWJLaXQvd2luY2UvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC93aW5jZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0MDI4KQorKysgV2ViS2l0
L3dpbmNlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTEy
LTA4ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIERvY3VtZW50
V3JpdGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTA0ODkKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V2luQ0Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudFdpbkNFOjpmaW5pc2hlZExv
YWRpbmcpOgorCiAyMDEwLTEwLTI4ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9qYW4gVmFmYWkuCkluZGV4OiBXZWJDb3JlL2RvbS9E
b2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9u
IDc0MDI4KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkNvbGxlY3Rpb25UeXBlLmgiCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIu
aCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEb2N1
bWVudFRpbWluZy5oIgogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKQEAgLTU1LDYgKzU2LDcg
QEAKIGNsYXNzIEFYT2JqZWN0Q2FjaGU7CiBjbGFzcyBDREFUQVNlY3Rpb247CiBjbGFzcyBDYWNo
ZWRDU1NTdHlsZVNoZWV0OworY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBDYWNo
ZWRTY3JpcHQ7CiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgQ2hhcmFjdGVy
RGF0YTsKQEAgLTY3LDcgKzY5LDYgQEAKIGNsYXNzIERPTVNlbGVjdGlvbjsKIGNsYXNzIERPTVdp
bmRvdzsKIGNsYXNzIERhdGFiYXNlVGhyZWFkOwotY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7
CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgRG9jdW1lbnRUeXBlOwogY2xhc3MgRG9j
dW1lbnRXZWFrUmVmZXJlbmNlOwpAQCAtNTQ5LDYgKzU1MCw5IEBACiAgICAgLy8gdG8gZ2V0IHZp
c3VhbGx5IG9yZGVyZWQgaGVicmV3IGFuZCBhcmFiaWMgcGFnZXMgcmlnaHQKICAgICB2b2lkIHNl
dFZpc3VhbGx5T3JkZXJlZCgpOwogICAgIGJvb2wgdmlzdWFsbHlPcmRlcmVkKCkgY29uc3QgeyBy
ZXR1cm4gbV92aXN1YWxseU9yZGVyZWQ7IH0KKyAgICAKKyAgICB2b2lkIHNldERvY3VtZW50TG9h
ZGVyKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikgeyBtX2RvY3VtZW50TG9hZGVyID0g
ZG9jdW1lbnRMb2FkZXI7IH0KKyAgICBEb2N1bWVudExvYWRlciogbG9hZGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9kb2N1bWVudExvYWRlcjsgfQogCiAgICAgdm9pZCBvcGVuKERvY3VtZW50KiBvd25l
ckRvY3VtZW50ID0gMCk7CiAgICAgdm9pZCBpbXBsaWNpdE9wZW4oKTsKQEAgLTExMzgsNiArMTE0
Miw3IEBACiAgICAgYm9vbCBtX2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3I7CiAKICAgICBGcmFt
ZSogbV9mcmFtZTsKKyAgICBEb2N1bWVudExvYWRlciogbV9kb2N1bWVudExvYWRlcjsKICAgICBP
d25QdHI8Q2FjaGVkUmVzb3VyY2VMb2FkZXI+IG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7CiAgICAg
UmVmUHRyPERvY3VtZW50UGFyc2VyPiBtX3BhcnNlcjsKICAgICBib29sIG1fd2VsbEZvcm1lZDsK
SW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3NDAyOCkKKysrIFdlYkNvcmUvZG9t
L1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsOCArMjkyLDggQEAKIAog
ICAgIC8vIElmIGNoYXJzZXQgaGFzIG5vdCBiZWVuIGRlY2xhcmVkIGluIHNjcmlwdCB0YWcsIGZh
bGwgYmFjayB0byBmcmFtZSBlbmNvZGluZy4KICAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KSkKLSAgICAgICAgICAgIGNoYXJzZXQgPSBmcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNv
ZGluZygpOworICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+bG9hZGVyKCkpCisgICAgICAgICAgICBjaGFyc2V0ID0gbG9hZGVyLT53cml0
ZXIoKS0+ZW5jb2RpbmcoKTsKICAgICB9CiAKICAgICByZXR1cm4gY2hhcnNldDsKSW5kZXg6IFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHJldmlzaW9uIDc0MDI4KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MjgsNiArNDI4LDcgQEAKICAgICBtX2lnbm9yZUF1dG9mb2N1cyA9IGZh
bHNlOwogCiAgICAgbV9mcmFtZSA9IGZyYW1lOworICAgIG1fZG9jdW1lbnRMb2FkZXIgPSBmcmFt
ZSA/IGZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSA6IDA7CiAKICAgICBp
ZiAoZnJhbWUgfHwgIXVybC5pc0VtcHR5KCkpCiAgICAgICAgIHNldFVSTCh1cmwpOwpAQCAtMjA1
NCw5ICsyMDU1LDggQEAKICAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlm
IChmcmFtZSkgewogICAgICAgICAvLyBUaGlzIGNvZGUgY2FsbHMgaW1wbGljaXRDbG9zZSgpIGlm
IGFsbCBsb2FkaW5nIGhhcyBjb21wbGV0ZWQuCi0gICAgICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxv
YWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICAgICAgZnJhbWVMb2FkZXItPndyaXRlcigpLT5l
bmRJZk5vdExvYWRpbmdNYWluUmVzb3VyY2UoKTsKLSAgICAgICAgZnJhbWVMb2FkZXItPmNoZWNr
Q29tcGxldGVkKCk7CisgICAgICAgIGxvYWRlcigpLT53cml0ZXIoKS0+ZW5kSWZOb3RMb2FkaW5n
TWFpblJlc291cmNlKCk7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQo
KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBCZWNhdXNlIHdlIGhhdmUgbm8gZnJhbWUsIHdl
IGRvbid0IGtub3cgaWYgYWxsIGxvYWRpbmcgaGFzIGNvbXBsZXRlZCwKICAgICAgICAgLy8gc28g
d2UganVzdCBjYWxsIGltcGxpY2l0Q2xvc2UoKSBpbW1lZGlhdGVseS4gRklYTUU6IFRoaXMgbWln
aHQgZmlyZQpAQCAtMzcyNSw3ICszNzI1LDcgQEAKICAgICBEYXRlQ29tcG9uZW50cyBkYXRlOwog
ICAgIGJvb2wgZm91bmREYXRlID0gZmFsc2U7CiAgICAgaWYgKG1fZnJhbWUpIHsKLSAgICAgICAg
U3RyaW5nIGh0dHBMYXN0TW9kaWZpZWQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoIkxhc3QtTW9kaWZpZWQiKTsKKyAgICAg
ICAgU3RyaW5nIGh0dHBMYXN0TW9kaWZpZWQgPSBtX2RvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgp
Lmh0dHBIZWFkZXJGaWVsZCgiTGFzdC1Nb2RpZmllZCIpOwogICAgICAgICBpZiAoIWh0dHBMYXN0
TW9kaWZpZWQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kc1Np
bmNlRXBvY2hGb3JEYXRlVGltZShwYXJzZURhdGUoaHR0cExhc3RNb2RpZmllZCkpOwogICAgICAg
ICAgICAgZm91bmREYXRlID0gdHJ1ZTsKQEAgLTQyNDMsNyArNDI0Myw3IEBACiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIg
PSBwYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgIGNvbnRyb2xsZXIt
Pm1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50KGYtPmxvYWRlcigpLT5kb2N1bWVudExv
YWRlcigpLCB1cmwoKSk7CisgICAgICAgICAgICBjb250cm9sbGVyLT5tYWluUmVzb3VyY2VGaXJl
ZERPTUNvbnRlbnRFdmVudChtX2RvY3VtZW50TG9hZGVyLCB1cmwoKSk7CiAjZW5kaWYKICAgICB9
CiB9CkBAIC00NDU3LDggKzQ0NTcsNyBAQAogICAgICAgICAvLyBsb2FkIGxvY2FsIHJlc291cmNl
cy4gIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NTYKICAg
ICAgICAgLy8gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2
MCBmb3IgZnVydGhlcgogICAgICAgICAvLyBkaXNjdXNzaW9uLgotICAgICAgICBEb2N1bWVudExv
YWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIo
KTsKLSAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyICYmIGRvY3VtZW50TG9hZGVyLT5zdWJzdGl0
dXRlRGF0YSgpLmlzVmFsaWQoKSkKKyAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPnN1YnN0
aXR1dGVEYXRhKCkuaXNWYWxpZCgpKQogICAgICAgICAgICAgc2VjdXJpdHlPcmlnaW4oKS0+Z3Jh
bnRMb2FkTG9jYWxSZXNvdXJjZXMoKTsKICAgICB9CiAKQEAgLTQ1MzgsNyArNDUzNyw3IEBACiAg
ICAgLy8gRklYTUU6IEVsaW1pbmF0ZSB0aGlzIHJlZHVuZGFuY3kuCiAgICAgc2V0VVJMKHVybCk7
CiAgICAgZi0+bG9hZGVyKCktPnNldFVSTCh1cmwpOwotICAgIGYtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpLT5yZXBsYWNlUmVxdWVzdFVSTEZvclNhbWVEb2N1bWVudE5hdmlnYXRpb24odXJs
KTsKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5yZXBsYWNlUmVxdWVzdFVSTEZvclNhbWVEb2N1bWVu
dE5hdmlnYXRpb24odXJsKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c3RhdGVQb3BwZWQoU2VyaWFs
aXplZFNjcmlwdFZhbHVlKiBzdGF0ZU9iamVjdCkKSW5kZXg6IFdlYkNvcmUvZG9tL1Byb2Nlc3Np
bmdJbnN0cnVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmNwcAkocmV2aXNpb24gNzQwMjgpCisrKyBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgY2hhcnNldCA9IGF0dHJzLmdldCgiY2hh
cnNldCIpOwogICAgICAgICAgICAgICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICAgICAgY2hhcnNldCA9IGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT53cml0
ZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IGRvY3VtZW50
KCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKIAogICAgICAgICAgICAgICAgIG1f
Y2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0
Q1NTU3R5bGVTaGVldCh1cmwsIGNoYXJzZXQpOwogICAgICAgICAgICAgfQpJbmRleDogV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0
MDI4KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NSBA
QAorMjAxMC0xMi0wOCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgRG9jdW1lbnRX
cml0ZXIgYSBtZW1iZXIgb2YgRG9jdW1lbnRMb2FkZXIKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFt
ZUxvYWRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUwNDg5CisKKyAgICAgICAgUmVmYWN0b3IsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGJp
bmRpbmdzL1NjcmlwdENvbnRyb2xsZXJCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwpOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpsYXN0TW9kaWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZpbmlzaGVkUGFy
c2luZyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW5pdFNlY3VyaXR5Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlVVJMRm9yUHVzaE9yUmVwbGFjZVN0
YXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXREb2N1bWVudExvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bG9h
ZGVyKToKKyAgICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y2hlY2tTdHlsZVNoZWV0KToKKyAgICAg
ICAgKiBkb20vU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVt
ZW50OjpzY3JpcHRDaGFyc2V0KToKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MpOgorICAgICAgICAq
IGh0bWwvTWVkaWFEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYURvY3VtZW50
OjpyZXBsYWNlTWVkaWFFbGVtZW50VGltZXJGaXJlZCk6CisgICAgICAgICogaHRtbC9QbHVnaW5E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Eb2N1bWVudFBhcnNlcjo6Y3Jl
YXRlRG9jdW1lbnRTdHJ1Y3R1cmUpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmZpbmlzaGVkTG9hZGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6Y29tbWl0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudExvYWRlcjo6c2V0dXBGb3JSZXBsYWNlQnlNSU1FVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6c2V0RnJhbWUpOgorICAgICAgICAqIGxvYWRlci9E
b2N1bWVudExvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OndyaXRl
cik6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50V3JpdGVyOjpiZWdpbik6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50V3Jp
dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFdyaXRlcjo6c2V0RnJhbWUpOgorICAg
ICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6RnJhbWVMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmluaXQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpyZWNlaXZlZEZpcnN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlcjo6dHJhbnNpdGlvblRvQ29tbWl0dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpmaW5pc2hl
ZExvYWRpbmdEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6YWRkRXh0
cmFGaWVsZHNUb1JlcXVlc3QpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om5vdGlmaWVyKToKKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RQcmVsb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxk
ZXI6OmVuY29kaW5nRnJvbUFjY2VwdENoYXJzZXQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZGF0YUNoYW5nZWQpOgor
CiAyMDEwLTEyLTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcAkocmV2aXNpb24gNzQwMjgpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsMTAgKzk0LDcgQEAKICAgICAgICAgICAgIHJldHVybiBlbmNvZGluZzsKICAg
ICB9CiAKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAg
IHJldHVybiBmcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwotCi0gICAgcmV0
dXJuIExhdGluMUVuY29kaW5nKCk7CisgICAgcmV0dXJuIGRvY3VtZW50LT5sb2FkZXIoKS0+d3Jp
dGVyKCktPmVuY29kaW5nKCk7CiB9CiAKIFZlY3RvcjxjaGFyPiBGb3JtRGF0YUJ1aWxkZXI6Omdl
bmVyYXRlVW5pcXVlQm91bmRhcnlTdHJpbmcoKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9TY3Jp
cHRDb250cm9sbGVyQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9TY3Jp
cHRDb250cm9sbGVyQmFzZS5jcHAJKHJldmlzaW9uIDc0MDI4KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9TY3JpcHRDb250cm9sbGVyQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIs
NyBAQAogICAgIC8vICAgICAgICBzeW5jaHJvbm91c2x5IGNhbiBjYXVzZSBjcmFzaGVzOgogICAg
IC8vICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc4Mgog
ICAgIGlmIChzaG91bGRSZXBsYWNlRG9jdW1lbnRJZkphdmFTY3JpcHRVUkwgPT0gUmVwbGFjZURv
Y3VtZW50SWZKYXZhU2NyaXB0VVJMKQotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGVy
KCktPnJlcGxhY2VEb2N1bWVudChzY3JpcHRSZXN1bHQpOworICAgICAgICBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPnJlcGxhY2VEb2N1bWVudChzY3JpcHRSZXN1bHQp
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
CShyZXZpc2lvbiA3NDAyOCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc4LDEwICsyNzgsMTAgQEAKICAgICAgICAgbG9hZGVyLT5sb2Fk
KGZha2VSZXF1ZXN0LCBmYWxzZSk7IC8vIE1ha2Ugc3VyZSB0aGUgRG9jdW1lbnRMb2FkZXIgaXMg
Y3JlYXRlZAogICAgICAgICBsb2FkZXItPnBvbGljeUNoZWNrZXIoKS0+Y2FuY2VsQ2hlY2soKTsg
Ly8gY2FuY2VsIGFueSBwb2xpY3kgY2hlY2tzCiAgICAgICAgIGxvYWRlci0+Y29tbWl0UHJvdmlz
aW9uYWxMb2FkKCk7Ci0gICAgICAgIGxvYWRlci0+d3JpdGVyKCktPnNldE1JTUVUeXBlKCJpbWFn
ZS9zdmcreG1sIik7Ci0gICAgICAgIGxvYWRlci0+d3JpdGVyKCktPmJlZ2luKEtVUkwoKSk7IC8v
IGNyZWF0ZSB0aGUgZW1wdHkgZG9jdW1lbnQKLSAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+YWRk
RGF0YShkYXRhKCktPmRhdGEoKSwgZGF0YSgpLT5zaXplKCkpOwotICAgICAgICBsb2FkZXItPndy
aXRlcigpLT5lbmQoKTsKKyAgICAgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53
cml0ZXIoKS0+c2V0TUlNRVR5cGUoImltYWdlL3N2Zyt4bWwiKTsKKyAgICAgICAgbG9hZGVyLT5h
Y3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+YmVnaW4oS1VSTCgpKTsgLy8gY3JlYXRl
IHRoZSBlbXB0eSBkb2N1bWVudAorICAgICAgICBsb2FkZXItPmFjdGl2ZURvY3VtZW50TG9hZGVy
KCktPndyaXRlcigpLT5hZGREYXRhKGRhdGEoKS0+ZGF0YSgpLCBkYXRhKCktPnNpemUoKSk7Cisg
ICAgICAgIGxvYWRlci0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPmVuZCgpOwog
ICAgICAgICBmcmFtZS0+dmlldygpLT5zZXRUcmFuc3BhcmVudCh0cnVlKTsgLy8gU1ZHIEltYWdl
cyBhcmUgdHJhbnNwYXJlbnQuCiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNw
cAkocmV2aXNpb24gNzQwMjgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM1LDggKzIzNSw4IEBACiAgICAgICAgICYmIGRvY3VtZW50KCkt
PmZyYW1lKCkgJiYgbV91cmwuaXNWYWxpZCgpKSB7CiAgICAgICAgIAogICAgICAgICBTdHJpbmcg
Y2hhcnNldCA9IGdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cik7Ci0gICAgICAgIGlmIChjaGFyc2V0
LmlzRW1wdHkoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgY2hhcnNldCA9
IGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKKyAg
ICAgICAgaWYgKGNoYXJzZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgY2hhcnNldCA9IGRvY3Vt
ZW50KCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKIAogICAgICAgICBpZiAobV9j
YWNoZWRTaGVldCkgewogICAgICAgICAgICAgaWYgKG1fbG9hZGluZykKSW5kZXg6IFdlYkNvcmUv
aHRtbC9QbHVnaW5Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1BsdWdp
bkRvY3VtZW50LmNwcAkocmV2aXNpb24gNzQwMjgpCisrKyBXZWJDb3JlL2h0bWwvUGx1Z2luRG9j
dW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBACiAgICAgCiAgICAgbV9l
bWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1lQXR0ciwgInBsdWdpbiIpOwogICAgIG1fZW1i
ZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5n
KCkpOwotICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIGRvY3VtZW50
KCktPmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+bWltZVR5cGUoKSk7CisgICAgbV9lbWJl
ZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgZG9jdW1lbnQoKS0+bG9hZGVyKCktPndy
aXRlcigpLT5taW1lVHlwZSgpKTsKIAogICAgIHN0YXRpY19jYXN0PFBsdWdpbkRvY3VtZW50Kj4o
ZG9jdW1lbnQoKSktPnNldFBsdWdpbk5vZGUobV9lbWJlZEVsZW1lbnQpOwogCkluZGV4OiBXZWJD
b3JlL2h0bWwvTWVkaWFEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL01l
ZGlhRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA3NDAyOCkKKysrIFdlYkNvcmUvaHRtbC9NZWRpYURv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw3IEBACiAgICAgICAgIGVt
YmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsICIxMDAlIik7CiAgICAgICAgIGVt
YmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2luIik7CiAgICAgICAgIGVt
YmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHNyY0F0dHIsIHVybCgpLnN0cmluZygpKTsKLSAgICAg
ICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIGZyYW1lKCktPmxvYWRlcigp
LT53cml0ZXIoKS0+bWltZVR5cGUoKSk7CisgICAgICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmli
dXRlKHR5cGVBdHRyLCBsb2FkZXIoKS0+d3JpdGVyKCktPm1pbWVUeXBlKCkpOwogCiAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIHZpZGVvRWxlbWVudC0+cGFyZW50Tm9kZSgpLT5y
ZXBsYWNlQ2hpbGQoZW1iZWRFbGVtZW50LCB2aWRlb0VsZW1lbnQsIGVjKTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDc0MDI4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDYgQEAKICAgICAsIG1fcG9s
aWN5Q2hlY2tlcihmcmFtZSkKICAgICAsIG1faGlzdG9yeShmcmFtZSkKICAgICAsIG1fbm90aWZl
cihmcmFtZSkKLSAgICAsIG1fd3JpdGVyKGZyYW1lKQogICAgICwgbV9zdWJmcmFtZUxvYWRlcihm
cmFtZSkKICAgICAsIG1fc3RhdGUoRnJhbWVTdGF0ZUNvbW1pdHRlZFBhZ2UpCiAgICAgLCBtX2xv
YWRUeXBlKEZyYW1lTG9hZFR5cGVTdGFuZGFyZCkKQEAgLTIzMiw4ICsyMzEsOCBAQAogICAgIHNl
dFN0YXRlKEZyYW1lU3RhdGVQcm92aXNpb25hbCk7CiAgICAgbV9wcm92aXNpb25hbERvY3VtZW50
TG9hZGVyLT5zZXRSZXNwb25zZShSZXNvdXJjZVJlc3BvbnNlKEtVUkwoKSwgInRleHQvaHRtbCIs
IDAsIFN0cmluZygpLCBTdHJpbmcoKSkpOwogICAgIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRl
ci0+ZmluaXNoZWRMb2FkaW5nKCk7Ci0gICAgd3JpdGVyKCktPmJlZ2luKEtVUkwoKSwgZmFsc2Up
OwotICAgIHdyaXRlcigpLT5lbmQoKTsKKyAgICBtX2RvY3VtZW50TG9hZGVyLT53cml0ZXIoKS0+
YmVnaW4oS1VSTCgpLCBmYWxzZSk7CisgICAgbV9kb2N1bWVudExvYWRlci0+d3JpdGVyKCktPmVu
ZCgpOwogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmNhbmNlbFBhcnNpbmcoKTsKICAgICBtX3N0
YXRlTWFjaGluZS5hZHZhbmNlVG8oRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmU6OkRpc3BsYXlpbmdJ
bml0aWFsRW1wdHlEb2N1bWVudCk7CiAgICAgbV9kaWRDYWxsSW1wbGljaXRDbG9zZSA9IHRydWU7
CkBAIC01OTAsNyArNTg5LDYgQEAKICAgICAvLyBEbyBub3QgZHJvcCB0aGUgZG9jdW1lbnQgYmVm
b3JlIHRoZSBTY3JpcHRDb250cm9sbGVyIGFuZCB2aWV3IGFyZSBjbGVhcmVkCiAgICAgLy8gYXMg
c29tZSBkZXN0cnVjdG9ycyBtaWdodCBzdGlsbCB0cnkgdG8gYWNjZXNzIHRoZSBkb2N1bWVudC4K
ICAgICBtX2ZyYW1lLT5zZXREb2N1bWVudCgwKTsKLSAgICB3cml0ZXIoKS0+Y2xlYXIoKTsKIAog
ICAgIG1fc3ViZnJhbWVMb2FkZXIuY2xlYXIoKTsKIApAQCAtNjA5LDggKzYwNyw4IEBACiAKIHZv
aWQgRnJhbWVMb2FkZXI6OnJlY2VpdmVkRmlyc3REYXRhKCkKIHsKLSAgICB3cml0ZXIoKS0+YmVn
aW4obV93b3JraW5nVVJMLCBmYWxzZSk7Ci0gICAgd3JpdGVyKCktPnNldERvY3VtZW50V2FzTG9h
ZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uKCk7CisgICAgYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3Jp
dGVyKCktPmJlZ2luKG1fd29ya2luZ1VSTCwgZmFsc2UpOworICAgIGFjdGl2ZURvY3VtZW50TG9h
ZGVyKCktPndyaXRlcigpLT5zZXREb2N1bWVudFdhc0xvYWRlZEFzUGFydE9mTmF2aWdhdGlvbigp
OwogCiAgICAgZGlzcGF0Y2hEaWRDb21taXRMb2FkKCk7CiAgICAgZGlzcGF0Y2hEaWRDbGVhcldp
bmRvd09iamVjdHNJbkFsbFdvcmxkcygpOwpAQCAtMjAwMCw3ICsxOTk4LDcgQEAKICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHdyaXRlcigpLT5zZXRNSU1F
VHlwZShkbC0+cmVzcG9uc2VNSU1FVHlwZSgpKTsKKyAgICBtX2RvY3VtZW50TG9hZGVyLT53cml0
ZXIoKS0+c2V0TUlNRVR5cGUoZGwtPnJlc3BvbnNlTUlNRVR5cGUoKSk7CiAKICAgICAvLyBUZWxs
IHRoZSBjbGllbnQgd2UndmUgY29tbWl0dGVkIHRoaXMgVVJMLgogICAgIEFTU0VSVChtX2ZyYW1l
LT52aWV3KCkpOwpAQCAtMjEzNiw4ICsyMTM0LDYgQEAKICAgICBtX2ZyYW1lLT5kb21XaW5kb3co
KS0+c2V0VVJMKGRvY3VtZW50LT51cmwoKSk7CiAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPnNl
dFNlY3VyaXR5T3JpZ2luKGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKTsKIAotICAgIHdyaXRl
cigpLT5zZXREZWNvZGVyKGRvY3VtZW50LT5kZWNvZGVyKCkpOwotCiAgICAgdXBkYXRlRmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKTsKIAogICAgIGNhY2hlZEZyYW1lLnJlc3RvcmUoKTsKQEAgLTIyMzAs
NyArMjIyNiw3IEBACiAgICAgQXJjaGl2ZVJlc291cmNlKiBtYWluUmVzb3VyY2UgPSBhcmNoaXZl
LT5tYWluUmVzb3VyY2UoKTsKICAgICBsb2FkZXItPnNldFBhcnNlZEFyY2hpdmVEYXRhKG1haW5S
ZXNvdXJjZS0+ZGF0YSgpKTsKIAotICAgIHdyaXRlcigpLT5zZXRNSU1FVHlwZShtYWluUmVzb3Vy
Y2UtPm1pbWVUeXBlKCkpOworICAgIGxvYWRlci0+d3JpdGVyKCktPnNldE1JTUVUeXBlKG1haW5S
ZXNvdXJjZS0+bWltZVR5cGUoKSk7CiAKICAgICBjbG9zZVVSTCgpOwogICAgIGRpZE9wZW5VUkwo
bWFpblJlc291cmNlLT51cmwoKSk7CkBAIC0yMjM4LDggKzIyMzQsOCBAQAogICAgIEFTU0VSVCht
X2ZyYW1lLT5kb2N1bWVudCgpKTsKICAgICBTdHJpbmcgdXNlckNob3NlbkVuY29kaW5nID0gZG9j
dW1lbnRMb2FkZXIoKS0+b3ZlcnJpZGVFbmNvZGluZygpOwogICAgIGJvb2wgZW5jb2RpbmdJc1Vz
ZXJDaG9zZW4gPSAhdXNlckNob3NlbkVuY29kaW5nLmlzTnVsbCgpOwotICAgIHdyaXRlcigpLT5z
ZXRFbmNvZGluZyhlbmNvZGluZ0lzVXNlckNob3NlbiA/IHVzZXJDaG9zZW5FbmNvZGluZyA6IG1h
aW5SZXNvdXJjZS0+dGV4dEVuY29kaW5nKCksIGVuY29kaW5nSXNVc2VyQ2hvc2VuKTsKLSAgICB3
cml0ZXIoKS0+YWRkRGF0YShtYWluUmVzb3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCBtYWluUmVzb3Vy
Y2UtPmRhdGEoKS0+c2l6ZSgpKTsKKyAgICBsb2FkZXItPndyaXRlcigpLT5zZXRFbmNvZGluZyhl
bmNvZGluZ0lzVXNlckNob3NlbiA/IHVzZXJDaG9zZW5FbmNvZGluZyA6IG1haW5SZXNvdXJjZS0+
dGV4dEVuY29kaW5nKCksIGVuY29kaW5nSXNVc2VyQ2hvc2VuKTsKKyAgICBsb2FkZXItPndyaXRl
cigpLT5hZGREYXRhKG1haW5SZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIG1haW5SZXNvdXJjZS0+
ZGF0YSgpLT5zaXplKCkpOwogfQogCiBib29sIEZyYW1lTG9hZGVyOjppc1JlcGxhY2luZygpIGNv
bnN0CkBAIC0yNjYzLDcgKzI2NTksNyBAQAogICAgIC8vIEFsd2F5cyB0cnkgVVRGLTguIElmIHRo
YXQgZmFpbHMsIHRyeSBmcmFtZSBlbmNvZGluZyAoaWYgYW55KSBhbmQgdGhlbiB0aGUgZGVmYXVs
dC4KICAgICAvLyBGb3IgYSBuZXdseSBvcGVuZWQgZnJhbWUgd2l0aCBhbiBlbXB0eSBVUkwsIGVu
Y29kaW5nKCkgc2hvdWxkIG5vdCBiZSB1c2VkLCBiZWNhdXNlIHRoaXMgbWV0aG9kcyBhc2tzIGRl
Y29kZXIsIHdoaWNoIHVzZXMgSVNPLTg4NTktMS4KICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBt
X2ZyYW1lLT5zZXR0aW5ncygpOwotICAgIHJlcXVlc3Quc2V0UmVzcG9uc2VDb250ZW50RGlzcG9z
aXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkoIlVURi04Iiwgd3JpdGVyKCktPmRlcHJlY2F0ZWRG
cmFtZUVuY29kaW5nKCksIHNldHRpbmdzID8gc2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdO
YW1lKCkgOiBTdHJpbmcoKSk7CisgICAgcmVxdWVzdC5zZXRSZXNwb25zZUNvbnRlbnREaXNwb3Np
dGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSgiVVRGLTgiLCBhY3RpdmVEb2N1bWVudExvYWRlcigp
LT53cml0ZXIoKS0+ZGVwcmVjYXRlZEZyYW1lRW5jb2RpbmcoKSwgc2V0dGluZ3MgPyBzZXR0aW5n
cy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSA6IFN0cmluZygpKTsKIH0KIAogdm9pZCBGcmFt
ZUxvYWRlcjo6YWRkSFRUUE9yaWdpbklmTmVlZGVkKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
U3RyaW5nIG9yaWdpbikKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDc0MDI4KQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjksNyArNDI5LDcg
QEAKIHsKICAgICBTdHJpbmcgZW5jb2Rpbmc7CiAgICAgaWYgKHR5cGUgPT0gQ2FjaGVkUmVzb3Vy
Y2U6OlNjcmlwdCB8fCB0eXBlID09IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KQotICAg
ICAgICBlbmNvZGluZyA9IGNoYXJzZXQuaXNFbXB0eSgpID8gbV9kb2N1bWVudC0+ZnJhbWUoKS0+
bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpIDogY2hhcnNldDsKKyAgICAgICAgZW5jb2Rp
bmcgPSBjaGFyc2V0LmlzRW1wdHkoKSA/IG1fZG9jdW1lbnQtPmxvYWRlcigpLT53cml0ZXIoKS0+
ZW5jb2RpbmcoKSA6IGNoYXJzZXQ7CiAKICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBy
ZXF1ZXN0UmVzb3VyY2UodHlwZSwgdXJsLCBlbmNvZGluZywgUmVzb3VyY2VMb2FkUHJpb3JpdHlV
bnJlc29sdmVkLCB0cnVlKTsKICAgICBpZiAoIXJlc291cmNlIHx8IChtX3ByZWxvYWRzICYmIG1f
cHJlbG9hZHMtPmNvbnRhaW5zKHJlc291cmNlKSkpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1
bWVudExvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVy
LmgJKHJldmlzaW9uIDc0MDI4KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBEb2N1bWVudExvYWRlcl9o
CiAKICNpbmNsdWRlICJEb2N1bWVudExvYWRUaW1pbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudFdy
aXRlci5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIKICNpbmNsdWRlICJSZXNvdXJj
ZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC03Miw2ICs3Myw4IEBA
CiAgICAgICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlcigpIGNvbnN0OwogICAgICAgICBNYWlu
UmVzb3VyY2VMb2FkZXIqIG1haW5SZXNvdXJjZUxvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFp
blJlc291cmNlTG9hZGVyLmdldCgpOyB9CiAgICAgICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBtYWluUmVzb3VyY2VEYXRhKCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBEb2N1bWVudFdy
aXRlciogd3JpdGVyKCkgY29uc3QgeyByZXR1cm4gJm1fd3JpdGVyOyB9CiAKICAgICAgICAgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QoKSBjb25zdDsKICAgICAgICAgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3RDb3B5KCkgY29uc3Q7CkBAIC0yNDYs
NiArMjQ5LDggQEAKICAgICAgICAgUmVzb3VyY2VMb2FkZXJTZXQgbV9wbHVnSW5TdHJlYW1Mb2Fk
ZXJzOwogCiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fbWFpblJlc291cmNlRGF0YTsK
KyAgICAgICAgCisgICAgICAgIG11dGFibGUgRG9jdW1lbnRXcml0ZXIgbV93cml0ZXI7CiAKICAg
ICAgICAgLy8gQSByZWZlcmVuY2UgdG8gYWN0dWFsIHJlcXVlc3QgdXNlZCB0byBjcmVhdGUgdGhl
IGRhdGEgc291cmNlLgogICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgdGhl
IHJlc291cmNlTG9hZERlbGVnYXRlJ3MKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3Jp
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuaAkocmV2
aXNpb24gNzQwMjgpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw4IEBACiAgICAgdm9pZCBhZGREYXRhKGNvbnN0IGNoYXIqIHN0
cmluZywgaW50IGxlbmd0aCA9IC0xLCBib29sIGZsdXNoID0gZmFsc2UpOwogICAgIHZvaWQgZW5k
KCk7CiAgICAgdm9pZCBlbmRJZk5vdExvYWRpbmdNYWluUmVzb3VyY2UoKTsKLSAgICB2b2lkIGNs
ZWFyKCk7CisgICAgCisgICAgdm9pZCBzZXRGcmFtZShGcmFtZSogZnJhbWUpIHsgbV9mcmFtZSA9
IGZyYW1lOyB9CiAKICAgICBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdDsKICAgICB2b2lkIHNldEVu
Y29kaW5nKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIGJvb2wgdXNlckNob3Nlbik7CkBAIC03NSw2
ICs3Niw3IEBACiAKIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9j
dW1lbnQoY29uc3QgS1VSTCYpOworICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIEZyYW1lKiBtX2Zy
YW1lOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZpc2lvbiA3NDAyOCkK
KysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudFdyaXRl
ci5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgpAQCAtNDksNyArNTAsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLQor
I2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9Vbmljb2RlLmg+CkBAIC03Nyw2ICs3OCw3IEBACiBEb2N1bWVudExvYWRlcjo6RG9jdW1lbnRM
b2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXEsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBz
dWJzdGl0dXRlRGF0YSkKICAgICA6IG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCh0cnVlKQog
ICAgICwgbV9mcmFtZSgwKQorICAgICwgbV93cml0ZXIobV9mcmFtZSkKICAgICAsIG1fb3JpZ2lu
YWxSZXF1ZXN0KHJlcSkKICAgICAsIG1fc3Vic3RpdHV0ZURhdGEoc3Vic3RpdHV0ZURhdGEpCiAg
ICAgLCBtX29yaWdpbmFsUmVxdWVzdENvcHkocmVxKQpAQCAtMjc2LDcgKzI3OCw3IEBACiAgICAg
Y29tbWl0SWZSZWFkeSgpOwogICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVMb2Fk
ZXIoKSkgewogICAgICAgICBsb2FkZXItPmZpbmlzaGVkTG9hZGluZ0RvY3VtZW50KHRoaXMpOwot
ICAgICAgICBsb2FkZXItPndyaXRlcigpLT5lbmQoKTsKKyAgICAgICAgbV93cml0ZXIuZW5kKCk7
CiAgICAgfQogfQogCkBAIC0zMDQsMTAgKzMwNiw5IEBACiAgICAgICAgIHVzZXJDaG9zZW4gPSBm
YWxzZTsKICAgICAgICAgZW5jb2RpbmcgPSByZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsK
ICAgICB9Ci0gICAgLy8gRklYTUU6IERvY3VtZW50V3JpdGVyIHNob3VsZCBiZSBvd25lZCBieSBE
b2N1bWVudExvYWRlci4KLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPnNldEVuY29k
aW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAgICBtX3dyaXRlci5zZXRFbmNvZGluZyhlbmNv
ZGluZywgdXNlckNob3Nlbik7CiAgICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCktPnBhcnNp
bmcoKSk7Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5hZGREYXRhKGJ5dGVzLCBs
ZW5ndGgpOworICAgIG1fd3JpdGVyLmFkZERhdGEoYnl0ZXMsIGxlbmd0aCk7CiB9CiAKIGJvb2wg
RG9jdW1lbnRMb2FkZXI6OmRvZXNQcm9ncmVzc2l2ZUxvYWQoY29uc3QgU3RyaW5nJiBNSU1FVHlw
ZSkgY29uc3QKQEAgLTMzNyw3ICszMzgsNyBAQAogICAgIH0KICAgICAKICAgICBmcmFtZUxvYWRl
cigpLT5maW5pc2hlZExvYWRpbmdEb2N1bWVudCh0aGlzKTsKLSAgICBtX2ZyYW1lLT5sb2FkZXIo
KS0+d3JpdGVyKCktPmVuZCgpOworICAgIG1fd3JpdGVyLmVuZCgpOwogICAgIAogICAgIGZyYW1l
TG9hZGVyKCktPnNldFJlcGxhY2luZygpOwogICAgIG1fZ290Rmlyc3RCeXRlID0gZmFsc2U7CkBA
IC0zNzQsNiArMzc1LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChmcmFtZSAmJiAh
bV9mcmFtZSk7CiAgICAgbV9mcmFtZSA9IGZyYW1lOworICAgIG1fd3JpdGVyLnNldEZyYW1lKGZy
YW1lKTsKICAgICBhdHRhY2hUb0ZyYW1lKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50V3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdy
aXRlci5jcHAJKHJldmlzaW9uIDc0MDI4KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDcgQEAKIAogICAgIGJvb2wgcmVz
ZXRTY3JpcHRpbmcgPSAhKG1fZnJhbWUtPmxvYWRlcigpLT5zdGF0ZU1hY2hpbmUoKS0+aXNEaXNw
bGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpLT5pc1NlY3VyZVRyYW5zaXRpb25Ubyh1cmwpKTsKICAgICBtX2ZyYW1lLT5s
b2FkZXIoKS0+Y2xlYXIocmVzZXRTY3JpcHRpbmcsIHJlc2V0U2NyaXB0aW5nKTsKKyAgICBjbGVh
cigpOwogICAgIGlmIChyZXNldFNjcmlwdGluZykKICAgICAgICAgbV9mcmFtZS0+c2NyaXB0KCkt
PnVwZGF0ZVBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJ
KHJldmlzaW9uIDc0MDI4KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2RlZmluZSBGcmFtZUxvYWRlcl9oCiAKICNpbmNs
dWRlICJDYWNoZVBvbGljeS5oIgotI2luY2x1ZGUgIkRvY3VtZW50V3JpdGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVz
LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUNvbnRyb2xsZXIuaCIKQEAgLTk4LDcgKzk3LDYgQEAKICAg
ICBQb2xpY3lDaGVja2VyKiBwb2xpY3lDaGVja2VyKCkgY29uc3QgeyByZXR1cm4gJm1fcG9saWN5
Q2hlY2tlcjsgfQogICAgIEhpc3RvcnlDb250cm9sbGVyKiBoaXN0b3J5KCkgY29uc3QgeyByZXR1
cm4gJm1faGlzdG9yeTsgfQogICAgIFJlc291cmNlTG9hZE5vdGlmaWVyKiBub3RpZmllcigpIGNv
bnN0IHsgcmV0dXJuICZtX25vdGlmZXI7IH0KLSAgICBEb2N1bWVudFdyaXRlciogd3JpdGVyKCkg
Y29uc3QgeyByZXR1cm4gJm1fd3JpdGVyOyB9CiAgICAgU3ViZnJhbWVMb2FkZXIqIHN1YmZyYW1l
TG9hZGVyKCkgY29uc3QgeyByZXR1cm4gJm1fc3ViZnJhbWVMb2FkZXI7IH0KIAogICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIG5vdCBjb29sLCBwZW9wbGUuIFRoZXJlIGFyZSB0b28gbWFueSBkaWZmZXJl
bnQgZnVuY3Rpb25zIHRoYXQgYWxsIHN0YXJ0IGxvYWRzLgpAQCAtNDI3LDcgKzQyNSw2IEBACiAg
ICAgbXV0YWJsZSBQb2xpY3lDaGVja2VyIG1fcG9saWN5Q2hlY2tlcjsKICAgICBtdXRhYmxlIEhp
c3RvcnlDb250cm9sbGVyIG1faGlzdG9yeTsKICAgICBtdXRhYmxlIFJlc291cmNlTG9hZE5vdGlm
aWVyIG1fbm90aWZlcjsKLSAgICBtdXRhYmxlIERvY3VtZW50V3JpdGVyIG1fd3JpdGVyOwogICAg
IG11dGFibGUgU3ViZnJhbWVMb2FkZXIgbV9zdWJmcmFtZUxvYWRlcjsKICAgICBtdXRhYmxlIEZy
YW1lTG9hZGVyU3RhdGVNYWNoaW5lIG1fc3RhdGVNYWNoaW5lOwogCg==
</data>
<flag name="review"
          id="68075"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78852</attachid>
            <date>2011-01-13 13:55:03 -0800</date>
            <delta_ts>2022-03-01 02:43:01 -0800</delta_ts>
            <desc>Merge previous patch to trunk</desc>
            <filename>writer4.txt</filename>
            <type>text/plain</type>
            <size>36217</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzU3MTkpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDEtMTAgIE5hdGUg
Q2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY2FsbHMgdG8gRG9jdW1lbnRXcml0ZXIuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDQ4OQorCisg
ICAgICAgICogc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkNvbnRleHRNZW51Q2xpZW50SW1wbDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgor
ICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAgICogc3Jj
L1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZW5jb2Rp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmxvYWRKYXZhU2NyaXB0VVJMKToK
KyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFn
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzZXJpYWxpemUpOgor
ICAgICAgICAqIHNyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R2V0Rm9ybUVuY29kaW5nKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFnZUVuY29kaW5nKToKKwogMjAxMS0wMS0xMyAg
VG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtl
bnQgVGFtdXJhLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplcklt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6
ZXJJbXBsLmNwcAkocmV2aXNpb24gNzU3MTkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBh
Z2VTZXJpYWxpemVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQAog
ICAgICAgICAgICAgLy8gR2V0IGVuY29kaW5nIGluZm8uCiAgICAgICAgICAgICBTdHJpbmcgeG1s
RW5jb2RpbmcgPSBwYXJhbS0+ZG9jdW1lbnQtPnhtbEVuY29kaW5nKCk7CiAgICAgICAgICAgICBp
ZiAoeG1sRW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHhtbEVuY29kaW5nID0g
cGFyYW0tPmRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7
CisgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBwYXJhbS0+ZG9jdW1lbnQtPmxvYWRlcigp
LT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKICAgICAgICAgICAgIGlmICh4bWxFbmNvZGluZy5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBVVEY4RW5jb2RpbmcoKS5uYW1l
KCk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiIik7CkBAIC01
MDUsNyArNTA1LDcgQEAKIAogICAgICAgICBkaWRTZXJpYWxpemF0aW9uID0gdHJ1ZTsKIAotICAg
ICAgICBTdHJpbmcgZW5jb2RpbmcgPSB3ZWJGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRl
cigpLT5lbmNvZGluZygpOworICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBkb2N1bWVudC0+bG9h
ZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwogICAgICAgICBjb25zdCBUZXh0RW5jb2Rpbmcm
IHRleHRFbmNvZGluZyA9IGVuY29kaW5nLmlzRW1wdHkoKSA/IFVURjhFbmNvZGluZygpIDogVGV4
dEVuY29kaW5nKGVuY29kaW5nKTsKICAgICAgICAgU3RyaW5nIGRpcmVjdG9yeU5hbWUgPSB1cmwg
PT0gbWFpblVSTCA/IG1fbG9jYWxEaXJlY3RvcnlOYW1lIDogIiI7CiAKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA3NTcxOSkKKysrIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUwLDcgKzE0NTAsNyBA
QAogICAgIGlmICghbV9wYWdlLmdldCgpKQogICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CiAK
LSAgICByZXR1cm4gbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNv
ZGluZygpOworICAgIHJldHVybiBtX3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5sb2Fk
ZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OnNldFBh
Z2VFbmNvZGluZyhjb25zdCBXZWJTdHJpbmcmIGVuY29kaW5nTmFtZSkKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDc1NzE5
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDk4LDcgKzEwOTgsNyBAQAogICAgICAgICAvLyBIb3dldmVyLCB3ZSBv
bmx5IHdhbnQgdG8gZG8gdGhpcyBpZiBtYWtlUmVwcmVzZW50YXRpb24gaGFzIGJlZW4gY2FsbGVk
LCB0bwogICAgICAgICAvLyBtYXRjaCB0aGUgYmVoYXZpb3Igb24gdGhlIE1hYy4KICAgICAgICAg
aWYgKG1faGFzUmVwcmVzZW50YXRpb24pCi0gICAgICAgICAgICBkbC0+ZnJhbWVMb2FkZXIoKS0+
d3JpdGVyKCktPnNldEVuY29kaW5nKCIiLCBmYWxzZSk7CisgICAgICAgICAgICBkbC0+d3JpdGVy
KCktPnNldEVuY29kaW5nKCIiLCBmYWxzZSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA3NTcxOSkK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI4LDcgKzIyOCw3IEBACiAKICAgICAvLyBJZiBpdCdzIG5vdCBhIGxpbmss
IGFuIGltYWdlLCBhIG1lZGlhIGVsZW1lbnQsIG9yIGFuIGltYWdlL21lZGlhIGxpbmssCiAgICAg
Ly8gc2hvdyBhIHNlbGVjdGlvbiBtZW51IG9yIGEgbW9yZSBnZW5lcmljIHBhZ2UgbWVudS4KLSAg
ICBkYXRhLmZyYW1lRW5jb2RpbmcgPSBzZWxlY3RlZEZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCkt
PmVuY29kaW5nKCk7CisgICAgZGF0YS5mcmFtZUVuY29kaW5nID0gc2VsZWN0ZWRGcmFtZS0+ZG9j
dW1lbnQoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwogCiAgICAgLy8gU2VuZCB0
aGUgZnJhbWUgYW5kIHBhZ2UgVVJMcyBpbiBhbnkgY2FzZS4KICAgICBkYXRhLnBhZ2VVUkwgPSB1
cmxGcm9tRnJhbWUobV93ZWJWaWV3LT5tYWluRnJhbWVJbXBsKCktPmZyYW1lKCkpOwpJbmRleDog
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gNzU3MTkpCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Nyw3
ICs1NDcsNyBAQAogCiBXZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjplbmNvZGluZygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKKyAg
ICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGlu
ZygpOwogfQogCiBXZWJTaXplIFdlYkZyYW1lSW1wbDo6c2Nyb2xsT2Zmc2V0KCkgY29uc3QKQEAg
LTIyNzYsNyArMjI3Niw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9mcmFtZS0+
bmF2aWdhdGlvblNjaGVkdWxlcigpLT5sb2NhdGlvbkNoYW5nZVBlbmRpbmcoKSkKLSAgICAgICAg
bV9mcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5yZXBsYWNlRG9jdW1lbnQoc2NyaXB0UmVzdWx0
KTsKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bG9hZGVyKCktPndyaXRlcigpLT5yZXBs
YWNlRG9jdW1lbnQoc2NyaXB0UmVzdWx0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCShy
ZXZpc2lvbiA3NTcxOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1E
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsOCArNjIsNyBAQAogICAgICAgICBpZiAoZW5j
b2RpbmctPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY29uc3Qg
RnJhbWUqIGZyYW1lID0gZm9ybS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICAqZW5jb2Rpbmcg
PSBmcmFtZSA/IFRleHRFbmNvZGluZyhmcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGlu
ZygpKSA6IExhdGluMUVuY29kaW5nKCk7CisgICAgKmVuY29kaW5nID0gVGV4dEVuY29kaW5nKGZv
cm0tPmRvY3VtZW50KCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKSk7CiB9CiAKIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgc3VibWl0IHJlcXVlc3QgcmVzdWx0cyBpbiBhbiBIVFRQIFVS
TC4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5jcHAJKHJldmlzaW9uIDc1NzE5KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjksNyArNjI5LDcgQEAK
ICAgICAgICAgLy8gSG93ZXZlciwgd2Ugb25seSB3YW50IHRvIGRvIHRoaXMgaWYgbWFrZVJlcHJl
c2VudGF0aW9uIGhhcyBiZWVuIGNhbGxlZCwgdG8KICAgICAgICAgLy8gbWF0Y2ggdGhlIGJlaGF2
aW9yIG9uIHRoZSBNYWMuCiAgICAgICAgIGlmIChtX2hhc1JlcHJlc2VudGF0aW9uKQotICAgICAg
ICAgICAgbG9hZGVyLT5mcmFtZUxvYWRlcigpLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcoIiIsIGZh
bHNlKTsKKyAgICAgICAgICAgIGxvYWRlci0+d3JpdGVyKCktPnNldEVuY29kaW5nKCIiLCBmYWxz
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1fcGx1Z2luVmlldy0+aXNQbHVn
aW5WaWV3KCkpCkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NzE5KQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTAxLTEwICBOYXRlIENoYXBpbiAg
PGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIERvY3VtZW50V3JpdGVyLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0ODkKKworICAgICAgICAq
IEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lOjpzZXRVcmwpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZmluaXNoZWRMb2FkaW5nKToKKwogMjAxMS0wMS0x
MyAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IFdlYktpdC9x
dC9BcGkvcXdlYmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5jcHAJKHJldmlzaW9uIDc1NzE5KQorKysgV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NTQsOCArNzU0LDggQEAKIHZvaWQgUVdlYkZyYW1lOjpzZXRVcmwo
Y29uc3QgUVVybCAmdXJsKQogewogICAgIGNvbnN0IFFVcmwgYWJzb2x1dGUgPSBlbnN1cmVBYnNv
bHV0ZVVybCh1cmwpOwotICAgIGQtPmZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPmJlZ2luKGFi
c29sdXRlKTsKLSAgICBkLT5mcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmQoKTsKKyAgICBk
LT5mcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPndyaXRlcigpLT5iZWdp
bihhYnNvbHV0ZSk7CisgICAgZC0+ZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRl
cigpLT53cml0ZXIoKS0+ZW5kKCk7CiAgICAgbG9hZChhYnNvbHV0ZSk7CiB9CiAKSW5kZXg6IFdl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
CShyZXZpc2lvbiA3NTcxOSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5Niw3IEBACiAgICAgOiBt
X2ZyYW1lKGZyYW1lKQogICAgICwgbV9wb2xpY3lEZWNpc2lvbigwKQogICAgICwgbV9sb2FkaW5n
RXJyb3JQYWdlKGZhbHNlKQorICAgICwgbV9oYXNSZXByZXNlbnRhdGlvbihmYWxzZSkKICAgICAs
IG1fcGx1Z2luVmlldygwKQogICAgICwgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbihmYWxzZSkK
IHsKQEAgLTc4MCw3ICs3ODEsNyBAQAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjptYWtlUmVw
cmVzZW50YXRpb24oV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgbV9oYXNSZXByZXNlbnRhdGlvbiA9IHRydWU7CiB9CiAKIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OmZvcmNlTGF5b3V0KCkKQEAgLTk4MCw3ICs5ODEsNyBAQAogCiB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpyZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGUoV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXIqKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9oYXNSZXByZXNlbnRh
dGlvbiA9IHRydWU7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OndpbGxDaGFuZ2VUaXRs
ZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciopCkBAIC0xMDI3LDE0ICsxMDI4LDEyIEBACiAKIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZyhXZWJDb3JlOjpEb2N1bWVudExv
YWRlciogZG9jdW1lbnRMb2FkZXIpCiB7Ci0gICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKLSAgICAg
ICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGRvY3VtZW50TG9hZGVyLT5mcmFtZUxvYWRlcigpOwot
ICAgICAgICBsb2FkZXItPndyaXRlcigpLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNv
ZGluZ05hbWUoKSwgZmFsc2UpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKG1fcGx1Z2luVmlldykg
ewogICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZpbmlzaExvYWRpbmcoKTsKICAgICAgICAgbV9w
bHVnaW5WaWV3ID0gMDsKICAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNl
OwotICAgIH0KKyAgICB9IGVsc2UgaWYgKG1faGFzUmVwcmVzZW50YXRpb24pCisgICAgICAgIGRv
Y3VtZW50TG9hZGVyLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2Rp
bmdOYW1lKCksIGZhbHNlKTsKIH0KIAogCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCShyZXZpc2lvbiA3NTcxOSkKKysrIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2luZyBjb3B5
KQpAQCAtMTk3LDYgKzE5Nyw3IEBACiAgICAgICAgIFdlYktpdFdlYlBvbGljeURlY2lzaW9uKiBt
X3BvbGljeURlY2lzaW9uOwogCiAgICAgICAgIGJvb2wgbV9sb2FkaW5nRXJyb3JQYWdlOworICAg
ICAgICBib29sIG1faGFzUmVwcmVzZW50YXRpb247CiAKICAgICAgICAgLy8gUGx1Z2luIHZpZXcg
dG8gcmVkaXJlY3QgZGF0YSB0bwogICAgICAgICBXZWJDb3JlOjpQbHVnaW5WaWV3KiBtX3BsdWdp
blZpZXc7CkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gNzU3
MTkpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDY2Nyw3ICs0NjY3LDcgQEAKIGNvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2VuY29kaW5nKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKLSAgICBTdHJpbmcgZW5j
b2RpbmcgPSBjb3JlKHdlYlZpZXcpLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5l
bmNvZGluZygpOworICAgIFN0cmluZyBlbmNvZGluZyA9IGNvcmUod2ViVmlldyktPm1haW5GcmFt
ZSgpLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7CiAgICAgaWYg
KGVuY29kaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgd2ViVmlldy0+cHJp
di0+ZW5jb2RpbmcgPSBlbmNvZGluZy51dGY4KCk7CkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNzU3MTkpCisr
KyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisy
MDExLTAxLTEwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIERv
Y3VtZW50V3JpdGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTA0ODkKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9h
ZGluZyk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Vi
a2l0X3dlYl92aWV3X2dldF9lbmNvZGluZyk6CisKIDIwMTEtMDEtMTIgIFBoaWxpcHBlIE5vcm1h
bmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4
IGZvciAzMi1iaXRzIFJlbGVhc2UuIEluY2x1ZGUgR1JlZlB0ckd0ay5oIHNvCkluZGV4OiBXZWJL
aXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcAkocmV2aXNp
b24gNzU3MTkpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDggKzQzNCw3IEBACiB7CiAgICAgaWYgKCFtX3Bs
dWdpblZpZXcpIHsKICAgICAgICAgaWYgKG1fZmlyc3REYXRhKSB7Ci0gICAgICAgICAgICBGcmFt
ZUxvYWRlciogZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgICAgICAgICBmbC0+d3Jp
dGVyKCktPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7
CisgICAgICAgICAgICBsb2FkZXItPndyaXRlcigpLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRl
eHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwogICAgICAgICAgICAgbV9maXJzdERhdGEgPSBmYWxz
ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkluZGV4OiBXZWJLaXQvd3gvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC93eC9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NzE5KQorKysgV2Vi
S2l0L3d4L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTAx
LTEwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIERvY3VtZW50
V3JpdGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTA0ODkKKworICAgICAgICAqIFdlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFd4OjpmaW5pc2hlZExvYWRpbmcp
OgorCiAyMDExLTAxLTA5ICBYaWFuemh1IFdhbmcgPHBobml4d3h6QGdtYWlsLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzU3MTkpCisr
KyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisy
MDExLTAxLTEwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGNhbGxzIHRvIERv
Y3VtZW50V3JpdGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTA0ODkKKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgt
W1dlYkZyYW1lIF9jYW5Qcm92aWRlRG9jdW1lbnRTb3VyY2VdKToKKwogMjAxMS0wMS0xMiAgQmV0
aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJz
IENhcmxzc29uLgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gNzU3MTkpCisr
KyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTkxNSw3
ICs5MTUsNyBAQAogLSAoQk9PTClfY2FuUHJvdmlkZURvY3VtZW50U291cmNlCiB7CiAgICAgRnJh
bWUqIGZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKLSAgICBTdHJpbmcgbWltZVR5cGUgPSBm
cmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5taW1lVHlwZSgpOworICAgIFN0cmluZyBtaW1lVHlw
ZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPm1pbWVUeXBlKCk7CiAg
ICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSA9IGZyYW1lLT5wYWdlKCkgPyBmcmFtZS0+cGFnZSgp
LT5wbHVnaW5EYXRhKCkgOiAwOwogCiAgICAgaWYgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9u
Ojppc1RleHRNSU1FVHlwZShtaW1lVHlwZSkgfHwKSW5kZXg6IFdlYktpdC93aW5jZS9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFdpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
d2luY2UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXaW5DRS5jcHAJKHJldmlzaW9u
IDc1NzE5KQorKysgV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTAsOCArNDUwLDcgQEAKIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnRXaW5DRTo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBkb2N1bWVu
dExvYWRlcikKIHsKICAgICBpZiAoIW1fcGx1Z2luVmlldykgewotICAgICAgICBGcmFtZUxvYWRl
ciogbG9hZGVyID0gZG9jdW1lbnRMb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgICAgIGxvYWRl
ci0+d3JpdGVyKCktPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBm
YWxzZSk7CisgICAgICAgIGRvY3VtZW50TG9hZGVyLT53cml0ZXIoKS0+c2V0RW5jb2RpbmcobV9y
ZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDc1NzE5KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJDb2xsZWN0aW9uVHlwZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVk
ZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRUaW1pbmcuaCIKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgpAQCAtNTUyLDYgKzU1Myw5IEBACiAgICAgLy8g
dG8gZ2V0IHZpc3VhbGx5IG9yZGVyZWQgaGVicmV3IGFuZCBhcmFiaWMgcGFnZXMgcmlnaHQKICAg
ICB2b2lkIHNldFZpc3VhbGx5T3JkZXJlZCgpOwogICAgIGJvb2wgdmlzdWFsbHlPcmRlcmVkKCkg
Y29uc3QgeyByZXR1cm4gbV92aXN1YWxseU9yZGVyZWQ7IH0KKyAgICAKKyAgICB2b2lkIHNldERv
Y3VtZW50TG9hZGVyKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikgeyBtX2RvY3VtZW50
TG9hZGVyID0gZG9jdW1lbnRMb2FkZXI7IH0KKyAgICBEb2N1bWVudExvYWRlciogbG9hZGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9kb2N1bWVudExvYWRlcjsgfQogCiAgICAgdm9pZCBvcGVuKERvY3Vt
ZW50KiBvd25lckRvY3VtZW50ID0gMCk7CiAgICAgdm9pZCBpbXBsaWNpdE9wZW4oKTsKQEAgLTEx
NDgsNiArMTE1Miw3IEBACiAgICAgYm9vbCBtX2RpZENhbGN1bGF0ZVN0eWxlU2VsZWN0b3I7CiAK
ICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICBEb2N1bWVudExvYWRlciogbV9kb2N1bWVudExvYWRl
cjsKICAgICBPd25QdHI8Q2FjaGVkUmVzb3VyY2VMb2FkZXI+IG1fY2FjaGVkUmVzb3VyY2VMb2Fk
ZXI7CiAgICAgUmVmUHRyPERvY3VtZW50UGFyc2VyPiBtX3BhcnNlcjsKICAgICBib29sIG1fd2Vs
bEZvcm1lZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9u
IDc1NzE5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTMsOCArMjkzLDggQEAKIAogICAgIC8vIElmIGNoYXJzZXQgaGFzIG5vdCBi
ZWVuIGRlY2xhcmVkIGluIHNjcmlwdCB0YWcsIGZhbGwgYmFjayB0byBmcmFtZSBlbmNvZGluZy4K
ICAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9
IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGNoYXJzZXQgPSBm
cmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOworICAgICAgICBpZiAoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+bG9hZGVyKCkpCisgICAg
ICAgICAgICBjaGFyc2V0ID0gbG9hZGVyLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKICAgICB9CiAK
ICAgICByZXR1cm4gY2hhcnNldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gNzU3MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MzYsNiArNDM2LDcgQEAKICAgICBtX2lnbm9yZUF1dG9mb2N1cyA9IGZhbHNlOwog
CiAgICAgbV9mcmFtZSA9IGZyYW1lOworICAgIG1fZG9jdW1lbnRMb2FkZXIgPSBmcmFtZSA/IGZy
YW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSA6IDA7CiAKICAgICBpZiAoZnJh
bWUgfHwgIXVybC5pc0VtcHR5KCkpCiAgICAgICAgIHNldFVSTCh1cmwpOwpAQCAtMjA4Myw5ICsy
MDg0LDggQEAKICAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmIChmcmFt
ZSkgewogICAgICAgICAvLyBUaGlzIGNvZGUgY2FsbHMgaW1wbGljaXRDbG9zZSgpIGlmIGFsbCBs
b2FkaW5nIGhhcyBjb21wbGV0ZWQuCi0gICAgICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9
IGZyYW1lLT5sb2FkZXIoKTsKLSAgICAgICAgZnJhbWVMb2FkZXItPndyaXRlcigpLT5lbmRJZk5v
dExvYWRpbmdNYWluUmVzb3VyY2UoKTsKLSAgICAgICAgZnJhbWVMb2FkZXItPmNoZWNrQ29tcGxl
dGVkKCk7CisgICAgICAgIGxvYWRlcigpLT53cml0ZXIoKS0+ZW5kSWZOb3RMb2FkaW5nTWFpblJl
c291cmNlKCk7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBCZWNhdXNlIHdlIGhhdmUgbm8gZnJhbWUsIHdlIGRvbid0
IGtub3cgaWYgYWxsIGxvYWRpbmcgaGFzIGNvbXBsZXRlZCwKICAgICAgICAgLy8gc28gd2UganVz
dCBjYWxsIGltcGxpY2l0Q2xvc2UoKSBpbW1lZGlhdGVseS4gRklYTUU6IFRoaXMgbWlnaHQgZmly
ZQpAQCAtMzc0Niw3ICszNzQ2LDcgQEAKICAgICBEYXRlQ29tcG9uZW50cyBkYXRlOwogICAgIGJv
b2wgZm91bmREYXRlID0gZmFsc2U7CiAgICAgaWYgKG1fZnJhbWUpIHsKLSAgICAgICAgU3RyaW5n
IGh0dHBMYXN0TW9kaWZpZWQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+
cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoIkxhc3QtTW9kaWZpZWQiKTsKKyAgICAgICAgU3Ry
aW5nIGh0dHBMYXN0TW9kaWZpZWQgPSBtX2RvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLmh0dHBI
ZWFkZXJGaWVsZCgiTGFzdC1Nb2RpZmllZCIpOwogICAgICAgICBpZiAoIWh0dHBMYXN0TW9kaWZp
ZWQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kc1NpbmNlRXBv
Y2hGb3JEYXRlVGltZShwYXJzZURhdGUoaHR0cExhc3RNb2RpZmllZCkpOwogICAgICAgICAgICAg
Zm91bmREYXRlID0gdHJ1ZTsKQEAgLTQyNjQsNyArNDI2NCw3IEBACiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBwYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgIGNvbnRyb2xsZXItPm1haW5S
ZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50KGYtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LCB1cmwoKSk7CisgICAgICAgICAgICBjb250cm9sbGVyLT5tYWluUmVzb3VyY2VGaXJlZERPTUNv
bnRlbnRFdmVudChtX2RvY3VtZW50TG9hZGVyLCB1cmwoKSk7CiAjZW5kaWYKICAgICB9CiB9CkBA
IC00NDc4LDggKzQ0NzgsNyBAQAogICAgICAgICAvLyBsb2FkIGxvY2FsIHJlc291cmNlcy4gIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NTYKICAgICAgICAg
Ly8gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc2MCBmb3Ig
ZnVydGhlcgogICAgICAgICAvLyBkaXNjdXNzaW9uLgotICAgICAgICBEb2N1bWVudExvYWRlciog
ZG9jdW1lbnRMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKLSAg
ICAgICAgaWYgKGRvY3VtZW50TG9hZGVyICYmIGRvY3VtZW50TG9hZGVyLT5zdWJzdGl0dXRlRGF0
YSgpLmlzVmFsaWQoKSkKKyAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPnN1YnN0aXR1dGVE
YXRhKCkuaXNWYWxpZCgpKQogICAgICAgICAgICAgc2VjdXJpdHlPcmlnaW4oKS0+Z3JhbnRMb2Fk
TG9jYWxSZXNvdXJjZXMoKTsKICAgICB9CiAKQEAgLTQ1NTksNyArNDU1OCw3IEBACiAgICAgLy8g
RklYTUU6IEVsaW1pbmF0ZSB0aGlzIHJlZHVuZGFuY3kuCiAgICAgc2V0VVJMKHVybCk7CiAgICAg
Zi0+bG9hZGVyKCktPnNldFVSTCh1cmwpOwotICAgIGYtPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpLT5yZXBsYWNlUmVxdWVzdFVSTEZvclNhbWVEb2N1bWVudE5hdmlnYXRpb24odXJsKTsKKyAg
ICBtX2RvY3VtZW50TG9hZGVyLT5yZXBsYWNlUmVxdWVzdFVSTEZvclNhbWVEb2N1bWVudE5hdmln
YXRpb24odXJsKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c3RhdGVQb3BwZWQoU2VyaWFsaXplZFNj
cmlwdFZhbHVlKiBzdGF0ZU9iamVjdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCShyZXZpc2lvbiA3NTcxOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyAr
MTY4LDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgY2hhcnNldCA9
IGF0dHJzLmdldCgiY2hhcnNldCIpOwogICAgICAgICAgICAgICAgIGlmIChjaGFyc2V0LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IGRvY3VtZW50KCktPmZyYW1lKCkt
PmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgY2hh
cnNldCA9IGRvY3VtZW50KCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKIAogICAg
ICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpLT5yZXF1ZXN0Q1NTU3R5bGVTaGVldCh1cmwsIGNoYXJzZXQpOwogICAgICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzU3MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NSBAQAorMjAxMS0wMS0xMCAgTmF0ZSBD
aGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgRG9jdW1lbnRXcml0ZXIgYSBtZW1iZXIgb2YgRG9j
dW1lbnRMb2FkZXIKKyAgICAgICAgaW5zdGVhZCBvZiBGcmFtZUxvYWRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNDg5CisKKyAgICAgICAgUmVm
YWN0b3IsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGJpbmRpbmdzL1NjcmlwdENvbnRyb2xs
ZXJCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVJ
ZkphdmFTY3JpcHRVUkwpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpsYXN0TW9kaWZpZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZpbmlzaGVkUGFyc2luZyk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6aW5pdFNlY3VyaXR5Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6dXBkYXRlVVJMRm9yUHVzaE9yUmVwbGFjZVN0YXRlKToKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXREb2N1bWVudExvYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bG9hZGVyKToKKyAgICAgICAgKiBkb20v
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NpbmdJ
bnN0cnVjdGlvbjo6Y2hlY2tTdHlsZVNoZWV0KToKKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpzY3JpcHRDaGFyc2V0KToK
KyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MpOgorICAgICAgICAqIGh0bWwvTWVkaWFEb2N1bWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYURvY3VtZW50OjpyZXBsYWNlTWVkaWFFbGVtZW50
VGltZXJGaXJlZCk6CisgICAgICAgICogaHRtbC9QbHVnaW5Eb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5Eb2N1bWVudFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnRTdHJ1Y3R1cmUp
OgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI6OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dExvYWRlcjo6Y29tbWl0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
c2V0dXBGb3JSZXBsYWNlQnlNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExv
YWRlcjo6c2V0RnJhbWUpOgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OndyaXRlcik6CisgICAgICAgICogbG9hZGVy
L0RvY3VtZW50V3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50V3JpdGVyOjpi
ZWdpbik6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50V3JpdGVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFdyaXRlcjo6c2V0RnJhbWUpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6RnJhbWVMb2FkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpyZWNl
aXZlZEZpcnN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6dHJhbnNpdGlv
blRvQ29tbWl0dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpvcGVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpmaW5pc2hlZExvYWRpbmdEb2N1bWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6YWRkRXh0cmFGaWVsZHNUb1JlcXVlc3QpOgor
ICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6Om5vdGlmaWVyKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVl
c3RQcmVsb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmVuY29kaW5nRnJvbUFjY2Vw
dENoYXJzZXQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbWFnZTo6ZGF0YUNoYW5nZWQpOgorCiAyMDExLTAxLTEzICBDc2FiYSBP
c3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWls
ZGZpeCBhZnRlciByNzU3MTUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA3NTcxOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsMTAgKzk0LDcgQEAKICAgICAgICAgICAgIHJldHVybiBlbmNvZGluZzsKICAg
ICB9CiAKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAg
IHJldHVybiBmcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpOwotCi0gICAgcmV0
dXJuIExhdGluMUVuY29kaW5nKCk7CisgICAgcmV0dXJuIGRvY3VtZW50LT5sb2FkZXIoKS0+d3Jp
dGVyKCktPmVuY29kaW5nKCk7CiB9CiAKIFZlY3RvcjxjaGFyPiBGb3JtRGF0YUJ1aWxkZXI6Omdl
bmVyYXRlVW5pcXVlQm91bmRhcnlTdHJpbmcoKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL1NjcmlwdENvbnRyb2xsZXJCYXNlLmNwcAkocmV2aXNpb24gNzU3MTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9TY3JpcHRDb250cm9sbGVyQmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMiw3ICsxMTIsNyBAQAogICAgIC8vICAgICAgICBzeW5jaHJvbm91c2x5IGNh
biBjYXVzZSBjcmFzaGVzOgogICAgIC8vICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjc4MgogICAgIGlmIChzaG91bGRSZXBsYWNlRG9jdW1lbnRJZkphdmFT
Y3JpcHRVUkwgPT0gUmVwbGFjZURvY3VtZW50SWZKYXZhU2NyaXB0VVJMKQotICAgICAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPnJlcGxhY2VEb2N1bWVudChzY3JpcHRSZXN1bHQpOwor
ICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPnJlcGxhY2VE
b2N1bWVudChzY3JpcHRSZXN1bHQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDc1NzE5KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjc4LDEwICsyNzgsMTAgQEAKICAgICAgICAgbG9hZGVyLT5sb2FkKGZha2VSZXF1ZXN0LCBm
YWxzZSk7IC8vIE1ha2Ugc3VyZSB0aGUgRG9jdW1lbnRMb2FkZXIgaXMgY3JlYXRlZAogICAgICAg
ICBsb2FkZXItPnBvbGljeUNoZWNrZXIoKS0+Y2FuY2VsQ2hlY2soKTsgLy8gY2FuY2VsIGFueSBw
b2xpY3kgY2hlY2tzCiAgICAgICAgIGxvYWRlci0+Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCk7Ci0g
ICAgICAgIGxvYWRlci0+d3JpdGVyKCktPnNldE1JTUVUeXBlKCJpbWFnZS9zdmcreG1sIik7Ci0g
ICAgICAgIGxvYWRlci0+d3JpdGVyKCktPmJlZ2luKEtVUkwoKSk7IC8vIGNyZWF0ZSB0aGUgZW1w
dHkgZG9jdW1lbnQKLSAgICAgICAgbG9hZGVyLT53cml0ZXIoKS0+YWRkRGF0YShkYXRhKCktPmRh
dGEoKSwgZGF0YSgpLT5zaXplKCkpOwotICAgICAgICBsb2FkZXItPndyaXRlcigpLT5lbmQoKTsK
KyAgICAgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+c2V0TUlN
RVR5cGUoImltYWdlL3N2Zyt4bWwiKTsKKyAgICAgICAgbG9hZGVyLT5hY3RpdmVEb2N1bWVudExv
YWRlcigpLT53cml0ZXIoKS0+YmVnaW4oS1VSTCgpKTsgLy8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1
bWVudAorICAgICAgICBsb2FkZXItPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPndyaXRlcigpLT5h
ZGREYXRhKGRhdGEoKS0+ZGF0YSgpLCBkYXRhKCktPnNpemUoKSk7CisgICAgICAgIGxvYWRlci0+
YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPmVuZCgpOwogICAgICAgICBmcmFtZS0+
dmlldygpLT5zZXRUcmFuc3BhcmVudCh0cnVlKTsgLy8gU1ZHIEltYWdlcyBhcmUgdHJhbnNwYXJl
bnQuCiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiA3NTcxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDggKzIyOCw4IEBACiAgICAgICAgICYmIGRvY3Vt
ZW50KCktPmZyYW1lKCkgJiYgbV91cmwuaXNWYWxpZCgpKSB7CiAgICAgICAgIAogICAgICAgICBT
dHJpbmcgY2hhcnNldCA9IGdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cik7Ci0gICAgICAgIGlmIChj
aGFyc2V0LmlzRW1wdHkoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgY2hh
cnNldCA9IGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2Rpbmco
KTsKKyAgICAgICAgaWYgKGNoYXJzZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgY2hhcnNldCA9
IGRvY3VtZW50KCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChtX2NhY2hlZFNoZWV0KSB7CiAgICAgICAgICAgICByZW1vdmVQZW5kaW5nU2hl
ZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCShyZXZpc2lv
biA3NTcxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvUGx1Z2luRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBACiAgICAgCiAgICAgbV9lbWJlZEVsZW1lbnQtPnNl
dEF0dHJpYnV0ZShuYW1lQXR0ciwgInBsdWdpbiIpOwogICAgIG1fZW1iZWRFbGVtZW50LT5zZXRB
dHRyaWJ1dGUoc3JjQXR0ciwgZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOwotICAgIG1fZW1i
ZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIGRvY3VtZW50KCktPmZyYW1lKCktPmxv
YWRlcigpLT53cml0ZXIoKS0+bWltZVR5cGUoKSk7CisgICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0
dHJpYnV0ZSh0eXBlQXR0ciwgZG9jdW1lbnQoKS0+bG9hZGVyKCktPndyaXRlcigpLT5taW1lVHlw
ZSgpKTsKIAogICAgIHN0YXRpY19jYXN0PFBsdWdpbkRvY3VtZW50Kj4oZG9jdW1lbnQoKSktPnNl
dFBsdWdpbk5vZGUobV9lbWJlZEVsZW1lbnQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L01lZGlhRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTWVk
aWFEb2N1bWVudC5jcHAJKHJldmlzaW9uIDc1NzE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9N
ZWRpYURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAg
ICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKGhlaWdodEF0dHIsICIxMDAlIik7CiAgICAg
ICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2luIik7CiAgICAg
ICAgIGVtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHNyY0F0dHIsIHVybCgpLnN0cmluZygpKTsK
LSAgICAgICAgZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIGZyYW1lKCktPmxv
YWRlcigpLT53cml0ZXIoKS0+bWltZVR5cGUoKSk7CisgICAgICAgIGVtYmVkRWxlbWVudC0+c2V0
QXR0cmlidXRlKHR5cGVBdHRyLCBsb2FkZXIoKS0+d3JpdGVyKCktPm1pbWVUeXBlKCkpOwogCiAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIHZpZGVvRWxlbWVudC0+cGFyZW50Tm9k
ZSgpLT5yZXBsYWNlQ2hpbGQoZW1iZWRFbGVtZW50LCB2aWRlb0VsZW1lbnQsIGVjKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNzU3MTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzksNyArMTc5LDYgQEAKICAgICAsIG1fcG9saWN5Q2hlY2tlcihmcmFtZSkKICAgICAsIG1faGlz
dG9yeShmcmFtZSkKICAgICAsIG1fbm90aWZlcihmcmFtZSkKLSAgICAsIG1fd3JpdGVyKGZyYW1l
KQogICAgICwgbV9zdWJmcmFtZUxvYWRlcihmcmFtZSkKICAgICAsIG1fc3RhdGUoRnJhbWVTdGF0
ZUNvbW1pdHRlZFBhZ2UpCiAgICAgLCBtX2xvYWRUeXBlKEZyYW1lTG9hZFR5cGVTdGFuZGFyZCkK
QEAgLTIzMyw4ICsyMzIsOCBAQAogICAgIHNldFN0YXRlKEZyYW1lU3RhdGVQcm92aXNpb25hbCk7
CiAgICAgbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyLT5zZXRSZXNwb25zZShSZXNvdXJjZVJl
c3BvbnNlKEtVUkwoKSwgInRleHQvaHRtbCIsIDAsIFN0cmluZygpLCBTdHJpbmcoKSkpOwogICAg
IG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci0+ZmluaXNoZWRMb2FkaW5nKCk7Ci0gICAgd3Jp
dGVyKCktPmJlZ2luKEtVUkwoKSwgZmFsc2UpOwotICAgIHdyaXRlcigpLT5lbmQoKTsKKyAgICBt
X2RvY3VtZW50TG9hZGVyLT53cml0ZXIoKS0+YmVnaW4oS1VSTCgpLCBmYWxzZSk7CisgICAgbV9k
b2N1bWVudExvYWRlci0+d3JpdGVyKCktPmVuZCgpOwogICAgIG1fZnJhbWUtPmRvY3VtZW50KCkt
PmNhbmNlbFBhcnNpbmcoKTsKICAgICBtX3N0YXRlTWFjaGluZS5hZHZhbmNlVG8oRnJhbWVMb2Fk
ZXJTdGF0ZU1hY2hpbmU6OkRpc3BsYXlpbmdJbml0aWFsRW1wdHlEb2N1bWVudCk7CiAgICAgbV9k
aWRDYWxsSW1wbGljaXRDbG9zZSA9IHRydWU7CkBAIC01OTAsNyArNTg5LDYgQEAKICAgICAvLyBE
byBub3QgZHJvcCB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBTY3JpcHRDb250cm9sbGVyIGFuZCB2
aWV3IGFyZSBjbGVhcmVkCiAgICAgLy8gYXMgc29tZSBkZXN0cnVjdG9ycyBtaWdodCBzdGlsbCB0
cnkgdG8gYWNjZXNzIHRoZSBkb2N1bWVudC4KICAgICBtX2ZyYW1lLT5zZXREb2N1bWVudCgwKTsK
LSAgICB3cml0ZXIoKS0+Y2xlYXIoKTsKIAogICAgIG1fc3ViZnJhbWVMb2FkZXIuY2xlYXIoKTsK
IApAQCAtNjA5LDggKzYwNyw4IEBACiAKIHZvaWQgRnJhbWVMb2FkZXI6OnJlY2VpdmVkRmlyc3RE
YXRhKCkKIHsKLSAgICB3cml0ZXIoKS0+YmVnaW4obV93b3JraW5nVVJMLCBmYWxzZSk7Ci0gICAg
d3JpdGVyKCktPnNldERvY3VtZW50V2FzTG9hZGVkQXNQYXJ0T2ZOYXZpZ2F0aW9uKCk7CisgICAg
YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+d3JpdGVyKCktPmJlZ2luKG1fd29ya2luZ1VSTCwgZmFs
c2UpOworICAgIGFjdGl2ZURvY3VtZW50TG9hZGVyKCktPndyaXRlcigpLT5zZXREb2N1bWVudFdh
c0xvYWRlZEFzUGFydE9mTmF2aWdhdGlvbigpOwogCiAgICAgZGlzcGF0Y2hEaWRDb21taXRMb2Fk
KCk7CiAgICAgZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdHNJbkFsbFdvcmxkcygpOwpAQCAt
MjAxOCw3ICsyMDE2LDcgQEAKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IH0KIAotICAgIHdyaXRlcigpLT5zZXRNSU1FVHlwZShkbC0+cmVzcG9uc2VNSU1FVHlwZSgpKTsK
KyAgICBtX2RvY3VtZW50TG9hZGVyLT53cml0ZXIoKS0+c2V0TUlNRVR5cGUoZGwtPnJlc3BvbnNl
TUlNRVR5cGUoKSk7CiAKICAgICAvLyBUZWxsIHRoZSBjbGllbnQgd2UndmUgY29tbWl0dGVkIHRo
aXMgVVJMLgogICAgIEFTU0VSVChtX2ZyYW1lLT52aWV3KCkpOwpAQCAtMjE1NCw4ICsyMTUyLDYg
QEAKICAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+c2V0VVJMKGRvY3VtZW50LT51cmwoKSk7CiAg
ICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPnNldFNlY3VyaXR5T3JpZ2luKGRvY3VtZW50LT5zZWN1
cml0eU9yaWdpbigpKTsKIAotICAgIHdyaXRlcigpLT5zZXREZWNvZGVyKGRvY3VtZW50LT5kZWNv
ZGVyKCkpOwotCiAgICAgdXBkYXRlRmlyc3RQYXJ0eUZvckNvb2tpZXMoKTsKIAogICAgIGNhY2hl
ZEZyYW1lLnJlc3RvcmUoKTsKQEAgLTIyMzQsNyArMjIzMCw3IEBACiAgICAgQXJjaGl2ZVJlc291
cmNlKiBtYWluUmVzb3VyY2UgPSBhcmNoaXZlLT5tYWluUmVzb3VyY2UoKTsKICAgICBsb2FkZXIt
PnNldFBhcnNlZEFyY2hpdmVEYXRhKG1haW5SZXNvdXJjZS0+ZGF0YSgpKTsKIAotICAgIHdyaXRl
cigpLT5zZXRNSU1FVHlwZShtYWluUmVzb3VyY2UtPm1pbWVUeXBlKCkpOworICAgIGxvYWRlci0+
d3JpdGVyKCktPnNldE1JTUVUeXBlKG1haW5SZXNvdXJjZS0+bWltZVR5cGUoKSk7CiAKICAgICBj
bG9zZVVSTCgpOwogICAgIGRpZE9wZW5VUkwobWFpblJlc291cmNlLT51cmwoKSk7CkBAIC0yMjQy
LDggKzIyMzgsOCBAQAogICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKICAgICBTdHJp
bmcgdXNlckNob3NlbkVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXIoKS0+b3ZlcnJpZGVFbmNvZGlu
ZygpOwogICAgIGJvb2wgZW5jb2RpbmdJc1VzZXJDaG9zZW4gPSAhdXNlckNob3NlbkVuY29kaW5n
LmlzTnVsbCgpOwotICAgIHdyaXRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZ0lzVXNlckNob3Nl
biA/IHVzZXJDaG9zZW5FbmNvZGluZyA6IG1haW5SZXNvdXJjZS0+dGV4dEVuY29kaW5nKCksIGVu
Y29kaW5nSXNVc2VyQ2hvc2VuKTsKLSAgICB3cml0ZXIoKS0+YWRkRGF0YShtYWluUmVzb3VyY2Ut
PmRhdGEoKS0+ZGF0YSgpLCBtYWluUmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKTsKKyAgICBsb2Fk
ZXItPndyaXRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZ0lzVXNlckNob3NlbiA/IHVzZXJDaG9z
ZW5FbmNvZGluZyA6IG1haW5SZXNvdXJjZS0+dGV4dEVuY29kaW5nKCksIGVuY29kaW5nSXNVc2Vy
Q2hvc2VuKTsKKyAgICBsb2FkZXItPndyaXRlcigpLT5hZGREYXRhKG1haW5SZXNvdXJjZS0+ZGF0
YSgpLT5kYXRhKCksIG1haW5SZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCkpOwogfQogCiBib29sIEZy
YW1lTG9hZGVyOjppc1JlcGxhY2luZygpIGNvbnN0CkBAIC0yNjY4LDcgKzI2NjQsNyBAQAogICAg
IC8vIEFsd2F5cyB0cnkgVVRGLTguIElmIHRoYXQgZmFpbHMsIHRyeSBmcmFtZSBlbmNvZGluZyAo
aWYgYW55KSBhbmQgdGhlbiB0aGUgZGVmYXVsdC4KICAgICAvLyBGb3IgYSBuZXdseSBvcGVuZWQg
ZnJhbWUgd2l0aCBhbiBlbXB0eSBVUkwsIGVuY29kaW5nKCkgc2hvdWxkIG5vdCBiZSB1c2VkLCBi
ZWNhdXNlIHRoaXMgbWV0aG9kcyBhc2tzIGRlY29kZXIsIHdoaWNoIHVzZXMgSVNPLTg4NTktMS4K
ICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwotICAgIHJlcXVl
c3Quc2V0UmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkoIlVU
Ri04Iiwgd3JpdGVyKCktPmRlcHJlY2F0ZWRGcmFtZUVuY29kaW5nKCksIHNldHRpbmdzID8gc2V0
dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkgOiBTdHJpbmcoKSk7CisgICAgcmVxdWVz
dC5zZXRSZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSgiVVRG
LTgiLCBhY3RpdmVEb2N1bWVudExvYWRlcigpLT53cml0ZXIoKS0+ZGVwcmVjYXRlZEZyYW1lRW5j
b2RpbmcoKSwgc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSA6
IFN0cmluZygpKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6YWRkSFRUUE9yaWdpbklmTmVlZGVk
KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RyaW5nIG9yaWdpbikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAko
cmV2aXNpb24gNzU3MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDIsNyArNjAyLDcgQEAKIHsKICAg
ICBTdHJpbmcgZW5jb2Rpbmc7CiAgICAgaWYgKHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlw
dCB8fCB0eXBlID09IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KQotICAgICAgICBlbmNv
ZGluZyA9IGNoYXJzZXQuaXNFbXB0eSgpID8gbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCkt
PndyaXRlcigpLT5lbmNvZGluZygpIDogY2hhcnNldDsKKyAgICAgICAgZW5jb2RpbmcgPSBjaGFy
c2V0LmlzRW1wdHkoKSA/IG1fZG9jdW1lbnQtPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2Rpbmco
KSA6IGNoYXJzZXQ7CiAKICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSByZXF1ZXN0UmVz
b3VyY2UodHlwZSwgdXJsLCBlbmNvZGluZywgUmVzb3VyY2VMb2FkUHJpb3JpdHlVbnJlc29sdmVk
LCB0cnVlKTsKICAgICBpZiAoIXJlc291cmNlIHx8IChtX3ByZWxvYWRzICYmIG1fcHJlbG9hZHMt
PmNvbnRhaW5zKHJlc291cmNlKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuaAkocmV2aXNpb24gNzU3MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBEb2N1
bWVudExvYWRlcl9oCiAKICNpbmNsdWRlICJEb2N1bWVudExvYWRUaW1pbmcuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudFdyaXRlci5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIKICNpbmNs
dWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC03
NSw2ICs3Niw4IEBACiAgICAgICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlcigpIGNvbnN0Owog
ICAgICAgICBNYWluUmVzb3VyY2VMb2FkZXIqIG1haW5SZXNvdXJjZUxvYWRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fbWFpblJlc291cmNlTG9hZGVyLmdldCgpOyB9CiAgICAgICAgIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBtYWluUmVzb3VyY2VEYXRhKCkgY29uc3Q7CisgICAgICAgIAorICAgICAg
ICBEb2N1bWVudFdyaXRlciogd3JpdGVyKCkgY29uc3QgeyByZXR1cm4gJm1fd3JpdGVyOyB9CiAK
ICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QoKSBjb25zdDsK
ICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3RDb3B5KCkgY29u
c3Q7CkBAIC0yNDksNiArMjUyLDggQEAKICAgICAgICAgUmVzb3VyY2VMb2FkZXJTZXQgbV9wbHVn
SW5TdHJlYW1Mb2FkZXJzOwogCiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fbWFpblJl
c291cmNlRGF0YTsKKyAgICAgICAgCisgICAgICAgIG11dGFibGUgRG9jdW1lbnRXcml0ZXIgbV93
cml0ZXI7CiAKICAgICAgICAgLy8gQSByZWZlcmVuY2UgdG8gYWN0dWFsIHJlcXVlc3QgdXNlZCB0
byBjcmVhdGUgdGhlIGRhdGEgc291cmNlLgogICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJl
IHVzZWQgYnkgdGhlIHJlc291cmNlTG9hZERlbGVnYXRlJ3MKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudFdyaXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFdyaXRlci5oCShyZXZpc2lvbiA3NTcxOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudFdyaXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw4IEBA
CiAgICAgdm9pZCBhZGREYXRhKGNvbnN0IGNoYXIqIHN0cmluZywgaW50IGxlbmd0aCA9IC0xLCBi
b29sIGZsdXNoID0gZmFsc2UpOwogICAgIHZvaWQgZW5kKCk7CiAgICAgdm9pZCBlbmRJZk5vdExv
YWRpbmdNYWluUmVzb3VyY2UoKTsKLSAgICB2b2lkIGNsZWFyKCk7CisgICAgCisgICAgdm9pZCBz
ZXRGcmFtZShGcmFtZSogZnJhbWUpIHsgbV9mcmFtZSA9IGZyYW1lOyB9CiAKICAgICBTdHJpbmcg
ZW5jb2RpbmcoKSBjb25zdDsKICAgICB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgZW5j
b2RpbmcsIGJvb2wgdXNlckNob3Nlbik7CkBAIC03NSw2ICs3Niw3IEBACiAKIHByaXZhdGU6CiAg
ICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9jdW1lbnQoY29uc3QgS1VSTCYpOworICAg
IHZvaWQgY2xlYXIoKTsKIAogICAgIEZyYW1lKiBtX2ZyYW1lOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDc1NzE5KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NiArMzcsNyBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudFdyaXRlci5o
IgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgpAQCAtNDksNyArNTAsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLQorI2lu
Y2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9V
bmljb2RlLmg+CkBAIC03Nyw2ICs3OCw3IEBACiBEb2N1bWVudExvYWRlcjo6RG9jdW1lbnRMb2Fk
ZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXEsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJz
dGl0dXRlRGF0YSkKICAgICA6IG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCh0cnVlKQogICAg
ICwgbV9mcmFtZSgwKQorICAgICwgbV93cml0ZXIobV9mcmFtZSkKICAgICAsIG1fb3JpZ2luYWxS
ZXF1ZXN0KHJlcSkKICAgICAsIG1fc3Vic3RpdHV0ZURhdGEoc3Vic3RpdHV0ZURhdGEpCiAgICAg
LCBtX29yaWdpbmFsUmVxdWVzdENvcHkocmVxKQpAQCAtMjc2LDcgKzI3OCw3IEBACiAgICAgY29t
bWl0SWZSZWFkeSgpOwogICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWVMb2FkZXIo
KSkgewogICAgICAgICBsb2FkZXItPmZpbmlzaGVkTG9hZGluZ0RvY3VtZW50KHRoaXMpOwotICAg
ICAgICBsb2FkZXItPndyaXRlcigpLT5lbmQoKTsKKyAgICAgICAgbV93cml0ZXIuZW5kKCk7CiAg
ICAgfQogfQogCkBAIC0zMDQsMTAgKzMwNiw5IEBACiAgICAgICAgIHVzZXJDaG9zZW4gPSBmYWxz
ZTsKICAgICAgICAgZW5jb2RpbmcgPSByZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKICAg
ICB9Ci0gICAgLy8gRklYTUU6IERvY3VtZW50V3JpdGVyIHNob3VsZCBiZSBvd25lZCBieSBEb2N1
bWVudExvYWRlci4KLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGVyKCktPnNldEVuY29kaW5n
KGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAgICBtX3dyaXRlci5zZXRFbmNvZGluZyhlbmNvZGlu
ZywgdXNlckNob3Nlbik7CiAgICAgQVNTRVJUKG1fZnJhbWUtPmRvY3VtZW50KCktPnBhcnNpbmco
KSk7Ci0gICAgbV9mcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5hZGREYXRhKGJ5dGVzLCBsZW5n
dGgpOworICAgIG1fd3JpdGVyLmFkZERhdGEoYnl0ZXMsIGxlbmd0aCk7CiB9CiAKIGJvb2wgRG9j
dW1lbnRMb2FkZXI6OmRvZXNQcm9ncmVzc2l2ZUxvYWQoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSkg
Y29uc3QKQEAgLTMzNyw3ICszMzgsNyBAQAogICAgIH0KICAgICAKICAgICBmcmFtZUxvYWRlcigp
LT5maW5pc2hlZExvYWRpbmdEb2N1bWVudCh0aGlzKTsKLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
d3JpdGVyKCktPmVuZCgpOworICAgIG1fd3JpdGVyLmVuZCgpOwogICAgIAogICAgIGZyYW1lTG9h
ZGVyKCktPnNldFJlcGxhY2luZygpOwogICAgIG1fZ290Rmlyc3RCeXRlID0gZmFsc2U7CkBAIC0z
NzQsNiArMzc1LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChmcmFtZSAmJiAhbV9m
cmFtZSk7CiAgICAgbV9mcmFtZSA9IGZyYW1lOworICAgIG1fd3JpdGVyLnNldEZyYW1lKGZyYW1l
KTsKICAgICBhdHRhY2hUb0ZyYW1lKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFdyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50V3JpdGVyLmNwcAkocmV2aXNpb24gNzU3MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDcg
QEAKIAogICAgIGJvb2wgcmVzZXRTY3JpcHRpbmcgPSAhKG1fZnJhbWUtPmxvYWRlcigpLT5zdGF0
ZU1hY2hpbmUoKS0+aXNEaXNwbGF5aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSAmJiBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5pc1NlY3VyZVRyYW5zaXRpb25Ubyh1cmwp
KTsKICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xlYXIocmVzZXRTY3JpcHRpbmcsIHJlc2V0U2Ny
aXB0aW5nKTsKKyAgICBjbGVhcigpOwogICAgIGlmIChyZXNldFNjcmlwdGluZykKICAgICAgICAg
bV9mcmFtZS0+c2NyaXB0KCktPnVwZGF0ZVBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gNzU3MTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNiBAQAogI2RlZmluZSBGcmFtZUxvYWRlcl9oCiAKICNpbmNsdWRlICJDYWNoZVBvbGljeS5o
IgotI2luY2x1ZGUgIkRvY3VtZW50V3JpdGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJTdGF0
ZU1hY2hpbmUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiSGlz
dG9yeUNvbnRyb2xsZXIuaCIKQEAgLTk4LDcgKzk3LDYgQEAKICAgICBQb2xpY3lDaGVja2VyKiBw
b2xpY3lDaGVja2VyKCkgY29uc3QgeyByZXR1cm4gJm1fcG9saWN5Q2hlY2tlcjsgfQogICAgIEhp
c3RvcnlDb250cm9sbGVyKiBoaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gJm1faGlzdG9yeTsgfQog
ICAgIFJlc291cmNlTG9hZE5vdGlmaWVyKiBub3RpZmllcigpIGNvbnN0IHsgcmV0dXJuICZtX25v
dGlmZXI7IH0KLSAgICBEb2N1bWVudFdyaXRlciogd3JpdGVyKCkgY29uc3QgeyByZXR1cm4gJm1f
d3JpdGVyOyB9CiAgICAgU3ViZnJhbWVMb2FkZXIqIHN1YmZyYW1lTG9hZGVyKCkgY29uc3QgeyBy
ZXR1cm4gJm1fc3ViZnJhbWVMb2FkZXI7IH0KIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBj
b29sLCBwZW9wbGUuIFRoZXJlIGFyZSB0b28gbWFueSBkaWZmZXJlbnQgZnVuY3Rpb25zIHRoYXQg
YWxsIHN0YXJ0IGxvYWRzLgpAQCAtNDI5LDcgKzQyNyw2IEBACiAgICAgbXV0YWJsZSBQb2xpY3lD
aGVja2VyIG1fcG9saWN5Q2hlY2tlcjsKICAgICBtdXRhYmxlIEhpc3RvcnlDb250cm9sbGVyIG1f
aGlzdG9yeTsKICAgICBtdXRhYmxlIFJlc291cmNlTG9hZE5vdGlmaWVyIG1fbm90aWZlcjsKLSAg
ICBtdXRhYmxlIERvY3VtZW50V3JpdGVyIG1fd3JpdGVyOwogICAgIG11dGFibGUgU3ViZnJhbWVM
b2FkZXIgbV9zdWJmcmFtZUxvYWRlcjsKICAgICBtdXRhYmxlIEZyYW1lTG9hZGVyU3RhdGVNYWNo
aW5lIG1fc3RhdGVNYWNoaW5lOwogCg==
</data>
<flag name="review"
          id="70222"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>