<?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>179463</bug_id>
          
          <creation_ts>2017-11-08 19:43:39 -0800</creation_ts>
          <short_desc>Isolated Heaps caused an increase in reported leaks on the bots</short_desc>
          <delta_ts>2017-11-27 10:25:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>bmalloc</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>rniwa</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1369766</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-11-08 19:43:39 -0800</bug_when>
    <thetext>Isolated Heaps caused an increase in reported leaks on the bots

The leaks bot saw a large jump in reported leaks once iso-heaps was enabled:
https://build.webkit.org/builders/Apple%20High%20Sierra%20%28Leaks%29?numbuilds=50

&gt; Nov 07 14:26	#782	Failed 18278 total leaks found for a total of 2,786,128 bytes. 491 unique leaks found. 5 failures 86 new passes
&gt; Nov 07 13:43	#781	Failed 17084 total leaks found for a total of 1,956,160 bytes. 468 unique leaks found. 2 failures 85 new passes
&gt; Nov 07 12:59	#780	Failed 39904 total leaks found for a total of 2,416,544 bytes. 463 unique leaks found. 6 failures 85 new passes
&gt; Nov 07 12:16	#779	Failed 19515 total leaks found for a total of 2,689,152 bytes. 513 unique leaks found. 3 failures 86 new passes
&gt; Nov 07 11:29	#778	Failed 5109 total leaks found for a total of 483,168 bytes. 385 unique leaks found. 6 failures 86 new passes
&gt; Nov 07 10:48	#777	Failed 5438 total leaks found for a total of 579,648 bytes. 438 unique leaks found. 5 failures 86 new passes
&gt; Nov 07 10:07	#776	Failed 5766 total leaks found for a total of 645,120 bytes. 389 unique leaks found. 7 failures 86 new passes
&gt; Nov 07 08:59	#775	Failed 4415 total leaks found for a total of 385,248 bytes. 252 unique leaks found. 3 failures 86 new passes

The jump came with Iso-Heaps:
https://build.webkit.org/builders/Apple%20High%20Sierra%20%28Leaks%29/builds/779</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369767</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-08 19:45:00 -0800</bug_when>
    <thetext>&lt;rdar://problem/35433570&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369955</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-11-09 10:34:05 -0800</bug_when>
    <thetext>Seems like maybe iOS-heaps didn&apos;t adopt the Zone API?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369998</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-09 11:56:49 -0800</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #2)
&gt; Seems like maybe iOS-heaps didn&apos;t adopt the Zone API?

Yeah. And closely related, it doesn’t use DebugHeap when necessary. I’m fixing both things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370093</commentid>
    <comment_count>4</comment_count>
      <attachid>326502</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-09 16:09:43 -0800</bug_when>
    <thetext>Created attachment 326502
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370155</commentid>
    <comment_count>5</comment_count>
      <attachid>326526</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-09 18:21:29 -0800</bug_when>
    <thetext>Created attachment 326526
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1370204</commentid>
    <comment_count>6</comment_count>
      <attachid>326545</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-09 20:49:56 -0800</bug_when>
    <thetext>Created attachment 326545
it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372797</commentid>
    <comment_count>7</comment_count>
      <attachid>327106</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-16 14:14:44 -0800</bug_when>
    <thetext>Created attachment 327106
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372798</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-16 14:16:54 -0800</bug_when>
    <thetext>Attachment 327106 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/bmalloc.h:73:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/bmalloc/bmalloc/bmalloc.h:73:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/bmalloc/bmalloc/bmalloc.h:82:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/bmalloc/bmalloc/bmalloc.h:82:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/bmalloc/bmalloc/bmalloc.h:93:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/bmalloc/bmalloc/IsoPage.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6 in 12 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>1373165</commentid>
    <comment_count>9</comment_count>
      <attachid>327106</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-11-17 11:07:40 -0800</bug_when>
    <thetext>Comment on attachment 327106
the patch

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

Nice! I don&apos;t think I&apos;m qualified to review this, but I&apos;m excited to see it addressed!

&gt; Source/bmalloc/bmalloc/IsoPage.cpp:23
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 

I see this continues the trend of all bmalloc copyright comments having trailing whitespace =P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373313</commentid>
    <comment_count>10</comment_count>
      <attachid>327244</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-17 14:43:51 -0800</bug_when>
    <thetext>Created attachment 327244
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373314</commentid>
    <comment_count>11</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-17 14:45:03 -0800</bug_when>
    <thetext>Attachment 327244 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/bmalloc.h:73:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/bmalloc/bmalloc/bmalloc.h:73:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/bmalloc/bmalloc/bmalloc.h:82:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/bmalloc/bmalloc/bmalloc.h:82:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/bmalloc/bmalloc/bmalloc.h:93:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/bmalloc/bmalloc/IsoPage.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374257</commentid>
    <comment_count>12</comment_count>
      <attachid>327244</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-22 11:46:21 -0800</bug_when>
    <thetext>Comment on attachment 327244
the patch

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

Read this carefully. Did not spot any errors. Yet all my comments are about trivia.

&gt; Source/bmalloc/bmalloc/DebugHeap.h:50
&gt; -
&gt; +    

Added whitespace here.

&gt; Source/bmalloc/bmalloc/IsoHeap.h:60
&gt; -    
&gt; +

Removed whitespace here.

Doesn’t seem like we should make both those changes.

&gt; Source/bmalloc/bmalloc/IsoTLS.h:108
&gt; -
&gt; +    

Again adding whitespace.

&gt; Source/bmalloc/bmalloc/IsoTLSInlines.h:99
&gt; +    // since we don&apos;t want unpredictable behavior of offset or m_extent ever got corrupted.

typo: &quot;of&quot; instead of &quot;if&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374491</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-23 16:46:18 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Comment on attachment 327244 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=327244&amp;action=review
&gt; 
&gt; Read this carefully. Did not spot any errors. Yet all my comments are about
&gt; trivia.
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/DebugHeap.h:50
&gt; &gt; -
&gt; &gt; +    
&gt; 
&gt; Added whitespace here.

Removed.

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/IsoHeap.h:60
&gt; &gt; -    
&gt; &gt; +
&gt; 
&gt; Removed whitespace here.
&gt; 
&gt; Doesn’t seem like we should make both those changes.

Removed.

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/IsoTLS.h:108
&gt; &gt; -
&gt; &gt; +    
&gt; 
&gt; Again adding whitespace.

Fixed.

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/IsoTLSInlines.h:99
&gt; &gt; +    // since we don&apos;t want unpredictable behavior of offset or m_extent ever got corrupted.
&gt; 
&gt; typo: &quot;of&quot; instead of &quot;if&quot;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374492</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-23 16:48:40 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/225125/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374979</commentid>
    <comment_count>15</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-11-27 10:06:14 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #14)
&gt; Landed in http://trac.webkit.org/changeset/225125/webkit
This change caused crashes on the leaks bot:
https://build.webkit.org/builders/Apple%20High%20Sierra%20%28Leaks%29/builds/1082

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.JavaScriptCore      	0x000000010fc138c7 0x10f083000 + 12126407
1   com.apple.JavaScriptCore      	0x000000010fc1c6ce bmalloc::api::scavenge() + 46 (bmalloc.cpp:62)
2   com.apple.WebCore             	0x0000000112364ff4 WebCore::GCController::garbageCollectNow() + 180
3   DumpRenderTree                	0x000000010ee27fee collectCallback(OpaqueJSContext const*, OpaqueJSValue*, OpaqueJSValue*, unsigned long, OpaqueJSValue const* const*, OpaqueJSValue const**) + 25 (GCController.cpp:49)
4   com.apple.JavaScriptCore      	0x000000010f0b68a5 long long JSC::APICallbackFunction::call&lt;JSC::JSCallbackFunction&gt;(JSC::ExecState*) + 501 (APICallbackFunction.h:63)
5   ???                           	0x000051c9bfe01023 0 + 89926949408803
6   com.apple.JavaScriptCore      	0x000000010f08b60b llint_entry + 28563
7   com.apple.JavaScriptCore      	0x000000010f08b60b llint_entry + 28563
8   com.apple.JavaScriptCore      	0x000000010f08b60b llint_entry + 28563
9   com.apple.JavaScriptCore      	0x000000010f084490 vmEntryToJavaScript + 304
10  com.apple.JavaScriptCore      	0x000000010f7706cf JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) + 127 (JITCode.cpp:82)
11  com.apple.JavaScriptCore      	0x000000010f73deba JSC::Interpreter::executeProgram(JSC::SourceCode const&amp;, JSC::ExecState*, JSC::JSObject*) + 14314 (Interpreter.cpp:940)
12  com.apple.JavaScriptCore      	0x000000010f92cd73 JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) + 307 (Completion.cpp:103)
13  com.apple.WebCore             	0x0000000112396081 WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&amp;, WebCore::DOMWrapperWorld&amp;, WebCore::ExceptionDetails*) + 305 (ScriptController.cpp:177)
14  com.apple.WebCore             	0x0000000112394831 WebCore::ScriptController::executeScriptInWorld(WebCore::DOMWrapperWorld&amp;, WTF::String const&amp;, bool) + 529 (ScriptController.cpp:665)
15  com.apple.WebCore             	0x0000000112393e8c WebCore::ScheduledAction::execute(WebCore::Document&amp;) + 172 (ScheduledAction.cpp:144)
16  com.apple.WebCore             	0x000000011292dc3b WebCore::DOMTimer::fired() + 715 (InspectorInstrumentation.h:819)
17  com.apple.WebCore             	0x0000000112a0c9d0 WebCore::ThreadTimers::sharedTimerFiredInternal() + 176 (ThreadTimers.cpp:121)
18  com.apple.WebCore             	0x0000000112a45bbf WebCore::timerFired(__CFRunLoopTimer*, void*) + 31 (MainThreadSharedTimerCF.cpp:75)
19  com.apple.CoreFoundation      	0x00007fff2e81c2d4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
20  com.apple.CoreFoundation      	0x00007fff2e81bf54 __CFRunLoopDoTimer + 1108
21  com.apple.CoreFoundation      	0x00007fff2e81ba4a __CFRunLoopDoTimers + 346
22  com.apple.CoreFoundation      	0x00007fff2e81321b __CFRunLoopRun + 2427
23  com.apple.CoreFoundation      	0x00007fff2e812607 CFRunLoopRunSpecific + 487
24  DumpRenderTree                	0x000000010ee1d2fe runTest(std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt; const&amp;) + 2673 (DumpRenderTree.mm:2030)
25  DumpRenderTree                	0x000000010ee1c62e dumpRenderTree(int, char const**) + 3522 (DumpRenderTree.mm:1294)
26  DumpRenderTree                	0x000000010ee1ddd8 DumpRenderTreeMain(int, char const**) + 1454 (DumpRenderTree.mm:1410)
27  libdyld.dylib                 	0x00007fff55e1b145 start + 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374981</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-27 10:08:11 -0800</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #15)
&gt; (In reply to Filip Pizlo from comment #14)
&gt; &gt; Landed in http://trac.webkit.org/changeset/225125/webkit
&gt; This change caused crashes on the leaks bot:
&gt; https://build.webkit.org/builders/Apple%20High%20Sierra%20%28Leaks%29/builds/
&gt; 1082
&gt; 
&gt; Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
&gt; 0   com.apple.JavaScriptCore      	0x000000010fc138c7 0x10f083000 + 12126407
&gt; 1   com.apple.JavaScriptCore      	0x000000010fc1c6ce
&gt; bmalloc::api::scavenge() + 46 (bmalloc.cpp:62)
&gt; 2   com.apple.WebCore             	0x0000000112364ff4
&gt; WebCore::GCController::garbageCollectNow() + 180
&gt; 3   DumpRenderTree                	0x000000010ee27fee
&gt; collectCallback(OpaqueJSContext const*, OpaqueJSValue*, OpaqueJSValue*,
&gt; unsigned long, OpaqueJSValue const* const*, OpaqueJSValue const**) + 25
&gt; (GCController.cpp:49)
&gt; 4   com.apple.JavaScriptCore      	0x000000010f0b68a5 long long
&gt; JSC::APICallbackFunction::call&lt;JSC::JSCallbackFunction&gt;(JSC::ExecState*) +
&gt; 501 (APICallbackFunction.h:63)
&gt; 5   ???                           	0x000051c9bfe01023 0 + 89926949408803
&gt; 6   com.apple.JavaScriptCore      	0x000000010f08b60b llint_entry + 28563
&gt; 7   com.apple.JavaScriptCore      	0x000000010f08b60b llint_entry + 28563
&gt; 8   com.apple.JavaScriptCore      	0x000000010f08b60b llint_entry + 28563
&gt; 9   com.apple.JavaScriptCore      	0x000000010f084490 vmEntryToJavaScript +
&gt; 304
&gt; 10  com.apple.JavaScriptCore      	0x000000010f7706cf
&gt; JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) + 127 (JITCode.cpp:82)
&gt; 11  com.apple.JavaScriptCore      	0x000000010f73deba
&gt; JSC::Interpreter::executeProgram(JSC::SourceCode const&amp;, JSC::ExecState*,
&gt; JSC::JSObject*) + 14314 (Interpreter.cpp:940)
&gt; 12  com.apple.JavaScriptCore      	0x000000010f92cd73
&gt; JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue,
&gt; WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) + 307 (Completion.cpp:103)
&gt; 13  com.apple.WebCore             	0x0000000112396081
&gt; WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&amp;,
&gt; WebCore::DOMWrapperWorld&amp;, WebCore::ExceptionDetails*) + 305
&gt; (ScriptController.cpp:177)
&gt; 14  com.apple.WebCore             	0x0000000112394831
&gt; WebCore::ScriptController::executeScriptInWorld(WebCore::DOMWrapperWorld&amp;,
&gt; WTF::String const&amp;, bool) + 529 (ScriptController.cpp:665)
&gt; 15  com.apple.WebCore             	0x0000000112393e8c
&gt; WebCore::ScheduledAction::execute(WebCore::Document&amp;) + 172
&gt; (ScheduledAction.cpp:144)
&gt; 16  com.apple.WebCore             	0x000000011292dc3b
&gt; WebCore::DOMTimer::fired() + 715 (InspectorInstrumentation.h:819)
&gt; 17  com.apple.WebCore             	0x0000000112a0c9d0
&gt; WebCore::ThreadTimers::sharedTimerFiredInternal() + 176
&gt; (ThreadTimers.cpp:121)
&gt; 18  com.apple.WebCore             	0x0000000112a45bbf
&gt; WebCore::timerFired(__CFRunLoopTimer*, void*) + 31
&gt; (MainThreadSharedTimerCF.cpp:75)
&gt; 19  com.apple.CoreFoundation      	0x00007fff2e81c2d4
&gt; __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
&gt; 20  com.apple.CoreFoundation      	0x00007fff2e81bf54 __CFRunLoopDoTimer +
&gt; 1108
&gt; 21  com.apple.CoreFoundation      	0x00007fff2e81ba4a __CFRunLoopDoTimers +
&gt; 346
&gt; 22  com.apple.CoreFoundation      	0x00007fff2e81321b __CFRunLoopRun + 2427
&gt; 23  com.apple.CoreFoundation      	0x00007fff2e812607 CFRunLoopRunSpecific +
&gt; 487
&gt; 24  DumpRenderTree                	0x000000010ee1d2fe
&gt; runTest(std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;,
&gt; std::__1::allocator&lt;char&gt; &gt; const&amp;) + 2673 (DumpRenderTree.mm:2030)
&gt; 25  DumpRenderTree                	0x000000010ee1c62e dumpRenderTree(int,
&gt; char const**) + 3522 (DumpRenderTree.mm:1294)
&gt; 26  DumpRenderTree                	0x000000010ee1ddd8
&gt; DumpRenderTreeMain(int, char const**) + 1454 (DumpRenderTree.mm:1410)
&gt; 27  libdyld.dylib                 	0x00007fff55e1b145 start + 1

Weird, it didn&apos;t happen locally.  But it looks obvious.  Fixing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374991</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-11-27 10:25:28 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #16)
&gt; (In reply to Ryan Haddad from comment #15)
&gt; &gt; (In reply to Filip Pizlo from comment #14)
&gt; &gt; &gt; Landed in http://trac.webkit.org/changeset/225125/webkit
&gt; &gt; This change caused crashes on the leaks bot:
&gt; &gt; https://build.webkit.org/builders/Apple%20High%20Sierra%20%28Leaks%29/builds/
&gt; &gt; 1082
&gt; &gt; 
&gt; &gt; Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
&gt; &gt; 0   com.apple.JavaScriptCore      	0x000000010fc138c7 0x10f083000 + 12126407
&gt; &gt; 1   com.apple.JavaScriptCore      	0x000000010fc1c6ce
&gt; &gt; bmalloc::api::scavenge() + 46 (bmalloc.cpp:62)
&gt; &gt; 2   com.apple.WebCore             	0x0000000112364ff4
&gt; &gt; WebCore::GCController::garbageCollectNow() + 180
&gt; &gt; 3   DumpRenderTree                	0x000000010ee27fee
&gt; &gt; collectCallback(OpaqueJSContext const*, OpaqueJSValue*, OpaqueJSValue*,
&gt; &gt; unsigned long, OpaqueJSValue const* const*, OpaqueJSValue const**) + 25
&gt; &gt; (GCController.cpp:49)
&gt; &gt; 4   com.apple.JavaScriptCore      	0x000000010f0b68a5 long long
&gt; &gt; JSC::APICallbackFunction::call&lt;JSC::JSCallbackFunction&gt;(JSC::ExecState*) +
&gt; &gt; 501 (APICallbackFunction.h:63)
&gt; &gt; 5   ???                           	0x000051c9bfe01023 0 + 89926949408803
&gt; &gt; 6   com.apple.JavaScriptCore      	0x000000010f08b60b llint_entry + 28563
&gt; &gt; 7   com.apple.JavaScriptCore      	0x000000010f08b60b llint_entry + 28563
&gt; &gt; 8   com.apple.JavaScriptCore      	0x000000010f08b60b llint_entry + 28563
&gt; &gt; 9   com.apple.JavaScriptCore      	0x000000010f084490 vmEntryToJavaScript +
&gt; &gt; 304
&gt; &gt; 10  com.apple.JavaScriptCore      	0x000000010f7706cf
&gt; &gt; JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) + 127 (JITCode.cpp:82)
&gt; &gt; 11  com.apple.JavaScriptCore      	0x000000010f73deba
&gt; &gt; JSC::Interpreter::executeProgram(JSC::SourceCode const&amp;, JSC::ExecState*,
&gt; &gt; JSC::JSObject*) + 14314 (Interpreter.cpp:940)
&gt; &gt; 12  com.apple.JavaScriptCore      	0x000000010f92cd73
&gt; &gt; JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue,
&gt; &gt; WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) + 307 (Completion.cpp:103)
&gt; &gt; 13  com.apple.WebCore             	0x0000000112396081
&gt; &gt; WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&amp;,
&gt; &gt; WebCore::DOMWrapperWorld&amp;, WebCore::ExceptionDetails*) + 305
&gt; &gt; (ScriptController.cpp:177)
&gt; &gt; 14  com.apple.WebCore             	0x0000000112394831
&gt; &gt; WebCore::ScriptController::executeScriptInWorld(WebCore::DOMWrapperWorld&amp;,
&gt; &gt; WTF::String const&amp;, bool) + 529 (ScriptController.cpp:665)
&gt; &gt; 15  com.apple.WebCore             	0x0000000112393e8c
&gt; &gt; WebCore::ScheduledAction::execute(WebCore::Document&amp;) + 172
&gt; &gt; (ScheduledAction.cpp:144)
&gt; &gt; 16  com.apple.WebCore             	0x000000011292dc3b
&gt; &gt; WebCore::DOMTimer::fired() + 715 (InspectorInstrumentation.h:819)
&gt; &gt; 17  com.apple.WebCore             	0x0000000112a0c9d0
&gt; &gt; WebCore::ThreadTimers::sharedTimerFiredInternal() + 176
&gt; &gt; (ThreadTimers.cpp:121)
&gt; &gt; 18  com.apple.WebCore             	0x0000000112a45bbf
&gt; &gt; WebCore::timerFired(__CFRunLoopTimer*, void*) + 31
&gt; &gt; (MainThreadSharedTimerCF.cpp:75)
&gt; &gt; 19  com.apple.CoreFoundation      	0x00007fff2e81c2d4
&gt; &gt; __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
&gt; &gt; 20  com.apple.CoreFoundation      	0x00007fff2e81bf54 __CFRunLoopDoTimer +
&gt; &gt; 1108
&gt; &gt; 21  com.apple.CoreFoundation      	0x00007fff2e81ba4a __CFRunLoopDoTimers +
&gt; &gt; 346
&gt; &gt; 22  com.apple.CoreFoundation      	0x00007fff2e81321b __CFRunLoopRun + 2427
&gt; &gt; 23  com.apple.CoreFoundation      	0x00007fff2e812607 CFRunLoopRunSpecific +
&gt; &gt; 487
&gt; &gt; 24  DumpRenderTree                	0x000000010ee1d2fe
&gt; &gt; runTest(std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;,
&gt; &gt; std::__1::allocator&lt;char&gt; &gt; const&amp;) + 2673 (DumpRenderTree.mm:2030)
&gt; &gt; 25  DumpRenderTree                	0x000000010ee1c62e dumpRenderTree(int,
&gt; &gt; char const**) + 3522 (DumpRenderTree.mm:1294)
&gt; &gt; 26  DumpRenderTree                	0x000000010ee1ddd8
&gt; &gt; DumpRenderTreeMain(int, char const**) + 1454 (DumpRenderTree.mm:1410)
&gt; &gt; 27  libdyld.dylib                 	0x00007fff55e1b145 start + 1
&gt; 
&gt; Weird, it didn&apos;t happen locally.  But it looks obvious.  Fixing.

It didn&apos;t happen locally because my test sucked.

Fix and better test landed in http://trac.webkit.org/changeset/225180/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326502</attachid>
            <date>2017-11-09 16:09:43 -0800</date>
            <delta_ts>2017-11-09 18:21:29 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>8797</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvSGVhcC5oCShyZXZpc2lvbiAyMjQ2MzEpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcs
