<?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>168548</bug_id>
          
          <creation_ts>2017-02-17 19:26:02 -0800</creation_ts>
          <short_desc>Recursive MessagePort.postMessage() calls causes tab to become unresponsive</short_desc>
          <delta_ts>2017-02-19 10:25:48 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>rbyers</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1278574</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-17 19:26:02 -0800</bug_when>
    <thetext>Recursive MessagePort.postMessage() calls causes tab to become unresponsive.

Test case: http://jsbin.com/vizujisijo/1/edit?html,output

Firefox and Chrome behave correctly and let the timer fire.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278581</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-17 20:11:38 -0800</bug_when>
    <thetext>&lt;rdar://problem/29808005&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278588</commentid>
    <comment_count>2</comment_count>
      <attachid>302043</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-17 20:42:35 -0800</bug_when>
    <thetext>Created attachment 302043
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278631</commentid>
    <comment_count>3</comment_count>
      <attachid>302043</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-02-18 08:08:33 -0800</bug_when>
    <thetext>Comment on attachment 302043
Patch

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

The use of the verb &quot;get&quot; in the function names in these classes goes against WebKit coding style traditions. We normally use &quot;take&quot; for this kind of operation.

&gt; Source/WebCore/dom/MessagePort.cpp:152
&gt; +    bool contextIsWorker = is&lt;WorkerGlobalScope&gt;(*m_scriptExecutionContext);

Not sure this is an important optimization.

&gt; Source/WebCore/dom/MessagePortChannel.h:66
&gt; +        class EventData {
&gt; +            WTF_MAKE_FAST_ALLOCATED;
&gt; +        public:
&gt; +            EventData(RefPtr&lt;SerializedScriptValue&gt;&amp;&amp; message, std::unique_ptr&lt;MessagePortChannelArray&gt;&amp;&amp;);
&gt; +
&gt; +            RefPtr&lt;SerializedScriptValue&gt; message() { return m_message; }
&gt; +            std::unique_ptr&lt;MessagePortChannelArray&gt; channels() { return WTFMove(m_channels); }
&gt; +
&gt; +        private:
&gt; +            RefPtr&lt;SerializedScriptValue&gt; m_message;
&gt; +            std::unique_ptr&lt;MessagePortChannelArray&gt; m_channels;
&gt; +        };

This class was just moved, but I see problems with it:

1) this is just a struct, and there is no need to make it a class
2) the channels() function is a destructive move, but the name of the function does not make that clear; but irrelevant if we just change this into a struct
3) the message() function returns a RefPtr causing unnecessary reference count churn; should return a raw pointer or const RefPtr&amp;, but irrelevant if we just change this into a struct</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278644</commentid>
    <comment_count>4</comment_count>
      <attachid>302043</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-18 10:38:03 -0800</bug_when>
    <thetext>Comment on attachment 302043
Patch

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

&gt; Source/WTF/wtf/MessageQueue.h:189
&gt; +    inline auto MessageQueue&lt;DataType&gt;::getAllMessages() -&gt; Deque&lt;std::unique_ptr&lt;DataType&gt;&gt;

Will use takeAllMessages() naming instead.

&gt;&gt; Source/WebCore/dom/MessagePort.cpp:152
&gt;&gt; +    bool contextIsWorker = is&lt;WorkerGlobalScope&gt;(*m_scriptExecutionContext);
&gt; 
&gt; Not sure this is an important optimization.

Seems unfortunate to do a virtual function call for every loop iteration, unless the compiler is somehow able to hoist the check out of the loop.

&gt;&gt; Source/WebCore/dom/MessagePortChannel.h:66
&gt;&gt; +        };
&gt; 
&gt; This class was just moved, but I see problems with it:
&gt; 
&gt; 1) this is just a struct, and there is no need to make it a class
&gt; 2) the channels() function is a destructive move, but the name of the function does not make that clear; but irrelevant if we just change this into a struct
&gt; 3) the message() function returns a RefPtr causing unnecessary reference count churn; should return a raw pointer or const RefPtr&amp;, but irrelevant if we just change this into a struct

Ok, I&apos;ll use a struct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278656</commentid>
    <comment_count>5</comment_count>
      <attachid>302055</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-18 13:50:03 -0800</bug_when>
    <thetext>Created attachment 302055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278670</commentid>
    <comment_count>6</comment_count>
      <attachid>302055</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-02-18 15:35:58 -0800</bug_when>
    <thetext>Comment on attachment 302055
Patch

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

&gt; Source/WebCore/dom/MessagePortChannel.h:59
&gt; +            EventData(Ref&lt;SerializedScriptValue&gt;&amp;&amp; message, std::unique_ptr&lt;MessagePortChannelArray&gt;&amp;&amp; channels)
&gt; +                : message(WTFMove(message))
&gt; +                , channels(WTFMove(channels))
&gt; +            { }

I guess this is needed on Windows? I’d expect we could just use aggregate initialization syntax on other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278675</commentid>
    <comment_count>7</comment_count>
      <attachid>302055</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-18 16:00:40 -0800</bug_when>
    <thetext>Comment on attachment 302055
Patch

Clearing flags on attachment: 302055

Committed r212609: &lt;http://trac.webkit.org/changeset/212609&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278676</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-18 16:00:48 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278677</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-18 16:17:47 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 302055 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=302055&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/MessagePortChannel.h:59
&gt; &gt; +            EventData(Ref&lt;SerializedScriptValue&gt;&amp;&amp; message, std::unique_ptr&lt;MessagePortChannelArray&gt;&amp;&amp; channels)
&gt; &gt; +                : message(WTFMove(message))
&gt; &gt; +                , channels(WTFMove(channels))
&gt; &gt; +            { }
&gt; 
&gt; I guess this is needed on Windows? I’d expect we could just use aggregate
&gt; initialization syntax on other platforms.

I could not get make_unique&lt;EventData&gt;(a, b) to work without this constructor.
MessageQueue requires me to pass a unique_ptr&lt;EventData&gt;&amp;&amp; instead of an EventData&amp;&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278683</commentid>
    <comment_count>10</comment_count>
      <attachid>302055</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-02-18 17:03:08 -0800</bug_when>
    <thetext>Comment on attachment 302055
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/MessagePortChannel.h:59
&gt;&gt;&gt; +            { }
&gt;&gt; 
&gt;&gt; I guess this is needed on Windows? I’d expect we could just use aggregate initialization syntax on other platforms.
&gt; 
&gt; I could not get make_unique&lt;EventData&gt;(a, b) to work without this constructor.
&gt; MessageQueue requires me to pass a unique_ptr&lt;EventData&gt;&amp;&amp; instead of an EventData&amp;&amp;.

The syntax I would expect to work is make_unique&lt;EventData&gt;({ a, b }), with braces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278693</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-02-18 19:26:20 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 302055 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=302055&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/dom/MessagePortChannel.h:59
&gt; &gt;&gt;&gt; +            { }
&gt; &gt;&gt; 
&gt; &gt;&gt; I guess this is needed on Windows? I’d expect we could just use aggregate initialization syntax on other platforms.
&gt; &gt; 
&gt; &gt; I could not get make_unique&lt;EventData&gt;(a, b) to work without this constructor.
&gt; &gt; MessageQueue requires me to pass a unique_ptr&lt;EventData&gt;&amp;&amp; instead of an EventData&amp;&amp;.
&gt; 
&gt; The syntax I would expect to work is make_unique&lt;EventData&gt;({ a, b }), with
&gt; braces.

I tried dropping the constructor and making the following change:
-    bool wasEmpty = m_channel-&gt;m_outgoingQueue-&gt;appendAndCheckEmpty(std::make_unique&lt;EventData&gt;(WTFMove(message), WTFMove(channels)));
+    bool wasEmpty = m_channel-&gt;m_outgoingQueue-&gt;appendAndCheckEmpty(std::make_unique&lt;EventData&gt;({ WTFMove(message), WTFMove(channels) }));

