<?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>184307</bug_id>
          
          <creation_ts>2018-04-04 09:16:15 -0700</creation_ts>
          <short_desc>Custom elements in a reaction queue can lose its JS wrapper and become HTMLUnknownElement</short_desc>
          <delta_ts>2018-09-26 12:57:50 -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>DOM</component>
          <version>Safari 11</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>macOS 10.13</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=183586</see_also>
          <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>
          
          <blocked>154907</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>jairam.ramanathan</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>ggaren</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>koivisto</cc>
    
    <cc>mariakaval</cc>
    
    <cc>rniwa</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1411750</commentid>
    <comment_count>0</comment_count>
      <attachid>337178</attachid>
    <who name="">jairam.ramanathan</who>
    <bug_when>2018-04-04 09:16:15 -0700</bug_when>
    <thetext>Created attachment 337178
Test page to reproduce issue

We&apos;ve seen intermittent failures where custom elements fail to be upgraded (i.e. end up as HTMLUnknownElement rather than the expected class) when they&apos;re being created via an innerHTML call.  The attached test case should demonstrate the issue: it creates an innerHTML string consistent of 1000 &lt;my-component&gt;&lt;/my-component&gt; instances and then sets it in the DOM 1000 times.  In my runs, I&apos;m seeing the connected callback getting invoked in an invalid state hundreds of times for each time through this loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412269</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-05 19:48:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/39228664&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444284</commentid>
    <comment_count>2</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2018-07-23 09:21:21 -0700</bug_when>
    <thetext>Setting innerHTML ends up calling replaceChildrenWithFragment (from Source/WebCore/editing/markup.cpp) which performs several node operations internally (e.g. appendChild). These operations have CEReactions and so should ensure upgrade reactions are invoked when using the public DOM API: https://dom.spec.whatwg.org/#interface-node ; I wonder if we should do something similar winternally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1445350</commentid>
    <comment_count>3</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2018-07-26 01:27:16 -0700</bug_when>
    <thetext>(In reply to Frédéric Wang (:fredw) from comment #2)
&gt; Setting innerHTML ends up calling replaceChildrenWithFragment (from
&gt; Source/WebCore/editing/markup.cpp) which performs several node operations
&gt; internally (e.g. appendChild). These operations have CEReactions and so
&gt; should ensure upgrade reactions are invoked when using the public DOM API:
&gt; https://dom.spec.whatwg.org/#interface-node ; I wonder if we should do
&gt; something similar winternally.

I stand corrected. This is supposed to be already handled by the CEReaction extended attribute on innerHTML.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1445687</commentid>
    <comment_count>4</comment_count>
      <attachid>345910</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2018-07-27 03:05:49 -0700</bug_when>
    <thetext>Created attachment 345910
testcase (reformatted)

I&apos;m not able to reproduce the bug in debug mode :-(

I&apos;m able to reproduce the bug in release mode. However, I also tried adding a RELEASE_ASSERT_NOT_REACHED() in the HTMLUnknownElement constructor but it is never reached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1447528</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-02 22:48:26 -0700</bug_when>
    <thetext>Oh, this isn&apos;t about the custom elements not getting updated. It&apos;s that upgraded custom elements sometimes end up losing its JS wrappers :( When it does, we end up re-creating new wrapper so we end up with HTMLUnknownElement JS wrapper without the override to [[Prototype]].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1447546</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-03 00:46:47 -0700</bug_when>
    <thetext>Huh, there is a bunch of bugs here but one of the primary issue here is that innerHTML is synchronously constructing custom elements. I don&apos;t think we&apos;re supposed to do that.

Fixing that somehow works around the GC problem but it just moves the bug to elsewhere. I&apos;d have to come up with a better test case which doesn&apos;t use innerHTML so that the test case will continue to function even after we&apos;ve switched innerHTML implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1447547</commentid>
    <comment_count>7</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2018-08-03 01:01:56 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #6)
&gt; Huh, there is a bunch of bugs here but one of the primary issue here is that
&gt; innerHTML is synchronously constructing custom elements. I don&apos;t think we&apos;re
&gt; supposed to do that.

I think when setting innerHTML, the HTML fragment parsing algorithm is used so we should create an HTMLElement and enqueue an upgrade for later per https://html.spec.whatwg.org/multipage/parsing.html#create-an-element-for-the-token... This is what the patch on bug 183586 is supposed to do (see also bug 188190 for preliminary work).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1447549</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-08-03 01:05:49 -0700</bug_when>
    <thetext>(In reply to Frédéric Wang (:fredw) from comment #7)
&gt; (In reply to Ryosuke Niwa from comment #6)
&gt; &gt; Huh, there is a bunch of bugs here but one of the primary issue here is that
&gt; &gt; innerHTML is synchronously constructing custom elements. I don&apos;t think we&apos;re
&gt; &gt; supposed to do that.
&gt; 
&gt; I think when setting innerHTML, the HTML fragment parsing algorithm is used
&gt; so we should create an HTMLElement and enqueue an upgrade for later per
&gt; https://html.spec.whatwg.org/multipage/parsing.html#create-an-element-for-
&gt; the-token... This is what the patch on bug 183586 is supposed to do (see
&gt; also bug 188190 for preliminary work).

That patch fixes this problem at the right place. I&apos;ll post a patch to fix it properly elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459663</commentid>
    <comment_count>9</comment_count>
      <attachid>349736</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-13 23:05:48 -0700</bug_when>
    <thetext>Created attachment 349736
Reproduction for trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459670</commentid>
    <comment_count>10</comment_count>
      <attachid>349740</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-13 23:49:38 -0700</bug_when>
    <thetext>Created attachment 349740
WIP logging

Interesting. Simply retaining elements in the custom element reaction queue isn&apos;t enough.
The attached patch sill knows some failures.

Note that one has to manually modify JSNodeOwner::finalize in DerivedSource to do the following:

extern HashMap&lt;Element*, unsigned&gt;&amp; finalizedElements();

void JSNodeOwner::finalize(JSC::Handle&lt;JSC::Unknown&gt; handle, void* context)
{
    auto* jsNode = static_cast&lt;JSNode*&gt;(handle.slot()-&gt;asCell());
    auto&amp; world = *static_cast&lt;DOMWrapperWorld*&gt;(context);
    auto&amp; node = jsNode-&gt;wrapped();
    if (is&lt;Element&gt;(node) &amp;&amp; node.isDefinedCustomElement()) {
        finalizedElements().set(&amp;downcast&lt;Element&gt;(node), 1);
    }
    uncacheWrapper(world, &amp;jsNode-&gt;wrapped(), jsNode);
}

If I add console.log right above where we append the result,
I see that sometimes the wrapper goes away without this code getting code:

CONSOLE MESSAGE: line 37: PASS!
CONSOLE MESSAGE: line 37: PASS!
Found a wrapper-less node! finalized=0
CONSOLE MESSAGE: line 35: FAIL:1999
CONSOLE MESSAGE: line 37: PASS!
Found a wrapper-less node! finalized=0
CONSOLE MESSAGE: line 35: FAIL:1999
CONSOLE MESSAGE: line 37: PASS!
CONSOLE MESSAGE: line 37: PASS!
Found a wrapper-less node! finalized=0
CONSOLE MESSAGE: line 35: FAIL:1999
CONSOLE MESSAGE: line 37: PASS!
Found a wrapper-less node! finalized=1
CONSOLE MESSAGE: line 35: FAIL:1999
CONSOLE MESSAGE: line 37: PASS!
CONSOLE MESSAGE: line 37: PASS!
CONSOLE MESSAGE: line 37: PASS!
CONSOLE MESSAGE: line 37: PASS!
CONSOLE MESSAGE: line 37: PASS!
Found a wrapper-less node! finalized=1
CONSOLE MESSAGE: line 35: FAIL:1999
CONSOLE MESSAGE: line 37: PASS!
CONSOLE MESSAGE: line 37: PASS!
CONSOLE MESSAGE: line 37: PASS!
CONSOLE MESSAGE: line 37: PASS!

It&apos;s a tad strange that JSElement wrappers are going away without JSNodeOwner::finalize getting called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459674</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-14 00:14:39 -0700</bug_when>
    <thetext>This is VERY strange. Even if I leaked every custom element&apos;s JS wrapper by adding it as a property to the global object using a private name, inline wrappers are not there. Maybe somehow we&apos;re failing to create a JS element wrapper in some cases???

Index: Source/WebCore/bindings/js/JSDOMWindowCustom.cpp
===================================================================
--- Source/WebCore/bindings/js/JSDOMWindowCustom.cpp	(revision 236001)
+++ Source/WebCore/bindings/js/JSDOMWindowCustom.cpp	(working copy)
@@ -70,11 +70,13 @@
 {
     if (Frame* frame = wrapped().frame())
         visitor.addOpaqueRoot(frame);
-    
+
     // Normally JSEventTargetCustom.cpp&apos;s JSEventTarget::visitAdditionalChildren() would call this. But
     // even though DOMWindow is an EventTarget, JSDOMWindow does not subclass JSEventTarget, so we need
     // to do this here.
     wrapped().visitJSEventListeners(visitor);
+
+    CustomElementReactionQueue::visitEnqueuedElements(visitor);
 }
 
 #if ENABLE(USER_MESSAGE_HANDLERS)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459695</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-14 01:17:39 -0700</bug_when>
    <thetext>Oh, I was missing upgrade case. Okay, so leaking all JS element wrappers would *fix* this bug. It&apos;s still strange that JSNodeOwner::finalize isn&apos;t running for some wrappers being collected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460007</commentid>
    <comment_count>13</comment_count>
      <attachid>349844</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-14 18:47:58 -0700</bug_when>
    <thetext>Created attachment 349844
WIP

Ah, the issue was that CustomElementReactionQueue::invokeAll was swapping Vector.
Without it, it works for this reproduction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460852</commentid>
    <comment_count>14</comment_count>
      <attachid>350093</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-18 21:29:59 -0700</bug_when>
    <thetext>Created attachment 350093
WIP2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460853</commentid>
    <comment_count>15</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-09-18 21:32:09 -0700</bug_when>
    <thetext>Attachment 350093 did not pass style-queue:


ERROR: Source/WebCore/dom/CustomElementReactionQueue.h:31:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
Total errors found: 1 in 6 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>1461100</commentid>
    <comment_count>16</comment_count>
      <attachid>350146</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-19 13:24:12 -0700</bug_when>
    <thetext>Created attachment 350146
WIP3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461109</commentid>
    <comment_count>17</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-09-19 13:43:12 -0700</bug_when>
    <thetext>Attachment 350146 did not pass style-queue:


ERROR: Source/WebCore/dom/StrongNodeRef.cpp:27:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Total errors found: 1 in 6 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>1461164</commentid>
    <comment_count>18</comment_count>
      <attachid>350157</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-19 16:21:22 -0700</bug_when>
    <thetext>Created attachment 350157
WIP4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461165</commentid>
    <comment_count>19</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-09-19 16:22:46 -0700</bug_when>
    <thetext>Attachment 350157 did not pass style-queue:


ERROR: Source/WebCore/dom/StrongNodeRef.cpp:27:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Total errors found: 1 in 7 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>1461270</commentid>
    <comment_count>20</comment_count>
      <attachid>350178</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-20 00:47:34 -0700</bug_when>
    <thetext>Created attachment 350178
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462004</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-21 12:39:09 -0700</bug_when>
    <thetext>Ping reviewers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462013</commentid>
    <comment_count>22</comment_count>
      <attachid>350178</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-09-21 12:53:31 -0700</bug_when>
    <thetext>Comment on attachment 350178
Fixes the bug

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

r=me if you answer my question?

&gt; Source/WebCore/dom/StrongNodeRef.cpp:35
&gt; +    static NeverDestroyed&lt;HashCountedSet&lt;Node*&gt;&gt; map;

Are there any Nodes that can exist in a worker? If they can&apos;t, can you add an assertion that we are on the MainThread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462083</commentid>
    <comment_count>23</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-21 14:12:41 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #22)
&gt; Comment on attachment 350178 [details]
&gt; Fixes the bug
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=350178&amp;action=review
&gt; 
&gt; r=me if you answer my question?
&gt; 
&gt; &gt; Source/WebCore/dom/StrongNodeRef.cpp:35
&gt; &gt; +    static NeverDestroyed&lt;HashCountedSet&lt;Node*&gt;&gt; map;
&gt; 
&gt; Are there any Nodes that can exist in a worker? If they can&apos;t, can you add
&gt; an assertion that we are on the MainThread?

Node can only be mutated in DOM but GC threads accesses them via isReachableFromOpaqueRoot while the main thread is suspended. As such, we can&apos;t add a isMainThread check although we can check if it&apos;s main thread or GC threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462096</commentid>
    <comment_count>24</comment_count>
      <attachid>350178</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-09-21 14:31:59 -0700</bug_when>
    <thetext>Comment on attachment 350178
Fixes the bug

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

&gt; Source/WebCore/dom/StrongNodeRef.h:36
&gt; +class StrongNodeRefMap {

I wonder if we can come up with a better name.

You can probably remove &quot;Node&quot; from the name because the template declaration prohibits non-Node types already, and the declaration site will always name the Node type.

Some options:

GCReachableRef
GCProtectedRef
StrongRef</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462164</commentid>
    <comment_count>25</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-09-21 16:31:57 -0700</bug_when>
    <thetext>Can you run some tests with --world-leaks with and without the patch, and check that you didn&apos;t introduce any new document leaks?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462170</commentid>
    <comment_count>26</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-21 16:46:10 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #25)
&gt; Can you run some tests with --world-leaks with and without the patch, and
&gt; check that you didn&apos;t introduce any new document leaks?

./Tools/Scripts/run-webkit-tests --world-leaks --debug LayoutTests/fast/custom-elements/ LayoutTests/imported/w3c/web-platform-tests/custom-elements/

shows no leaks with the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462188</commentid>
    <comment_count>27</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-21 17:17:19 -0700</bug_when>
    <thetext>Committed r236376: &lt;https://trac.webkit.org/changeset/236376&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462267</commentid>
    <comment_count>28</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-09-21 21:06:19 -0700</bug_when>
    <thetext>I don’t understand this. There is lots of code that can keep an element alive; in all such cases the element needs to keep its wrapper from being garbage collected since if anyone can recover a pointer to the element, it can also get to the wrapper. I don’t understand how this case is different.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462296</commentid>
    <comment_count>29</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-21 22:35:20 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #28)
&gt; I don’t understand this. There is lots of code that can keep an element
&gt; alive; in all such cases the element needs to keep its wrapper from being
&gt; garbage collected since if anyone can recover a pointer to the element, it
&gt; can also get to the wrapper. I don’t understand how this case is different.

Yes, there is a lot of wrong code in WebCore right now. Basically anywhere where keep a Ref/RefPtr to a Node in the order to use it later has the same bug. e.g. https://bugs.webkit.org/show_bug.cgi?id=167652 is an issue about slotchange event.

I know off the top of my head mutation observers &amp; EventDispatcher::dispatchEvent also have the same issue. There are probably hundreds of other places where a similar bug resides.

As you&apos;re well aware, ordinarily, a node&apos;s wrapper is kept alive by the virtue of it being in a document. Because document is an active DOM object, it&apos;s marked by GC as long as it&apos;s alive, and isReachableFromOpaqueRoot would return true on any node which is connected to such a document. Similarly, any other C++ code which holds onto Ref as a part of its tree structure / DOM API relationship such as node lists, etc... add those related objects in visitAdditionalChildren.

However, in cases where WebCore / C++ code temporarily holds onto an element or some other DOM object exposed to scripts via Ref/RefPtr, there is no clear ownership. e.g. when a custom element is enqueued onto a reaction queue and subsequently removed from a document, it&apos;s unclear as to which object will be responsible for visiting this node.

This patch&apos;s goal is to introduce a generic mechanism which can be used to retain JS wrappers of these scenarios. I intend to fix more places in the coming days / weeks / months / years.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462469</commentid>
    <comment_count>30</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-09-22 20:55:11 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #29)
&gt; This patch&apos;s goal is to introduce a generic mechanism which can be used to
&gt; retain JS wrappers of these scenarios. I intend to fix more places in the
&gt; coming days / weeks / months / years.

I am not sure this is the right way to fix this. I think we should pursue a fix that doesn’t require us to put this in tens or hundreds of places. I seem to recall a different design for this that I discussed with Geoff many years back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462976</commentid>
    <comment_count>31</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-24 16:08:27 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #30)
&gt; (In reply to Ryosuke Niwa from comment #29)
&gt; &gt; This patch&apos;s goal is to introduce a generic mechanism which can be used to
&gt; &gt; retain JS wrappers of these scenarios. I intend to fix more places in the
&gt; &gt; coming days / weeks / months / years.
&gt; 
&gt; I am not sure this is the right way to fix this. I think we should pursue a
&gt; fix that doesn’t require us to put this in tens or hundreds of places. I
&gt; seem to recall a different design for this that I discussed with Geoff many
&gt; years back.

Hm... this is the design that came out of the discussions I&apos;ve had with Geoff &amp; JSC folks. Do you recall what the alternative design you discussed with Geoff was? If there is a better design, we should clearly adopt that instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463612</commentid>
    <comment_count>32</comment_count>
      <attachid>350178</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-09-26 09:14:58 -0700</bug_when>
    <thetext>Comment on attachment 350178
Fixes the bug

Another option is to reuse EventTarget::isFiringEventListeners(). Might be faster to set / check a bit vs hash table. Clarifies that this behavior is all about async event dispatch. (A strong GC reference is a memory leak unless you can prove that some future event will clear the reference; stating that this reference is for the purpose of firing an async event listener might help communicate that.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463617</commentid>
    <comment_count>33</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-09-26 09:22:27 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #32)
&gt; Another option is to reuse EventTarget::isFiringEventListeners(). Might be
&gt; faster to set / check a bit vs hash table. Clarifies that this behavior is
&gt; all about async event dispatch. (A strong GC reference is a memory leak
&gt; unless you can prove that some future event will clear the reference;
&gt; stating that this reference is for the purpose of firing an async event
&gt; listener might help communicate that.)

This shows that I don’t yet understand the issues clearly enough. I almost wish we had a white paper about it; hard to get right. When reading Ryosuke’s earlier comments, I thought the issue was literally &quot;any object in the DOM that holds a strong reference to another object in the DOM&quot;. But you seem to be saying here that it has a somewhat narrower scope and events the code plans to dispatch in the future is a key factor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463627</commentid>
    <comment_count>34</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-09-26 09:37:37 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #30)
&gt; I am not sure this is the right way to fix this. I think we should pursue a
&gt; fix that doesn’t require us to put this in tens or hundreds of places. I
&gt; seem to recall a different design for this that I discussed with Geoff many
&gt; years back.

Ryosuke, can you make a list of where we might need to use this technique? Let&apos;s see how many places it is.

I&apos;m not sure if there&apos;s another way to solve this problem.

What&apos;s hard about this case is that a JavaScript event will fire on a node in the future, and the only record of that fact is a C++ RefPtr, and no other references in JS or C++ point to that node. That makes this case similar to an ActiveDOMObject for audio or video or networking, where the only thing that tells us that the wrapper should stay alive is the &quot;hasPendingActivity()&quot; state.

We can&apos;t say &quot;If a RefPtr points to a node, the node&apos;s wrapper stays alive&quot;, since that&apos;s a direct circular reference.

There might be a way to give a node two reference counts, one for its wrappers and one for its RefPtrs, and say &quot;If a node&apos;s RefPtr refcount is non-zero then its wrapper stays alive, and if either refcount is non-zero then the node stays alive&quot;. That might still trigger an indirect circular reference. But maybe it would Just Work (TM).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463702</commentid>
    <comment_count>35</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-09-26 12:57:50 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #33)
&gt; (In reply to Geoffrey Garen from comment #32)
&gt; &gt; Another option is to reuse EventTarget::isFiringEventListeners(). Might be
&gt; &gt; faster to set / check a bit vs hash table. Clarifies that this behavior is
&gt; &gt; all about async event dispatch. (A strong GC reference is a memory leak
&gt; &gt; unless you can prove that some future event will clear the reference;
&gt; &gt; stating that this reference is for the purpose of firing an async event
&gt; &gt; listener might help communicate that.)
&gt; 
&gt; This shows that I don’t yet understand the issues clearly enough. I almost
&gt; wish we had a white paper about it; hard to get right. When reading
&gt; Ryosuke’s earlier comments, I thought the issue was literally &quot;any object in
&gt; the DOM that holds a strong reference to another object in the DOM&quot;. But you
&gt; seem to be saying here that it has a somewhat narrower scope and events the
&gt; code plans to dispatch in the future is a key factor.

The synapsis of the problem is that when C++ code retains a Node for a later use (e.g. async event, mutation observer, etc...), there is no way for GC to know that the wrapper of such a node needs to be retained.

For example, let&apos;s say we have an element which is removed from a tree with a mutation observer which observes the tree. WebKit would add a mutation record of this element, and invokes the observer at the end of the current microtask. If we were to run GC between the two, there is no way for GC to realize that this element, which is no longer in the document and not referenced by any JS needs to be kept alive.

GCReachableRef is meant to address these temporary C++-only references to nodes. It&apos;s not meant to retain objects in live data structures like Node tree, CSS OM, etc... which need to express relationship between objects with JS wrappers and JS objects. An alternative name I&apos;ve considered was something like AsyncEventRef and DeferredNodeRef.

(In reply to Geoffrey Garen from comment #34)
&gt; (In reply to Darin Adler from comment #30)
&gt; &gt; I am not sure this is the right way to fix this. I think we should pursue a
&gt; &gt; fix that doesn’t require us to put this in tens or hundreds of places. I
&gt; &gt; seem to recall a different design for this that I discussed with Geoff many
&gt; &gt; years back.
&gt; 
&gt; Ryosuke, can you make a list of where we might need to use this technique?
&gt; Let&apos;s see how many places it is.

Of the top of my head, I can think of:
- Custom elements reaction queues (Fixed)
- slotchange event (Fixed in webkit.org/b/167652)
- MutationObserver (still broken)
- Event path (still broken) - This is the list of event targets we collect in EventDispatcher. Each target can be removed from its parent and lose its wrapper while we&apos;re invoking event listeners on other targets.
- GenericEventQueue (still broken)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>337178</attachid>
            <date>2018-04-04 09:16:15 -0700</date>
            <delta_ts>2018-09-13 23:05:48 -0700</delta_ts>
            <desc>Test page to reproduce issue</desc>
            <filename>safariTest.html</filename>
            <type>text/html</type>
            <size>920</size>
            <attacher>jairam.ramanathan</attacher>
            
              <data encoding="base64">PGh0bWw+CiAgPGhlYWQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJCWNs
YXNzIE15Q29tcG9uZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQgewoJCQkJY29uc3RydWN0b3IoKSB7
CgkJCQkJc3VwZXIoKTsKCQkJCX0KCQkJCQoJCQkJY29ubmVjdGVkQ2FsbGJhY2soKSB7CgkJCQkJ
aWYgKHRoaXMgaW5zdGFuY2VvZiBIVE1MVW5rbm93bkVsZW1lbnQpIHsKCQkJCQkJY29uc29sZS5s
b2coIkZvdW5kIEhUTUxVbmtub3duRWxlbWVudCBpbnN0ZWFkIG9mIE15Q29tcG9uZW50Iik7CgkJ
CQkJfQoJCQkJfQoJCQl9CiAgICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZSgibXktY29tcG9uZW50
IiwgTXlDb21wb25lbnQpOwogICAgICBmdW5jdGlvbiBzdGFydExvb3AoKSB7CiAgICAgICAgdmFy
IGNvbnRlbnQgPSAnJzsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykgewog
ICAgICAgICAgY29udGVudCArPSAnPG15LWNvbXBvbmVudD48L215LWNvbXBvbmVudD4nCiAgICAg
ICAgfQogICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWxl
bWVudENvbnRhaW5lciIpOwogICAgICAgIGNvbnNvbGUuZ3JvdXAoImxvb3BpbmciKTsKICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykgewogICAgICAgICAgY29udGFpbmVyLmlu
bmVySFRNTCA9IGNvbnRlbnQ7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUubG9nKCJkb25lIik7
CiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICB9CiAgICA8L3NjcmlwdD4KICA8L2hl
YWQ+CiAgPGJvZHk+CiAgICA8YnV0dG9uIG9uY2xpY2s9InN0YXJ0TG9vcCgpIj5TdGFydCBMb29w
PC9idXR0b24+CiAgICA8ZGl2IGlkPSJlbGVtZW50Q29udGFpbmVyIj48L2Rpdj4KICA8L2JvZHk+
CjwvaHRtbD4=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>345910</attachid>
            <date>2018-07-27 03:05:49 -0700</date>
            <delta_ts>2018-09-13 23:05:48 -0700</delta_ts>
            <desc>testcase (reformatted)</desc>
            <filename>bug184307-custom-element-innerHTML.html</filename>
            <type>text/html</type>
            <size>957</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">PGh0bWw+CiAgPGhlYWQ+CiAgICA8c2NyaXB0PgogICAgICBjbGFzcyBNeUNvbXBvbmVudCBleHRl
bmRzIEhUTUxFbGVtZW50IHsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVy
KCk7CiAgICAgICAgfQogICAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgaWYg
KHRoaXMgaW5zdGFuY2VvZiBIVE1MVW5rbm93bkVsZW1lbnQpCiAgICAgICAgICAgIGNvbnNvbGUu
bG9nKCJIVE1MVW5rbm93bkVsZW1lbnQiKTsKICAgICAgICAgIGVsc2UgaWYgKHRoaXMgaW5zdGFu
Y2VvZiBNeUNvbXBvbmVudCkKICAgICAgICAgICAgY29uc29sZS5sb2coIk15Q29tcG9uZW50Iik7
CiAgICAgICAgfQogICAgICB9CiAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUoIm15LWNvbXBvbmVu
dCIsIE15Q29tcG9uZW50KTsKICAgIGZ1bmN0aW9uIHN0YXJ0TG9vcCgpIHsKICAgICAgdmFyIGNv
bnRlbnQgPSAnJzsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBpKyspCiAgICAgICAg
Y29udGVudCArPSAnPG15LWNvbXBvbmVudD48L215LWNvbXBvbmVudD4nCiAgICAgIHZhciBjb250
YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWxlbWVudENvbnRhaW5lciIpOwogICAg
ICBjb25zb2xlLmdyb3VwKCJsb29waW5nIik7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTAw
OyBpKyspCiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGNvbnRlbnQ7CiAgICAgIGNvbnNv
bGUubG9nKCJkb25lIik7CiAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTsKICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAKICA8L3NjcmlwdD4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8YnV0
dG9uIG9uY2xpY2s9InN0YXJ0TG9vcCgpIj5TdGFydCBMb29wPC9idXR0b24+CiAgICA8ZGl2IGlk
PSJlbGVtZW50Q29udGFpbmVyIj48L2Rpdj4KICA8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>349736</attachid>
            <date>2018-09-13 23:05:48 -0700</date>
            <delta_ts>2018-09-20 00:53:58 -0700</delta_ts>
            <desc>Reproduction for trunk</desc>
            <filename>bug184307.html</filename>
            <type>text/html</type>
            <size>1033</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8Ym9keT4KPHByZSBpZD0ibG9nIj48L3ByZT4KPGRpdiBp
ZD0iY29udGFpbmVyIj48c2NyaXB0PgpsZXQgZmFpbENvdW50ID0gMDsKY2xhc3MgTXlDb21wb25l
bnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7CiAgICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAg
ICAgICBpZiAoZmlyc3QpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nv
bnRhaW5lcicpLmlubmVySFRNTCA9IGNvbnRlbnQ7CiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7
CiAgICAgICAgfQogICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBNeUNvbXBvbmVudCkpCiAg
ICAgICAgICAgIGZhaWxDb3VudCsrOwogICAgfQp9CmN1c3RvbUVsZW1lbnRzLmRlZmluZSgibXkt
Y29tcG9uZW50IiwgTXlDb21wb25lbnQpOwoKaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgdGVz
dFJ1bm5lci5kdW1wQXNUZXh0KCk7CgpsZXQgY29udGVudCA9ICcnOwpmb3IgKGxldCBpID0gMDsg
aSA8IDEwMDA7IGkrKykKICAgIGNvbnRlbnQgKz0gJzxteS1jb21wb25lbnQ+PC9teS1jb21wb25l
bnQ+JwoKbGV0IGZpcnN0ID0gdHJ1ZTsKZm9yIChsZXQgdGVzdCA9IDA7IHRlc3QgPCAyMDsgdGVz
dCsrKSB7CiAgICBmYWlsQ291bnQgPSAwOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDsgaSsr
KSB7CiAgICAgICAgZmlyc3QgPSB0cnVlOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb250YWluZXInKS50ZXh0Q29udGVudCA9ICcnOwogICAgICAgIGRvY3VtZW50LndyaXRlKGA8
ZGl2PiR7Y29udGVudH08L2Rpdj5gKTsKICAgIH0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdsb2cnKS5hcHBlbmQoZmFpbENvdW50ID8gYEZBSUwgLSAke2ZhaWxDb3VudH0gZWxlbWVudHMg
bG9zdCB3cmFwcGVyc1xuYCA6ICdQQVNTXG4nKTsKfQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y29udGFpbmVyJykudGV4dENvbnRlbnQgPSAnJzsKCjwvc2NyaXB0PjwvZGl2Pgo8L2JvZHk+Cjwv
aHRtbD4KCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>349740</attachid>
            <date>2018-09-13 23:49:38 -0700</date>
            <delta_ts>2018-09-14 18:47:58 -0700</delta_ts>
            <desc>WIP logging</desc>
            <filename>wip184307-logging.patch</filename>
            <type>text/plain</type>
            <size>4880</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21F
bGVtZW50SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjM2MDAxKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIwLDYgKzIyMCwxNSBAQAogICAgIGVsZW1lbnQuc2V0SXNEZWZpbmVkQ3VzdG9tRWxlbWVu
dCgqdGhpcyk7CiB9CiAKK0hhc2hNYXA8RWxlbWVudCosIHVuc2lnbmVkPiYgZmluYWxpemVkRWxl
bWVudHMoKTsKKworYm9vbCBoYXNTZWVuQnVnID0gZmFsc2U7CitIYXNoTWFwPEVsZW1lbnQqLCB1
bnNpZ25lZD4mIGZpbmFsaXplZEVsZW1lbnRzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaE1hcDxFbGVtZW50KiwgdW5zaWduZWQ+PiBtYXA7CisgICAgcmV0dXJuIG1hcDsKK30K
Kwogdm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6Omludm9rZUNhbGxiYWNrKEVsZW1lbnQm
IGVsZW1lbnQsIEpTT2JqZWN0KiBjYWxsYmFjaywgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKEV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgTWFya2VkQXJndW1lbnRCdWZmZXImKT4mIGFk
ZEFyZ3VtZW50cykKIHsKICAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpCkBAIC0yMzgsNiAr
MjQ3LDExIEBACiAgICAgICAgIHJldHVybjsKICAgICBFeGVjU3RhdGUqIHN0YXRlID0gZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKKyAgICBhdXRvKiB3cmFwcGVyID0gZWxlbWVudC53cmFw
cGVyKCk7CisgICAgaWYgKCF3cmFwcGVyICYmICFoYXNTZWVuQnVnKSB7CisgICAgICAgIGhhc1Nl
ZW5CdWcgPSB0cnVlOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZvdW5kIGEgd3JhcHBlci1s
ZXNzIG5vZGUhIGZpbmFsaXplZD0lZFxuIiwgZmluYWxpemVkRWxlbWVudHMoKS5jb250YWlucygm
ZWxlbWVudCkpOworICAgIH0KICAgICBKU09iamVjdCoganNFbGVtZW50ID0gYXNPYmplY3QodG9K
UyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAJKHJldmlzaW9uIDIzNjAwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTEgKzcwLDEzIEBA
CiB7CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHdyYXBwZWQoKS5mcmFtZSgpKQogICAgICAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QoZnJhbWUpOwotICAgIAorCiAgICAgLy8gTm9ybWFsbHkgSlNF
dmVudFRhcmdldEN1c3RvbS5jcHAncyBKU0V2ZW50VGFyZ2V0Ojp2aXNpdEFkZGl0aW9uYWxDaGls
ZHJlbigpIHdvdWxkIGNhbGwgdGhpcy4gQnV0CiAgICAgLy8gZXZlbiB0aG91Z2ggRE9NV2luZG93
IGlzIGFuIEV2ZW50VGFyZ2V0LCBKU0RPTVdpbmRvdyBkb2VzIG5vdCBzdWJjbGFzcyBKU0V2ZW50
VGFyZ2V0LCBzbyB3ZSBuZWVkCiAgICAgLy8gdG8gZG8gdGhpcyBoZXJlLgogICAgIHdyYXBwZWQo
KS52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CisKKyAgICBDdXN0b21FbGVtZW50UmVh
Y3Rpb25RdWV1ZTo6dmlzaXRFbnF1ZXVlZEVsZW1lbnRzKHZpc2l0b3IpOwogfQogCiAjaWYgRU5B
QkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5jcHAJKHJldmlzaW9uIDIzNjAwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODkxLDYgKzg5MSw4IEBACiAgICAgcmV0dXJu
IHN0ZDo6ZGlzdGFuY2UoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCkpOwogfQogCitl
eHRlcm4gYm9vbCBoYXNTZWVuQnVnOworCiBFeGNlcHRpb25Pcjx2b2lkPiBDb250YWluZXJOb2Rl
OjphcHBlbmQoVmVjdG9yPE5vZGVPclN0cmluZz4mJiB2ZWN0b3IpCiB7CiAgICAgYXV0byByZXN1
bHQgPSBjb252ZXJ0Tm9kZXNPclN0cmluZ3NJbnRvTm9kZShXVEZNb3ZlKHZlY3RvcikpOwpAQCAt
OTAxLDYgKzkwMyw4IEBACiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4geyB9OwogCisg
ICAgaGFzU2VlbkJ1ZyA9IGZhbHNlOworCiAgICAgcmV0dXJuIGFwcGVuZENoaWxkKCpub2RlKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0
aW9uUXVldWUuY3BwCShyZXZpc2lvbiAyMzYwMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uUXVldWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNCArMzMs
MTggQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJKU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2UuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0VsZW1l
bnQuaCIKICNpbmNsdWRlICJNaWNyb3Rhc2tzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
Q2F0Y2hTY29wZS5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXAuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9TbG90VmlzaXRvci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
ICNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KIAorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZUl0
ZW0gewpAQCAtMzM0LDQgKzMzOCwyMyBAQAogICAgIHJldHVybiBxdWV1ZS5nZXQoKTsKIH0KIAor
dm9pZCBDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6dmlzaXRFbnF1ZXVlZEVsZW1lbnRzKEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgdW5zaWduZWQgdmlzaXRlZCA9IDA7Cisg
ICAgZm9yIChhdXRvKiBjdXJyZW50U3RhY2sgPSBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazo6
c19jdXJyZW50UHJvY2Vzc2luZ1N0YWNrOyBjdXJyZW50U3RhY2s7IGN1cnJlbnRTdGFjayA9IGN1
cnJlbnRTdGFjay0+bV9wcmV2aW91c1Byb2Nlc3NpbmdTdGFjaykgeworICAgICAgICBpZiAoYXV0
byogcXVldWUgPSBjdXJyZW50U3RhY2stPm1fcXVldWUpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgZWxlbWVudCA6IHF1ZXVlLT5lbGVtZW50cygpKSB7CisgICAgICAgICAgICAgICAgdmlzaXRl
ZCsrOworICAgICAgICAgICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChyb290KGVsZW1lbnQu
Z2V0KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc19wcm9j
ZXNzaW5nQmFja3VwRWxlbWVudFF1ZXVlKSB7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6
IGJhY2t1cEVsZW1lbnRRdWV1ZSgpLmVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIHZpc2l0b3Iu
YWRkT3BhcXVlUm9vdChyb290KGVsZW1lbnQuZ2V0KCkpKTsKKyAgICAgICAgICAgIHZpc2l0ZWQr
KzsKKyAgICAgICAgfQorICAgIH0KIH0KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0N1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgJKHJldmlzaW9uIDIzNjAwMSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw2ICszMiw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRl
OworY2xhc3MgU2xvdFZpc2l0b3I7CiAKIH0KIApAQCAtNjgsNiArNjksOCBAQAogICAgICAgICB2
b2lkIGFkZChFbGVtZW50Jik7CiAgICAgICAgIHZvaWQgcHJvY2Vzc1F1ZXVlKEpTQzo6RXhlY1N0
YXRlKik7CiAKKyAgICAgICAgY29uc3QgVmVjdG9yPFJlZjxFbGVtZW50Pj4mIGVsZW1lbnRzKCkg
eyByZXR1cm4gbV9lbGVtZW50czsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbnZv
a2VBbGwoKTsKIApAQCAtNzUsNiArNzgsOCBAQAogICAgICAgICBib29sIG1faW52b2tpbmcgeyBm
YWxzZSB9OwogICAgIH07CiAKKyAgICBzdGF0aWMgdm9pZCB2aXNpdEVucXVldWVkRWxlbWVudHMo
SlNDOjpTbG90VmlzaXRvciYpOworCiBwcml2YXRlOgogICAgIHN0YXRpYyBDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZSYgZW5zdXJlQ3VycmVudFF1ZXVlKEVsZW1lbnQmKTsKICAgICBzdGF0aWMg
RWxlbWVudFF1ZXVlJiBlbnN1cmVCYWNrdXBRdWV1ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>349844</attachid>
            <date>2018-09-14 18:47:58 -0700</date>
            <delta_ts>2018-09-20 00:47:31 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wip184307.patch</filename>
            <type>text/plain</type>
            <size>3531</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAJKHJldmlzaW9uIDIzNjAwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsOCBAQAogICAg
IC8vIGV2ZW4gdGhvdWdoIERPTVdpbmRvdyBpcyBhbiBFdmVudFRhcmdldCwgSlNET01XaW5kb3cg
ZG9lcyBub3Qgc3ViY2xhc3MgSlNFdmVudFRhcmdldCwgc28gd2UgbmVlZAogICAgIC8vIHRvIGRv
IHRoaXMgaGVyZS4KICAgICB3cmFwcGVkKCkudmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3Ip
OworCisgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OnZpc2l0RW5xdWV1ZWRFbGVtZW50
cyh2aXNpdG9yKTsKIH0KIAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5j
cHAJKHJldmlzaW9uIDIzNjAwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICszMywxOCBAQAogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIk1pY3JvdGFza3MuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9DYXRjaFNjb3Bl
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcC5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1Nsb3RWaXNpdG9yLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUg
PHd0Zi9TZXRGb3JTY29wZS5oPgogCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlSXRlbSB7CkBAIC0y
MzQsMTUgKzIzOCwxNiBAQAogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2ludm9raW5nKTsKICAg
ICBTZXRGb3JTY29wZTxib29sPiBpbnZva2luZyhtX2ludm9raW5nLCB0cnVlKTsKLSAgICBWZWN0
b3I8UmVmPEVsZW1lbnQ+PiBlbGVtZW50czsKLSAgICBlbGVtZW50cy5zd2FwKG1fZWxlbWVudHMp
OwotICAgIFJFTEVBU0VfQVNTRVJUKG1fZWxlbWVudHMuaXNFbXB0eSgpKTsKLSAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiBlbGVtZW50cykgeworLy8gICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gZWxl
bWVudHM7CisvLyAgICBlbGVtZW50cy5zd2FwKG1fZWxlbWVudHMpOworLy8gICAgUkVMRUFTRV9B
U1NFUlQobV9lbGVtZW50cy5pc0VtcHR5KCkpOworICAgIHNpemVfdCBjb3VudCA9IG1fZWxlbWVu
dHMuc2l6ZSgpOworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsKICAgICAg
ICAgYXV0byogcXVldWUgPSBlbGVtZW50LT5yZWFjdGlvblF1ZXVlKCk7CiAgICAgICAgIEFTU0VS
VChxdWV1ZSk7CiAgICAgICAgIHF1ZXVlLT5pbnZva2VBbGwoZWxlbWVudC5nZXQoKSk7CiAgICAg
fQotICAgIFJFTEVBU0VfQVNTRVJUKG1fZWxlbWVudHMuaXNFbXB0eSgpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChtX2VsZW1lbnRzLnNpemUoKSA9PSBjb3VudCk7CiB9CiAKIGlubGluZSB2b2lkIEN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjpFbGVtZW50UXVldWU6OnByb2Nlc3NRdWV1ZShKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUpCkBAIC0zMzQsNCArMzM5LDE4IEBACiAgICAgcmV0dXJuIHF1ZXVl
LmdldCgpOwogfQogCit2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjp2aXNpdEVucXVl
dWVkRWxlbWVudHMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKGF1dG8q
IGN1cnJlbnRTdGFjayA9IEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOjpzX2N1cnJlbnRQcm9j
ZXNzaW5nU3RhY2s7IGN1cnJlbnRTdGFjazsgY3VycmVudFN0YWNrID0gY3VycmVudFN0YWNrLT5t
X3ByZXZpb3VzUHJvY2Vzc2luZ1N0YWNrKSB7CisgICAgICAgIGlmIChhdXRvKiBxdWV1ZSA9IGN1
cnJlbnRTdGFjay0+bV9xdWV1ZSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDog
cXVldWUtPmVsZW1lbnRzKCkpCisgICAgICAgICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290
KHJvb3QoZWxlbWVudC5nZXQoKSkpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzX3Byb2Nl
c3NpbmdCYWNrdXBFbGVtZW50UXVldWUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDog
YmFja3VwRWxlbWVudFF1ZXVlKCkuZWxlbWVudHMoKSkKKyAgICAgICAgICAgIHZpc2l0b3IuYWRk
T3BhcXVlUm9vdChyb290KGVsZW1lbnQuZ2V0KCkpKTsKKyAgICB9CiB9CisKK30KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCShyZXZp
c2lvbiAyMzYwMDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9u
UXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIFNsb3RWaXNpdG9yOwogCiB9CiAKQEAgLTY4LDYg
KzY5LDggQEAKICAgICAgICAgdm9pZCBhZGQoRWxlbWVudCYpOwogICAgICAgICB2b2lkIHByb2Nl
c3NRdWV1ZShKU0M6OkV4ZWNTdGF0ZSopOwogCisgICAgICAgIGNvbnN0IFZlY3RvcjxSZWY8RWxl
bWVudD4+JiBlbGVtZW50cygpIHsgcmV0dXJuIG1fZWxlbWVudHM7IH0KKwogICAgIHByaXZhdGU6
CiAgICAgICAgIHZvaWQgaW52b2tlQWxsKCk7CiAKQEAgLTc1LDYgKzc4LDggQEAKICAgICAgICAg
Ym9vbCBtX2ludm9raW5nIHsgZmFsc2UgfTsKICAgICB9OwogCisgICAgc3RhdGljIHZvaWQgdmlz
aXRFbnF1ZXVlZEVsZW1lbnRzKEpTQzo6U2xvdFZpc2l0b3ImKTsKKwogcHJpdmF0ZToKICAgICBz
dGF0aWMgQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUmIGVuc3VyZUN1cnJlbnRRdWV1ZShFbGVt
ZW50Jik7CiAgICAgc3RhdGljIEVsZW1lbnRRdWV1ZSYgZW5zdXJlQmFja3VwUXVldWUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350093</attachid>
            <date>2018-09-18 21:29:59 -0700</date>
            <delta_ts>2018-09-19 13:24:12 -0700</delta_ts>
            <desc>WIP2</desc>
            <filename>wip184307b.patch</filename>
            <type>text/plain</type>
            <size>11907</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIzNjE1OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgzOSw2ICsyODM5LDggQEAK
IAkJOUI2QzQxNTMxMzQ0OTQ5MDAwMDg1QjYyIC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNkM0MTUyMTM0NDk0
OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUI3MTRFMjExQzkxMTY2OTAwQUMwRTkyIC8q
IEV2ZW50UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOUI3MTRFMUYxQzkxMTY2OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5oICovOyB9OwogCQk5QkEy
NzNGNDE3MjIwNkJCMDA5N0NFNDcgLyogTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJBMjczRjMxNzIy
MDZCQjAwOTdDRTQ3IC8qIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCAqLzsgfTsKKwkJ
OUJBQUM0NUIyMTUxRkFFNzAwM0Q0QTk4IC8qIFN0cm9uZ05vZGVSZWYuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJBQUM0NTgyMTUxRTc3QTAwM0Q0
QTk4IC8qIFN0cm9uZ05vZGVSZWYuY3BwICovOyB9OworCQk5QkFBQzQ1QzIxNTIwMTI4MDAzRDRB
OTggLyogU3Ryb25nTm9kZVJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUJBQUM0NTYyMTUxRTM5RTAwM0Q0QTk4IC8qIFN0cm9uZ05vZGVSZWYuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QkFCNkM2
QzEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkFCNkM2QTEyNTUwNjMxMDAxNjI2RDQgLyogRWRp
dGluZ1N0eWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJOUJBRjNCMjQxMkMxQTM5ODAwMDE0QkYxIC8qIFdyaXRpbmdEaXJlY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQUYzQjIzMTJDMUEz
OTgwMDAxNEJGMSAvKiBXcml0aW5nRGlyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUJCQTJDQUIxRjY3OUUwQzAwRkQxQzFFIC8qIFdl
YkNvbnRlbnRSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCRjQzMzc2MUY2NzYxOUIwMEUxRkQ3MSAvKiBXZWJDb250ZW50UmVhZGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwODYxLDYg
KzEwODYzLDggQEAKIAkJOUI5Mjk5QjAxRjY3OTZBNDAwNjcyM0MyIC8qIFdlYkNvbnRlbnRSZWFk
ZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNv
bnRlbnRSZWFkZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJBMjcz
RjMxNzIyMDZCQjAwOTdDRTQ3IC8qIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkE4Mjc3ODFGMDYxNTY1MDBGNzFF
NzUgLyogTmF2aWdhdGlvbkRpc2FibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5hdmlnYXRpb25EaXNhYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
QkFBQzQ1NjIxNTFFMzlFMDAzRDRBOTggLyogU3Ryb25nTm9kZVJlZi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHJvbmdOb2RlUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCQUFDNDU4
MjE1MUU3N0EwMDNENEE5OCAvKiBTdHJvbmdOb2RlUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0cm9uZ05vZGVSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkFCNkM2
QTEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVkaXRpbmdTdHlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QkFCNkM2QjEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVkaXRpbmdTdHlsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTlCQUYzQjIzMTJDMUEzOTgwMDAxNEJGMSAvKiBXcml0aW5nRGly
ZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRpbmdEaXJlY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2NTcwLDYgKzI2NTc0LDggQEAK
IAkJCQlGNDRFQkJENjFEQjVEMUI2MDAyNzczMzQgLyogU3RhdGljUmFuZ2UuaWRsICovLAogCQkJ
CTgxMDJDNTg3MTMyNUJCMTEwMERERTY3QSAvKiBTdHJpbmdDYWxsYmFjay5jcHAgKi8sCiAJCQkJ
ODFBQzZDMzUxMzFDNTdEMzAwMDlBN0UwIC8qIFN0cmluZ0NhbGxiYWNrLmggKi8sCisJCQkJOUJB
QUM0NTYyMTUxRTM5RTAwM0Q0QTk4IC8qIFN0cm9uZ05vZGVSZWYuaCAqLywKKwkJCQk5QkFBQzQ1
ODIxNTFFNzdBMDAzRDRBOTggLyogU3Ryb25nTm9kZVJlZi5jcHAgKi8sCiAJCQkJODFBQzZDMzQx
MzFDNTdDMjAwMDlBN0UwIC8qIFN0cmluZ0NhbGxiYWNrLmlkbCAqLywKIAkJCQlBOEM0QTdFQzA5
RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5jcHAgKi8sCiAJCQkJQThDNEE3RUIwOUQ1
NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuaCAqLywKQEAgLTI4MTUzLDYgKzI4MTU5LDcg
QEAKIAkJCQk5MzQ5MDdFNDEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEy
QTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTlCQUFD
NDVDMjE1MjAxMjgwMDNENEE5OCAvKiBTdHJvbmdOb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNBLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjU4MEIwRTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNjk1OTMxNjFBMUU1MzAwMzczMkNCIC8qIEdyYXBo
aWNzTGF5ZXJGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKQEAgLTMyMDAwLDYgKzMyMDA3LDcgQEAK
IAkJCQlERUNBODA1NTFGOUZFRDZBMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTI3Ni5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlERUNBODA1NjFGOUZFRDZBMDBFM0I2NjEgLyogVW5pZmllZFNvdXJj
ZTI3Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBODA1NzFGOUZFRDZBMDBFM0I2NjEgLyog
VW5pZmllZFNvdXJjZTI3OC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QkFBQzQ1QjIxNTFGQUU3
MDAzRDRBOTggLyogU3Ryb25nTm9kZVJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBODA1
ODFGOUZFRDZBMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTI3OS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlERUNBODA1OTFGOUZFRDZBMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTI4MC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlERUNBODA1QTFGOUZFRDZBMDBFM0I2NjEgLyogVW5pZmllZFNvdXJj
ZTI4MS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjM2MTU4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEs
NyBAQAogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgog
I2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTdHJvbmdOb2RlUmVmLmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJUZXh0LmgiCkBAIC0xMDcsNiArMTA4LDExIEBACiAgICAgICAgICAgICAgICAgKnJlYXNvbiA9
ICJOb2RlIHdoaWNoIGlzIGZpcmluZyBldmVudCBsaXN0ZW5lcnMiOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKFN0cm9uZ05vZGVSZWZNYXA6OmNvbnRh
aW5zKCpub2RlKSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCisgICAgICAg
ICAgICAgICAgKnJlYXNvbiA9ICJOb2RlIGlzIHNjaGVkdWxlZCB0byBiZSB1c2VkIGluIGFuIGFz
eW5jIHNjcmlwdCBpbnZvY2F0aW9uKSI7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuY3BwCShyZXZpc2lv
biAyMzYxNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNyArMjM0LDcgQEAKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghbV9pbnZva2luZyk7CiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaW52b2tpbmcobV9p
bnZva2luZywgdHJ1ZSk7Ci0gICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gZWxlbWVudHM7CisgICAg
VmVjdG9yPFN0cm9uZ05vZGVSZWY8RWxlbWVudD4+IGVsZW1lbnRzOwogICAgIGVsZW1lbnRzLnN3
YXAobV9lbGVtZW50cyk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9lbGVtZW50cy5pc0VtcHR5KCkp
OwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaAkocmV2aXNpb24gMjM2
MTU4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlICJTdHJvbmdOb2RlUmVmLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC03MSw3
ICs3Miw3IEBACiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbnZva2VBbGwoKTsKIAotICAg
ICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBtX2VsZW1lbnRzOworICAgICAgICBWZWN0b3I8U3Ry
b25nTm9kZVJlZjxFbGVtZW50Pj4gbV9lbGVtZW50czsKICAgICAgICAgYm9vbCBtX2ludm9raW5n
IHsgZmFsc2UgfTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3Ryb25nTm9k
ZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0cm9uZ05vZGVSZWYu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHJvbmdOb2RlUmVmLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0cm9uZ05vZGVSZWYuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitIYXNoQ291bnRlZFNldDxOb2RlKj4mIFN0cm9uZ05vZGVSZWZNYXA6Om1hcCgpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hDb3VudGVkU2V0PE5vZGUqPj4gbWFwOwor
ICAgIHJldHVybiBtYXA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9TdHJvbmdOb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1N0cm9uZ05vZGVSZWYuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vU3Ryb25nTm9kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0R1bWJQdHJUcmFpdHMu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTm9kZTsKKworY2xhc3MgU3Ryb25nTm9k
ZVJlZk1hcCB7CitwdWJsaWM6CisgICAgc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zKE5vZGUm
IG5vZGUpIHsgcmV0dXJuIG1hcCgpLmNvbnRhaW5zKCZub2RlKTsgfQorICAgIHN0YXRpYyBpbmxp
bmUgdm9pZCBhZGQoTm9kZSYgbm9kZSkgeyBtYXAoKS5hZGQoJm5vZGUpOyB9CisgICAgc3RhdGlj
IGlubGluZSB2b2lkIHJlbW92ZShOb2RlJiBub2RlKSB7IG1hcCgpLnJlbW92ZSgmbm9kZSk7IH0K
KworcHJpdmF0ZToKKyAgICBzdGF0aWMgSGFzaENvdW50ZWRTZXQ8Tm9kZSo+JiBtYXAoKTsKK307
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19zYW1lPFQsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlPjo6dmFsdWU+
PgorY2xhc3MgU3Ryb25nTm9kZVJlZiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3Ryb25n
Tm9kZVJlZik7CitwdWJsaWM6CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19iYXNlX29mPE5vZGUsIFQ+Ojp2YWx1ZT4+CisgICAgU3Ryb25nTm9kZVJl
ZihUJiBvYmplY3QpCisgICAgICAgIDogbV9yZWYob2JqZWN0KQorICAgIHsKKyAgICAgICAgU3Ry
b25nTm9kZVJlZk1hcDo6YWRkKG1fcmVmLmdldCgpKTsKKyAgICB9CisKKyAgICB+U3Ryb25nTm9k
ZVJlZigpCisgICAgeworICAgICAgICBTdHJvbmdOb2RlUmVmTWFwOjpyZW1vdmUobV9yZWYuZ2V0
KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFksIHR5cGVu
YW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8Tm9kZSwgVD46OnZhbHVlPj4K
KyAgICBTdHJvbmdOb2RlUmVmKFJlZjxYLCBZPiYmIG90aGVyKQorICAgICAgICA6IG1fcmVmKFdU
Rk1vdmUob3RoZXIubV9yZWYpKQorICAgIHsKKyAgICAgICAgU3Ryb25nTm9kZVJlZk1hcDo6YWRk
KG1fcmVmLmdldCgpKTsKKyAgICB9CisKKyAgICBTdHJvbmdOb2RlUmVmKFN0cm9uZ05vZGVSZWYm
JiBvdGhlcikKKyAgICAgICAgOiBtX3JlZihXVEZNb3ZlKG90aGVyLm1fcmVmKSkKKyAgICB7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4gU3Ryb25nTm9kZVJl
Zihjb25zdCBTdHJvbmdOb2RlUmVmPFgsIFk+JiBvdGhlcikgPSBkZWxldGU7CisKKyAgICBUKiBv
cGVyYXRvci0+KCkgY29uc3QgeyBBU1NFUlQobV9yZWYucHRyKCkpOyByZXR1cm4gbV9yZWYucHRy
KCk7IH0KKyAgICBUKiBwdHIoKSBjb25zdCBSRVRVUk5TX05PTk5VTEwgeyBBU1NFUlQobV9yZWYu
cHRyKCkpOyByZXR1cm4gbV9yZWYucHRyKCk7IH0KKyAgICBUJiBnZXQoKSBjb25zdCB7IEFTU0VS
VChtX3JlZi5wdHIoKSk7IHJldHVybiBtX3JlZi5nZXQoKTsgfQorICAgIG9wZXJhdG9yIFQmKCkg
Y29uc3QgeyBBU1NFUlQobV9yZWYucHRyKCkpOyByZXR1cm4gbV9yZWYuZ2V0KCk7IH0KKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgQVNTRVJUKG1fcmVmLnB0cigpKTsgcmV0dXJuICFtX3Jl
Zi5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFJlZjxUPiBtX3JlZjsKK307CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350146</attachid>
            <date>2018-09-19 13:24:12 -0700</date>
            <delta_ts>2018-09-19 16:20:58 -0700</delta_ts>
            <desc>WIP3</desc>
            <filename>wip184307c.patch</filename>
            <type>text/plain</type>
            <size>11937</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIzNjIwNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgzOSw2ICsyODM5LDggQEAK
IAkJOUI2QzQxNTMxMzQ0OTQ5MDAwMDg1QjYyIC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNkM0MTUyMTM0NDk0
OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUI3MTRFMjExQzkxMTY2OTAwQUMwRTkyIC8q
IEV2ZW50UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOUI3MTRFMUYxQzkxMTY2OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5oICovOyB9OwogCQk5QkEy
NzNGNDE3MjIwNkJCMDA5N0NFNDcgLyogTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJBMjczRjMxNzIy
MDZCQjAwOTdDRTQ3IC8qIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCAqLzsgfTsKKwkJ
OUJBQUM0NUIyMTUxRkFFNzAwM0Q0QTk4IC8qIFN0cm9uZ05vZGVSZWYuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJBQUM0NTgyMTUxRTc3QTAwM0Q0
QTk4IC8qIFN0cm9uZ05vZGVSZWYuY3BwICovOyB9OworCQk5QkFBQzQ1QzIxNTIwMTI4MDAzRDRB
OTggLyogU3Ryb25nTm9kZVJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUJBQUM0NTYyMTUxRTM5RTAwM0Q0QTk4IC8qIFN0cm9uZ05vZGVSZWYuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QkFCNkM2
QzEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkFCNkM2QTEyNTUwNjMxMDAxNjI2RDQgLyogRWRp
dGluZ1N0eWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJOUJBRjNCMjQxMkMxQTM5ODAwMDE0QkYxIC8qIFdyaXRpbmdEaXJlY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQUYzQjIzMTJDMUEz
OTgwMDAxNEJGMSAvKiBXcml0aW5nRGlyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUJCQTJDQUIxRjY3OUUwQzAwRkQxQzFFIC8qIFdl
YkNvbnRlbnRSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCRjQzMzc2MUY2NzYxOUIwMEUxRkQ3MSAvKiBXZWJDb250ZW50UmVhZGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwODYxLDYg
KzEwODYzLDggQEAKIAkJOUI5Mjk5QjAxRjY3OTZBNDAwNjcyM0MyIC8qIFdlYkNvbnRlbnRSZWFk
ZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNv
bnRlbnRSZWFkZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJBMjcz
RjMxNzIyMDZCQjAwOTdDRTQ3IC8qIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkE4Mjc3ODFGMDYxNTY1MDBGNzFF
NzUgLyogTmF2aWdhdGlvbkRpc2FibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5hdmlnYXRpb25EaXNhYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
QkFBQzQ1NjIxNTFFMzlFMDAzRDRBOTggLyogU3Ryb25nTm9kZVJlZi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHJvbmdOb2RlUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCQUFDNDU4
MjE1MUU3N0EwMDNENEE5OCAvKiBTdHJvbmdOb2RlUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0cm9uZ05vZGVSZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkFCNkM2
QTEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVkaXRpbmdTdHlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QkFCNkM2QjEyNTUwNjMxMDAxNjI2RDQgLyogRWRpdGluZ1N0eWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVkaXRpbmdTdHlsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTlCQUYzQjIzMTJDMUEzOTgwMDAxNEJGMSAvKiBXcml0aW5nRGly
ZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRpbmdEaXJlY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2NTcwLDYgKzI2NTc0LDggQEAK
IAkJCQlGNDRFQkJENjFEQjVEMUI2MDAyNzczMzQgLyogU3RhdGljUmFuZ2UuaWRsICovLAogCQkJ
CTgxMDJDNTg3MTMyNUJCMTEwMERERTY3QSAvKiBTdHJpbmdDYWxsYmFjay5jcHAgKi8sCiAJCQkJ
ODFBQzZDMzUxMzFDNTdEMzAwMDlBN0UwIC8qIFN0cmluZ0NhbGxiYWNrLmggKi8sCisJCQkJOUJB
QUM0NTYyMTUxRTM5RTAwM0Q0QTk4IC8qIFN0cm9uZ05vZGVSZWYuaCAqLywKKwkJCQk5QkFBQzQ1
ODIxNTFFNzdBMDAzRDRBOTggLyogU3Ryb25nTm9kZVJlZi5jcHAgKi8sCiAJCQkJODFBQzZDMzQx
MzFDNTdDMjAwMDlBN0UwIC8qIFN0cmluZ0NhbGxiYWNrLmlkbCAqLywKIAkJCQlBOEM0QTdFQzA5
RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5jcHAgKi8sCiAJCQkJQThDNEE3RUIwOUQ1
NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuaCAqLywKQEAgLTI4MTUzLDYgKzI4MTU5LDcg
QEAKIAkJCQk5MzQ5MDdFNDEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEy
QTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTlCQUFD
NDVDMjE1MjAxMjgwMDNENEE5OCAvKiBTdHJvbmdOb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNBLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjU4MEIwRTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNjk1OTMxNjFBMUU1MzAwMzczMkNCIC8qIEdyYXBo
aWNzTGF5ZXJGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKQEAgLTMyMDAwLDYgKzMyMDA3LDcgQEAK
IAkJCQlERUNBODA1NTFGOUZFRDZBMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTI3Ni5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlERUNBODA1NjFGOUZFRDZBMDBFM0I2NjEgLyogVW5pZmllZFNvdXJj
ZTI3Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBODA1NzFGOUZFRDZBMDBFM0I2NjEgLyog
VW5pZmllZFNvdXJjZTI3OC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QkFBQzQ1QjIxNTFGQUU3
MDAzRDRBOTggLyogU3Ryb25nTm9kZVJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERUNBODA1
ODFGOUZFRDZBMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTI3OS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlERUNBODA1OTFGOUZFRDZBMDBFM0I2NjEgLyogVW5pZmllZFNvdXJjZTI4MC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlERUNBODA1QTFGOUZFRDZBMDBFM0I2NjEgLyogVW5pZmllZFNvdXJj
ZTI4MS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjM2MjA3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEs
NyBAQAogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgog
I2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTdHJvbmdOb2RlUmVmLmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJUZXh0LmgiCkBAIC0xMDcsNiArMTA4LDExIEBACiAgICAgICAgICAgICAgICAgKnJlYXNvbiA9
ICJOb2RlIHdoaWNoIGlzIGZpcmluZyBldmVudCBsaXN0ZW5lcnMiOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKFN0cm9uZ05vZGVSZWZNYXA6OmNvbnRh
aW5zKCpub2RlKSkgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCisgICAgICAg
ICAgICAgICAgKnJlYXNvbiA9ICJOb2RlIGlzIHNjaGVkdWxlZCB0byBiZSB1c2VkIGluIGFuIGFz
eW5jIHNjcmlwdCBpbnZvY2F0aW9uKSI7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIGlmIChVTkxJS0VMWShyZWFzb24pKQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuY3BwCShyZXZpc2lv
biAyMzYyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNyArMjM0LDcgQEAKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghbV9pbnZva2luZyk7CiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaW52b2tpbmcobV9p
bnZva2luZywgdHJ1ZSk7Ci0gICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gZWxlbWVudHM7CisgICAg
VmVjdG9yPFN0cm9uZ05vZGVSZWY8RWxlbWVudD4+IGVsZW1lbnRzOwogICAgIGVsZW1lbnRzLnN3
YXAobV9lbGVtZW50cyk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9lbGVtZW50cy5pc0VtcHR5KCkp
OwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaAkocmV2aXNpb24gMjM2
MjA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJTdHJvbmdOb2RlUmVmLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03MSw3ICs3
Miw3IEBACiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbnZva2VBbGwoKTsKIAotICAgICAg
ICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBtX2VsZW1lbnRzOworICAgICAgICBWZWN0b3I8U3Ryb25n
Tm9kZVJlZjxFbGVtZW50Pj4gbV9lbGVtZW50czsKICAgICAgICAgYm9vbCBtX2ludm9raW5nIHsg
ZmFsc2UgfTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3Ryb25nTm9kZVJl
Zi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0cm9uZ05vZGVSZWYuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHJvbmdOb2RlUmVmLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlN0cm9uZ05vZGVSZWYuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitIYXNoQ291bnRlZFNldDxOb2Rl
Kj4mIFN0cm9uZ05vZGVSZWZNYXA6Om1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hDb3VudGVkU2V0PE5vZGUqPj4gbWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHJvbmdOb2RlUmVm
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0cm9uZ05vZGVSZWYuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3Ryb25nTm9kZVJlZi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL0R1bWJQdHJUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50
ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgTm9kZTsKKworY2xhc3MgU3Ryb25nTm9kZVJlZk1hcCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGlubGluZSBib29sIGNvbnRhaW5zKE5vZGUmIG5vZGUpIHsgcmV0dXJuIG1hcCgpLmNvbnRh
aW5zKCZub2RlKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGQoTm9kZSYgbm9kZSkgeyBt
YXAoKS5hZGQoJm5vZGUpOyB9CisgICAgc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZShOb2RlJiBu
b2RlKSB7IG1hcCgpLnJlbW92ZSgmbm9kZSk7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgSGFz
aENvdW50ZWRTZXQ8Tm9kZSo+JiBtYXAoKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIHR5cGVuYW1lIHN0ZDo6
cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlPjo6dmFsdWU+PgorY2xhc3MgU3Ryb25nTm9kZVJlZiB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3Ryb25nTm9kZVJlZik7CitwdWJsaWM6CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29mPE5vZGUs
IFQ+Ojp2YWx1ZT4+CisgICAgU3Ryb25nTm9kZVJlZihUJiBvYmplY3QpCisgICAgICAgIDogbV9y
ZWYob2JqZWN0KQorICAgIHsKKyAgICAgICAgU3Ryb25nTm9kZVJlZk1hcDo6YWRkKG1fcmVmLmdl
dCgpKTsKKyAgICB9CisKKyAgICB+U3Ryb25nTm9kZVJlZigpCisgICAgeworICAgICAgICBTdHJv
bmdOb2RlUmVmTWFwOjpyZW1vdmUobV9yZWYuZ2V0KCkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFgsIHR5cGVuYW1lIFksIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX2Jhc2Vfb2Y8Tm9kZSwgVD46OnZhbHVlPj4KKyAgICBTdHJvbmdOb2RlUmVmKFJlZjxYLCBZ
PiYmIG90aGVyKQorICAgICAgICA6IG1fcmVmKFdURk1vdmUob3RoZXIubV9yZWYpKQorICAgIHsK
KyAgICAgICAgU3Ryb25nTm9kZVJlZk1hcDo6YWRkKG1fcmVmLmdldCgpKTsKKyAgICB9CisKKyAg
ICBTdHJvbmdOb2RlUmVmKFN0cm9uZ05vZGVSZWYmJiBvdGhlcikKKyAgICAgICAgOiBtX3JlZihX
VEZNb3ZlKG90aGVyLm1fcmVmKSkKKyAgICB7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4gU3Ryb25nTm9kZVJlZihjb25zdCBTdHJvbmdOb2RlUmVmPFgsIFk+
JiBvdGhlcikgPSBkZWxldGU7CisKKyAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyBBU1NFUlQo
bV9yZWYucHRyKCkpOyByZXR1cm4gbV9yZWYucHRyKCk7IH0KKyAgICBUKiBwdHIoKSBjb25zdCBS
RVRVUk5TX05PTk5VTEwgeyBBU1NFUlQobV9yZWYucHRyKCkpOyByZXR1cm4gbV9yZWYucHRyKCk7
IH0KKyAgICBUJiBnZXQoKSBjb25zdCB7IEFTU0VSVChtX3JlZi5wdHIoKSk7IHJldHVybiBtX3Jl
Zi5nZXQoKTsgfQorICAgIG9wZXJhdG9yIFQmKCkgY29uc3QgeyBBU1NFUlQobV9yZWYucHRyKCkp
OyByZXR1cm4gbV9yZWYuZ2V0KCk7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgQVNT
RVJUKG1fcmVmLnB0cigpKTsgcmV0dXJuICFtX3JlZi5nZXQoKTsgfQorCitwcml2YXRlOgorICAg
IFJlZjxUPiBtX3JlZjsKK307CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350157</attachid>
            <date>2018-09-19 16:21:22 -0700</date>
            <delta_ts>2018-09-20 00:47:32 -0700</delta_ts>
            <desc>WIP4</desc>
            <filename>wip184307d.patch</filename>
            <type>text/plain</type>
            <size>11680</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMzYyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODE0LDYgKzgxNCw3IEBACiBkb20vU3RhdGlj
Tm9kZUxpc3QuY3BwCiBkb20vU3RhdGljUmFuZ2UuY3BwCiBkb20vU3RyaW5nQ2FsbGJhY2suY3Bw
Citkb20vU3Ryb25nTm9kZVJlZi5jcHAKIGRvbS9TdHlsZWRFbGVtZW50LmNwcAogZG9tL1RhZ0Nv
bGxlY3Rpb24uY3BwCiBkb20vVGVtcGxhdGVDb250ZW50RG9jdW1lbnRGcmFnbWVudC5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDIzNjIwNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgzOSw2ICsyODM5LDcgQEAKIAkJ
OUI2QzQxNTMxMzQ0OTQ5MDAwMDg1QjYyIC8qIFN0cmluZ1dpdGhEaXJlY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNkM0MTUyMTM0NDk0OTAw
MDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUI3MTRFMjExQzkxMTY2OTAwQUMwRTkyIC8qIEV2
ZW50UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUI3MTRFMUYxQzkxMTY2OTAwQUMwRTkyIC8qIEV2ZW50UGF0aC5oICovOyB9OwogCQk5QkEyNzNG
NDE3MjIwNkJCMDA5N0NFNDcgLyogTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJBMjczRjMxNzIyMDZC
QjAwOTdDRTQ3IC8qIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCAqLzsgfTsKKwkJOUJB
QUM0NUMyMTUyMDEyODAwM0Q0QTk4IC8qIFN0cm9uZ05vZGVSZWYuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQUFDNDU2MjE1MUUzOUUwMDNENEE5OCAv
KiBTdHJvbmdOb2RlUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJOUJBQjZDNkMxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJBQjZDNkExMjU1
MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCQUYzQjI0MTJDMUEzOTgwMDAxNEJGMSAvKiBXcml0
aW5nRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QkFGM0IyMzEyQzFBMzk4MDAwMTRCRjEgLyogV3JpdGluZ0RpcmVjdGlvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCQkEyQ0FCMUY2
NzlFMEMwMEZEMUMxRSAvKiBXZWJDb250ZW50UmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QkY0MzM3NjFGNjc2MTlCMDBFMUZENzEgLyogV2Vi
Q29udGVudFJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xMDg2MSw2ICsxMDg2Miw4IEBACiAJCTlCOTI5OUIwMUY2Nzk2QTQwMDY3MjND
MiAvKiBXZWJDb250ZW50UmVhZGVyQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJDb250ZW50UmVhZGVyQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlCQTI3M0YzMTcyMjA2QkIwMDk3Q0U0NyAvKiBMb2dpY2FsU2VsZWN0aW9u
T2Zmc2V0Q2FjaGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2ljYWxT
ZWxlY3Rpb25PZmZzZXRDYWNoZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJB
ODI3NzgxRjA2MTU2NTAwRjcxRTc1IC8qIE5hdmlnYXRpb25EaXNhYmxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0aW9uRGlzYWJsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOUJBQUM0NTYyMTUxRTM5RTAwM0Q0QTk4IC8qIFN0cm9uZ05vZGVS
ZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ryb25nTm9kZVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5QkFBQzQ1ODIxNTFFNzdBMDAzRDRBOTggLyogU3Ryb25nTm9kZVJlZi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTdHJvbmdOb2RlUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUJBQjZDNkExMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdTdHlsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5nU3R5bGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJBQjZDNkIxMjU1MDYzMTAwMTYyNkQ0IC8qIEVkaXRpbmdT
dHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFZGl0aW5nU3R5
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkFGM0IyMzEyQzFBMzk4MDAw
MTRCRjEgLyogV3JpdGluZ0RpcmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXcml0aW5nRGlyZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NjU3MCw2ICsyNjU3Myw4IEBACiAJCQkJRjQ0RUJCRDYxREI1RDFCNjAwMjc3MzM0IC8qIFN0YXRp
Y1JhbmdlLmlkbCAqLywKIAkJCQk4MTAyQzU4NzEzMjVCQjExMDBEREU2N0EgLyogU3RyaW5nQ2Fs
bGJhY2suY3BwICovLAogCQkJCTgxQUM2QzM1MTMxQzU3RDMwMDA5QTdFMCAvKiBTdHJpbmdDYWxs
YmFjay5oICovLAorCQkJCTlCQUFDNDU2MjE1MUUzOUUwMDNENEE5OCAvKiBTdHJvbmdOb2RlUmVm
LmggKi8sCisJCQkJOUJBQUM0NTgyMTUxRTc3QTAwM0Q0QTk4IC8qIFN0cm9uZ05vZGVSZWYuY3Bw
ICovLAogCQkJCTgxQUM2QzM0MTMxQzU3QzIwMDA5QTdFMCAvKiBTdHJpbmdDYWxsYmFjay5pZGwg
Ki8sCiAJCQkJQThDNEE3RUMwOUQ1NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuY3BwICov
LAogCQkJCUE4QzRBN0VCMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmggKi8sCkBA
IC0yODE1Myw2ICsyODE1OCw3IEBACiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdy
YXBoaWNzQ29udGV4dENHLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBENjcwODBFOUU5REVCMDBF
NDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNTgwQjBEMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5QkFBQzQ1QzIxNTIwMTI4MDAzRDRBOTggLyogU3Ryb25nTm9kZVJlZi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5QjNFRDcxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNz
TGF5ZXJDQS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEUwRjEyQTI2OTAwNTFENjg5IC8q
IEdyYXBoaWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzY5NTkzMTYxQTFF
NTMwMDM3MzJDQiAvKiBHcmFwaGljc0xheWVyRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDIzNjIwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlICJTVkdFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5j
bHVkZSAiU3Ryb25nTm9kZVJlZi5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKICNpbmNsdWRl
ICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtMTA3LDYgKzEwOCwxMSBA
QAogICAgICAgICAgICAgICAgICpyZWFzb24gPSAiTm9kZSB3aGljaCBpcyBmaXJpbmcgZXZlbnQg
bGlzdGVuZXJzIjsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisgICAgICAg
IGlmIChTdHJvbmdOb2RlUmVmTWFwOjpjb250YWlucygqbm9kZSkpIHsKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWShyZWFzb24pKQorICAgICAgICAgICAgICAgICpyZWFzb24gPSAiTm9kZSBpcyBz
Y2hlZHVsZWQgdG8gYmUgdXNlZCBpbiBhbiBhc3luYyBzY3JpcHQgaW52b2NhdGlvbikiOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoVU5MSUtF
TFkocmVhc29uKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rp
b25RdWV1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlLmNwcAkocmV2aXNpb24gMjM2MjA3KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM0
LDcgKzIzNCw3IEBACiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW52b2tpbmcpOwogICAgIFNl
dEZvclNjb3BlPGJvb2w+IGludm9raW5nKG1faW52b2tpbmcsIHRydWUpOwotICAgIFZlY3RvcjxS
ZWY8RWxlbWVudD4+IGVsZW1lbnRzOworICAgIFZlY3RvcjxTdHJvbmdOb2RlUmVmPEVsZW1lbnQ+
PiBlbGVtZW50czsKICAgICBlbGVtZW50cy5zd2FwKG1fZWxlbWVudHMpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZWxlbWVudHMuaXNFbXB0eSgpKTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBl
bGVtZW50cykgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRSZWFjdGlv
blF1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUVsZW1lbnRS
ZWFjdGlvblF1ZXVlLmgJKHJldmlzaW9uIDIzNjIwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9D
dXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiU3Ryb25nTm9kZVJlZi5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNzEsNyArNzIsNyBAQAogICAgIHByaXZhdGU6CiAgICAgICAg
IHZvaWQgaW52b2tlQWxsKCk7CiAKLSAgICAgICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gbV9lbGVt
ZW50czsKKyAgICAgICAgVmVjdG9yPFN0cm9uZ05vZGVSZWY8RWxlbWVudD4+IG1fZWxlbWVudHM7
CiAgICAgICAgIGJvb2wgbV9pbnZva2luZyB7IGZhbHNlIH07CiAgICAgfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL1N0cm9uZ05vZGVSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9TdHJvbmdOb2RlUmVmLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vU3Ryb25nTm9kZVJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHJvbmdOb2Rl
UmVmLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworSGFzaENvdW50ZWRTZXQ8Tm9kZSo+JiBTdHJvbmdOb2RlUmVmTWFwOjptYXAoKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoQ291bnRlZFNldDxOb2RlKj4+IG1hcDsK
KyAgICByZXR1cm4gbWFwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vU3Ryb25nTm9kZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9TdHJvbmdOb2RlUmVmLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1N0cm9uZ05vZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9EdW1iUHRyVHJhaXRz
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZi5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE5vZGU7CisKK2NsYXNzIFN0cm9uZ05v
ZGVSZWZNYXAgeworcHVibGljOgorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBjb250YWlucyhOb2Rl
JiBub2RlKSB7IHJldHVybiBtYXAoKS5jb250YWlucygmbm9kZSk7IH0KKyAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgYWRkKE5vZGUmIG5vZGUpIHsgbWFwKCkuYWRkKCZub2RlKTsgfQorICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCByZW1vdmUoTm9kZSYgbm9kZSkgeyBtYXAoKS5yZW1vdmUoJm5vZGUpOyB9
CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEhhc2hDb3VudGVkU2V0PE5vZGUqPiYgbWFwKCk7Cit9
OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfc2FtZTxULCB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZT46OnZhbHVl
Pj4KK2NsYXNzIFN0cm9uZ05vZGVSZWYgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cm9u
Z05vZGVSZWYpOworcHVibGljOgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgPSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxOb2RlLCBUPjo6dmFsdWU+PgorICAgIFN0cm9uZ05vZGVS
ZWYoVCYgb2JqZWN0KQorICAgICAgICA6IG1fcmVmKG9iamVjdCkKKyAgICB7CisgICAgICAgIFN0
cm9uZ05vZGVSZWZNYXA6OmFkZChtX3JlZi5nZXQoKSk7CisgICAgfQorCisgICAgflN0cm9uZ05v
ZGVSZWYoKQorICAgIHsKKyAgICAgICAgU3Ryb25nTm9kZVJlZk1hcDo6cmVtb3ZlKG1fcmVmLmdl
dCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBYLCB0eXBlbmFtZSBZLCB0eXBl
bmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29mPE5vZGUsIFQ+Ojp2YWx1ZT4+
CisgICAgU3Ryb25nTm9kZVJlZihSZWY8WCwgWT4mJiBvdGhlcikKKyAgICAgICAgOiBtX3JlZihX
VEZNb3ZlKG90aGVyLm1fcmVmKSkKKyAgICB7CisgICAgICAgIFN0cm9uZ05vZGVSZWZNYXA6OmFk
ZChtX3JlZi5nZXQoKSk7CisgICAgfQorCisgICAgU3Ryb25nTm9kZVJlZihTdHJvbmdOb2RlUmVm
JiYgb3RoZXIpCisgICAgICAgIDogbV9yZWYoV1RGTW92ZShvdGhlci5tX3JlZikpCisgICAgewor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+IFN0cm9uZ05vZGVS
ZWYoY29uc3QgU3Ryb25nTm9kZVJlZjxYLCBZPiYgb3RoZXIpID0gZGVsZXRlOworCisgICAgVCog
b3BlcmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKG1fcmVmLnB0cigpKTsgcmV0dXJuIG1fcmVmLnB0
cigpOyB9CisgICAgVCogcHRyKCkgY29uc3QgUkVUVVJOU19OT05OVUxMIHsgQVNTRVJUKG1fcmVm
LnB0cigpKTsgcmV0dXJuIG1fcmVmLnB0cigpOyB9CisgICAgVCYgZ2V0KCkgY29uc3QgeyBBU1NF
UlQobV9yZWYucHRyKCkpOyByZXR1cm4gbV9yZWYuZ2V0KCk7IH0KKyAgICBvcGVyYXRvciBUJigp
IGNvbnN0IHsgQVNTRVJUKG1fcmVmLnB0cigpKTsgcmV0dXJuIG1fcmVmLmdldCgpOyB9CisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IEFTU0VSVChtX3JlZi5wdHIoKSk7IHJldHVybiAhbV9y
ZWYuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBSZWY8VD4gbV9yZWY7Cit9OworCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350178</attachid>
            <date>2018-09-20 00:47:34 -0700</date>
            <delta_ts>2018-09-21 12:53:31 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-184307-20180920004733.patch</filename>
            <type>text/plain</type>
            <size>20483</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjI0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE4LTA5LTIwICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEN1c3RvbSBlbGVtZW50cyBpbiBh
IHJlYWN0aW9uIHF1ZXVlIGNhbiBsb3NlIGl0cyBKUyB3cmFwcGVyIGFuZCBiZWNvbWUgSFRNTFVu
a25vd25FbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODQzMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGUgYnVnIHdhcyBjYXVzZWQgYnkgdGhlIGN1c3RvbSBlbGVtZW50cyByZWFjdGlvbiBx
dWV1ZSBub3QgcmVwb3J0aW5nIGl0cyBjb250ZW50IHRvIEdDIGR1cmluZyBtYXJraW5nLgorCisg
ICAgICAgIFdoZW4gdGhlcmUgaXMgbm8gSlMgcmVmZXJlbmNlIHRvIHRoZSBKUyB3cmFwcGVycyBv
ZiB0aG9zZSBjdXN0b20gZWxlbWVudCwgYW5kIGlmIHRob3NlIGN1c3RvbSBlbGVtZW50cworICAg
ICAgICBhcmUgZGlzY29ubmVjdGVkLCBHQyB3b3VsZCBoYXBwaWx5IGNvbGxlY3QgdGhvc2UgdGhl
IHdyYXBwZXJzLiBVbmZvcnR1bmF0ZWx5LCB0aGUgc2FtZSBidWcgZXhpc3RzIGZvcgorICAgICAg
ICBhbnkgYXN5bmNocm9ub3VzIGV2ZW50cyBhbmQgb3RoZXIgV2ViQ29yZSBjb2RlIHdoaWNoIGtl
ZXBzIGVsZW1lbnRzIGFsaXZlIGZvciBhIGxhdGVyIHVzZSBidXQgZG9lc24ndAorICAgICAgICBy
ZXBvcnQgdGhlbSB0byBHQyAoZS5nLiBkdXJpbmcgdmlzaXRDaGlsZHJlbikuCisKKyAgICAgICAg
VGhpcyBwYXRjaCwgdGhlcmVmb3JlLCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBtZWNoYW5pc20gdG8g
a2VlcCB0aGVzZSBlbGVtZW50cycgd3JhcHBlcnMgYWxpdmUuIE5hbWVseSwKKyAgICAgICAgd2Ug
aW50cm9kdWNlIFN0cm9uZ05vZGVSZWYsIGEgbmV3IHNtYXJ0IHBvaW50ZXIgdHlwZSBmb3IgTm9k
ZSdzIHN1YmNsYXNzZXMsIHdoaWNoIGtlZXBzIGVsZW1lbnQgYXMgd2VsbAorICAgICAgICBhcyBp
dHMgd3JhcHBlcnMgYWxpdmUuIFN0cm9uZ05vZGVSZWYgd29ya3MgYnkgYWRkaW5nIGl0cyBOb2Rl
IHRvIGEgZ2xvYmFsIGhhc2ggY291bnRlZCBzZXQgd2hlbiBpdCdzCisgICAgICAgIGNyZWF0ZWQg
YW5kIG1ha2luZyBKU05vZGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMgcmV0dXJu
IHRydWUgd2hlbiB0aGUgbm9kZSBpcyBpbiB0aGUgc2V0LgorCisgICAgICAgIFRlc3Q6IGZhc3Qv
Y3VzdG9tLWVsZW1lbnRzL2N1c3RvbS1lbGVtZW50cy1yZWFjdGlvbi1xdWV1ZS1yZXRhaW5zLWpz
LXdyYXBwZXIuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9k
ZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1JlYWNoYWJsZUZyb21ET00pOgorICAg
ICAgICAqIGRvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZTo6RWxlbWVudFF1ZXVlOjppbnZva2VBbGwp
OiBEb24ndCBzd2FwIHRoZSB2ZWN0b3Igb2YgZWxlbWVudHMgaW4KKyAgICAgICAgaW4gdGhlIHF1
ZXVlLiBBc3N1bWluZyBlYWNoIERPTSBBUEkgaGFzIGFuIGFwcHJvcHJpYXRlIEN1c3RvbUVsZW1l
bnRzUmVhY3Rpb25TdGFjaywgd2Ugc2hvdWxkIG5ldmVyCisgICAgICAgIGFwcGVuZCBhIG5ldyBl
bGVtZW50IHRvIHRoaXMgcXVldWUgd2hpbGUgaW52b2tpbmcgY3VzdG9tIGVsZW1lbnQgcmVhY3Rp
b25zLgorICAgICAgICAqIGRvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oOgorICAgICAg
ICAqIGRvbS9TdHJvbmdOb2RlUmVmLmNwcDogQWRkZWQuCisgICAgICAgICogZG9tL1N0cm9uZ05v
ZGVSZWYuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHJvbmdOb2RlUmVmTWFwOjpjb250
YWlucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3Ryb25nTm9kZVJlZk1hcDo6YWRkKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHJvbmdOb2RlUmVmTWFwOjpyZW1vdmUpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0cm9uZ05vZGVSZWY6OlN0cm9uZ05vZGVSZWYpOiBBZGRl
ZC4gV2UgbmVlZCBpc051bGwoKSBjaGVjayBzaW5jZSBXVEZNb3ZlIG1heSBoYXZlIGJlZW4KKyAg
ICAgICAgY2FsbGVkIG9uIHRoZSBzb3VyY2UgU3Ryb25nTm9kZVJlZi4KKyAgICAgICAgKFdlYkNv
cmU6OlN0cm9uZ05vZGVSZWY6On5TdHJvbmdOb2RlUmVmKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpTdHJvbmdOb2RlUmVmOjpvcGVyYXRvci0+IGNvbnN0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdHJvbmdOb2RlUmVmOjpnZXQgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0cm9uZ05vZGVSZWY6Om9wZXJhdG9yIFQmIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdHJvbmdOb2RlUmVmOjpvcGVyYXRvciEgY29uc3QpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0cm9uZ05vZGVSZWY6OmlzTnVsbCBjb25zdCk6IEFkZGVkLiBSZXR1cm5zIHRy
dWUgaWYgV1RGTW92ZSBoYWQgYmVlbiBjYWxsZWQgb24gUmVmLgorCiAyMDE4LTA5LTE5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEltcHJvdmUgbm9kZSBzdGF0
aXN0aWNzIGZvciByYXJlIGRhdGEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMzYyMDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODE0LDYg
KzgxNCw3IEBAIGRvbS9TcGVjdHJlR2FkZ2V0LmNwcAogZG9tL1N0YXRpY05vZGVMaXN0LmNwcAog
ZG9tL1N0YXRpY1JhbmdlLmNwcAogZG9tL1N0cmluZ0NhbGxiYWNrLmNwcAorZG9tL1N0cm9uZ05v
ZGVSZWYuY3BwCiBkb20vU3R5bGVkRWxlbWVudC5jcHAKIGRvbS9UYWdDb2xsZWN0aW9uLmNwcAog
ZG9tL1RlbXBsYXRlQ29udGVudERvY3VtZW50RnJhZ21lbnQuY3BwCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MzYyMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTI4MzksNiArMjgzOSw3IEBACiAJCTlCNkM0MTUzMTM0NDk0
OTAwMDA4NUI2MiAvKiBTdHJpbmdXaXRoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjZDNDE1MjEzNDQ5NDkwMDAwODVCNjIgLyogU3Ry
aW5nV2l0aERpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTlCNzE0RTIxMUM5MTE2NjkwMEFDMEU5MiAvKiBFdmVudFBhdGguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCNzE0RTFGMUM5MTE2
NjkwMEFDMEU5MiAvKiBFdmVudFBhdGguaCAqLzsgfTsKIAkJOUJBMjczRjQxNzIyMDZCQjAwOTdD
RTQ3IC8qIExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQTI3M0YzMTcyMjA2QkIwMDk3Q0U0NyAvKiBM
b2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmggKi87IH07CisJCTlCQUFDNDVDMjE1MjAxMjgw
MDNENEE5OCAvKiBTdHJvbmdOb2RlUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5QkFBQzQ1NjIxNTFFMzlFMDAzRDRBOTggLyogU3Ryb25nTm9kZVJl
Zi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlC
QUI2QzZDMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCQUI2QzZBMTI1NTA2MzEwMDE2MjZENCAv
KiBFZGl0aW5nU3R5bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5QkFGM0IyNDEyQzFBMzk4MDAwMTRCRjEgLyogV3JpdGluZ0RpcmVjdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUJBRjNCMjMx
MkMxQTM5ODAwMDE0QkYxIC8qIFdyaXRpbmdEaXJlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QkJBMkNBQjFGNjc5RTBDMDBGRDFDMUUg
LyogV2ViQ29udGVudFJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUJGNDMzNzYxRjY3NjE5QjAwRTFGRDcxIC8qIFdlYkNvbnRlbnRSZWFkZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTA4
NjEsNiArMTA4NjIsOCBAQAogCQk5QjkyOTlCMDFGNjc5NkE0MDA2NzIzQzIgLyogV2ViQ29udGVu
dFJlYWRlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViQ29udGVudFJlYWRlckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
QkEyNzNGMzE3MjIwNkJCMDA5N0NFNDcgLyogTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0
Q2FjaGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQTgyNzc4MUYwNjE1NjUw
MEY3MUU3NSAvKiBOYXZpZ2F0aW9uRGlzYWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTmF2aWdhdGlvbkRpc2FibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTlCQUFDNDU2MjE1MUUzOUUwMDNENEE5OCAvKiBTdHJvbmdOb2RlUmVmLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0cm9uZ05vZGVSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUJB
QUM0NTgyMTUxRTc3QTAwM0Q0QTk4IC8qIFN0cm9uZ05vZGVSZWYuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3Ryb25nTm9kZVJlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlC
QUI2QzZBMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRWRpdGluZ1N0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTlCQUI2QzZCMTI1NTA2MzEwMDE2MjZENCAvKiBFZGl0aW5nU3R5bGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWRpdGluZ1N0eWxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJBRjNCMjMxMkMxQTM5ODAwMDE0QkYxIC8qIFdyaXRp
bmdEaXJlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV3JpdGluZ0Rp
cmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM5NTEsOCArMjM5NTQs
OCBAQAogCQkJCTJEMEI0QUE5MThEQTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UuaCAqLywKIAkJ
CQkyRDBCNEFBQTE4REExQ0NEMDA0MzRERTEgLyogSU9TdXJmYWNlLm1tICovLAogCQkJCUFEOUZG
NkUwMTkwODM5MUQwMDNCNjFFMCAvKiBJT1N1cmZhY2VQb29sQ29jb2EubW0gKi8sCi0JCQkJQ0RD
NDhBQzcyMTQ5Q0YyQTAwMjRGRDU5IC8qIE1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlD
b2NvYS5oICovLAogCQkJCUNEQzQ4QUM4MjE0OUNGMkEwMDI0RkQ1OSAvKiBNZWRpYUVuZ2luZUNv
bmZpZ3VyYXRpb25GYWN0b3J5Q29jb2EuY3BwICovLAorCQkJCUNEQzQ4QUM3MjE0OUNGMkEwMDI0
RkQ1OSAvKiBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5Q29jb2EuaCAqLywKIAkJCQk1
MjY3MjRGMjFDQjJGREY2MDA3NTk3NEQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5o
ICovLAogCQkJCTUyNjcyNEYxMUNCMkZERjYwMDc1OTc0RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNvY29hLm1tICovLAogCQkJCTJEM0VGNDQ0MTkxNzkxNUMwMDAzNDE4NCAvKiBXZWJBY3Rp
b25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUuaCAqLywKQEAgLTI0NzMwLDggKzI0NzMzLDggQEAK
IAkJQ0Q2NjlENjUxRDIzMkRGNDAwNEQxODY2IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk0MTdGN0FFQTIxMzlCRjY0MDBGQkE3RUMgLyog
TWVkaWFTZXNzaW9uTWFuYWdlckNvY29hLm1tICovLAogCQkJCTQxN0Y3QUVEMjEzOUJGNjUwMEZC
QTdFQyAvKiBNZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EuaCAqLywKKwkJCQk0MTdGN0FFQTIxMzlC
RjY0MDBGQkE3RUMgLyogTWVkaWFTZXNzaW9uTWFuYWdlckNvY29hLm1tICovLAogCQkJCTQxN0Y3
QUVCMjEzOUJGNjQwMEZCQTdFQyAvKiBXZWJBdWRpb0J1ZmZlckxpc3QuY3BwICovLAogCQkJCTQx
N0Y3QUVDMjEzOUJGNjUwMEZCQTdFQyAvKiBXZWJBdWRpb0J1ZmZlckxpc3QuaCAqLywKIAkJCSk7
CkBAIC0yNjU3MSw2ICsyNjU3NCw4IEBACiAJCQkJODEwMkM1ODcxMzI1QkIxMTAwRERFNjdBIC8q
IFN0cmluZ0NhbGxiYWNrLmNwcCAqLywKIAkJCQk4MUFDNkMzNTEzMUM1N0QzMDAwOUE3RTAgLyog
U3RyaW5nQ2FsbGJhY2suaCAqLywKIAkJCQk4MUFDNkMzNDEzMUM1N0MyMDAwOUE3RTAgLyogU3Ry
aW5nQ2FsbGJhY2suaWRsICovLAorCQkJCTlCQUFDNDU4MjE1MUU3N0EwMDNENEE5OCAvKiBTdHJv
bmdOb2RlUmVmLmNwcCAqLywKKwkJCQk5QkFBQzQ1NjIxNTFFMzlFMDAzRDRBOTggLyogU3Ryb25n
Tm9kZVJlZi5oICovLAogCQkJCUE4QzRBN0VDMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVt
ZW50LmNwcCAqLywKIAkJCQlBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVu
dC5oICovLAogCQkJCUM5OTA1ODEyMUUzMkI3MzQwMDczQkREQSAvKiBTdWNjZXNzT3IuaCAqLywK
QEAgLTI5NDcyLDYgKzI5NDc3LDcgQEAKIAkJCQkyRDlCRjcwNjFEQkZCQjI0MDA3QTdEOTkgLyog
TWVkaWFFbmNyeXB0ZWRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5QkY3MDgxREJGQkIy
NDAwN0E3RDk5IC8qIE1lZGlhRW5jcnlwdGVkRXZlbnRJbml0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0MUIyOEIxNTFGODUwMUQzMDBGQjUyQUMgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCUNEQzQ4QUM5MjE0OUNGMkEwMDI0RkQ1OSAvKiBNZWRpYUVu
Z2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5Q29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYx
M0FEMENENjMzMTAwMEZBREE3NSAvKiBNZWRpYUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
RTE5NTkyMjBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA3QTZEMUVDMTQ5MTEzNzcwMDA1MUQwQyAvKiBNZWRpYUZyYWdtZW50VVJJUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjg2LDcgKzMwMjkyLDYgQEAKIAkJCQk1MTdBNTM0
RjFGNTRBOEJBMDBEQ0RDMEEgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxN0E1MzI5MUY0QjkwQjkwMERDREMwQSAvKiBTZXJ2aWNlV29ya2Vy
UmVnaXN0cmF0aW9uS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUYxNzU2OTFGM0VCQzgzMDBD
NzQ5NTAgLyogU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9wdGlvbnMuaCBpbiBIZWFkZXJzICov
LAotCQkJCUNEQzQ4QUM5MjE0OUNGMkEwMDI0RkQ1OSAvKiBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRp
b25GYWN0b3J5Q29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQkNDRTMwMUY4RjE3OUUwMDZC
QTBFRCAvKiBTZXJ2aWNlV29ya2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTEyQjU0
MzFGOUY5Q0EwMDBFNjc4NzUgLyogU2VydmljZVdvcmtlclRocmVhZFByb3h5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTVFMzdGNjFGQUE5NDAyMDBEN0YyMkEgLyogU2VydmljZVdvcmtlclR5cGVz
LmggaW4gSGVhZGVycyAqLywKQEAgLTMwNDAzLDYgKzMwNDA4LDcgQEAKIAkJCQlFQ0E2ODBDNzFF
Njc3MjQ1MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
QjZDNDE1MzEzNDQ5NDkwMDAwODVCNjIgLyogU3RyaW5nV2l0aERpcmVjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODQ5Rjc3NzYwRUZFQzYyMDAwOTA4NDlEIC8qIFN0cm9rZVN0eWxlQXBwbGll
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUJBQUM0NUMyMTUyMDEyODAwM0Q0QTk4IC8qIFN0cm9u
Z05vZGVSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNEI4MjA1MUQ2REYwRTUwMDc3RUJFMyAv
KiBTdHJ1Y3R1cmVkQ2xvbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNkEzMEU4MURDNEYw
MEIyNTk2NSAvKiBTdHlsZUJhY2tncm91bmREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVF
QjY3QjBFODFEM0JFMDBCMjU5NjUgLyogU3R5bGVCb3hEYXRhLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjM2MjA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgIlNWR0VsZW1lbnQu
aCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNp
bmNsdWRlICJTdHJvbmdOb2RlUmVmLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldC5oIgogI2luY2x1
ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC0xMDcsNiArMTA4LDEx
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlYWNoYWJsZUZyb21ET00oTm8KICAgICAgICAgICAg
ICAgICAqcmVhc29uID0gIk5vZGUgd2hpY2ggaXMgZmlyaW5nIGV2ZW50IGxpc3RlbmVycyI7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQorICAgICAgICBpZiAoU3Ryb25nTm9k
ZVJlZk1hcDo6Y29udGFpbnMoKm5vZGUpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkocmVh
c29uKSkKKyAgICAgICAgICAgICAgICAqcmVhc29uID0gIk5vZGUgaXMgc2NoZWR1bGVkIHRvIGJl
IHVzZWQgaW4gYW4gYXN5bmMgc2NyaXB0IGludm9jYXRpb24pIjsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKFVOTElLRUxZKHJlYXNvbikpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1
ZS5jcHAJKHJldmlzaW9uIDIzNjIwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50UmVhY3Rpb25RdWV1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCwxNSArMjM0LDE0IEBA
IGlubGluZSB2b2lkIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlOjoKIHsKICAgICBSRUxFQVNF
X0FTU0VSVCghbV9pbnZva2luZyk7CiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaW52b2tpbmcobV9p
bnZva2luZywgdHJ1ZSk7Ci0gICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gZWxlbWVudHM7Ci0gICAg
ZWxlbWVudHMuc3dhcChtX2VsZW1lbnRzKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2VsZW1lbnRz
LmlzRW1wdHkoKSk7Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudHMpIHsKKyAgICBh
dXRvIG9yaWdpbmFsU2l6ZSA9IG1fZWxlbWVudHMuc2l6ZSgpOworICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IG1fZWxlbWVudHMpIHsKICAgICAgICAgYXV0byogcXVldWUgPSBlbGVtZW50LT5yZWFj
dGlvblF1ZXVlKCk7CiAgICAgICAgIEFTU0VSVChxdWV1ZSk7CiAgICAgICAgIHF1ZXVlLT5pbnZv
a2VBbGwoZWxlbWVudC5nZXQoKSk7CiAgICAgfQotICAgIFJFTEVBU0VfQVNTRVJUKG1fZWxlbWVu
dHMuaXNFbXB0eSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2VsZW1lbnRzLnNpemUoKSA9PSBv
cmlnaW5hbFNpemUpOworICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKIH0KIAogaW5saW5lIHZvaWQg
Q3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWU6OkVsZW1lbnRRdWV1ZTo6cHJvY2Vzc1F1ZXVlKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FbGVt
ZW50UmVhY3Rpb25RdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0
b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oCShyZXZpc2lvbiAyMzYyMDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIlN0cm9uZ05vZGVSZWYu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTcxLDcgKzcyLDcgQEAgcHVibGljOgogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgaW52b2tlQWxsKCk7CiAKLSAgICAgICAgVmVjdG9yPFJl
ZjxFbGVtZW50Pj4gbV9lbGVtZW50czsKKyAgICAgICAgVmVjdG9yPFN0cm9uZ05vZGVSZWY8RWxl
bWVudD4+IG1fZWxlbWVudHM7CiAgICAgICAgIGJvb2wgbV9pbnZva2luZyB7IGZhbHNlIH07CiAg
ICAgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0cm9uZ05vZGVSZWYuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHJvbmdOb2RlUmVmLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3Ryb25nTm9kZVJlZi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTdHJvbmdOb2RlUmVmLmgiCisKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitIYXNoQ291bnRlZFNldDxOb2RlKj4mIFN0cm9u
Z05vZGVSZWZNYXA6Om1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hDb3Vu
dGVkU2V0PE5vZGUqPj4gbWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHJvbmdOb2RlUmVmLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0cm9uZ05vZGVSZWYuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3Ryb25nTm9kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL0R1bWJQdHJUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTm9k
ZTsKKworY2xhc3MgU3Ryb25nTm9kZVJlZk1hcCB7CitwdWJsaWM6CisgICAgc3RhdGljIGlubGlu
ZSBib29sIGNvbnRhaW5zKE5vZGUmIG5vZGUpIHsgcmV0dXJuIG1hcCgpLmNvbnRhaW5zKCZub2Rl
KTsgfQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGQoTm9kZSYgbm9kZSkgeyBtYXAoKS5hZGQo
Jm5vZGUpOyB9CisgICAgc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZShOb2RlJiBub2RlKSB7IG1h
cCgpLnJlbW92ZSgmbm9kZSk7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgSGFzaENvdW50ZWRT
ZXQ8Tm9kZSo+JiBtYXAoKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPFQsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2Nv
bnN0PFQ+Ojp0eXBlPjo6dmFsdWU+PgorY2xhc3MgU3Ryb25nTm9kZVJlZiB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU3Ryb25nTm9kZVJlZik7CitwdWJsaWM6CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29mPE5vZGUsIFQ+Ojp2YWx1
ZT4+CisgICAgU3Ryb25nTm9kZVJlZihUJiBvYmplY3QpCisgICAgICAgIDogbV9yZWYob2JqZWN0
KQorICAgIHsKKyAgICAgICAgU3Ryb25nTm9kZVJlZk1hcDo6YWRkKG1fcmVmLmdldCgpKTsKKyAg
ICB9CisKKyAgICB+U3Ryb25nTm9kZVJlZigpCisgICAgeworICAgICAgICBpZiAoIWlzTnVsbCgp
KQorICAgICAgICAgICAgU3Ryb25nTm9kZVJlZk1hcDo6cmVtb3ZlKG1fcmVmLmdldCgpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBYLCB0eXBlbmFtZSBZLCB0eXBlbmFtZSA9IHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29mPE5vZGUsIFQ+Ojp2YWx1ZT4+CisgICAgU3Ry
b25nTm9kZVJlZihSZWY8WCwgWT4mJiBvdGhlcikKKyAgICAgICAgOiBtX3JlZihXVEZNb3ZlKG90
aGVyLm1fcmVmKSkKKyAgICB7CisgICAgICAgIGlmICghaXNOdWxsKCkpCisgICAgICAgICAgICBT
dHJvbmdOb2RlUmVmTWFwOjphZGQobV9yZWYuZ2V0KCkpOworICAgIH0KKworICAgIFN0cm9uZ05v
ZGVSZWYoU3Ryb25nTm9kZVJlZiYmIG90aGVyKQorICAgICAgICA6IG1fcmVmKFdURk1vdmUob3Ro
ZXIubV9yZWYpKQorICAgIHsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBYLCB0eXBl
bmFtZSBZPiBTdHJvbmdOb2RlUmVmKGNvbnN0IFN0cm9uZ05vZGVSZWY8WCwgWT4mIG90aGVyKSA9
IGRlbGV0ZTsKKworICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IEFTU0VSVCghaXNOdWxsKCkp
OyByZXR1cm4gbV9yZWYucHRyKCk7IH0KKyAgICBUKiBwdHIoKSBjb25zdCBSRVRVUk5TX05PTk5V
TEwgeyBBU1NFUlQoIWlzTnVsbCgpKTsgcmV0dXJuIG1fcmVmLnB0cigpOyB9CisgICAgVCYgZ2V0
KCkgY29uc3QgeyBBU1NFUlQoIWlzTnVsbCgpKTsgcmV0dXJuIG1fcmVmLmdldCgpOyB9CisgICAg
b3BlcmF0b3IgVCYoKSBjb25zdCB7IEFTU0VSVCghaXNOdWxsKCkpOyByZXR1cm4gbV9yZWYuZ2V0
KCk7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgQVNTRVJUKCFpc051bGwoKSk7IHJl
dHVybiAhbV9yZWYuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVmLmlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpOyB9CisKKyAgICBSZWY8VD4g
bV9yZWY7Cit9OworCit9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzYyMDcpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxOC0wOS0yMCAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBDdXN0b20gZWxlbWVu
dHMgaW4gYSByZWFjdGlvbiBxdWV1ZSBjYW4gbG9zZSBpdHMgSlMgd3JhcHBlciBhbmQgYmVjb21l
IEhUTUxVbmtub3duRWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTg0MzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IGZvciBlbnF1ZXVpbmcgYSBsb3Qgb2YgY3VzdG9tIGVs
ZW1lbnRzIGludG8gdGhlIHJlYWN0aW9uIHF1ZXVlIHZpYSBpbm5lckhUTUwgc2V0dGVyLgorICAg
ICAgICBXZWJLaXQgc2hvdWxkIHJldGFpbiB0aGUgSlMgd3JhcHBlcnMgb2YgYWxsIGN1c3RvbSBl
bGVtZW50cy4KKworICAgICAgICAqIGZhc3QvY3VzdG9tLWVsZW1lbnRzL2N1c3RvbS1lbGVtZW50
cy1yZWFjdGlvbi1xdWV1ZS1yZXRhaW5zLWpzLXdyYXBwZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2N1c3RvbS1lbGVtZW50cy9jdXN0b20tZWxlbWVudHMtcmVhY3Rpb24t
cXVldWUtcmV0YWlucy1qcy13cmFwcGVyLmh0bWw6IEFkZGVkLgorCiAyMDE4LTA5LTE5ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgc2VuZGVy
L3JlY2VpdmVyIGdldFN0YXRzCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2N1c3RvbS1lbGVtZW50
cy9jdXN0b20tZWxlbWVudHMtcmVhY3Rpb24tcXVldWUtcmV0YWlucy1qcy13cmFwcGVyLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2N1c3RvbS1lbGVtZW50cy9j
dXN0b20tZWxlbWVudHMtcmVhY3Rpb24tcXVldWUtcmV0YWlucy1qcy13cmFwcGVyLWV4cGVjdGVk
LnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2N1c3RvbS1lbGVtZW50cy9j
dXN0b20tZWxlbWVudHMtcmVhY3Rpb24tcXVldWUtcmV0YWlucy1qcy13cmFwcGVyLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBACitUaGlzIHRlc3RzIGVucXVldWlu
ZyBhIGxvdCBvZiBjdXN0b20gZWxlbWVudHMgZHVyaW5nIGlubmVySFRNTC4KK1dlYktpdCBzaG91
bGQgbm90IGxvc2UgSlMgd3JhcHBlcnMgb2YgdGhvc2UgY3VzdG9tIGVsZW1lbnRzLgorCitQQVNT
CitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQ
QVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNTCitQQVNT
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3VzdG9tLWVsZW1lbnRzL2N1c3RvbS1lbGVtZW50
cy1yZWFjdGlvbi1xdWV1ZS1yZXRhaW5zLWpzLXdyYXBwZXIuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2N1c3RvbS1lbGVtZW50cy9jdXN0b20tZWxlbWVudHMtcmVhY3Rpb24t
cXVldWUtcmV0YWlucy1qcy13cmFwcGVyLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jdXN0b20tZWxlbWVudHMvY3VzdG9tLWVsZW1lbnRzLXJlYWN0aW9uLXF1ZXVlLXJl
dGFpbnMtanMtd3JhcHBlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdHMgZW5xdWV1aW5nIGEg
bG90IG9mIGN1c3RvbSBlbGVtZW50cyBkdXJpbmcgaW5uZXJIVE1MLjxicj4KK1dlYktpdCBzaG91
bGQgbm90IGxvc2UgSlMgd3JhcHBlcnMgb2YgdGhvc2UgY3VzdG9tIGVsZW1lbnRzLjwvcD4KKzxw
cmUgaWQ9ImxvZyI+PC9wcmU+Cis8ZGl2IGlkPSJjb250YWluZXIiPjxzY3JpcHQ+CitsZXQgZmFp
bENvdW50ID0gMDsKK2NsYXNzIE15Q29tcG9uZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQgeworICAg
IGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgeworICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2Yg
TXlDb21wb25lbnQpKQorICAgICAgICAgICAgZmFpbENvdW50Kys7CisgICAgICAgIGNvbnN0IHgg
PSBuZXcgQXJyYXkoMTAwKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykK
KyAgICAgICAgICAgIHhbaV0gPSBuZXcgQXJyYXkoMTApOworICAgIH0KK30KK2N1c3RvbUVsZW1l
bnRzLmRlZmluZSgibXktY29tcG9uZW50IiwgTXlDb21wb25lbnQpOworCitpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK2xldCBjb250ZW50ID0g
Jyc7Citmb3IgKGxldCBpID0gMDsgaSA8IDUwOyBpKyspCisgICAgY29udGVudCArPSAnPG15LWNv
bXBvbmVudD48L215LWNvbXBvbmVudD4nOworY29udGVudCArPSAnPG15LWNvbXBvbmVudCBpZD0i
bGFzdCI+PC9teS1jb21wb25lbnQ+JworCitsZXQgZmlyc3QgPSB0cnVlOworZm9yIChsZXQgdGVz
dCA9IDA7IHRlc3QgPCAyMDsgdGVzdCsrKSB7CisgICAgZmFpbENvdW50ID0gMDsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDEwOyBpKyspCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb250YWluZXInKS5pbm5lckhUTUwgPSBjb250ZW50OworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdsb2cnKS5hcHBlbmQoZmFpbENvdW50ID8gYEZBSUwgLSAke2ZhaWxDb3VudH0gZWxl
bWVudHMgbG9zdCB3cmFwcGVyc1xuYCA6ICdQQVNTXG4nKTsKK30KK2RvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb250YWluZXInKS50ZXh0Q29udGVudCA9ICcnOworCis8L3NjcmlwdD48L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>
<flag name="review"
          id="367662"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>