<?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>49351</bug_id>
          
          <creation_ts>2010-11-10 16:18:26 -0800</creation_ts>
          <short_desc>More ResourceLoadScheduler cleanup</short_desc>
          <delta_ts>2010-11-11 21:17:42 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>307610</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-10 16:18:26 -0800</bug_when>
    <thetext>* Call willSendRequest() when the network load starts, rather than at the time of ResourceLoader creation (since those are no longer the same time)
* Handle deferred request when the network load would have been started.  This means ResourceLoader handles all logic related to deferred requests, and nothing needs to be re-inserted into ResourceLoadScheduler&apos;s queue.
* Call CachedResource::setRequestedFromNetworkingLayer() at the time of willSendRequest()

Note that we can no longer simply return 0 from SubresourceLoader::create() if willSendRequest() cancels the request (since willSendRequest() might run synchronously, but also might not be).  Therefore, I made ResourceLoader::reachedTerminalState() public so that Loader can tell if the SubresourceLoader completed its life synchronously and avoid erroneously keeping it alive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307617</commentid>
    <comment_count>1</comment_count>
      <attachid>73554</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-10 16:24:36 -0800</bug_when>
    <thetext>Created attachment 73554
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307645</commentid>
    <comment_count>2</comment_count>
      <attachid>73554</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-11-10 17:11:54 -0800</bug_when>
    <thetext>Comment on attachment 73554
patch

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

Looks good, r=me

&gt; WebCore/loader/loader.cpp:175
&gt; +    request-&gt;cachedResource()-&gt;setRequestedFromNetworkingLayer();
&gt; +
&gt; +}

Extra new line here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307721</commentid>
    <comment_count>3</comment_count>
      <attachid>73578</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-10 21:21:45 -0800</bug_when>
    <thetext>Created attachment 73578
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307729</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-10 22:01:59 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 73578:

animations/suspend-resume-animation.html
fast/text/atsui-spacing-features.html

Please file bugs against the tests.  These tests were authored by cmarrin@apple.com, ggaren@apple.com, hamaji@chromium.org, and mitz@webkit.org.  The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307870</commentid>
    <comment_count>5</comment_count>
      <attachid>73578</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-11-11 06:22:27 -0800</bug_when>
    <thetext>Comment on attachment 73578
Patch for landing

Seems I was hasty with r+. Browsing around on mac with this patch asserts very quickly. I think calling CachedResource::setDefersLoading(false) should call to ResourceLoadScheduler to schedule the load, instead of calling start() directly.

I would be good if you could do some basic browsing using Mac debug build with this type of patches as that catches many issues not covered by the tests.

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   com.apple.WebCore             	0x00000001021badca WebCore::ResourceLoadScheduler::HostInformation::assertLoaderBeingCounted(WebCore::ResourceLoader*) + 218 (ResourceLoadScheduler.cpp:248)
1   com.apple.WebCore             	0x00000001021bbc17 WebCore::ResourceLoadScheduler::assertLoaderBeingCounted(WebCore::ResourceLoader*) + 115 (ResourceLoadScheduler.cpp:235)
2   com.apple.WebCore             	0x0000000101f85dd2 WebCore::ResourceLoader::start() + 280 (ResourceLoader.cpp:144)
3   com.apple.WebCore             	0x0000000101f8616c WebCore::ResourceLoader::setDefersLoading(bool) + 290 (ResourceLoader.cpp:177)
4   com.apple.WebCore             	0x000000010170aa0b WebCore::setAllDefersLoading(WTF::HashSet&lt;WTF::RefPtr&lt;WebCore::ResourceLoader&gt;, WTF::PtrHash&lt;WTF::RefPtr&lt;WebCore::ResourceLoader&gt; &gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::ResourceLoader&gt; &gt; &gt; const&amp;, bool) + 135 (DocumentLoader.cpp:70)
5   com.apple.WebCore             	0x000000010170ab8d WebCore::DocumentLoader::setDefersLoading(bool) + 91 (DocumentLoader.cpp:694)
6   com.apple.WebCore             	0x00000001018711bc WebCore::FrameLoader::setDefersLoading(bool) + 74 (FrameLoader.cpp:251)
7   com.apple.WebCore             	0x0000000101ddfb55 WebCore::Page::setDefersLoading(bool) + 113 (Page.cpp:579)
8   com.apple.WebKit              	0x0000000100fefc9d -[WebView(WebPrivate) setDefersCallbacks:] + 115 (WebView.mm:2218)
9   com.apple.Safari              	0x000000010008cee6 0x100000000 + 577254
10  com.apple.JavaScriptCore      	0x000000010088f137 WTF::dispatchFunctionsFromMainThread() + 242 (MainThread.cpp:156)
11  com.apple.JavaScriptCore      	0x0000000100890ad4 -[WTFMainThreadCaller call] + 21 (MainThreadMac.mm:48)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307947</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-11-11 08:39:50 -0800</bug_when>
    <thetext>Does this mean that assertLoaderBeingCounted() is a useful assertion (see bug 49320 for context)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307956</commentid>
    <comment_count>7</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-11 09:06:51 -0800</bug_when>
    <thetext>