This gives me an error too:
In file included from /Volumes/Data/WebKit/OpenSource/Source/WebCore/dom/default/PlatformMessagePortChannel.cpp:1:
In file included from /Volumes/Data/WebKit/OpenSource/Source/WebCore/WebCorePrefix.h:89:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.12.xctoolchain/usr/bin/../include/c++/v1/algorithm:628:
/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.12.xctoolchain/usr/bin/../include/c++/v1/memory:3141:32: error: no matching constructor for initialization of &apos;WebCore::MessagePortChannel::EventData&apos;
/Volumes/Data/WebKit/OpenSource/Source/WebCore/dom/default/PlatformMessagePortChannel.cpp:88:74: note: in instantiation of function template specialization &apos;std::__1::make_unique&lt;WebCore::MessagePortChannel::EventData, WTF::RefPtr&lt;WebCore::SerializedScriptValue&gt;, std::__1::unique_ptr&lt;WTF::Vector&lt;std::__1::unique_ptr&lt;WebCore::MessagePortChannel, std::__1::default_delete&lt;WebCore::MessagePortChannel&gt; &gt;, 1, WTF::CrashOnOverflow, 16&gt;, std::__1::default_delete&lt;WTF::Vector&lt;std::__1::unique_ptr&lt;WebCore::MessagePortChannel, std::__1::default_delete&lt;WebCore::MessagePortChannel&gt; &gt;, 1, WTF::CrashOnOverflow, 16&gt; &gt; &gt; &gt;&apos; requested here
In file included from /Volumes/Data/WebKit/OpenSource/Source/WebCore/dom/default/PlatformMessagePortChannel.cpp:33:
In file included from /Volumes/Data/WebKit/OpenSource/Source/WebCore/dom/default/PlatformMessagePortChannel.h:33:
/Volumes/Data/WebKit/OpenSource/Source/WebCore/dom/MessagePortChannel.h:55:16: note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided
/Volumes/Data/WebKit/OpenSource/Source/WebCore/dom/MessagePortChannel.h:55:16: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
/Volumes/Data/WebKit/OpenSource/Source/WebCore/dom/MessagePortChannel.h:55:16: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 2 were provided
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278747</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-02-19 10:25:48 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; &gt;&gt;&gt; Source/WebCore/dom/MessagePortChannel.h:59
&gt; &gt; &gt;&gt;&gt; +            { }
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; I guess this is needed on Windows? I’d expect we could just use aggregate initialization syntax on other platforms.
&gt; &gt; &gt; 
&gt; &gt; &gt; I could not get make_unique&lt;EventData&gt;(a, b) to work without this constructor.
&gt; &gt; &gt; MessageQueue requires me to pass a unique_ptr&lt;EventData&gt;&amp;&amp; instead of an EventData&amp;&amp;.
&gt; &gt; 
&gt; &gt; The syntax I would expect to work is make_unique&lt;EventData&gt;({ a, b }), with
&gt; &gt; braces.

Oops, good point, I was wrong. This will work:

    make_unique&lt;EventData&gt;(EventData { a, b })

but relies on the compiler to optimize enough that the move has no additional cost.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302043</attachid>
            <date>2017-02-17 20:42:35 -0800</date>
            <delta_ts>2017-02-18 13:49:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168548-20170217203956.patch</filename>
            <type>text/plain</type>
            <size>14726</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyNTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQ4YjAwMWY2ZjQyNzdhMzUzMzNiMGE3
