<?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>52248</bug_id>
          
          <creation_ts>2011-01-11 13:56:10 -0800</creation_ts>
          <short_desc>Back/forward list recovery after a WebProcess crash is crashy itself.</short_desc>
          <delta_ts>2011-06-18 11:58:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>buildbot</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>332623</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-01-11 13:56:10 -0800</bug_when>
    <thetext>Back/forward list recovery after a crash is crashy itself.

If the WebProcess crashes and we restore the back/forward list to the new session, the UIProcess and WebProcess are not in agreement about the list and this leads to crashes downstream.

Shortly I&apos;ll attach a patch that:
-Relaunchs the WebProcess on goBack/goForward/goToItem (and reload() for good measure)
-Sends session state over to the new WebPage in the new WebProcess as part of the creation parameters.
-Optionally reloads the current history item to get something in the page after recovery.

In radar mostly as &lt;rdar://problem/8837307&gt;.

The &quot;WebPageProxy::reload() should relaunch the process&quot; piece is in radar as &lt;rdar://problem/8637038&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332634</commentid>
    <comment_count>1</comment_count>
      <attachid>78595</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-01-11 14:06:15 -0800</bug_when>
    <thetext>Created attachment 78595
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332641</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-11 14:09:11 -0800</bug_when>
    <thetext>Attachment 78595 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebKit2/ChangeLog&apos;, u&apos;WebKit2/Shared/Sessi...&quot; exit_code: 1
WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp:83:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebKit2/WebProcess/WebPage/WebBackForwardListProxy.h:44:  The parameter name &quot;itemID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332661</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-11 14:30:27 -0800</bug_when>
    <thetext>Attachment 78595 did not build on win:
Build output: http://queues.webkit.org/results/7463100</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332669</commentid>
    <comment_count>4</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-11 14:39:59 -0800</bug_when>
    <thetext>Attachment 78595 did not build on qt:
Build output: http://queues.webkit.org/results/7486009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332675</commentid>
    <comment_count>5</comment_count>
      <attachid>78595</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-11 14:43:49 -0800</bug_when>
    <thetext>Comment on attachment 78595
Patch v1

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

Looks like this failed to build on Windows.

&gt; WebKit2/Shared/SessionState.cpp:62
&gt; +    // This might change.

This comment is cryptic. I think what you mean to say is:

    // Because this might change later, callers should use this instead of calling list().isEmpty() directly themselves.

&gt; WebKit2/UIProcess/WebPageProxy.cpp:212
&gt; +    reattachToWebProcess(true);

The boolean here is not good. It’s unclear what “true” means. I’d rather see an enum used to make call sites like this one understandable.

&gt; WebKit2/UIProcess/WebPageProxy.cpp:238
&gt; -    process()-&gt;send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters()), 0);
&gt; +    process()-&gt;send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters(reloadCurrentSessionHistoryItem)), 0);

Instead of sending a boolean, could we just send a second message to trigger the reloading?

&gt; WebKit2/UIProcess/WebPageProxy.cpp:312
&gt; +        reattachToWebProcess(false);

The boolean here is not good. It’s unclear what “false” means. I’d rather see an enum used to make call sites like this one understandable.

&gt; WebKit2/UIProcess/WebPageProxy.cpp:322
&gt; +        reattachToWebProcess(false);

The boolean here is not good. It’s unclear what “false” means. I’d rather see an enum used to make call sites like this one understandable.

&gt; WebKit2/UIProcess/WebPageProxy.cpp:365
&gt; +        reattachToWebProcess(true);

The boolean here is not good. It’s unclear what “true” means. I’d rather see an enum used to make call sites like this one understandable.

&gt; WebKit2/UIProcess/WebPageProxy.cpp:377
&gt; +    if (!isValid()) {
&gt; +        reattachToWebProcessWithItem(m_backForwardList-&gt;forwardItem());
&gt;          return;
&gt; +    }

Might be over-engineering to support this. How did you test it?

&gt; WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp:74
&gt; +void WebBackForwardListProxy::setHighestItemIDFromUIProcess(uint64_t itemID)

Do we have a race condition here? What if an ID is created before receiving the new highest item?

&gt; WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp:84
&gt; +    uniqueHistoryItemID = itemID;
&gt; +
&gt; +    // If the highest used ID is even, increment it to the next odd ID as that is what should be used
&gt; +    // for items generated by the WebProcess. 
&gt; +    if (uniqueHistoryItemID % 2 == 0)
&gt; +        ++uniqueHistoryItemID;

I think this would read better if you set uniqueHistoryItemID only once. Maybe like this:

    if (itemID % 2)
        uniqueHistoryItemID = itemID;
    else
        uniqueHistoryItemID = itemID + 1;

Or with a function:

    static uint64_t makeOdd(uint64_t number)
    {
        return number + number % 2;
    }

And:

    uniqueHistoryItemID = makeOdd(itemID);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332700</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-01-11 15:04:19 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 78595 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78595&amp;action=review
&gt; 
&gt; Looks like this failed to build on Windows.

And Qt.  Their compilers don&apos;t agree on what default arguments mean.  I&apos;m fixing.

&gt; &gt; WebKit2/Shared/SessionState.cpp:62
&gt; &gt; +    // This might change.
&gt; 
&gt; This comment is cryptic. I think what you mean to say is:
&gt; 
&gt;     // Because this might change later, callers should use this instead of calling list().isEmpty() directly themselves.

That&apos;s better.  Done.

&gt; &gt; WebKit2/UIProcess/WebPageProxy.cpp:212
&gt; &gt; +    reattachToWebProcess(true);
&gt; 
&gt; The boolean here is not good. It’s unclear what “true” means. I’d rather see an enum used to make call sites like this one understandable.

I&apos;ll do this.

&gt; &gt; WebKit2/UIProcess/WebPageProxy.cpp:238
&gt; &gt; -    process()-&gt;send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters()), 0);
&gt; &gt; +    process()-&gt;send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters(reloadCurrentSessionHistoryItem)), 0);
&gt; 
&gt; Instead of sending a boolean, could we just send a second message to trigger the reloading?

I&apos;d thought about this carefully and decided not to pursue it.  There&apos;s already too much asynchronicity and too many messages in (re)creating a WebPage, and I didn&apos;t think it was worth it to go down that road.

If you feel strongly about this, I can revisit it, but it might take awhile.

&gt; &gt; WebKit2/UIProcess/WebPageProxy.cpp:377
&gt; &gt; +    if (!isValid()) {
&gt; &gt; +        reattachToWebProcessWithItem(m_backForwardList-&gt;forwardItem());
&gt; &gt;          return;
&gt; &gt; +    }
&gt; 
&gt; Might be over-engineering to support this. How did you test it?

Easy to make it possible in a test app with a couple of lines
&gt; 
&gt; &gt; WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp:74
&gt; &gt; +void WebBackForwardListProxy::setHighestItemIDFromUIProcess(uint64_t itemID)
&gt; 
&gt; Do we have a race condition here? What if an ID is created before receiving the new highest item?

That&apos;s fine - at the time the UIProcess passed this number over, it was the highest ID known.  The only new IDs the UIProcess might have created are for UIProcess items (even numbers).  The WebProcess is only interested in making sure the next *odd* ID it creates is at least this high.

&gt; 
&gt; &gt; WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp:84
&gt; &gt; +    uniqueHistoryItemID = itemID;
&gt; &gt; +
&gt; &gt; +    // If the highest used ID is even, increment it to the next odd ID as that is what should be used
&gt; &gt; +    // for items generated by the WebProcess. 
&gt; &gt; +    if (uniqueHistoryItemID % 2 == 0)
&gt; &gt; +        ++uniqueHistoryItemID;
&gt; 
&gt; I think this would read better if you set uniqueHistoryItemID only once. Maybe like this:
&gt; 
&gt;     if (itemID % 2)
&gt;         uniqueHistoryItemID = itemID;
&gt;     else
&gt;         uniqueHistoryItemID = itemID + 1;
&gt; 
&gt; Or with a function:
&gt; 
&gt;     static uint64_t makeOdd(uint64_t number)
&gt;     {
&gt;         return number + number % 2;
&gt;     }
&gt; 
&gt; And:
&gt; 
&gt;     uniqueHistoryItemID = makeOdd(itemID);

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332830</commentid>
    <comment_count>7</comment_count>
      <attachid>78632</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-01-11 17:52:23 -0800</bug_when>
    <thetext>Created attachment 78632
Patch v2 - Remove all those argument changes (all builds should be okay) and do it in 2 messages</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332832</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-11 17:55:37 -0800</bug_when>
    <thetext>Attachment 78632 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebKit2/ChangeLog&apos;, u&apos;WebKit2/Shared/Sessi...&quot; exit_code: 1
WebKit2/WebProcess/WebPage/WebBackForwardListProxy.h:44:  The parameter name &quot;itemID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333194</commentid>
    <comment_count>9</comment_count>
      <attachid>78632</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-12 11:37:52 -0800</bug_when>
    <thetext>Comment on attachment 78632
Patch v2 - Remove all those argument changes (all builds should be okay) and do it in 2 messages

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

&gt; WebKit2/UIProcess/WebPageProxy.h:135
&gt; +    void reattachToWebProcess();

Can this function be made private?

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:885
&gt; +#ifndef NDEBUG

This should probably be #ifndef ASSERT_DISABLED

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:900
&gt; +#ifndef NDEBUG

This one too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333202</commentid>
    <comment_count>10</comment_count>
      <attachid>78715</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-01-12 11:49:10 -0800</bug_when>
    <thetext>Created attachment 78715
Patch v3 - Feedback from Sam here and in person</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333204</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-12 11:51:02 -0800</bug_when>
    <thetext>Attachment 78715 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebKit2/ChangeLog&apos;, u&apos;WebKit2/Shared/Sessi...&quot; exit_code: 1

WebKit2/WebProcess/WebPage/WebBackForwardListProxy.h:44:  The parameter name &quot;itemID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423150</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-18 11:58:42 -0700</bug_when>
    <thetext>r75631</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78595</attachid>
            <date>2011-01-11 14:06:15 -0800</date>
            <delta_ts>2011-01-11 17:52:23 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17810</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTU0OSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMTEtMDEtMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84ODM3MzA3PiwgPHJkYXI6Ly9wcm9ibGVtLzg2MzcwMzg+LCBhbmQgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMjQ4CisgICAgICAgIEJhY2sv