OCBAQCBzdHJ1Y3QgSXNvSGVhcCB7CiAgICAgCiAgICAgdW5zaWduZWQgZGVhbGxvY2F0b3JPZmZz
ZXQoKSB7IHJldHVybiBtX2RlYWxsb2NhdG9yT2Zmc2V0UGx1c09uZSAtIDE7IH0KICAgICB2b2lk
IHNldERlYWxsb2NhdG9yT2Zmc2V0KHVuc2lnbmVkIHZhbHVlKSB7IG1fZGVhbGxvY2F0b3JPZmZz
ZXRQbHVzT25lID0gdmFsdWUgKyAxOyB9CisKKyAgICB1bnNpZ25lZCBkZWFsbG9jYXRvck9mZnNl
dFBsdXNPbmUoKSB7IHJldHVybiBtX2RlYWxsb2NhdG9yT2Zmc2V0UGx1c09uZTsgfQogICAgIAog
ICAgIElzb0hlYXBJbXBsPENvbmZpZz4mIGltcGwoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvSXNvUGFnZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0lzb1BhZ2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDYzMSkKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSXNvUGFnZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyAr
MzUsNyBAQCBuYW1lc3BhY2UgYm1hbGxvYyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+CiBJ
c29QYWdlPENvbmZpZz4qIElzb1BhZ2U8Q29uZmlnPjo6dHJ5Q3JlYXRlKElzb0RpcmVjdG9yeUJh
c2U8Q29uZmlnPiYgZGlyZWN0b3J5LCB1bnNpZ25lZCBpbmRleCkKIHsKLSAgICB2b2lkKiBtZW1v
cnkgPSB0cnlWTUFsbG9jYXRlKHBhZ2VTaXplLCBwYWdlU2l6ZSk7CisgICAgdm9pZCogbWVtb3J5
ID0gUGVyUHJvY2VzczxWTUhlYXA+OjpnZXQoKS0+dHJ5QWxsb2NhdGVMYXJnZUNodW5rKHBhZ2VT
aXplLCBwYWdlU2l6ZSwgQWxsb2NhdGlvbktpbmQ6OlBoeXNpY2FsKTsKICAgICBpZiAoIW1lbW9y
eSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0lzb1RMUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9J
c29UTFMuY3BwCShyZXZpc2lvbiAyMjQ2MzEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lz
b1RMUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDE2ICs3NiwxOSBAQCBJc29UTFMqIElzb1RM
Uzo6ZW5zdXJlRW50cmllcyh1bnNpZ25lZCBvCiAgICAgSXNvVExTRW50cnkqIHN0YXJ0RW50cnkg
PSBvbGRMYXN0RW50cnkgPyBvbGRMYXN0RW50cnkgOiBsYXlvdXQuaGVhZCgpOwogICAgIAogICAg
IElzb1RMU0VudHJ5KiB0YXJnZXRFbnRyeSA9IHN0YXJ0RW50cnk7Ci0gICAgZm9yICg7Oykgewor
ICAgIHNpemVfdCByZXF1aXJlZENhcGFjaXR5ID0gMDsKKyAgICBpZiAoc3RhcnRFbnRyeSkgewor
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBSRUxFQVNFX0JBU1NFUlQodGFyZ2V0RW50
cnkpOworICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHRhcmdldEVudHJ5LT5vZmZzZXQoKSA8
PSBvZmZzZXQpOworICAgICAgICAgICAgaWYgKHRhcmdldEVudHJ5LT5vZmZzZXQoKSA9PSBvZmZz
ZXQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB0YXJnZXRFbnRyeSA9IHRh
cmdldEVudHJ5LT5tX25leHQ7CisgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHRh
cmdldEVudHJ5KTsKLSAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHRhcmdldEVudHJ5LT5vZmZzZXQo
KSA8PSBvZmZzZXQpOwotICAgICAgICBpZiAodGFyZ2V0RW50cnktPm9mZnNldCgpID09IG9mZnNl
dCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB0YXJnZXRFbnRyeSA9IHRhcmdldEVudHJ5
LT5tX25leHQ7CisgICAgICAgIHJlcXVpcmVkQ2FwYWNpdHkgPSB0YXJnZXRFbnRyeS0+ZXh0ZW50
KCk7CiAgICAgfQotICAgIFJFTEVBU0VfQkFTU0VSVCh0YXJnZXRFbnRyeSk7Ci0KLSAgICBzaXpl
X3QgcmVxdWlyZWRDYXBhY2l0eSA9IHRhcmdldEVudHJ5LT5leHRlbnQoKTsKKyAgICAKICAgICBp
ZiAoIXRscyB8fCByZXF1aXJlZENhcGFjaXR5ID4gdGxzLT5tX2NhcGFjaXR5KSB7CiAgICAgICAg
IHNpemVfdCByZXF1aXJlZFNpemUgPSBzaXplRm9yQ2FwYWNpdHkocmVxdWlyZWRDYXBhY2l0eSk7
CiAgICAgICAgIHNpemVfdCBnb29kU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Yodm1QYWdlU2l6
ZSgpLCByZXF1aXJlZFNpemUpOwpAQCAtMTEwLDE0ICsxMTMsMTYgQEAgSXNvVExTKiBJc29UTFM6
OmVuc3VyZUVudHJpZXModW5zaWduZWQgbwogICAgICAgICBzZXQodGxzKTsKICAgICB9CiAgICAg
Ci0gICAgc3RhcnRFbnRyeS0+d2Fsa1VwVG9JbmNsdXNpdmUoCi0gICAgICAgIHRhcmdldEVudHJ5
LAotICAgICAgICBbJl0gKElzb1RMU0VudHJ5KiBlbnRyeSkgewotICAgICAgICAgICAgZW50cnkt
PmNvbnN0cnVjdCh0bHMtPm1fZGF0YSArIGVudHJ5LT5vZmZzZXQoKSk7Ci0gICAgICAgIH0pOwot
ICAgIAotICAgIHRscy0+bV9sYXN0RW50cnkgPSB0YXJnZXRFbnRyeTsKLSAgICB0bHMtPm1fZXh0
ZW50ID0gdGFyZ2V0RW50cnktPmV4dGVudCgpOworICAgIGlmIChzdGFydEVudHJ5KSB7CisgICAg
ICAgIHN0YXJ0RW50cnktPndhbGtVcFRvSW5jbHVzaXZlKAorICAgICAgICAgICAgdGFyZ2V0RW50
cnksCisgICAgICAgICAgICBbJl0gKElzb1RMU0VudHJ5KiBlbnRyeSkgeworICAgICAgICAgICAg
ICAgIGVudHJ5LT5jb25zdHJ1Y3QodGxzLT5tX2RhdGEgKyBlbnRyeS0+b2Zmc2V0KCkpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0bHMtPm1fbGFzdEVudHJ5ID0gdGFyZ2V0
RW50cnk7CisgICAgICAgIHRscy0+bV9leHRlbnQgPSB0YXJnZXRFbnRyeS0+ZXh0ZW50KCk7Cisg
ICAgfQogICAgIAogICAgIHJldHVybiB0bHM7CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0lzb1RMUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExT
LmgJKHJldmlzaW9uIDIyNDYzMSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDEwICs1OCwyMiBAQCBwcml2YXRlOgogICAgIElzb1RMUygp
OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbmZpZywgdHlwZW5hbWUgVHlwZT4KLSAg
ICBzdGF0aWMgSXNvQWxsb2NhdG9yPENvbmZpZz4mIGFsbG9jYXRvcihhcGk6Oklzb0hlYXA8VHlw
ZT4mKTsKKyAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGVJbXBsKGFwaTo6SXNvSGVhcDxUeXBlPiYs
IGJvb2wgYWJvcnRPbkZhaWx1cmUpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbmZp
Zz4KKyAgICB2b2lkKiBhbGxvY2F0ZUZhc3QodW5zaWduZWQgb2Zmc2V0LCBib29sIGFib3J0T25G
YWlsdXJlKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcsIHR5cGVuYW1lIFR5
cGU+CisgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlU2xvdyhhcGk6Oklzb0hlYXA8VHlwZT4mLCBi
b29sIGFib3J0T25GYWlsdXJlKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcs
IHR5cGVuYW1lIFR5cGU+Ci0gICAgc3RhdGljIElzb0RlYWxsb2NhdG9yPENvbmZpZz4mIGRlYWxs
b2NhdG9yKGFwaTo6SXNvSGVhcDxUeXBlPiYpOworICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGVJ
bXBsKGFwaTo6SXNvSGVhcDxUeXBlPiYsIHZvaWQqIHApOworICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENvbmZpZz4KKyAgICB2b2lkIGRlYWxsb2NhdGVGYXN0KHVuc2lnbmVkIG9mZnNldCwg
dm9pZCogcCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29uZmlnLCB0eXBlbmFtZSBU
eXBlPgorICAgIHN0YXRpYyB2b2lkKiBkZWFsbG9jYXRlU2xvdyhhcGk6Oklzb0hlYXA8VHlwZT4m
LCB2b2lkKiBwKTsKICAgICAKICAgICBzdGF0aWMgSXNvVExTKiBnZXQoKTsKICAgICBzdGF0aWMg
dm9pZCBzZXQoSXNvVExTKik7CkBAIC04NSw2ICs5Nyw4IEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgbV9leHRlbnQgeyAwIH07CiAgICAgdW5zaWduZWQgbV9jYXBhY2l0eSB7IDAgfTsKICAgICBj
aGFyIG1fZGF0YVsxXTsKKyAgICAKKyAgICBCRVhQT1Igc3RhdGljIERlYnVnSGVhcCogc19kZWJ1
Z0hlYXA7CiAKICNpZiBIQVZFX1BUSFJFQURfTUFDSERFUF9ICiAgICAgc3RhdGljIGNvbnN0IHB0
aHJlYWRfa2V5X3QgdGxzS2V5ID0gX19QVEtfRlJBTUVXT1JLX0pBVkFTQ1JJUFRDT1JFX0tFWTE7
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RMU0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RMU0lubGluZXMuaAkocmV2aXNpb24gMjI0
NjMxKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFNJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KIHZvaWQqIElzb1RMUzo6YWxsb2NhdGUoYXBpOjpJc29IZWFwPFR5cGU+JiBo
YW5kbGUsIGJvb2wgYWJvcnRPbkZhaWx1cmUpCiB7Ci0gICAgcmV0dXJuIGFsbG9jYXRvcjx0eXBl
bmFtZSBhcGk6Oklzb0hlYXA8VHlwZT46OkNvbmZpZz4oaGFuZGxlKS5hbGxvY2F0ZShhYm9ydE9u
RmFpbHVyZSk7CisgICAgcmV0dXJuIGFsbG9jYXRlSW1wbDx0eXBlbmFtZSBhcGk6Oklzb0hlYXA8
VHlwZT46OkNvbmZpZz4oaGFuZGxlLCBhYm9ydE9uRmFpbHVyZSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+CkBAIC00MSw3ICs0MSw3IEBAIHZvaWQgSXNvVExTOjpkZWFsbG9jYXRlKGFw
aTo6SXNvSGVhcDxUeXAKIHsKICAgICBpZiAoIXApCiAgICAgICAgIHJldHVybjsKLSAgICBkZWFs
bG9jYXRvcjx0eXBlbmFtZSBhcGk6Oklzb0hlYXA8VHlwZT46OkNvbmZpZz4oaGFuZGxlKS5kZWFs
bG9jYXRlKHApOworICAgIGRlYWxsb2NhdGVJbXBsPHR5cGVuYW1lIGFwaTo6SXNvSGVhcDxUeXBl
Pjo6Q29uZmlnPihoYW5kbGUsIHApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpAQCAt
NjIsMjQgKzYyLDYwIEBAIHZvaWQgSXNvVExTOjpzY2F2ZW5nZShhcGk6Oklzb0hlYXA8VHlwZT4K
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29uZmlnLCB0eXBlbmFtZSBUeXBlPgotSXNvQWxsb2Nh
dG9yPENvbmZpZz4mIElzb1RMUzo6YWxsb2NhdG9yKGFwaTo6SXNvSGVhcDxUeXBlPiYgaGFuZGxl
KQordm9pZCogSXNvVExTOjphbGxvY2F0ZUltcGwoYXBpOjpJc29IZWFwPFR5cGU+JiBoYW5kbGUs
IGJvb2wgYWJvcnRPbkZhaWx1cmUpCiB7CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gaGFuZGxlLmFs
bG9jYXRvck9mZnNldCgpOwogICAgIElzb1RMUyogdGxzID0gZ2V0KCk7Ci0gICAgaWYgKCF0bHMg
fHwgb2Zmc2V0ID49IHRscy0+bV9leHRlbnQpIHsKLSAgICAgICAgdGxzID0gZW5zdXJlSGVhcEFu
ZEVudHJpZXMoaGFuZGxlKTsKLSAgICAgICAgb2Zmc2V0ID0gaGFuZGxlLmFsbG9jYXRvck9mZnNl
dCgpOwotICAgIH0KLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8SXNvQWxsb2NhdG9yPENv
bmZpZz4qPih0bHMtPm1fZGF0YSArIG9mZnNldCk7CisgICAgaWYgKCF0bHMgfHwgb2Zmc2V0ID49
IHRscy0+bV9leHRlbnQpCisgICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3c8dHlwZW5hbWUgYXBp
OjpJc29IZWFwPFR5cGU+OjpDb25maWc+KGhhbmRsZSwgYWJvcnRPbkZhaWx1cmUpOworICAgIHJl
dHVybiB0bHMtPmFsbG9jYXRlRmFzdDxDb25maWc+KG9mZnNldCwgYWJvcnRPbkZhaWx1cmUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+Cit2b2lkKiBJc29UTFM6OmFsbG9jYXRlRmFz
dCh1bnNpZ25lZCBvZmZzZXQsIGJvb2wgYWJvcnRPbkZhaWx1cmUpCit7CisgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8SXNvQWxsb2NhdG9yPENvbmZpZz4qPihtX2RhdGEgKyBvZmZzZXQpLT5h
bGxvY2F0ZShhYm9ydE9uRmFpbHVyZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbmZpZywg
dHlwZW5hbWUgVHlwZT4KK0JOT19JTkxJTkUgdm9pZCogSXNvVExTOjphbGxvY2F0ZVNsb3coYXBp
OjpJc29IZWFwPFR5cGU+JiBoYW5kbGUsIGJvb2wgYWJvcnRPbkZhaWx1cmUpCit7CisgICAgSXNv
VExTKiB0bHMgPSBlbnN1cmVIZWFwQW5kRW50cmllcyhoYW5kbGUpOworICAgIAorICAgIGlmIChQ
ZXJQcm9jZXNzPEVudmlyb25tZW50Pjo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKQorICAg
ICAgICByZXR1cm4gUGVyUHJvY2VzczxEZWJ1Z0hlYXA+OjpnZXQoKS0+bWFsbG9jKENvbmZpZzo6
b2JqZWN0U2l6ZSk7CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gaGFuZGxlLmFsbG9jYXRv
ck9mZnNldCgpOworICAgIHJldHVybiB0bHMtPmFsbG9jYXRlRmFzdDxDb25maWc+KG9mZnNldCwg
YWJvcnRPbkZhaWx1cmUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcsIHR5cGVuYW1l
IFR5cGU+Ci1Jc29EZWFsbG9jYXRvcjxDb25maWc+JiBJc29UTFM6OmRlYWxsb2NhdG9yKGFwaTo6
SXNvSGVhcDxUeXBlPiYgaGFuZGxlKQordm9pZCBJc29UTFM6OmRlYWxsb2NhdGVJbXBsKGFwaTo6
SXNvSGVhcDxUeXBlPiYgaGFuZGxlLCB2b2lkKiBwKQogewogICAgIHVuc2lnbmVkIG9mZnNldCA9
IGhhbmRsZS5kZWFsbG9jYXRvck9mZnNldCgpOwogICAgIElzb1RMUyogdGxzID0gZ2V0KCk7Ci0g
ICAgUkVMRUFTRV9CQVNTRVJUKG9mZnNldCA8IHRscy0+bV9leHRlbnQpOwotICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxJc29EZWFsbG9jYXRvcjxDb25maWc+Kj4odGxzLT5tX2RhdGEgKyBv
ZmZzZXQpOworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGJvdW5kcyBjaGVjayB3b3VsZCBiZSBoZXJl
IGV2ZW4gaWYgd2UgZGlkbid0IGhhdmUgdG8gc3VwcG9ydCBEZWJ1Z0hlYXAsCisgICAgLy8gc2lu
Y2Ugd2UgZG9uJ3Qgd2FudCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yIG9mIG9mZnNldCBvciBtX2V4
dGVudCBldmVyIGdvdCBjb3JydXB0ZWQuCisgICAgaWYgKG9mZnNldCA+PSB0bHMtPm1fZXh0ZW50
KQorICAgICAgICBkZWFsbG9jYXRlU2xvdyhoYW5kbGUsIHApOworICAgIGVsc2UKKyAgICAgICAg
dGxzLT5kZWFsbG9jYXRlRmFzdDxDb25maWc+KG9mZnNldCwgcCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbmZpZz4KK3ZvaWQgSXNvVExTOjpkZWFsbG9jYXRlRmFzdCh1bnNpZ25lZCBvZmZz
ZXQsIHZvaWQqIHApCit7CisgICAgcmVpbnRlcnByZXRfY2FzdDxJc29EZWFsbG9jYXRvcjxDb25m
aWc+Kj4obV9kYXRhICsgb2Zmc2V0KS0+ZGVhbGxvY2F0ZShwKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29uZmlnLCB0eXBlbmFtZSBUeXBlPgordm9pZCBJc29UTFM6OmRlYWxsb2NhdGVTbG93
KGFwaTo6SXNvSGVhcDxUeXBlPiYgaGFuZGxlLCB2b2lkKiBwKQoreworICAgIC8vIElmIHdlIGdv
IGRvd24gdGhpcyBwYXRoIGFuZCB3ZSBhcmVuJ3QgaW4gZGVidWcgaGVhcCBtb2RlLCB0aGVuIHRo
aXMgbWVhbnMgd2UgaGF2ZSBzb21lIGNvcnJ1cHRpb24uCisgICAgLy8gVGhpbmsgb2YgdGhpcyBh
cyByZWFsbHkgYmVpbmcgYW4gYXNzZXJ0aW9uIGFib3V0IG9mZnNldCA8IHRscy0+bV9leHRlbnQu
CisgICAgUkVMRUFTRV9CQVNTRVJUKFBlclByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNE
ZWJ1Z0hlYXBFbmFibGVkKCkpOworICAgIAorICAgIFBlclByb2Nlc3M8RGVidWdIZWFwPjo6Z2V0
KCktPmZyZWUocCk7CiB9CiAKIGlubGluZSBJc29UTFMqIElzb1RMUzo6Z2V0KCkKQEAgLTEyNCw4
ICsxNjAsMTYgQEAgQk5PX0lOTElORSBJc29UTFMqIElzb1RMUzo6ZW5zdXJlSGVhcEFuZAogICAg
ICAgICAhZ2V0KCkKICAgICAgICAgfHwgaGFuZGxlLmFsbG9jYXRvck9mZnNldCgpID49IGdldCgp
LT5tX2V4dGVudAogICAgICAgICB8fCBoYW5kbGUuZGVhbGxvY2F0b3JPZmZzZXQoKSA+PSBnZXQo
KS0+bV9leHRlbnQpOwotICAgIGVuc3VyZUhlYXAoaGFuZGxlKTsKLSAgICByZXR1cm4gZW5zdXJl
RW50cmllcyhzdGQ6Om1heChoYW5kbGUuYWxsb2NhdG9yT2Zmc2V0KCksIGhhbmRsZS5kZWFsbG9j
YXRvck9mZnNldCgpKSk7CisgICAgdW5zaWduZWQgb2Zmc2V0OworICAgIGlmIChQZXJQcm9jZXNz
PEVudmlyb25tZW50Pjo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
IChnZXQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICB9
IGVsc2UgeworICAgICAgICBlbnN1cmVIZWFwKGhhbmRsZSk7CisgICAgICAgIG9mZnNldCA9IHN0
ZDo6bWF4KGhhbmRsZS5hbGxvY2F0b3JPZmZzZXQoKSwgaGFuZGxlLmRlYWxsb2NhdG9yT2Zmc2V0
KCkpOworICAgIH0KKyAgICByZXR1cm4gZW5zdXJlRW50cmllcyhvZmZzZXQpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBibWFsbG9jCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326526</attachid>
            <date>2017-11-09 18:21:29 -0800</date>
            <delta_ts>2017-11-09 20:49:56 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>10262</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVidWdIZWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWJ1Z0hlYXAuaAkocmV2aXNpb24gMjI0NjU3KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWJ1Z0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCogbWVtYWxpZ25MYXJnZShzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3QsIEFsbG9jYXRpb25LaW5kKTsKICAgICB2b2lkIGZyZWVMYXJnZSh2