NWNlMmRhNTRhZDNiOGE5OGIuLmM4MzdlYTRjNTZkZWQwMTRmYTMxZmEwZWMwZDI2NmUxMjdiYjU2
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTctMDItMTcgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBSZWN1cnNpdmUgTWVzc2FnZVBvcnQucG9zdE1lc3NhZ2Uo
KSBjYWxscyBjYXVzZXMgdGFiIHRvIGJlY29tZSB1bnJlc3BvbnNpdmUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODU0OAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMjk4MDgwMDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIEFQSSB0byByZXRyaWV2ZSBhbGwgbWVzc2FnZXMgaW4gdGhlIHF1ZXVl
IGF0IG9uY2UuCisKKyAgICAgICAgKiB3dGYvTWVzc2FnZVF1ZXVlLmg6CisKIDIwMTctMDItMTYg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZW1vdmUgRUZMLXNwZWNpZmljIGZpbGVzIGluIFNvdXJjZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNzJjYjFk
ZmJjM2Y2NjZiMjUwOGQ3YTgzNTc5NWQ3ZWJlMWI1ODc4Li4xMjRjMWJhZWQxMDY4YjhiNTc4ZjFi
MTMxODE3NmM4MTQzODQwY2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTctMDIt
MTcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZWN1cnNpdmUg
TWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UoKSBjYWxscyBjYXVzZXMgdGFiIHRvIGJlY29tZSB1bnJl
c3BvbnNpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2ODU0OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjk4MDgwMDU+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWVzc2FnZVBvcnQ6OmRpc3BhdGNo
TWVzc2FnZXMoKSB3YXMgZ2V0dGluZyBtZXNzYWdlcyBvbmUgYnkgb25lIG9mIHRoZQorICAgICAg
ICBjaGFubmVsJ3MgTWVzc2FnZVF1ZXVlIGFuZCBmaXJpbmcgdGhlIE1lc3NhZ2VFdmVudCBmb3Ig
ZWFjaCBvZiB0aGVtLgorICAgICAgICBUaGUgaXNzdWUgaXMgdGhhdCB3ZSBjYW4gZ2V0IHN0dWNr
IGluIGFuIGluZmluaXRlIGxvb3AgaWYgdGhlCisgICAgICAgIE1lc3NhZ2VFdmVudCBoYW5kbGVy
IHBvc3RzIGEgbWVzc2FnZSBvbiB0aGUgc2FtZSBwb3N0LgorCisgICAgICAgIFRvIGFkZHJlc3Mg
dGhlIGlzc3VlLCB3ZSBub3cgdGFrZXMgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIHF1ZXVlIGJlZm9y
ZQorICAgICAgICBpdGVyYXRpbmcgb3ZlciB0aGVtIHRvIGZpcmUgdGhlIGV2ZW50LiBUaGlzIHdh
eSwgaWYgbmV3IG1lc3NhZ2VzIGFyZQorICAgICAgICBhZGRlZCB0byB0aGUgcXVldWUgaW4gb25l
IG9mIHRoZSBNZXNzYWdlRXZlbnQgaGFuZGxlcnMsIHRoZXkgd2lsbCBub3QKKyAgICAgICAgYmUg
cHJvY2Vzc2VkIHVudGlsIHRoZSBuZXh0IGV2ZW50IGxvb3AgaXRlcmF0aW9uLCBhcyBpcyBleHBl
Y3RlZC4KKworICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtcG9zdE1lc3Nh
Z2UtcmVjdXJzaXZlLmh0bWwKKworICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hNZXNzYWdlcyk6CisgICAgICAgICog
ZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5oOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRD
aGFubmVsOjpFdmVudERhdGE6Om1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBv
cnRDaGFubmVsOjpFdmVudERhdGE6OmNoYW5uZWxzKToKKyAgICAgICAgKiBkb20vZGVmYXVsdC9Q
bGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdl
UG9ydENoYW5uZWw6OkV2ZW50RGF0YTo6RXZlbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
c3NhZ2VQb3J0Q2hhbm5lbDo6cG9zdE1lc3NhZ2VUb1JlbW90ZSk6CisgICAgICAgICogZG9tL2Rl
ZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpNZXNzYWdlUG9ydFF1ZXVlOjp0cnlHZXRNZXNzYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpNZXNzYWdl
UG9ydFF1ZXVlOjpnZXRBbGxNZXNzYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1l
c3NhZ2VQb3J0Q2hhbm5lbDo6TWVzc2FnZVBvcnRRdWV1ZTo6YXBwZW5kQW5kQ2hlY2tFbXB0eSk6
CisKIDIwMTctMDItMTcgIEVucmlxdWUgT2Nhw7FhIEdvbnrDoWxleiAgPGVvY2FuaGFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXSBGYXN0IHJlcGxheSBvbiB2aWRlbyBoaWRlL3Vu
aGlkZSBvbiBwbGF0Zm9ybXMgd2l0aCBsaW1pdGVkIHZpZGVvIGJ1ZmZlciBwb29scwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvTWVzc2FnZVF1ZXVlLmggYi9Tb3VyY2UvV1RGL3d0Zi9NZXNz
YWdlUXVldWUuaAppbmRleCA2MDBhZDIzYmNmNWVlMjkwYWU4ZWUyZmE2ZWZlMThjODI2ZWQyMjRh
Li42ZDg4ZjZjNjYzMTk0MTc2Y2EwMjY4NWEyYTg4N2QzNTA0MmRmNjI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9NZXNzYWdlUXVldWUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NZXNzYWdl
UXVldWUuaApAQCAtNjQsNiArNjQsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RGF0YVR5cGU+IHdhaXRGb3JNZXNzYWdlKCk7CiAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxEYXRhVHlwZT4gdHJ5R2V0TWVzc2FnZSgpOworICAgICAgICBEZXF1ZTxzdGQ6OnVu
aXF1ZV9wdHI8RGF0YVR5cGU+PiBnZXRBbGxNZXNzYWdlcygpOwogICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RGF0YVR5cGU+IHRyeUdldE1lc3NhZ2VJZ25vcmluZ0tpbGxlZCgpOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRh
VHlwZT4gd2FpdEZvck1lc3NhZ2VGaWx0ZXJlZFdpdGhUaW1lb3V0KE1lc3NhZ2VRdWV1ZVdhaXRS
ZXN1bHQmLCBQcmVkaWNhdGUmJiwgV2FsbFRpbWUgYWJzb2x1dGVUaW1lKTsKQEAgLTE4NSw2ICsx
ODYsMTUgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RGF0YVR5cGU+CisgICAgaW5saW5lIGF1dG8gTWVzc2FnZVF1ZXVlPERhdGFUeXBlPjo6Z2V0QWxs
TWVzc2FnZXMoKSAtPiBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+PgorICAgIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrKG1fbXV0ZXgpOworICAgICAgICBpZiAobV9raWxsZWQpCisg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm4gV1RGTW92ZShtX3F1ZXVlKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4KICAgICBpbmxpbmUgYXV0
byBNZXNzYWdlUXVldWU8RGF0YVR5cGU+Ojp0cnlHZXRNZXNzYWdlSWdub3JpbmdLaWxsZWQoKSAt
PiBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxv
Y2sobV9tdXRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRleCBhZDQxZmM5YTc4
ZTAwNjg2NmYzMTIxNDU3NzZkMjhmZDkxMzE1NzA0Li40MGFhNTNjMTZlOGI0NWExZTUyN2U2OWEx
Zjc5ZGVkMzVkNDUxZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKQEAgLTE0Niwx
NiArMTQ2LDE5IEBAIHZvaWQgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2FnZXMoKQogICAgIC8v
IFRoZSBIVE1MNSBzcGVjIHNwZWNpZmllcyB0aGF0IGFueSBtZXNzYWdlcyBzZW50IHRvIGEgZG9j
dW1lbnQgdGhhdCBpcyBub3QgZnVsbHkgYWN0aXZlIHNob3VsZCBiZSBkcm9wcGVkLCBzbyB0aGlz
IGJlaGF2aW9yIGlzIE9LLgogICAgIEFTU0VSVChzdGFydGVkKCkpOwogCi0gICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2Fn
ZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzOwotICAgIHdoaWxlIChtX2VudGFuZ2xlZENoYW5u
ZWwgJiYgbV9lbnRhbmdsZWRDaGFubmVsLT50cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShtZXNzYWdl
LCBjaGFubmVscykpIHsKKyAgICBpZiAoIW1fZW50YW5nbGVkQ2hhbm5lbCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYm9vbCBjb250ZXh0SXNXb3JrZXIgPSBpczxXb3JrZXJHbG9iYWxTY29wZT4o
Km1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAKKyAgICBhdXRvIHBlbmRpbmdNZXNzYWdlcyA9
IG1fZW50YW5nbGVkQ2hhbm5lbC0+Z2V0QWxsTWVzc2FnZXNGcm9tUmVtb3RlKCk7CisgICAgZm9y
IChhdXRvJiBtZXNzYWdlIDogcGVuZGluZ01lc3NhZ2VzKSB7CiAgICAgICAgIC8vIGNsb3NlKCkg
aW4gV29ya2VyIG9ubWVzc2FnZSBoYW5kbGVyIHNob3VsZCBwcmV2ZW50IG5leHQgbWVzc2FnZSBm
cm9tIGRpc3BhdGNoaW5nLgotICAgICAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCptX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpICYmIGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KS5pc0Nsb3NpbmcoKSkKKyAgICAgICAgaWYgKGNvbnRleHRJ
c1dvcmtlciAmJiBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKm1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCkuaXNDbG9zaW5nKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0
byBwb3J0cyA9IE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCptX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIFdURk1vdmUoY2hhbm5lbHMpKTsKLSAgICAgICAgZGlzcGF0Y2hFdmVudChNZXNzYWdl
RXZlbnQ6OmNyZWF0ZShXVEZNb3ZlKHBvcnRzKSwgV1RGTW92ZShtZXNzYWdlKSkpOworICAgICAg
ICBhdXRvIHBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKm1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgbWVzc2FnZS0+Y2hhbm5lbHMoKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQo
TWVzc2FnZUV2ZW50OjpjcmVhdGUoV1RGTW92ZShwb3J0cyksIG1lc3NhZ2UtPm1lc3NhZ2UoKSkp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0
Q2hhbm5lbC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5oCmluZGV4
IDc5YjMyNTcxZjIyNDk3OWU2ZTFkMGQ4ZGI4M2QxYWU0ODY2NDQ3MmYuLmEyYWIxNTM5ZjAwZjQ4
ZmRlODM3MWVlYTRkZjBiYjE1MGIyYWFhM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnRDaGFubmVsLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUxLDYgKzUyLDE5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBNZXNzYWdlUG9ydENoYW5uZWwgewogICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShNZXNzYWdlUG9ydENoYW5uZWwpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICBwdWJsaWM6CisgICAgICAgIGNsYXNzIEV2ZW50RGF0YSB7CisgICAgICAgICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgRXZlbnRE
YXRhKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiYgbWVzc2FnZSwgc3RkOjp1bmlxdWVf
cHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiYmKTsKKworICAgICAgICAgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSgpIHsgcmV0dXJuIG1fbWVzc2FnZTsgfQorICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVs
cygpIHsgcmV0dXJuIFdURk1vdmUobV9jaGFubmVscyk7IH0KKworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbV9tZXNzYWdlOworICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBtX2NoYW5u
ZWxzOworICAgICAgICB9OworCiAgICAgICAgIGV4cGxpY2l0IE1lc3NhZ2VQb3J0Q2hhbm5lbChS
ZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+JiYpOwogICAgICAgICBzdGF0aWMgdm9p
ZCBjcmVhdGVDaGFubmVsKE1lc3NhZ2VQb3J0KiwgTWVzc2FnZVBvcnQqKTsKIApAQCAtNzYsNiAr
OTAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEV4dHJhY3RzIGEgbWVzc2Fn
ZSBmcm9tIHRoZSBtZXNzYWdlIHF1ZXVlIGZvciB0aGlzIHBvcnQuCiAgICAgICAgIGJvb2wgdHJ5
R2V0TWVzc2FnZUZyb21SZW1vdGUoUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mLCBzdGQ6
OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+Jik7CiAKKyAgICAgICAgRGVxdWU8
c3RkOjp1bmlxdWVfcHRyPEV2ZW50RGF0YT4+IGdldEFsbE1lc3NhZ2VzRnJvbVJlbW90ZSgpOwor
CiAgICAgICAgIC8vIFJldHVybnMgdGhlIGVudGFuZ2xlZCBwb3J0IGlmIHJ1biBieSB0aGUgc2Ft
ZSB0aHJlYWQgKHNlZSBNZXNzYWdlUG9ydDo6bG9jYWxseUVudGFuZ2xlZFBvcnQoKSBmb3IgbW9y
ZSBkZXRhaWxzKS4KICAgICAgICAgTWVzc2FnZVBvcnQqIGxvY2FsbHlFbnRhbmdsZWRQb3J0KGNv
bnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwCmluZGV4IGRl
OGQzZGMxZGEwNjI2ZWE2ZjhlNThlMjdhMWUyNzQyNDE0ZDllN2YuLjMzNDUzMjFmZDIzY2Q4NGI4
ZWIzOTAxMTY5NjE4NWZlY2I2NDQ5ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9k
ZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKQEAgLTM3LDcgKzM3
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bDo6RXZlbnREYXRhOjpFdmVudERhdGEoUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBt
ZXNzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxz
KQorTWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE6OkV2ZW50RGF0YShSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiYmIG1lc3NhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUG9ydENo
YW5uZWxBcnJheT4mJiBjaGFubmVscykKICAgICA6IG1fbWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2Up
KQogICAgICwgbV9jaGFubmVscyhXVEZNb3ZlKGNoYW5uZWxzKSkKIHsKQEAgLTkxLDcgKzkxLDcg
QEAgdm9pZCBNZXNzYWdlUG9ydENoYW5uZWw6OnBvc3RNZXNzYWdlVG9SZW1vdGUoUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBtZXMKICAgICBMb2NrSG9sZGVyIGxvY2sobV9jaGFubmVs
LT5tX211dGV4KTsKICAgICBpZiAoIW1fY2hhbm5lbC0+bV9vdXRnb2luZ1F1ZXVlKQogICAgICAg
ICByZXR1cm47Ci0gICAgYm9vbCB3YXNFbXB0eSA9IG1fY2hhbm5lbC0+bV9vdXRnb2luZ1F1ZXVl
LT5hcHBlbmRBbmRDaGVja0VtcHR5KHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1NZXNzYWdlUG9y
dENoYW5uZWw6OkV2ZW50RGF0YT4oV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjaGFubmVscykp
KTsKKyAgICBib29sIHdhc0VtcHR5ID0gbV9jaGFubmVsLT5tX291dGdvaW5nUXVldWUtPmFwcGVu
ZEFuZENoZWNrRW1wdHkoc3RkOjptYWtlX3VuaXF1ZTxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50
RGF0YT4oV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjaGFubmVscykpKTsKICAgICBpZiAod2Fz
RW1wdHkgJiYgbV9jaGFubmVsLT5tX3JlbW90ZVBvcnQpCiAgICAgICAgIG1fY2hhbm5lbC0+bV9y
ZW1vdGVQb3J0LT5tZXNzYWdlQXZhaWxhYmxlKCk7CiB9CkBAIC0xMDksNiArMTA5LDEyIEBAIGJv
b2wgTWVzc2FnZVBvcnRDaGFubmVsOjp0cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYXV0byBNZXNzYWdl
UG9ydENoYW5uZWw6OmdldEFsbE1lc3NhZ2VzRnJvbVJlbW90ZSgpIC0+IERlcXVlPHN0ZDo6dW5p
cXVlX3B0cjxFdmVudERhdGE+PgoreworICAgIExvY2tIb2xkZXIgbG9jayhtX2NoYW5uZWwtPm1f
bXV0ZXgpOworICAgIHJldHVybiBtX2NoYW5uZWwtPm1faW5jb21pbmdRdWV1ZS0+Z2V0QWxsTWVz
c2FnZXMoKTsKK30KKwogdm9pZCBNZXNzYWdlUG9ydENoYW5uZWw6OmNsb3NlKCkKIHsKICAgICBS
ZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+IHJlbW90ZSA9IG1fY2hhbm5lbC0+ZW50
YW5nbGVkQ2hhbm5lbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL2RlZmF1bHQv
UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9kZWZhdWx0
L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgKaW5kZXggOGEwYmFhMDk3YWMwZmJlNjljM2Q2
MjRhMTY4OTQzNjAzOGEzNTMzZS4uZGZmOGI3ZGZhYjVjNzg4YTkzMTY0NWU0YjMwYjRkNTc5NmM2
NmIzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9y
bU1lc3NhZ2VQb3J0Q2hhbm5lbC5oCkBAIC00MywzMCArNDMsMjIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIC8vIFRoZSBnb2FsIG9mIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgdG8gZWxpbWlu
YXRlIGNvbnRlbnRpb24gZXhjZXB0IHdoZW4gY2xvbmluZyBvciBjbG9zaW5nIHRoZSBwb3J0LCBz
byBlYWNoIHNpZGUgb2YgdGhlIGNoYW5uZWwgaGFzIGl0cyBvd24gc2VwYXJhdGUgbXV0ZXguCiAg
ICAgY2xhc3MgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+IHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIGNsYXNzIEV2ZW50RGF0YSB7Ci0gICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShF
dmVudERhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAgICAgcHVibGljOgotICAg
ICAgICAgICAgRXZlbnREYXRhKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiYgbWVzc2Fn
ZSwgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5Pik7Ci0KLSAgICAgICAg
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UoKSB7IHJldHVybiBtX21l
c3NhZ2U7IH0KLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUG9ydENoYW5uZWxB
cnJheT4gY2hhbm5lbHMoKSB7IHJldHVybiBXVEZNb3ZlKG1fY2hhbm5lbHMpOyB9Ci0KLSAgICAg
ICAgcHJpdmF0ZToKLSAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1f
bWVzc2FnZTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUG9ydENoYW5uZWxB
cnJheT4gbV9jaGFubmVsczsKLSAgICAgICAgfTsKLQogICAgICAgICAvLyBXcmFwcGVyIGZvciBN
ZXNzYWdlUXVldWUgdGhhdCBhbGxvd3MgdXMgdG8gZG8gdGhyZWFkIHNhZmUgc2hhcmluZyBieSB0
d28gcHJveGllcy4KICAgICAgICAgY2xhc3MgTWVzc2FnZVBvcnRRdWV1ZSA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxNZXNzYWdlUG9ydFF1ZXVlPiB7CiAgICAgICAgIHB1YmxpYzoKICAg
ICAgICAgICAgIHN0YXRpYyBSZWY8TWVzc2FnZVBvcnRRdWV1ZT4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBNZXNzYWdlUG9ydFF1ZXVlKCkpOyB9CiAKLSAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiB0cnlHZXRN
ZXNzYWdlKCkKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUG9ydENoYW5uZWw6
OkV2ZW50RGF0YT4gdHJ5R2V0TWVzc2FnZSgpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fcXVldWUudHJ5R2V0TWVzc2FnZSgpOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBib29sIGFwcGVuZEFuZENoZWNrRW1wdHkoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+IG1lc3NhZ2UpCisgICAgICAgICAgICBEZXF1
ZTxzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+PiBnZXRBbGxN
ZXNzYWdlcygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcXVldWUu
Z2V0QWxsTWVzc2FnZXMoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBhcHBl
bmRBbmRDaGVja0VtcHR5KHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50
RGF0YT4gbWVzc2FnZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbV9x
dWV1ZS5hcHBlbmRBbmRDaGVja0VtcHR5KFdURk1vdmUobWVzc2FnZSkpOwogICAgICAgICAgICAg
fQpAQCAtNzksNyArNzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHByaXZhdGU6
CiAgICAgICAgICAgICBNZXNzYWdlUG9ydFF1ZXVlKCkgeyB9CiAKLSAgICAgICAgICAgIE1lc3Nh
Z2VRdWV1ZTxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiBtX3F1ZXVlOwor
ICAgICAgICAgICAgTWVzc2FnZVF1ZXVlPE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiBt
X3F1ZXVlOwogICAgICAgICB9OwogCiAgICAgICAgIH5QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGZhMTlhZWMzNmEyMGE0NjJjM2IwNmRkMDZlZjljNzVhMWQ3OGZmMjguLjMw
MjVmNDAwN2Y0NjJiNjRmNmRiMjRlOTY0YjE5NGFmYzYxMTYzMzggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAxNy0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlY3Vyc2l2ZSBNZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSgpIGNhbGxzIGNhdXNlcyB0YWIg
dG8gYmVjb21lIHVucmVzcG9uc2l2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY4NTQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yOTgwODAwNT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbGF5
b3V0IHRlc3QgY292ZXJhZ2UuIFRoZSB0ZXN0IHVzZWQgdG8gdGltZSBvdXQsIGl0IG5vdyBwYXNz
ZXMuCisgICAgICAgIFRoZSB0ZXN0IGFsc28gcGFzc2VzIG9uIEZpcmVmb3ggYW5kIENocm9tZS4K
KworICAgICAgICAqIGZhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1wb3N0TWVzc2FnZS1yZWN1cnNp
dmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tZXNzYWdlLXBv
cnQtcG9zdE1lc3NhZ2UtcmVjdXJzaXZlLmh0bWw6IEFkZGVkLgorCiAyMDE3LTAyLTE3ICBSeWFu
IEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFJlYmFzZWxpbmUgdGVz
dCBmb3IgaW9zLXNpbXVsYXRvci13azIgYWZ0ZXIgcjIxMjUyMi4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1wb3N0TWVzc2FnZS1yZWN1cnNpdmUtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LXBvc3RNZXNz
YWdlLXJlY3Vyc2l2ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFkZWQ5MGM5YzIwYzNhZTc3
OTdlYmNlMDJjMDhhZDJmNWFkNDM4MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1wb3N0TWVzc2FnZS1yZWN1cnNpdmUtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3RzIHRoYXQgcmVjdXJzaXZlIGNhbGxzIHRvIE1lc3NhZ2VQ
b3J0LnBvc3RNZXNzYWdlKCkgZG8gbm90IHByZWVtcHQgdGltZXJzLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBUaW1lciBoYXMgZmlyZWQuCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LXBvc3RNZXNzYWdlLXJlY3Vyc2l2ZS5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LXBvc3RNZXNzYWdlLXJlY3Vyc2l2
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlhZTczMjFjOTk4YWQzZDExNDI1MmNmYzBkZTMyYjc5MjEyYTc0
NjMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBv
cnQtcG9zdE1lc3NhZ2UtcmVjdXJzaXZlLmh0bWwKQEAgLTAsMCArMSw1MCBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQg
cmVjdXJzaXZlIGNhbGxzIHRvIE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKCkgZG8gbm90IHByZWVt
cHQgdGltZXJzLiIpOworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2Z1bmN0aW9uIHNpbXVsYXRl
U2V0SW1tZWRpYXRlKCkKK3sKKyAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgp
OworICAgIC8vIFVzZSBhIGZpZm8gbGlua2VkIGxpc3QgdG8gY2FsbCBjYWxsYmFja3MgaW4gdGhl
IHJpZ2h0IG9yZGVyLgorICAgIHZhciBoZWFkID0ge307CisgICAgdmFyIHRhaWwgPSBoZWFkOwor
ICAgIGNoYW5uZWxbJ3BvcnQxJ10ub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
IChoZWFkLm5leHQgIT0gbnVsbCkgeworICAgICAgICAgICAgaGVhZCA9IGhlYWQubmV4dDsKKyAg
ICAgICAgICAgIHZhciBjYiA9IGhlYWQuY2I7CisgICAgICAgICAgICBoZWFkLmNiID0gbnVsbDsK
KyAgICAgICAgICAgIGNiKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBmdW5jdGlv
bihjYikgeworICAgICAgICB0YWlsLm5leHQgPSB7Y2I6IGNifTsKKyAgICAgICAgdGFpbCA9IHRh
aWwubmV4dDsKKyAgICAgICAgY2hhbm5lbFsncG9ydDInXS5wb3N0TWVzc2FnZSgwKTsKKyAgICB9
OworfQorCit3aW5kb3cuc2V0SW1tZWRpYXRlID0gc2ltdWxhdGVTZXRJbW1lZGlhdGUoKTsKKwor
dmFyIHNob3VsZEV4aXQgPSBmYWxzZTsKKworZnVuY3Rpb24gaXRlcmF0ZSgpIHsKKyAgICBpZiAo
c2hvdWxkRXhpdCkgeworICAgICAgICB0ZXN0UGFzc2VkKCJUaW1lciBoYXMgZmlyZWQuIik7Cisg
ICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNldElt
bWVkaWF0ZShpdGVyYXRlKTsKK30KKworc2V0SW1tZWRpYXRlKGl0ZXJhdGUpOworc2V0VGltZW91
dChmdW5jdGlvbigpIHsKKyAgICBzaG91bGRFeGl0ID0gdHJ1ZTsKK30sIDEwKTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302055</attachid>
            <date>2017-02-18 13:50:03 -0800</date>
            <delta_ts>2017-02-18 16:00:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168548-20170218134722.patch</filename>
            <type>text/plain</type>
            <size>15521</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyNTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQ4YjAwMWY2ZjQyNzdhMzUzMzNiMGE3