Zm9yd2FyZCBsaXN0IHJlY292ZXJ5IGFmdGVyIGEgV2ViUHJvY2VzcyBjcmFzaCBpcyBjcmFzaHkg
aXRzZWxmLgorCisgICAgICAgIEFkZCBhbiBpc0VtcHR5KCkgYWNjZXNzb3Igc28gdGhlIFdlYlBy
b2Nlc3Mga25vd3MgaWYgaXQgaXMgYWN0dWFsbHkgcmVzdG9yaW5nIGEgc2Vzc2lvbjoKKyAgICAg
ICAgKiBTaGFyZWQvU2Vzc2lvblN0YXRlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0
YXRlOjppc0VtcHR5KToKKyAgICAgICAgKiBTaGFyZWQvU2Vzc2lvblN0YXRlLmg6CisKKyAgICAg
ICAgS2VlcCB0cmFjayBvZiB0aGUgaGlnaGVzdCB1c2VkIGl0ZW1JRCBzbyBhIHJlbGF1bmNoZWQg
V2ViUHJvY2VzcyBjYW4gbGF0ZXIgYmUgaW5mb3JtZWQ6CisgICAgICAgICogU2hhcmVkL1dlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExp
c3RJdGVtOjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0SXRlbTo6aGlnaGVkVXNlZEl0ZW1JRCk6CisgICAgICAgICogU2hhcmVkL1dl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0uaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
QmFja0ZvcndhcmRMaXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpnZW5lcmF0ZUhpc3Rv
cnlJdGVtSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6c2V0
SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9y
d2FyZExpc3RQcm94eTo6YWRkSXRlbUZyb21VSVByb2Nlc3MpOiBSZW1vdmUgYSBub3ctaW52YWxp
ZCBBU1NFUlQsIGFzIHRoZSBVSVByb2Nlc3MKKyAgICAgICAgICBub3cgdGVsbHMgdGhlIFdlYlBy
b2Nlc3MgdGhhdCBhIHByZXZpb3VzIFdlYlByb2Nlc3MgY3JlYXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuaDoKKworICAgICAgICBFbmNv
ZGUvZGVjb2RlIGRhdGEgcmVsZXZhbnQgdG8gcmVzdG9yaW5nIGEgc2Vzc2lvbiBvbiBXZWJQYWdl
IGNyZWF0aW9uOgorICAgICAgICAqIFNoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oOgorCisgICAgICAgIElm
IHRoZSBXZWJQcm9jZXNzIGhhcyBjcmFzaGVkIHNpbmNlIHRoZSBsYXN0IGxvYWQsIGNoYW5nZSBy
ZWxvYWQgYW5kIHRoZSB2YXJpb3VzIGJhY2svZm9yd2FyZCBBUElzIHRvIAorICAgICAgICB1cGRh
dGUgdGhlIGN1cnJlbnQgYmFjay9mb3J3YXJkIGl0ZW0gKGlmIG5lY2Vzc2FyeSkgdGhlbiByZWxh
dW5jaCB0aGUgcHJvY2VzczoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2Vzc1dpdGhJ
dGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2Vz
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmxvYWRVUkwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmxvYWRVUkxSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpyZWxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdvRm9yd2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z29CYWNrKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojpnb1RvQmFja0ZvcndhcmRJdGVtKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpjcmVhdGlvblBhcmFtZXRlcnMpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaDoKKworICAgICAgICBSZXN0b3JlIGEgc2Vzc2lvbiBvbiBwYWdlIGNy
ZWF0aW9uIGlmIHRoZSBwYXJhbWV0ZXJzIGluY2x1ZGUgaXQ6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpXZWJQYWdl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVzdG9yZVNlc3Npb24pOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisKIDIwMTEtMDEtMTEgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2Vp
bmlnLgpJbmRleDogV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblN0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1NoYXJlZC9TZXNzaW9uU3RhdGUuY3BwCShyZXZpc2lvbiA3NTUzMSkKKysrIFdl
YktpdDIvU2hhcmVkL1Nlc3Npb25TdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1
LDEzIEBAIFNlc3Npb25TdGF0ZTo6U2Vzc2lvblN0YXRlKGNvbnN0IEJhY2tGb3IKICAgICAsIG1f
Y3VycmVudEluZGV4KGN1cnJlbnRJbmRleCkKIHsKIH0KKworYm9vbCBTZXNzaW9uU3RhdGU6Omlz
RW1wdHkoKSBjb25zdAoreworICAgIC8vIFNpbmNlIFNlc3Npb25TdGF0ZSBjdXJyZW50bHkgb25s
eSBob2xkcyBhIGJhY2svZm9yd2FyZCBsaXN0LCBhbiBlbXB0eSBsaXN0IG1lYW5zIGFuIGVtcHR5
IFNlc3Npb25TdGF0ZS4KKyAgICAvLyBUaGlzIG1pZ2h0IGNoYW5nZS4KKyAgICByZXR1cm4gbV9s
aXN0LmlzRW1wdHkoKTsKK30KICAgICAKIHZvaWQgU2Vzc2lvblN0YXRlOjplbmNvZGUoQ29yZUlQ
Qzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewpJbmRleDogV2ViS2l0Mi9TaGFy
ZWQvU2Vzc2lvblN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblN0
YXRlLmgJKHJldmlzaW9uIDc1NTMxKQorKysgV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblN0YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgcHVibGljOgogICAgIGNvbnN0IEJhY2tG
b3J3YXJkTGlzdEl0ZW1WZWN0b3ImIGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xpc3Q7IH0KICAg
ICB1aW50MzJfdCBjdXJyZW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRJbmRleDsg
fQogCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisKICAgICB2b2lkIGVuY29kZShDb3JlSVBD
OjpBcmd1bWVudEVuY29kZXIqKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQ
Qzo6QXJndW1lbnREZWNvZGVyKiwgU2Vzc2lvblN0YXRlJik7CiAKSW5kZXg6IFdlYktpdDIvU2hh
cmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hh
cmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiA3NTUzMSkKKysrIFdlYktp
dDIvU2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwxMiArMzAsMTcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyB1aW50NjRfdCBo
aWdoZXN0VXNlZEl0ZW1JRCA9IDA7CisKIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OldlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0oY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IHVpbnQ4X3QqIGJhY2tGb3J3YXJkRGF0YSwg
c2l6ZV90IGJhY2tGb3J3YXJkRGF0YVNpemUsIHVpbnQ2NF90IGl0ZW1JRCkKICAgICA6IG1fb3Jp
Z2luYWxVUkwob3JpZ2luYWxVUkwpCiAgICAgLCBtX3VybCh1cmwpCiAgICAgLCBtX3RpdGxlKHRp
dGxlKQogICAgICwgbV9pdGVtSUQoaXRlbUlEKQogeworICAgIGlmIChtX2l0ZW1JRCA+IGhpZ2hl
c3RVc2VkSXRlbUlEKQorICAgICAgICBoaWdoZXN0VXNlZEl0ZW1JRCA9IG1faXRlbUlEOworCiAg
ICAgc2V0QmFja0ZvcndhcmREYXRhKGJhY2tGb3J3YXJkRGF0YSwgYmFja0ZvcndhcmREYXRhU2l6
ZSk7CiB9CiAKQEAgLTQzLDYgKzQ4LDExIEBAIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06On5XZWJC
YWNrRm9yd2FyZEwKIHsKIH0KIAordWludDY0X3QgV2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6aGln
aGVkVXNlZEl0ZW1JRCgpCit7CisgICAgcmV0dXJuIGhpZ2hlc3RVc2VkSXRlbUlEOworfQorCiB2
b2lkIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OnNldEJhY2tGb3J3YXJkRGF0YShjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBtX2JhY2tGb3J3YXJkRGF0YS5yZXNlcnZl
Q2FwYWNpdHkoc2l6ZSk7CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJCYWNrRm9yd2FyZExpc3RJ
dGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRl
bS5oCShyZXZpc2lvbiA3NTUzMSkKKysrIFdlYktpdDIvU2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4gZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciYpOwogCisgICAgc3RhdGljIHVpbnQ2NF90IGhpZ2hlZFVzZWRJdGVtSUQoKTsKKwog
cHJpdmF0ZToKICAgICBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKGNvbnN0IFN0cmluZyYgb3JpZ2lu
YWxVUkwsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCB1aW50
OF90KiBiYWNrRm9yd2FyZERhdGEsIHNpemVfdCBiYWNrRm9yd2FyZERhdGFTaXplLCB1aW50NjRf
dCBpdGVtSUQpOwogCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcAkocmV2aXNpb24gNzU1MzEpCisrKyBXZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQCB2b2lk
IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShDCiAgICAgZW5jb2Rlci0+ZW5jb2Rl
KGRyYXdzQmFja2dyb3VuZCk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKGRyYXdzVHJhbnNwYXJlbnRC
YWNrZ3JvdW5kKTsKICAgICBlbmNvZGVyLT5lbmNvZGUodXNlckFnZW50KTsKKyAgICBlbmNvZGVy
LT5lbmNvZGUoc2Vzc2lvblN0YXRlKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGlnaGVzdFVzZWRC
YWNrRm9yd2FyZEl0ZW1JRCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHJlbG9hZEN1cnJlbnRTZXNz
aW9uSGlzdG9yeUl0ZW0pOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGVuY29kZXItPmVuY29k
ZShpc1NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCk7CkBAIC03Nyw2ICs4MCwxMyBAQCBib29sIFdl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShDCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLnVzZXJBZ2VudCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLnNlc3Np
b25TdGF0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShwYXJhbWV0ZXJzLmhpZ2hlc3RVc2VkQmFja0ZvcndhcmRJdGVtSUQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocGFyYW1ldGVycy5yZWxvYWRDdXJy
ZW50U2Vzc2lvbkhpc3RvcnlJdGVtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMuaXNTbWFydElu
c2VydERlbGV0ZUVuYWJsZWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJLaXQy
L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oCShyZXZpc2lvbiA3NTUzMSkKKysr
IFdlYktpdDIvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzX2gK
IAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW5mby5oIgorI2luY2x1ZGUgIlNlc3Npb25TdGF0ZS5o
IgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cERhdGEuaCIKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNl
c1N0b3JlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CkBAIC01OSw2ICs2MCwxMCBA
QCBzdHJ1Y3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyB7CiAKICAgICBTdHJpbmcgdXNlckFn
ZW50OwogCisgICAgU2Vzc2lvblN0YXRlIHNlc3Npb25TdGF0ZTsKKyAgICB1aW50NjRfdCBoaWdo
ZXN0VXNlZEJhY2tGb3J3YXJkSXRlbUlEOworICAgIGJvb2wgcmVsb2FkQ3VycmVudFNlc3Npb25I
aXN0b3J5SXRlbTsKKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBib29sIGlzU21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkOwogI2VuZGlmCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHJldmlzaW9uIDc1NTMxKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgog
I2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50
LmgiCisjaW5jbHVkZSAiU2Vzc2lvblN0YXRlLmgiCiAjaW5jbHVkZSAiU3RyaW5nUGFpclZlY3Rv
ci5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0
ZS5oIgpAQCAtMjAzLDI2ICsyMDQsMzggQEAgdm9pZCBXZWJQYWdlUHJveHk6OmluaXRpYWxpemVD
b250ZXh0TWVudQogICAgIG1fY29udGV4dE1lbnVDbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cmVsYXVuY2goKQordm9pZCBXZWJQYWdlUHJveHk6OnJl
YXR0YWNoVG9XZWJQcm9jZXNzV2l0aEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkK
K3sKKyAgICBpZiAoaXRlbSAmJiBpdGVtICE9IG1fYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRl
bSgpKQorICAgICAgICBtX2JhY2tGb3J3YXJkTGlzdC0+Z29Ub0l0ZW0oaXRlbSk7CisgICAgCisg
ICAgcmVhdHRhY2hUb1dlYlByb2Nlc3ModHJ1ZSk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5Ojpy
ZWF0dGFjaFRvV2ViUHJvY2Vzcyhib29sIHJlbG9hZEN1cnJlbnRTZXNzaW9uSGlzdG9yeUl0ZW0p
CiB7CiAgICAgbV9pc1ZhbGlkID0gdHJ1ZTsKIAogICAgIGNvbnRleHQoKS0+cmVsYXVuY2hQcm9j
ZXNzSWZOZWNlc3NhcnkoKTsKICAgICBwcm9jZXNzKCktPmFkZEV4aXN0aW5nV2ViUGFnZSh0aGlz
LCBtX3BhZ2VJRCk7CiAKLSAgICBpbml0aWFsaXplV2ViUGFnZSgpOworICAgIGluaXRpYWxpemVX
ZWJQYWdlKHJlbG9hZEN1cnJlbnRTZXNzaW9uSGlzdG9yeUl0ZW0pOwogCiAgICAgbV9wYWdlQ2xp
ZW50LT5kaWRSZWxhdW5jaFByb2Nlc3MoKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmluaXRp
YWxpemVXZWJQYWdlKCkKK3ZvaWQgV2ViUGFnZVByb3h5Ojppbml0aWFsaXplV2ViUGFnZShib29s
IHJlbG9hZEN1cnJlbnRTZXNzaW9uSGlzdG9yeUl0ZW0pCiB7CiAgICAgQVNTRVJUKGlzVmFsaWQo
KSk7CiAKKyAgICBCYWNrRm9yd2FyZExpc3RJdGVtVmVjdG9yIGl0ZW1zID0gbV9iYWNrRm9yd2Fy
ZExpc3QtPmVudHJpZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUo
KTsgKytpKQorICAgICAgICBwcm9jZXNzKCktPnJlZ2lzdGVyTmV3V2ViQmFja0ZvcndhcmRMaXN0
SXRlbShpdGVtc1tpXS5nZXQoKSk7CisKICAgICBtX2RyYXdpbmdBcmVhID0gbV9wYWdlQ2xpZW50
LT5jcmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7CiAgICAgQVNTRVJUKG1fZHJhd2luZ0FyZWEpOwog
Ci0gICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpDcmVhdGVXZWJQYWdl
KG1fcGFnZUlELCBjcmVhdGlvblBhcmFtZXRlcnMoKSksIDApOworICAgIHByb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6Q3JlYXRlV2ViUGFnZShtX3BhZ2VJRCwgY3JlYXRpb25Q
YXJhbWV0ZXJzKHJlbG9hZEN1cnJlbnRTZXNzaW9uSGlzdG9yeUl0ZW0pKSwgMCk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpjbG9zZSgpCkBAIC0yOTYsNyArMzA5LDcgQEAgc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZVNhbmRib3hFeHRlbnNpb25IYQogdm9pZCBXZWJQYWdlUHJveHk6OmxvYWRVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJlbGF1
bmNoKCk7CisgICAgICAgIHJlYXR0YWNoVG9XZWJQcm9jZXNzKGZhbHNlKTsKIAogICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgIGluaXRpYWxp
emVTYW5kYm94RXh0ZW5zaW9uSGFuZGxlKEtVUkwoS1VSTCgpLCB1cmwpLCBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlKTsKQEAgLTMwNiw3ICszMTksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bG9hZFVS
TChjb25zdCBTdHJpbmcmCiB2b2lkIFdlYlBhZ2VQcm94eTo6bG9hZFVSTFJlcXVlc3QoV2ViVVJM
UmVxdWVzdCogdXJsUmVxdWVzdCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmVs
YXVuY2goKTsKKyAgICAgICAgcmVhdHRhY2hUb1dlYlByb2Nlc3MoZmFsc2UpOwogCiAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaW5pdGlh
bGl6ZVNhbmRib3hFeHRlbnNpb25IYW5kbGUodXJsUmVxdWVzdC0+cmVzb3VyY2VSZXF1ZXN0KCku
dXJsKCksIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwpAQCAtMzQ4LDE1ICszNjEsMjAgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnN0b3BMb2FkaW5nKCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OnJlbG9h
ZChib29sIHJlbG9hZEZyb21PcmlnaW4pCiB7Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgaWYg
KCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgcmVhdHRhY2hUb1dlYlByb2Nlc3ModHJ1ZSk7CiAgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlJlbG9hZChyZWxvYWRGcm9tT3JpZ2luKSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6Z29Gb3J3YXJkKCkKIHsKLSAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICBpZiAoIWlz
VmFsaWQoKSkgeworICAgICAgICByZWF0dGFjaFRvV2ViUHJvY2Vzc1dpdGhJdGVtKG1fYmFja0Zv
cndhcmRMaXN0LT5mb3J3YXJkSXRlbSgpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAg
IGlmICghY2FuR29Gb3J3YXJkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM3MSw4ICszODksMTAg
QEAgYm9vbCBXZWJQYWdlUHJveHk6OmNhbkdvRm9yd2FyZCgpIGNvbnN0CiAKIHZvaWQgV2ViUGFn
ZVByb3h5Ojpnb0JhY2soKQogewotICAgIGlmICghaXNWYWxpZCgpKQorICAgIGlmICghaXNWYWxp
ZCgpKSB7CisgICAgICAgIHJlYXR0YWNoVG9XZWJQcm9jZXNzV2l0aEl0ZW0obV9iYWNrRm9yd2Fy
ZExpc3QtPmJhY2tJdGVtKCkpOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKCFj
YW5Hb0JhY2soKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzg3LDggKzQwNywxMCBAQCBib29sIFdl
YlBhZ2VQcm94eTo6Y2FuR29CYWNrKCkgY29uc3QKIAogdm9pZCBXZWJQYWdlUHJveHk6OmdvVG9C
YWNrRm9yd2FyZEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKIHsKLSAgICBpZiAo
IWlzVmFsaWQoKSkKKyAgICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAgICByZWF0dGFjaFRvV2Vi
UHJvY2Vzc1dpdGhJdGVtKGl0ZW0pOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgcHJv
Y2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHb1RvQmFja0ZvcndhcmRJdGVtKGl0ZW0t
Pml0ZW1JRCgpKSwgbV9wYWdlSUQpOwogfQpAQCAtMjEyOCw3ICsyMTUwLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnByb2Nlc3NEaWRDcmFzaCgpCiAgICAgbV9sb2FkZXJDbGllbnQucHJvY2Vzc0Rp
ZENyYXNoKHRoaXMpOwogfQogCi1XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIFdlYlBhZ2VQcm94
eTo6Y3JlYXRpb25QYXJhbWV0ZXJzKCkgY29uc3QKK1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMg
V2ViUGFnZVByb3h5OjpjcmVhdGlvblBhcmFtZXRlcnMoYm9vbCByZWxvYWRDdXJyZW50U2Vzc2lv
bkhpc3RvcnlJdGVtKSBjb25zdAogewogICAgIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgcGFy
YW1ldGVyczsKIApAQCAtMjE0NCw2ICsyMTY2LDkgQEAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
cyBXZWJQYWdlUHJveHk6OgogICAgIHBhcmFtZXRlcnMuZHJhd3NCYWNrZ3JvdW5kID0gbV9kcmF3
c0JhY2tncm91bmQ7CiAgICAgcGFyYW1ldGVycy5kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCA9
IG1fZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQ7CiAgICAgcGFyYW1ldGVycy51c2VyQWdlbnQg
PSB1c2VyQWdlbnQoKTsKKyAgICBwYXJhbWV0ZXJzLnNlc3Npb25TdGF0ZSA9IFNlc3Npb25TdGF0
ZShtX2JhY2tGb3J3YXJkTGlzdC0+ZW50cmllcygpLCBtX2JhY2tGb3J3YXJkTGlzdC0+Y3VycmVu
dEluZGV4KCkpOworICAgIHBhcmFtZXRlcnMuaGlnaGVzdFVzZWRCYWNrRm9yd2FyZEl0ZW1JRCA9
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmhpZ2hlZFVzZWRJdGVtSUQoKTsKKyAgICBwYXJhbWV0
ZXJzLnJlbG9hZEN1cnJlbnRTZXNzaW9uSGlzdG9yeUl0ZW0gPSByZWxvYWRDdXJyZW50U2Vzc2lv
bkhpc3RvcnlJdGVtOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHBhcmFtZXRlcnMuaXNTbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQgPSBtX2lzU21hcnRJbnNlcnREZWxldGVFbmFibGVkOwpJbmRl
eDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDc1NTMxKQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw5ICsxMzIsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBpbml0aWFsaXplUG9saWN5Q2xpZW50KGNvbnN0IFdLUGFnZVBv
bGljeUNsaWVudCopOwogICAgIHZvaWQgaW5pdGlhbGl6ZVJlc291cmNlTG9hZENsaWVudChjb25z
dCBXS1BhZ2VSZXNvdXJjZUxvYWRDbGllbnQqKTsKICAgICB2b2lkIGluaXRpYWxpemVVSUNsaWVu
dChjb25zdCBXS1BhZ2VVSUNsaWVudCopOwotICAgIHZvaWQgcmVsYXVuY2goKTsKKyAgICB2b2lk
IHJlYXR0YWNoVG9XZWJQcm9jZXNzKGJvb2wgcmVsb2FkQ3VycmVudFNlc3Npb25IaXN0b3J5SXRl
bSk7CiAKLSAgICB2b2lkIGluaXRpYWxpemVXZWJQYWdlKCk7CisgICAgdm9pZCBpbml0aWFsaXpl
V2ViUGFnZShib29sIHJlbG9hZEN1cnJlbnRTZXNzaW9uSGlzdG9yeUl0ZW0gPSBmYWxzZSk7CiAK
ICAgICB2b2lkIGNsb3NlKCk7CiAgICAgYm9vbCB0cnlDbG9zZSgpOwpAQCAtMzA0LDcgKzMwNCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+Jik7CiAgICAgdm9pZCBkaWRDYW5jZWxGb3JPcGVuUGFuZWwoKTsKIAotICAg
IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgY3JlYXRpb25QYXJhbWV0ZXJzKCkgY29uc3Q7Cisg
ICAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBjcmVhdGlvblBhcmFtZXRlcnMoYm9vbCByZWxv
YWRDdXJyZW50U2Vzc2lvbkhpc3RvcnlJdGVtID0gZmFsc2UpIGNvbnN0OwogCiAjaWYgUExBVEZP
Uk0oUVQpCiAgICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKTsKQEAgLTQwMyw2ICs0MDMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3QgY3VycmVudFVzYWdlLCB1aW50
NjRfdCBleHBlY3RlZFVzYWdlLCB1aW50NjRfdCYgbmV3UXVvdGEpOwogICAgIHZvaWQgcmVxdWVz
dEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKHVpbnQ2NF90IGdlb2xvY2F0aW9uSUQsIHVp
bnQ2NF90IGZyYW1lSUQsIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyKTsKIAorICAgIHZvaWQgcmVh
dHRhY2hUb1dlYlByb2Nlc3NXaXRoSXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKik7CisKICNp
ZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICB2b2lkIHBhZ2VEaWRSZXF1ZXN0U2Ny
b2xsKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKICNlbmRpZgpJbmRleDogV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAko
cmV2aXNpb24gNzU1MzEpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9y
d2FyZExpc3RQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE2ICs2MCwzMCBAQCBzdGF0
aWMgSGlzdG9yeUl0ZW1Ub0lETWFwJiBoaXN0b3J5SXRlbVRvCiAgICAgcmV0dXJuIG1hcDsKIH0g
CiAKK3N0YXRpYyB1aW50NjRfdCB1bmlxdWVIaXN0b3J5SXRlbUlEID0gMTsKKwogc3RhdGljIHVp
bnQ2NF90IGdlbmVyYXRlSGlzdG9yeUl0ZW1JRCgpCiB7CiAgICAgLy8gVGhlc2UgSURzIGV4aXN0
IGluIHRoZSBXZWJQcm9jZXNzIGZvciBpdGVtcyBjcmVhdGVkIGJ5IHRoZSBXZWJQcm9jZXNzLgog
ICAgIC8vIFRoZSBJRHMgZ2VuZXJhdGVkIGhlcmUgbmVlZCB0byBuZXZlciBjb2xsaWRlIHdpdGgg
dGhlIElEcyBjcmVhdGVkIGluIFdlYkJhY2tGb3J3YXJkTGlzdCBpbiB0aGUgVUlQcm9jZXNzLgog
ICAgIC8vIFdlIGFjY29tcGxpc2ggdGhpcyBieSBzdGFydGluZyBmcm9tIDMsIGFuZCBvbmx5IGV2
ZXIgdXNpbmcgb2RkIGlkcy4KLSAgICBzdGF0aWMgdWludDY0X3QgdW5pcXVlSGlzdG9yeUl0ZW1J
RCA9IDE7CiAgICAgdW5pcXVlSGlzdG9yeUl0ZW1JRCArPSAyOwogICAgIHJldHVybiB1bmlxdWVI
aXN0b3J5SXRlbUlEOwogfQogCit2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpzZXRIaWdo
ZXN0SXRlbUlERnJvbVVJUHJvY2Vzcyh1aW50NjRfdCBpdGVtSUQpCit7CisgICAgaWYgKGl0ZW1J
RCA8PSB1bmlxdWVIaXN0b3J5SXRlbUlEKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdW5p
cXVlSGlzdG9yeUl0ZW1JRCA9IGl0ZW1JRDsKKworICAgIC8vIElmIHRoZSBoaWdoZXN0IHVzZWQg
SUQgaXMgZXZlbiwgaW5jcmVtZW50IGl0IHRvIHRoZSBuZXh0IG9kZCBJRCBhcyB0aGF0IGlzIHdo
YXQgc2hvdWxkIGJlIHVzZWQKKyAgICAvLyBmb3IgaXRlbXMgZ2VuZXJhdGVkIGJ5IHRoZSBXZWJQ
cm9jZXNzLiAKKyAgICBpZiAodW5pcXVlSGlzdG9yeUl0ZW1JRCAlIDIgPT0gMCkKKyAgICAgICAg
Kyt1bmlxdWVIaXN0b3J5SXRlbUlEOworfQorCiBzdGF0aWMgdm9pZCB1cGRhdGVCYWNrRm9yd2Fy
ZEl0ZW0odWludDY0X3QgaXRlbUlELCBIaXN0b3J5SXRlbSogaXRlbSkKIHsKICAgICBFbmNvZGVy
QWRhcHRlciBlbmNvZGVyOwpAQCAtODIsOSArOTYsNiBAQCBzdGF0aWMgdm9pZCB1cGRhdGVCYWNr
Rm9yd2FyZEl0ZW0odWludDY0CiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjphZGRJdGVt
RnJvbVVJUHJvY2Vzcyh1aW50NjRfdCBpdGVtSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SGlzdG9y
eUl0ZW0+IHBycEl0ZW0pCiB7CiAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gcHJwSXRl
bTsKLQotICAgIC8vIFVJUHJvY2VzcyBpdGVtSURzIHNob3VsZCBiZSBldmVuLgotICAgIEFTU0VS
VCghKGl0ZW1JRCAlIDIpKTsKICAgICAKICAgICAvLyBUaGlzIGl0ZW0vaXRlbUlEIHBhaXIgc2hv
dWxkIG5vdCBhbHJlYWR5IGV4aXN0IGluIG91ciBtYXBzLgogICAgIEFTU0VSVCghaGlzdG9yeUl0
ZW1Ub0lETWFwKCkuY29udGFpbnMoaXRlbS5nZXQoKSkpOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5oCShyZXZpc2lv
biA3NTUzMSkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlz
dFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOiAKICAgICBz
dGF0aWMgdm9pZCByZW1vdmVJdGVtKHVpbnQ2NF90IGl0ZW1JRCk7CiAKICAgICBzdGF0aWMgdm9p
ZCBhZGRJdGVtRnJvbVVJUHJvY2Vzcyh1aW50NjRfdCBpdGVtSUQsIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SGlzdG9yeUl0ZW0+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRIaWdoZXN0SXRlbUlERnJvbVVJ
UHJvY2Vzcyh1aW50NjRfdCBpdGVtSUQpOwogICAgIAogICAgIHZvaWQgY2xlYXIoKTsKIApJbmRl
eDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDc1NTMxKQor
KysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4OCw2ICsxODgsMTEgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNv
bnN0IAogCiAgICAgbV91c2VyQWdlbnQgPSBwYXJhbWV0ZXJzLnVzZXJBZ2VudDsKIAorICAgIFdl
YkJhY2tGb3J3YXJkTGlzdFByb3h5OjpzZXRIaWdoZXN0SXRlbUlERnJvbVVJUHJvY2VzcyhwYXJh
bWV0ZXJzLmhpZ2hlc3RVc2VkQmFja0ZvcndhcmRJdGVtSUQpOworICAgIAorICAgIGlmICghcGFy
YW1ldGVycy5zZXNzaW9uU3RhdGUuaXNFbXB0eSgpKQorICAgICAgICByZXN0b3JlU2Vzc2lvbihw
YXJhbWV0ZXJzLnNlc3Npb25TdGF0ZSwgcGFyYW1ldGVycy5yZWxvYWRDdXJyZW50U2Vzc2lvbkhp
c3RvcnlJdGVtKTsKKwogI2lmbmRlZiBOREVCVUcKICAgICB3ZWJQYWdlQ291bnRlci5pbmNyZW1l
bnQoKTsKICNlbmRpZgpAQCAtODY2LDcgKzg3MSw3IEBAIHZvaWQgV2ViUGFnZTo6ZXhlY3V0ZUVk
aXRDb21tYW5kKGNvbnN0IFMKICAgICBleGVjdXRlRWRpdGluZ0NvbW1hbmQoY29tbWFuZE5hbWUs
IFN0cmluZygpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpyZXN0b3JlU2Vzc2lvbihjb25zdCBTZXNz
aW9uU3RhdGUmIHNlc3Npb25TdGF0ZSkKK3ZvaWQgV2ViUGFnZTo6cmVzdG9yZVNlc3Npb24oY29u
c3QgU2Vzc2lvblN0YXRlJiBzZXNzaW9uU3RhdGUsIGJvb2wgcmVsb2FkQ3VycmVudFNlc3Npb25I
aXN0b3J5SXRlbSkKIHsKICAgICBjb25zdCBCYWNrRm9yd2FyZExpc3RJdGVtVmVjdG9yJiBsaXN0
ID0gc2Vzc2lvblN0YXRlLmxpc3QoKTsKICAgICBzaXplX3Qgc2l6ZSA9IGxpc3Quc2l6ZSgpOwpA
QCAtODg4LDcgKzg5Myw4IEBAIHZvaWQgV2ViUGFnZTo6cmVzdG9yZVNlc3Npb24oY29uc3QgU2Vz
c2kKICAgICB9ICAgIAogICAgIEFTU0VSVChjdXJyZW50SXRlbSk7CiAKLSAgICBtX3BhZ2UtPmdv
VG9JdGVtKGN1cnJlbnRJdGVtLmdldCgpLCBGcmFtZUxvYWRUeXBlSW5kZXhlZEJhY2tGb3J3YXJk
KTsKKyAgICBpZiAocmVsb2FkQ3VycmVudFNlc3Npb25IaXN0b3J5SXRlbSkKKyAgICAgICAgbV9w
YWdlLT5nb1RvSXRlbShjdXJyZW50SXRlbS5nZXQoKSwgRnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNr
Rm9yd2FyZCk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpJbmRleDogV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gNzU1MzEpCisrKyBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0MCw3ICszNDAsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgdG91Y2hFdmVudChjb25zdCBXZWJUb3VjaEV2ZW50Jik7CiAj
ZW5kaWYKIAotICAgIHZvaWQgcmVzdG9yZVNlc3Npb24oY29uc3QgU2Vzc2lvblN0YXRlJik7Cisg
ICAgdm9pZCByZXN0b3JlU2Vzc2lvbihjb25zdCBTZXNzaW9uU3RhdGUmLCBib29sIHJlbG9hZEN1
cnJlbnRTZXNzaW9uSGlzdG9yeUl0ZW0gPSB0cnVlKTsKIAogICAgIHZvaWQgZGlkUmVtb3ZlQmFj
a0ZvcndhcmRJdGVtKHVpbnQ2NF90KTsKIAo=
</data>
<flag name="review"
          id="69939"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="69940"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78632</attachid>
            <date>2011-01-11 17:52:23 -0800</date>
            <delta_ts>2011-01-12 11:49:10 -0800</delta_ts>
            <desc>Patch v2 - Remove all those argument changes (all builds should be okay) and do it in 2 messages</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17298</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTU3OCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMTEtMDEtMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84ODM3MzA3PiwgPHJkYXI6Ly9wcm9ibGVtLzg2MzcwMzg+LCBhbmQgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMjQ4CisgICAgICAgIEJhY2sv