b2lkKiBiYXNlLCBBbGxvY2F0aW9uS2luZCk7Ci0KKyAgICAKIHByaXZhdGU6CiAjaWYgQk9TKERB
UldJTikKICAgICBtYWxsb2Nfem9uZV90KiBtX3pvbmU7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0lzb0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lz
b0hlYXAuaAkocmV2aXNpb24gMjI0NjU3KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29I
ZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgc3RydWN0IElzb0hlYXAgewog
ICAgIAogICAgIHVuc2lnbmVkIGRlYWxsb2NhdG9yT2Zmc2V0KCkgeyByZXR1cm4gbV9kZWFsbG9j
YXRvck9mZnNldFBsdXNPbmUgLSAxOyB9CiAgICAgdm9pZCBzZXREZWFsbG9jYXRvck9mZnNldCh1
bnNpZ25lZCB2YWx1ZSkgeyBtX2RlYWxsb2NhdG9yT2Zmc2V0UGx1c09uZSA9IHZhbHVlICsgMTsg
fQotICAgIAorCiAgICAgSXNvSGVhcEltcGw8Q29uZmlnPiYgaW1wbCgpOwogICAgIAogICAgIFN0
YXRpY011dGV4IG1faW5pdGlhbGl6YXRpb25Mb2NrOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9Jc29QYWdlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvSXNvUGFnZUlubGluZXMuaAkocmV2aXNpb24gMjI0NjU3KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9Jc29QYWdlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTQg
QEAKICNpbmNsdWRlICJJc29EaXJlY3RvcnkuaCIKICNpbmNsdWRlICJJc29QYWdlLmgiCiAjaW5j
bHVkZSAiVk1BbGxvY2F0ZS5oIgorI2luY2x1ZGUgIlZNSGVhcC5oIgogCiBuYW1lc3BhY2UgYm1h
bGxvYyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbmZpZz4KIElzb1BhZ2U8Q29uZmlnPiogSXNv
UGFnZTxDb25maWc+Ojp0cnlDcmVhdGUoSXNvRGlyZWN0b3J5QmFzZTxDb25maWc+JiBkaXJlY3Rv
cnksIHVuc2lnbmVkIGluZGV4KQogewotICAgIHZvaWQqIG1lbW9yeSA9IHRyeVZNQWxsb2NhdGUo
cGFnZVNpemUsIHBhZ2VTaXplKTsKKyAgICB2b2lkKiBtZW1vcnkgPSBQZXJQcm9jZXNzPFZNSGVh
cD46OmdldCgpLT50cnlBbGxvY2F0ZUxhcmdlQ2h1bmsocGFnZVNpemUsIHBhZ2VTaXplLCBBbGxv
Y2F0aW9uS2luZDo6UGh5c2ljYWwpLmJlZ2luKCk7CiAgICAgaWYgKCFtZW1vcnkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29U
TFMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTLmNwcAko
cmV2aXNpb24gMjI0NjU3KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlICJJc29UTFMuaCIKIAor
I2luY2x1ZGUgIkRlYnVnSGVhcC5oIgorI2luY2x1ZGUgIkVudmlyb25tZW50LmgiCiAjaW5jbHVk
ZSAiSXNvVExTRW50cnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSXNvVExTSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIklzb1RMU0xheW91dC5oIgpAQCAtNTAsNiArNTIsMTUgQEAgSXNvVExTOjpJc29UTFMo
KQogewogfQogCit2b2lkIElzb1RMUzo6ZGVhbGxvY2F0ZVNsb3codm9pZCogcCkKK3sKKyAgICAv
LyBJZiB3ZSBnbyBkb3duIHRoaXMgcGF0aCBhbmQgd2UgYXJlbid0IGluIGRlYnVnIGhlYXAgbW9k
ZSwgdGhlbiB0aGlzIG1lYW5zIHdlIGhhdmUgc29tZSBjb3JydXB0aW9uLgorICAgIC8vIFRoaW5r
IG9mIHRoaXMgYXMgcmVhbGx5IGJlaW5nIGFuIGFzc2VydGlvbiBhYm91dCBvZmZzZXQgPCB0bHMt
Pm1fZXh0ZW50LgorICAgIFJFTEVBU0VfQkFTU0VSVChQZXJQcm9jZXNzPEVudmlyb25tZW50Pjo6
Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKTsKKyAgICAKKyAgICBQZXJQcm9jZXNzPERlYnVn
SGVhcD46OmdldCgpLT5mcmVlKHApOworfQorCiBJc29UTFMqIElzb1RMUzo6ZW5zdXJlRW50cmll
cyh1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9CQVNTRVJUKCFnZXQoKSB8fCBvZmZz
ZXQgPj0gZ2V0KCktPm1fZXh0ZW50KTsKQEAgLTc2LDE2ICs4NywxOSBAQCBJc29UTFMqIElzb1RM
Uzo6ZW5zdXJlRW50cmllcyh1bnNpZ25lZCBvCiAgICAgSXNvVExTRW50cnkqIHN0YXJ0RW50cnkg
PSBvbGRMYXN0RW50cnkgPyBvbGRMYXN0RW50cnkgOiBsYXlvdXQuaGVhZCgpOwogICAgIAogICAg
IElzb1RMU0VudHJ5KiB0YXJnZXRFbnRyeSA9IHN0YXJ0RW50cnk7Ci0gICAgZm9yICg7Oykgewor
ICAgIHNpemVfdCByZXF1aXJlZENhcGFjaXR5ID0gMDsKKyAgICBpZiAoc3RhcnRFbnRyeSkgewor
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBSRUxFQVNFX0JBU1NFUlQodGFyZ2V0RW50
cnkpOworICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHRhcmdldEVudHJ5LT5vZmZzZXQoKSA8
PSBvZmZzZXQpOworICAgICAgICAgICAgaWYgKHRhcmdldEVudHJ5LT5vZmZzZXQoKSA9PSBvZmZz
ZXQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB0YXJnZXRFbnRyeSA9IHRh
cmdldEVudHJ5LT5tX25leHQ7CisgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHRh
cmdldEVudHJ5KTsKLSAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHRhcmdldEVudHJ5LT5vZmZzZXQo
KSA8PSBvZmZzZXQpOwotICAgICAgICBpZiAodGFyZ2V0RW50cnktPm9mZnNldCgpID09IG9mZnNl
dCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB0YXJnZXRFbnRyeSA9IHRhcmdldEVudHJ5
LT5tX25leHQ7CisgICAgICAgIHJlcXVpcmVkQ2FwYWNpdHkgPSB0YXJnZXRFbnRyeS0+ZXh0ZW50
KCk7CiAgICAgfQotICAgIFJFTEVBU0VfQkFTU0VSVCh0YXJnZXRFbnRyeSk7Ci0KLSAgICBzaXpl
X3QgcmVxdWlyZWRDYXBhY2l0eSA9IHRhcmdldEVudHJ5LT5leHRlbnQoKTsKKyAgICAKICAgICBp
ZiAoIXRscyB8fCByZXF1aXJlZENhcGFjaXR5ID4gdGxzLT5tX2NhcGFjaXR5KSB7CiAgICAgICAg
IHNpemVfdCByZXF1aXJlZFNpemUgPSBzaXplRm9yQ2FwYWNpdHkocmVxdWlyZWRDYXBhY2l0eSk7
CiAgICAgICAgIHNpemVfdCBnb29kU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Yodm1QYWdlU2l6
ZSgpLCByZXF1aXJlZFNpemUpOwpAQCAtMTEwLDE0ICsxMjQsMTYgQEAgSXNvVExTKiBJc29UTFM6
OmVuc3VyZUVudHJpZXModW5zaWduZWQgbwogICAgICAgICBzZXQodGxzKTsKICAgICB9CiAgICAg
Ci0gICAgc3RhcnRFbnRyeS0+d2Fsa1VwVG9JbmNsdXNpdmUoCi0gICAgICAgIHRhcmdldEVudHJ5
LAotICAgICAgICBbJl0gKElzb1RMU0VudHJ5KiBlbnRyeSkgewotICAgICAgICAgICAgZW50cnkt
PmNvbnN0cnVjdCh0bHMtPm1fZGF0YSArIGVudHJ5LT5vZmZzZXQoKSk7Ci0gICAgICAgIH0pOwot
ICAgIAotICAgIHRscy0+bV9sYXN0RW50cnkgPSB0YXJnZXRFbnRyeTsKLSAgICB0bHMtPm1fZXh0
ZW50ID0gdGFyZ2V0RW50cnktPmV4dGVudCgpOworICAgIGlmIChzdGFydEVudHJ5KSB7CisgICAg
ICAgIHN0YXJ0RW50cnktPndhbGtVcFRvSW5jbHVzaXZlKAorICAgICAgICAgICAgdGFyZ2V0RW50
cnksCisgICAgICAgICAgICBbJl0gKElzb1RMU0VudHJ5KiBlbnRyeSkgeworICAgICAgICAgICAg
ICAgIGVudHJ5LT5jb25zdHJ1Y3QodGxzLT5tX2RhdGEgKyBlbnRyeS0+b2Zmc2V0KCkpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0bHMtPm1fbGFzdEVudHJ5ID0gdGFyZ2V0
RW50cnk7CisgICAgICAgIHRscy0+bV9leHRlbnQgPSB0YXJnZXRFbnRyeS0+ZXh0ZW50KCk7Cisg
ICAgfQogICAgIAogICAgIHJldHVybiB0bHM7CiB9CkBAIC0xNTksNSArMTc1LDE4IEBAIHZvaWQg
SXNvVExTOjpmb3JFYWNoRW50cnkoY29uc3QgRnVuYyYgZnUKICAgICAgICAgfSk7CiB9CiAKK2Jv
b2wgSXNvVExTOjppc1VzaW5nRGVidWdIZWFwKCkKK3sKKyAgICByZXR1cm4gUGVyUHJvY2VzczxF
bnZpcm9ubWVudD46OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJsZWQoKTsKK30KKworYXV0byBJc29U
TFM6OmRlYnVnTWFsbG9jKHNpemVfdCBzaXplKSAtPiBEZWJ1Z01hbGxvY1Jlc3VsdAoreworICAg
IERlYnVnTWFsbG9jUmVzdWx0IHJlc3VsdDsKKyAgICBpZiAoKHJlc3VsdC51c2luZ0RlYnVnSGVh
cCA9IGlzVXNpbmdEZWJ1Z0hlYXAoKSkpCisgICAgICAgIHJlc3VsdC5wdHIgPSBQZXJQcm9jZXNz
PERlYnVnSGVhcD46OmdldCgpLT5tYWxsb2Moc2l6ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0lzb1RMUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTLmgJ
KHJldmlzaW9uIDIyNDY1NykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDEwICs1OCwyMSBAQCBwcml2YXRlOgogICAgIElzb1RMUygpOwog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbmZpZywgdHlwZW5hbWUgVHlwZT4KLSAgICBz
dGF0aWMgSXNvQWxsb2NhdG9yPENvbmZpZz4mIGFsbG9jYXRvcihhcGk6Oklzb0hlYXA8VHlwZT4m
KTsKKyAgICBzdGF0aWMgdm9pZCogYWxsb2NhdGVJbXBsKGFwaTo6SXNvSGVhcDxUeXBlPiYsIGJv
b2wgYWJvcnRPbkZhaWx1cmUpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbmZpZz4K
KyAgICB2b2lkKiBhbGxvY2F0ZUZhc3QodW5zaWduZWQgb2Zmc2V0LCBib29sIGFib3J0T25GYWls
dXJlKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcsIHR5cGVuYW1lIFR5cGU+
CisgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlU2xvdyhhcGk6Oklzb0hlYXA8VHlwZT4mLCBib29s
IGFib3J0T25GYWlsdXJlKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcsIHR5
cGVuYW1lIFR5cGU+Ci0gICAgc3RhdGljIElzb0RlYWxsb2NhdG9yPENvbmZpZz4mIGRlYWxsb2Nh
dG9yKGFwaTo6SXNvSGVhcDxUeXBlPiYpOworICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGVJbXBs
KGFwaTo6SXNvSGVhcDxUeXBlPiYsIHZvaWQqIHApOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENvbmZpZz4KKyAgICB2b2lkIGRlYWxsb2NhdGVGYXN0KHVuc2lnbmVkIG9mZnNldCwgdm9p
ZCogcCk7CisgICAgCisgICAgQkVYUE9SVCBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlU2xvdyh2b2lk
KiBwKTsKICAgICAKICAgICBzdGF0aWMgSXNvVExTKiBnZXQoKTsKICAgICBzdGF0aWMgdm9pZCBz
ZXQoSXNvVExTKik7CkBAIC04MSwxMSArOTIsMjAgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaEVudHJ5KGNvbnN0IEZ1bmMmKTsKICAgICAK
KyAgICBCRVhQT1JUIHN0YXRpYyBib29sIGlzVXNpbmdEZWJ1Z0hlYXAoKTsKKyAgICAKKyAgICBz
dHJ1Y3QgRGVidWdNYWxsb2NSZXN1bHQgeworICAgICAgICB2b2lkKiBwdHIgeyBudWxscHRyIH07
CisgICAgICAgIGJvb2wgdXNpbmdEZWJ1Z0hlYXAgeyBmYWxzZSB9OworICAgIH07CisgICAgCisg
ICAgQkVYUE9SVCBzdGF0aWMgRGVidWdNYWxsb2NSZXN1bHQgZGVidWdNYWxsb2Moc2l6ZV90KTsK
KyAgICAKICAgICBJc29UTFNFbnRyeSogbV9sYXN0RW50cnkgeyBudWxscHRyIH07CiAgICAgdW5z
aWduZWQgbV9leHRlbnQgeyAwIH07CiAgICAgdW5zaWduZWQgbV9jYXBhY2l0eSB7IDAgfTsKICAg
ICBjaGFyIG1fZGF0YVsxXTsKLQorICAgIAogI2lmIEhBVkVfUFRIUkVBRF9NQUNIREVQX0gKICAg
ICBzdGF0aWMgY29uc3QgcHRocmVhZF9rZXlfdCB0bHNLZXkgPSBfX1BUS19GUkFNRVdPUktfSkFW
QVNDUklQVENPUkVfS0VZMTsKICNlbHNlCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lz
b1RMU0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RM
U0lubGluZXMuaAkocmV2aXNpb24gMjI0NjU3KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9J
c29UTFNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNl
IGJtYWxsb2MgewogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIHZvaWQqIElzb1RMUzo6YWxsb2Nh
dGUoYXBpOjpJc29IZWFwPFR5cGU+JiBoYW5kbGUsIGJvb2wgYWJvcnRPbkZhaWx1cmUpCiB7Ci0g
ICAgcmV0dXJuIGFsbG9jYXRvcjx0eXBlbmFtZSBhcGk6Oklzb0hlYXA8VHlwZT46OkNvbmZpZz4o
aGFuZGxlKS5hbGxvY2F0ZShhYm9ydE9uRmFpbHVyZSk7CisgICAgcmV0dXJuIGFsbG9jYXRlSW1w
bDx0eXBlbmFtZSBhcGk6Oklzb0hlYXA8VHlwZT46OkNvbmZpZz4oaGFuZGxlLCBhYm9ydE9uRmFp
bHVyZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkBAIC00MSw3ICs0MSw3IEBAIHZv
aWQgSXNvVExTOjpkZWFsbG9jYXRlKGFwaTo6SXNvSGVhcDxUeXAKIHsKICAgICBpZiAoIXApCiAg
ICAgICAgIHJldHVybjsKLSAgICBkZWFsbG9jYXRvcjx0eXBlbmFtZSBhcGk6Oklzb0hlYXA8VHlw
ZT46OkNvbmZpZz4oaGFuZGxlKS5kZWFsbG9jYXRlKHApOworICAgIGRlYWxsb2NhdGVJbXBsPHR5
cGVuYW1lIGFwaTo6SXNvSGVhcDxUeXBlPjo6Q29uZmlnPihoYW5kbGUsIHApOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgpAQCAtNjIsMjQgKzYyLDUxIEBAIHZvaWQgSXNvVExTOjpzY2F2
ZW5nZShhcGk6Oklzb0hlYXA8VHlwZT4KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29uZmlnLCB0
eXBlbmFtZSBUeXBlPgotSXNvQWxsb2NhdG9yPENvbmZpZz4mIElzb1RMUzo6YWxsb2NhdG9yKGFw
aTo6SXNvSGVhcDxUeXBlPiYgaGFuZGxlKQordm9pZCogSXNvVExTOjphbGxvY2F0ZUltcGwoYXBp
OjpJc29IZWFwPFR5cGU+JiBoYW5kbGUsIGJvb2wgYWJvcnRPbkZhaWx1cmUpCiB7CiAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gaGFuZGxlLmFsbG9jYXRvck9mZnNldCgpOwogICAgIElzb1RMUyogdGxz
ID0gZ2V0KCk7Ci0gICAgaWYgKCF0bHMgfHwgb2Zmc2V0ID49IHRscy0+bV9leHRlbnQpIHsKLSAg
ICAgICAgdGxzID0gZW5zdXJlSGVhcEFuZEVudHJpZXMoaGFuZGxlKTsKLSAgICAgICAgb2Zmc2V0
ID0gaGFuZGxlLmFsbG9jYXRvck9mZnNldCgpOwotICAgIH0KLSAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8SXNvQWxsb2NhdG9yPENvbmZpZz4qPih0bHMtPm1fZGF0YSArIG9mZnNldCk7Cisg
ICAgaWYgKCF0bHMgfHwgb2Zmc2V0ID49IHRscy0+bV9leHRlbnQpCisgICAgICAgIHJldHVybiBh
bGxvY2F0ZVNsb3c8dHlwZW5hbWUgYXBpOjpJc29IZWFwPFR5cGU+OjpDb25maWc+KGhhbmRsZSwg
YWJvcnRPbkZhaWx1cmUpOworICAgIHJldHVybiB0bHMtPmFsbG9jYXRlRmFzdDxDb25maWc+KG9m
ZnNldCwgYWJvcnRPbkZhaWx1cmUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+Cit2
b2lkKiBJc29UTFM6OmFsbG9jYXRlRmFzdCh1bnNpZ25lZCBvZmZzZXQsIGJvb2wgYWJvcnRPbkZh
aWx1cmUpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SXNvQWxsb2NhdG9yPENvbmZp
Zz4qPihtX2RhdGEgKyBvZmZzZXQpLT5hbGxvY2F0ZShhYm9ydE9uRmFpbHVyZSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbmZpZywgdHlwZW5hbWUgVHlwZT4KLUlzb0RlYWxsb2NhdG9yPENv
bmZpZz4mIElzb1RMUzo6ZGVhbGxvY2F0b3IoYXBpOjpJc29IZWFwPFR5cGU+JiBoYW5kbGUpCitC
Tk9fSU5MSU5FIHZvaWQqIElzb1RMUzo6YWxsb2NhdGVTbG93KGFwaTo6SXNvSGVhcDxUeXBlPiYg
aGFuZGxlLCBib29sIGFib3J0T25GYWlsdXJlKQoreworICAgIElzb1RMUyogdGxzID0gZW5zdXJl
SGVhcEFuZEVudHJpZXMoaGFuZGxlKTsKKyAgICAKKyAgICBhdXRvIGRlYnVnTWFsbG9jUmVzdWx0
ID0gZGVidWdNYWxsb2MoQ29uZmlnOjpvYmplY3RTaXplKTsKKyAgICBpZiAoZGVidWdNYWxsb2NS
ZXN1bHQudXNpbmdEZWJ1Z0hlYXApCisgICAgICAgIHJldHVybiBkZWJ1Z01hbGxvY1Jlc3VsdC5w
dHI7CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gaGFuZGxlLmFsbG9jYXRvck9mZnNldCgp
OworICAgIHJldHVybiB0bHMtPmFsbG9jYXRlRmFzdDxDb25maWc+KG9mZnNldCwgYWJvcnRPbkZh
aWx1cmUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcsIHR5cGVuYW1lIFR5cGU+Cit2
b2lkIElzb1RMUzo6ZGVhbGxvY2F0ZUltcGwoYXBpOjpJc29IZWFwPFR5cGU+JiBoYW5kbGUsIHZv
aWQqIHApCiB7CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gaGFuZGxlLmRlYWxsb2NhdG9yT2Zmc2V0
KCk7CiAgICAgSXNvVExTKiB0bHMgPSBnZXQoKTsKLSAgICBSRUxFQVNFX0JBU1NFUlQob2Zmc2V0
IDwgdGxzLT5tX2V4dGVudCk7Ci0gICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PElzb0RlYWxs
b2NhdG9yPENvbmZpZz4qPih0bHMtPm1fZGF0YSArIG9mZnNldCk7CisgICAgLy8gTm90ZSB0aGF0
IHRoaXMgYm91bmRzIGNoZWNrIHdvdWxkIGJlIGhlcmUgZXZlbiBpZiB3ZSBkaWRuJ3QgaGF2ZSB0
byBzdXBwb3J0IERlYnVnSGVhcCwKKyAgICAvLyBzaW5jZSB3ZSBkb24ndCB3YW50IHVucHJlZGlj
dGFibGUgYmVoYXZpb3Igb2Ygb2Zmc2V0IG9yIG1fZXh0ZW50IGV2ZXIgZ290IGNvcnJ1cHRlZC4K
KyAgICBpZiAob2Zmc2V0ID49IHRscy0+bV9leHRlbnQpCisgICAgICAgIGRlYWxsb2NhdGVTbG93
KHApOworICAgIGVsc2UKKyAgICAgICAgdGxzLT5kZWFsbG9jYXRlRmFzdDxDb25maWc+KG9mZnNl
dCwgcCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbmZpZz4KK3ZvaWQgSXNvVExTOjpkZWFs
bG9jYXRlRmFzdCh1bnNpZ25lZCBvZmZzZXQsIHZvaWQqIHApCit7CisgICAgcmVpbnRlcnByZXRf
Y2FzdDxJc29EZWFsbG9jYXRvcjxDb25maWc+Kj4obV9kYXRhICsgb2Zmc2V0KS0+ZGVhbGxvY2F0
ZShwKTsKIH0KIAogaW5saW5lIElzb1RMUyogSXNvVExTOjpnZXQoKQpAQCAtMTI0LDggKzE1MSwx
NiBAQCBCTk9fSU5MSU5FIElzb1RMUyogSXNvVExTOjplbnN1cmVIZWFwQW5kCiAgICAgICAgICFn
ZXQoKQogICAgICAgICB8fCBoYW5kbGUuYWxsb2NhdG9yT2Zmc2V0KCkgPj0gZ2V0KCktPm1fZXh0
ZW50CiAgICAgICAgIHx8IGhhbmRsZS5kZWFsbG9jYXRvck9mZnNldCgpID49IGdldCgpLT5tX2V4
dGVudCk7Ci0gICAgZW5zdXJlSGVhcChoYW5kbGUpOwotICAgIHJldHVybiBlbnN1cmVFbnRyaWVz
KHN0ZDo6bWF4KGhhbmRsZS5hbGxvY2F0b3JPZmZzZXQoKSwgaGFuZGxlLmRlYWxsb2NhdG9yT2Zm
c2V0KCkpKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgaWYgKGlzVXNpbmdEZWJ1Z0hlYXAo
KSkgeworICAgICAgICBpZiAoSXNvVExTKiByZXN1bHQgPSBnZXQoKSkKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZW5zdXJlSGVhcChoYW5kbGUpOworICAgICAgICBvZmZzZXQgPSBzdGQ6Om1heChoYW5kbGUuYWxs
b2NhdG9yT2Zmc2V0KCksIGhhbmRsZS5kZWFsbG9jYXRvck9mZnNldCgpKTsKKyAgICB9CisgICAg
cmV0dXJuIGVuc3VyZUVudHJpZXMob2Zmc2V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxv
Ywo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326545</attachid>
            <date>2017-11-09 20:49:56 -0800</date>
            <delta_ts>2017-11-16 14:14:44 -0800</delta_ts>
            <desc>it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19969</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIyNDY1NykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogLyog
QmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYzREEwMTQxRjI2N0FCODAwMzQyQzA4
IC8qIEFsbG9jYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjNEQTAxMzFGMjY3QUI4MDAzNDJDMDggLyogQWxsb2NhdGlvbktpbmQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjUxNjc3
NDFGQUQ2ODVDMDA4MjM2QTggLyogYm1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUxNjc3MzFGQUQ2ODUyMDA4MjM2QTggLyogYm1hbGxv
Yy5jcHAgKi87IH07CisJCTBGNTU0OUVGMUZCNTQ3MDQwMDdGRjc1QSAvKiBJc29QYWdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTU0OUVFMUZC
NTQ3MDEwMDdGRjc1QSAvKiBJc29QYWdlLmNwcCAqLzsgfTsKIAkJMEY1QkYxNDcxRjIyQThCMTAw
MjlEOTFEIC8qIEhlYXBLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjVCRjE0NjFGMjJBOEIxMDAyOUQ5MUQgLyogSGVhcEtpbmQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVCRjE0OTFGMjJB
OEQ4MDAyOUQ5MUQgLyogUGVySGVhcEtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTQ4MUYyMkE4RDgwMDI5RDkxRCAvKiBQZXJIZWFwS2lu
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NUJGMTREMUYyMkIwQzMwMDI5RDkxRCAvKiBHaWdhY2FnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNEMxRjIyQjBDMzAwMjlEOTFEIC8qIEdp
Z2FjYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTE3Myw2ICsxNzQsNyBAQAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICov
CiAJCTBGM0RBMDEzMUYyNjdBQjgwMDM0MkMwOCAvKiBBbGxvY2F0aW9uS2luZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBbGxvY2F0aW9uS2luZC5oOyBwYXRoID0gYm1hbGxvYy9BbGxvY2F0aW9uS2luZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUxNjc3MzFGQUQ2ODUyMDA4MjM2QTgg
LyogYm1hbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBibWFs
bG9jLmNwcDsgcGF0aCA9IGJtYWxsb2MvYm1hbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNTU0OUVFMUZCNTQ3MDEwMDdGRjc1QSAvKiBJc29QYWdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElzb1BhZ2UuY3BwOyBwYXRoID0gYm1hbGxv
Yy9Jc29QYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QkYxNDYxRjIy
QThCMTAwMjlEOTFEIC8qIEhlYXBLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhlYXBLaW5kLmg7IHBh
dGggPSBibWFsbG9jL0hlYXBLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NUJGMTQ4MUYyMkE4RDgwMDI5RDkxRCAvKiBQZXJIZWFwS2luZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQ
ZXJIZWFwS2luZC5oOyBwYXRoID0gYm1hbGxvYy9QZXJIZWFwS2luZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjVCRjE0QzFGMjJCMEMzMDAyOUQ5MUQgLyogR2lnYWNhZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gR2lnYWNhZ2UuaDsgcGF0aCA9IGJtYWxsb2MvR2lnYWNhZ2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MCw2ICszNjIsNyBAQAogCQkJCTBGN0VCODFF
MUY5NTQxQjAwMEYxQUJDQiAvKiBJc29IZWFwSW1wbC5oICovLAogCQkJCTBGN0VCN0ZEMUY5NTQx
QUQwMEYxQUJDQiAvKiBJc29IZWFwSW1wbElubGluZXMuaCAqLywKIAkJCQkwRjdFQjgwOTFGOTU0
MUFEMDBGMUFCQ0IgLyogSXNvSGVhcElubGluZXMuaCAqLywKKwkJCQkwRjU1NDlFRTFGQjU0NzAx
MDA3RkY3NUEgLyogSXNvUGFnZS5jcHAgKi8sCiAJCQkJMEY3RUI4MDcxRjk1NDFBRDAwRjFBQkNC
IC8qIElzb1BhZ2UuaCAqLywKIAkJCQkwRjdFQjgwQTFGOTU0MUFFMDBGMUFCQ0IgLyogSXNvUGFn
ZUlubGluZXMuaCAqLywKIAkJCQkwRjdFQjgwNDFGOTU0MUFEMDBGMUFCQ0IgLyogSXNvUGFnZVRy
aWdnZXIuaCAqLywKQEAgLTc1NCw2ICs3NTcsNyBAQAogCQkJCTBGN0VCODM2MUY5NTQxQjAwMEYx
QUJDQiAvKiBJc29UTFMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZENTU3MzMxRjdFREI3QjAw
QjFGMEEzIC8qIEhlYXBLaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGN0VCODNCMUY5NTQx
QjAwMEYxQUJDQiAvKiBJc29IZWFwSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjU1NDlF
RjFGQjU0NzA0MDA3RkY3NUEgLyogSXNvUGFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEYy
NzFDMzE4RUEzOTc4MDA4QzE1MkYgLyogQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTY1OTlDNUNDMUVDM0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFibGVNZW1vcnkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTRGMjcxQzQxOEVBMzk3QjAwOEMxNTJGIC8qIENhY2hlLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWJ1Z0hlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYnVnSGVhcC5oCShyZXZpc2lvbiAyMjQ2
NTcpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYnVnSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkKiBtZW1hbGlnbkxhcmdl
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgQWxsb2NhdGlvbktpbmQpOwogICAgIHZvaWQgZnJl
ZUxhcmdlKHZvaWQqIGJhc2UsIEFsbG9jYXRpb25LaW5kKTsKLQorICAgIAogcHJpdmF0ZToKICNp
ZiBCT1MoREFSV0lOKQogICAgIG1hbGxvY196b25lX3QqIG1fem9uZTsKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSXNvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSXNvSGVhcC5oCShyZXZpc2lvbiAyMjQ2NTcpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0lzb0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3QgSXNv
SGVhcCB7CiAgICAgCiAgICAgdW5zaWduZWQgZGVhbGxvY2F0b3JPZmZzZXQoKSB7IHJldHVybiBt
X2RlYWxsb2NhdG9yT2Zmc2V0UGx1c09uZSAtIDE7IH0KICAgICB2b2lkIHNldERlYWxsb2NhdG9y
T2Zmc2V0KHVuc2lnbmVkIHZhbHVlKSB7IG1fZGVhbGxvY2F0b3JPZmZzZXRQbHVzT25lID0gdmFs
dWUgKyAxOyB9Ci0gICAgCisKICAgICBJc29IZWFwSW1wbDxDb25maWc+JiBpbXBsKCk7CiAgICAg
CiAgICAgU3RhdGljTXV0ZXggbV9pbml0aWFsaXphdGlvbkxvY2s7CkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0lzb1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSXNvUGFnZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9Jc29QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJJc29QYWdlLmgi
CisKKyNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCisjaW5jbHVkZSAiVk1IZWFwLmgiCisKK25hbWVz
cGFjZSBibWFsbG9jIHsKKwordm9pZCogSXNvUGFnZUJhc2U6OmFsbG9jYXRlUGFnZU1lbW9yeSgp
Cit7CisgICAgcmV0dXJuIFBlclByb2Nlc3M8Vk1IZWFwPjo6Z2V0KCktPnRyeUFsbG9jYXRlTGFy
Z2VDaHVuayhwYWdlU2l6ZSwgcGFnZVNpemUsIEFsbG9jYXRpb25LaW5kOjpQaHlzaWNhbCkuYmVn
aW4oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9Jc29QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9J
c29QYWdlLmgJKHJldmlzaW9uIDIyNDY1NykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNv
UGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IENvbmZpZz4gY2xhc3MgSXNvSGVhcEkKIGNsYXNzIElzb1BhZ2VCYXNlIHsKIHB1YmxpYzogICAg
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgcGFnZVNpemUgPSAxNjM4NDsKKyAgICAKK3By
b3RlY3RlZDoKKyAgICBCRVhQT1JUIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZVBhZ2VNZW1vcnkoKTsK
IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbmZpZz4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSXNvUGFnZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0lzb1BhZ2VJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDY1NykKKysrIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvSXNvUGFnZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QCBuYW1lc3BhY2UgYm1hbGxvYyB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+CiBJc29QYWdl
PENvbmZpZz4qIElzb1BhZ2U8Q29uZmlnPjo6dHJ5Q3JlYXRlKElzb0RpcmVjdG9yeUJhc2U8Q29u
ZmlnPiYgZGlyZWN0b3J5LCB1bnNpZ25lZCBpbmRleCkKIHsKLSAgICB2b2lkKiBtZW1vcnkgPSB0
cnlWTUFsbG9jYXRlKHBhZ2VTaXplLCBwYWdlU2l6ZSk7CisgICAgdm9pZCogbWVtb3J5ID0gYWxs
b2NhdGVQYWdlTWVtb3J5KCk7CiAgICAgaWYgKCFtZW1vcnkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTLmNwcAkocmV2aXNpb24gMjI0
NjU3KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlICJJc29UTFMuaCIKIAorI2luY2x1ZGUgIkRl
YnVnSGVhcC5oIgorI2luY2x1ZGUgIkVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSXNvVExTRW50
cnlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSXNvVExTSW5saW5lcy5oIgogI2luY2x1ZGUgIklzb1RM
U0xheW91dC5oIgpAQCAtNTAsNiArNTIsMTUgQEAgSXNvVExTOjpJc29UTFMoKQogewogfQogCit2
b2lkIElzb1RMUzo6ZGVhbGxvY2F0ZVNsb3codm9pZCogcCkKK3sKKyAgICAvLyBJZiB3ZSBnbyBk
b3duIHRoaXMgcGF0aCBhbmQgd2UgYXJlbid0IGluIGRlYnVnIGhlYXAgbW9kZSwgdGhlbiB0aGlz
IG1lYW5zIHdlIGhhdmUgc29tZSBjb3JydXB0aW9uLgorICAgIC8vIFRoaW5rIG9mIHRoaXMgYXMg
cmVhbGx5IGJlaW5nIGFuIGFzc2VydGlvbiBhYm91dCBvZmZzZXQgPCB0bHMtPm1fZXh0ZW50Lgor
ICAgIFJFTEVBU0VfQkFTU0VSVChQZXJQcm9jZXNzPEVudmlyb25tZW50Pjo6Z2V0KCktPmlzRGVi
dWdIZWFwRW5hYmxlZCgpKTsKKyAgICAKKyAgICBQZXJQcm9jZXNzPERlYnVnSGVhcD46OmdldCgp
LT5mcmVlKHApOworfQorCiBJc29UTFMqIElzb1RMUzo6ZW5zdXJlRW50cmllcyh1bnNpZ25lZCBv
ZmZzZXQpCiB7CiAgICAgUkVMRUFTRV9CQVNTRVJUKCFnZXQoKSB8fCBvZmZzZXQgPj0gZ2V0KCkt
Pm1fZXh0ZW50KTsKQEAgLTc2LDE2ICs4NywxOSBAQCBJc29UTFMqIElzb1RMUzo6ZW5zdXJlRW50
cmllcyh1bnNpZ25lZCBvCiAgICAgSXNvVExTRW50cnkqIHN0YXJ0RW50cnkgPSBvbGRMYXN0RW50
cnkgPyBvbGRMYXN0RW50cnkgOiBsYXlvdXQuaGVhZCgpOwogICAgIAogICAgIElzb1RMU0VudHJ5
KiB0YXJnZXRFbnRyeSA9IHN0YXJ0RW50cnk7Ci0gICAgZm9yICg7OykgeworICAgIHNpemVfdCBy
ZXF1aXJlZENhcGFjaXR5ID0gMDsKKyAgICBpZiAoc3RhcnRFbnRyeSkgeworICAgICAgICBmb3Ig
KDs7KSB7CisgICAgICAgICAgICBSRUxFQVNFX0JBU1NFUlQodGFyZ2V0RW50cnkpOworICAgICAg
ICAgICAgUkVMRUFTRV9CQVNTRVJUKHRhcmdldEVudHJ5LT5vZmZzZXQoKSA8PSBvZmZzZXQpOwor
ICAgICAgICAgICAgaWYgKHRhcmdldEVudHJ5LT5vZmZzZXQoKSA9PSBvZmZzZXQpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB0YXJnZXRFbnRyeSA9IHRhcmdldEVudHJ5LT5t
X25leHQ7CisgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHRhcmdldEVudHJ5KTsK
LSAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHRhcmdldEVudHJ5LT5vZmZzZXQoKSA8PSBvZmZzZXQp
OwotICAgICAgICBpZiAodGFyZ2V0RW50cnktPm9mZnNldCgpID09IG9mZnNldCkKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB0YXJnZXRFbnRyeSA9IHRhcmdldEVudHJ5LT5tX25leHQ7Cisg
ICAgICAgIHJlcXVpcmVkQ2FwYWNpdHkgPSB0YXJnZXRFbnRyeS0+ZXh0ZW50KCk7CiAgICAgfQot
ICAgIFJFTEVBU0VfQkFTU0VSVCh0YXJnZXRFbnRyeSk7Ci0KLSAgICBzaXplX3QgcmVxdWlyZWRD
YXBhY2l0eSA9IHRhcmdldEVudHJ5LT5leHRlbnQoKTsKKyAgICAKICAgICBpZiAoIXRscyB8fCBy
ZXF1aXJlZENhcGFjaXR5ID4gdGxzLT5tX2NhcGFjaXR5KSB7CiAgICAgICAgIHNpemVfdCByZXF1
aXJlZFNpemUgPSBzaXplRm9yQ2FwYWNpdHkocmVxdWlyZWRDYXBhY2l0eSk7CiAgICAgICAgIHNp
emVfdCBnb29kU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Yodm1QYWdlU2l6ZSgpLCByZXF1aXJl
ZFNpemUpOwpAQCAtMTEwLDE0ICsxMjQsMTYgQEAgSXNvVExTKiBJc29UTFM6OmVuc3VyZUVudHJp
ZXModW5zaWduZWQgbwogICAgICAgICBzZXQodGxzKTsKICAgICB9CiAgICAgCi0gICAgc3RhcnRF
bnRyeS0+d2Fsa1VwVG9JbmNsdXNpdmUoCi0gICAgICAgIHRhcmdldEVudHJ5LAotICAgICAgICBb
Jl0gKElzb1RMU0VudHJ5KiBlbnRyeSkgewotICAgICAgICAgICAgZW50cnktPmNvbnN0cnVjdCh0
bHMtPm1fZGF0YSArIGVudHJ5LT5vZmZzZXQoKSk7Ci0gICAgICAgIH0pOwotICAgIAotICAgIHRs
cy0+bV9sYXN0RW50cnkgPSB0YXJnZXRFbnRyeTsKLSAgICB0bHMtPm1fZXh0ZW50ID0gdGFyZ2V0
RW50cnktPmV4dGVudCgpOworICAgIGlmIChzdGFydEVudHJ5KSB7CisgICAgICAgIHN0YXJ0RW50
cnktPndhbGtVcFRvSW5jbHVzaXZlKAorICAgICAgICAgICAgdGFyZ2V0RW50cnksCisgICAgICAg
ICAgICBbJl0gKElzb1RMU0VudHJ5KiBlbnRyeSkgeworICAgICAgICAgICAgICAgIGVudHJ5LT5j
b25zdHJ1Y3QodGxzLT5tX2RhdGEgKyBlbnRyeS0+b2Zmc2V0KCkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIAorICAgICAgICB0bHMtPm1fbGFzdEVudHJ5ID0gdGFyZ2V0RW50cnk7CisgICAg
ICAgIHRscy0+bV9leHRlbnQgPSB0YXJnZXRFbnRyeS0+ZXh0ZW50KCk7CisgICAgfQogICAgIAog
ICAgIHJldHVybiB0bHM7CiB9CkBAIC0xNTksNSArMTc1LDE4IEBAIHZvaWQgSXNvVExTOjpmb3JF
YWNoRW50cnkoY29uc3QgRnVuYyYgZnUKICAgICAgICAgfSk7CiB9CiAKK2Jvb2wgSXNvVExTOjpp
c1VzaW5nRGVidWdIZWFwKCkKK3sKKyAgICByZXR1cm4gUGVyUHJvY2VzczxFbnZpcm9ubWVudD46
OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJsZWQoKTsKK30KKworYXV0byBJc29UTFM6OmRlYnVnTWFs
bG9jKHNpemVfdCBzaXplKSAtPiBEZWJ1Z01hbGxvY1Jlc3VsdAoreworICAgIERlYnVnTWFsbG9j
UmVzdWx0IHJlc3VsdDsKKyAgICBpZiAoKHJlc3VsdC51c2luZ0RlYnVnSGVhcCA9IGlzVXNpbmdE
ZWJ1Z0hlYXAoKSkpCisgICAgICAgIHJlc3VsdC5wdHIgPSBQZXJQcm9jZXNzPERlYnVnSGVhcD46
OmdldCgpLT5tYWxsb2Moc2l6ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1l
c3BhY2UgYm1hbGxvYwogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RMUy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTLmgJKHJldmlzaW9uIDIy
NDY1NykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDEwICs1OCwyMSBAQCBwcml2YXRlOgogICAgIElzb1RMUygpOwogICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvbmZpZywgdHlwZW5hbWUgVHlwZT4KLSAgICBzdGF0aWMgSXNvQWxs
b2NhdG9yPENvbmZpZz4mIGFsbG9jYXRvcihhcGk6Oklzb0hlYXA8VHlwZT4mKTsKKyAgICBzdGF0
aWMgdm9pZCogYWxsb2NhdGVJbXBsKGFwaTo6SXNvSGVhcDxUeXBlPiYsIGJvb2wgYWJvcnRPbkZh
aWx1cmUpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbmZpZz4KKyAgICB2b2lkKiBh
bGxvY2F0ZUZhc3QodW5zaWduZWQgb2Zmc2V0LCBib29sIGFib3J0T25GYWlsdXJlKTsKKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcsIHR5cGVuYW1lIFR5cGU+CisgICAgc3RhdGlj
IHZvaWQqIGFsbG9jYXRlU2xvdyhhcGk6Oklzb0hlYXA8VHlwZT4mLCBib29sIGFib3J0T25GYWls
dXJlKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcsIHR5cGVuYW1lIFR5cGU+
Ci0gICAgc3RhdGljIElzb0RlYWxsb2NhdG9yPENvbmZpZz4mIGRlYWxsb2NhdG9yKGFwaTo6SXNv
SGVhcDxUeXBlPiYpOworICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGVJbXBsKGFwaTo6SXNvSGVh
cDxUeXBlPiYsIHZvaWQqIHApOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbmZpZz4K
KyAgICB2b2lkIGRlYWxsb2NhdGVGYXN0KHVuc2lnbmVkIG9mZnNldCwgdm9pZCogcCk7CisgICAg
CisgICAgQkVYUE9SVCBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlU2xvdyh2b2lkKiBwKTsKICAgICAK
ICAgICBzdGF0aWMgSXNvVExTKiBnZXQoKTsKICAgICBzdGF0aWMgdm9pZCBzZXQoSXNvVExTKik7
CkBAIC04MSwxMSArOTIsMjAgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaEVudHJ5KGNvbnN0IEZ1bmMmKTsKICAgICAKKyAgICBCRVhQT1JU
IHN0YXRpYyBib29sIGlzVXNpbmdEZWJ1Z0hlYXAoKTsKKyAgICAKKyAgICBzdHJ1Y3QgRGVidWdN
YWxsb2NSZXN1bHQgeworICAgICAgICB2b2lkKiBwdHIgeyBudWxscHRyIH07CisgICAgICAgIGJv
b2wgdXNpbmdEZWJ1Z0hlYXAgeyBmYWxzZSB9OworICAgIH07CisgICAgCisgICAgQkVYUE9SVCBz
dGF0aWMgRGVidWdNYWxsb2NSZXN1bHQgZGVidWdNYWxsb2Moc2l6ZV90KTsKKyAgICAKICAgICBJ
c29UTFNFbnRyeSogbV9sYXN0RW50cnkgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9leHRl
bnQgeyAwIH07CiAgICAgdW5zaWduZWQgbV9jYXBhY2l0eSB7IDAgfTsKICAgICBjaGFyIG1fZGF0
YVsxXTsKLQorICAgIAogI2lmIEhBVkVfUFRIUkVBRF9NQUNIREVQX0gKICAgICBzdGF0aWMgY29u
c3QgcHRocmVhZF9rZXlfdCB0bHNLZXkgPSBfX1BUS19GUkFNRVdPUktfSkFWQVNDUklQVENPUkVf
S0VZMTsKICNlbHNlCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RMU0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RMU0lubGluZXMuaAko
cmV2aXNpb24gMjI0NjU3KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFNJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIGJtYWxsb2Mgewog
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIHZvaWQqIElzb1RMUzo6YWxsb2NhdGUoYXBpOjpJc29I
ZWFwPFR5cGU+JiBoYW5kbGUsIGJvb2wgYWJvcnRPbkZhaWx1cmUpCiB7Ci0gICAgcmV0dXJuIGFs
bG9jYXRvcjx0eXBlbmFtZSBhcGk6Oklzb0hlYXA8VHlwZT46OkNvbmZpZz4oaGFuZGxlKS5hbGxv
Y2F0ZShhYm9ydE9uRmFpbHVyZSk7CisgICAgcmV0dXJuIGFsbG9jYXRlSW1wbDx0eXBlbmFtZSBh
cGk6Oklzb0hlYXA8VHlwZT46OkNvbmZpZz4oaGFuZGxlLCBhYm9ydE9uRmFpbHVyZSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkBAIC00MSw3ICs0MSw3IEBAIHZvaWQgSXNvVExTOjpk
ZWFsbG9jYXRlKGFwaTo6SXNvSGVhcDxUeXAKIHsKICAgICBpZiAoIXApCiAgICAgICAgIHJldHVy
bjsKLSAgICBkZWFsbG9jYXRvcjx0eXBlbmFtZSBhcGk6Oklzb0hlYXA8VHlwZT46OkNvbmZpZz4o
aGFuZGxlKS5kZWFsbG9jYXRlKHApOworICAgIGRlYWxsb2NhdGVJbXBsPHR5cGVuYW1lIGFwaTo6
SXNvSGVhcDxUeXBlPjo6Q29uZmlnPihoYW5kbGUsIHApOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgpAQCAtNjIsMjQgKzYyLDUxIEBAIHZvaWQgSXNvVExTOjpzY2F2ZW5nZShhcGk6Oklz
b0hlYXA8VHlwZT4KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29uZmlnLCB0eXBlbmFtZSBUeXBl
PgotSXNvQWxsb2NhdG9yPENvbmZpZz4mIElzb1RMUzo6YWxsb2NhdG9yKGFwaTo6SXNvSGVhcDxU
eXBlPiYgaGFuZGxlKQordm9pZCogSXNvVExTOjphbGxvY2F0ZUltcGwoYXBpOjpJc29IZWFwPFR5
cGU+JiBoYW5kbGUsIGJvb2wgYWJvcnRPbkZhaWx1cmUpCiB7CiAgICAgdW5zaWduZWQgb2Zmc2V0
ID0gaGFuZGxlLmFsbG9jYXRvck9mZnNldCgpOwogICAgIElzb1RMUyogdGxzID0gZ2V0KCk7Ci0g
ICAgaWYgKCF0bHMgfHwgb2Zmc2V0ID49IHRscy0+bV9leHRlbnQpIHsKLSAgICAgICAgdGxzID0g
ZW5zdXJlSGVhcEFuZEVudHJpZXMoaGFuZGxlKTsKLSAgICAgICAgb2Zmc2V0ID0gaGFuZGxlLmFs
bG9jYXRvck9mZnNldCgpOwotICAgIH0KLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8SXNv
QWxsb2NhdG9yPENvbmZpZz4qPih0bHMtPm1fZGF0YSArIG9mZnNldCk7CisgICAgaWYgKCF0bHMg
fHwgb2Zmc2V0ID49IHRscy0+bV9leHRlbnQpCisgICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3c8
dHlwZW5hbWUgYXBpOjpJc29IZWFwPFR5cGU+OjpDb25maWc+KGhhbmRsZSwgYWJvcnRPbkZhaWx1
cmUpOworICAgIHJldHVybiB0bHMtPmFsbG9jYXRlRmFzdDxDb25maWc+KG9mZnNldCwgYWJvcnRP
bkZhaWx1cmUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+Cit2b2lkKiBJc29UTFM6
OmFsbG9jYXRlRmFzdCh1bnNpZ25lZCBvZmZzZXQsIGJvb2wgYWJvcnRPbkZhaWx1cmUpCit7Cisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SXNvQWxsb2NhdG9yPENvbmZpZz4qPihtX2RhdGEg
KyBvZmZzZXQpLT5hbGxvY2F0ZShhYm9ydE9uRmFpbHVyZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIENvbmZpZywgdHlwZW5hbWUgVHlwZT4KLUlzb0RlYWxsb2NhdG9yPENvbmZpZz4mIElzb1RM
Uzo6ZGVhbGxvY2F0b3IoYXBpOjpJc29IZWFwPFR5cGU+JiBoYW5kbGUpCitCTk9fSU5MSU5FIHZv
aWQqIElzb1RMUzo6YWxsb2NhdGVTbG93KGFwaTo6SXNvSGVhcDxUeXBlPiYgaGFuZGxlLCBib29s
IGFib3J0T25GYWlsdXJlKQoreworICAgIElzb1RMUyogdGxzID0gZW5zdXJlSGVhcEFuZEVudHJp
ZXMoaGFuZGxlKTsKKyAgICAKKyAgICBhdXRvIGRlYnVnTWFsbG9jUmVzdWx0ID0gZGVidWdNYWxs
b2MoQ29uZmlnOjpvYmplY3RTaXplKTsKKyAgICBpZiAoZGVidWdNYWxsb2NSZXN1bHQudXNpbmdE
ZWJ1Z0hlYXApCisgICAgICAgIHJldHVybiBkZWJ1Z01hbGxvY1Jlc3VsdC5wdHI7CisgICAgCisg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gaGFuZGxlLmFsbG9jYXRvck9mZnNldCgpOworICAgIHJldHVy
biB0bHMtPmFsbG9jYXRlRmFzdDxDb25maWc+KG9mZnNldCwgYWJvcnRPbkZhaWx1cmUpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcsIHR5cGVuYW1lIFR5cGU+Cit2b2lkIElzb1RMUzo6
ZGVhbGxvY2F0ZUltcGwoYXBpOjpJc29IZWFwPFR5cGU+JiBoYW5kbGUsIHZvaWQqIHApCiB7CiAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gaGFuZGxlLmRlYWxsb2NhdG9yT2Zmc2V0KCk7CiAgICAgSXNv
VExTKiB0bHMgPSBnZXQoKTsKLSAgICBSRUxFQVNFX0JBU1NFUlQob2Zmc2V0IDwgdGxzLT5tX2V4
dGVudCk7Ci0gICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PElzb0RlYWxsb2NhdG9yPENvbmZp
Zz4qPih0bHMtPm1fZGF0YSArIG9mZnNldCk7CisgICAgLy8gTm90ZSB0aGF0IHRoaXMgYm91bmRz
IGNoZWNrIHdvdWxkIGJlIGhlcmUgZXZlbiBpZiB3ZSBkaWRuJ3QgaGF2ZSB0byBzdXBwb3J0IERl
YnVnSGVhcCwKKyAgICAvLyBzaW5jZSB3ZSBkb24ndCB3YW50IHVucHJlZGljdGFibGUgYmVoYXZp
b3Igb2Ygb2Zmc2V0IG9yIG1fZXh0ZW50IGV2ZXIgZ290IGNvcnJ1cHRlZC4KKyAgICBpZiAob2Zm
c2V0ID49IHRscy0+bV9leHRlbnQpCisgICAgICAgIGRlYWxsb2NhdGVTbG93KHApOworICAgIGVs
c2UKKyAgICAgICAgdGxzLT5kZWFsbG9jYXRlRmFzdDxDb25maWc+KG9mZnNldCwgcCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbmZpZz4KK3ZvaWQgSXNvVExTOjpkZWFsbG9jYXRlRmFzdCh1
bnNpZ25lZCBvZmZzZXQsIHZvaWQqIHApCit7CisgICAgcmVpbnRlcnByZXRfY2FzdDxJc29EZWFs
bG9jYXRvcjxDb25maWc+Kj4obV9kYXRhICsgb2Zmc2V0KS0+ZGVhbGxvY2F0ZShwKTsKIH0KIAog
aW5saW5lIElzb1RMUyogSXNvVExTOjpnZXQoKQpAQCAtMTI0LDggKzE1MSwxNiBAQCBCTk9fSU5M
SU5FIElzb1RMUyogSXNvVExTOjplbnN1cmVIZWFwQW5kCiAgICAgICAgICFnZXQoKQogICAgICAg
ICB8fCBoYW5kbGUuYWxsb2NhdG9yT2Zmc2V0KCkgPj0gZ2V0KCktPm1fZXh0ZW50CiAgICAgICAg
IHx8IGhhbmRsZS5kZWFsbG9jYXRvck9mZnNldCgpID49IGdldCgpLT5tX2V4dGVudCk7Ci0gICAg
ZW5zdXJlSGVhcChoYW5kbGUpOwotICAgIHJldHVybiBlbnN1cmVFbnRyaWVzKHN0ZDo6bWF4KGhh
bmRsZS5hbGxvY2F0b3JPZmZzZXQoKSwgaGFuZGxlLmRlYWxsb2NhdG9yT2Zmc2V0KCkpKTsKKyAg
ICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgaWYgKGlzVXNpbmdEZWJ1Z0hlYXAoKSkgeworICAgICAg
ICBpZiAoSXNvVExTKiByZXN1bHQgPSBnZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5zdXJlSGVhcCho
YW5kbGUpOworICAgICAgICBvZmZzZXQgPSBzdGQ6Om1heChoYW5kbGUuYWxsb2NhdG9yT2Zmc2V0
KCksIGhhbmRsZS5kZWFsbG9jYXRvck9mZnNldCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGVuc3Vy
ZUVudHJpZXMob2Zmc2V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL2JtYWxsb2MuY3BwCShyZXZpc2lvbiAyMjQ2NTcpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL2JtYWxsb2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBA
CiAKICNpbmNsdWRlICJibWFsbG9jLmgiCiAKKyNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCisKIG5h
bWVzcGFjZSBibWFsbG9jIHsgbmFtZXNwYWNlIGFwaSB7CiAKIHZvaWQqIG1hbGxvY091dE9mTGlu
ZShzaXplX3Qgc2l6ZSwgSGVhcEtpbmQga2luZCkKQEAgLTM3LDUgKzM5LDQzIEBAIHZvaWQgZnJl
ZU91dE9mTGluZSh2b2lkKiBvYmplY3QsIEhlYXBLaW4KICAgICBmcmVlKG9iamVjdCwga2luZCk7
CiB9CiAKK3ZvaWQqIHRyeUxhcmdlTWVtYWxpZ25WaXJ0dWFsKHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCBzaXplLCBIZWFwS2luZCBraW5kKQoreworICAgIGtpbmQgPSBtYXBUb0FjdGl2ZUhlYXBL
aW5kKGtpbmQpOworICAgIEhlYXAmIGhlYXAgPSBQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+
Pjo6Z2V0KCktPmF0KGtpbmQpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9j
ayhIZWFwOjptdXRleCgpKTsKKyAgICByZXR1cm4gaGVhcC50cnlBbGxvY2F0ZUxhcmdlKGxvY2ss
IGFsaWdubWVudCwgc2l6ZSwgQWxsb2NhdGlvbktpbmQ6OlZpcnR1YWwpOworfQorCit2b2lkIGZy
ZWVMYXJnZVZpcnR1YWwodm9pZCogb2JqZWN0LCBIZWFwS2luZCBraW5kKQoreworICAgIGtpbmQg
PSBtYXBUb0FjdGl2ZUhlYXBLaW5kKGtpbmQpOworICAgIEhlYXAmIGhlYXAgPSBQZXJQcm9jZXNz
PFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGtpbmQpOworICAgIHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4gbG9jayhIZWFwOjptdXRleCgpKTsKKyAgICBoZWFwLmRlYWxsb2NhdGVM
YXJnZShsb2NrLCBvYmplY3QsIEFsbG9jYXRpb25LaW5kOjpWaXJ0dWFsKTsKK30KKwordm9pZCBz
Y2F2ZW5nZSgpCit7CisgICAgc2NhdmVuZ2VUaGlzVGhyZWFkKCk7CisKKyAgICBQZXJQcm9jZXNz
PFNjYXZlbmdlcj46OmdldCgpLT5zY2F2ZW5nZSgpOworfQorCitib29sIGlzRW5hYmxlZChIZWFw
S2luZCBraW5kKQoreworICAgIGtpbmQgPSBtYXBUb0FjdGl2ZUhlYXBLaW5kKGtpbmQpOworICAg
IHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soSGVhcDo6bXV0ZXgoKSk7CisgICAg
cmV0dXJuICFQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0RmFzdENhc2UoKS0+YXQo
a2luZCkuZGVidWdIZWFwKCk7Cit9CisKKyNpZiBCT1MoREFSV0lOKQordm9pZCBzZXRTY2F2ZW5n
ZXJUaHJlYWRRT1NDbGFzcyhxb3NfY2xhc3NfdCBvdmVycmlkZUNsYXNzKQoreworICAgIHN0ZDo6
dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soSGVhcDo6bXV0ZXgoKSk7CisgICAgUGVyUHJv
Y2VzczxTY2F2ZW5nZXI+OjpnZXQoKS0+c2V0U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3Mob3ZlcnJp
ZGVDbGFzcyk7Cit9CisjZW5kaWYKKwogfSB9IC8vIG5hbWVzcGFjZSBibWFsbG9jOjphcGkKIApJ
bmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHJldmlzaW9uIDIyNDY1NykKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2
IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIklzb1RMUy5oIgogI2luY2x1ZGUgIlBl
ckhlYXBLaW5kLmgiCi0jaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgogI2luY2x1ZGUgIlNjYXZlbmdl
ci5oIgogI2luY2x1ZGUgIlN0YXRpY011dGV4LmgiCiAKQEAgLTcxLDEzICs3MCw3IEBAIGlubGlu
ZSB2b2lkKiByZWFsbG9jKHZvaWQqIG9iamVjdCwgc2l6ZV8KIH0KIAogLy8gUmV0dXJucyBudWxs
IGZvciBmYWlsdXJlCi1pbmxpbmUgdm9pZCogdHJ5TGFyZ2VNZW1hbGlnblZpcnR1YWwoc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIEhlYXBLaW5kIGtpbmQgPSBIZWFwS2luZDo6UHJpbWFy
eSkKLXsKLSAgICBraW5kID0gbWFwVG9BY3RpdmVIZWFwS2luZChraW5kKTsKLSAgICBIZWFwJiBo
ZWFwID0gUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChraW5kKTsKLSAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAg
cmV0dXJuIGhlYXAudHJ5QWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUsIEFsbG9j
YXRpb25LaW5kOjpWaXJ0dWFsKTsKLX0KK0JFWFBPUlQgdm9pZCogdHJ5TGFyZ2VNZW1hbGlnblZp
cnR1YWwoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIEhlYXBLaW5kIGtpbmQgPSBIZWFw
S2luZDo6UHJpbWFyeSk7CiAKIGlubGluZSB2b2lkIGZyZWUodm9pZCogb2JqZWN0LCBIZWFwS2lu
ZCBraW5kID0gSGVhcEtpbmQ6OlByaW1hcnkpCiB7CkBAIC04NiwxMyArNzksNyBAQCBpbmxpbmUg
dm9pZCBmcmVlKHZvaWQqIG9iamVjdCwgSGVhcEtpbmQgCiAKIEJFWFBPUlQgdm9pZCBmcmVlT3V0
T2ZMaW5lKHZvaWQqIG9iamVjdCwgSGVhcEtpbmQga2luZCA9IEhlYXBLaW5kOjpQcmltYXJ5KTsK
IAotaW5saW5lIHZvaWQgZnJlZUxhcmdlVmlydHVhbCh2b2lkKiBvYmplY3QsIEhlYXBLaW5kIGtp
bmQgPSBIZWFwS2luZDo6UHJpbWFyeSkKLXsKLSAgICBraW5kID0gbWFwVG9BY3RpdmVIZWFwS2lu
ZChraW5kKTsKLSAgICBIZWFwJiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46
OmdldCgpLT5hdChraW5kKTsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2so
SGVhcDo6bXV0ZXgoKSk7Ci0gICAgaGVhcC5kZWFsbG9jYXRlTGFyZ2UobG9jaywgb2JqZWN0LCBB
bGxvY2F0aW9uS2luZDo6VmlydHVhbCk7Ci19CitCRVhQT1JUIHZvaWQgZnJlZUxhcmdlVmlydHVh
bCh2b2lkKiBvYmplY3QsIEhlYXBLaW5kIGtpbmQgPSBIZWFwS2luZDo6UHJpbWFyeSk7CiAKIGlu
bGluZSB2b2lkIHNjYXZlbmdlVGhpc1RocmVhZCgpCiB7CkBAIC0xMDEsMTkgKzg4LDkgQEAgaW5s
aW5lIHZvaWQgc2NhdmVuZ2VUaGlzVGhyZWFkKCkKICAgICBJc29UTFM6OnNjYXZlbmdlKCk7CiB9
CiAKLWlubGluZSB2b2lkIHNjYXZlbmdlKCkKLXsKLSAgICBzY2F2ZW5nZVRoaXNUaHJlYWQoKTsK
K0JFWFBPUlQgdm9pZCBzY2F2ZW5nZSgpOwogCi0gICAgUGVyUHJvY2VzczxTY2F2ZW5nZXI+Ojpn
ZXQoKS0+c2NhdmVuZ2UoKTsKLX0KLQotaW5saW5lIGJvb2wgaXNFbmFibGVkKEhlYXBLaW5kIGtp
bmQgPSBIZWFwS2luZDo6UHJpbWFyeSkKLXsKLSAgICBraW5kID0gbWFwVG9BY3RpdmVIZWFwS2lu
ZChraW5kKTsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKEhlYXA6Om11
dGV4KCkpOwotICAgIHJldHVybiAhUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldEZh
c3RDYXNlKCktPmF0KGtpbmQpLmRlYnVnSGVhcCgpOwotfQorQkVYUE9SVCBib29sIGlzRW5hYmxl
ZChIZWFwS2luZCBraW5kID0gSGVhcEtpbmQ6OlByaW1hcnkpOwogICAgIAogaW5saW5lIHNpemVf
dCBhdmFpbGFibGVNZW1vcnkoKQogewpAQCAtMTMzLDExICsxMTAsNyBAQCBpbmxpbmUgZG91Ymxl
IHBlcmNlbnRBdmFpbGFibGVNZW1vcnlJblVzCiAjZW5kaWYKIAogI2lmIEJPUyhEQVJXSU4pCi1p
bmxpbmUgdm9pZCBzZXRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyhxb3NfY2xhc3NfdCBvdmVycmlk
ZUNsYXNzKQotewotICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soSGVhcDo6
bXV0ZXgoKSk7Ci0gICAgUGVyUHJvY2VzczxTY2F2ZW5nZXI+OjpnZXQoKS0+c2V0U2NhdmVuZ2Vy
VGhyZWFkUU9TQ2xhc3Mob3ZlcnJpZGVDbGFzcyk7Ci19CitCRVhQT1JUIHZvaWQgc2V0U2NhdmVu
Z2VyVGhyZWFkUU9TQ2xhc3MocW9zX2NsYXNzX3Qgb3ZlcnJpZGVDbGFzcyk7CiAjZW5kaWYKIAog
fSAvLyBuYW1lc3BhY2UgYXBpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327106</attachid>
            <date>2017-11-16 14:14:44 -0800</date>
            <delta_ts>2017-11-17 14:43:51 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22370</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNDkzNSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE3LTExLTE2ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSXNvbGF0ZWQgSGVhcHMgY2F1c2Vk