NWNlMmRhNTRhZDNiOGE5OGIuLmNkYjc1ZDk0NzU5OTUwZGYzNmVhOGY1Yzk1MThmMTdkODIxMmY1
MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTctMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBSZWN1cnNpdmUgTWVzc2FnZVBvcnQucG9zdE1lc3NhZ2Uo
KSBjYWxscyBjYXVzZXMgdGFiIHRvIGJlY29tZSB1bnJlc3BvbnNpdmUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODU0OAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMjk4MDgwMDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgQWRkIEFQSSB0byByZXRyaWV2ZSBhbGwgbWVzc2FnZXMgaW4gdGhlIHF1ZXVlIGF0
IG9uY2UuCisKKyAgICAgICAgKiB3dGYvTWVzc2FnZVF1ZXVlLmg6CisKIDIwMTctMDItMTYgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1v
dmUgRUZMLXNwZWNpZmljIGZpbGVzIGluIFNvdXJjZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNzJjYjFkZmJj
M2Y2NjZiMjUwOGQ3YTgzNTc5NWQ3ZWJlMWI1ODc4Li5iMzYzMWMwYmU1Yzg3ZWZmYWFjZjFkZjFh
NzQyOWRjZDg5MzdiZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTctMDItMTgg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZWN1cnNpdmUgTWVz
c2FnZVBvcnQucG9zdE1lc3NhZ2UoKSBjYWxscyBjYXVzZXMgdGFiIHRvIGJlY29tZSB1bnJlc3Bv
bnNpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
ODU0OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjk4MDgwMDU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2Fn
ZXMoKSB3YXMgZ2V0dGluZyBtZXNzYWdlcyBvbmUgYnkgb25lIG9mIHRoZQorICAgICAgICBjaGFu
bmVsJ3MgTWVzc2FnZVF1ZXVlIGFuZCBmaXJpbmcgdGhlIE1lc3NhZ2VFdmVudCBmb3IgZWFjaCBv
ZiB0aGVtLgorICAgICAgICBUaGUgaXNzdWUgaXMgdGhhdCB3ZSBjYW4gZ2V0IHN0dWNrIGluIGFu
IGluZmluaXRlIGxvb3AgaWYgdGhlCisgICAgICAgIE1lc3NhZ2VFdmVudCBoYW5kbGVyIHBvc3Rz
IGEgbWVzc2FnZSBvbiB0aGUgc2FtZSBwb3N0LgorCisgICAgICAgIFRvIGFkZHJlc3MgdGhlIGlz
c3VlLCB3ZSBub3cgdGFrZXMgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIHF1ZXVlIGJlZm9yZQorICAg
ICAgICBpdGVyYXRpbmcgb3ZlciB0aGVtIHRvIGZpcmUgdGhlIGV2ZW50LiBUaGlzIHdheSwgaWYg
bmV3IG1lc3NhZ2VzIGFyZQorICAgICAgICBhZGRlZCB0byB0aGUgcXVldWUgaW4gb25lIG9mIHRo
ZSBNZXNzYWdlRXZlbnQgaGFuZGxlcnMsIHRoZXkgd2lsbCBub3QKKyAgICAgICAgYmUgcHJvY2Vz
c2VkIHVudGlsIHRoZSBuZXh0IGV2ZW50IGxvb3AgaXRlcmF0aW9uLCBhcyBpcyBleHBlY3RlZC4K
KworICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQtcG9zdE1lc3NhZ2UtcmVj
dXJzaXZlLmh0bWwKKworICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hNZXNzYWdlcyk6CisgICAgICAgICogZG9tL01l
c3NhZ2VQb3J0Q2hhbm5lbC5oOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVs
OjpFdmVudERhdGE6OkV2ZW50RGF0YSk6CisgICAgICAgICogZG9tL2RlZmF1bHQvUGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFu
bmVsOjpwb3N0TWVzc2FnZVRvUmVtb3RlKToKKyAgICAgICAgKiBkb20vZGVmYXVsdC9QbGF0Zm9y
bU1lc3NhZ2VQb3J0Q2hhbm5lbC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWw6Ok1lc3NhZ2VQb3J0UXVldWU6OnRha2VNZXNzYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpNZXNzYWdlUG9ydFF1ZXVlOjp0YWtl
QWxsTWVzc2FnZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5u
ZWw6Ok1lc3NhZ2VQb3J0UXVldWU6OmFwcGVuZEFuZENoZWNrRW1wdHkpOgorCiAyMDE3LTAyLTE3
ICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dTdHJlYW1lcl0gRmFzdCByZXBsYXkgb24gdmlkZW8gaGlkZS91bmhpZGUgb24gcGxhdGZv
cm1zIHdpdGggbGltaXRlZCB2aWRlbyBidWZmZXIgcG9vbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL01lc3NhZ2VRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvTWVzc2FnZVF1ZXVlLmgKaW5k
ZXggNjAwYWQyM2JjZjVlZTI5MGFlOGVlMmZhNmVmZTE4YzgyNmVkMjI0YS4uYzUyYTZhYzljNjQ0
N2Y0NDExNGViODRjMzk4ZjNhM2YyYzlhMGNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
TWVzc2FnZVF1ZXVlLmgKKysrIGIvU291cmNlL1dURi93dGYvTWVzc2FnZVF1ZXVlLmgKQEAgLTY0
LDYgKzY0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERh
dGFUeXBlPiB3YWl0Rm9yTWVzc2FnZSgpOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5
cGU+IHRyeUdldE1lc3NhZ2UoKTsKKyAgICAgICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPERhdGFU
eXBlPj4gdGFrZUFsbE1lc3NhZ2VzKCk7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRhVHlw
ZT4gdHJ5R2V0TWVzc2FnZUlnbm9yaW5nS2lsbGVkKCk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFByZWRpY2F0ZT4KICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERhdGFUeXBlPiB3YWl0Rm9y
TWVzc2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQoTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCYsIFByZWRp
Y2F0ZSYmLCBXYWxsVGltZSBhYnNvbHV0ZVRpbWUpOwpAQCAtMTg1LDYgKzE4NiwxNSBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4KKyAg
ICBpbmxpbmUgYXV0byBNZXNzYWdlUXVldWU8RGF0YVR5cGU+Ojp0YWtlQWxsTWVzc2FnZXMoKSAt
PiBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8RGF0YVR5cGU+PgorICAgIHsKKyAgICAgICAgTG9ja0hv
bGRlciBsb2NrKG1fbXV0ZXgpOworICAgICAgICBpZiAobV9raWxsZWQpCisgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgICAgICByZXR1cm4gV1RGTW92ZShtX3F1ZXVlKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4KICAgICBpbmxpbmUgYXV0byBNZXNzYWdlUXVl
dWU8RGF0YVR5cGU+Ojp0cnlHZXRNZXNzYWdlSWdub3JpbmdLaWxsZWQoKSAtPiBzdGQ6OnVuaXF1
ZV9wdHI8RGF0YVR5cGU+CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9tdXRleCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRleCBhZDQxZmM5YTc4ZTAwNjg2NmYzMTIx
NDU3NzZkMjhmZDkxMzE1NzA0Li5hNDRhZjQzYTI3OTkyYjgzNWQ0ZjM4YTIyMGQ1YWY2OGZkMzAy
MGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKQEAgLTE0NiwxNiArMTQ2LDE5IEBA
IHZvaWQgTWVzc2FnZVBvcnQ6OmRpc3BhdGNoTWVzc2FnZXMoKQogICAgIC8vIFRoZSBIVE1MNSBz
cGVjIHNwZWNpZmllcyB0aGF0IGFueSBtZXNzYWdlcyBzZW50IHRvIGEgZG9jdW1lbnQgdGhhdCBp
cyBub3QgZnVsbHkgYWN0aXZlIHNob3VsZCBiZSBkcm9wcGVkLCBzbyB0aGlzIGJlaGF2aW9yIGlz
IE9LLgogICAgIEFTU0VSVChzdGFydGVkKCkpOwogCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gbWVzc2FnZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVs
QXJyYXk+IGNoYW5uZWxzOwotICAgIHdoaWxlIChtX2VudGFuZ2xlZENoYW5uZWwgJiYgbV9lbnRh
bmdsZWRDaGFubmVsLT50cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShtZXNzYWdlLCBjaGFubmVscykp
IHsKKyAgICBpZiAoIW1fZW50YW5nbGVkQ2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ym9vbCBjb250ZXh0SXNXb3JrZXIgPSBpczxXb3JrZXJHbG9iYWxTY29wZT4oKm1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCk7CiAKKyAgICBhdXRvIHBlbmRpbmdNZXNzYWdlcyA9IG1fZW50YW5nbGVk
Q2hhbm5lbC0+dGFrZUFsbE1lc3NhZ2VzRnJvbVJlbW90ZSgpOworICAgIGZvciAoYXV0byYgbWVz
c2FnZSA6IHBlbmRpbmdNZXNzYWdlcykgewogICAgICAgICAvLyBjbG9zZSgpIGluIFdvcmtlciBv
bm1lc3NhZ2UgaGFuZGxlciBzaG91bGQgcHJldmVudCBuZXh0IG1lc3NhZ2UgZnJvbSBkaXNwYXRj
aGluZy4KLSAgICAgICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPigqbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KSAmJiBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKm1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCkuaXNDbG9zaW5nKCkpCisgICAgICAgIGlmIChjb250ZXh0SXNXb3JrZXIgJiYg
ZG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLmlz
Q2xvc2luZygpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGF1dG8gcG9ydHMgPSBN
ZXNzYWdlUG9ydDo6ZW50YW5nbGVQb3J0cygqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXVEZN
b3ZlKGNoYW5uZWxzKSk7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50OjpjcmVh
dGUoV1RGTW92ZShwb3J0cyksIFdURk1vdmUobWVzc2FnZSkpKTsKKyAgICAgICAgYXV0byBwb3J0
cyA9IE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IFdURk1vdmUobWVzc2FnZS0+Y2hhbm5lbHMpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChNZXNz
YWdlRXZlbnQ6OmNyZWF0ZShXVEZNb3ZlKHBvcnRzKSwgV1RGTW92ZShtZXNzYWdlLT5tZXNzYWdl
KSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQ
b3J0Q2hhbm5lbC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5oCmlu
ZGV4IDc5YjMyNTcxZjIyNDk3OWU2ZTFkMGQ4ZGI4M2QxYWU0ODY2NDQ3MmYuLjYwZWQ2ZjgzNjk2
MGM3MWJhMGZjZjI0MDljM2VmYzFmMzdiNTJhMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9NZXNzYWdlUG9ydENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2Fn
ZVBvcnRDaGFubmVsLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTUxLDYgKzUyLDE2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBNZXNzYWdlUG9ydENoYW5uZWwgewogICAgICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShNZXNzYWdlUG9ydENoYW5uZWwpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICBwdWJsaWM6CisgICAgICAgIHN0cnVjdCBFdmVudERhdGEgeworICAgICAgICAgICAg
RXZlbnREYXRhKFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiYgbWVzc2FnZSwgc3RkOjp1bmlx
dWVfcHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiYmIGNoYW5uZWxzKQorICAgICAgICAgICAg
ICAgIDogbWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKQorICAgICAgICAgICAgICAgICwgY2hhbm5l
bHMoV1RGTW92ZShjaGFubmVscykpCisgICAgICAgICAgICB7IH0KKworICAgICAgICAgICAgUmVm
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHM7CisgICAgICAgIH07CisKICAg
ICAgICAgZXhwbGljaXQgTWVzc2FnZVBvcnRDaGFubmVsKFJlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbD4mJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUNoYW5uZWwoTWVzc2Fn
ZVBvcnQqLCBNZXNzYWdlUG9ydCopOwogCkBAIC03MSwxMCArODIsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpOwogCiAgICAgICAgIC8v
IFNlbmRzIGEgbWVzc2FnZSBhbmQgb3B0aW9uYWwgY2xvbmVkIHBvcnQgdG8gdGhlIHJlbW90ZSBw
b3J0LgotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlVG9SZW1vdGUoUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4mJiwgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5Pik7
CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2VUb1JlbW90ZShSZWY8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+KTsKIAogICAg
ICAgICAvLyBFeHRyYWN0cyBhIG1lc3NhZ2UgZnJvbSB0aGUgbWVzc2FnZSBxdWV1ZSBmb3IgdGhp
cyBwb3J0LgotICAgICAgICBib29sIHRyeUdldE1lc3NhZ2VGcm9tUmVtb3RlKFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+Jiwgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5PiYpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnREYXRhPiB0YWtlTWVzc2FnZUZy
b21SZW1vdGUoKTsKKworICAgICAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8RXZlbnREYXRhPj4g
dGFrZUFsbE1lc3NhZ2VzRnJvbVJlbW90ZSgpOwogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIGVu
dGFuZ2xlZCBwb3J0IGlmIHJ1biBieSB0aGUgc2FtZSB0aHJlYWQgKHNlZSBNZXNzYWdlUG9ydDo6
bG9jYWxseUVudGFuZ2xlZFBvcnQoKSBmb3IgbW9yZSBkZXRhaWxzKS4KICAgICAgICAgTWVzc2Fn
ZVBvcnQqIGxvY2FsbHlFbnRhbmdsZWRQb3J0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVz
c2FnZVBvcnRDaGFubmVsLmNwcAppbmRleCBkZThkM2RjMWRhMDYyNmVhNmY4ZTU4ZTI3YTFlMjc0
MjQxNGQ5ZTdmLi45YmUwYzY1YmRmNTdhYTIwNjI5MWRiZDUwZmNjNTkxMTVmMmI3ZjNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWwuY3BwCkBAIC0zNywxMiArMzcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE6OkV2ZW50RGF0YShSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIG1lc3NhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxNZXNz
YWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCi0gICAgOiBtX21lc3NhZ2UoV1RGTW92ZSht
ZXNzYWdlKSkKLSAgICAsIG1fY2hhbm5lbHMoV1RGTW92ZShjaGFubmVscykpCi17Ci19Ci0KIHZv
aWQgTWVzc2FnZVBvcnRDaGFubmVsOjpjcmVhdGVDaGFubmVsKE1lc3NhZ2VQb3J0KiBwb3J0MSwg
TWVzc2FnZVBvcnQqIHBvcnQyKQogewogICAgIFJlZjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bDo6TWVzc2FnZVBvcnRRdWV1ZT4gcXVldWUxID0gUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6
Ok1lc3NhZ2VQb3J0UXVldWU6OmNyZWF0ZSgpOwpAQCAtODYsMjcgKzgwLDI2IEBAIHZvaWQgTWVz
c2FnZVBvcnRDaGFubmVsOjpkaXNlbnRhbmdsZSgpCiAgICAgICAgIHJlbW90ZS0+c2V0UmVtb3Rl
UG9ydChudWxscHRyKTsKIH0KIAotdm9pZCBNZXNzYWdlUG9ydENoYW5uZWw6OnBvc3RNZXNzYWdl
VG9SZW1vdGUoUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mJiBtZXNzYWdlLCBzdGQ6OnVu
aXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQordm9pZCBNZXNzYWdl
UG9ydENoYW5uZWw6OnBvc3RNZXNzYWdlVG9SZW1vdGUoUmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4mJiBtZXNzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNo
YW5uZWxzKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtX2NoYW5uZWwtPm1fbXV0ZXgpOwogICAg
IGlmICghbV9jaGFubmVsLT5tX291dGdvaW5nUXVldWUpCiAgICAgICAgIHJldHVybjsKLSAgICBi
b29sIHdhc0VtcHR5ID0gbV9jaGFubmVsLT5tX291dGdvaW5nUXVldWUtPmFwcGVuZEFuZENoZWNr
RW1wdHkoc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnRE
YXRhPihXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNoYW5uZWxzKSkpOworICAgIGJvb2wgd2Fz
RW1wdHkgPSBtX2NoYW5uZWwtPm1fb3V0Z29pbmdRdWV1ZS0+YXBwZW5kQW5kQ2hlY2tFbXB0eShz
dGQ6Om1ha2VfdW5pcXVlPEV2ZW50RGF0YT4oV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjaGFu
bmVscykpKTsKICAgICBpZiAod2FzRW1wdHkgJiYgbV9jaGFubmVsLT5tX3JlbW90ZVBvcnQpCiAg
ICAgICAgIG1fY2hhbm5lbC0+bV9yZW1vdGVQb3J0LT5tZXNzYWdlQXZhaWxhYmxlKCk7CiB9CiAK
LWJvb2wgTWVzc2FnZVBvcnRDaGFubmVsOjp0cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYgbWVzc2FnZSwgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQ
b3J0Q2hhbm5lbEFycmF5PiYgY2hhbm5lbHMpCithdXRvIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6dGFr
ZU1lc3NhZ2VGcm9tUmVtb3RlKCkgLT4gc3RkOjp1bmlxdWVfcHRyPEV2ZW50RGF0YT4KIHsKICAg
ICBMb2NrSG9sZGVyIGxvY2sobV9jaGFubmVsLT5tX211dGV4KTsKLSAgICBhdXRvIHJlc3VsdCA9
IG1fY2hhbm5lbC0+bV9pbmNvbWluZ1F1ZXVlLT50cnlHZXRNZXNzYWdlKCk7Ci0gICAgaWYgKCFy
ZXN1bHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1lc3NhZ2UgPSByZXN1bHQtPm1l
c3NhZ2UoKTsKLSAgICBjaGFubmVscyA9IHJlc3VsdC0+Y2hhbm5lbHMoKTsKKyAgICByZXR1cm4g
bV9jaGFubmVsLT5tX2luY29taW5nUXVldWUtPnRha2VNZXNzYWdlKCk7Cit9CiAKLSAgICByZXR1
cm4gdHJ1ZTsKK2F1dG8gTWVzc2FnZVBvcnRDaGFubmVsOjp0YWtlQWxsTWVzc2FnZXNGcm9tUmVt
b3RlKCkgLT4gRGVxdWU8c3RkOjp1bmlxdWVfcHRyPEV2ZW50RGF0YT4+Cit7CisgICAgTG9ja0hv
bGRlciBsb2NrKG1fY2hhbm5lbC0+bV9tdXRleCk7CisgICAgcmV0dXJuIG1fY2hhbm5lbC0+bV9p
bmNvbWluZ1F1ZXVlLT50YWtlQWxsTWVzc2FnZXMoKTsKIH0KIAogdm9pZCBNZXNzYWdlUG9ydENo
YW5uZWw6OmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9kZWZhdWx0L1Bs
YXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vZGVmYXVsdC9Q
bGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oCmluZGV4IDhhMGJhYTA5N2FjMGZiZTY5YzNkNjI0
YTE2ODk0MzYwMzhhMzUzM2UuLjRlNDkxNmE0ZjEzNWY3YmU5NjYzMDg5ODZmNTA4MDNjOWFlZmNh
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWwuaApAQCAtNDMsMzAgKzQzLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAvLyBUaGUgZ29hbCBvZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIHRvIGVsaW1pbmF0
ZSBjb250ZW50aW9uIGV4Y2VwdCB3aGVuIGNsb25pbmcgb3IgY2xvc2luZyB0aGUgcG9ydCwgc28g
ZWFjaCBzaWRlIG9mIHRoZSBjaGFubmVsIGhhcyBpdHMgb3duIHNlcGFyYXRlIG11dGV4LgogICAg
IGNsYXNzIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiB7CiAgICAgcHVibGljOgotICAgICAg
ICBjbGFzcyBFdmVudERhdGEgewotICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXZl
bnREYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAg
ICAgICAgIEV2ZW50RGF0YShSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIG1lc3NhZ2Us
IHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4pOwotCi0gICAgICAgICAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlKCkgeyByZXR1cm4gbV9tZXNz
YWdlOyB9Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJy
YXk+IGNoYW5uZWxzKCkgeyByZXR1cm4gV1RGTW92ZShtX2NoYW5uZWxzKTsgfQotCi0gICAgICAg
IHByaXZhdGU6Ci0gICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX21l
c3NhZ2U7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJy
YXk+IG1fY2hhbm5lbHM7Ci0gICAgICAgIH07Ci0KICAgICAgICAgLy8gV3JhcHBlciBmb3IgTWVz
c2FnZVF1ZXVlIHRoYXQgYWxsb3dzIHVzIHRvIGRvIHRocmVhZCBzYWZlIHNoYXJpbmcgYnkgdHdv
IHByb3hpZXMuCiAgICAgICAgIGNsYXNzIE1lc3NhZ2VQb3J0UXVldWUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8TWVzc2FnZVBvcnRRdWV1ZT4gewogICAgICAgICBwdWJsaWM6CiAgICAg
ICAgICAgICBzdGF0aWMgUmVmPE1lc3NhZ2VQb3J0UXVldWU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTWVzc2FnZVBvcnRRdWV1ZSgpKTsgfQogCi0gICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YT4gdHJ5R2V0TWVz
c2FnZSgpCisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVsOjpF
dmVudERhdGE+IHRha2VNZXNzYWdlKCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9xdWV1ZS50cnlHZXRNZXNzYWdlKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGJvb2wgYXBwZW5kQW5kQ2hlY2tFbXB0eShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YT4gbWVzc2FnZSkKKyAgICAgICAgICAgIERlcXVlPHN0
ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YT4+IHRha2VBbGxNZXNz
YWdlcygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcXVldWUudGFr
ZUFsbE1lc3NhZ2VzKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgYXBwZW5k
QW5kQ2hlY2tFbXB0eShzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERh
dGE+JiYgbWVzc2FnZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbV9x
dWV1ZS5hcHBlbmRBbmRDaGVja0VtcHR5KFdURk1vdmUobWVzc2FnZSkpOwogICAgICAgICAgICAg
fQpAQCAtNzksNyArNzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHByaXZhdGU6
CiAgICAgICAgICAgICBNZXNzYWdlUG9ydFF1ZXVlKCkgeyB9CiAKLSAgICAgICAgICAgIE1lc3Nh
Z2VRdWV1ZTxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiBtX3F1ZXVlOwor
ICAgICAgICAgICAgTWVzc2FnZVF1ZXVlPE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPiBt
X3F1ZXVlOwogICAgICAgICB9OwogCiAgICAgICAgIH5QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGZhMTlhZWMzNmEyMGE0NjJjM2IwNmRkMDZlZjljNzVhMWQ3OGZmMjguLmM5
NjFkMDgxZDAyMDAzYzMxZDYxNjM2ZmZiMjdjMmM0OTlhODA4OWEgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAxNy0wMi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlY3Vyc2l2ZSBNZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSgpIGNhbGxzIGNhdXNlcyB0YWIg
dG8gYmVjb21lIHVucmVzcG9uc2l2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY4NTQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yOTgwODAwNT4K
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBBZGQgbGF5b3V0
IHRlc3QgY292ZXJhZ2UuIFRoZSB0ZXN0IHVzZWQgdG8gdGltZSBvdXQsIGl0IG5vdyBwYXNzZXMu
CisgICAgICAgIFRoZSB0ZXN0IGFsc28gcGFzc2VzIG9uIEZpcmVmb3ggYW5kIENocm9tZS4KKwor
ICAgICAgICAqIGZhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1wb3N0TWVzc2FnZS1yZWN1cnNpdmUt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQt
cG9zdE1lc3NhZ2UtcmVjdXJzaXZlLmh0bWw6IEFkZGVkLgorCiAyMDE3LTAyLTE3ICBSeWFuIEhh
ZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFJlYmFzZWxpbmUgdGVzdCBm
b3IgaW9zLXNpbXVsYXRvci13azIgYWZ0ZXIgcjIxMjUyMi4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL21lc3NhZ2UtcG9ydC1wb3N0TWVzc2FnZS1yZWN1cnNpdmUtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LXBvc3RNZXNzYWdl
LXJlY3Vyc2l2ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFkZWQ5MGM5YzIwYzNhZTc3OTdl
YmNlMDJjMDhhZDJmNWFkNDM4MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL21lc3NhZ2UtcG9ydC1wb3N0TWVzc2FnZS1yZWN1cnNpdmUtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTAgQEAKK1Rlc3RzIHRoYXQgcmVjdXJzaXZlIGNhbGxzIHRvIE1lc3NhZ2VQb3J0
LnBvc3RNZXNzYWdlKCkgZG8gbm90IHByZWVtcHQgdGltZXJzLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBUaW1lciBoYXMgZmlyZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LXBvc3RNZXNzYWdlLXJlY3Vyc2l2ZS5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvbWVzc2FnZS1wb3J0LXBvc3RNZXNzYWdlLXJlY3Vyc2l2ZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlhZTczMjFjOTk4YWQzZDExNDI1MmNmYzBkZTMyYjc5MjEyYTc0NjMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLXBvcnQt
cG9zdE1lc3NhZ2UtcmVjdXJzaXZlLmh0bWwKQEAgLTAsMCArMSw1MCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgcmVj
dXJzaXZlIGNhbGxzIHRvIE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKCkgZG8gbm90IHByZWVtcHQg
dGltZXJzLiIpOworanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2Z1bmN0aW9uIHNpbXVsYXRlU2V0
SW1tZWRpYXRlKCkKK3sKKyAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwor
ICAgIC8vIFVzZSBhIGZpZm8gbGlua2VkIGxpc3QgdG8gY2FsbCBjYWxsYmFja3MgaW4gdGhlIHJp
Z2h0IG9yZGVyLgorICAgIHZhciBoZWFkID0ge307CisgICAgdmFyIHRhaWwgPSBoZWFkOworICAg
IGNoYW5uZWxbJ3BvcnQxJ10ub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICho
ZWFkLm5leHQgIT0gbnVsbCkgeworICAgICAgICAgICAgaGVhZCA9IGhlYWQubmV4dDsKKyAgICAg
ICAgICAgIHZhciBjYiA9IGhlYWQuY2I7CisgICAgICAgICAgICBoZWFkLmNiID0gbnVsbDsKKyAg
ICAgICAgICAgIGNiKCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBmdW5jdGlvbihj
YikgeworICAgICAgICB0YWlsLm5leHQgPSB7Y2I6IGNifTsKKyAgICAgICAgdGFpbCA9IHRhaWwu
bmV4dDsKKyAgICAgICAgY2hhbm5lbFsncG9ydDInXS5wb3N0TWVzc2FnZSgwKTsKKyAgICB9Owor
fQorCit3aW5kb3cuc2V0SW1tZWRpYXRlID0gc2ltdWxhdGVTZXRJbW1lZGlhdGUoKTsKKwordmFy
IHNob3VsZEV4aXQgPSBmYWxzZTsKKworZnVuY3Rpb24gaXRlcmF0ZSgpIHsKKyAgICBpZiAoc2hv
dWxkRXhpdCkgeworICAgICAgICB0ZXN0UGFzc2VkKCJUaW1lciBoYXMgZmlyZWQuIik7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNldEltbWVk
aWF0ZShpdGVyYXRlKTsKK30KKworc2V0SW1tZWRpYXRlKGl0ZXJhdGUpOworc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICBzaG91bGRFeGl0ID0gdHJ1ZTsKK30sIDEwKTsKKzwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>