(In reply to comment #5)
&gt; (From update of attachment 73578 [details])
&gt; Seems I was hasty with r+. Browsing around on mac with this patch asserts very quickly. I think calling CachedResource::setDefersLoading(false) should call to ResourceLoadScheduler to schedule the load, instead of calling start() directly.
&gt; 
&gt; I would be good if you could do some basic browsing using Mac debug build with this type of patches as that catches many issues not covered by the tests.
&gt; 
&gt; Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
&gt; 0   com.apple.WebCore                 0x00000001021badca WebCore::ResourceLoadScheduler::HostInformation::assertLoaderBeingCounted(WebCore::ResourceLoader*) + 218 (ResourceLoadScheduler.cpp:248)
&gt; 1   com.apple.WebCore                 0x00000001021bbc17 WebCore::ResourceLoadScheduler::assertLoaderBeingCounted(WebCore::ResourceLoader*) + 115 (ResourceLoadScheduler.cpp:235)
&gt; 2   com.apple.WebCore                 0x0000000101f85dd2 WebCore::ResourceLoader::start() + 280 (ResourceLoader.cpp:144)
&gt; 3   com.apple.WebCore                 0x0000000101f8616c WebCore::ResourceLoader::setDefersLoading(bool) + 290 (ResourceLoader.cpp:177)
&gt; 4   com.apple.WebCore                 0x000000010170aa0b WebCore::setAllDefersLoading(WTF::HashSet&lt;WTF::RefPtr&lt;WebCore::ResourceLoader&gt;, WTF::PtrHash&lt;WTF::RefPtr&lt;WebCore::ResourceLoader&gt; &gt;, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::ResourceLoader&gt; &gt; &gt; const&amp;, bool) + 135 (DocumentLoader.cpp:70)
&gt; 5   com.apple.WebCore                 0x000000010170ab8d WebCore::DocumentLoader::setDefersLoading(bool) + 91 (DocumentLoader.cpp:694)
&gt; 6   com.apple.WebCore                 0x00000001018711bc WebCore::FrameLoader::setDefersLoading(bool) + 74 (FrameLoader.cpp:251)
&gt; 7   com.apple.WebCore                 0x0000000101ddfb55 WebCore::Page::setDefersLoading(bool) + 113 (Page.cpp:579)
&gt; 8   com.apple.WebKit                  0x0000000100fefc9d -[WebView(WebPrivate) setDefersCallbacks:] + 115 (WebView.mm:2218)
&gt; 9   com.apple.Safari                  0x000000010008cee6 0x100000000 + 577254
&gt; 10  com.apple.JavaScriptCore          0x000000010088f137 WTF::dispatchFunctionsFromMainThread() + 242 (MainThread.cpp:156)
&gt; 11  com.apple.JavaScriptCore          0x0000000100890ad4 -[WTFMainThreadCaller call] + 21 (MainThreadMac.mm:48)

The main problem with putting a deferred load back in the ResourceLoadScheduler queue is that I didn&apos;t expose a way to schedule an already existing load (you can create and schedule, but not just schedule).  I&apos;m happy to change it if you like, but that will add to the complexity of this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308009</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-11-11 11:14:52 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; The main problem with putting a deferred load back in the ResourceLoadScheduler queue is that I didn&apos;t expose a way to schedule an already existing load (you can create and schedule, but not just schedule).  I&apos;m happy to change it if you like, but that will add to the complexity of this change.

I don&apos;t see the problem.

If the ResourceLoader has not been start()ed yet then it should still be in a pending queue when the setDefersLoading(false) is called and scheduling it normally via the ResourceLoadScheduler is the right thing to do.

In case the load was already start()ed when the setDefersLoading(true) was called the load will resume with m_handle-&gt;setDefersLoading(defers), start() is not called, and the code is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308010</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-11-11 11:15:42 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Does this mean that assertLoaderBeingCounted() is a useful assertion (see bug 49320 for context)?

Yeah, probably. This patch simplifies the logic so that the current assert is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308016</commentid>
    <comment_count>10</comment_count>
      <attachid>73629</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-11-11 11:24:20 -0800</bug_when>
    <thetext>Created attachment 73629
Make ResourceLoader::start() protect and friend ResourceLoadScheduler

Just saw your post.  I was about to post this patch, so I figured I&apos;d go ahead and get your opinion as to whether this is better or worse than leaving sending deferred loads back through ResourceLoadScheduler.

We had talked in #webkit on Monday about making ResourceLoadScheduler a friend of ResourceLoader, so that start() no longer needed to be public.  I believe that, if this is the case, it may remove one of the main needs for assertLoaderBeingCounted() (that the load might have been started without going through ResourceLoadScheduler).

I don&apos;t have strong feelings on which technique we go with, but I figured I should post this one since the work was already done :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308068</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-11-11 12:41:58 -0800</bug_when>
    <thetext>Yeah, this is correct, I misread the code in the previous comment. Just calling start() directly when undeffering is the right thing to do. If the scheduler hasn&apos;t scheduled the load yet at that point m_deferredRequest will be null and nothing will happen.

This also means that the assert is indeed bogus.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308360</commentid>
    <comment_count>12</comment_count>
      <attachid>73629</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-11 21:17:36 -0800</bug_when>
    <thetext>Comment on attachment 73629
Make ResourceLoader::start() protect and friend ResourceLoadScheduler

Clearing flags on attachment: 73629

Committed r71884: &lt;http://trac.webkit.org/changeset/71884&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308361</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-11 21:17:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73554</attachid>
            <date>2010-11-10 16:24:36 -0800</date>
            <delta_ts>2010-11-10 21:21:37 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>12872</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTc3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMTEtMTAgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
bGVhbnVwIGFmdGVyIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzcxNTYyLCBuYW1l
bHk6CisgICAgICAgIE1ha2UgZGVmZXJyZWQgcmVxdWVzdCBoYW5kbGUgc2ltcGxlci4KKyAgICAg
ICAgRG9uJ3QgcGVyZm9ybSBjYWxsYmFja3MgYXNzb2NpYXRlZCB3aXRoIG5ldHdvcmsgbG9hZCBz
dGFydGluZworICAgICAgICAoZS5nLiwgd2lsbFNlbmRSZXF1ZXN0KSB1bnRpbCB0aGUgbG9hZCBp
cyBpbiBmYWN0IHNlbnQgdG8gdGhlIG5ldHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM1MQorCisgICAgICAgIEJlaGF2aW9yIHNob3VsZCBi
ZSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVx
dWVzdHMpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRlcjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OnNldERl
ZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmRpZENhbmNl
bCk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRlcjo6cmVhY2hlZFRlcm1pbmFsU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OnJlcXVlc3QpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRl
KToKKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRl
cjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6Cisg
ICAgICAgICogbG9hZGVyL2xvYWRlci5oOgorCiAyMDEwLTExLTEwICBNYXR0aGV3IERlbGFuZXkg
IDxtZGVsYW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9sb2FkZXIuaAkocmV2aXNpb24gNzE3NDQpCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogICAgICAgICB2b2lkIGNhbmNlbFJl
cXVlc3RzKENhY2hlZFJlc291cmNlTG9hZGVyKik7CiAKICAgICBwcml2YXRlOgorICAgICAgICB2
aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiwgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VM
b2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVDYWNoZWRNZXRhZGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcAko
cmV2aXNpb24gNzE3NDQpCisrKyBXZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAKICAgICBSZWZQdHI8TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlcihhZG9wdFJlZihuZXcgTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXIoZnJhbWUsIGNsaWVudCkpKTsKICAgICBsb2FkZXItPnNldFNob3VsZEJ1
ZmZlckRhdGEoZmFsc2UpOwogICAgIGxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+YWRkUGx1Z0lu
U3RyZWFtTG9hZGVyKGxvYWRlci5nZXQoKSk7Ci0gICAgcmV0dXJuIGxvYWRlci0+bG9hZChyZXF1
ZXN0KSA/IGxvYWRlci5yZWxlYXNlKCkgOiAwOworICAgIGxvYWRlci0+aW5pdChyZXF1ZXN0KTsK
KyAgICByZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKIH0KIAogYm9vbCBOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlcjo6aXNEb25lKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gNzE3NDQpCisrKyBXZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDYgQEAK
IAogICAgIGZvciAoaW50IHByaW9yaXR5ID0gSGlnaDsgcHJpb3JpdHkgPj0gbWluaW11bVByaW9y
aXR5OyAtLXByaW9yaXR5KSB7CiAgICAgICAgIEhvc3RJbmZvcm1hdGlvbjo6UmVxdWVzdFF1ZXVl
JiByZXF1ZXN0c1BlbmRpbmcgPSBob3N0LT5yZXF1ZXN0c1BlbmRpbmcoKFByaW9yaXR5KSBwcmlv
cml0eSk7Ci0gICAgICAgIEhvc3RJbmZvcm1hdGlvbjo6UmVxdWVzdFF1ZXVlIGRlZmVycmVkUmVx
dWVzdHM7CiAKICAgICAgICAgd2hpbGUgKCFyZXF1ZXN0c1BlbmRpbmcuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IHJlc291cmNlTG9hZGVyID0gcmVxdWVz
dHNQZW5kaW5nLmZpcnN0KCk7CkBAIC0xODksMjAgKzE4OCwxNCBAQAogICAgICAgICAgICAgLy8g
YW5kIHdlIGRvbid0IGtub3cgYWxsIHN0eWxlc2hlZXRzIHlldC4KICAgICAgICAgICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IHJlc291cmNlTG9hZGVyLT5mcmFtZUxvYWRlcigpID8gcmVzb3VyY2VM
b2FkZXItPmZyYW1lTG9hZGVyKCktPmZyYW1lKCktPmRvY3VtZW50KCkgOiAwOwogICAgICAgICAg
ICAgYm9vbCBzaG91bGRMaW1pdFJlcXVlc3RzID0gIWhvc3QtPm5hbWUoKS5pc051bGwoKSB8fCAo
ZG9jdW1lbnQgJiYgKGRvY3VtZW50LT5wYXJzaW5nKCkgfHwgIWRvY3VtZW50LT5oYXZlU3R5bGVz
aGVldHNMb2FkZWQoKSkpOwotICAgICAgICAgICAgaWYgKHNob3VsZExpbWl0UmVxdWVzdHMgJiYg
aG9zdC0+bGltaXRSZXF1ZXN0cygpKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCFkZWZlcnJl
ZFJlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHNQZW5kaW5n
LmFwcGVuZChkZWZlcnJlZFJlcXVlc3RzLnRha2VGaXJzdCgpKTsKKyAgICAgICAgICAgIGlmIChz
aG91bGRMaW1pdFJlcXVlc3RzICYmIGhvc3QtPmxpbWl0UmVxdWVzdHMoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZUxv
YWRlci0+c3RhcnQoKSkKKyAgICAgICAgICAgIHJlc291cmNlTG9hZGVyLT5zdGFydCgpOworICAg
ICAgICAgICAgaWYgKCFyZXNvdXJjZUxvYWRlci0+cmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkKICAg
ICAgICAgICAgICAgICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJjZUxvYWRlci5nZXQo
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZGVmZXJyZWRSZXF1ZXN0cy5h
cHBlbmQocmVzb3VyY2VMb2FkZXIpOwogICAgICAgICAgICAgcmVxdWVzdHNQZW5kaW5nLnJlbW92
ZUZpcnN0KCk7CiAgICAgICAgIH0KLQotICAgICAgICByZXF1ZXN0c1BlbmRpbmcuc3dhcChkZWZl
cnJlZFJlcXVlc3RzKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5j
cHAJKHJldmlzaW9uIDcxNzQ0KQorKysgV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsOSArMTEwLDEwIEBACiAgICAgbV9kZWZlcnJlZFJlcXVl
c3QgPSBSZXNvdXJjZVJlcXVlc3QoKTsKIH0KIAotYm9vbCBSZXNvdXJjZUxvYWRlcjo6bG9hZChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHIpCit2b2lkIFJlc291cmNlTG9hZGVyOjppbml0KGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcikKIHsKICAgICBBU1NFUlQoIW1faGFuZGxlKTsKKyAgICBBU1NF
UlQobV9yZXF1ZXN0LmlzTnVsbCgpKTsKICAgICBBU1NFUlQobV9kZWZlcnJlZFJlcXVlc3QuaXNO
dWxsKCkpOwogICAgIEFTU0VSVCghbV9kb2N1bWVudExvYWRlci0+aXNTdWJzdGl0dXRlTG9hZFBl
bmRpbmcodGhpcykpOwogICAgIApAQCAtMTI4LDM5ICsxMjksMzkgQEAKICAgICAgICAgICAgIGNs
aWVudFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoZG9jdW1lbnQtPmZpcnN0UGFydHlG
b3JDb29raWVzKCkpOwogICAgIH0KIAotICAgIHdpbGxTZW5kUmVxdWVzdChjbGllbnRSZXF1ZXN0
LCBSZXNvdXJjZVJlc3BvbnNlKCkpOwotICAgIGlmIChjbGllbnRSZXF1ZXN0LmlzTnVsbCgpKSB7
Ci0gICAgICAgIGRpZEZhaWwoZnJhbWVMb2FkZXIoKS0+Y2FuY2VsbGVkRXJyb3IocikpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fZGVmZXJzTG9hZGluZykKLSAg
ICAgICAgbV9kZWZlcnJlZFJlcXVlc3QgPSBjbGllbnRSZXF1ZXN0OwotCi0gICAgcmV0dXJuIHRy
dWU7CisgICAgbV9yZXF1ZXN0ID0gY2xpZW50UmVxdWVzdDsKIH0KIAotYm9vbCBSZXNvdXJjZUxv
YWRlcjo6c3RhcnQoKQordm9pZCBSZXNvdXJjZUxvYWRlcjo6c3RhcnQoKQogewogICAgIEFTU0VS
VCghbV9oYW5kbGUpOworICAgIEFTU0VSVCghbV9yZXF1ZXN0LmlzTnVsbCgpKTsKKyAgICBBU1NF
UlQobV9kZWZlcnJlZFJlcXVlc3QuaXNOdWxsKCkpOwogI2lmbmRlZiBOREVCVUcKICAgICByZXNv
dXJjZUxvYWRTY2hlZHVsZXIoKS0+YXNzZXJ0TG9hZGVyQmVpbmdDb3VudGVkKHRoaXMpOwogI2Vu
ZGlmCisKKyAgICB3aWxsU2VuZFJlcXVlc3QobV9yZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlKCkp
OworICAgIGlmIChtX3JlcXVlc3QuaXNOdWxsKCkpIHsKKyAgICAgICAgZGlkRmFpbChmcmFtZUxv
YWRlcigpLT5jYW5jZWxsZWRFcnJvcihtX3JlcXVlc3QpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0gICAgCiAgICAgCiAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPnNjaGVkdWxlQXJjaGl2ZUxv
YWQodGhpcywgbV9yZXF1ZXN0LCBtX3JlcXVlc3QudXJsKCkpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuOwogICAgIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCiAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkt
Pm1heWJlTG9hZFJlc291cmNlKHRoaXMsIG1fcmVxdWVzdCwgbV9yZXF1ZXN0LnVybCgpKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybjsKICNlbmRpZgogCi0gICAgaWYgKG1f
ZGVmZXJzTG9hZGluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2RlZmVyc0xv
YWRpbmcpIHsKKyAgICAgICAgbV9kZWZlcnJlZFJlcXVlc3QgPSBtX3JlcXVlc3Q7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoIW1fcmVhY2hlZFRlcm1pbmFsU3RhdGUpCiAgICAg
ICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShtX2ZyYW1lLT5sb2FkZXIoKS0+
bmV0d29ya2luZ0NvbnRleHQoKSwgbV9yZXF1ZXN0LCB0aGlzLCBtX2RlZmVyc0xvYWRpbmcsIG1f
c2hvdWxkQ29udGVudFNuaWZmKTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBSZXNvdXJj
ZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKQEAgLTE2OSw5ICsxNzAsOSBA
QAogICAgIGlmIChtX2hhbmRsZSkKICAgICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xvYWRpbmco
ZGVmZXJzKTsKICAgICBpZiAoIWRlZmVycyAmJiAhbV9kZWZlcnJlZFJlcXVlc3QuaXNOdWxsKCkp
IHsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV9kZWZlcnJlZFJlcXVlc3QpOwor
ICAgICAgICBtX3JlcXVlc3QgPSBtX2RlZmVycmVkUmVxdWVzdDsKICAgICAgICAgbV9kZWZlcnJl
ZFJlcXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QoKTsKLSAgICAgICAgbG9hZChyZXF1ZXN0KTsKKyAg
ICAgICAgc3RhcnQoKTsKICAgICB9CiB9CiAKQEAgLTM1OSw3ICszNjAsNyBAQAogICAgICAgICBt
X2hhbmRsZS0+Y2FuY2VsKCk7CiAgICAgICAgIG1faGFuZGxlID0gMDsKICAgICB9Ci0gICAgaWYg
KG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyAmJiAhbV9jYWxsZWREaWRGaW5pc2hMb2FkKQor
ICAgIGlmIChtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgJiYgbV9pZGVudGlmaWVyICYmICFt
X2NhbGxlZERpZEZpbmlzaExvYWQpCiAgICAgICAgIGZyYW1lTG9hZGVyKCktPm5vdGlmaWVyKCkt
PmRpZEZhaWxUb0xvYWQodGhpcywgZXJyb3IpOwogCiAgICAgcmVsZWFzZVJlc291cmNlcygpOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA3MTc0NCkKKysrIFdlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAK
IAogICAgICAgICB2b2lkIGNhbmNlbCgpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmKTsKIAogICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIoKSBj
b25zdDsKICAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9kb2N1bWVudExvYWRlci5nZXQoKTsgfQpAQCAtMTI3LDggKzEyNywxMCBAQAogICAg
ICAgICBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX3Nl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3M7IH0KIAogICAgICAgICAvLyBDYWxsZWQgYnkgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyIHRvIGNyZWF0ZSBhIFJlc291cmNlSGFuZGxlIGFuZCBhY3R1YWxseSBi
ZWdpbiB0aGUgbG9hZC4KLSAgICAgICAgYm9vbCBzdGFydCgpOworICAgICAgICB2b2lkIHN0YXJ0
KCk7CiAKKyAgICAgICAgYm9vbCByZWFjaGVkVGVybWluYWxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVhY2hlZFRlcm1pbmFsU3RhdGU7IH0KKwogICAgICAgICB2b2lkIHNldFNob3VsZEJ1ZmZl
ckRhdGEoYm9vbCBzaG91bGRCdWZmZXJEYXRhKTsKIAogICAgIHByb3RlY3RlZDoKQEAgLTE0Miw3
ICsxNDQsNiBAQAogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdPbmVQYXJ0KGRvdWJsZSBm
aW5pc2hUaW1lKTsKIAogICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QoKSBj
b25zdCB7IHJldHVybiBtX3JlcXVlc3Q7IH0KLSAgICAgICAgYm9vbCByZWFjaGVkVGVybWluYWxT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhY2hlZFRlcm1pbmFsU3RhdGU7IH0KICAgICAgICAg
Ym9vbCBjYW5jZWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2NhbmNlbGxlZDsgfQogICAgICAgICBi
b29sIGRlZmVyc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2RlZmVyc0xvYWRpbmc7IH0KIApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNzE3NDQpCisr
KyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDggKzg2LDcgQEAKIAogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gc3VibG9hZGVy
KGFkb3B0UmVmKG5ldyBTdWJyZXNvdXJjZUxvYWRlcihmcmFtZSwgY2xpZW50LCBzZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzLCBzaG91bGRDb250ZW50U25pZmYpKSk7CiAgICAgc3VibG9hZGVyLT5k
b2N1bWVudExvYWRlcigpLT5hZGRTdWJyZXNvdXJjZUxvYWRlcihzdWJsb2FkZXIuZ2V0KCkpOwot
ICAgIGlmICghc3VibG9hZGVyLT5sb2FkKG5ld1JlcXVlc3QpKQotICAgICAgICByZXR1cm4gMDsK
KyAgICBzdWJsb2FkZXItPmluaXQobmV3UmVxdWVzdCk7CiAKICAgICByZXR1cm4gc3VibG9hZGVy
LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkocmV2aXNpb24gNzE3NDQpCisrKyBXZWJD
b3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMTEgKzEzMCwxMCBA
QAogCiAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSByZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKS0+c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIt
PmRvY3VtZW50KCktPmZyYW1lKCksCiAgICAgICAgIHRoaXMsIHJlc291cmNlUmVxdWVzdCwgZGV0
ZXJtaW5lUHJpb3JpdHkocmVzb3VyY2UpLCByZXF1ZXN0LT5zaG91bGREb1NlY3VyaXR5Q2hlY2so
KSwgcmVxdWVzdC0+c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpKTsKLSAgICBpZiAobG9hZGVy
KSB7CisgICAgaWYgKGxvYWRlciAmJiAhbG9hZGVyLT5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKQog
ICAgICAgICBtX3JlcXVlc3RzTG9hZGluZy5hZGQobG9hZGVyLnJlbGVhc2UoKSwgcmVxdWVzdCk7
Ci0gICAgICAgIHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPnNldFJlcXVlc3RlZEZyb21OZXR3
b3JraW5nTGF5ZXIoKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiBy
ZXNvdXJjZXMgaW4gb3RoZXIgZnJhbWVzIHdlcmUgd2FpdGluZyBmb3IgdGhpcyByZXZhbGlkYXRp
b24/IAorICAgIGVsc2UgeworICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiByZXNvdXJjZXMgaW4g
b3RoZXIgZnJhbWVzIHdlcmUgd2FpdGluZyBmb3IgdGhpcyByZXZhbGlkYXRpb24/CiAgICAgICAg
IExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYW5ub3Qgc3RhcnQgbG9hZGluZyAnJXMnIiwgcmVxdWVz
dC0+Y2FjaGVkUmVzb3VyY2UoKS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsgICAgICAgICAgICAg
CiAgICAgICAgIGNhY2hlZFJlc291cmNlTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQocmVx
dWVzdC0+Y2FjaGVkUmVzb3VyY2UoKSk7CiAgICAgICAgIGNhY2hlZFJlc291cmNlTG9hZGVyLT5z
ZXRMb2FkSW5Qcm9ncmVzcyh0cnVlKTsKQEAgLTE2NCw2ICsxNjMsMTcgQEAKICAgICB9CiB9CiAK
K3ZvaWQgTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgUmVxdWVz
dE1hcDo6aXRlcmF0b3IgaSA9IG1fcmVxdWVzdHNMb2FkaW5nLmZpbmQobG9hZGVyKTsKKyAgICBp
ZiAoaSA9PSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBpLT5zZWNvbmQ7CisgICAgcmVxdWVzdC0+Y2FjaGVkUmVz
b3VyY2UoKS0+c2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigpOworCit9CisKIHZvaWQg
TG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIpCiB7CiAg
ICAgUmVxdWVzdE1hcDo6aXRlcmF0b3IgaSA9IG1fcmVxdWVzdHNMb2FkaW5nLmZpbmQobG9hZGVy
KTsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zZWN1cml0eS9ibG9jay10ZXN0LWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc2VjdXJp
dHkvYmxvY2stdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDcxNzQ0KQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL3NlY3VyaXR5L2Jsb2NrLXRlc3QtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogaHR0cDovLzI1NS4yNTUuMjU1LjI1NToxL3Rlc3QuanBn
IC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8yNTUuMjU1LjI1NS4y
NTU6MS90ZXN0LmpwZywgbWFpbiBkb2N1bWVudCBVUkwgYmxvY2stdGVzdC5odG1sLCBodHRwIG1l
dGhvZCBHRVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwpCiA8dW5rbm93bj4gLSBkaWRGaW5pc2hM
b2FkaW5nCitodHRwOi8vMjU1LjI1NS4yNTUuMjU1OjEvdGVzdC5qcGcgLSBkaWRGYWlsTG9hZGlu
Z1dpdGhFcnJvcjogPE5TRXJyb3IgZG9tYWluIFdlYktpdEVycm9yRG9tYWluLCBjb2RlIDEwMywg
ZmFpbGluZyBVUkwgImh0dHA6Ly8yNTUuMjU1LjI1NS4yNTU6MS90ZXN0LmpwZyI+CiBodHRwOi8v
MjU1LjI1NS4yNTUuMjU1OjcvdGVzdC5qcGcgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVz
dCBVUkwgaHR0cDovLzI1NS4yNTUuMjU1LjI1NTo3L3Rlc3QuanBnLCBtYWluIGRvY3VtZW50IFVS
TCBibG9jay10ZXN0Lmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVs
bCkKLWh0dHA6Ly8yNTUuMjU1LjI1NS4yNTU6MS90ZXN0LmpwZyAtIGRpZEZhaWxMb2FkaW5nV2l0
aEVycm9yOiA8TlNFcnJvciBkb21haW4gV2ViS2l0RXJyb3JEb21haW4sIGNvZGUgMTAzLCBmYWls
aW5nIFVSTCAiaHR0cDovLzI1NS4yNTUuMjU1LjI1NToxL3Rlc3QuanBnIj4KIGh0dHA6Ly8yNTUu
MjU1LjI1NS4yNTU6Ny90ZXN0LmpwZyAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiA8TlNFcnJv
ciBkb21haW4gV2ViS2l0RXJyb3JEb21haW4sIGNvZGUgMTAzLCBmYWlsaW5nIFVSTCAiaHR0cDov
LzI1NS4yNTUuMjU1LjI1NTo3L3Rlc3QuanBnIj4KIGh0dHA6Ly8yNTUuMjU1LjI1NS4yNTU6OS90
ZXN0LmpwZyAtIHdpbGxTZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMjU1LjI1
NS4yNTUuMjU1OjkvdGVzdC5qcGcsIG1haW4gZG9jdW1lbnQgVVJMIGJsb2NrLXRlc3QuaHRtbCwg
aHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNlIChudWxsKQogaHR0cDovLzI1NS4yNTUu
MjU1LjI1NTo5L3Rlc3QuanBnIC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6IDxOU0Vycm9yIGRv
bWFpbiBXZWJLaXRFcnJvckRvbWFpbiwgY29kZSAxMDMsIGZhaWxpbmcgVVJMICJodHRwOi8vMjU1
LjI1NS4yNTUuMjU1OjkvdGVzdC5qcGciPgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzE3NzgpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAx
MC0xMS0xMCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgdXBkYXRlIGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTEsCisgICAgICAgIHRoZSB0
aW1pbmcgb2Ygd2lsbFNlbmRSZXF1ZXN0KCkgY2FsbHMgd2lsbCBiZSBzbGlnaHRseSBkaWZmZXJl
bnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc2VjdXJpdHkvYmxvY2stdGVzdC1leHBlY3Rl
ZC50eHQ6CisKIDIwMTAtMTEtMTAgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBDaHJvbWl1bSByZWJhc2VsaW5lLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73578</attachid>
            <date>2010-11-10 21:21:45 -0800</date>
            <delta_ts>2010-11-11 11:24:20 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-49351-20101110212143.patch</filename>
            <type>text/plain</type>
            <size>13377</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTc5NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMTEtMTAgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBD
bGVhbnVwIGFmdGVyIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzcxNTYyLCBuYW1l
bHk6CisgICAgICAgIE1ha2UgZGVmZXJyZWQgcmVxdWVzdCBoYW5kbGUgc2ltcGxlci4KKyAgICAg
ICAgRG9uJ3QgcGVyZm9ybSBjYWxsYmFja3MgYXNzb2NpYXRlZCB3aXRoIG5ldHdvcmsgbG9hZCBz
dGFydGluZworICAgICAgICAoZS5nLiwgd2lsbFNlbmRSZXF1ZXN0KSB1bnRpbCB0aGUgbG9hZCBp
cyBpbiBmYWN0IHNlbnQgdG8gdGhlIG5ldHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM1MQorCisgICAgICAgIEJlaGF2aW9yIHNob3VsZCBi
ZSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVx
dWVzdHMpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRlcjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OnNldERl
ZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmRpZENhbmNl
bCk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRlcjo6cmVhY2hlZFRlcm1pbmFsU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OnJlcXVlc3QpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRl
KToKKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRl
cjo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6Cisg
ICAgICAgICogbG9hZGVyL2xvYWRlci5oOgorCiAyMDEwLTExLTEwICBOZWQgSG9sYnJvb2sgIDxu
aG9sYnJvb2tAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4u
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3Bw
CShyZXZpc2lvbiA3MTc5NSkKKysrIFdlYkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksOCBAQCBQYXNzUmVmUHRyPE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBOCiAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyPiBsb2FkZXIoYWRvcHRSZWYobmV3IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
KGZyYW1lLCBjbGllbnQpKSk7CiAgICAgbG9hZGVyLT5zZXRTaG91bGRCdWZmZXJEYXRhKGZhbHNl
KTsKICAgICBsb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFkZFBsdWdJblN0cmVhbUxvYWRlcihs
b2FkZXIuZ2V0KCkpOwotICAgIHJldHVybiBsb2FkZXItPmxvYWQocmVxdWVzdCkgPyBsb2FkZXIu
cmVsZWFzZSgpIDogMDsKKyAgICBsb2FkZXItPmluaXQocmVxdWVzdCk7CisgICAgcmV0dXJuIGxv
YWRlci5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6Omlz
RG9uZSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5j
cHAJKHJldmlzaW9uIDcxNzk1KQorKysgV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDcgKzE3OSw2IEBAIHZvaWQgUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmcKIAogICAgIGZvciAoaW50IHByaW9yaXR5ID0gSGln
aDsgcHJpb3JpdHkgPj0gbWluaW11bVByaW9yaXR5OyAtLXByaW9yaXR5KSB7CiAgICAgICAgIEhv
c3RJbmZvcm1hdGlvbjo6UmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcgPSBob3N0LT5yZXF1
ZXN0c1BlbmRpbmcoKFByaW9yaXR5KSBwcmlvcml0eSk7Ci0gICAgICAgIEhvc3RJbmZvcm1hdGlv
bjo6UmVxdWVzdFF1ZXVlIGRlZmVycmVkUmVxdWVzdHM7CiAKICAgICAgICAgd2hpbGUgKCFyZXF1
ZXN0c1BlbmRpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2Fk
ZXI+IHJlc291cmNlTG9hZGVyID0gcmVxdWVzdHNQZW5kaW5nLmZpcnN0KCk7CkBAIC0xODksMjAg
KzE4OCwxNCBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nCiAgICAg
ICAgICAgICAvLyBhbmQgd2UgZG9uJ3Qga25vdyBhbGwgc3R5bGVzaGVldHMgeWV0LgogICAgICAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVzb3VyY2VMb2FkZXItPmZyYW1lTG9hZGVyKCkg
PyByZXNvdXJjZUxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSA6IDA7
CiAgICAgICAgICAgICBib29sIHNob3VsZExpbWl0UmVxdWVzdHMgPSAhaG9zdC0+bmFtZSgpLmlz
TnVsbCgpIHx8IChkb2N1bWVudCAmJiAoZG9jdW1lbnQtPnBhcnNpbmcoKSB8fCAhZG9jdW1lbnQt
PmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKSk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkTGltaXRS
ZXF1ZXN0cyAmJiBob3N0LT5saW1pdFJlcXVlc3RzKCkpIHsKLSAgICAgICAgICAgICAgICB3aGls
ZSAoIWRlZmVycmVkUmVxdWVzdHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0c1BlbmRpbmcuYXBwZW5kKGRlZmVycmVkUmVxdWVzdHMudGFrZUZpcnN0KCkpOworICAgICAg
ICAgICAgaWYgKHNob3VsZExpbWl0UmVxdWVzdHMgJiYgaG9zdC0+bGltaXRSZXF1ZXN0cygpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KHJlc291cmNlTG9hZGVyLT5zdGFydCgpKQorICAgICAgICAgICAgcmVzb3VyY2VMb2FkZXItPnN0
YXJ0KCk7CisgICAgICAgICAgICBpZiAoIXJlc291cmNlTG9hZGVyLT5yZWFjaGVkVGVybWluYWxT
dGF0ZSgpKQogICAgICAgICAgICAgICAgIGhvc3QtPmFkZExvYWRJblByb2dyZXNzKHJlc291cmNl
TG9hZGVyLmdldCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkZWZlcnJl
ZFJlcXVlc3RzLmFwcGVuZChyZXNvdXJjZUxvYWRlcik7CiAgICAgICAgICAgICByZXF1ZXN0c1Bl
bmRpbmcucmVtb3ZlRmlyc3QoKTsKICAgICAgICAgfQotCi0gICAgICAgIHJlcXVlc3RzUGVuZGlu
Zy5zd2FwKGRlZmVycmVkUmVxdWVzdHMpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNzE3OTUpCisrKyBXZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw5ICsxMTAsMTAgQEAgdm9pZCBSZXNv
dXJjZUxvYWRlcjo6cmVsZWFzZVJlc291cmNlcygpCiAgICAgbV9kZWZlcnJlZFJlcXVlc3QgPSBS
ZXNvdXJjZVJlcXVlc3QoKTsKIH0KIAotYm9vbCBSZXNvdXJjZUxvYWRlcjo6bG9hZChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHIpCit2b2lkIFJlc291cmNlTG9hZGVyOjppbml0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcikKIHsKICAgICBBU1NFUlQoIW1faGFuZGxlKTsKKyAgICBBU1NFUlQobV9y
ZXF1ZXN0LmlzTnVsbCgpKTsKICAgICBBU1NFUlQobV9kZWZlcnJlZFJlcXVlc3QuaXNOdWxsKCkp
OwogICAgIEFTU0VSVCghbV9kb2N1bWVudExvYWRlci0+aXNTdWJzdGl0dXRlTG9hZFBlbmRpbmco
dGhpcykpOwogICAgIApAQCAtMTI4LDM5ICsxMjksMzkgQEAgYm9vbCBSZXNvdXJjZUxvYWRlcjo6
bG9hZChjb25zdCBSZXNvdXJjZQogICAgICAgICAgICAgY2xpZW50UmVxdWVzdC5zZXRGaXJzdFBh
cnR5Rm9yQ29va2llcyhkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgfQog
Ci0gICAgd2lsbFNlbmRSZXF1ZXN0KGNsaWVudFJlcXVlc3QsIFJlc291cmNlUmVzcG9uc2UoKSk7
Ci0gICAgaWYgKGNsaWVudFJlcXVlc3QuaXNOdWxsKCkpIHsKLSAgICAgICAgZGlkRmFpbChmcmFt
ZUxvYWRlcigpLT5jYW5jZWxsZWRFcnJvcihyKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAobV9kZWZlcnNMb2FkaW5nKQotICAgICAgICBtX2RlZmVycmVkUmVxdWVz
dCA9IGNsaWVudFJlcXVlc3Q7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX3JlcXVlc3QgPSBj
bGllbnRSZXF1ZXN0OwogfQogCi1ib29sIFJlc291cmNlTG9hZGVyOjpzdGFydCgpCit2b2lkIFJl
c291cmNlTG9hZGVyOjpzdGFydCgpCiB7CiAgICAgQVNTRVJUKCFtX2hhbmRsZSk7CisgICAgQVNT
RVJUKCFtX3JlcXVlc3QuaXNOdWxsKCkpOworICAgIEFTU0VSVChtX2RlZmVycmVkUmVxdWVzdC5p
c051bGwoKSk7CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5h
c3NlcnRMb2FkZXJCZWluZ0NvdW50ZWQodGhpcyk7CiAjZW5kaWYKKworICAgIHdpbGxTZW5kUmVx
dWVzdChtX3JlcXVlc3QsIFJlc291cmNlUmVzcG9uc2UoKSk7CisgICAgaWYgKG1fcmVxdWVzdC5p
c051bGwoKSkgeworICAgICAgICBkaWRGYWlsKGZyYW1lTG9hZGVyKCktPmNhbmNlbGxlZEVycm9y
KG1fcmVxdWVzdCkpOworICAgICAgICByZXR1cm47CisgICAgfSAgICAKICAgICAKICAgICBpZiAo
bV9kb2N1bWVudExvYWRlci0+c2NoZWR1bGVBcmNoaXZlTG9hZCh0aGlzLCBtX3JlcXVlc3QsIG1f
cmVxdWVzdC51cmwoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm47CiAg
ICAgCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICBpZiAobV9kb2N1
bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkUmVzb3VyY2UodGhp
cywgbV9yZXF1ZXN0LCBtX3JlcXVlc3QudXJsKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBpZiAobV9kZWZlcnNMb2FkaW5nKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZGVmZXJzTG9hZGluZykgeworICAgICAgICBtX2Rl
ZmVycmVkUmVxdWVzdCA9IG1fcmVxdWVzdDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAg
IGlmICghbV9yZWFjaGVkVGVybWluYWxTdGF0ZSkKICAgICAgICAgbV9oYW5kbGUgPSBSZXNvdXJj
ZUhhbmRsZTo6Y3JlYXRlKG1fZnJhbWUtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpLCBt
X3JlcXVlc3QsIHRoaXMsIG1fZGVmZXJzTG9hZGluZywgbV9zaG91bGRDb250ZW50U25pZmYpOwot
ICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFJlc291cmNlTG9hZGVyOjpzZXREZWZlcnNMb2Fk
aW5nKGJvb2wgZGVmZXJzKQpAQCAtMTY5LDkgKzE3MCw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6
OnNldERlZmVyc0xvYWRpbmcoYm8KICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxl
LT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7CiAgICAgaWYgKCFkZWZlcnMgJiYgIW1fZGVmZXJy
ZWRSZXF1ZXN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1f
ZGVmZXJyZWRSZXF1ZXN0KTsKKyAgICAgICAgbV9yZXF1ZXN0ID0gbV9kZWZlcnJlZFJlcXVlc3Q7
CiAgICAgICAgIG1fZGVmZXJyZWRSZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgICAg
IGxvYWQocmVxdWVzdCk7CisgICAgICAgIHN0YXJ0KCk7CiAgICAgfQogfQogCkBAIC0zNTksNyAr
MzYwLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkQ2FuY2VsKGNvbnN0IFJlcwogICAgICAg
ICBtX2hhbmRsZS0+Y2FuY2VsKCk7CiAgICAgICAgIG1faGFuZGxlID0gMDsKICAgICB9Ci0gICAg
aWYgKG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyAmJiAhbV9jYWxsZWREaWRGaW5pc2hMb2Fk
KQorICAgIGlmIChtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgJiYgbV9pZGVudGlmaWVyICYm
ICFtX2NhbGxlZERpZEZpbmlzaExvYWQpCiAgICAgICAgIGZyYW1lTG9hZGVyKCktPm5vdGlmaWVy
KCktPmRpZEZhaWxUb0xvYWQodGhpcywgZXJyb3IpOwogCiAgICAgcmVsZWFzZVJlc291cmNlcygp
OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA3MTc5NSkKKysrIFdlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgY2FuY2VsKCk7CiAKLSAgICAg
ICAgdmlydHVhbCBib29sIGxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBpbml0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogCiAgICAgICAgIEZyYW1l
TG9hZGVyKiBmcmFtZUxvYWRlcigpIGNvbnN0OwogICAgICAgICBEb2N1bWVudExvYWRlciogZG9j
dW1lbnRMb2FkZXIoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50TG9hZGVyLmdldCgpOyB9CkBA
IC0xMjcsNyArMTI3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHNlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX3NlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3M7IH0KIAogICAgICAgICAvLyBDYWxsZWQgYnkgUmVzb3VyY2VMb2FkU2NoZWR1bGVy
IHRvIGNyZWF0ZSBhIFJlc291cmNlSGFuZGxlIGFuZCBhY3R1YWxseSBiZWdpbiB0aGUgbG9hZC4K
LSAgICAgICAgYm9vbCBzdGFydCgpOworICAgICAgICB2b2lkIHN0YXJ0KCk7CisKKyAgICAgICAg
Ym9vbCByZWFjaGVkVGVybWluYWxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhY2hlZFRlcm1p
bmFsU3RhdGU7IH0KIAogICAgICAgICB2b2lkIHNldFNob3VsZEJ1ZmZlckRhdGEoYm9vbCBzaG91
bGRCdWZmZXJEYXRhKTsKIApAQCAtMTQyLDcgKzE0NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nT25lUGFydChkb3VibGUgZmluaXNoVGltZSk7
CiAKICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZXF1ZXN0OyB9Ci0gICAgICAgIGJvb2wgcmVhY2hlZFRlcm1pbmFsU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX3JlYWNoZWRUZXJtaW5hbFN0YXRlOyB9CiAgICAgICAgIGJvb2wgY2FuY2Vs
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9jYW5jZWxsZWQ7IH0KICAgICAgICAgYm9vbCBkZWZlcnNM
b2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlcnNMb2FkaW5nOyB9CiAKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDcxNzk1KQorKysgV2ViQ29yZS9s
b2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw4ICs4Niw3
IEBAIFBhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFN1YnJlc291cmMKIAogICAgIFJlZlB0
cjxTdWJyZXNvdXJjZUxvYWRlcj4gc3VibG9hZGVyKGFkb3B0UmVmKG5ldyBTdWJyZXNvdXJjZUxv
YWRlcihmcmFtZSwgY2xpZW50LCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBzaG91bGRDb250
ZW50U25pZmYpKSk7CiAgICAgc3VibG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5hZGRTdWJyZXNv
dXJjZUxvYWRlcihzdWJsb2FkZXIuZ2V0KCkpOwotICAgIGlmICghc3VibG9hZGVyLT5sb2FkKG5l
d1JlcXVlc3QpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBzdWJsb2FkZXItPmluaXQobmV3UmVx
dWVzdCk7CiAKICAgICByZXR1cm4gc3VibG9hZGVyLnJlbGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVy
LmNwcAkocmV2aXNpb24gNzE3OTUpCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzAsMTEgKzEzMCwxMCBAQCB2b2lkIExvYWRlcjo6bG9hZChDYWNoZWRS
ZXNvdXJjZUxvYWRlciogCiAKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9
IHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9hZChjYWNoZWRS
ZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSwKICAgICAgICAgdGhpcywgcmVzb3Vy
Y2VSZXF1ZXN0LCBkZXRlcm1pbmVQcmlvcml0eShyZXNvdXJjZSksIHJlcXVlc3QtPnNob3VsZERv
U2VjdXJpdHlDaGVjaygpLCByZXF1ZXN0LT5zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpOwot
ICAgIGlmIChsb2FkZXIpIHsKKyAgICBpZiAobG9hZGVyICYmICFsb2FkZXItPnJlYWNoZWRUZXJt
aW5hbFN0YXRlKCkpCiAgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLmFkZChsb2FkZXIucmVsZWFz
ZSgpLCByZXF1ZXN0KTsKLSAgICAgICAgcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+c2V0UmVx
dWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBXaGF0IGlmIHJlc291cmNlcyBpbiBvdGhlciBmcmFtZXMgd2VyZSB3YWl0aW5nIGZvciB0
aGlzIHJldmFsaWRhdGlvbj8gCisgICAgZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlm
IHJlc291cmNlcyBpbiBvdGhlciBmcmFtZXMgd2VyZSB3YWl0aW5nIGZvciB0aGlzIHJldmFsaWRh
dGlvbj8KICAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhbm5vdCBzdGFydCBsb2FkaW5n
ICclcyciLCByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkp
OyAgICAgICAgICAgICAKICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRlY3JlbWVudFJl
cXVlc3RDb3VudChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpKTsKICAgICAgICAgY2FjaGVkUmVz
b3VyY2VMb2FkZXItPnNldExvYWRJblByb2dyZXNzKHRydWUpOwpAQCAtMTY0LDYgKzE2MywxNiBA
QCB2b2lkIExvYWRlcjo6Y2FuY2VsUmVxdWVzdHMoQ2FjaGVkUmVzb3VyCiAgICAgfQogfQogCit2
b2lkIExvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQoreworICAgIFJlcXVlc3RN
YXA6Oml0ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5maW5kKGxvYWRlcik7CisgICAgaWYg
KGkgPT0gbV9yZXF1ZXN0c0xvYWRpbmcuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBSZXF1ZXN0KiByZXF1ZXN0ID0gaS0+c2Vjb25kOworICAgIHJlcXVlc3QtPmNhY2hlZFJlc291
cmNlKCktPnNldFJlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIoKTsKK30KKwogdm9pZCBMb2Fk
ZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKIHsKICAgICBS
ZXF1ZXN0TWFwOjppdGVyYXRvciBpID0gbV9yZXF1ZXN0c0xvYWRpbmcuZmluZChsb2FkZXIpOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvbG9hZGVyLmgJKHJldmlzaW9uIDcxNzk1KQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2b2lkIGNhbmNlbFJlcXVlc3RzKENhY2hlZFJlc291cmNlTG9hZGVyKik7CiAKICAgICBw
cml2YXRlOgorICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNl
TG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNv
bnN0IGNoYXIqLCBpbnQpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzE3OTUpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMC0xMS0xMCAg
TmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIFRlc3QgdXBkYXRlIGZvciBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTEsCisgICAgICAgIHRoZSB0aW1pbmcgb2Yg
d2lsbFNlbmRSZXF1ZXN0KCkgY2FsbHMgd2lsbCBiZSBzbGlnaHRseSBkaWZmZXJlbnQuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvc2VjdXJpdHkvYmxvY2stdGVzdC1leHBlY3RlZC50eHQ6CisK
IDIwMTAtMTEtMTAgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgdXBkYXRpbmcgQ2hyb21pdW0gZXhwZWN0YXRpb25zLgpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3NlY3VyaXR5L2Jsb2NrLXRlc3QtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zZWN1cml0eS9ibG9jay10ZXN0
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNzE3OTUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvc2VjdXJpdHkvYmxvY2stdGVzdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw3IEBACiBodHRwOi8vMjU1LjI1NS4yNTUuMjU1OjEvdGVzdC5qcGcgLSB3aWxsU2VuZFJl
cXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwgaHR0cDovLzI1NS4yNTUuMjU1LjI1NToxL3Rlc3QuanBn
LCBtYWluIGRvY3VtZW50IFVSTCBibG9jay10ZXN0Lmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVk
aXJlY3RSZXNwb25zZSAobnVsbCkKIDx1bmtub3duPiAtIGRpZEZpbmlzaExvYWRpbmcKLWh0dHA6
Ly8yNTUuMjU1LjI1NS4yNTU6Ny90ZXN0LmpwZyAtIHdpbGxTZW5kUmVxdWVzdCA8TlNVUkxSZXF1
ZXN0IFVSTCBodHRwOi8vMjU1LjI1NS4yNTUuMjU1OjcvdGVzdC5qcGcsIG1haW4gZG9jdW1lbnQg
VVJMIGJsb2NrLXRlc3QuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNlIChu
dWxsKQogaHR0cDovLzI1NS4yNTUuMjU1LjI1NToxL3Rlc3QuanBnIC0gZGlkRmFpbExvYWRpbmdX
aXRoRXJyb3I6IDxOU0Vycm9yIGRvbWFpbiBXZWJLaXRFcnJvckRvbWFpbiwgY29kZSAxMDMsIGZh
aWxpbmcgVVJMICJodHRwOi8vMjU1LjI1NS4yNTUuMjU1OjEvdGVzdC5qcGciPgoraHR0cDovLzI1
NS4yNTUuMjU1LjI1NTo3L3Rlc3QuanBnIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3Qg
VVJMIGh0dHA6Ly8yNTUuMjU1LjI1NS4yNTU6Ny90ZXN0LmpwZywgbWFpbiBkb2N1bWVudCBVUkwg
YmxvY2stdGVzdC5odG1sLCBodHRwIG1ldGhvZCBHRVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwp
CiBodHRwOi8vMjU1LjI1NS4yNTUuMjU1OjcvdGVzdC5qcGcgLSBkaWRGYWlsTG9hZGluZ1dpdGhF
cnJvcjogPE5TRXJyb3IgZG9tYWluIFdlYktpdEVycm9yRG9tYWluLCBjb2RlIDEwMywgZmFpbGlu
ZyBVUkwgImh0dHA6Ly8yNTUuMjU1LjI1NS4yNTU6Ny90ZXN0LmpwZyI+CiBodHRwOi8vMjU1LjI1
NS4yNTUuMjU1OjkvdGVzdC5qcGcgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwg
aHR0cDovLzI1NS4yNTUuMjU1LjI1NTo5L3Rlc3QuanBnLCBtYWluIGRvY3VtZW50IFVSTCBibG9j
ay10ZXN0Lmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkKIGh0
dHA6Ly8yNTUuMjU1LjI1NS4yNTU6OS90ZXN0LmpwZyAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9y
OiA8TlNFcnJvciBkb21haW4gV2ViS2l0RXJyb3JEb21haW4sIGNvZGUgMTAzLCBmYWlsaW5nIFVS
TCAiaHR0cDovLzI1NS4yNTUuMjU1LjI1NTo5L3Rlc3QuanBnIj4K
</data>
<flag name="review"
          id="64073"
          type_id="1"
          status="-"
          setter="koivisto"
    />
    <flag name="commit-queue"
          id="64032"
          type_id="3"
          status="-"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73629</attachid>
            <date>2010-11-11 11:24:20 -0800</date>
            <delta_ts>2010-11-11 21:17:36 -0800</delta_ts>
            <desc>Make ResourceLoader::start() protect and friend ResourceLoadScheduler</desc>
            <filename>patch3.txt</filename>
            <type>text/plain</type>
            <size>15594</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTgzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMTEtMTEgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
bGVhbnVwIGFmdGVyIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzcxNTYyLCBuYW1l
bHk6CisgICAgICAgIE1ha2UgZGVmZXJyZWQgcmVxdWVzdCBoYW5kbGUgc2ltcGxlci4KKyAgICAg
ICAgRG9uJ3QgcGVyZm9ybSBjYWxsYmFja3MgYXNzb2NpYXRlZCB3aXRoIG5ldHdvcmsgbG9hZCBz
dGFydGluZworICAgICAgICAoZS5nLiwgd2lsbFNlbmRSZXF1ZXN0KSB1bnRpbCB0aGUgbG9hZCBp
cyBpbiBmYWN0IHNlbnQgdG8gdGhlIG5ldHdvcmsuCisgICAgICAgIE1ha2UgUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyIGEgZnJpZW5kIG9mIFJlc291cmNlTG9hZGVyIGFuZCBtYWtlCisgICAgICAgIFJl
c291cmNlTG9hZGVyOjpzdGFydCgpIHByb3RlY3RlZCB0byB0cnkgdG8gZW5zdXJlIGxvYWRzIGFj
dHVhbGx5CisgICAgICAgIGdvIHRocm91Z2ggdGhlIHNjaGVkdWxlci4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MzUxCisKKyAgICAgICAgQmVoYXZp
b3Igc2hvdWxkIGJlIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBsb2Fk
ZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmNyZWF0ZSk6CisgICAgICAgICogbG9hZGVyL1Jlc291
cmNlTG9hZFNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
Okhvc3RJbmZvcm1hdGlvbjo6bGltaXRSZXF1ZXN0cyk6CisgICAgICAgICogbG9hZGVyL1Jlc291
cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjppbml0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpzdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRlcjo6ZGlkQ2FuY2VsKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VM
b2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpyZWFjaGVkVGVybWlu
YWxTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdCk6Cisg
ICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9sb2FkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okxv
YWRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmg6CisKIDIw
MTAtMTEtMTEgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVzdG9yZSB0aGUgcG9ydGlvbiBvZiB0aGUgQ2hhbmdlTG9nIHJlbW92ZWQgaW4gbXkgbGFz
dCBjb21taXQuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9sb2FkZXIuaAkocmV2aXNpb24gNzE4MzcpCisrKyBXZWJDb3JlL2xvYWRl
ci9sb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogICAgICAgICB2b2lk
IGNhbmNlbFJlcXVlc3RzKENhY2hlZFJlc291cmNlTG9hZGVyKik7CiAKICAgICBwcml2YXRlOgor
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiwg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3Vi
cmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIq
LCBpbnQpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyLmNwcAkocmV2aXNpb24gNzE4MzcpCisrKyBXZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAKICAgICBS
ZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlcihhZG9wdFJlZihuZXcgTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIoZnJhbWUsIGNsaWVudCkpKTsKICAgICBsb2FkZXItPnNl
dFNob3VsZEJ1ZmZlckRhdGEoZmFsc2UpOwogICAgIGxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+
YWRkUGx1Z0luU3RyZWFtTG9hZGVyKGxvYWRlci5nZXQoKSk7Ci0gICAgcmV0dXJuIGxvYWRlci0+
bG9hZChyZXF1ZXN0KSA/IGxvYWRlci5yZWxlYXNlKCkgOiAwOworICAgIGxvYWRlci0+aW5pdChy
ZXF1ZXN0KTsKKyAgICByZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKIH0KIAogYm9vbCBOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcjo6aXNEb25lKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gNzE4MzcpCisrKyBXZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyAr
MTc5LDYgQEAKIAogICAgIGZvciAoaW50IHByaW9yaXR5ID0gSGlnaDsgcHJpb3JpdHkgPj0gbWlu
aW11bVByaW9yaXR5OyAtLXByaW9yaXR5KSB7CiAgICAgICAgIEhvc3RJbmZvcm1hdGlvbjo6UmVx
dWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcgPSBob3N0LT5yZXF1ZXN0c1BlbmRpbmcoKFByaW9y
aXR5KSBwcmlvcml0eSk7Ci0gICAgICAgIEhvc3RJbmZvcm1hdGlvbjo6UmVxdWVzdFF1ZXVlIGRl
ZmVycmVkUmVxdWVzdHM7CiAKICAgICAgICAgd2hpbGUgKCFyZXF1ZXN0c1BlbmRpbmcuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IHJlc291cmNlTG9hZGVy
ID0gcmVxdWVzdHNQZW5kaW5nLmZpcnN0KCk7CkBAIC0xODksMjAgKzE4OCwxNCBAQAogICAgICAg
ICAgICAgLy8gYW5kIHdlIGRvbid0IGtub3cgYWxsIHN0eWxlc2hlZXRzIHlldC4KICAgICAgICAg
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJlc291cmNlTG9hZGVyLT5mcmFtZUxvYWRlcigpID8g
cmVzb3VyY2VMb2FkZXItPmZyYW1lTG9hZGVyKCktPmZyYW1lKCktPmRvY3VtZW50KCkgOiAwOwog
ICAgICAgICAgICAgYm9vbCBzaG91bGRMaW1pdFJlcXVlc3RzID0gIWhvc3QtPm5hbWUoKS5pc051
bGwoKSB8fCAoZG9jdW1lbnQgJiYgKGRvY3VtZW50LT5wYXJzaW5nKCkgfHwgIWRvY3VtZW50LT5o
YXZlU3R5bGVzaGVldHNMb2FkZWQoKSkpOwotICAgICAgICAgICAgaWYgKHNob3VsZExpbWl0UmVx
dWVzdHMgJiYgaG9zdC0+bGltaXRSZXF1ZXN0cygpKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUg
KCFkZWZlcnJlZFJlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dHNQZW5kaW5nLmFwcGVuZChkZWZlcnJlZFJlcXVlc3RzLnRha2VGaXJzdCgpKTsKKyAgICAgICAg
ICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIGhvc3QtPmxpbWl0UmVxdWVzdHMoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChy
ZXNvdXJjZUxvYWRlci0+c3RhcnQoKSkKKyAgICAgICAgICAgIHJlc291cmNlTG9hZGVyLT5zdGFy
dCgpOworICAgICAgICAgICAgaWYgKCFyZXNvdXJjZUxvYWRlci0+cmVhY2hlZFRlcm1pbmFsU3Rh
dGUoKSkKICAgICAgICAgICAgICAgICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXNvdXJjZUxv
YWRlci5nZXQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZGVmZXJyZWRS
ZXF1ZXN0cy5hcHBlbmQocmVzb3VyY2VMb2FkZXIpOwogICAgICAgICAgICAgcmVxdWVzdHNQZW5k
aW5nLnJlbW92ZUZpcnN0KCk7CiAgICAgICAgIH0KLQotICAgICAgICByZXF1ZXN0c1BlbmRpbmcu
c3dhcChkZWZlcnJlZFJlcXVlc3RzKTsKICAgICB9CiB9CiAKQEAgLTIzMywyOSArMjI2LDYgQEAK
ICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmFzc2VydExvYWRlckJlaW5nQ291bnRlZChSZXNvdXJjZUxv
YWRlciogcmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgSG9zdEluZm9ybWF0aW9uKiBob3N0ID0gaG9z
dEZvclVSTChyZXNvdXJjZUxvYWRlci0+dXJsKCkpOwotICAgIEFTU0VSVChob3N0KTsKLSAgICBo
b3N0LT5hc3NlcnRMb2FkZXJCZWluZ0NvdW50ZWQocmVzb3VyY2VMb2FkZXIpOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjphc3NlcnRMb2FkZXJCZWlu
Z0NvdW50ZWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQotewotICAgIC8vIElmIGEg
bG9hZCBpcyBiZWluZyBzdGFydGVkLCBpdCBzaG91bGQgYmUgYXQgdGhlIGZyb250IG9mIHRoZSBo
aWdoZXN0IHByaW9yaXR5IHF1ZXVlCi0gICAgLy8gdGhhdCBhY3R1YWxseSBjb250YWlucyBhIHJl
cXVlc3QuCi0gICAgZm9yIChpbnQgcHJpb3JpdHkgPSBIaWdoOyBwcmlvcml0eSA+PSBWZXJ5TG93
OyAtLXByaW9yaXR5KSB7ICAKLSAgICAgICAgaWYgKCFtX3JlcXVlc3RzUGVuZGluZ1twcmlvcml0
eV0uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9yZXF1ZXN0c1BlbmRpbmdbcHJp
b3JpdHldLmZpcnN0KCkuZ2V0KCkgPT0gcmVzb3VyY2VMb2FkZXIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0j
ZW5kaWYKLQogUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpIb3N0SW5mb3JtYXRpb246Okhvc3RJbmZv
cm1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHQp
CiAgICAgOiBtX25hbWUobmFtZSkKICAgICAsIG1fbWF4UmVxdWVzdHNJbkZsaWdodChtYXhSZXF1
ZXN0c0luRmxpZ2h0KQpJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24g
NzE4MzcpCisrKyBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMCw5ICsxMTAsMTAgQEAKICAgICBtX2RlZmVycmVkUmVxdWVzdCA9IFJlc291cmNl
UmVxdWVzdCgpOwogfQogCi1ib29sIFJlc291cmNlTG9hZGVyOjpsb2FkKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcikKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmluaXQoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByKQogewogICAgIEFTU0VSVCghbV9oYW5kbGUpOworICAgIEFTU0VSVChtX3JlcXVlc3Qu
aXNOdWxsKCkpOwogICAgIEFTU0VSVChtX2RlZmVycmVkUmVxdWVzdC5pc051bGwoKSk7CiAgICAg
QVNTRVJUKCFtX2RvY3VtZW50TG9hZGVyLT5pc1N1YnN0aXR1dGVMb2FkUGVuZGluZyh0aGlzKSk7
CiAgICAgCkBAIC0xMjgsMzkgKzEyOSwzNiBAQAogICAgICAgICAgICAgY2xpZW50UmVxdWVzdC5z
ZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7
CiAgICAgfQogCi0gICAgd2lsbFNlbmRSZXF1ZXN0KGNsaWVudFJlcXVlc3QsIFJlc291cmNlUmVz
cG9uc2UoKSk7Ci0gICAgaWYgKGNsaWVudFJlcXVlc3QuaXNOdWxsKCkpIHsKLSAgICAgICAgZGlk
RmFpbChmcmFtZUxvYWRlcigpLT5jYW5jZWxsZWRFcnJvcihyKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobV9kZWZlcnNMb2FkaW5nKQotICAgICAgICBtX2RlZmVy
cmVkUmVxdWVzdCA9IGNsaWVudFJlcXVlc3Q7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX3Jl
cXVlc3QgPSBjbGllbnRSZXF1ZXN0OwogfQogCi1ib29sIFJlc291cmNlTG9hZGVyOjpzdGFydCgp
Cit2b2lkIFJlc291cmNlTG9hZGVyOjpzdGFydCgpCiB7CiAgICAgQVNTRVJUKCFtX2hhbmRsZSk7
Ci0jaWZuZGVmIE5ERUJVRwotICAgIHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5hc3NlcnRMb2Fk
ZXJCZWluZ0NvdW50ZWQodGhpcyk7Ci0jZW5kaWYKKyAgICBBU1NFUlQoIW1fcmVxdWVzdC5pc051
bGwoKSk7CisgICAgQVNTRVJUKG1fZGVmZXJyZWRSZXF1ZXN0LmlzTnVsbCgpKTsKKworICAgIHdp
bGxTZW5kUmVxdWVzdChtX3JlcXVlc3QsIFJlc291cmNlUmVzcG9uc2UoKSk7CisgICAgaWYgKG1f
cmVxdWVzdC5pc051bGwoKSkgeworICAgICAgICBkaWRGYWlsKGZyYW1lTG9hZGVyKCktPmNhbmNl
bGxlZEVycm9yKG1fcmVxdWVzdCkpOworICAgICAgICByZXR1cm47CisgICAgfSAgICAKICAgICAK
ICAgICBpZiAobV9kb2N1bWVudExvYWRlci0+c2NoZWR1bGVBcmNoaXZlTG9hZCh0aGlzLCBtX3Jl
cXVlc3QsIG1fcmVxdWVzdC51cmwoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBy
ZXR1cm47CiAgICAgCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICBp
ZiAobV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkUmVz
b3VyY2UodGhpcywgbV9yZXF1ZXN0LCBtX3JlcXVlc3QudXJsKCkpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBpZiAobV9kZWZlcnNMb2FkaW5n
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZGVmZXJzTG9hZGluZykgeworICAg
ICAgICBtX2RlZmVycmVkUmVxdWVzdCA9IG1fcmVxdWVzdDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAogICAgIGlmICghbV9yZWFjaGVkVGVybWluYWxTdGF0ZSkKICAgICAgICAgbV9oYW5kbGUg
PSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKG1fZnJhbWUtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29u
dGV4dCgpLCBtX3JlcXVlc3QsIHRoaXMsIG1fZGVmZXJzTG9hZGluZywgbV9zaG91bGRDb250ZW50
U25pZmYpOwotICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFJlc291cmNlTG9hZGVyOjpzZXRE
ZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpAQCAtMTY5LDkgKzE2Nyw5IEBACiAgICAgaWYgKG1f
aGFuZGxlKQogICAgICAgICBtX2hhbmRsZS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOwogICAg
IGlmICghZGVmZXJzICYmICFtX2RlZmVycmVkUmVxdWVzdC5pc051bGwoKSkgewotICAgICAgICBS
ZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX2RlZmVycmVkUmVxdWVzdCk7CisgICAgICAgIG1fcmVx
dWVzdCA9IG1fZGVmZXJyZWRSZXF1ZXN0OwogICAgICAgICBtX2RlZmVycmVkUmVxdWVzdCA9IFJl
c291cmNlUmVxdWVzdCgpOwotICAgICAgICBsb2FkKHJlcXVlc3QpOworICAgICAgICBzdGFydCgp
OwogICAgIH0KIH0KIApAQCAtMzU5LDcgKzM1Nyw3IEBACiAgICAgICAgIG1faGFuZGxlLT5jYW5j
ZWwoKTsKICAgICAgICAgbV9oYW5kbGUgPSAwOwogICAgIH0KLSAgICBpZiAobV9zZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzICYmICFtX2NhbGxlZERpZEZpbmlzaExvYWQpCisgICAgaWYgKG1fc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcyAmJiBtX2lkZW50aWZpZXIgJiYgIW1fY2FsbGVkRGlkRmlu
aXNoTG9hZCkKICAgICAgICAgZnJhbWVMb2FkZXIoKS0+bm90aWZpZXIoKS0+ZGlkRmFpbFRvTG9h
ZCh0aGlzLCBlcnJvcik7CiAKICAgICByZWxlYXNlUmVzb3VyY2VzKCk7CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkocmV2aXNpb24gNzE4MzcpCisrKyBXZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTAg
KzU3LDYgQEAKICAgICB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKFByaW9yaXR5IG1pbmltdW1Q
cmlvcml0eSA9IFZlcnlMb3cpOwogICAgIHZvaWQgc3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpOwog
ICAgIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7Ci0gICAgCi0jaWZuZGVmIE5ERUJVRwot
ICAgIHZvaWQgYXNzZXJ0TG9hZGVyQmVpbmdDb3VudGVkKFJlc291cmNlTG9hZGVyKik7Ci0jZW5k
aWYKIAogcHJpdmF0ZToKICAgICBSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKQEAgLTgxLDEwICs3
Nyw2IEBACiAgICAgICAgIHZvaWQgcmVtb3ZlKFJlc291cmNlTG9hZGVyKik7CiAgICAgICAgIGJv
b2wgaGFzUmVxdWVzdHMoKSBjb25zdDsKICAgICAgICAgYm9vbCBsaW1pdFJlcXVlc3RzKCkgY29u
c3QgeyByZXR1cm4gbV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpID49IG1fbWF4UmVxdWVzdHNJbkZs
aWdodDsgfQotICAgICAgICAKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIHZvaWQgYXNzZXJ0TG9h
ZGVyQmVpbmdDb3VudGVkKFJlc291cmNlTG9hZGVyKik7Ci0jZW5kaWYKIAogICAgICAgICB0eXBl
ZGVmIERlcXVlPFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gPiBSZXF1ZXN0UXVldWU7CiAgICAgICAg
IFJlcXVlc3RRdWV1ZSYgcmVxdWVzdHNQZW5kaW5nKFByaW9yaXR5IHByaW9yaXR5KSB7IHJldHVy
biBtX3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eV07IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuaAkocmV2aXNpb24gNzE4MzcpCisrKyBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBACiAKICAgICAgICAgdm9pZCBjYW5jZWwo
KTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgbG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGluaXQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAg
ICAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyKCkgY29uc3Q7CiAgICAgICAgIERvY3VtZW50
TG9hZGVyKiBkb2N1bWVudExvYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRMb2FkZXIu
Z2V0KCk7IH0KQEAgLTEyNiw4ICsxMjYsNyBAQAogICAgICAgICBSZXNvdXJjZUhhbmRsZSogaGFu
ZGxlKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGUuZ2V0KCk7IH0KICAgICAgICAgYm9vbCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzOyB9CiAKLSAgICAgICAgLy8gQ2FsbGVkIGJ5IFJlc291cmNlTG9hZFNjaGVkdWxl
ciB0byBjcmVhdGUgYSBSZXNvdXJjZUhhbmRsZSBhbmQgYWN0dWFsbHkgYmVnaW4gdGhlIGxvYWQu
Ci0gICAgICAgIGJvb2wgc3RhcnQoKTsKKyAgICAgICAgYm9vbCByZWFjaGVkVGVybWluYWxTdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhY2hlZFRlcm1pbmFsU3RhdGU7IH0KIAogICAgICAgICB2
b2lkIHNldFNob3VsZEJ1ZmZlckRhdGEoYm9vbCBzaG91bGRCdWZmZXJEYXRhKTsKIApAQCAtMTM3
LDEyICsxMzYsMTUgQEAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogICAg
ICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRpb25DYWNoZUhvc3Q7ICAvLyBmb3IgYWNjZXNzIHRv
IHJlcXVlc3QoKQogI2VuZGlmCi0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlTG9hZFNj
aGVkdWxlcjsgLy8gZm9yIGFjY2VzcyB0byBzdGFydCgpCisgICAgICAgIC8vIHN0YXJ0KCkgYWN0
dWFsbHkgc2VuZHMgdGhlIGxvYWQgdG8gdGhlIG5ldHdvcmsgKHVubGVzcyB0aGUgbG9hZCBpcyBi
ZWluZyAKKyAgICAgICAgLy8gZGVmZXJyZWQpIGFuZCBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkg
UmVzb3VyY2VMb2FkU2NoZWR1bGVyIG9yIHNldERlZmVyc0xvYWRpbmcoKS4KKyAgICAgICAgdm9p
ZCBzdGFydCgpOworICAgICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbChjb25z
dCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ09uZVBhcnQo
ZG91YmxlIGZpbmlzaFRpbWUpOwogCiAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdDsgfQotICAgICAgICBib29sIHJlYWNoZWRU
ZXJtaW5hbFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFjaGVkVGVybWluYWxTdGF0ZTsgfQog
ICAgICAgICBib29sIGNhbmNlbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuY2VsbGVkOyB9CiAg
ICAgICAgIGJvb2wgZGVmZXJzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZGVmZXJzTG9hZGlu
ZzsgfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA3
MTgzNykKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODYsOCArODYsNyBAQAogCiAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBz
dWJsb2FkZXIoYWRvcHRSZWYobmV3IFN1YnJlc291cmNlTG9hZGVyKGZyYW1lLCBjbGllbnQsIHNl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIHNob3VsZENvbnRlbnRTbmlmZikpKTsKICAgICBzdWJs
b2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFkZFN1YnJlc291cmNlTG9hZGVyKHN1YmxvYWRlci5n
ZXQoKSk7Ci0gICAgaWYgKCFzdWJsb2FkZXItPmxvYWQobmV3UmVxdWVzdCkpCi0gICAgICAgIHJl
dHVybiAwOworICAgIHN1YmxvYWRlci0+aW5pdChuZXdSZXF1ZXN0KTsKIAogICAgIHJldHVybiBz
dWJsb2FkZXIucmVsZWFzZSgpOwogfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCShyZXZpc2lvbiA3MTgzNykK
KysrIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMSAr
MTMwLDEwIEBACiAKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IHJlc291
cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9hZChjYWNoZWRSZXNvdXJj
ZUxvYWRlci0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSwKICAgICAgICAgdGhpcywgcmVzb3VyY2VSZXF1
ZXN0LCBkZXRlcm1pbmVQcmlvcml0eShyZXNvdXJjZSksIHJlcXVlc3QtPnNob3VsZERvU2VjdXJp
dHlDaGVjaygpLCByZXF1ZXN0LT5zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpOwotICAgIGlm
IChsb2FkZXIpIHsKKyAgICBpZiAobG9hZGVyICYmICFsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0
YXRlKCkpCiAgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLmFkZChsb2FkZXIucmVsZWFzZSgpLCBy
ZXF1ZXN0KTsKLSAgICAgICAgcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+c2V0UmVxdWVzdGVk
RnJvbU5ldHdvcmtpbmdMYXllcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBX
aGF0IGlmIHJlc291cmNlcyBpbiBvdGhlciBmcmFtZXMgd2VyZSB3YWl0aW5nIGZvciB0aGlzIHJl
dmFsaWRhdGlvbj8gCisgICAgZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHJlc291
cmNlcyBpbiBvdGhlciBmcmFtZXMgd2VyZSB3YWl0aW5nIGZvciB0aGlzIHJldmFsaWRhdGlvbj8K
ICAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhbm5vdCBzdGFydCBsb2FkaW5nICclcyci
LCByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOyAgICAg
ICAgICAgICAKICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRlY3JlbWVudFJlcXVlc3RD
b3VudChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpKTsKICAgICAgICAgY2FjaGVkUmVzb3VyY2VM
b2FkZXItPnNldExvYWRJblByb2dyZXNzKHRydWUpOwpAQCAtMTY0LDYgKzE2MywxNiBAQAogICAg
IH0KIH0KIAordm9pZCBMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciog
bG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sKKyAg
ICBSZXF1ZXN0TWFwOjppdGVyYXRvciBpID0gbV9yZXF1ZXN0c0xvYWRpbmcuZmluZChsb2FkZXIp
OworICAgIGlmIChpID09IG1fcmVxdWVzdHNMb2FkaW5nLmVuZCgpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgUmVxdWVzdCogcmVxdWVzdCA9IGktPnNlY29uZDsKKyAgICByZXF1ZXN0LT5j
YWNoZWRSZXNvdXJjZSgpLT5zZXRSZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKCk7Cit9CisK
IHZvaWQgTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIp
CiB7CiAgICAgUmVxdWVzdE1hcDo6aXRlcmF0b3IgaSA9IG1fcmVxdWVzdHNMb2FkaW5nLmZpbmQo
bG9hZGVyKTsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9zZWN1cml0eS9ibG9jay10
ZXN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
c2VjdXJpdHkvYmxvY2stdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDcxODM3KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3NlY3VyaXR5L2Jsb2NrLXRlc3QtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogaHR0cDovLzI1NS4yNTUuMjU1LjI1NToxL3Rl
c3QuanBnIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8yNTUuMjU1
LjI1NS4yNTU6MS90ZXN0LmpwZywgbWFpbiBkb2N1bWVudCBVUkwgYmxvY2stdGVzdC5odG1sLCBo
dHRwIG1ldGhvZCBHRVQ+IHJlZGlyZWN0UmVzcG9uc2UgKG51bGwpCiA8dW5rbm93bj4gLSBkaWRG
aW5pc2hMb2FkaW5nCitodHRwOi8vMjU1LjI1NS4yNTUuMjU1OjEvdGVzdC5qcGcgLSBkaWRGYWls
TG9hZGluZ1dpdGhFcnJvcjogPE5TRXJyb3IgZG9tYWluIFdlYktpdEVycm9yRG9tYWluLCBjb2Rl
IDEwMywgZmFpbGluZyBVUkwgImh0dHA6Ly8yNTUuMjU1LjI1NS4yNTU6MS90ZXN0LmpwZyI+CiBo
dHRwOi8vMjU1LjI1NS4yNTUuMjU1OjcvdGVzdC5qcGcgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJM
UmVxdWVzdCBVUkwgaHR0cDovLzI1NS4yNTUuMjU1LjI1NTo3L3Rlc3QuanBnLCBtYWluIGRvY3Vt
ZW50IFVSTCBibG9jay10ZXN0Lmh0bWwsIGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25z
ZSAobnVsbCkKLWh0dHA6Ly8yNTUuMjU1LjI1NS4yNTU6MS90ZXN0LmpwZyAtIGRpZEZhaWxMb2Fk
aW5nV2l0aEVycm9yOiA8TlNFcnJvciBkb21haW4gV2ViS2l0RXJyb3JEb21haW4sIGNvZGUgMTAz
LCBmYWlsaW5nIFVSTCAiaHR0cDovLzI1NS4yNTUuMjU1LjI1NToxL3Rlc3QuanBnIj4KIGh0dHA6
Ly8yNTUuMjU1LjI1NS4yNTU6Ny90ZXN0LmpwZyAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiA8
TlNFcnJvciBkb21haW4gV2ViS2l0RXJyb3JEb21haW4sIGNvZGUgMTAzLCBmYWlsaW5nIFVSTCAi
aHR0cDovLzI1NS4yNTUuMjU1LjI1NTo3L3Rlc3QuanBnIj4KIGh0dHA6Ly8yNTUuMjU1LjI1NS4y
NTU6OS90ZXN0LmpwZyAtIHdpbGxTZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8v
MjU1LjI1NS4yNTUuMjU1OjkvdGVzdC5qcGcsIG1haW4gZG9jdW1lbnQgVVJMIGJsb2NrLXRlc3Qu
aHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNlIChudWxsKQogaHR0cDovLzI1
NS4yNTUuMjU1LjI1NTo5L3Rlc3QuanBnIC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6IDxOU0Vy
cm9yIGRvbWFpbiBXZWJLaXRFcnJvckRvbWFpbiwgY29kZSAxMDMsIGZhaWxpbmcgVVJMICJodHRw
Oi8vMjU1LjI1NS4yNTUuMjU1OjkvdGVzdC5qcGciPgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzE4Mzcp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBA
QAorMjAxMC0xMS0xMCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgdXBkYXRlIGZv
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTEsCisgICAgICAg
IHRoZSB0aW1pbmcgb2Ygd2lsbFNlbmRSZXF1ZXN0KCkgY2FsbHMgd2lsbCBiZSBzbGlnaHRseSBk
aWZmZXJlbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc2VjdXJpdHkvYmxvY2stdGVzdC1l
eHBlY3RlZC50eHQ6CisKIDIwMTAtMTEtMTEgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4K
</data>

          </attachment>
      

    </bug>

</bugzilla>