IGFuIGluY3JlYXNlIGluIHJlcG9ydGVkIGxlYWtzIG9uIHRoZSBib3RzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk0NjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4ZXMgdGhl
IHdheSBpc29oZWFwcyBpbnRlcmFjdCB3aXRoIHN5c3RlbSB0b29sczoKKyAgICAgICAgCisgICAg
ICAgIC0gT3B0cyBpbnRvIHRoZSBWTUhlYXAgQVBJIHNvIHRoYXQgdGhlIGxlYWtzIHRvb2wgY2Fu
IGZpbmQgaXNvaGVhcCBtZW1vcnkuCisgICAgICAgIAorICAgICAgICAtIE9wdHMgaW50byB0aGUg
RGVidWdIZWFwL0Vudmlyb25tZW50IEFQSXMgc28gdGhhdCB3ZSB0dXJuIG9mZiBpc29oZWFwIGFs
bG9jYXRpb24gaWYgbWVtb3J5CisgICAgICAgICAgZGVidWdnaW5nIG9wdGlvbnMgYXJlIGluIHVz
ZS4KKworICAgICAgICAqIGJtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBibWFsbG9jL0RlYnVnSGVhcC5oOgorICAgICAgICAqIGJtYWxsb2MvSXNvSGVhcC5oOgor
ICAgICAgICAqIGJtYWxsb2MvSXNvUGFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoYm1hbGxvYzo6
SXNvUGFnZUJhc2U6OmFsbG9jYXRlUGFnZU1lbW9yeSk6CisgICAgICAgICogYm1hbGxvYy9Jc29Q
YWdlLmg6CisgICAgICAgICogYm1hbGxvYy9Jc29QYWdlSW5saW5lcy5oOgorICAgICAgICAoYm1h
bGxvYzo6SXNvUGFnZTxDb25maWc+Ojp0cnlDcmVhdGUpOgorICAgICAgICAqIGJtYWxsb2MvSXNv
VExTLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6Oklzb1RMUzo6ZGVhbGxvY2F0ZVNsb3cpOgorICAg
ICAgICAoYm1hbGxvYzo6SXNvVExTOjplbnN1cmVFbnRyaWVzKToKKyAgICAgICAgKGJtYWxsb2M6
Oklzb1RMUzo6aXNVc2luZ0RlYnVnSGVhcCk6CisgICAgICAgIChibWFsbG9jOjpJc29UTFM6OmRl
YnVnTWFsbG9jKToKKyAgICAgICAgKiBibWFsbG9jL0lzb1RMUy5oOgorICAgICAgICAqIGJtYWxs
b2MvSXNvVExTSW5saW5lcy5oOgorICAgICAgICAoYm1hbGxvYzo6SXNvVExTOjphbGxvY2F0ZSk6
CisgICAgICAgIChibWFsbG9jOjpJc29UTFM6OmRlYWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxv
Yzo6SXNvVExTOjphbGxvY2F0ZUltcGwpOgorICAgICAgICAoYm1hbGxvYzo6SXNvVExTOjphbGxv
Y2F0ZUZhc3QpOgorICAgICAgICAoYm1hbGxvYzo6SXNvVExTOjphbGxvY2F0ZVNsb3cpOgorICAg
ICAgICAoYm1hbGxvYzo6SXNvVExTOjpkZWFsbG9jYXRlSW1wbCk6CisgICAgICAgIChibWFsbG9j
OjpJc29UTFM6OmRlYWxsb2NhdGVGYXN0KToKKyAgICAgICAgKGJtYWxsb2M6Oklzb1RMUzo6ZW5z
dXJlSGVhcEFuZEVudHJpZXMpOgorICAgICAgICAoYm1hbGxvYzo6SXNvVExTOjphbGxvY2F0b3Ip
OiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SXNvVExTOjpkZWFsbG9jYXRvcik6IERlbGV0
ZWQuCisgICAgICAgICogYm1hbGxvYy9ibWFsbG9jLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OmFw
aTo6dHJ5TGFyZ2VNZW1hbGlnblZpcnR1YWwpOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjpmcmVl
TGFyZ2VWaXJ0dWFsKToKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6c2NhdmVuZ2UpOgorICAgICAg
ICAoYm1hbGxvYzo6YXBpOjppc0VuYWJsZWQpOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjpzZXRT
Y2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyk6CisgICAgICAgICogYm1hbGxvYy9ibWFsbG9jLmg6Cisg
ICAgICAgIChibWFsbG9jOjphcGk6OnRyeUxhcmdlTWVtYWxpZ25WaXJ0dWFsKTogRGVsZXRlZC4K
KyAgICAgICAgKGJtYWxsb2M6OmFwaTo6ZnJlZUxhcmdlVmlydHVhbCk6IERlbGV0ZWQuCisgICAg
ICAgIChibWFsbG9jOjphcGk6OnNjYXZlbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6
OmFwaTo6aXNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6c2V0U2Nh
dmVuZ2VyVGhyZWFkUU9TQ2xhc3MpOiBEZWxldGVkLgorCiAyMDE3LTExLTE0ICBTYWFtIEJhcmF0
aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgdGhlIGdpZ2FjYWdlIHJ1bndh
eSAzMkdCCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjQ2NTcpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcg
QEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGM0RBMDE0MUYyNjdBQjgw
MDM0MkMwOCAvKiBBbGxvY2F0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzREEwMTMxRjI2N0FCODAwMzQyQzA4IC8qIEFsbG9jYXRpb25L
aW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY1MTY3NzQxRkFENjg1QzAwODIzNkE4IC8qIGJtYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1MTY3NzMxRkFENjg1MjAwODIzNkE4IC8q
IGJtYWxsb2MuY3BwICovOyB9OworCQkwRjU1NDlFRjFGQjU0NzA0MDA3RkY3NUEgLyogSXNvUGFn
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU1
NDlFRTFGQjU0NzAxMDA3RkY3NUEgLyogSXNvUGFnZS5jcHAgKi87IH07CiAJCTBGNUJGMTQ3MUYy
MkE4QjEwMDI5RDkxRCAvKiBIZWFwS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNDYxRjIyQThCMTAwMjlEOTFEIC8qIEhlYXBLaW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QkYx
NDkxRjIyQThEODAwMjlEOTFEIC8qIFBlckhlYXBLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE0ODFGMjJBOEQ4MDAyOUQ5MUQgLyogUGVy
SGVhcEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjVCRjE0RDFGMjJCMEMzMDAyOUQ5MUQgLyogR2lnYWNhZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTRDMUYyMkIwQzMwMDI5RDkx
RCAvKiBHaWdhY2FnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xNzMsNiArMTc0LDcgQEAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCQkwRjNEQTAxMzFGMjY3QUI4MDAzNDJDMDggLyogQWxsb2NhdGlvbktpbmQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWxsb2NhdGlvbktpbmQuaDsgcGF0aCA9IGJtYWxsb2MvQWxsb2NhdGlv
bktpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1MTY3NzMxRkFENjg1MjAw
ODIzNkE4IC8qIGJtYWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gYm1hbGxvYy5jcHA7IHBhdGggPSBibWFsbG9jL2JtYWxsb2MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjU1NDlFRTFGQjU0NzAxMDA3RkY3NUEgLyogSXNvUGFnZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJc29QYWdlLmNwcDsgcGF0aCA9
IGJtYWxsb2MvSXNvUGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUJG
MTQ2MUYyMkE4QjEwMDI5RDkxRCAvKiBIZWFwS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBIZWFwS2lu
ZC5oOyBwYXRoID0gYm1hbGxvYy9IZWFwS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjVCRjE0ODFGMjJBOEQ4MDAyOUQ5MUQgLyogUGVySGVhcEtpbmQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gUGVySGVhcEtpbmQuaDsgcGF0aCA9IGJtYWxsb2MvUGVySGVhcEtpbmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QkYxNEMxRjIyQjBDMzAwMjlEOTFEIC8qIEdpZ2Fj
YWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEdpZ2FjYWdlLmg7IHBhdGggPSBibWFsbG9jL0dpZ2FjYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNjAsNiArMzYyLDcgQEAKIAkJCQkw
RjdFQjgxRTFGOTU0MUIwMDBGMUFCQ0IgLyogSXNvSGVhcEltcGwuaCAqLywKIAkJCQkwRjdFQjdG
RDFGOTU0MUFEMDBGMUFCQ0IgLyogSXNvSGVhcEltcGxJbmxpbmVzLmggKi8sCiAJCQkJMEY3RUI4
MDkxRjk1NDFBRDAwRjFBQkNCIC8qIElzb0hlYXBJbmxpbmVzLmggKi8sCisJCQkJMEY1NTQ5RUUx
RkI1NDcwMTAwN0ZGNzVBIC8qIElzb1BhZ2UuY3BwICovLAogCQkJCTBGN0VCODA3MUY5NTQxQUQw
MEYxQUJDQiAvKiBJc29QYWdlLmggKi8sCiAJCQkJMEY3RUI4MEExRjk1NDFBRTAwRjFBQkNCIC8q
IElzb1BhZ2VJbmxpbmVzLmggKi8sCiAJCQkJMEY3RUI4MDQxRjk1NDFBRDAwRjFBQkNCIC8qIElz
b1BhZ2VUcmlnZ2VyLmggKi8sCkBAIC03NTQsNiArNzU3LDcgQEAKIAkJCQkwRjdFQjgzNjFGOTU0
MUIwMDBGMUFCQ0IgLyogSXNvVExTLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDU1NzMzMUY3
RURCN0IwMEIxRjBBMyAvKiBIZWFwS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjdFQjgz
QjFGOTU0MUIwMDBGMUFCQ0IgLyogSXNvSGVhcEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEY1NTQ5RUYxRkI1NDcwNDAwN0ZGNzVBIC8qIElzb1BhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRGMjcxQzMxOEVBMzk3ODAwOEMxNTJGIC8qIEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2NTk5QzVDQzFFQzNGMTU5MDBBMkY3QkIgLyogQXZhaWxhYmxlTWVtb3J5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM0MThFQTM5N0IwMDhDMTUyRiAvKiBDYWNoZS5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVidWdIZWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWJ1Z0hlYXAuaAkocmV2aXNp
b24gMjI0NjU3KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWJ1Z0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCogbWVtYWxp
Z25MYXJnZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QsIEFsbG9jYXRpb25LaW5kKTsKICAgICB2
b2lkIGZyZWVMYXJnZSh2b2lkKiBiYXNlLCBBbGxvY2F0aW9uS2luZCk7Ci0KKyAgICAKIHByaXZh
dGU6CiAjaWYgQk9TKERBUldJTikKICAgICBtYWxsb2Nfem9uZV90KiBtX3pvbmU7CkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0lzb0hlYXAuaAkocmV2aXNpb24gMjI0NjU3KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9Jc29IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgc3Ry
dWN0IElzb0hlYXAgewogICAgIAogICAgIHVuc2lnbmVkIGRlYWxsb2NhdG9yT2Zmc2V0KCkgeyBy
ZXR1cm4gbV9kZWFsbG9jYXRvck9mZnNldFBsdXNPbmUgLSAxOyB9CiAgICAgdm9pZCBzZXREZWFs
bG9jYXRvck9mZnNldCh1bnNpZ25lZCB2YWx1ZSkgeyBtX2RlYWxsb2NhdG9yT2Zmc2V0UGx1c09u
ZSA9IHZhbHVlICsgMTsgfQotICAgIAorCiAgICAgSXNvSGVhcEltcGw8Q29uZmlnPiYgaW1wbCgp
OwogICAgIAogICAgIFN0YXRpY011dGV4IG1faW5pdGlhbGl6YXRpb25Mb2NrOwpJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0lzb1BhZ2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvSXNvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiSXNv
UGFnZS5oIgorCisjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgorI2luY2x1ZGUgIlZNSGVhcC5oIgor
CituYW1lc3BhY2UgYm1hbGxvYyB7CisKK3ZvaWQqIElzb1BhZ2VCYXNlOjphbGxvY2F0ZVBhZ2VN
ZW1vcnkoKQoreworICAgIHJldHVybiBQZXJQcm9jZXNzPFZNSGVhcD46OmdldCgpLT50cnlBbGxv
Y2F0ZUxhcmdlQ2h1bmsocGFnZVNpemUsIHBhZ2VTaXplLCBBbGxvY2F0aW9uS2luZDo6UGh5c2lj
YWwpLmJlZ2luKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSXNvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSXNvUGFnZS5oCShyZXZpc2lvbiAyMjQ2NTcpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0lzb1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb25maWc+IGNsYXNzIElzb0hlYXBJCiBjbGFzcyBJc29QYWdlQmFzZSB7CiBwdWJs
aWM6ICAgIAogICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHBhZ2VTaXplID0gMTYzODQ7Cisg
ICAgCitwcm90ZWN0ZWQ6CisgICAgQkVYUE9SVCBzdGF0aWMgdm9pZCogYWxsb2NhdGVQYWdlTWVt
b3J5KCk7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+CkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0lzb1BhZ2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9Jc29QYWdlSW5saW5lcy5oCShyZXZpc2lvbiAyMjQ2NTcpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0lzb1BhZ2VJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDcgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogdGVtcGxhdGU8dHlwZW5hbWUgQ29uZmlnPgog
SXNvUGFnZTxDb25maWc+KiBJc29QYWdlPENvbmZpZz46OnRyeUNyZWF0ZShJc29EaXJlY3RvcnlC
YXNlPENvbmZpZz4mIGRpcmVjdG9yeSwgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgdm9pZCogbWVt
b3J5ID0gdHJ5Vk1BbGxvY2F0ZShwYWdlU2l6ZSwgcGFnZVNpemUpOworICAgIHZvaWQqIG1lbW9y
eSA9IGFsbG9jYXRlUGFnZU1lbW9yeSgpOwogICAgIGlmICghbWVtb3J5KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RMUy5jcHAJKHJldmlz
aW9uIDIyNDY1NykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNiArMjUsOCBAQAogCiAjaW5jbHVkZSAiSXNvVExTLmgiCiAKKyNpbmNs
dWRlICJEZWJ1Z0hlYXAuaCIKKyNpbmNsdWRlICJFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIklz
b1RMU0VudHJ5SW5saW5lcy5oIgogI2luY2x1ZGUgIklzb1RMU0lubGluZXMuaCIKICNpbmNsdWRl
ICJJc29UTFNMYXlvdXQuaCIKQEAgLTUwLDYgKzUyLDE1IEBAIElzb1RMUzo6SXNvVExTKCkKIHsK
IH0KIAordm9pZCBJc29UTFM6OmRlYWxsb2NhdGVTbG93KHZvaWQqIHApCit7CisgICAgLy8gSWYg
d2UgZ28gZG93biB0aGlzIHBhdGggYW5kIHdlIGFyZW4ndCBpbiBkZWJ1ZyBoZWFwIG1vZGUsIHRo
ZW4gdGhpcyBtZWFucyB3ZSBoYXZlIHNvbWUgY29ycnVwdGlvbi4KKyAgICAvLyBUaGluayBvZiB0
aGlzIGFzIHJlYWxseSBiZWluZyBhbiBhc3NlcnRpb24gYWJvdXQgb2Zmc2V0IDwgdGxzLT5tX2V4
dGVudC4KKyAgICBSRUxFQVNFX0JBU1NFUlQoUGVyUHJvY2VzczxFbnZpcm9ubWVudD46OmdldCgp
LT5pc0RlYnVnSGVhcEVuYWJsZWQoKSk7CisgICAgCisgICAgUGVyUHJvY2VzczxEZWJ1Z0hlYXA+
OjpnZXQoKS0+ZnJlZShwKTsKK30KKwogSXNvVExTKiBJc29UTFM6OmVuc3VyZUVudHJpZXModW5z
aWduZWQgb2Zmc2V0KQogewogICAgIFJFTEVBU0VfQkFTU0VSVCghZ2V0KCkgfHwgb2Zmc2V0ID49
IGdldCgpLT5tX2V4dGVudCk7CkBAIC03NiwxNiArODcsMTkgQEAgSXNvVExTKiBJc29UTFM6OmVu
c3VyZUVudHJpZXModW5zaWduZWQgbwogICAgIElzb1RMU0VudHJ5KiBzdGFydEVudHJ5ID0gb2xk
TGFzdEVudHJ5ID8gb2xkTGFzdEVudHJ5IDogbGF5b3V0LmhlYWQoKTsKICAgICAKICAgICBJc29U
TFNFbnRyeSogdGFyZ2V0RW50cnkgPSBzdGFydEVudHJ5OwotICAgIGZvciAoOzspIHsKKyAgICBz
aXplX3QgcmVxdWlyZWRDYXBhY2l0eSA9IDA7CisgICAgaWYgKHN0YXJ0RW50cnkpIHsKKyAgICAg
ICAgZm9yICg7OykgeworICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHRhcmdldEVudHJ5KTsK
KyAgICAgICAgICAgIFJFTEVBU0VfQkFTU0VSVCh0YXJnZXRFbnRyeS0+b2Zmc2V0KCkgPD0gb2Zm
c2V0KTsKKyAgICAgICAgICAgIGlmICh0YXJnZXRFbnRyeS0+b2Zmc2V0KCkgPT0gb2Zmc2V0KQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdGFyZ2V0RW50cnkgPSB0YXJnZXRF
bnRyeS0+bV9uZXh0OworICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQkFTU0VSVCh0YXJnZXRF
bnRyeSk7Ci0gICAgICAgIFJFTEVBU0VfQkFTU0VSVCh0YXJnZXRFbnRyeS0+b2Zmc2V0KCkgPD0g
b2Zmc2V0KTsKLSAgICAgICAgaWYgKHRhcmdldEVudHJ5LT5vZmZzZXQoKSA9PSBvZmZzZXQpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgdGFyZ2V0RW50cnkgPSB0YXJnZXRFbnRyeS0+bV9u
ZXh0OworICAgICAgICByZXF1aXJlZENhcGFjaXR5ID0gdGFyZ2V0RW50cnktPmV4dGVudCgpOwog
ICAgIH0KLSAgICBSRUxFQVNFX0JBU1NFUlQodGFyZ2V0RW50cnkpOwotCi0gICAgc2l6ZV90IHJl
cXVpcmVkQ2FwYWNpdHkgPSB0YXJnZXRFbnRyeS0+ZXh0ZW50KCk7CisgICAgCiAgICAgaWYgKCF0
bHMgfHwgcmVxdWlyZWRDYXBhY2l0eSA+IHRscy0+bV9jYXBhY2l0eSkgewogICAgICAgICBzaXpl
X3QgcmVxdWlyZWRTaXplID0gc2l6ZUZvckNhcGFjaXR5KHJlcXVpcmVkQ2FwYWNpdHkpOwogICAg
ICAgICBzaXplX3QgZ29vZFNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mKHZtUGFnZVNpemUoKSwg
cmVxdWlyZWRTaXplKTsKQEAgLTExMCwxNCArMTI0LDE2IEBAIElzb1RMUyogSXNvVExTOjplbnN1
cmVFbnRyaWVzKHVuc2lnbmVkIG8KICAgICAgICAgc2V0KHRscyk7CiAgICAgfQogICAgIAotICAg
IHN0YXJ0RW50cnktPndhbGtVcFRvSW5jbHVzaXZlKAotICAgICAgICB0YXJnZXRFbnRyeSwKLSAg
ICAgICAgWyZdIChJc29UTFNFbnRyeSogZW50cnkpIHsKLSAgICAgICAgICAgIGVudHJ5LT5jb25z
dHJ1Y3QodGxzLT5tX2RhdGEgKyBlbnRyeS0+b2Zmc2V0KCkpOwotICAgICAgICB9KTsKLSAgICAK
LSAgICB0bHMtPm1fbGFzdEVudHJ5ID0gdGFyZ2V0RW50cnk7Ci0gICAgdGxzLT5tX2V4dGVudCA9
IHRhcmdldEVudHJ5LT5leHRlbnQoKTsKKyAgICBpZiAoc3RhcnRFbnRyeSkgeworICAgICAgICBz
dGFydEVudHJ5LT53YWxrVXBUb0luY2x1c2l2ZSgKKyAgICAgICAgICAgIHRhcmdldEVudHJ5LAor
ICAgICAgICAgICAgWyZdIChJc29UTFNFbnRyeSogZW50cnkpIHsKKyAgICAgICAgICAgICAgICBl
bnRyeS0+Y29uc3RydWN0KHRscy0+bV9kYXRhICsgZW50cnktPm9mZnNldCgpKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAKKyAgICAgICAgdGxzLT5tX2xhc3RFbnRyeSA9IHRhcmdldEVudHJ5
OworICAgICAgICB0bHMtPm1fZXh0ZW50ID0gdGFyZ2V0RW50cnktPmV4dGVudCgpOworICAgIH0K
ICAgICAKICAgICByZXR1cm4gdGxzOwogfQpAQCAtMTU5LDUgKzE3NSwxOCBAQCB2b2lkIElzb1RM
Uzo6Zm9yRWFjaEVudHJ5KGNvbnN0IEZ1bmMmIGZ1CiAgICAgICAgIH0pOwogfQogCitib29sIElz
b1RMUzo6aXNVc2luZ0RlYnVnSGVhcCgpCit7CisgICAgcmV0dXJuIFBlclByb2Nlc3M8RW52aXJv
bm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCk7Cit9CisKK2F1dG8gSXNvVExTOjpk
ZWJ1Z01hbGxvYyhzaXplX3Qgc2l6ZSkgLT4gRGVidWdNYWxsb2NSZXN1bHQKK3sKKyAgICBEZWJ1
Z01hbGxvY1Jlc3VsdCByZXN1bHQ7CisgICAgaWYgKChyZXN1bHQudXNpbmdEZWJ1Z0hlYXAgPSBp
c1VzaW5nRGVidWdIZWFwKCkpKQorICAgICAgICByZXN1bHQucHRyID0gUGVyUHJvY2VzczxEZWJ1
Z0hlYXA+OjpnZXQoKS0+bWFsbG9jKHNpemUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIGJtYWxsb2MKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29U
TFMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RMUy5oCShyZXZp
c2lvbiAyMjQ2NTcpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RMUy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OCwxMCArNTgsMjEgQEAgcHJpdmF0ZToKICAgICBJc29UTFMoKTsKICAgICAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcsIHR5cGVuYW1lIFR5cGU+Ci0gICAgc3RhdGlj
IElzb0FsbG9jYXRvcjxDb25maWc+JiBhbGxvY2F0b3IoYXBpOjpJc29IZWFwPFR5cGU+Jik7Cisg
ICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlSW1wbChhcGk6Oklzb0hlYXA8VHlwZT4mLCBib29sIGFi
b3J0T25GYWlsdXJlKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+CisgICAg
dm9pZCogYWxsb2NhdGVGYXN0KHVuc2lnbmVkIG9mZnNldCwgYm9vbCBhYm9ydE9uRmFpbHVyZSk7
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29uZmlnLCB0eXBlbmFtZSBUeXBlPgorICAg
IHN0YXRpYyB2b2lkKiBhbGxvY2F0ZVNsb3coYXBpOjpJc29IZWFwPFR5cGU+JiwgYm9vbCBhYm9y
dE9uRmFpbHVyZSk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29uZmlnLCB0eXBlbmFt
ZSBUeXBlPgotICAgIHN0YXRpYyBJc29EZWFsbG9jYXRvcjxDb25maWc+JiBkZWFsbG9jYXRvcihh
cGk6Oklzb0hlYXA8VHlwZT4mKTsKKyAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlSW1wbChhcGk6
Oklzb0hlYXA8VHlwZT4mLCB2b2lkKiBwKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b25maWc+CisgICAgdm9pZCBkZWFsbG9jYXRlRmFzdCh1bnNpZ25lZCBvZmZzZXQsIHZvaWQqIHAp
OworICAgIAorICAgIEJFWFBPUlQgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVNsb3codm9pZCogcCk7
CiAgICAgCiAgICAgc3RhdGljIElzb1RMUyogZ2V0KCk7CiAgICAgc3RhdGljIHZvaWQgc2V0KElz
b1RMUyopOwpAQCAtODEsMTEgKzkyLDIwIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hFbnRyeShjb25zdCBGdW5jJik7CiAgICAgCisgICAg
QkVYUE9SVCBzdGF0aWMgYm9vbCBpc1VzaW5nRGVidWdIZWFwKCk7CisgICAgCisgICAgc3RydWN0
IERlYnVnTWFsbG9jUmVzdWx0IHsKKyAgICAgICAgdm9pZCogcHRyIHsgbnVsbHB0ciB9OworICAg
ICAgICBib29sIHVzaW5nRGVidWdIZWFwIHsgZmFsc2UgfTsKKyAgICB9OworICAgIAorICAgIEJF
WFBPUlQgc3RhdGljIERlYnVnTWFsbG9jUmVzdWx0IGRlYnVnTWFsbG9jKHNpemVfdCk7CisgICAg
CiAgICAgSXNvVExTRW50cnkqIG1fbGFzdEVudHJ5IHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVk
IG1fZXh0ZW50IHsgMCB9OwogICAgIHVuc2lnbmVkIG1fY2FwYWNpdHkgeyAwIH07CiAgICAgY2hh
ciBtX2RhdGFbMV07Ci0KKyAgICAKICNpZiBIQVZFX1BUSFJFQURfTUFDSERFUF9ICiAgICAgc3Rh
dGljIGNvbnN0IHB0aHJlYWRfa2V5X3QgdGxzS2V5ID0gX19QVEtfRlJBTUVXT1JLX0pBVkFTQ1JJ
UFRDT1JFX0tFWTE7CiAjZWxzZQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFNJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFNJbmxp
bmVzLmgJKHJldmlzaW9uIDIyNDY1NykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExT
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBibWFs
bG9jIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiB2b2lkKiBJc29UTFM6OmFsbG9jYXRlKGFw
aTo6SXNvSGVhcDxUeXBlPiYgaGFuZGxlLCBib29sIGFib3J0T25GYWlsdXJlKQogewotICAgIHJl
dHVybiBhbGxvY2F0b3I8dHlwZW5hbWUgYXBpOjpJc29IZWFwPFR5cGU+OjpDb25maWc+KGhhbmRs
ZSkuYWxsb2NhdGUoYWJvcnRPbkZhaWx1cmUpOworICAgIHJldHVybiBhbGxvY2F0ZUltcGw8dHlw
ZW5hbWUgYXBpOjpJc29IZWFwPFR5cGU+OjpDb25maWc+KGhhbmRsZSwgYWJvcnRPbkZhaWx1cmUp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpAQCAtNDEsNyArNDEsNyBAQCB2b2lkIElz
b1RMUzo6ZGVhbGxvY2F0ZShhcGk6Oklzb0hlYXA8VHlwCiB7CiAgICAgaWYgKCFwKQogICAgICAg
ICByZXR1cm47Ci0gICAgZGVhbGxvY2F0b3I8dHlwZW5hbWUgYXBpOjpJc29IZWFwPFR5cGU+OjpD
b25maWc+KGhhbmRsZSkuZGVhbGxvY2F0ZShwKTsKKyAgICBkZWFsbG9jYXRlSW1wbDx0eXBlbmFt
ZSBhcGk6Oklzb0hlYXA8VHlwZT46OkNvbmZpZz4oaGFuZGxlLCBwKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVHlwZT4KQEAgLTYyLDI0ICs2Miw1MSBAQCB2b2lkIElzb1RMUzo6c2NhdmVuZ2Uo
YXBpOjpJc29IZWFwPFR5cGU+CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbmZpZywgdHlwZW5h
bWUgVHlwZT4KLUlzb0FsbG9jYXRvcjxDb25maWc+JiBJc29UTFM6OmFsbG9jYXRvcihhcGk6Oklz
b0hlYXA8VHlwZT4mIGhhbmRsZSkKK3ZvaWQqIElzb1RMUzo6YWxsb2NhdGVJbXBsKGFwaTo6SXNv
SGVhcDxUeXBlPiYgaGFuZGxlLCBib29sIGFib3J0T25GYWlsdXJlKQogewogICAgIHVuc2lnbmVk
IG9mZnNldCA9IGhhbmRsZS5hbGxvY2F0b3JPZmZzZXQoKTsKICAgICBJc29UTFMqIHRscyA9IGdl
dCgpOwotICAgIGlmICghdGxzIHx8IG9mZnNldCA+PSB0bHMtPm1fZXh0ZW50KSB7Ci0gICAgICAg
IHRscyA9IGVuc3VyZUhlYXBBbmRFbnRyaWVzKGhhbmRsZSk7Ci0gICAgICAgIG9mZnNldCA9IGhh
bmRsZS5hbGxvY2F0b3JPZmZzZXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PElzb0FsbG9jYXRvcjxDb25maWc+Kj4odGxzLT5tX2RhdGEgKyBvZmZzZXQpOworICAgIGlm
ICghdGxzIHx8IG9mZnNldCA+PSB0bHMtPm1fZXh0ZW50KQorICAgICAgICByZXR1cm4gYWxsb2Nh
dGVTbG93PHR5cGVuYW1lIGFwaTo6SXNvSGVhcDxUeXBlPjo6Q29uZmlnPihoYW5kbGUsIGFib3J0
T25GYWlsdXJlKTsKKyAgICByZXR1cm4gdGxzLT5hbGxvY2F0ZUZhc3Q8Q29uZmlnPihvZmZzZXQs
IGFib3J0T25GYWlsdXJlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29uZmlnPgordm9pZCog
SXNvVExTOjphbGxvY2F0ZUZhc3QodW5zaWduZWQgb2Zmc2V0LCBib29sIGFib3J0T25GYWlsdXJl
KQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PElzb0FsbG9jYXRvcjxDb25maWc+Kj4o
bV9kYXRhICsgb2Zmc2V0KS0+YWxsb2NhdGUoYWJvcnRPbkZhaWx1cmUpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb25maWcsIHR5cGVuYW1lIFR5cGU+Ci1Jc29EZWFsbG9jYXRvcjxDb25maWc+
JiBJc29UTFM6OmRlYWxsb2NhdG9yKGFwaTo6SXNvSGVhcDxUeXBlPiYgaGFuZGxlKQorQk5PX0lO
TElORSB2b2lkKiBJc29UTFM6OmFsbG9jYXRlU2xvdyhhcGk6Oklzb0hlYXA8VHlwZT4mIGhhbmRs
ZSwgYm9vbCBhYm9ydE9uRmFpbHVyZSkKK3sKKyAgICBJc29UTFMqIHRscyA9IGVuc3VyZUhlYXBB
bmRFbnRyaWVzKGhhbmRsZSk7CisgICAgCisgICAgYXV0byBkZWJ1Z01hbGxvY1Jlc3VsdCA9IGRl
YnVnTWFsbG9jKENvbmZpZzo6b2JqZWN0U2l6ZSk7CisgICAgaWYgKGRlYnVnTWFsbG9jUmVzdWx0
LnVzaW5nRGVidWdIZWFwKQorICAgICAgICByZXR1cm4gZGVidWdNYWxsb2NSZXN1bHQucHRyOwor
ICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCA9IGhhbmRsZS5hbGxvY2F0b3JPZmZzZXQoKTsKKyAg
ICByZXR1cm4gdGxzLT5hbGxvY2F0ZUZhc3Q8Q29uZmlnPihvZmZzZXQsIGFib3J0T25GYWlsdXJl
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29uZmlnLCB0eXBlbmFtZSBUeXBlPgordm9pZCBJ
c29UTFM6OmRlYWxsb2NhdGVJbXBsKGFwaTo6SXNvSGVhcDxUeXBlPiYgaGFuZGxlLCB2b2lkKiBw
KQogewogICAgIHVuc2lnbmVkIG9mZnNldCA9IGhhbmRsZS5kZWFsbG9jYXRvck9mZnNldCgpOwog
ICAgIElzb1RMUyogdGxzID0gZ2V0KCk7Ci0gICAgUkVMRUFTRV9CQVNTRVJUKG9mZnNldCA8IHRs
cy0+bV9leHRlbnQpOwotICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxJc29EZWFsbG9jYXRv
cjxDb25maWc+Kj4odGxzLT5tX2RhdGEgKyBvZmZzZXQpOworICAgIC8vIE5vdGUgdGhhdCB0aGlz
IGJvdW5kcyBjaGVjayB3b3VsZCBiZSBoZXJlIGV2ZW4gaWYgd2UgZGlkbid0IGhhdmUgdG8gc3Vw
cG9ydCBEZWJ1Z0hlYXAsCisgICAgLy8gc2luY2Ugd2UgZG9uJ3Qgd2FudCB1bnByZWRpY3RhYmxl
IGJlaGF2aW9yIG9mIG9mZnNldCBvciBtX2V4dGVudCBldmVyIGdvdCBjb3JydXB0ZWQuCisgICAg
aWYgKG9mZnNldCA+PSB0bHMtPm1fZXh0ZW50KQorICAgICAgICBkZWFsbG9jYXRlU2xvdyhwKTsK
KyAgICBlbHNlCisgICAgICAgIHRscy0+ZGVhbGxvY2F0ZUZhc3Q8Q29uZmlnPihvZmZzZXQsIHAp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+Cit2b2lkIElzb1RMUzo6ZGVhbGxvY2F0
ZUZhc3QodW5zaWduZWQgb2Zmc2V0LCB2b2lkKiBwKQoreworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
SXNvRGVhbGxvY2F0b3I8Q29uZmlnPio+KG1fZGF0YSArIG9mZnNldCktPmRlYWxsb2NhdGUocCk7
CiB9CiAKIGlubGluZSBJc29UTFMqIElzb1RMUzo6Z2V0KCkKQEAgLTEyNCw4ICsxNTEsMTYgQEAg
Qk5PX0lOTElORSBJc29UTFMqIElzb1RMUzo6ZW5zdXJlSGVhcEFuZAogICAgICAgICAhZ2V0KCkK
ICAgICAgICAgfHwgaGFuZGxlLmFsbG9jYXRvck9mZnNldCgpID49IGdldCgpLT5tX2V4dGVudAog
ICAgICAgICB8fCBoYW5kbGUuZGVhbGxvY2F0b3JPZmZzZXQoKSA+PSBnZXQoKS0+bV9leHRlbnQp
OwotICAgIGVuc3VyZUhlYXAoaGFuZGxlKTsKLSAgICByZXR1cm4gZW5zdXJlRW50cmllcyhzdGQ6
Om1heChoYW5kbGUuYWxsb2NhdG9yT2Zmc2V0KCksIGhhbmRsZS5kZWFsbG9jYXRvck9mZnNldCgp
KSk7CisgICAgdW5zaWduZWQgb2Zmc2V0OworICAgIGlmIChpc1VzaW5nRGVidWdIZWFwKCkpIHsK
KyAgICAgICAgaWYgKElzb1RMUyogcmVzdWx0ID0gZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICBvZmZzZXQgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuc3Vy
ZUhlYXAoaGFuZGxlKTsKKyAgICAgICAgb2Zmc2V0ID0gc3RkOjptYXgoaGFuZGxlLmFsbG9jYXRv
ck9mZnNldCgpLCBoYW5kbGUuZGVhbGxvY2F0b3JPZmZzZXQoKSk7CisgICAgfQorICAgIHJldHVy
biBlbnN1cmVFbnRyaWVzKG9mZnNldCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5k
ZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmNwcAkocmV2aXNpb24gMjI0NjU3KQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiAr
MjUsOCBAQAogCiAjaW5jbHVkZSAiYm1hbGxvYy5oIgogCisjaW5jbHVkZSAiUGVyUHJvY2Vzcy5o
IgorCiBuYW1lc3BhY2UgYm1hbGxvYyB7IG5hbWVzcGFjZSBhcGkgewogCiB2b2lkKiBtYWxsb2NP
dXRPZkxpbmUoc2l6ZV90IHNpemUsIEhlYXBLaW5kIGtpbmQpCkBAIC0zNyw1ICszOSw0MyBAQCB2
b2lkIGZyZWVPdXRPZkxpbmUodm9pZCogb2JqZWN0LCBIZWFwS2luCiAgICAgZnJlZShvYmplY3Qs
IGtpbmQpOwogfQogCit2b2lkKiB0cnlMYXJnZU1lbWFsaWduVmlydHVhbChzaXplX3QgYWxpZ25t
ZW50LCBzaXplX3Qgc2l6ZSwgSGVhcEtpbmQga2luZCkKK3sKKyAgICBraW5kID0gbWFwVG9BY3Rp
dmVIZWFwS2luZChraW5kKTsKKyAgICBIZWFwJiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFwS2lu
ZDxIZWFwPj46OmdldCgpLT5hdChraW5kKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+IGxvY2soSGVhcDo6bXV0ZXgoKSk7CisgICAgcmV0dXJuIGhlYXAudHJ5QWxsb2NhdGVMYXJn
ZShsb2NrLCBhbGlnbm1lbnQsIHNpemUsIEFsbG9jYXRpb25LaW5kOjpWaXJ0dWFsKTsKK30KKwor
dm9pZCBmcmVlTGFyZ2VWaXJ0dWFsKHZvaWQqIG9iamVjdCwgSGVhcEtpbmQga2luZCkKK3sKKyAg
ICBraW5kID0gbWFwVG9BY3RpdmVIZWFwS2luZChraW5kKTsKKyAgICBIZWFwJiBoZWFwID0gUGVy
UHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChraW5kKTsKKyAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soSGVhcDo6bXV0ZXgoKSk7CisgICAgaGVhcC5kZWFs
bG9jYXRlTGFyZ2UobG9jaywgb2JqZWN0LCBBbGxvY2F0aW9uS2luZDo6VmlydHVhbCk7Cit9CisK
K3ZvaWQgc2NhdmVuZ2UoKQoreworICAgIHNjYXZlbmdlVGhpc1RocmVhZCgpOworCisgICAgUGVy
UHJvY2VzczxTY2F2ZW5nZXI+OjpnZXQoKS0+c2NhdmVuZ2UoKTsKK30KKworYm9vbCBpc0VuYWJs
ZWQoSGVhcEtpbmQga2luZCkKK3sKKyAgICBraW5kID0gbWFwVG9BY3RpdmVIZWFwS2luZChraW5k
KTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkp
OworICAgIHJldHVybiAhUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldEZhc3RDYXNl
KCktPmF0KGtpbmQpLmRlYnVnSGVhcCgpOworfQorCisjaWYgQk9TKERBUldJTikKK3ZvaWQgc2V0
U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MocW9zX2NsYXNzX3Qgb3ZlcnJpZGVDbGFzcykKK3sKKyAg
ICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOworICAg
IFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCktPnNldFNjYXZlbmdlclRocmVhZFFPU0NsYXNz
KG92ZXJyaWRlQ2xhc3MpOworfQorI2VuZGlmCisKIH0gfSAvLyBuYW1lc3BhY2UgYm1hbGxvYzo6
YXBpCiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCShyZXZpc2lvbiAyMjQ2NTcpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNiBAQAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJc29UTFMuaCIKICNpbmNs
dWRlICJQZXJIZWFwS2luZC5oIgotI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKICNpbmNsdWRlICJT
Y2F2ZW5nZXIuaCIKICNpbmNsdWRlICJTdGF0aWNNdXRleC5oIgogCkBAIC03MSwxMyArNzAsNyBA
QCBpbmxpbmUgdm9pZCogcmVhbGxvYyh2b2lkKiBvYmplY3QsIHNpemVfCiB9CiAKIC8vIFJldHVy
bnMgbnVsbCBmb3IgZmFpbHVyZQotaW5saW5lIHZvaWQqIHRyeUxhcmdlTWVtYWxpZ25WaXJ0dWFs
KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBIZWFwS2luZCBraW5kID0gSGVhcEtpbmQ6
OlByaW1hcnkpCi17Ci0gICAga2luZCA9IG1hcFRvQWN0aXZlSGVhcEtpbmQoa2luZCk7Ci0gICAg
SGVhcCYgaGVhcCA9IFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoa2lu
ZCk7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkp
OwotICAgIHJldHVybiBoZWFwLnRyeUFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXpl
LCBBbGxvY2F0aW9uS2luZDo6VmlydHVhbCk7Ci19CitCRVhQT1JUIHZvaWQqIHRyeUxhcmdlTWVt
YWxpZ25WaXJ0dWFsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBIZWFwS2luZCBraW5k
ID0gSGVhcEtpbmQ6OlByaW1hcnkpOwogCiBpbmxpbmUgdm9pZCBmcmVlKHZvaWQqIG9iamVjdCwg
SGVhcEtpbmQga2luZCA9IEhlYXBLaW5kOjpQcmltYXJ5KQogewpAQCAtODYsMTMgKzc5LDcgQEAg
aW5saW5lIHZvaWQgZnJlZSh2b2lkKiBvYmplY3QsIEhlYXBLaW5kIAogCiBCRVhQT1JUIHZvaWQg
ZnJlZU91dE9mTGluZSh2b2lkKiBvYmplY3QsIEhlYXBLaW5kIGtpbmQgPSBIZWFwS2luZDo6UHJp
bWFyeSk7CiAKLWlubGluZSB2b2lkIGZyZWVMYXJnZVZpcnR1YWwodm9pZCogb2JqZWN0LCBIZWFw
S2luZCBraW5kID0gSGVhcEtpbmQ6OlByaW1hcnkpCi17Ci0gICAga2luZCA9IG1hcFRvQWN0aXZl
SGVhcEtpbmQoa2luZCk7Ci0gICAgSGVhcCYgaGVhcCA9IFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8
SGVhcD4+OjpnZXQoKS0+YXQoa2luZCk7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgIGhlYXAuZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIG9i
amVjdCwgQWxsb2NhdGlvbktpbmQ6OlZpcnR1YWwpOwotfQorQkVYUE9SVCB2b2lkIGZyZWVMYXJn
ZVZpcnR1YWwodm9pZCogb2JqZWN0LCBIZWFwS2luZCBraW5kID0gSGVhcEtpbmQ6OlByaW1hcnkp
OwogCiBpbmxpbmUgdm9pZCBzY2F2ZW5nZVRoaXNUaHJlYWQoKQogewpAQCAtMTAxLDE5ICs4OCw5
IEBAIGlubGluZSB2b2lkIHNjYXZlbmdlVGhpc1RocmVhZCgpCiAgICAgSXNvVExTOjpzY2F2ZW5n
ZSgpOwogfQogCi1pbmxpbmUgdm9pZCBzY2F2ZW5nZSgpCi17Ci0gICAgc2NhdmVuZ2VUaGlzVGhy
ZWFkKCk7CitCRVhQT1JUIHZvaWQgc2NhdmVuZ2UoKTsKIAotICAgIFBlclByb2Nlc3M8U2NhdmVu
Z2VyPjo6Z2V0KCktPnNjYXZlbmdlKCk7Ci19Ci0KLWlubGluZSBib29sIGlzRW5hYmxlZChIZWFw
S2luZCBraW5kID0gSGVhcEtpbmQ6OlByaW1hcnkpCi17Ci0gICAga2luZCA9IG1hcFRvQWN0aXZl
SGVhcEtpbmQoa2luZCk7Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhI
ZWFwOjptdXRleCgpKTsKLSAgICByZXR1cm4gIVBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+
OjpnZXRGYXN0Q2FzZSgpLT5hdChraW5kKS5kZWJ1Z0hlYXAoKTsKLX0KK0JFWFBPUlQgYm9vbCBp
c0VuYWJsZWQoSGVhcEtpbmQga2luZCA9IEhlYXBLaW5kOjpQcmltYXJ5KTsKICAgICAKIGlubGlu
ZSBzaXplX3QgYXZhaWxhYmxlTWVtb3J5KCkKIHsKQEAgLTEzMywxMSArMTEwLDcgQEAgaW5saW5l
IGRvdWJsZSBwZXJjZW50QXZhaWxhYmxlTWVtb3J5SW5VcwogI2VuZGlmCiAKICNpZiBCT1MoREFS
V0lOKQotaW5saW5lIHZvaWQgc2V0U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MocW9zX2NsYXNzX3Qg
b3ZlcnJpZGVDbGFzcykKLXsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2Nr
KEhlYXA6Om11dGV4KCkpOwotICAgIFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCktPnNldFNj
YXZlbmdlclRocmVhZFFPU0NsYXNzKG92ZXJyaWRlQ2xhc3MpOwotfQorQkVYUE9SVCB2b2lkIHNl
dFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKHFvc19jbGFzc190IG92ZXJyaWRlQ2xhc3MpOwogI2Vu
ZGlmCiAKIH0gLy8gbmFtZXNwYWNlIGFwaQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327244</attachid>
            <date>2017-11-17 14:43:51 -0800</date>
            <delta_ts>2017-11-22 11:46:21 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22799</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNDk4OCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE3LTExLTE2ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgSXNvbGF0ZWQgSGVhcHMgY2F1c2Vk