Zm9yd2FyZCBsaXN0IHJlY292ZXJ5IGFmdGVyIGEgV2ViUHJvY2VzcyBjcmFzaCBpcyBjcmFzaHkg
aXRzZWxmLgorCisgICAgICAgIEFkZCBhbiBpc0VtcHR5KCkgYWNjZXNzb3Igc28gdGhlIFdlYlBy
b2Nlc3Mga25vd3MgaWYgaXQgaXMgYWN0dWFsbHkgcmVzdG9yaW5nIGEgc2Vzc2lvbjoKKyAgICAg
ICAgKiBTaGFyZWQvU2Vzc2lvblN0YXRlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0
YXRlOjppc0VtcHR5KToKKyAgICAgICAgKiBTaGFyZWQvU2Vzc2lvblN0YXRlLmg6CisKKyAgICAg
ICAgS2VlcCB0cmFjayBvZiB0aGUgaGlnaGVzdCB1c2VkIGl0ZW1JRCBzbyBhIHJlbGF1bmNoZWQg
V2ViUHJvY2VzcyBjYW4gbGF0ZXIgYmUgaW5mb3JtZWQ6CisgICAgICAgICogU2hhcmVkL1dlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExp
c3RJdGVtOjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0SXRlbTo6aGlnaGVkVXNlZEl0ZW1JRCk6CisgICAgICAgICogU2hhcmVkL1dl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0uaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
QmFja0ZvcndhcmRMaXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpnZW5lcmF0ZUhpc3Rv
cnlJdGVtSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6c2V0
SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9y
d2FyZExpc3RQcm94eTo6YWRkSXRlbUZyb21VSVByb2Nlc3MpOiBSZW1vdmUgYSBub3ctaW52YWxp
ZCBBU1NFUlQsIGFzIHRoZSBVSVByb2Nlc3MKKyAgICAgICAgICBub3cgdGVsbHMgdGhlIFdlYlBy
b2Nlc3MgdGhhdCBhIHByZXZpb3VzIFdlYlByb2Nlc3MgY3JlYXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuaDoKKworICAgICAgICBFbmNv
ZGUvZGVjb2RlIGRhdGEgcmVsZXZhbnQgdG8gcmVzdG9yaW5nIGEgc2Vzc2lvbiBvbiBXZWJQYWdl
IGNyZWF0aW9uOgorICAgICAgICAqIFNoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oOgorCisgICAgICAgIElm
IHRoZSBXZWJQcm9jZXNzIGhhcyBjcmFzaGVkIHNpbmNlIHRoZSBsYXN0IGxvYWQsIGNoYW5nZSBy
ZWxvYWQgYW5kIHRoZSB2YXJpb3VzIGJhY2svZm9yd2FyZCBBUElzIHRvIAorICAgICAgICB1cGRh
dGUgdGhlIGN1cnJlbnQgYmFjay9mb3J3YXJkIGl0ZW0gKGlmIG5lY2Vzc2FyeSkgdGhlbiByZWxh
dW5jaCB0aGUgcHJvY2VzczoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2Vzc1dpdGhJ
dGVtKTogQ2FsbHMgcmVhdHRhY2hUb1dlYlByb2Nlc3MoKSwgc2V0cyB0aGUgY29ycmVjdAorICAg
ICAgICAgIGN1cnJlbnQgYmFjay9mb3J3YXJkIGl0ZW0sIHRoZW4gc2VuZHMgYSAiZ28gdG8gY3Vy
cmVudCBiYWNrL2ZvcndhcmQgaXRlbSIgbWVzc2FnZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2Vzcyk6IFJlbmFtZWQgZnJvbSByZWxhdW5jaCgpCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UpOiBSZS1yZWdp
c3RlciBrbm93biBiYWNrL2ZvcndhcmQgbGlzdCBpdGVtIElEcyB3aXRoIHRoZSBuZXcKKyAgICAg
ICAgICBXZWJQcm9jZXNzUHJveHkuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9h
ZFVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bG9hZFVSTFJlcXVlc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlbG9hZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6Z29Gb3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
Ojpnb0JhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdvVG9CYWNrRm9yd2Fy
ZEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNyZWF0aW9uUGFyYW1ldGVy
cyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorCisgICAgICAgIFJlc3Rv
cmUgYSBzZXNzaW9uIG9uIHBhZ2UgY3JlYXRpb24gaWYgdGhlIHBhcmFtZXRlcnMgaW5jbHVkZSBp
dDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OldlYlBhZ2UpOiBDYWxsIHJlc3RvcmVTZXNzaW9uU3RhdGUgaWYgc2Vz
c2lvbiBzdGF0ZSBleGlzdHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlc3RvcmVTZXNz
aW9uKTogUmVzcG9uZCB0byB0aGUgInJlc3RvcmVTZXNzaW9uIiBtZXNzYWdlLCBjYWxsaW5nIHRo
cm91Z2ggdG8gcmVzdG9yZVNlc3Npb25TdGF0ZSB0aGVuCisgICAgICAgICAgZ29pbmcgdG8gdGhl
IGN1cnJlbnQgYmFjay9mb3J3YXJkIGl0ZW0uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJl
c3RvcmVTZXNzaW9uU3RhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lmg6CisKIDIwMTEtMDEtMTEgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9TZXNz
aW9uU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1Nlc3Npb25TdGF0ZS5j
cHAJKHJldmlzaW9uIDc1NTY4KQorKysgV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTMgQEAgU2Vzc2lvblN0YXRlOjpTZXNzaW9uU3Rh
dGUoY29uc3QgQmFja0ZvcgogICAgICwgbV9jdXJyZW50SW5kZXgoY3VycmVudEluZGV4KQogewog
fQorCitib29sIFNlc3Npb25TdGF0ZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgLy8gQmVjYXVz
ZSB0aGlzIG1pZ2h0IGNoYW5nZSBsYXRlciwgY2FsbGVycyBzaG91bGQgdXNlIHRoaXMgaW5zdGVh
ZCBvZgorICAgIC8vIGNhbGxpbmcgbGlzdCgpLmlzRW1wdHkoKSBkaXJlY3RseSB0aGVtc2VsdmVz
LgorICAgIHJldHVybiBtX2xpc3QuaXNFbXB0eSgpOworfQogICAgIAogdm9pZCBTZXNzaW9uU3Rh
dGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiB7Cklu
ZGV4OiBXZWJLaXQyL1NoYXJlZC9TZXNzaW9uU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1NoYXJlZC9TZXNzaW9uU3RhdGUuaAkocmV2aXNpb24gNzU1NjgpCisrKyBXZWJLaXQyL1NoYXJl
ZC9TZXNzaW9uU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBwdWJsaWM6
CiAgICAgY29uc3QgQmFja0ZvcndhcmRMaXN0SXRlbVZlY3RvciYgbGlzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdDsgfQogICAgIHVpbnQzMl90IGN1cnJlbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudEluZGV4OyB9CiAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKKwogICAgIHZv
aWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0OwogICAgIHN0YXRpYyBi
b29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBTZXNzaW9uU3RhdGUmKTsKIApJ
bmRleDogV2ViS2l0Mi9TaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAJKHJldmlzaW9u
IDc1NTY4KQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAor
c3RhdGljIHVpbnQ2NF90IGhpZ2hlc3RVc2VkSXRlbUlEID0gMDsKKwogV2ViQmFja0ZvcndhcmRM
aXN0SXRlbTo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbShjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJM
LCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgdWludDhfdCog
YmFja0ZvcndhcmREYXRhLCBzaXplX3QgYmFja0ZvcndhcmREYXRhU2l6ZSwgdWludDY0X3QgaXRl
bUlEKQogICAgIDogbV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKICAgICAsIG1fdXJsKHVybCkK
ICAgICAsIG1fdGl0bGUodGl0bGUpCiAgICAgLCBtX2l0ZW1JRChpdGVtSUQpCiB7CisgICAgaWYg
KG1faXRlbUlEID4gaGlnaGVzdFVzZWRJdGVtSUQpCisgICAgICAgIGhpZ2hlc3RVc2VkSXRlbUlE
ID0gbV9pdGVtSUQ7CisKICAgICBzZXRCYWNrRm9yd2FyZERhdGEoYmFja0ZvcndhcmREYXRhLCBi
YWNrRm9yd2FyZERhdGFTaXplKTsKIH0KIApAQCAtNDMsNiArNDgsMTEgQEAgV2ViQmFja0Zvcndh
cmRMaXN0SXRlbTo6fldlYkJhY2tGb3J3YXJkTAogewogfQogCit1aW50NjRfdCBXZWJCYWNrRm9y
d2FyZExpc3RJdGVtOjpoaWdoZWRVc2VkSXRlbUlEKCkKK3sKKyAgICByZXR1cm4gaGlnaGVzdFVz
ZWRJdGVtSUQ7Cit9CisKIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6c2V0QmFja0Zvcndh
cmREYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQogewogICAgIG1fYmFja0Zv
cndhcmREYXRhLnJlc2VydmVDYXBhY2l0eShzaXplKTsKSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJC
YWNrRm9yd2FyZExpc3RJdGVtLmgJKHJldmlzaW9uIDc1NTY4KQorKysgV2ViS2l0Mi9TaGFyZWQv
V2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25z
dDsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPiBkZWNvZGUo
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyJik7CiAKKyAgICBzdGF0aWMgdWludDY0X3QgaGlnaGVk
VXNlZEl0ZW1JRCgpOworCiBwcml2YXRlOgogICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0oY29u
c3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
dGl0bGUsIGNvbnN0IHVpbnQ4X3QqIGJhY2tGb3J3YXJkRGF0YSwgc2l6ZV90IGJhY2tGb3J3YXJk
RGF0YVNpemUsIHVpbnQ2NF90IGl0ZW1JRCk7CiAKSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiA3NTU2OCkKKysrIFdlYktpdDIv
U2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw2ICs0Myw4IEBAIHZvaWQgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKEMKICAg
ICBlbmNvZGVyLT5lbmNvZGUoZHJhd3NCYWNrZ3JvdW5kKTsKICAgICBlbmNvZGVyLT5lbmNvZGUo
ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQpOwogICAgIGVuY29kZXItPmVuY29kZSh1c2VyQWdl
bnQpOworICAgIGVuY29kZXItPmVuY29kZShzZXNzaW9uU3RhdGUpOworICAgIGVuY29kZXItPmVu
Y29kZShoaWdoZXN0VXNlZEJhY2tGb3J3YXJkSXRlbUlEKTsKIAogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICBlbmNvZGVyLT5lbmNvZGUoaXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQpOwpAQCAtNzcs
NiArNzksMTEgQEAgYm9vbCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoQwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocGFyYW1ldGVycy51
c2VyQWdlbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUocGFyYW1ldGVycy5zZXNzaW9uU3RhdGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUocGFyYW1ldGVycy5oaWdoZXN0VXNlZEJhY2tGb3J3YXJkSXRl
bUlEKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMuaXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUNy
ZWF0aW9uUGFyYW1ldGVycy5oCShyZXZpc2lvbiA3NTU2OCkKKysrIFdlYktpdDIvU2hhcmVkL1dl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2RlZmluZSBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzX2gKIAogI2luY2x1ZGUgIkRyYXdp
bmdBcmVhSW5mby5oIgorI2luY2x1ZGUgIlNlc3Npb25TdGF0ZS5oIgogI2luY2x1ZGUgIldlYlBh
Z2VHcm91cERhdGEuaCIKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc1N0b3JlLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9JbnRTaXplLmg+CkBAIC01OSw2ICs2MCw5IEBAIHN0cnVjdCBXZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzIHsKIAogICAgIFN0cmluZyB1c2VyQWdlbnQ7CiAKKyAgICBTZXNzaW9u
U3RhdGUgc2Vzc2lvblN0YXRlOworICAgIHVpbnQ2NF90IGhpZ2hlc3RVc2VkQmFja0ZvcndhcmRJ
dGVtSUQ7CisKICNpZiBQTEFURk9STShNQUMpCiAgICAgYm9vbCBpc1NtYXJ0SW5zZXJ0RGVsZXRl
RW5hYmxlZDsKICNlbmRpZgpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZp
c2lvbiA3NTU2OCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKICNpbmNs
dWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgor
I2luY2x1ZGUgIlNlc3Npb25TdGF0ZS5oIgogI2luY2x1ZGUgIlN0cmluZ1BhaXJWZWN0b3IuaCIK
ICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIK
QEAgLTIwMyw3ICsyMDQsMTYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmluaXRpYWxpemVDb250ZXh0
TWVudQogICAgIG1fY29udGV4dE1lbnVDbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwogfQogCi12
b2lkIFdlYlBhZ2VQcm94eTo6cmVsYXVuY2goKQordm9pZCBXZWJQYWdlUHJveHk6OnJlYXR0YWNo
VG9XZWJQcm9jZXNzV2l0aEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKK3sKKyAg
ICBpZiAoaXRlbSAmJiBpdGVtICE9IG1fYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRlbSgpKQor
ICAgICAgICBtX2JhY2tGb3J3YXJkTGlzdC0+Z29Ub0l0ZW0oaXRlbSk7CisgICAgCisgICAgcmVh
dHRhY2hUb1dlYlByb2Nlc3MoKTsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkdvVG9CYWNrRm9yd2FyZEl0ZW0oaXRlbS0+aXRlbUlEKCkpLCBtX3BhZ2VJRCk7Cit9CisK
K3ZvaWQgV2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2VzcygpCiB7CiAgICAgbV9pc1Zh
bGlkID0gdHJ1ZTsKIApAQCAtMjE5LDYgKzIyOSwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW5p
dGlhbGl6ZVdlYlBhZ2UoKQogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogCisgICAgQmFja0Zv
cndhcmRMaXN0SXRlbVZlY3RvciBpdGVtcyA9IG1fYmFja0ZvcndhcmRMaXN0LT5lbnRyaWVzKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkKKyAgICAgICAg
cHJvY2VzcygpLT5yZWdpc3Rlck5ld1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0oaXRlbXNbaV0uZ2V0
KCkpOworCiAgICAgbV9kcmF3aW5nQXJlYSA9IG1fcGFnZUNsaWVudC0+Y3JlYXRlRHJhd2luZ0Fy
ZWFQcm94eSgpOwogICAgIEFTU0VSVChtX2RyYXdpbmdBcmVhKTsKIApAQCAtMjk2LDcgKzMxMCw3
IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTYW5kYm94RXh0ZW5zaW9uSGEKIHZvaWQgV2ViUGFn
ZVByb3h5Ojpsb2FkVVJMKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIGlmICghaXNWYWxpZCgp
KQotICAgICAgICByZWxhdW5jaCgpOworICAgICAgICByZWF0dGFjaFRvV2ViUHJvY2VzcygpOwog
CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAg
ICAgaW5pdGlhbGl6ZVNhbmRib3hFeHRlbnNpb25IYW5kbGUoS1VSTChLVVJMKCksIHVybCksIHNh
bmRib3hFeHRlbnNpb25IYW5kbGUpOwpAQCAtMzA2LDcgKzMyMCw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5Ojpsb2FkVVJMKGNvbnN0IFN0cmluZyYKIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2FkVVJMUmVx
dWVzdChXZWJVUkxSZXF1ZXN0KiB1cmxSZXF1ZXN0KQogewogICAgIGlmICghaXNWYWxpZCgpKQot
ICAgICAgICByZWxhdW5jaCgpOworICAgICAgICByZWF0dGFjaFRvV2ViUHJvY2VzcygpOwogCiAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAg
aW5pdGlhbGl6ZVNhbmRib3hFeHRlbnNpb25IYW5kbGUodXJsUmVxdWVzdC0+cmVzb3VyY2VSZXF1
ZXN0KCkudXJsKCksIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwpAQCAtMzQ4LDE1ICszNjIsMjAg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BMb2FkaW5nKCkKIAogdm9pZCBXZWJQYWdlUHJveHk6
OnJlbG9hZChib29sIHJlbG9hZEZyb21PcmlnaW4pCiB7Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCisg
ICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgcmVhdHRhY2hUb1dlYlByb2Nlc3NXaXRoSXRl
bShtX2JhY2tGb3J3YXJkTGlzdC0+Y3VycmVudEl0ZW0oKSk7CiAgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlbG9hZChyZWxv
YWRGcm9tT3JpZ2luKSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z29Gb3J3
YXJkKCkKIHsKLSAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICBpZiAoIWlzVmFsaWQoKSkgeworICAg
ICAgICByZWF0dGFjaFRvV2ViUHJvY2Vzc1dpdGhJdGVtKG1fYmFja0ZvcndhcmRMaXN0LT5mb3J3
YXJkSXRlbSgpKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGlmICghY2FuR29Gb3J3
YXJkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM3MSw4ICszOTAsMTAgQEAgYm9vbCBXZWJQYWdl
UHJveHk6OmNhbkdvRm9yd2FyZCgpIGNvbnN0CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpnb0JhY2so
KQogewotICAgIGlmICghaXNWYWxpZCgpKQorICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAg
IHJlYXR0YWNoVG9XZWJQcm9jZXNzV2l0aEl0ZW0obV9iYWNrRm9yd2FyZExpc3QtPmJhY2tJdGVt
KCkpOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKCFjYW5Hb0JhY2soKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzg3LDggKzQwOCwxMCBAQCBib29sIFdlYlBhZ2VQcm94eTo6Y2Fu
R29CYWNrKCkgY29uc3QKIAogdm9pZCBXZWJQYWdlUHJveHk6OmdvVG9CYWNrRm9yd2FyZEl0ZW0o
V2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKIHsKLSAgICBpZiAoIWlzVmFsaWQoKSkKKyAg
ICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAgICByZWF0dGFjaFRvV2ViUHJvY2Vzc1dpdGhJdGVt
KGl0ZW0pOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgcHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpHb1RvQmFja0ZvcndhcmRJdGVtKGl0ZW0tPml0ZW1JRCgpKSwgbV9w
YWdlSUQpOwogfQpAQCAtMjE2MCw2ICsyMTgzLDggQEAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
cyBXZWJQYWdlUHJveHk6OgogICAgIHBhcmFtZXRlcnMuZHJhd3NCYWNrZ3JvdW5kID0gbV9kcmF3
c0JhY2tncm91bmQ7CiAgICAgcGFyYW1ldGVycy5kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCA9
IG1fZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQ7CiAgICAgcGFyYW1ldGVycy51c2VyQWdlbnQg
PSB1c2VyQWdlbnQoKTsKKyAgICBwYXJhbWV0ZXJzLnNlc3Npb25TdGF0ZSA9IFNlc3Npb25TdGF0
ZShtX2JhY2tGb3J3YXJkTGlzdC0+ZW50cmllcygpLCBtX2JhY2tGb3J3YXJkTGlzdC0+Y3VycmVu
dEluZGV4KCkpOworICAgIHBhcmFtZXRlcnMuaGlnaGVzdFVzZWRCYWNrRm9yd2FyZEl0ZW1JRCA9
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmhpZ2hlZFVzZWRJdGVtSUQoKTsKIAogI2lmIFBMQVRG
T1JNKE1BQykKICAgICBwYXJhbWV0ZXJzLmlzU21hcnRJbnNlcnREZWxldGVFbmFibGVkID0gbV9p
c1NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CShyZXZpc2lvbiA3NTU2OCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgcHVibGljOgogICAgIHZvaWQgaW5pdGlh
bGl6ZVBvbGljeUNsaWVudChjb25zdCBXS1BhZ2VQb2xpY3lDbGllbnQqKTsKICAgICB2b2lkIGlu
aXRpYWxpemVSZXNvdXJjZUxvYWRDbGllbnQoY29uc3QgV0tQYWdlUmVzb3VyY2VMb2FkQ2xpZW50
Kik7CiAgICAgdm9pZCBpbml0aWFsaXplVUlDbGllbnQoY29uc3QgV0tQYWdlVUlDbGllbnQqKTsK
LSAgICB2b2lkIHJlbGF1bmNoKCk7CisgICAgdm9pZCByZWF0dGFjaFRvV2ViUHJvY2VzcygpOwog
CiAgICAgdm9pZCBpbml0aWFsaXplV2ViUGFnZSgpOwogCkBAIC00MDMsNiArNDAzLDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YSh1aW50NjRfdCBmcmFtZUlELCBj
b25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1aW50NjRfdCBjdXJyZW50UXVvdGEsIHVpbnQ2
NF90IGN1cnJlbnRVc2FnZSwgdWludDY0X3QgZXhwZWN0ZWRVc2FnZSwgdWludDY0X3QmIG5ld1F1
b3RhKTsKICAgICB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSh1aW50
NjRfdCBnZW9sb2NhdGlvbklELCB1aW50NjRfdCBmcmFtZUlELCBTdHJpbmcgb3JpZ2luSWRlbnRp
Zmllcik7CiAKKyAgICB2b2lkIHJlYXR0YWNoVG9XZWJQcm9jZXNzV2l0aEl0ZW0oV2ViQmFja0Zv
cndhcmRMaXN0SXRlbSopOworCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAg
dm9pZCBwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAjZW5k
aWYKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNr
Rm9yd2FyZExpc3RQcm94eS5jcHAJKHJldmlzaW9uIDc1NTY4KQorKysgV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MCwxNiArNjAsMjggQEAgc3RhdGljIEhpc3RvcnlJdGVtVG9JRE1hcCYgaGlzdG9yeUl0ZW1U
bwogICAgIHJldHVybiBtYXA7CiB9IAogCitzdGF0aWMgdWludDY0X3QgdW5pcXVlSGlzdG9yeUl0
ZW1JRCA9IDE7CisKIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUhpc3RvcnlJdGVtSUQoKQogewog
ICAgIC8vIFRoZXNlIElEcyBleGlzdCBpbiB0aGUgV2ViUHJvY2VzcyBmb3IgaXRlbXMgY3JlYXRl
ZCBieSB0aGUgV2ViUHJvY2Vzcy4KICAgICAvLyBUaGUgSURzIGdlbmVyYXRlZCBoZXJlIG5lZWQg
dG8gbmV2ZXIgY29sbGlkZSB3aXRoIHRoZSBJRHMgY3JlYXRlZCBpbiBXZWJCYWNrRm9yd2FyZExp
c3QgaW4gdGhlIFVJUHJvY2Vzcy4KICAgICAvLyBXZSBhY2NvbXBsaXNoIHRoaXMgYnkgc3RhcnRp
bmcgZnJvbSAzLCBhbmQgb25seSBldmVyIHVzaW5nIG9kZCBpZHMuCi0gICAgc3RhdGljIHVpbnQ2
NF90IHVuaXF1ZUhpc3RvcnlJdGVtSUQgPSAxOwogICAgIHVuaXF1ZUhpc3RvcnlJdGVtSUQgKz0g
MjsKICAgICByZXR1cm4gdW5pcXVlSGlzdG9yeUl0ZW1JRDsKIH0KIAordm9pZCBXZWJCYWNrRm9y
d2FyZExpc3RQcm94eTo6c2V0SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nlc3ModWludDY0X3QgaXRl
bUlEKQoreworICAgIGlmIChpdGVtSUQgPD0gdW5pcXVlSGlzdG9yeUl0ZW1JRCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgICBpZiAoaXRlbUlEICUgMikKKyAgICAgICAgIHVuaXF1ZUhpc3Rv
cnlJdGVtSUQgPSBpdGVtSUQ7CisgICAgIGVsc2UKKyAgICAgICAgIHVuaXF1ZUhpc3RvcnlJdGVt
SUQgPSBpdGVtSUQgKyAxOworfQorCiBzdGF0aWMgdm9pZCB1cGRhdGVCYWNrRm9yd2FyZEl0ZW0o
dWludDY0X3QgaXRlbUlELCBIaXN0b3J5SXRlbSogaXRlbSkKIHsKICAgICBFbmNvZGVyQWRhcHRl
ciBlbmNvZGVyOwpAQCAtODIsOSArOTQsNiBAQCBzdGF0aWMgdm9pZCB1cGRhdGVCYWNrRm9yd2Fy
ZEl0ZW0odWludDY0CiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjphZGRJdGVtRnJvbVVJ
UHJvY2Vzcyh1aW50NjRfdCBpdGVtSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+
IHBycEl0ZW0pCiB7CiAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gcHJwSXRlbTsKLQot
ICAgIC8vIFVJUHJvY2VzcyBpdGVtSURzIHNob3VsZCBiZSBldmVuLgotICAgIEFTU0VSVCghKGl0
ZW1JRCAlIDIpKTsKICAgICAKICAgICAvLyBUaGlzIGl0ZW0vaXRlbUlEIHBhaXIgc2hvdWxkIG5v
dCBhbHJlYWR5IGV4aXN0IGluIG91ciBtYXBzLgogICAgIEFTU0VSVCghaGlzdG9yeUl0ZW1Ub0lE
TWFwKCkuY29udGFpbnMoaXRlbS5nZXQoKSkpOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5oCShyZXZpc2lvbiA3NTU2
OCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOiAKICAgICBzdGF0aWMg
dm9pZCByZW1vdmVJdGVtKHVpbnQ2NF90IGl0ZW1JRCk7CiAKICAgICBzdGF0aWMgdm9pZCBhZGRJ
dGVtRnJvbVVJUHJvY2Vzcyh1aW50NjRfdCBpdGVtSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SGlz
dG9yeUl0ZW0+KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRIaWdoZXN0SXRlbUlERnJvbVVJUHJvY2Vz
cyh1aW50NjRfdCBpdGVtSUQpOwogICAgIAogICAgIHZvaWQgY2xlYXIoKTsKIApJbmRleDogV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDc1NTY4KQorKysgV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
OCw2ICsxODgsMTEgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IAog
CiAgICAgbV91c2VyQWdlbnQgPSBwYXJhbWV0ZXJzLnVzZXJBZ2VudDsKIAorICAgIFdlYkJhY2tG
b3J3YXJkTGlzdFByb3h5OjpzZXRIaWdoZXN0SXRlbUlERnJvbVVJUHJvY2VzcyhwYXJhbWV0ZXJz
LmhpZ2hlc3RVc2VkQmFja0ZvcndhcmRJdGVtSUQpOworICAgIAorICAgIGlmICghcGFyYW1ldGVy
cy5zZXNzaW9uU3RhdGUuaXNFbXB0eSgpKQorICAgICAgICByZXN0b3JlU2Vzc2lvblN0YXRlKHBh
cmFtZXRlcnMuc2Vzc2lvblN0YXRlKTsKKwogI2lmbmRlZiBOREVCVUcKICAgICB3ZWJQYWdlQ291
bnRlci5pbmNyZW1lbnQoKTsKICNlbmRpZgpAQCAtODY4LDkgKzg3MywxOCBAQCB2b2lkIFdlYlBh
Z2U6OmV4ZWN1dGVFZGl0Q29tbWFuZChjb25zdCBTCiAKIHZvaWQgV2ViUGFnZTo6cmVzdG9yZVNl
c3Npb24oY29uc3QgU2Vzc2lvblN0YXRlJiBzZXNzaW9uU3RhdGUpCiB7CisgICAgaWYgKHVpbnQ2
NF90IGN1cnJlbnRJdGVtSUQgPSByZXN0b3JlU2Vzc2lvblN0YXRlKHNlc3Npb25TdGF0ZSkpCisg
ICAgICAgIGdvVG9CYWNrRm9yd2FyZEl0ZW0oY3VycmVudEl0ZW1JRCk7Cit9CisKK3VpbnQ2NF90
IFdlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uU3RhdGUoY29uc3QgU2Vzc2lvblN0YXRlJiBzZXNzaW9u
U3RhdGUpCit7CiAgICAgY29uc3QgQmFja0ZvcndhcmRMaXN0SXRlbVZlY3RvciYgbGlzdCA9IHNl
c3Npb25TdGF0ZS5saXN0KCk7CiAgICAgc2l6ZV90IHNpemUgPSBsaXN0LnNpemUoKTsKKyAgICB1
aW50NjRfdCBjdXJyZW50SXRlbUlEID0gMDsKKyNpZm5kZWYgTkRFQlVHCiAgICAgUmVmUHRyPEhp
c3RvcnlJdGVtPiBjdXJyZW50SXRlbTsKKyNlbmRpZgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHdlYkl0ZW0g
PSBsaXN0W2ldLmdldCgpOwogICAgICAgICBEZWNvZGVyQWRhcHRlciBkZWNvZGVyKHdlYkl0ZW0t
PmJhY2tGb3J3YXJkRGF0YSgpLmRhdGEoKSwgd2ViSXRlbS0+YmFja0ZvcndhcmREYXRhKCkuc2l6
ZSgpKTsKQEAgLTg3OCwxNyArODkyLDIwIEBAIHZvaWQgV2ViUGFnZTo6cmVzdG9yZVNlc3Npb24o
Y29uc3QgU2Vzc2kKICAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gSGlzdG9yeUl0
ZW06OmRlY29kZUJhY2tGb3J3YXJkVHJlZSh3ZWJJdGVtLT51cmwoKSwgd2ViSXRlbS0+dGl0bGUo
KSwgd2ViSXRlbS0+b3JpZ2luYWxVUkwoKSwgZGVjb2Rlcik7CiAgICAgICAgIGlmICghaXRlbSkg
ewogICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVjb2RlIGEgSGlzdG9yeUl0ZW0g
ZnJvbSBzZXNzaW9uIHN0YXRlIGRhdGEuIik7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGkgPT0gc2Vz
c2lvblN0YXRlLmN1cnJlbnRJbmRleCgpKQorICAgICAgICBpZiAoaSA9PSBzZXNzaW9uU3RhdGUu
Y3VycmVudEluZGV4KCkpIHsKKyAgICAgICAgICAgIGN1cnJlbnRJdGVtSUQgPSB3ZWJJdGVtLT5p
dGVtSUQoKTsKKyNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBjdXJyZW50SXRlbSA9IGl0ZW07
CisjZW5kaWYKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgV2ViQmFja0ZvcndhcmRMaXN0
UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9jZXNzKGxpc3RbaV0tPml0ZW1JRCgpLCBpdGVtLnJlbGVh
c2UoKSk7CiAgICAgfSAgICAKICAgICBBU1NFUlQoY3VycmVudEl0ZW0pOwotCi0gICAgbV9wYWdl
LT5nb1RvSXRlbShjdXJyZW50SXRlbS5nZXQoKSwgRnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNrRm9y
d2FyZCk7CisgICAgcmV0dXJuIGN1cnJlbnRJdGVtSUQ7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24g
NzU1NjgpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0MSw2ICszNDEsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICB2b2lkIHJl
c3RvcmVTZXNzaW9uKGNvbnN0IFNlc3Npb25TdGF0ZSYpOworICAgIHVpbnQ2NF90IHJlc3RvcmVT
ZXNzaW9uU3RhdGUoY29uc3QgU2Vzc2lvblN0YXRlJik7CiAKICAgICB2b2lkIGRpZFJlbW92ZUJh
Y2tGb3J3YXJkSXRlbSh1aW50NjRfdCk7CiAK
</data>
<flag name="commit-queue"
          id="69983"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78715</attachid>
            <date>2011-01-12 11:49:10 -0800</date>
            <delta_ts>2011-01-12 11:54:42 -0800</delta_ts>
            <desc>Patch v3 - Feedback from Sam here and in person</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>18734</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTYyNykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMTEtMDEtMTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84ODM3MzA3PiwgPHJkYXI6Ly9wcm9ibGVtLzg2MzcwMzg+LCBhbmQgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMjQ4CisgICAgICAgIEJhY2sv