IGFuIGluY3JlYXNlIGluIHJlcG9ydGVkIGxlYWtzIG9uIHRoZSBib3RzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk0NjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4ZXMgdGhl
IHdheSBpc29oZWFwcyBpbnRlcmFjdCB3aXRoIHN5c3RlbSB0b29sczoKKyAgICAgICAgCisgICAg
ICAgIC0gT3B0cyBpbnRvIHRoZSBWTUhlYXAgQVBJIHNvIHRoYXQgdGhlIGxlYWtzIHRvb2wgY2Fu
IGZpbmQgaXNvaGVhcCBtZW1vcnkuCisgICAgICAgIAorICAgICAgICAtIE9wdHMgaW50byB0aGUg
RGVidWdIZWFwL0Vudmlyb25tZW50IEFQSXMgc28gdGhhdCB3ZSB0dXJuIG9mZiBpc29oZWFwIGFs
bG9jYXRpb24gaWYgbWVtb3J5CisgICAgICAgICAgZGVidWdnaW5nIG9wdGlvbnMgYXJlIGluIHVz
ZS4KKworICAgICAgICAqIGJtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBibWFsbG9jL0RlYnVnSGVhcC5oOgorICAgICAgICAqIGJtYWxsb2MvSXNvSGVhcC5oOgor
ICAgICAgICAqIGJtYWxsb2MvSXNvUGFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoYm1hbGxvYzo6
SXNvUGFnZUJhc2U6OmFsbG9jYXRlUGFnZU1lbW9yeSk6CisgICAgICAgICogYm1hbGxvYy9Jc29Q
YWdlLmg6CisgICAgICAgICogYm1hbGxvYy9Jc29QYWdlSW5saW5lcy5oOgorICAgICAgICAoYm1h
bGxvYzo6SXNvUGFnZTxDb25maWc+Ojp0cnlDcmVhdGUpOgorICAgICAgICAqIGJtYWxsb2MvSXNv
VExTLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6Oklzb1RMUzo6ZGVhbGxvY2F0ZVNsb3cpOgorICAg
ICAgICAoYm1hbGxvYzo6SXNvVExTOjplbnN1cmVFbnRyaWVzKToKKyAgICAgICAgKGJtYWxsb2M6
Oklzb1RMUzo6aXNVc2luZ0RlYnVnSGVhcCk6CisgICAgICAgIChibWFsbG9jOjpJc29UTFM6OmRl
YnVnTWFsbG9jKToKKyAgICAgICAgKiBibWFsbG9jL0lzb1RMUy5oOgorICAgICAgICAqIGJtYWxs
b2MvSXNvVExTSW5saW5lcy5oOgorICAgICAgICAoYm1hbGxvYzo6SXNvVExTOjphbGxvY2F0ZSk6
CisgICAgICAgIChibWFsbG9jOjpJc29UTFM6OmRlYWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxv
Yzo6SXNvVExTOjphbGxvY2F0ZUltcGwpOgorICAgICAgICAoYm1hbGxvYzo6SXNvVExTOjphbGxv
Y2F0ZUZhc3QpOgorICAgICAgICAoYm1hbGxvYzo6SXNvVExTOjphbGxvY2F0ZVNsb3cpOgorICAg
ICAgICAoYm1hbGxvYzo6SXNvVExTOjpkZWFsbG9jYXRlSW1wbCk6CisgICAgICAgIChibWFsbG9j
OjpJc29UTFM6OmRlYWxsb2NhdGVGYXN0KToKKyAgICAgICAgKGJtYWxsb2M6Oklzb1RMUzo6ZW5z
dXJlSGVhcEFuZEVudHJpZXMpOgorICAgICAgICAoYm1hbGxvYzo6SXNvVExTOjphbGxvY2F0b3Ip
OiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SXNvVExTOjpkZWFsbG9jYXRvcik6IERlbGV0
ZWQuCisgICAgICAgICogYm1hbGxvYy9ibWFsbG9jLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OmFw
aTo6dHJ5TGFyZ2VNZW1hbGlnblZpcnR1YWwpOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjpmcmVl
TGFyZ2VWaXJ0dWFsKToKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6c2NhdmVuZ2UpOgorICAgICAg
ICAoYm1hbGxvYzo6YXBpOjppc0VuYWJsZWQpOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjpzZXRT
Y2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyk6CisgICAgICAgICogYm1hbGxvYy9ibWFsbG9jLmg6Cisg
ICAgICAgIChibWFsbG9jOjphcGk6OnRyeUxhcmdlTWVtYWxpZ25WaXJ0dWFsKTogRGVsZXRlZC4K
KyAgICAgICAgKGJtYWxsb2M6OmFwaTo6ZnJlZUxhcmdlVmlydHVhbCk6IERlbGV0ZWQuCisgICAg
ICAgIChibWFsbG9jOjphcGk6OnNjYXZlbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6
OmFwaTo6aXNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6c2V0U2Nh
dmVuZ2VyVGhyZWFkUU9TQ2xhc3MpOiBEZWxldGVkLgorCiAyMDE3LTExLTE0ICBTYWFtIEJhcmF0
aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgdGhlIGdpZ2FjYWdlIHJ1bndh
eSAzMkdCCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI0OTg4KQorKysgU291
cmNlL2JtYWxsb2MvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4LDcg
QEAgc2V0KGJtYWxsb2NfU09VUkNFUwogICAgIGJtYWxsb2MvSGVhcC5jcHAKICAgICBibWFsbG9j
L0hlYXBLaW5kLmNwcAogICAgIGJtYWxsb2MvSXNvSGVhcEltcGwuY3BwCisgICAgYm1hbGxvYy9J
c29QYWdlLmNwcAogICAgIGJtYWxsb2MvSXNvVExTLmNwcAogICAgIGJtYWxsb2MvSXNvVExTRW50
cnkuY3BwCiAgICAgYm1hbGxvYy9Jc29UTFNMYXlvdXQuY3BwCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjQ5
ODgpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBz
ZWN0aW9uICovCiAJCTBGM0RBMDE0MUYyNjdBQjgwMDM0MkMwOCAvKiBBbGxvY2F0aW9uS2luZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzREEwMTMx
RjI2N0FCODAwMzQyQzA4IC8qIEFsbG9jYXRpb25LaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1MTY3NzQxRkFENjg1QzAwODIzNkE4IC8q
IGJtYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY1MTY3NzMxRkFENjg1MjAwODIzNkE4IC8qIGJtYWxsb2MuY3BwICovOyB9OworCQkwRjU1
NDlFRjFGQjU0NzA0MDA3RkY3NUEgLyogSXNvUGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU1NDlFRTFGQjU0NzAxMDA3RkY3NUEgLyogSXNv
UGFnZS5jcHAgKi87IH07CiAJCTBGNUJGMTQ3MUYyMkE4QjEwMDI5RDkxRCAvKiBIZWFwS2luZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNDYx
RjIyQThCMTAwMjlEOTFEIC8qIEhlYXBLaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QkYxNDkxRjIyQThEODAwMjlEOTFEIC8qIFBlckhl
YXBLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjVCRjE0ODFGMjJBOEQ4MDAyOUQ5MUQgLyogUGVySGVhcEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVCRjE0RDFGMjJCMEMzMDAyOUQ5
MUQgLyogR2lnYWNhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNUJGMTRDMUYyMkIwQzMwMDI5RDkxRCAvKiBHaWdhY2FnZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNzMsNiArMTc0LDcgQEAK
IC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkwRjNEQTAxMzFGMjY3QUI4
MDAzNDJDMDggLyogQWxsb2NhdGlvbktpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWxsb2NhdGlvbktp
bmQuaDsgcGF0aCA9IGJtYWxsb2MvQWxsb2NhdGlvbktpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY1MTY3NzMxRkFENjg1MjAwODIzNkE4IC8qIGJtYWxsb2MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gYm1hbGxvYy5jcHA7IHBhdGggPSBibWFs
bG9jL2JtYWxsb2MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU1NDlFRTFG
QjU0NzAxMDA3RkY3NUEgLyogSXNvUGFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBJc29QYWdlLmNwcDsgcGF0aCA9IGJtYWxsb2MvSXNvUGFnZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUJGMTQ2MUYyMkE4QjEwMDI5RDkxRCAvKiBIZWFw
S2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBIZWFwS2luZC5oOyBwYXRoID0gYm1hbGxvYy9IZWFwS2lu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVCRjE0ODFGMjJBOEQ4MDAyOUQ5
MUQgLyogUGVySGVhcEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGVySGVhcEtpbmQuaDsgcGF0aCA9
IGJtYWxsb2MvUGVySGVhcEtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1
QkYxNEMxRjIyQjBDMzAwMjlEOTFEIC8qIEdpZ2FjYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEdpZ2Fj
YWdlLmg7IHBhdGggPSBibWFsbG9jL0dpZ2FjYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zNjAsNiArMzYyLDcgQEAKIAkJCQkwRjdFQjgxRTFGOTU0MUIwMDBGMUFCQ0IgLyog
SXNvSGVhcEltcGwuaCAqLywKIAkJCQkwRjdFQjdGRDFGOTU0MUFEMDBGMUFCQ0IgLyogSXNvSGVh
cEltcGxJbmxpbmVzLmggKi8sCiAJCQkJMEY3RUI4MDkxRjk1NDFBRDAwRjFBQkNCIC8qIElzb0hl
YXBJbmxpbmVzLmggKi8sCisJCQkJMEY1NTQ5RUUxRkI1NDcwMTAwN0ZGNzVBIC8qIElzb1BhZ2Uu
Y3BwICovLAogCQkJCTBGN0VCODA3MUY5NTQxQUQwMEYxQUJDQiAvKiBJc29QYWdlLmggKi8sCiAJ
CQkJMEY3RUI4MEExRjk1NDFBRTAwRjFBQkNCIC8qIElzb1BhZ2VJbmxpbmVzLmggKi8sCiAJCQkJ
MEY3RUI4MDQxRjk1NDFBRDAwRjFBQkNCIC8qIElzb1BhZ2VUcmlnZ2VyLmggKi8sCkBAIC03NTQs
NiArNzU3LDcgQEAKIAkJCQkwRjdFQjgzNjFGOTU0MUIwMDBGMUFCQ0IgLyogSXNvVExTLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDU1NzMzMUY3RURCN0IwMEIxRjBBMyAvKiBIZWFwS2luZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjdFQjgzQjFGOTU0MUIwMDBGMUFCQ0IgLyogSXNvSGVh
cEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY1NTQ5RUYxRkI1NDcwNDAwN0ZGNzVBIC8q
IElzb1BhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRGMjcxQzMxOEVBMzk3ODAwOEMxNTJG
IC8qIEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTk5QzVDQzFFQzNGMTU5MDBB
MkY3QkIgLyogQXZhaWxhYmxlTWVtb3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM0
MThFQTM5N0IwMDhDMTUyRiAvKiBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvRGVidWdIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9EZWJ1Z0hlYXAuaAkocmV2aXNpb24gMjI0OTg4KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9EZWJ1Z0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdm9pZCogbWVtYWxpZ25MYXJnZShzaXplX3QgYWxpZ25tZW50LCBz
aXplX3QsIEFsbG9jYXRpb25LaW5kKTsKICAgICB2b2lkIGZyZWVMYXJnZSh2b2lkKiBiYXNlLCBB
bGxvY2F0aW9uS2luZCk7Ci0KKyAgICAKIHByaXZhdGU6CiAjaWYgQk9TKERBUldJTikKICAgICBt
YWxsb2Nfem9uZV90KiBtX3pvbmU7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hl
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hlYXAuaAkocmV2
aXNpb24gMjI0OTg4KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29IZWFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgc3RydWN0IElzb0hlYXAgewogICAgIAogICAgIHVu
c2lnbmVkIGRlYWxsb2NhdG9yT2Zmc2V0KCkgeyByZXR1cm4gbV9kZWFsbG9jYXRvck9mZnNldFBs
dXNPbmUgLSAxOyB9CiAgICAgdm9pZCBzZXREZWFsbG9jYXRvck9mZnNldCh1bnNpZ25lZCB2YWx1
ZSkgeyBtX2RlYWxsb2NhdG9yT2Zmc2V0UGx1c09uZSA9IHZhbHVlICsgMTsgfQotICAgIAorCiAg
ICAgSXNvSGVhcEltcGw8Q29uZmlnPiYgaW1wbCgpOwogICAgIAogICAgIFN0YXRpY011dGV4IG1f
aW5pdGlhbGl6YXRpb25Mb2NrOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29QYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1BhZ2UuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvUGFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiSXNvUGFnZS5oIgorCisjaW5jbHVkZSAiUGVyUHJv
Y2Vzcy5oIgorI2luY2x1ZGUgIlZNSGVhcC5oIgorCituYW1lc3BhY2UgYm1hbGxvYyB7CisKK3Zv
aWQqIElzb1BhZ2VCYXNlOjphbGxvY2F0ZVBhZ2VNZW1vcnkoKQoreworICAgIHJldHVybiBQZXJQ
cm9jZXNzPFZNSGVhcD46OmdldCgpLT50cnlBbGxvY2F0ZUxhcmdlQ2h1bmsocGFnZVNpemUsIHBh
Z2VTaXplLCBBbGxvY2F0aW9uS2luZDo6UGh5c2ljYWwpLmJlZ2luKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvUGFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvUGFnZS5oCShyZXZpc2lvbiAy
MjQ5ODgpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1BhZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNiArMzgsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+IGNsYXNzIElzb0hl
YXBJCiBjbGFzcyBJc29QYWdlQmFzZSB7CiBwdWJsaWM6ICAgIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IHBhZ2VTaXplID0gMTYzODQ7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgQkVYUE9S
VCBzdGF0aWMgdm9pZCogYWxsb2NhdGVQYWdlTWVtb3J5KCk7CiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb25maWc+CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1BhZ2VJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29QYWdlSW5saW5lcy5o
CShyZXZpc2lvbiAyMjQ5ODgpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1BhZ2VJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIGJtYWxsb2Mg
ewogdGVtcGxhdGU8dHlwZW5hbWUgQ29uZmlnPgogSXNvUGFnZTxDb25maWc+KiBJc29QYWdlPENv
bmZpZz46OnRyeUNyZWF0ZShJc29EaXJlY3RvcnlCYXNlPENvbmZpZz4mIGRpcmVjdG9yeSwgdW5z
aWduZWQgaW5kZXgpCiB7Ci0gICAgdm9pZCogbWVtb3J5ID0gdHJ5Vk1BbGxvY2F0ZShwYWdlU2l6
ZSwgcGFnZVNpemUpOworICAgIHZvaWQqIG1lbW9yeSA9IGFsbG9jYXRlUGFnZU1lbW9yeSgpOwog
ICAgIGlmICghbWVtb3J5KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0lzb1RMUy5jcHAJKHJldmlzaW9uIDIyNDk4OCkKKysrIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvSXNvVExTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsOCBAQAog
CiAjaW5jbHVkZSAiSXNvVExTLmgiCiAKKyNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKKyNpbmNsdWRl
ICJFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIklzb1RMU0VudHJ5SW5saW5lcy5oIgogI2luY2x1
ZGUgIklzb1RMU0lubGluZXMuaCIKICNpbmNsdWRlICJJc29UTFNMYXlvdXQuaCIKQEAgLTUwLDYg
KzUyLDE1IEBAIElzb1RMUzo6SXNvVExTKCkKIHsKIH0KIAordm9pZCBJc29UTFM6OmRlYWxsb2Nh
dGVTbG93KHZvaWQqIHApCit7CisgICAgLy8gSWYgd2UgZ28gZG93biB0aGlzIHBhdGggYW5kIHdl
IGFyZW4ndCBpbiBkZWJ1ZyBoZWFwIG1vZGUsIHRoZW4gdGhpcyBtZWFucyB3ZSBoYXZlIHNvbWUg
Y29ycnVwdGlvbi4KKyAgICAvLyBUaGluayBvZiB0aGlzIGFzIHJlYWxseSBiZWluZyBhbiBhc3Nl
cnRpb24gYWJvdXQgb2Zmc2V0IDwgdGxzLT5tX2V4dGVudC4KKyAgICBSRUxFQVNFX0JBU1NFUlQo
UGVyUHJvY2VzczxFbnZpcm9ubWVudD46OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJsZWQoKSk7Cisg
ICAgCisgICAgUGVyUHJvY2VzczxEZWJ1Z0hlYXA+OjpnZXQoKS0+ZnJlZShwKTsKK30KKwogSXNv
VExTKiBJc29UTFM6OmVuc3VyZUVudHJpZXModW5zaWduZWQgb2Zmc2V0KQogewogICAgIFJFTEVB
U0VfQkFTU0VSVCghZ2V0KCkgfHwgb2Zmc2V0ID49IGdldCgpLT5tX2V4dGVudCk7CkBAIC03Niwx
NiArODcsMTkgQEAgSXNvVExTKiBJc29UTFM6OmVuc3VyZUVudHJpZXModW5zaWduZWQgbwogICAg
IElzb1RMU0VudHJ5KiBzdGFydEVudHJ5ID0gb2xkTGFzdEVudHJ5ID8gb2xkTGFzdEVudHJ5IDog
bGF5b3V0LmhlYWQoKTsKICAgICAKICAgICBJc29UTFNFbnRyeSogdGFyZ2V0RW50cnkgPSBzdGFy
dEVudHJ5OwotICAgIGZvciAoOzspIHsKKyAgICBzaXplX3QgcmVxdWlyZWRDYXBhY2l0eSA9IDA7
CisgICAgaWYgKHN0YXJ0RW50cnkpIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAg
UkVMRUFTRV9CQVNTRVJUKHRhcmdldEVudHJ5KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQkFTU0VS
VCh0YXJnZXRFbnRyeS0+b2Zmc2V0KCkgPD0gb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICh0YXJn
ZXRFbnRyeS0+b2Zmc2V0KCkgPT0gb2Zmc2V0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgdGFyZ2V0RW50cnkgPSB0YXJnZXRFbnRyeS0+bV9uZXh0OworICAgICAgICB9CiAg
ICAgICAgIFJFTEVBU0VfQkFTU0VSVCh0YXJnZXRFbnRyeSk7Ci0gICAgICAgIFJFTEVBU0VfQkFT
U0VSVCh0YXJnZXRFbnRyeS0+b2Zmc2V0KCkgPD0gb2Zmc2V0KTsKLSAgICAgICAgaWYgKHRhcmdl
dEVudHJ5LT5vZmZzZXQoKSA9PSBvZmZzZXQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
dGFyZ2V0RW50cnkgPSB0YXJnZXRFbnRyeS0+bV9uZXh0OworICAgICAgICByZXF1aXJlZENhcGFj
aXR5ID0gdGFyZ2V0RW50cnktPmV4dGVudCgpOwogICAgIH0KLSAgICBSRUxFQVNFX0JBU1NFUlQo
dGFyZ2V0RW50cnkpOwotCi0gICAgc2l6ZV90IHJlcXVpcmVkQ2FwYWNpdHkgPSB0YXJnZXRFbnRy
eS0+ZXh0ZW50KCk7CisgICAgCiAgICAgaWYgKCF0bHMgfHwgcmVxdWlyZWRDYXBhY2l0eSA+IHRs
cy0+bV9jYXBhY2l0eSkgewogICAgICAgICBzaXplX3QgcmVxdWlyZWRTaXplID0gc2l6ZUZvckNh
cGFjaXR5KHJlcXVpcmVkQ2FwYWNpdHkpOwogICAgICAgICBzaXplX3QgZ29vZFNpemUgPSByb3Vu
ZFVwVG9NdWx0aXBsZU9mKHZtUGFnZVNpemUoKSwgcmVxdWlyZWRTaXplKTsKQEAgLTExMCwxNCAr
MTI0LDE2IEBAIElzb1RMUyogSXNvVExTOjplbnN1cmVFbnRyaWVzKHVuc2lnbmVkIG8KICAgICAg
ICAgc2V0KHRscyk7CiAgICAgfQogICAgIAotICAgIHN0YXJ0RW50cnktPndhbGtVcFRvSW5jbHVz
aXZlKAotICAgICAgICB0YXJnZXRFbnRyeSwKLSAgICAgICAgWyZdIChJc29UTFNFbnRyeSogZW50
cnkpIHsKLSAgICAgICAgICAgIGVudHJ5LT5jb25zdHJ1Y3QodGxzLT5tX2RhdGEgKyBlbnRyeS0+
b2Zmc2V0KCkpOwotICAgICAgICB9KTsKLSAgICAKLSAgICB0bHMtPm1fbGFzdEVudHJ5ID0gdGFy
Z2V0RW50cnk7Ci0gICAgdGxzLT5tX2V4dGVudCA9IHRhcmdldEVudHJ5LT5leHRlbnQoKTsKKyAg
ICBpZiAoc3RhcnRFbnRyeSkgeworICAgICAgICBzdGFydEVudHJ5LT53YWxrVXBUb0luY2x1c2l2
ZSgKKyAgICAgICAgICAgIHRhcmdldEVudHJ5LAorICAgICAgICAgICAgWyZdIChJc29UTFNFbnRy
eSogZW50cnkpIHsKKyAgICAgICAgICAgICAgICBlbnRyeS0+Y29uc3RydWN0KHRscy0+bV9kYXRh
ICsgZW50cnktPm9mZnNldCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
dGxzLT5tX2xhc3RFbnRyeSA9IHRhcmdldEVudHJ5OworICAgICAgICB0bHMtPm1fZXh0ZW50ID0g
dGFyZ2V0RW50cnktPmV4dGVudCgpOworICAgIH0KICAgICAKICAgICByZXR1cm4gdGxzOwogfQpA
QCAtMTU5LDUgKzE3NSwxOCBAQCB2b2lkIElzb1RMUzo6Zm9yRWFjaEVudHJ5KGNvbnN0IEZ1bmMm
IGZ1CiAgICAgICAgIH0pOwogfQogCitib29sIElzb1RMUzo6aXNVc2luZ0RlYnVnSGVhcCgpCit7
CisgICAgcmV0dXJuIFBlclByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBF
bmFibGVkKCk7Cit9CisKK2F1dG8gSXNvVExTOjpkZWJ1Z01hbGxvYyhzaXplX3Qgc2l6ZSkgLT4g
RGVidWdNYWxsb2NSZXN1bHQKK3sKKyAgICBEZWJ1Z01hbGxvY1Jlc3VsdCByZXN1bHQ7CisgICAg
aWYgKChyZXN1bHQudXNpbmdEZWJ1Z0hlYXAgPSBpc1VzaW5nRGVidWdIZWFwKCkpKQorICAgICAg
ICByZXN1bHQucHRyID0gUGVyUHJvY2VzczxEZWJ1Z0hlYXA+OjpnZXQoKS0+bWFsbG9jKHNpemUp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKIApJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0lzb1RMUy5oCShyZXZpc2lvbiAyMjQ5ODgpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0lzb1RMUy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMCArNTgsMjEgQEAg
cHJpdmF0ZToKICAgICBJc29UTFMoKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25m
aWcsIHR5cGVuYW1lIFR5cGU+Ci0gICAgc3RhdGljIElzb0FsbG9jYXRvcjxDb25maWc+JiBhbGxv
Y2F0b3IoYXBpOjpJc29IZWFwPFR5cGU+Jik7CisgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlSW1w
bChhcGk6Oklzb0hlYXA8VHlwZT4mLCBib29sIGFib3J0T25GYWlsdXJlKTsKKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+CisgICAgdm9pZCogYWxsb2NhdGVGYXN0KHVuc2lnbmVk
IG9mZnNldCwgYm9vbCBhYm9ydE9uRmFpbHVyZSk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29uZmlnLCB0eXBlbmFtZSBUeXBlPgorICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZVNsb3co
YXBpOjpJc29IZWFwPFR5cGU+JiwgYm9vbCBhYm9ydE9uRmFpbHVyZSk7CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ29uZmlnLCB0eXBlbmFtZSBUeXBlPgotICAgIHN0YXRpYyBJc29EZWFs
bG9jYXRvcjxDb25maWc+JiBkZWFsbG9jYXRvcihhcGk6Oklzb0hlYXA8VHlwZT4mKTsKKyAgICBz
dGF0aWMgdm9pZCBkZWFsbG9jYXRlSW1wbChhcGk6Oklzb0hlYXA8VHlwZT4mLCB2b2lkKiBwKTsK
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+CisgICAgdm9pZCBkZWFsbG9jYXRl
RmFzdCh1bnNpZ25lZCBvZmZzZXQsIHZvaWQqIHApOworICAgIAorICAgIEJFWFBPUlQgc3RhdGlj
IHZvaWQgZGVhbGxvY2F0ZVNsb3codm9pZCogcCk7CiAgICAgCiAgICAgc3RhdGljIElzb1RMUyog
Z2V0KCk7CiAgICAgc3RhdGljIHZvaWQgc2V0KElzb1RMUyopOwpAQCAtODEsMTEgKzkyLDIwIEBA
IHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hF
bnRyeShjb25zdCBGdW5jJik7CiAgICAgCisgICAgQkVYUE9SVCBzdGF0aWMgYm9vbCBpc1VzaW5n
RGVidWdIZWFwKCk7CisgICAgCisgICAgc3RydWN0IERlYnVnTWFsbG9jUmVzdWx0IHsKKyAgICAg
ICAgdm9pZCogcHRyIHsgbnVsbHB0ciB9OworICAgICAgICBib29sIHVzaW5nRGVidWdIZWFwIHsg
ZmFsc2UgfTsKKyAgICB9OworICAgIAorICAgIEJFWFBPUlQgc3RhdGljIERlYnVnTWFsbG9jUmVz
dWx0IGRlYnVnTWFsbG9jKHNpemVfdCk7CisgICAgCiAgICAgSXNvVExTRW50cnkqIG1fbGFzdEVu
dHJ5IHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fZXh0ZW50IHsgMCB9OwogICAgIHVuc2ln
bmVkIG1fY2FwYWNpdHkgeyAwIH07CiAgICAgY2hhciBtX2RhdGFbMV07Ci0KKyAgICAKICNpZiBI
QVZFX1BUSFJFQURfTUFDSERFUF9ICiAgICAgc3RhdGljIGNvbnN0IHB0aHJlYWRfa2V5X3QgdGxz
S2V5ID0gX19QVEtfRlJBTUVXT1JLX0pBVkFTQ1JJUFRDT1JFX0tFWTE7CiAjZWxzZQpJbmRleDog
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFNJbmxpbmVzLmgJKHJldmlzaW9uIDIyNDk4OCkKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFR5
cGU+CiB2b2lkKiBJc29UTFM6OmFsbG9jYXRlKGFwaTo6SXNvSGVhcDxUeXBlPiYgaGFuZGxlLCBi
b29sIGFib3J0T25GYWlsdXJlKQogewotICAgIHJldHVybiBhbGxvY2F0b3I8dHlwZW5hbWUgYXBp
OjpJc29IZWFwPFR5cGU+OjpDb25maWc+KGhhbmRsZSkuYWxsb2NhdGUoYWJvcnRPbkZhaWx1cmUp
OworICAgIHJldHVybiBhbGxvY2F0ZUltcGw8dHlwZW5hbWUgYXBpOjpJc29IZWFwPFR5cGU+OjpD
b25maWc+KGhhbmRsZSwgYWJvcnRPbkZhaWx1cmUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPgpAQCAtNDEsNyArNDEsNyBAQCB2b2lkIElzb1RMUzo6ZGVhbGxvY2F0ZShhcGk6Oklzb0hl
YXA8VHlwCiB7CiAgICAgaWYgKCFwKQogICAgICAgICByZXR1cm47Ci0gICAgZGVhbGxvY2F0b3I8
dHlwZW5hbWUgYXBpOjpJc29IZWFwPFR5cGU+OjpDb25maWc+KGhhbmRsZSkuZGVhbGxvY2F0ZShw
KTsKKyAgICBkZWFsbG9jYXRlSW1wbDx0eXBlbmFtZSBhcGk6Oklzb0hlYXA8VHlwZT46OkNvbmZp
Zz4oaGFuZGxlLCBwKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KQEAgLTYyLDI0ICs2
Miw1MSBAQCB2b2lkIElzb1RMUzo6c2NhdmVuZ2UoYXBpOjpJc29IZWFwPFR5cGU+CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbmZpZywgdHlwZW5hbWUgVHlwZT4KLUlzb0FsbG9jYXRvcjxDb25m
aWc+JiBJc29UTFM6OmFsbG9jYXRvcihhcGk6Oklzb0hlYXA8VHlwZT4mIGhhbmRsZSkKK3ZvaWQq
IElzb1RMUzo6YWxsb2NhdGVJbXBsKGFwaTo6SXNvSGVhcDxUeXBlPiYgaGFuZGxlLCBib29sIGFi
b3J0T25GYWlsdXJlKQogewogICAgIHVuc2lnbmVkIG9mZnNldCA9IGhhbmRsZS5hbGxvY2F0b3JP
ZmZzZXQoKTsKICAgICBJc29UTFMqIHRscyA9IGdldCgpOwotICAgIGlmICghdGxzIHx8IG9mZnNl
dCA+PSB0bHMtPm1fZXh0ZW50KSB7Ci0gICAgICAgIHRscyA9IGVuc3VyZUhlYXBBbmRFbnRyaWVz
KGhhbmRsZSk7Ci0gICAgICAgIG9mZnNldCA9IGhhbmRsZS5hbGxvY2F0b3JPZmZzZXQoKTsKLSAg
ICB9Ci0gICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PElzb0FsbG9jYXRvcjxDb25maWc+Kj4o
dGxzLT5tX2RhdGEgKyBvZmZzZXQpOworICAgIGlmICghdGxzIHx8IG9mZnNldCA+PSB0bHMtPm1f
ZXh0ZW50KQorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93PHR5cGVuYW1lIGFwaTo6SXNvSGVh
cDxUeXBlPjo6Q29uZmlnPihoYW5kbGUsIGFib3J0T25GYWlsdXJlKTsKKyAgICByZXR1cm4gdGxz
LT5hbGxvY2F0ZUZhc3Q8Q29uZmlnPihvZmZzZXQsIGFib3J0T25GYWlsdXJlKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQ29uZmlnPgordm9pZCogSXNvVExTOjphbGxvY2F0ZUZhc3QodW5zaWdu
ZWQgb2Zmc2V0LCBib29sIGFib3J0T25GYWlsdXJlKQoreworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PElzb0FsbG9jYXRvcjxDb25maWc+Kj4obV9kYXRhICsgb2Zmc2V0KS0+YWxsb2NhdGUo
YWJvcnRPbkZhaWx1cmUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcsIHR5cGVuYW1l
IFR5cGU+Ci1Jc29EZWFsbG9jYXRvcjxDb25maWc+JiBJc29UTFM6OmRlYWxsb2NhdG9yKGFwaTo6
SXNvSGVhcDxUeXBlPiYgaGFuZGxlKQorQk5PX0lOTElORSB2b2lkKiBJc29UTFM6OmFsbG9jYXRl
U2xvdyhhcGk6Oklzb0hlYXA8VHlwZT4mIGhhbmRsZSwgYm9vbCBhYm9ydE9uRmFpbHVyZSkKK3sK
KyAgICBJc29UTFMqIHRscyA9IGVuc3VyZUhlYXBBbmRFbnRyaWVzKGhhbmRsZSk7CisgICAgCisg
ICAgYXV0byBkZWJ1Z01hbGxvY1Jlc3VsdCA9IGRlYnVnTWFsbG9jKENvbmZpZzo6b2JqZWN0U2l6
ZSk7CisgICAgaWYgKGRlYnVnTWFsbG9jUmVzdWx0LnVzaW5nRGVidWdIZWFwKQorICAgICAgICBy
ZXR1cm4gZGVidWdNYWxsb2NSZXN1bHQucHRyOworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldCA9
IGhhbmRsZS5hbGxvY2F0b3JPZmZzZXQoKTsKKyAgICByZXR1cm4gdGxzLT5hbGxvY2F0ZUZhc3Q8
Q29uZmlnPihvZmZzZXQsIGFib3J0T25GYWlsdXJlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29uZmlnLCB0eXBlbmFtZSBUeXBlPgordm9pZCBJc29UTFM6OmRlYWxsb2NhdGVJbXBsKGFwaTo6
SXNvSGVhcDxUeXBlPiYgaGFuZGxlLCB2b2lkKiBwKQogewogICAgIHVuc2lnbmVkIG9mZnNldCA9
IGhhbmRsZS5kZWFsbG9jYXRvck9mZnNldCgpOwogICAgIElzb1RMUyogdGxzID0gZ2V0KCk7Ci0g
ICAgUkVMRUFTRV9CQVNTRVJUKG9mZnNldCA8IHRscy0+bV9leHRlbnQpOwotICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxJc29EZWFsbG9jYXRvcjxDb25maWc+Kj4odGxzLT5tX2RhdGEgKyBv
ZmZzZXQpOworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGJvdW5kcyBjaGVjayB3b3VsZCBiZSBoZXJl
IGV2ZW4gaWYgd2UgZGlkbid0IGhhdmUgdG8gc3VwcG9ydCBEZWJ1Z0hlYXAsCisgICAgLy8gc2lu
Y2Ugd2UgZG9uJ3Qgd2FudCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yIG9mIG9mZnNldCBvciBtX2V4
dGVudCBldmVyIGdvdCBjb3JydXB0ZWQuCisgICAgaWYgKG9mZnNldCA+PSB0bHMtPm1fZXh0ZW50
KQorICAgICAgICBkZWFsbG9jYXRlU2xvdyhwKTsKKyAgICBlbHNlCisgICAgICAgIHRscy0+ZGVh
bGxvY2F0ZUZhc3Q8Q29uZmlnPihvZmZzZXQsIHApOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b25maWc+Cit2b2lkIElzb1RMUzo6ZGVhbGxvY2F0ZUZhc3QodW5zaWduZWQgb2Zmc2V0LCB2b2lk
KiBwKQoreworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SXNvRGVhbGxvY2F0b3I8Q29uZmlnPio+KG1f
ZGF0YSArIG9mZnNldCktPmRlYWxsb2NhdGUocCk7CiB9CiAKIGlubGluZSBJc29UTFMqIElzb1RM
Uzo6Z2V0KCkKQEAgLTEyNCw4ICsxNTEsMTYgQEAgQk5PX0lOTElORSBJc29UTFMqIElzb1RMUzo6
ZW5zdXJlSGVhcEFuZAogICAgICAgICAhZ2V0KCkKICAgICAgICAgfHwgaGFuZGxlLmFsbG9jYXRv
ck9mZnNldCgpID49IGdldCgpLT5tX2V4dGVudAogICAgICAgICB8fCBoYW5kbGUuZGVhbGxvY2F0
b3JPZmZzZXQoKSA+PSBnZXQoKS0+bV9leHRlbnQpOwotICAgIGVuc3VyZUhlYXAoaGFuZGxlKTsK
LSAgICByZXR1cm4gZW5zdXJlRW50cmllcyhzdGQ6Om1heChoYW5kbGUuYWxsb2NhdG9yT2Zmc2V0
KCksIGhhbmRsZS5kZWFsbG9jYXRvck9mZnNldCgpKSk7CisgICAgdW5zaWduZWQgb2Zmc2V0Owor
ICAgIGlmIChpc1VzaW5nRGVidWdIZWFwKCkpIHsKKyAgICAgICAgaWYgKElzb1RMUyogcmVzdWx0
ID0gZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBvZmZzZXQgPSAw
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVuc3VyZUhlYXAoaGFuZGxlKTsKKyAgICAgICAgb2Zm
c2V0ID0gc3RkOjptYXgoaGFuZGxlLmFsbG9jYXRvck9mZnNldCgpLCBoYW5kbGUuZGVhbGxvY2F0
b3JPZmZzZXQoKSk7CisgICAgfQorICAgIHJldHVybiBlbnN1cmVFbnRyaWVzKG9mZnNldCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
Ym1hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9j
LmNwcAkocmV2aXNpb24gMjI0OTg4KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9j
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsOCBAQAogCiAjaW5jbHVkZSAiYm1hbGxv
Yy5oIgogCisjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgorCiBuYW1lc3BhY2UgYm1hbGxvYyB7IG5h
bWVzcGFjZSBhcGkgewogCiB2b2lkKiBtYWxsb2NPdXRPZkxpbmUoc2l6ZV90IHNpemUsIEhlYXBL
aW5kIGtpbmQpCkBAIC0zNyw1ICszOSw0MyBAQCB2b2lkIGZyZWVPdXRPZkxpbmUodm9pZCogb2Jq
ZWN0LCBIZWFwS2luCiAgICAgZnJlZShvYmplY3QsIGtpbmQpOwogfQogCit2b2lkKiB0cnlMYXJn
ZU1lbWFsaWduVmlydHVhbChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgSGVhcEtpbmQg
a2luZCkKK3sKKyAgICBraW5kID0gbWFwVG9BY3RpdmVIZWFwS2luZChraW5kKTsKKyAgICBIZWFw
JiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChraW5kKTsK
KyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soSGVhcDo6bXV0ZXgoKSk7Cisg
ICAgcmV0dXJuIGhlYXAudHJ5QWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUsIEFs
bG9jYXRpb25LaW5kOjpWaXJ0dWFsKTsKK30KKwordm9pZCBmcmVlTGFyZ2VWaXJ0dWFsKHZvaWQq
IG9iamVjdCwgSGVhcEtpbmQga2luZCkKK3sKKyAgICBraW5kID0gbWFwVG9BY3RpdmVIZWFwS2lu
ZChraW5kKTsKKyAgICBIZWFwJiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46
OmdldCgpLT5hdChraW5kKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2so
SGVhcDo6bXV0ZXgoKSk7CisgICAgaGVhcC5kZWFsbG9jYXRlTGFyZ2UobG9jaywgb2JqZWN0LCBB
bGxvY2F0aW9uS2luZDo6VmlydHVhbCk7Cit9CisKK3ZvaWQgc2NhdmVuZ2UoKQoreworICAgIHNj
YXZlbmdlVGhpc1RocmVhZCgpOworCisgICAgUGVyUHJvY2VzczxTY2F2ZW5nZXI+OjpnZXQoKS0+
c2NhdmVuZ2UoKTsKK30KKworYm9vbCBpc0VuYWJsZWQoSGVhcEtpbmQga2luZCkKK3sKKyAgICBr
aW5kID0gbWFwVG9BY3RpdmVIZWFwS2luZChraW5kKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0
YXRpY011dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOworICAgIHJldHVybiAhUGVyUHJvY2VzczxQ
ZXJIZWFwS2luZDxIZWFwPj46OmdldEZhc3RDYXNlKCktPmF0KGtpbmQpLmRlYnVnSGVhcCgpOwor
fQorCisjaWYgQk9TKERBUldJTikKK3ZvaWQgc2V0U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MocW9z
X2NsYXNzX3Qgb3ZlcnJpZGVDbGFzcykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011
dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOworICAgIFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0
KCktPnNldFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKG92ZXJyaWRlQ2xhc3MpOworfQorI2VuZGlm
CisKIH0gfSAvLyBuYW1lc3BhY2UgYm1hbGxvYzo6YXBpCiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvYm1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
Ym1hbGxvYy5oCShyZXZpc2lvbiAyMjQ5ODgpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2Jt
YWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkhlYXAu
aCIKICNpbmNsdWRlICJJc29UTFMuaCIKICNpbmNsdWRlICJQZXJIZWFwS2luZC5oIgotI2luY2x1
ZGUgIlBlclByb2Nlc3MuaCIKICNpbmNsdWRlICJTY2F2ZW5nZXIuaCIKICNpbmNsdWRlICJTdGF0
aWNNdXRleC5oIgogCkBAIC03MSwxMyArNzAsNyBAQCBpbmxpbmUgdm9pZCogcmVhbGxvYyh2b2lk
KiBvYmplY3QsIHNpemVfCiB9CiAKIC8vIFJldHVybnMgbnVsbCBmb3IgZmFpbHVyZQotaW5saW5l
IHZvaWQqIHRyeUxhcmdlTWVtYWxpZ25WaXJ0dWFsKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplLCBIZWFwS2luZCBraW5kID0gSGVhcEtpbmQ6OlByaW1hcnkpCi17Ci0gICAga2luZCA9IG1h
cFRvQWN0aXZlSGVhcEtpbmQoa2luZCk7Ci0gICAgSGVhcCYgaGVhcCA9IFBlclByb2Nlc3M8UGVy
SGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoa2luZCk7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgIHJldHVybiBoZWFwLnRyeUFsbG9j
YXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplLCBBbGxvY2F0aW9uS2luZDo6VmlydHVhbCk7
Ci19CitCRVhQT1JUIHZvaWQqIHRyeUxhcmdlTWVtYWxpZ25WaXJ0dWFsKHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCBzaXplLCBIZWFwS2luZCBraW5kID0gSGVhcEtpbmQ6OlByaW1hcnkpOwogCiBp
bmxpbmUgdm9pZCBmcmVlKHZvaWQqIG9iamVjdCwgSGVhcEtpbmQga2luZCA9IEhlYXBLaW5kOjpQ
cmltYXJ5KQogewpAQCAtODYsMTMgKzc5LDcgQEAgaW5saW5lIHZvaWQgZnJlZSh2b2lkKiBvYmpl
Y3QsIEhlYXBLaW5kIAogCiBCRVhQT1JUIHZvaWQgZnJlZU91dE9mTGluZSh2b2lkKiBvYmplY3Qs
IEhlYXBLaW5kIGtpbmQgPSBIZWFwS2luZDo6UHJpbWFyeSk7CiAKLWlubGluZSB2b2lkIGZyZWVM
YXJnZVZpcnR1YWwodm9pZCogb2JqZWN0LCBIZWFwS2luZCBraW5kID0gSGVhcEtpbmQ6OlByaW1h
cnkpCi17Ci0gICAga2luZCA9IG1hcFRvQWN0aXZlSGVhcEtpbmQoa2luZCk7Ci0gICAgSGVhcCYg
aGVhcCA9IFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoa2luZCk7Ci0g
ICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAg
IGhlYXAuZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIG9iamVjdCwgQWxsb2NhdGlvbktpbmQ6OlZpcnR1
YWwpOwotfQorQkVYUE9SVCB2b2lkIGZyZWVMYXJnZVZpcnR1YWwodm9pZCogb2JqZWN0LCBIZWFw
S2luZCBraW5kID0gSGVhcEtpbmQ6OlByaW1hcnkpOwogCiBpbmxpbmUgdm9pZCBzY2F2ZW5nZVRo
aXNUaHJlYWQoKQogewpAQCAtMTAxLDE5ICs4OCw5IEBAIGlubGluZSB2b2lkIHNjYXZlbmdlVGhp
c1RocmVhZCgpCiAgICAgSXNvVExTOjpzY2F2ZW5nZSgpOwogfQogCi1pbmxpbmUgdm9pZCBzY2F2
ZW5nZSgpCi17Ci0gICAgc2NhdmVuZ2VUaGlzVGhyZWFkKCk7CitCRVhQT1JUIHZvaWQgc2NhdmVu
Z2UoKTsKIAotICAgIFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCktPnNjYXZlbmdlKCk7Ci19
Ci0KLWlubGluZSBib29sIGlzRW5hYmxlZChIZWFwS2luZCBraW5kID0gSGVhcEtpbmQ6OlByaW1h
cnkpCi17Ci0gICAga2luZCA9IG1hcFRvQWN0aXZlSGVhcEtpbmQoa2luZCk7Ci0gICAgc3RkOjp1
bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICByZXR1cm4g
IVBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXRGYXN0Q2FzZSgpLT5hdChraW5kKS5k
ZWJ1Z0hlYXAoKTsKLX0KK0JFWFBPUlQgYm9vbCBpc0VuYWJsZWQoSGVhcEtpbmQga2luZCA9IEhl
YXBLaW5kOjpQcmltYXJ5KTsKICAgICAKIGlubGluZSBzaXplX3QgYXZhaWxhYmxlTWVtb3J5KCkK
IHsKQEAgLTEzMywxMSArMTEwLDcgQEAgaW5saW5lIGRvdWJsZSBwZXJjZW50QXZhaWxhYmxlTWVt
b3J5SW5VcwogI2VuZGlmCiAKICNpZiBCT1MoREFSV0lOKQotaW5saW5lIHZvaWQgc2V0U2NhdmVu
Z2VyVGhyZWFkUU9TQ2xhc3MocW9zX2NsYXNzX3Qgb3ZlcnJpZGVDbGFzcykKLXsKLSAgICBzdGQ6
OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgIFBlclBy
b2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCktPnNldFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKG92ZXJy
aWRlQ2xhc3MpOwotfQorQkVYUE9SVCB2b2lkIHNldFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKHFv
c19jbGFzc190IG92ZXJyaWRlQ2xhc3MpOwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIGFwaQo=
</data>
<flag name="review"
          id="346483"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>