Zm9yd2FyZCBsaXN0IHJlY292ZXJ5IGFmdGVyIGEgV2ViUHJvY2VzcyBjcmFzaCBpcyBjcmFzaHkg
aXRzZWxmLgorCisgICAgICAgIEFkZCBhbiBpc0VtcHR5KCkgYWNjZXNzb3Igc28gdGhlIFdlYlBy
b2Nlc3Mga25vd3MgaWYgaXQgaXMgYWN0dWFsbHkgcmVzdG9yaW5nIGEgc2Vzc2lvbjoKKyAgICAg
ICAgKiBTaGFyZWQvU2Vzc2lvblN0YXRlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2Vzc2lvblN0
YXRlOjppc0VtcHR5KToKKyAgICAgICAgKiBTaGFyZWQvU2Vzc2lvblN0YXRlLmg6CisKKyAgICAg
ICAgS2VlcCB0cmFjayBvZiB0aGUgaGlnaGVzdCB1c2VkIGl0ZW1JRCBzbyBhIHJlbGF1bmNoZWQg
V2ViUHJvY2VzcyBjYW4gbGF0ZXIgYmUgaW5mb3JtZWQ6CisgICAgICAgICogU2hhcmVkL1dlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExp
c3RJdGVtOjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFj
a0ZvcndhcmRMaXN0SXRlbTo6aGlnaGVkVXNlZEl0ZW1JRCk6CisgICAgICAgICogU2hhcmVkL1dl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0uaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
QmFja0ZvcndhcmRMaXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpnZW5lcmF0ZUhpc3Rv
cnlJdGVtSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6c2V0
SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9y
d2FyZExpc3RQcm94eTo6YWRkSXRlbUZyb21VSVByb2Nlc3MpOiBSZW1vdmUgYSBub3ctaW52YWxp
ZCBBU1NFUlQsIGFzIHRoZSBVSVByb2Nlc3MKKyAgICAgICAgICBub3cgdGVsbHMgdGhlIFdlYlBy
b2Nlc3MgdGhhdCBhIHByZXZpb3VzIFdlYlByb2Nlc3MgY3JlYXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuaDoKKworICAgICAgICBFbmNv
ZGUvZGVjb2RlIGRhdGEgcmVsZXZhbnQgdG8gcmVzdG9yaW5nIGEgc2Vzc2lvbiBvbiBXZWJQYWdl
IGNyZWF0aW9uOgorICAgICAgICAqIFNoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oOgorCisgICAgICAgIElm
IHRoZSBXZWJQcm9jZXNzIGhhcyBjcmFzaGVkIHNpbmNlIHRoZSBsYXN0IGxvYWQsIGNoYW5nZSBy
ZWxvYWQgYW5kIHRoZSB2YXJpb3VzIGJhY2svZm9yd2FyZCBBUElzIHRvIAorICAgICAgICB1cGRh
dGUgdGhlIGN1cnJlbnQgYmFjay9mb3J3YXJkIGl0ZW0gKGlmIG5lY2Vzc2FyeSkgdGhlbiByZWxh
dW5jaCB0aGUgcHJvY2VzczoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2Vzc1dpdGhJ
dGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2Vz
cyk6IFJlbmFtZWQgZnJvbSAicmVsYXVuY2goKSIgYW5kIG1hZGUgcHJpdmF0ZS4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5Ojppbml0aWFsaXplV2ViUGFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6bG9hZFVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6bG9hZFVSTFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlbG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z29Gb3J3YXJkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5Ojpnb0JhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmdvVG9CYWNrRm9yd2FyZEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OmNyZWF0aW9uUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oOgorCisgICAgICAgIFJlbmFtZSAiUmVzdG9yZVNlc3Npb24iIHRvICJSZXN0b3JlU2Vzc2lv
bkFuZE5hdmlnYXRlVG9DdXJyZW50SXRlbSIKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvY2YvV2ViUGFnZVByb3h5
Q0YuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lv
blN0YXRlRGF0YSk6CisKKyAgICAgICAgUmVzdG9yZSBhIHNlc3Npb24gb24gcGFnZSBjcmVhdGlv
biBpZiB0aGUgcGFyYW1ldGVycyBpbmNsdWRlIGl0OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6V2ViUGFnZSk6IENh
bGwgcmVzdG9yZVNlc3Npb24gaWYgc2Vzc2lvbiBzdGF0ZSBleGlzdHMuCisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uQW5kTmF2aWdhdGVUb0N1cnJlbnRJdGVtKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVzdG9yZVNlc3Npb24pOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisKIDIwMTEtMDEtMTIgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJ
bmRleDogV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1NoYXJlZC9TZXNzaW9uU3RhdGUuY3BwCShyZXZpc2lvbiA3NTU2OCkKKysrIFdlYktpdDIv
U2hhcmVkL1Nlc3Npb25TdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDEzIEBA
IFNlc3Npb25TdGF0ZTo6U2Vzc2lvblN0YXRlKGNvbnN0IEJhY2tGb3IKICAgICAsIG1fY3VycmVu
dEluZGV4KGN1cnJlbnRJbmRleCkKIHsKIH0KKworYm9vbCBTZXNzaW9uU3RhdGU6OmlzRW1wdHko
KSBjb25zdAoreworICAgIC8vIEJlY2F1c2UgdGhpcyBtaWdodCBjaGFuZ2UgbGF0ZXIsIGNhbGxl
cnMgc2hvdWxkIHVzZSB0aGlzIGluc3RlYWQgb2YKKyAgICAvLyBjYWxsaW5nIGxpc3QoKS5pc0Vt
cHR5KCkgZGlyZWN0bHkgdGhlbXNlbHZlcy4KKyAgICByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsK
K30KICAgICAKIHZvaWQgU2Vzc2lvblN0YXRlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyKSBjb25zdAogewpJbmRleDogV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblN0YXRlLmgJKHJldmlzaW9u
IDc1NTY4KQorKysgV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblN0YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDYgKzQzLDggQEAgcHVibGljOgogICAgIGNvbnN0IEJhY2tGb3J3YXJkTGlzdEl0ZW1W
ZWN0b3ImIGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xpc3Q7IH0KICAgICB1aW50MzJfdCBjdXJy
ZW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRJbmRleDsgfQogCisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3Q7CisKICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXIqKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiwgU2Vzc2lvblN0YXRlJik7CiAKSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiA3NTU2OCkKKysrIFdlYktpdDIvU2hhcmVkL1dlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTcgQEAK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyB1aW50NjRfdCBoaWdoZXN0VXNlZEl0ZW1J
RCA9IDA7CisKIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0o
Y29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUsIGNvbnN0IHVpbnQ4X3QqIGJhY2tGb3J3YXJkRGF0YSwgc2l6ZV90IGJhY2tGb3J3
YXJkRGF0YVNpemUsIHVpbnQ2NF90IGl0ZW1JRCkKICAgICA6IG1fb3JpZ2luYWxVUkwob3JpZ2lu
YWxVUkwpCiAgICAgLCBtX3VybCh1cmwpCiAgICAgLCBtX3RpdGxlKHRpdGxlKQogICAgICwgbV9p
dGVtSUQoaXRlbUlEKQogeworICAgIGlmIChtX2l0ZW1JRCA+IGhpZ2hlc3RVc2VkSXRlbUlEKQor
ICAgICAgICBoaWdoZXN0VXNlZEl0ZW1JRCA9IG1faXRlbUlEOworCiAgICAgc2V0QmFja0Zvcndh
cmREYXRhKGJhY2tGb3J3YXJkRGF0YSwgYmFja0ZvcndhcmREYXRhU2l6ZSk7CiB9CiAKQEAgLTQz
LDYgKzQ4LDExIEBAIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06On5XZWJCYWNrRm9yd2FyZEwKIHsK
IH0KIAordWludDY0X3QgV2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6aGlnaGVkVXNlZEl0ZW1JRCgp
Cit7CisgICAgcmV0dXJuIGhpZ2hlc3RVc2VkSXRlbUlEOworfQorCiB2b2lkIFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW06OnNldEJhY2tGb3J3YXJkRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3Qgc2l6ZSkKIHsKICAgICBtX2JhY2tGb3J3YXJkRGF0YS5yZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7
CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJCYWNrRm9yd2FyZExpc3RJdGVtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oCShyZXZpc2lvbiA3
NTU2OCkKKysrIFdlYktpdDIvU2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNiArNjUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmNvZGUoQ29yZUlQ
Qzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQmFj
a0ZvcndhcmRMaXN0SXRlbT4gZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYpOwogCisg
ICAgc3RhdGljIHVpbnQ2NF90IGhpZ2hlZFVzZWRJdGVtSUQoKTsKKwogcHJpdmF0ZToKICAgICBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtKGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCB1aW50OF90KiBiYWNrRm9yd2Fy
ZERhdGEsIHNpemVfdCBiYWNrRm9yd2FyZERhdGFTaXplLCB1aW50NjRfdCBpdGVtSUQpOwogCklu
ZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2
aXNpb24gNzU1NjgpCisrKyBXZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCB2b2lkIFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZShDCiAgICAgZW5jb2Rlci0+ZW5jb2RlKGRyYXdzQmFja2dyb3Vu
ZCk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKGRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKTsKICAg
ICBlbmNvZGVyLT5lbmNvZGUodXNlckFnZW50KTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoc2Vzc2lv
blN0YXRlKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGlnaGVzdFVzZWRCYWNrRm9yd2FyZEl0ZW1J
RCk7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgZW5jb2Rlci0+ZW5jb2RlKGlzU21hcnRJbnNl
cnREZWxldGVFbmFibGVkKTsKQEAgLTc3LDYgKzc5LDExIEBAIGJvb2wgV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKEMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMudXNlckFnZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMuc2Vzc2lvblN0YXRlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMu
aGlnaGVzdFVzZWRCYWNrRm9yd2FyZEl0ZW1JRCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
I2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLmlz
U21hcnRJbnNlcnREZWxldGVFbmFibGVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDog
V2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaAkocmV2aXNpb24gNzU1
NjgpCisrKyBXZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVyc19oCiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKKyNpbmNsdWRlICJTZXNzaW9u
U3RhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXBEYXRhLmgiCiAjaW5jbHVkZSAiV2ViUHJl
ZmVyZW5jZXNTdG9yZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgpAQCAtNTksNiAr
NjAsOSBAQCBzdHJ1Y3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyB7CiAKICAgICBTdHJpbmcg
dXNlckFnZW50OwogCisgICAgU2Vzc2lvblN0YXRlIHNlc3Npb25TdGF0ZTsKKyAgICB1aW50NjRf
dCBoaWdoZXN0VXNlZEJhY2tGb3J3YXJkSXRlbUlEOworCiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IGJvb2wgaXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ7CiAjZW5kaWYKSW5kZXg6IFdlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gNzU1NjgpCisrKyBXZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiTWVzc2FnZUlELmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgog
I2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJTZXNzaW9uU3RhdGUuaCIKICNpbmNs
dWRlICJTdHJpbmdQYWlyVmVjdG9yLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKICNpbmNs
dWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCkBAIC0yMDMsNyArMjA0LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmluaXRpYWxpemVDb250ZXh0TWVudQogICAgIG1fY29udGV4dE1lbnVDbGllbnQuaW5p
dGlhbGl6ZShjbGllbnQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cmVsYXVuY2goKQordm9p
ZCBXZWJQYWdlUHJveHk6OnJlYXR0YWNoVG9XZWJQcm9jZXNzKCkKIHsKICAgICBtX2lzVmFsaWQg
PSB0cnVlOwogCkBAIC0yMTUsMTAgKzIxNiwyMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVsYXVu
Y2goKQogICAgIG1fcGFnZUNsaWVudC0+ZGlkUmVsYXVuY2hQcm9jZXNzKCk7CiB9CiAKK3ZvaWQg
V2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2Vzc1dpdGhJdGVtKFdlYkJhY2tGb3J3YXJk
TGlzdEl0ZW0qIGl0ZW0pCit7CisgICAgaWYgKGl0ZW0gJiYgaXRlbSAhPSBtX2JhY2tGb3J3YXJk
TGlzdC0+Y3VycmVudEl0ZW0oKSkKKyAgICAgICAgbV9iYWNrRm9yd2FyZExpc3QtPmdvVG9JdGVt
KGl0ZW0pOworICAgIAorICAgIHJlYXR0YWNoVG9XZWJQcm9jZXNzKCk7CisgICAgcHJvY2Vzcygp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHb1RvQmFja0ZvcndhcmRJdGVtKGl0ZW0tPml0ZW1J
RCgpKSwgbV9wYWdlSUQpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBh
Z2UoKQogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogCisgICAgQmFja0ZvcndhcmRMaXN0SXRl
bVZlY3RvciBpdGVtcyA9IG1fYmFja0ZvcndhcmRMaXN0LT5lbnRyaWVzKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkKKyAgICAgICAgcHJvY2VzcygpLT5y
ZWdpc3Rlck5ld1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0oaXRlbXNbaV0uZ2V0KCkpOworCiAgICAg
bV9kcmF3aW5nQXJlYSA9IG1fcGFnZUNsaWVudC0+Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOwog
ICAgIEFTU0VSVChtX2RyYXdpbmdBcmVhKTsKIApAQCAtMjk2LDcgKzMxMCw3IEBAIHN0YXRpYyB2
b2lkIGluaXRpYWxpemVTYW5kYm94RXh0ZW5zaW9uSGEKIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2Fk
VVJMKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICBy
ZWxhdW5jaCgpOworICAgICAgICByZWF0dGFjaFRvV2ViUHJvY2VzcygpOwogCiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaW5pdGlhbGl6
ZVNhbmRib3hFeHRlbnNpb25IYW5kbGUoS1VSTChLVVJMKCksIHVybCksIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUpOwpAQCAtMzA2LDcgKzMyMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2FkVVJM
KGNvbnN0IFN0cmluZyYKIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2FkVVJMUmVxdWVzdChXZWJVUkxS
ZXF1ZXN0KiB1cmxSZXF1ZXN0KQogewogICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZWxh
dW5jaCgpOworICAgICAgICByZWF0dGFjaFRvV2ViUHJvY2VzcygpOwogCiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgaW5pdGlhbGl6ZVNh
bmRib3hFeHRlbnNpb25IYW5kbGUodXJsUmVxdWVzdC0+cmVzb3VyY2VSZXF1ZXN0KCkudXJsKCks
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwpAQCAtMzQ4LDE1ICszNjIsMjAgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnN0b3BMb2FkaW5nKCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OnJlbG9hZChib29s
IHJlbG9hZEZyb21PcmlnaW4pCiB7Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgaWYgKCFpc1Zh
bGlkKCkpIHsKKyAgICAgICAgcmVhdHRhY2hUb1dlYlByb2Nlc3NXaXRoSXRlbShtX2JhY2tGb3J3
YXJkTGlzdC0+Y3VycmVudEl0ZW0oKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBw
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlbG9hZChyZWxvYWRGcm9tT3JpZ2lu
KSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z29Gb3J3YXJkKCkKIHsKLSAg
ICBpZiAoIWlzVmFsaWQoKSkKKyAgICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAgICByZWF0dGFj
aFRvV2ViUHJvY2Vzc1dpdGhJdGVtKG1fYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkSXRlbSgpKTsK
ICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGlmICghY2FuR29Gb3J3YXJkKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTM3MSw4ICszOTAsMTAgQEAgYm9vbCBXZWJQYWdlUHJveHk6OmNhbkdv
Rm9yd2FyZCgpIGNvbnN0CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpnb0JhY2soKQogewotICAgIGlm
ICghaXNWYWxpZCgpKQorICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIHJlYXR0YWNoVG9X
ZWJQcm9jZXNzV2l0aEl0ZW0obV9iYWNrRm9yd2FyZExpc3QtPmJhY2tJdGVtKCkpOwogICAgICAg
ICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKCFjYW5Hb0JhY2soKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMzg3LDggKzQwOCwxMCBAQCBib29sIFdlYlBhZ2VQcm94eTo6Y2FuR29CYWNrKCkgY29u
c3QKIAogdm9pZCBXZWJQYWdlUHJveHk6OmdvVG9CYWNrRm9yd2FyZEl0ZW0oV2ViQmFja0Zvcndh
cmRMaXN0SXRlbSogaXRlbSkKIHsKLSAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICBpZiAoIWlzVmFs
aWQoKSkgeworICAgICAgICByZWF0dGFjaFRvV2ViUHJvY2Vzc1dpdGhJdGVtKGl0ZW0pOwogICAg
ICAgICByZXR1cm47CisgICAgfQogCiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpHb1RvQmFja0ZvcndhcmRJdGVtKGl0ZW0tPml0ZW1JRCgpKSwgbV9wYWdlSUQpOwogfQpA
QCAtMjE2MCw2ICsyMTgzLDggQEAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBXZWJQYWdlUHJv
eHk6OgogICAgIHBhcmFtZXRlcnMuZHJhd3NCYWNrZ3JvdW5kID0gbV9kcmF3c0JhY2tncm91bmQ7
CiAgICAgcGFyYW1ldGVycy5kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IG1fZHJhd3NUcmFu
c3BhcmVudEJhY2tncm91bmQ7CiAgICAgcGFyYW1ldGVycy51c2VyQWdlbnQgPSB1c2VyQWdlbnQo
KTsKKyAgICBwYXJhbWV0ZXJzLnNlc3Npb25TdGF0ZSA9IFNlc3Npb25TdGF0ZShtX2JhY2tGb3J3
YXJkTGlzdC0+ZW50cmllcygpLCBtX2JhY2tGb3J3YXJkTGlzdC0+Y3VycmVudEluZGV4KCkpOwor
ICAgIHBhcmFtZXRlcnMuaGlnaGVzdFVzZWRCYWNrRm9yd2FyZEl0ZW1JRCA9IFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW06OmhpZ2hlZFVzZWRJdGVtSUQoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICBwYXJhbWV0ZXJzLmlzU21hcnRJbnNlcnREZWxldGVFbmFibGVkID0gbV9pc1NtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZDsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA3
NTU2OCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzIsNyArMTMyLDYgQEAgcHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6ZVBvbGljeUNs
aWVudChjb25zdCBXS1BhZ2VQb2xpY3lDbGllbnQqKTsKICAgICB2b2lkIGluaXRpYWxpemVSZXNv
dXJjZUxvYWRDbGllbnQoY29uc3QgV0tQYWdlUmVzb3VyY2VMb2FkQ2xpZW50Kik7CiAgICAgdm9p
ZCBpbml0aWFsaXplVUlDbGllbnQoY29uc3QgV0tQYWdlVUlDbGllbnQqKTsKLSAgICB2b2lkIHJl
bGF1bmNoKCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVXZWJQYWdlKCk7CiAKQEAgLTQwMyw2ICs0
MDIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKHVpbnQ2NF90
IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRR
dW90YSwgdWludDY0X3QgY3VycmVudFVzYWdlLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlLCB1aW50
NjRfdCYgbmV3UXVvdGEpOwogICAgIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZv
ckZyYW1lKHVpbnQ2NF90IGdlb2xvY2F0aW9uSUQsIHVpbnQ2NF90IGZyYW1lSUQsIFN0cmluZyBv
cmlnaW5JZGVudGlmaWVyKTsKIAorICAgIHZvaWQgcmVhdHRhY2hUb1dlYlByb2Nlc3MoKTsKKyAg
ICB2b2lkIHJlYXR0YWNoVG9XZWJQcm9jZXNzV2l0aEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRl
bSopOworCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgdm9pZCBwYWdlRGlk
UmVxdWVzdFNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAjZW5kaWYKSW5kZXg6IFdl
YktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNGLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1VJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHAJKHJldmlzaW9uIDc1NTY4KQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViUGFnZVByb3h5Q0YuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzIsNyArMTMyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0
YQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBwcm9jZXNz
KCktPnJlZ2lzdGVyTmV3V2ViQmFja0ZvcndhcmRMaXN0SXRlbShlbnRyaWVzW2ldLmdldCgpKTsK
IAotICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVzdG9yZVNlc3Npb24o
U2Vzc2lvblN0YXRlKG1fYmFja0ZvcndhcmRMaXN0LT5lbnRyaWVzKCksIG1fYmFja0ZvcndhcmRM
aXN0LT5jdXJyZW50SW5kZXgoKSkpLCBtX3BhZ2VJRCk7CisgICAgcHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpSZXN0b3JlU2Vzc2lvbkFuZE5hdmlnYXRlVG9DdXJyZW50SXRlbShT
ZXNzaW9uU3RhdGUobV9iYWNrRm9yd2FyZExpc3QtPmVudHJpZXMoKSwgbV9iYWNrRm9yd2FyZExp
c3QtPmN1cnJlbnRJbmRleCgpKSksIG1fcGFnZUlEKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFj
a0ZvcndhcmRMaXN0UHJveHkuY3BwCShyZXZpc2lvbiA3NTU2OCkKKysrIFdlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjAsMTYgKzYwLDI4IEBAIHN0YXRpYyBIaXN0b3J5SXRlbVRvSURNYXAmIGhpc3RvcnlJdGVt
VG8KICAgICByZXR1cm4gbWFwOwogfSAKIAorc3RhdGljIHVpbnQ2NF90IHVuaXF1ZUhpc3RvcnlJ
dGVtSUQgPSAxOworCiBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVIaXN0b3J5SXRlbUlEKCkKIHsK
ICAgICAvLyBUaGVzZSBJRHMgZXhpc3QgaW4gdGhlIFdlYlByb2Nlc3MgZm9yIGl0ZW1zIGNyZWF0
ZWQgYnkgdGhlIFdlYlByb2Nlc3MuCiAgICAgLy8gVGhlIElEcyBnZW5lcmF0ZWQgaGVyZSBuZWVk
IHRvIG5ldmVyIGNvbGxpZGUgd2l0aCB0aGUgSURzIGNyZWF0ZWQgaW4gV2ViQmFja0ZvcndhcmRM
aXN0IGluIHRoZSBVSVByb2Nlc3MuCiAgICAgLy8gV2UgYWNjb21wbGlzaCB0aGlzIGJ5IHN0YXJ0
aW5nIGZyb20gMywgYW5kIG9ubHkgZXZlciB1c2luZyBvZGQgaWRzLgotICAgIHN0YXRpYyB1aW50
NjRfdCB1bmlxdWVIaXN0b3J5SXRlbUlEID0gMTsKICAgICB1bmlxdWVIaXN0b3J5SXRlbUlEICs9
IDI7CiAgICAgcmV0dXJuIHVuaXF1ZUhpc3RvcnlJdGVtSUQ7CiB9CiAKK3ZvaWQgV2ViQmFja0Zv
cndhcmRMaXN0UHJveHk6OnNldEhpZ2hlc3RJdGVtSURGcm9tVUlQcm9jZXNzKHVpbnQ2NF90IGl0
ZW1JRCkKK3sKKyAgICBpZiAoaXRlbUlEIDw9IHVuaXF1ZUhpc3RvcnlJdGVtSUQpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICAgaWYgKGl0ZW1JRCAlIDIpCisgICAgICAgICB1bmlxdWVIaXN0
b3J5SXRlbUlEID0gaXRlbUlEOworICAgICBlbHNlCisgICAgICAgICB1bmlxdWVIaXN0b3J5SXRl
bUlEID0gaXRlbUlEICsgMTsKK30KKwogc3RhdGljIHZvaWQgdXBkYXRlQmFja0ZvcndhcmRJdGVt
KHVpbnQ2NF90IGl0ZW1JRCwgSGlzdG9yeUl0ZW0qIGl0ZW0pCiB7CiAgICAgRW5jb2RlckFkYXB0
ZXIgZW5jb2RlcjsKQEAgLTgyLDkgKzk0LDYgQEAgc3RhdGljIHZvaWQgdXBkYXRlQmFja0Zvcndh
cmRJdGVtKHVpbnQ2NAogdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YWRkSXRlbUZyb21V
SVByb2Nlc3ModWludDY0X3QgaXRlbUlELCBQYXNzUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVt
PiBwcnBJdGVtKQogewogICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IHBycEl0ZW07Ci0K
LSAgICAvLyBVSVByb2Nlc3MgaXRlbUlEcyBzaG91bGQgYmUgZXZlbi4KLSAgICBBU1NFUlQoIShp
dGVtSUQgJSAyKSk7CiAgICAgCiAgICAgLy8gVGhpcyBpdGVtL2l0ZW1JRCBwYWlyIHNob3VsZCBu
b3QgYWxyZWFkeSBleGlzdCBpbiBvdXIgbWFwcy4KICAgICBBU1NFUlQoIWhpc3RvcnlJdGVtVG9J
RE1hcCgpLmNvbnRhaW5zKGl0ZW0uZ2V0KCkpKTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuaAkocmV2aXNpb24gNzU1
NjgpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzogCiAgICAgc3RhdGlj
IHZvaWQgcmVtb3ZlSXRlbSh1aW50NjRfdCBpdGVtSUQpOwogCiAgICAgc3RhdGljIHZvaWQgYWRk
SXRlbUZyb21VSVByb2Nlc3ModWludDY0X3QgaXRlbUlELCBQYXNzUmVmUHRyPFdlYkNvcmU6Okhp
c3RvcnlJdGVtPik7CisgICAgc3RhdGljIHZvaWQgc2V0SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nl
c3ModWludDY0X3QgaXRlbUlEKTsKICAgICAKICAgICB2b2lkIGNsZWFyKCk7CiAKSW5kZXg6IFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA3NTU2OCkKKysrIFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODgsNiArMTg4LDExIEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCAK
IAogICAgIG1fdXNlckFnZW50ID0gcGFyYW1ldGVycy51c2VyQWdlbnQ7CiAKKyAgICBXZWJCYWNr
Rm9yd2FyZExpc3RQcm94eTo6c2V0SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nlc3MocGFyYW1ldGVy
cy5oaWdoZXN0VXNlZEJhY2tGb3J3YXJkSXRlbUlEKTsKKyAgICAKKyAgICBpZiAoIXBhcmFtZXRl
cnMuc2Vzc2lvblN0YXRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdG9yZVNlc3Npb24ocGFyYW1l
dGVycy5zZXNzaW9uU3RhdGUpOworCiAjaWZuZGVmIE5ERUJVRwogICAgIHdlYlBhZ2VDb3VudGVy
LmluY3JlbWVudCgpOwogI2VuZGlmCkBAIC04NjYsMTEgKzg3MSwxMSBAQCB2b2lkIFdlYlBhZ2U6
OmV4ZWN1dGVFZGl0Q29tbWFuZChjb25zdCBTCiAgICAgZXhlY3V0ZUVkaXRpbmdDb21tYW5kKGNv
bW1hbmROYW1lLCBTdHJpbmcoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cmVzdG9yZVNlc3Npb24o
Y29uc3QgU2Vzc2lvblN0YXRlJiBzZXNzaW9uU3RhdGUpCit1aW50NjRfdCBXZWJQYWdlOjpyZXN0
b3JlU2Vzc2lvbihjb25zdCBTZXNzaW9uU3RhdGUmIHNlc3Npb25TdGF0ZSkKIHsKICAgICBjb25z
dCBCYWNrRm9yd2FyZExpc3RJdGVtVmVjdG9yJiBsaXN0ID0gc2Vzc2lvblN0YXRlLmxpc3QoKTsK
ICAgICBzaXplX3Qgc2l6ZSA9IGxpc3Quc2l6ZSgpOwotICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4g
Y3VycmVudEl0ZW07CisgICAgdWludDY0X3QgY3VycmVudEl0ZW1JRCA9IDA7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgV2ViQmFja0ZvcndhcmRMaXN0
SXRlbSogd2ViSXRlbSA9IGxpc3RbaV0uZ2V0KCk7CiAgICAgICAgIERlY29kZXJBZGFwdGVyIGRl
Y29kZXIod2ViSXRlbS0+YmFja0ZvcndhcmREYXRhKCkuZGF0YSgpLCB3ZWJJdGVtLT5iYWNrRm9y
d2FyZERhdGEoKS5zaXplKCkpOwpAQCAtODc4LDE3ICs4ODMsMjIgQEAgdm9pZCBXZWJQYWdlOjpy
ZXN0b3JlU2Vzc2lvbihjb25zdCBTZXNzaQogICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0
ZW0gPSBIaXN0b3J5SXRlbTo6ZGVjb2RlQmFja0ZvcndhcmRUcmVlKHdlYkl0ZW0tPnVybCgpLCB3
ZWJJdGVtLT50aXRsZSgpLCB3ZWJJdGVtLT5vcmlnaW5hbFVSTCgpLCBkZWNvZGVyKTsKICAgICAg
ICAgaWYgKCFpdGVtKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWNvZGUg
YSBIaXN0b3J5SXRlbSBmcm9tIHNlc3Npb24gc3RhdGUgZGF0YS4iKTsKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBpZiAoaSA9PSBzZXNzaW9uU3RhdGUuY3VycmVudEluZGV4KCkpCi0gICAgICAgICAgICBjdXJy
ZW50SXRlbSA9IGl0ZW07CisgICAgICAgICAgICBjdXJyZW50SXRlbUlEID0gd2ViSXRlbS0+aXRl
bUlEKCk7CiAgICAgICAgIAogICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YWRkSXRl
bUZyb21VSVByb2Nlc3MobGlzdFtpXS0+aXRlbUlEKCksIGl0ZW0ucmVsZWFzZSgpKTsKICAgICB9
ICAgIAotICAgIEFTU0VSVChjdXJyZW50SXRlbSk7CisgICAgQVNTRVJUKGN1cnJlbnRJdGVtSUQp
OworICAgIHJldHVybiBjdXJyZW50SXRlbUlEOworfQogCi0gICAgbV9wYWdlLT5nb1RvSXRlbShj
dXJyZW50SXRlbS5nZXQoKSwgRnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNrRm9yd2FyZCk7Cit2b2lk
IFdlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uQW5kTmF2aWdhdGVUb0N1cnJlbnRJdGVtKGNvbnN0IFNl
c3Npb25TdGF0ZSYgc2Vzc2lvblN0YXRlKQoreworICAgIGlmICh1aW50NjRfdCBjdXJyZW50SXRl
bUlEID0gcmVzdG9yZVNlc3Npb24oc2Vzc2lvblN0YXRlKSkKKyAgICAgICAgZ29Ub0JhY2tGb3J3
YXJkSXRlbShjdXJyZW50SXRlbUlEKTsKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCklu
ZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiA3NTU2OCkKKysr
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQwLDcgKzM0MCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0b3VjaEV2ZW50KGNvbnN0IFdlYlRv
dWNoRXZlbnQmKTsKICNlbmRpZgogCi0gICAgdm9pZCByZXN0b3JlU2Vzc2lvbihjb25zdCBTZXNz
aW9uU3RhdGUmKTsKKyAgICB1aW50NjRfdCByZXN0b3JlU2Vzc2lvbihjb25zdCBTZXNzaW9uU3Rh
dGUmKTsKKyAgICB2b2lkIHJlc3RvcmVTZXNzaW9uQW5kTmF2aWdhdGVUb0N1cnJlbnRJdGVtKGNv
bnN0IFNlc3Npb25TdGF0ZSYpOwogCiAgICAgdm9pZCBkaWRSZW1vdmVCYWNrRm9yd2FyZEl0ZW0o
dWludDY0X3QpOwogCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc1NTY4KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBA
QCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBSZWxvYWQoYm9vbCByZWxvYWRGcm9tT3JpZ2lu
KQogICAgIFN0b3BMb2FkaW5nKCkKICAgICAKLSAgICBSZXN0b3JlU2Vzc2lvbihXZWJLaXQ6OlNl
c3Npb25TdGF0ZSBzdGF0ZSkKKyAgICBSZXN0b3JlU2Vzc2lvbkFuZE5hdmlnYXRlVG9DdXJyZW50
SXRlbShXZWJLaXQ6OlNlc3Npb25TdGF0ZSBzdGF0ZSkKIAogICAgIERpZFJlbW92ZUJhY2tGb3J3
YXJkSXRlbSh1aW50NjRfdCBiYWNrRm9yd2FyZEl0ZW1JRCkKIAo=
</data>
<flag name="review"
          id="70076"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="70077"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>