<?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>147545</bug_id>
          
          <creation_ts>2015-08-02 14:04:52 -0700</creation_ts>
          <short_desc>Lightweight locks should be adaptive</short_desc>
          <delta_ts>2015-08-07 15:40:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>147675</dependson>
    
    <dependson>147776</dependson>
          <blocked>147665</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>andersca</cc>
    
    <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1114112</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-02 14:04:52 -0700</bug_when>
    <thetext>Current WebKit uses a lot of spinlocks because they are cheap - they occupy little memory and they are inexpensive to acquire.  But they don&apos;t adapt to contention - instead they just spin.  We should make them adaptive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114114</commentid>
    <comment_count>1</comment_count>
      <attachid>258040</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-02 14:14:27 -0700</bug_when>
    <thetext>Created attachment 258040
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114681</commentid>
    <comment_count>2</comment_count>
      <attachid>258193</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 11:55:23 -0700</bug_when>
    <thetext>Created attachment 258193
work in progress

Replacing all SpinLock uses with Lock.  Added a benchmark, and documentation showing the performance results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114702</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-08-04 12:12:15 -0700</bug_when>
    <thetext>Interesting. Can we come up with a better name than &quot;Lock&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114710</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 12:27:43 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Interesting. Can we come up with a better name than &quot;Lock&quot;?

I was torn about this, and am open to suggestions.

Ggaren suggested &quot;Lock&quot; because a simple name will encourage people to use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114714</commentid>
    <comment_count>5</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-08-04 12:41:50 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Interesting. Can we come up with a better name than &quot;Lock&quot;?
&gt; 
&gt; I was torn about this, and am open to suggestions.
&gt; 
&gt; Ggaren suggested &quot;Lock&quot; because a simple name will encourage people to use
&gt; it.

So this lock will spin for a while and then fall back to a sleeping &quot;system&quot; lock?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114715</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 12:47:02 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; Interesting. Can we come up with a better name than &quot;Lock&quot;?
&gt; &gt; 
&gt; &gt; I was torn about this, and am open to suggestions.
&gt; &gt; 
&gt; &gt; Ggaren suggested &quot;Lock&quot; because a simple name will encourage people to use
&gt; &gt; it.
&gt; 
&gt; So this lock will spin for a while and then fall back to a sleeping &quot;system&quot;
&gt; lock?

Basically.  40 spins where we call yield, followed by enqueueing and sleeping.

We don&apos;t really fall back on the system lock - instead a system lock is used for &quot;parking&quot; - i.e. putting the thread to sleep while it waits for some other thread to wake it up.  So, when a thread is sleeping, the thread will appear to be wait()&apos;ing on a std::condition_variable while the data structures in Lock.cpp track that the thread is on the queue for that lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114719</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-04 12:53:37 -0700</bug_when>
    <thetext>On second thought, I guess the C++-consistent name would be &quot;Mutex&quot; rather than &quot;Lock&quot;. C++ uses std::unique_lock and std::lock_guard to mean &quot;I lock a mutex&quot;, and std::mutex to mean &quot;I am the thing that does the testing and sleeping&quot;. So, this is really a replacement for std::mutex and not std::*lock*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114720</commentid>
    <comment_count>8</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-08-04 12:55:56 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; On second thought, I guess the C++-consistent name would be &quot;Mutex&quot; rather
&gt; than &quot;Lock&quot;. C++ uses std::unique_lock and std::lock_guard to mean &quot;I lock a
&gt; mutex&quot;, and std::mutex to mean &quot;I am the thing that does the testing and
&gt; sleeping&quot;. So, this is really a replacement for std::mutex and not
&gt; std::*lock*.

Critical Section 😑</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114731</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 13:14:07 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; On second thought, I guess the C++-consistent name would be &quot;Mutex&quot; rather
&gt; &gt; than &quot;Lock&quot;. C++ uses std::unique_lock and std::lock_guard to mean &quot;I lock a
&gt; &gt; mutex&quot;, and std::mutex to mean &quot;I am the thing that does the testing and
&gt; &gt; sleeping&quot;. So, this is really a replacement for std::mutex and not
&gt; &gt; std::*lock*.
&gt; 
&gt; Critical Section 😑

Noooo! :-P

I agree that Mutex is the correct name, but then we&apos;d first have to rename the current WTF::Mutex to something like WTF::SystemMutex.  That seems annoying, but it might be OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114735</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-04 13:22:23 -0700</bug_when>
    <thetext>&gt; I agree that Mutex is the correct name, but then we&apos;d first have to rename
&gt; the current WTF::Mutex to something like WTF::SystemMutex.  That seems
&gt; annoying, but it might be OK.

If the thesis of this patch is correct, then the current WTF::Mutex should become WTF::DeprecatedMutex, since there is no good reason to use the old style, and we should migrate away from it over time.

Another reason to migrate away from WTF::Mutex is that it is just a porting holdover from before the C++ thread support library existed. The same goes for WTF::Locker, WTF::ThreadCondition, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114739</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 13:25:52 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; I agree that Mutex is the correct name, but then we&apos;d first have to rename
&gt; &gt; the current WTF::Mutex to something like WTF::SystemMutex.  That seems
&gt; &gt; annoying, but it might be OK.
&gt; 
&gt; If the thesis of this patch is correct, then the current WTF::Mutex should
&gt; become WTF::DeprecatedMutex, since there is no good reason to use the old
&gt; style, and we should migrate away from it over time.
&gt; 
&gt; Another reason to migrate away from WTF::Mutex is that it is just a porting
&gt; holdover from before the C++ thread support library existed. The same goes
&gt; for WTF::Locker, WTF::ThreadCondition, etc.

Well, WTF::Mutex currently has the ability to support condition variables.  One approach would be to say that all users of WTF::Mutex should move to std::mutex.  But I prefer a different approach: implement a WTF::Condition using the same style as this patch - one word in the common case, etc.  Then all users of std::mutex should move to the new WTF::Mutex.  Even better, we could probably implement a one-word WTF::Monitor that is a combo of Mutex and Condition.  This works pretty well for a lot of our code since we often just have one Condition per Mutex.

I think that I like WTF::Lock - or some other sufficiently unique name - for the interim before we have a fast WTF::Condition that interoperates with WTF::Lock.  Once we have that, maybe we can do the mass renamings?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114740</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-08-04 13:27:53 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; I agree that Mutex is the correct name, but then we&apos;d first have to rename
&gt; &gt; the current WTF::Mutex to something like WTF::SystemMutex.  That seems
&gt; &gt; annoying, but it might be OK.
&gt; 
&gt; If the thesis of this patch is correct, then the current WTF::Mutex should
&gt; become WTF::DeprecatedMutex, since there is no good reason to use the old
&gt; style, and we should migrate away from it over time.
&gt; 
&gt; Another reason to migrate away from WTF::Mutex is that it is just a porting
&gt; holdover from before the C++ thread support library existed. The same goes
&gt; for WTF::Locker, WTF::ThreadCondition, etc.

From what I can tell, Fil&apos;s implementation does not support priority inheritance.  If all a low priority is thread is holding the Lock/Mutex and high priority threads are waiting on the ConditionVar, the owner thread of the Lock will continue to run at a low priority relative to other high priority threads.  Does WebKit rely on priority inheritance anywhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114749</commentid>
    <comment_count>13</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-08-04 13:41:19 -0700</bug_when>
    <thetext>We could just rename current WTF::Mutex to WTF::DeprecatedMutex.

Also, I think you should put this class inside wtf/threading where we have (admittedly only one at the moment) other threading classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114763</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 13:58:07 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; &gt; I agree that Mutex is the correct name, but then we&apos;d first have to rename
&gt; &gt; &gt; the current WTF::Mutex to something like WTF::SystemMutex.  That seems
&gt; &gt; &gt; annoying, but it might be OK.
&gt; &gt; 
&gt; &gt; If the thesis of this patch is correct, then the current WTF::Mutex should
&gt; &gt; become WTF::DeprecatedMutex, since there is no good reason to use the old
&gt; &gt; style, and we should migrate away from it over time.
&gt; &gt; 
&gt; &gt; Another reason to migrate away from WTF::Mutex is that it is just a porting
&gt; &gt; holdover from before the C++ thread support library existed. The same goes
&gt; &gt; for WTF::Locker, WTF::ThreadCondition, etc.
&gt; 
&gt; From what I can tell, Fil&apos;s implementation does not support priority
&gt; inheritance.  If all a low priority is thread is holding the Lock/Mutex and
&gt; high priority threads are waiting on the ConditionVar, the owner thread of
&gt; the Lock will continue to run at a low priority relative to other high
&gt; priority threads.  Does WebKit rely on priority inheritance anywhere?

True.  Our SpinLock also doesn&apos;t support priority inheritance, and this currently replaces SpinLock.  So, we should be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114764</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-08-04 14:01:32 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; I agree that Mutex is the correct name, but then we&apos;d first have to rename
&gt; &gt; &gt; &gt; the current WTF::Mutex to something like WTF::SystemMutex.  That seems
&gt; &gt; &gt; &gt; annoying, but it might be OK.
&gt; &gt; &gt; 
&gt; &gt; &gt; If the thesis of this patch is correct, then the current WTF::Mutex should
&gt; &gt; &gt; become WTF::DeprecatedMutex, since there is no good reason to use the old
&gt; &gt; &gt; style, and we should migrate away from it over time.
&gt; &gt; &gt; 
&gt; &gt; &gt; Another reason to migrate away from WTF::Mutex is that it is just a porting
&gt; &gt; &gt; holdover from before the C++ thread support library existed. The same goes
&gt; &gt; &gt; for WTF::Locker, WTF::ThreadCondition, etc.
&gt; &gt; 
&gt; &gt; From what I can tell, Fil&apos;s implementation does not support priority
&gt; &gt; inheritance.  If all a low priority is thread is holding the Lock/Mutex and
&gt; &gt; high priority threads are waiting on the ConditionVar, the owner thread of
&gt; &gt; the Lock will continue to run at a low priority relative to other high
&gt; &gt; priority threads.  Does WebKit rely on priority inheritance anywhere?
&gt; 
&gt; True.  Our SpinLock also doesn&apos;t support priority inheritance, and this
&gt; currently replaces SpinLock.  So, we should be fine.

I&apos;m ok with it replacing SpinLock.  My concern was with Geoff&apos;s consideration of replacing all uses of WTF::Mutex with this Lock implementation.  WTF::Mutex does support priority inheritance.  I just want to make sure that we&apos;re not replacing the current WTF::Mutex without due consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114768</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 14:11:45 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; &gt; I agree that Mutex is the correct name, but then we&apos;d first have to rename
&gt; &gt; &gt; &gt; &gt; the current WTF::Mutex to something like WTF::SystemMutex.  That seems
&gt; &gt; &gt; &gt; &gt; annoying, but it might be OK.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; If the thesis of this patch is correct, then the current WTF::Mutex should
&gt; &gt; &gt; &gt; become WTF::DeprecatedMutex, since there is no good reason to use the old
&gt; &gt; &gt; &gt; style, and we should migrate away from it over time.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Another reason to migrate away from WTF::Mutex is that it is just a porting
&gt; &gt; &gt; &gt; holdover from before the C++ thread support library existed. The same goes
&gt; &gt; &gt; &gt; for WTF::Locker, WTF::ThreadCondition, etc.
&gt; &gt; &gt; 
&gt; &gt; &gt; From what I can tell, Fil&apos;s implementation does not support priority
&gt; &gt; &gt; inheritance.  If all a low priority is thread is holding the Lock/Mutex and
&gt; &gt; &gt; high priority threads are waiting on the ConditionVar, the owner thread of
&gt; &gt; &gt; the Lock will continue to run at a low priority relative to other high
&gt; &gt; &gt; priority threads.  Does WebKit rely on priority inheritance anywhere?
&gt; &gt; 
&gt; &gt; True.  Our SpinLock also doesn&apos;t support priority inheritance, and this
&gt; &gt; currently replaces SpinLock.  So, we should be fine.
&gt; 
&gt; I&apos;m ok with it replacing SpinLock.  My concern was with Geoff&apos;s
&gt; consideration of replacing all uses of WTF::Mutex with this Lock
&gt; implementation.  WTF::Mutex does support priority inheritance.  I just want
&gt; to make sure that we&apos;re not replacing the current WTF::Mutex without due
&gt; consideration.

Considering how much we use SpinLock, whatever priority inheritance Mutex does have is ineffective.  It only takes one lock that doesn&apos;t know about priorities to cause a priority inversion, and I think we use SpinLock much more than Mutex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114894</commentid>
    <comment_count>17</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2015-08-04 17:38:33 -0700</bug_when>
    <thetext>&gt; &gt; From what I can tell, Fil&apos;s implementation does not support priority
&gt; &gt; inheritance.  If all a low priority is thread is holding the Lock/Mutex and
&gt; &gt; high priority threads are waiting on the ConditionVar, the owner thread of
&gt; &gt; the Lock will continue to run at a low priority relative to other high
&gt; &gt; priority threads.  Does WebKit rely on priority inheritance anywhere?
&gt; 
&gt; True.  Our SpinLock also doesn&apos;t support priority inheritance, and this
&gt; currently replaces SpinLock.  So, we should be fine.

This line of reasoning make me like the name WTF::SystemMutex for the old mutex.

If you explicitly need all the system mutex behaviors (i.e. priority inheritance) you should use WTF::SystemMutex. If you don&apos;t (i.e. most use cases) then just use WTF::Mutex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114914</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 18:06:03 -0700</bug_when>
    <thetext>This is totally neutral on JSC benchmarks, as expected.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r187865)
&quot;Locks&quot; at /Volumes/Data/quartary/OpenSource/WebKitBuild/Release/jsc (r187865)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree                   Locks                                       
SunSpider:
   3d-cube                                            4.6188+-0.3398            4.5114+-0.3606          might be 1.0238x faster
   3d-morph                                           5.2458+-0.1575            5.1527+-0.1167          might be 1.0181x faster
   3d-raytrace                                        5.1114+-0.1005     ?      5.1558+-0.2675        ?
   access-binary-trees                                2.1410+-0.1643     ?      2.2280+-0.3079        ? might be 1.0407x slower
   access-fannkuch                                    5.1596+-0.0585     ?      5.3521+-0.2510        ? might be 1.0373x slower
   access-nbody                                       2.4100+-0.0680     ?      2.4127+-0.0940        ?
   access-nsieve                                      3.0173+-0.1354     ?      3.0187+-0.0812        ?
   bitops-3bit-bits-in-byte                           1.4736+-0.0371            1.4592+-0.0414        
   bitops-bits-in-byte                                3.2611+-0.0897            3.2560+-0.0809        
   bitops-bitwise-and                                 1.9926+-0.0351     ?      2.0106+-0.0718        ?
   bitops-nsieve-bits                                 2.9257+-0.0965            2.8903+-0.1189          might be 1.0122x faster
   controlflow-recursive                              2.1397+-0.2957            2.0040+-0.0825          might be 1.0677x faster
   crypto-aes                                         3.8312+-0.0946     ?      3.9472+-0.2965        ? might be 1.0303x slower
   crypto-md5                                         2.4287+-0.0536     ?      2.4761+-0.0776        ? might be 1.0195x slower
   crypto-sha1                                        2.3803+-0.1830     ?      2.7833+-0.9070        ? might be 1.1693x slower
   date-format-tofte                                  6.7365+-0.5026            6.6499+-0.2602          might be 1.0130x faster
   date-format-xparb                                  4.5785+-0.4290     ?      4.6176+-0.2775        ?
   math-cordic                                        2.7206+-0.0705     ?      2.7586+-0.0657        ? might be 1.0140x slower
   math-partial-sums                                  5.3063+-0.3196            5.1866+-0.1879          might be 1.0231x faster
   math-spectral-norm                                 1.8261+-0.0803            1.8233+-0.0812        
   regexp-dna                                         6.3188+-0.3528            6.2596+-0.5123        
   string-base64                                      4.2675+-0.1632     ?      4.3479+-0.4265        ? might be 1.0189x slower
   string-fasta                                       5.9072+-0.6528            5.6984+-0.0657          might be 1.0366x faster
   string-tagcloud                                    7.9675+-0.1336     ?      8.4041+-0.7230        ? might be 1.0548x slower
   string-unpack-code                                19.9951+-0.5403           19.5374+-0.3111          might be 1.0234x faster
   string-validate-input                              5.0745+-1.3733            4.6250+-0.2041          might be 1.0972x faster

   &lt;arithmetic&gt;                                       4.5706+-0.1171            4.5602+-0.0625          might be 1.0023x faster

                                                        TipOfTree                   Locks                                       
LongSpider:
   3d-cube                                          771.8095+-7.7938     ?    773.0779+-9.1282        ?
   3d-morph                                        1494.4234+-7.5328         1490.1073+-5.8303        
   3d-raytrace                                      619.9231+-3.2634     ?    621.4335+-3.9142        ?
   access-binary-trees                              812.5942+-5.3948     ?    812.7593+-10.7651       ?
   access-fannkuch                                  274.1295+-1.0160     ?    274.3002+-1.8077        ?
   access-nbody                                     514.1676+-1.9901     ?    517.4148+-5.7030        ?
   access-nsieve                                    365.8359+-11.6282    ?    375.9618+-16.6471       ? might be 1.0277x slower
   bitops-3bit-bits-in-byte                          39.9388+-0.4853     ?     40.1216+-1.2031        ?
   bitops-bits-in-byte                               81.0704+-2.1803           79.5781+-2.1317          might be 1.0188x faster
   bitops-nsieve-bits                               406.6110+-7.8635          403.8947+-5.2638        
   controlflow-recursive                            418.9563+-2.0375     ?    424.5520+-9.2078        ? might be 1.0134x slower
   crypto-aes                                       576.9404+-5.4632     ?    578.2195+-5.4360        ?
   crypto-md5                                       474.6021+-7.0047     ?    482.6179+-17.4491       ? might be 1.0169x slower
   crypto-sha1                                      636.2938+-4.0944     ?    640.3953+-3.1385        ?
   date-format-tofte                                498.8580+-11.7161    ?    503.7063+-24.5992       ?
   date-format-xparb                                627.6571+-11.5439         627.0872+-6.2736        
   hash-map                                         156.8577+-1.5164          155.9521+-1.5994        
   math-cordic                                      482.5645+-3.3998     ?    483.8471+-2.1519        ?
   math-partial-sums                                464.8508+-3.5575          462.0233+-2.0481        
   math-spectral-norm                               548.6165+-4.3437     ?    551.7510+-6.7575        ?
   string-base64                                    346.6176+-4.4541     ?    346.6691+-4.1204        ?
   string-fasta                                     357.2021+-3.0032     ?    357.4994+-2.6034        ?
   string-tagcloud                                  199.2832+-57.4505         177.5579+-1.5202          might be 1.1224x faster

   &lt;geometric&gt;                                      391.0695+-4.6109          390.4987+-1.7559          might be 1.0015x faster

                                                        TipOfTree                   Locks                                       
V8Spider:
   crypto                                            49.1598+-1.7482           48.9808+-1.9084        
   deltablue                                         79.0791+-2.6777     ?     79.7299+-4.5284        ?
   earley-boyer                                      39.5946+-0.5930           39.2212+-1.0414        
   raytrace                                          28.7557+-0.7918     ?     31.6886+-6.1090        ? might be 1.1020x slower
   regexp                                            61.1023+-0.5778     ?     61.6135+-0.7153        ?
   richards                                          70.9105+-1.7815     ?     71.5622+-3.4116        ?
   splay                                             34.1810+-2.0900           34.0174+-2.3288        

   &lt;geometric&gt;                                       48.7429+-0.4757     ?     49.3850+-0.8291        ? might be 1.0132x slower

                                                        TipOfTree                   Locks                                       
Octane:
   encrypt                                           0.20265+-0.00074          0.20230+-0.00301       
   decrypt                                           3.56572+-0.47534          3.33499+-0.01607         might be 1.0692x faster
   deltablue                                x2       0.15417+-0.00137          0.15307+-0.00180       
   earley                                            0.30291+-0.00540          0.30110+-0.00649       
   boyer                                             4.15908+-0.02376          4.13385+-0.02584       
   navier-stokes                            x2       4.92411+-0.02893          4.91718+-0.02410       
   raytrace                                 x2       1.04270+-0.07241          1.01884+-0.07396         might be 1.0234x faster
   richards                                 x2       0.10021+-0.00161          0.10017+-0.00196       
   splay                                    x2       0.33619+-0.00219    !     0.34187+-0.00215       ! definitely 1.0169x slower
   regexp                                   x2      24.68531+-0.30351    ?    24.83500+-0.51691       ?
   pdfjs                                    x2      37.33105+-0.63204    ?    37.49453+-0.34998       ?
   mandreel                                 x2      43.63864+-0.22603    ?    44.33171+-0.78447       ? might be 1.0159x slower
   gbemu                                    x2      34.33502+-1.71199    ?    34.35153+-1.03796       ?
   closure                                           0.55893+-0.00571    ?     0.56102+-0.00125       ?
   jquery                                            7.11598+-0.06968    ?     7.13456+-0.03945       ?
   box2d                                    x2      10.03658+-0.06629    ?    10.05517+-0.12237       ?
   zlib                                     x2     389.75605+-2.90554        385.79913+-20.33314        might be 1.0103x faster
   typescript                               x2     658.92818+-8.09899        656.12842+-11.54885      

   &lt;geometric&gt;                                       5.62700+-0.04596          5.61331+-0.04365         might be 1.0024x faster

                                                        TipOfTree                   Locks                                       
Kraken:
   ai-astar                                          230.285+-8.356      ?     236.064+-1.856         ? might be 1.0251x slower
   audio-beat-detection                               58.771+-0.669      ?      58.976+-0.471         ?
   audio-dft                                          95.483+-2.067      ?      95.895+-1.841         ?
   audio-fft                                          34.981+-0.570      ?      35.125+-0.601         ?
   audio-oscillator                                   62.665+-3.990      ?      62.940+-2.650         ?
   imaging-darkroom                                   58.677+-0.334      ?      59.003+-0.752         ?
   imaging-desaturate                                 54.471+-2.943      ?      55.475+-0.933         ? might be 1.0184x slower
   imaging-gaussian-blur                              82.631+-0.555             82.590+-0.261         
   json-parse-financial                               37.789+-0.731             37.238+-0.481           might be 1.0148x faster
   json-stringify-tinderbox                           22.592+-1.490      ?      22.814+-1.245         ?
   stanford-crypto-aes                                42.903+-1.715             41.604+-0.927           might be 1.0312x faster
   stanford-crypto-ccm                                35.273+-1.648      ?      36.158+-1.537         ? might be 1.0251x slower
   stanford-crypto-pbkdf2                             94.467+-1.003             94.257+-0.305         
   stanford-crypto-sha256-iterative                   36.312+-0.559      ?      36.499+-0.671         ?

   &lt;arithmetic&gt;                                       67.664+-0.939      ?      68.188+-0.477         ? might be 1.0077x slower

                                                        TipOfTree                   Locks                                       
JSRegress:
   abc-forward-loop-equal                            29.4311+-0.6455     ?     29.5404+-0.5091        ?
   abc-postfix-backward-loop                         29.4591+-0.6159           29.0017+-0.7659          might be 1.0158x faster
   abc-simple-backward-loop                          28.9969+-0.5550           28.8738+-0.3935        
   abc-simple-forward-loop                           29.2154+-0.9575           29.0029+-0.8270        
   abc-skippy-loop                                   21.1214+-0.6533     ?     21.4778+-1.1481        ? might be 1.0169x slower
   abs-boolean                                        2.4264+-0.0860            2.3811+-0.0347          might be 1.0190x faster
   adapt-to-double-divide                            16.0105+-0.2168     ?     16.2480+-0.5204        ? might be 1.0148x slower
   aliased-arguments-getbyval                         1.1665+-0.0399     ?      1.4693+-0.4157        ? might be 1.2596x slower
   allocate-big-object                                2.5751+-0.5480     ?      2.6128+-0.2639        ? might be 1.0146x slower
   arguments-named-and-reflective                    10.9051+-0.4144           10.8686+-0.3554        
   arguments-out-of-bounds                           10.0490+-0.9350            9.8034+-0.4199          might be 1.0251x faster
   arguments-strict-mode                              9.5454+-0.2523     ?      9.5959+-0.2316        ?
   arguments                                          8.1871+-0.2263     ?      8.4177+-0.3306        ? might be 1.0282x slower
   arity-mismatch-inlining                            0.8488+-0.1486            0.8202+-0.0454          might be 1.0348x faster
   array-access-polymorphic-structure                 6.3090+-0.5862            5.9623+-0.1803          might be 1.0581x faster
   array-nonarray-polymorhpic-access                 24.5815+-0.6221     ?     25.1122+-1.2537        ? might be 1.0216x slower
   array-prototype-every                             74.7804+-1.0854     ?     75.6542+-1.7074        ? might be 1.0117x slower
   array-prototype-forEach                           74.7113+-0.5646           74.4927+-1.0822        
   array-prototype-map                               83.1633+-1.0930     ?     83.7856+-0.6654        ?
   array-prototype-reduce                            70.6877+-1.6114     ?     70.9931+-1.8866        ?
   array-prototype-reduceRight                       70.8095+-2.1000           70.2520+-0.9904        
   array-prototype-some                              74.1130+-0.4029     !     75.4754+-0.7724        ! definitely 1.0184x slower
   array-splice-contiguous                           20.3935+-0.7524     ?     20.4006+-1.1547        ?
   array-with-double-add                              3.9681+-0.1761            3.9156+-0.0583          might be 1.0134x faster
   array-with-double-increment                        3.0434+-0.1339            2.9893+-0.0405          might be 1.0181x faster
   array-with-double-mul-add                          5.0186+-0.2781            4.9191+-0.0308          might be 1.0202x faster
   array-with-double-sum                              3.3228+-0.0785            3.2970+-0.0521        
   array-with-int32-add-sub                           7.2165+-0.0702            7.1890+-0.0923        
   array-with-int32-or-double-sum                     3.5155+-0.1898            3.3524+-0.0437          might be 1.0487x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     28.9523+-0.3013     ?     29.1951+-0.4087        ?
   ArrayBuffer-DataView-alloc-long-lived             13.0372+-0.5093           12.8317+-0.4350          might be 1.0160x faster
   ArrayBuffer-Int32Array-byteOffset                  3.8682+-0.8988            3.5271+-0.0517          might be 1.0967x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     35.7914+-12.1571          30.9712+-0.6537          might be 1.1556x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.1246+-0.2806     ?     20.2460+-0.4632        ?
   ArrayBuffer-Int8Array-alloc-long-lived            12.1322+-0.3063     ?     12.8298+-1.5482        ? might be 1.0575x slower
   ArrayBuffer-Int8Array-alloc                        9.8477+-0.6430            9.5338+-0.5052          might be 1.0329x faster
   asmjs_bool_bug                                     7.0368+-0.0900     ?      7.1530+-0.2484        ? might be 1.0165x slower
   assign-custom-setter-polymorphic                   2.4277+-0.0677     ?      2.4716+-0.1799        ? might be 1.0181x slower
   assign-custom-setter                               3.3452+-0.1044     ?      3.3477+-0.2979        ?
   basic-set                                          7.8219+-0.3594            7.6944+-0.3537          might be 1.0166x faster
   big-int-mul                                        3.4474+-0.1785            3.3638+-0.0508          might be 1.0249x faster
   boolean-test                                       2.8345+-0.0976     ?      2.8393+-0.0753        ?
   branch-fold                                        3.5478+-0.0544            3.5389+-0.0350        
   branch-on-string-as-boolean                       16.1193+-0.6798     ?     16.3823+-0.8719        ? might be 1.0163x slower
   by-val-generic                                     7.1298+-0.2748            7.0569+-0.2293          might be 1.0103x faster
   call-spread-apply                                 27.1528+-1.7094     ?     27.5428+-1.2267        ? might be 1.0144x slower
   call-spread-call                                  22.6948+-1.5555     ?     23.6428+-1.8490        ? might be 1.0418x slower
   captured-assignments                               0.4191+-0.0469            0.4184+-0.0378        
   cast-int-to-double                                 4.9904+-0.0862     ?      5.0358+-0.2751        ?
   cell-argument                                      6.2188+-0.1947     ?      6.4216+-0.3847        ? might be 1.0326x slower
   cfg-simplify                                       2.7042+-0.0428     ?      2.7358+-0.0776        ? might be 1.0117x slower
   chain-getter-access                                8.3185+-0.5494            8.2552+-0.7248        
   cmpeq-obj-to-obj-other                            11.4144+-1.1263           11.0760+-1.2552          might be 1.0306x faster
   constant-test                                      4.7964+-0.0957            4.7922+-0.0353        
   create-lots-of-functions                           9.9573+-0.3876            9.4965+-0.5592          might be 1.0485x faster
   cse-new-array-buffer                               2.2085+-0.1138     ?      2.2989+-0.1539        ? might be 1.0409x slower
   cse-new-array                                      2.3505+-0.1683     ?      2.4184+-0.4198        ? might be 1.0289x slower
   DataView-custom-properties                        35.4969+-0.8371           35.2449+-0.9654        
   delay-tear-off-arguments-strictmode               13.1044+-0.8228           12.6542+-1.2472          might be 1.0356x faster
   deltablue-varargs                                147.7344+-3.3833     ?    149.5223+-2.2763        ? might be 1.0121x slower
   destructuring-arguments                          163.4681+-2.8567          162.2511+-2.1923        
   destructuring-parameters-overridden-by-function   
                                                      0.5030+-0.0408     ?      0.5389+-0.0284        ? might be 1.0714x slower
   destructuring-swap                                 4.5915+-0.0088     ?      4.6814+-0.2070        ? might be 1.0196x slower
   direct-arguments-getbyval                          1.1461+-0.0686     ?      1.1761+-0.0480        ? might be 1.0262x slower
   div-boolean-double                                 5.6390+-0.6562            5.2838+-0.1281          might be 1.0672x faster
   div-boolean                                        8.1726+-0.1546     ?      8.1959+-0.2375        ?
   double-get-by-val-out-of-bounds                    4.2944+-0.2925            4.1179+-0.1729          might be 1.0429x faster
   double-pollution-getbyval                          8.5732+-0.0294            8.5477+-0.0409        
   double-pollution-putbyoffset                       3.8433+-0.0861            3.7512+-0.0730          might be 1.0245x faster
   double-real-use                                   27.3352+-2.4386     ?     27.3402+-3.0593        ?
   double-to-int32-typed-array-no-inline              2.0493+-0.0625     ?      2.0610+-0.0487        ?
   double-to-int32-typed-array                        1.7634+-0.0720     ?      1.8650+-0.1075        ? might be 1.0576x slower
   double-to-uint32-typed-array-no-inline             2.0874+-0.0438     ?      2.1016+-0.0465        ?
   double-to-uint32-typed-array                       1.9541+-0.1746            1.8213+-0.0600          might be 1.0729x faster
   elidable-new-object-dag                           33.5557+-0.6089     ?     33.7206+-0.7661        ?
   elidable-new-object-roflcopter                    33.2937+-0.8281           33.1740+-0.5020        
   elidable-new-object-then-call                     30.6334+-1.1906     ?     32.1959+-1.5218        ? might be 1.0510x slower
   elidable-new-object-tree                          36.2391+-1.0350     ?     36.5379+-1.2132        ?
   empty-string-plus-int                              4.7792+-0.2019            4.6746+-0.3033          might be 1.0224x faster
   emscripten-cube2hash                              26.7148+-1.5520     ?     27.0872+-0.5889        ? might be 1.0139x slower
   exit-length-on-plain-object                       13.0363+-0.4496           12.7657+-0.1889          might be 1.0212x faster
   external-arguments-getbyval                        1.1845+-0.0618            1.1817+-0.0645        
   external-arguments-putbyval                        2.4150+-0.3808            2.1960+-0.1059          might be 1.0997x faster
   fixed-typed-array-storage-var-index                1.2191+-0.1174            1.1706+-0.0529          might be 1.0414x faster
   fixed-typed-array-storage                          0.8485+-0.0301     ?      0.9090+-0.0831        ? might be 1.0713x slower
   Float32Array-matrix-mult                           3.8852+-0.1154     ?      4.1158+-0.4322        ? might be 1.0594x slower
   Float32Array-to-Float64Array-set                  46.2218+-0.4158     !     47.5546+-0.7306        ! definitely 1.0288x slower
   Float64Array-alloc-long-lived                     73.5778+-0.8413     ?     74.4862+-1.3166        ? might be 1.0123x slower
   Float64Array-to-Int16Array-set                    57.5435+-1.4247     ?     57.8420+-2.1581        ?
   fold-double-to-int                                12.3702+-0.2197     ?     12.7174+-0.4438        ? might be 1.0281x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.4351+-0.3672           10.3497+-0.3431        
   fold-get-by-id-to-multi-get-by-offset              8.6943+-0.2393     ?      9.0524+-0.4835        ? might be 1.0412x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.5268+-0.5141            7.7818+-0.9843          might be 1.0957x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.3630+-1.2768     ?      8.1326+-0.7635        ? might be 1.1045x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.7292+-0.3083            7.7029+-0.2045        
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.6861+-0.6057     ?      5.1802+-0.6778        ? might be 1.1054x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.9001+-1.1068            9.2662+-1.0821          might be 1.0684x faster
   fold-put-by-id-to-multi-put-by-offset              8.6160+-0.3561     ?      8.8826+-0.9294        ? might be 1.0310x slower
   fold-put-structure                                 4.7251+-0.8216     ?      5.1494+-0.6639        ? might be 1.0898x slower
   for-of-iterate-array-entries                      11.2489+-0.4281     ?     11.2823+-0.5164        ?
   for-of-iterate-array-keys                          3.3832+-0.2045     ?      3.4946+-0.1935        ? might be 1.0329x slower
   for-of-iterate-array-values                        3.5361+-0.4255            3.4215+-0.2286          might be 1.0335x faster
   fround                                            18.6280+-0.8883     ?     18.9003+-0.8606        ? might be 1.0146x slower
   ftl-library-inlining-dataview                     56.3653+-0.8020     ?     57.1455+-0.5690        ? might be 1.0138x slower
   ftl-library-inlining                             108.5827+-3.1158          107.3868+-0.8126          might be 1.0111x faster
   function-dot-apply                                 2.0738+-0.2045            1.9975+-0.1145          might be 1.0382x faster
   function-test                                      2.6981+-0.0479     ?      2.7323+-0.1454        ? might be 1.0127x slower
   function-with-eval                               101.7899+-27.8880          90.6862+-0.8463          might be 1.1224x faster
   gcse-poly-get-less-obvious                        14.1600+-0.1831     ?     14.5827+-1.3847        ? might be 1.0299x slower
   gcse-poly-get                                     14.4560+-1.0900           14.1248+-0.7286          might be 1.0234x faster
   gcse                                               3.7415+-0.0300     ?      3.7749+-0.1158        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.5618+-0.0848     ?      2.5723+-0.0952        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.5898+-0.0290     ?      5.6350+-0.1315        ?
   get-by-id-chain-from-try-block                     5.5067+-0.1796     ?      5.7276+-0.3959        ? might be 1.0401x slower
   get-by-id-check-structure-elimination              4.4624+-0.4398            4.2795+-0.0566          might be 1.0427x faster
   get-by-id-proto-or-self                           14.7878+-1.1722           14.7739+-0.8649        
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8392+-0.0156     ?      2.9611+-0.3184        ? might be 1.0430x slower
   get-by-id-self-or-proto                           14.8367+-1.2603           14.6765+-0.6055          might be 1.0109x faster
   get-by-val-out-of-bounds                           4.0387+-0.1936            3.7887+-0.1236          might be 1.0660x faster
   get_callee_monomorphic                             2.2247+-0.1005            2.2176+-0.0985        
   get_callee_polymorphic                             3.1812+-0.1324     ?      3.1878+-0.1611        ?
   getter-no-activation                               4.8024+-0.2533     ?      4.9355+-0.4116        ? might be 1.0277x slower
   getter-prototype                                   9.7732+-0.2517     ?      9.8181+-0.3455        ?
   getter-richards                                  111.2248+-2.9748          106.5098+-4.3630          might be 1.0443x faster
   getter                                             5.3310+-0.3423     ?      5.5077+-0.6742        ? might be 1.0331x slower
   global-object-access-with-mutating-structure   
                                                      5.3385+-0.3275     ?      5.6608+-0.7679        ? might be 1.0604x slower
   global-var-const-infer-fire-from-opt               0.9130+-0.0848            0.9003+-0.1176          might be 1.0141x faster
   global-var-const-infer                             0.8393+-0.2034            0.7262+-0.0740          might be 1.1557x faster
   HashMap-put-get-iterate-keys                      26.1661+-1.1985     ?     26.6242+-2.0088        ? might be 1.0175x slower
   HashMap-put-get-iterate                           26.0252+-1.0754           26.0108+-1.2974        
   HashMap-string-put-get-iterate                    24.8424+-1.3729           24.0193+-1.0171          might be 1.0343x faster
   hoist-make-rope                                    7.9203+-0.3836            7.6068+-0.4711          might be 1.0412x faster
   hoist-poly-check-structure-effectful-loop   
                                                      4.7454+-1.2376            4.2230+-0.0790          might be 1.1237x faster
   hoist-poly-check-structure                         3.2236+-0.0974     ?      3.2330+-0.0852        ?
   imul-double-only                                   6.7386+-0.3489            6.6762+-0.3878        
   imul-int-only                                      7.9030+-0.5001     ?      8.1891+-0.6864        ? might be 1.0362x slower
   imul-mixed                                         7.2461+-1.7053            6.9045+-0.9320          might be 1.0495x faster
   in-four-cases                                     17.2359+-0.4854     ?     17.3593+-0.5640        ?
   in-one-case-false                                  9.0988+-0.1774     ?      9.1637+-0.3132        ?
   in-one-case-true                                   9.0683+-0.2109     ?      9.1772+-0.1992        ? might be 1.0120x slower
   in-two-cases                                       9.5544+-0.2156            9.3526+-0.2068          might be 1.0216x faster
   indexed-properties-in-objects                      2.7566+-0.0528     ?      2.8378+-0.3293        ? might be 1.0295x slower
   infer-closure-const-then-mov-no-inline             3.0016+-0.0663            2.9661+-0.0317          might be 1.0119x faster
   infer-closure-const-then-mov                      17.2023+-0.6241           16.9183+-0.8782          might be 1.0168x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.4705+-0.1600     ?     11.5735+-0.3966        ?
   infer-closure-const-then-put-to-scope             20.5011+-0.9456     ?     21.2447+-0.4627        ? might be 1.0363x slower
   infer-closure-const-then-reenter-no-inline   
                                                     49.5101+-0.4197     ?     49.6235+-0.8381        ?
   infer-closure-const-then-reenter                  22.0381+-0.8619           21.4801+-0.5591          might be 1.0260x faster
   infer-constant-global-property                     3.3746+-0.0691            3.3238+-0.0690          might be 1.0153x faster
   infer-constant-property                            2.5870+-0.0767     ?      2.6871+-0.3098        ? might be 1.0387x slower
   infer-one-time-closure-ten-vars                    8.5613+-0.5191            8.4368+-0.2019          might be 1.0148x faster
   infer-one-time-closure-two-vars                    8.6231+-1.1874            7.8493+-0.4357          might be 1.0986x faster
   infer-one-time-closure                             7.7193+-0.3155            7.7172+-0.2470        
   infer-one-time-deep-closure                       12.5498+-0.2206           12.5320+-0.2301        
   inline-arguments-access                            3.6872+-0.1390            3.6535+-0.2597        
   inline-arguments-aliased-access                    3.6155+-0.0859            3.5938+-0.0906        
   inline-arguments-local-escape                      3.7382+-0.2183     ?      3.9161+-0.1768        ? might be 1.0476x slower
   inline-get-scoped-var                              4.8607+-0.6836            4.5531+-0.0968          might be 1.0675x faster
   inlined-put-by-id-transition                      10.5071+-0.9659           10.4994+-0.5332        
   int-or-other-abs-then-get-by-val                   4.7192+-0.0745     ?      4.7309+-0.0649        ?
   int-or-other-abs-zero-then-get-by-val             16.0094+-0.6580     ?     16.5340+-1.8372        ? might be 1.0328x slower
   int-or-other-add-then-get-by-val                   3.9679+-0.0738     ?      3.9836+-0.1303        ?
   int-or-other-add                                   4.8459+-0.1881            4.7853+-0.0755          might be 1.0127x faster
   int-or-other-div-then-get-by-val                   3.6446+-0.0483     ?      4.2713+-1.4209        ? might be 1.1720x slower
   int-or-other-max-then-get-by-val                   3.9763+-0.1104            3.9296+-0.1083          might be 1.0119x faster
   int-or-other-min-then-get-by-val                   3.9684+-0.2585     ?      4.0075+-0.1882        ?
   int-or-other-mod-then-get-by-val                   3.4517+-0.1176            3.3933+-0.0344          might be 1.0172x faster
   int-or-other-mul-then-get-by-val                   3.5400+-0.1007            3.4863+-0.0687          might be 1.0154x faster
   int-or-other-neg-then-get-by-val                   4.4394+-0.1172            4.4148+-0.0986        
   int-or-other-neg-zero-then-get-by-val             15.7043+-0.2769     ?     16.0299+-0.5322        ? might be 1.0207x slower
   int-or-other-sub-then-get-by-val                   4.0084+-0.0709     ?      4.0190+-0.0769        ?
   int-or-other-sub                                   3.4205+-0.1129            3.3710+-0.2498          might be 1.0147x faster
   int-overflow-local                                 4.2570+-0.2466            4.1997+-0.0917          might be 1.0136x faster
   Int16Array-alloc-long-lived                       46.5350+-0.8865           46.3805+-0.8759        
   Int16Array-bubble-sort-with-byteLength            17.9331+-1.4371     ?     18.1070+-1.4030        ?
   Int16Array-bubble-sort                            19.5194+-4.6858           17.1704+-0.2678          might be 1.1368x faster
   Int16Array-load-int-mul                            1.4073+-0.0567     ?      1.4139+-0.0512        ?
   Int16Array-to-Int32Array-set                      44.5347+-0.9270           44.3029+-0.8960        
   Int32Array-alloc-large                            12.2661+-0.7776     ?     12.2882+-0.5082        ?
   Int32Array-alloc-long-lived                       55.9569+-1.0172     ?     56.8643+-0.7153        ? might be 1.0162x slower
   Int32Array-alloc                                   3.1479+-0.5080            2.9006+-0.1494          might be 1.0853x faster
   Int32Array-Int8Array-view-alloc                    5.9994+-0.1947     ?      6.0868+-0.4361        ? might be 1.0146x slower
   int52-spill                                        4.4820+-0.1097     ?      4.6136+-0.2119        ? might be 1.0294x slower
   Int8Array-alloc-long-lived                        41.5892+-0.6479           41.5321+-1.3298        
   Int8Array-load-with-byteLength                     3.3646+-0.1132            3.3544+-0.0882        
   Int8Array-load                                     3.3743+-0.1382            3.3084+-0.0218          might be 1.0199x faster
   integer-divide                                    10.3449+-0.2948           10.2629+-0.2195        
   integer-modulo                                     1.6921+-0.0682            1.6443+-0.0262          might be 1.0291x faster
   is-boolean-fold-tricky                             3.7695+-0.2507            3.6943+-0.0937          might be 1.0204x faster
   is-boolean-fold                                    2.6397+-0.0719            2.6315+-0.2307        
   is-function-fold-tricky-internal-function   
                                                      9.7115+-0.1852     ?      9.9187+-0.3937        ? might be 1.0213x slower
   is-function-fold-tricky                            4.1689+-0.2322            4.1405+-0.3524        
   is-function-fold                                   2.5895+-0.0308     ?      2.6680+-0.0841        ? might be 1.0303x slower
   is-number-fold-tricky                              4.0082+-0.1464            3.9374+-0.0511          might be 1.0180x faster
   is-number-fold                                     2.7183+-0.2368            2.6349+-0.1407          might be 1.0317x faster
   is-object-or-null-fold-functions                   2.6198+-0.0177     ?      2.6492+-0.0771        ? might be 1.0112x slower
   is-object-or-null-fold-less-tricky                 4.1205+-0.1828            3.9911+-0.0580          might be 1.0324x faster
   is-object-or-null-fold-tricky                      5.2237+-0.2759            5.1108+-0.1936          might be 1.0221x faster
   is-object-or-null-fold                             2.5963+-0.0162     ?      2.6821+-0.1837        ? might be 1.0331x slower
   is-object-or-null-trickier-function                4.0523+-0.0857     ?      4.1052+-0.1356        ? might be 1.0131x slower
   is-object-or-null-trickier-internal-function   
                                                     10.4813+-0.5467           10.3479+-0.3109          might be 1.0129x faster
   is-object-or-null-tricky-function                  4.1650+-0.3293            4.0823+-0.0774          might be 1.0203x faster
   is-object-or-null-tricky-internal-function   
                                                      7.6849+-0.2710            7.5968+-0.1495          might be 1.0116x faster
   is-string-fold-tricky                              4.0859+-0.3097            3.9436+-0.0668          might be 1.0361x faster
   is-string-fold                                     2.6167+-0.0317            2.5723+-0.0478          might be 1.0173x faster
   is-undefined-fold-tricky                           3.2343+-0.0131     ?      3.2968+-0.0941        ? might be 1.0193x slower
   is-undefined-fold                                  2.6873+-0.2312            2.5906+-0.0400          might be 1.0373x faster
   large-int-captured                                 3.8054+-0.1124     ?      3.8549+-0.1177        ? might be 1.0130x slower
   large-int-neg                                     13.5714+-0.1696     ?     13.7554+-0.2425        ? might be 1.0136x slower
   large-int                                         13.4234+-0.4982           13.3300+-0.2232        
   load-varargs-elimination                          23.0448+-2.0188           21.2191+-0.5203          might be 1.0860x faster
   logical-not-weird-types                            2.8005+-0.0471     ?      2.8770+-0.0920        ? might be 1.0273x slower
   logical-not                                        4.1720+-0.0488     ?      4.1772+-0.0324        ?
   lots-of-fields                                     9.2710+-0.3436            9.2445+-0.3625        
   make-indexed-storage                               2.7332+-0.2411     ?      2.9135+-0.0432        ? might be 1.0660x slower
   make-rope-cse                                      3.5614+-0.1117            3.4460+-0.0686          might be 1.0335x faster
   marsaglia-larger-ints                             32.5627+-1.4280           32.3544+-1.0415        
   marsaglia-osr-entry                               21.2875+-0.9930     ?     21.5020+-1.0563        ? might be 1.0101x slower
   math-with-out-of-bounds-array-values              21.1706+-0.3917     ?     22.0400+-1.3890        ? might be 1.0411x slower
   max-boolean                                        2.9205+-0.4292            2.6804+-0.0474          might be 1.0896x faster
   method-on-number                                  16.3499+-2.2298           15.7264+-0.3308          might be 1.0396x faster
   min-boolean                                        2.7332+-0.1508            2.6893+-0.0589          might be 1.0163x faster
   minus-boolean-double                               3.0157+-0.0560     ?      3.0502+-0.0305        ? might be 1.0114x slower
   minus-boolean                                      2.4617+-0.3589            2.3305+-0.0473          might be 1.0563x faster
   misc-strict-eq                                    30.6582+-1.4321     ?     31.0740+-1.2283        ? might be 1.0136x slower
   mod-boolean-double                                10.9356+-0.0236     ?     11.3243+-0.6947        ? might be 1.0355x slower
   mod-boolean                                        8.2232+-0.0381     ?      8.3283+-0.2901        ? might be 1.0128x slower
   mul-boolean-double                                 3.5007+-0.0482     ?      3.6218+-0.1176        ? might be 1.0346x slower
   mul-boolean                                        2.7504+-0.0337     ?      2.7784+-0.0829        ? might be 1.0102x slower
   neg-boolean                                        3.0803+-0.0509            3.0783+-0.0755        
   negative-zero-divide                               0.3402+-0.0201            0.3372+-0.0260        
   negative-zero-modulo                               0.3317+-0.0181            0.3227+-0.0090          might be 1.0280x faster
   negative-zero-negate                               0.2969+-0.0079     ?      0.3120+-0.0242        ? might be 1.0508x slower
   nested-function-parsing                           43.9893+-0.7904     ?     45.3918+-1.5144        ? might be 1.0319x slower
   new-array-buffer-dead                             88.6620+-0.6082           88.2945+-0.8151        
   new-array-buffer-push                              5.9692+-0.1872     ?      6.0770+-0.1910        ? might be 1.0181x slower
   new-array-dead                                    13.7745+-0.8925     ?     14.3691+-1.5777        ? might be 1.0432x slower
   new-array-push                                     6.2713+-0.1677     ?      6.3263+-0.3784        ?
   no-inline-constructor                             30.6511+-0.5837     ?     30.6954+-0.4519        ?
   number-test                                        2.9928+-0.5127     ?      3.1079+-0.5614        ? might be 1.0384x slower
   object-closure-call                                5.5295+-1.4609            5.0150+-0.2569          might be 1.1026x faster
   object-get-own-property-symbols-on-large-array   
                                                      4.3228+-0.2826            3.9572+-0.2154          might be 1.0924x faster
   object-test                                        2.5636+-0.0436     ?      2.5942+-0.1060        ? might be 1.0119x slower
   obvious-sink-pathology-taken                      98.1758+-0.5442     ?     98.9768+-1.0129        ?
   obvious-sink-pathology                            94.4482+-0.7450           93.9732+-0.5454        
   obviously-elidable-new-object                     29.0589+-1.9294           27.9064+-1.2521          might be 1.0413x faster
   plus-boolean-arith                                 2.3861+-0.1421            2.3766+-0.1183        
   plus-boolean-double                                3.0127+-0.0298     ?      3.0751+-0.0842        ? might be 1.0207x slower
   plus-boolean                                       2.5045+-0.0434            2.4974+-0.0642        
   poly-chain-access-different-prototypes-simple   
                                                      3.1909+-0.0387     ?      3.3320+-0.2930        ? might be 1.0442x slower
   poly-chain-access-different-prototypes             2.8161+-0.0582     ?      2.9920+-0.3539        ? might be 1.0625x slower
   poly-chain-access-simpler                          3.1650+-0.0639     ?      3.4338+-0.4778        ? might be 1.0849x slower
   poly-chain-access                                  3.2872+-0.0415            3.2510+-0.0889          might be 1.0111x faster
   poly-stricteq                                     51.1250+-2.3018           50.3325+-1.0605          might be 1.0157x faster
   polymorphic-array-call                             1.2576+-0.0962            1.2429+-0.0791          might be 1.0119x faster
   polymorphic-get-by-id                              2.8027+-0.1118     ?      2.8370+-0.1066        ? might be 1.0122x slower
   polymorphic-put-by-id                             25.0592+-1.9886           25.0528+-0.9222        
   polymorphic-structure                             13.2218+-0.4555           13.0255+-0.2717          might be 1.0151x faster
   polyvariant-monomorphic-get-by-id                  6.4676+-0.6409     ?      6.5570+-0.5297        ? might be 1.0138x slower
   proto-getter-access                                8.2242+-0.6557            8.0768+-0.2657          might be 1.0182x faster
   prototype-access-with-mutating-prototype           5.1840+-0.1869     ?      5.2817+-0.2326        ? might be 1.0188x slower
   put-by-id-replace-and-transition                   8.0203+-0.9125            7.8495+-0.7383          might be 1.0218x faster
   put-by-id-slightly-polymorphic                     2.6041+-0.0615     ?      2.6045+-0.0390        ?
   put-by-id                                         10.1289+-0.5885            9.7128+-0.3381          might be 1.0428x faster
   put-by-val-direct                                  0.3269+-0.0392     ?      0.3350+-0.0427        ? might be 1.0248x slower
   put-by-val-large-index-blank-indexing-type   
                                                     12.2990+-0.5069           12.1674+-0.6289          might be 1.0108x faster
   put-by-val-machine-int                             2.4688+-0.0919     ?      2.4921+-0.0649        ?
   rare-osr-exit-on-local                            14.2319+-0.1034     ?     14.2503+-0.2043        ?
   register-pressure-from-osr                        16.2970+-0.4292           16.2575+-0.5536        
   repeat-multi-get-by-offset                        21.3699+-0.4236           21.3483+-0.4161        
   setter-prototype                                   7.4680+-0.5662            7.2887+-0.1055          might be 1.0246x faster
   setter                                             5.5324+-0.4482            5.2751+-0.2463          might be 1.0488x faster
   simple-activation-demo                            24.7349+-1.2257           24.1342+-0.3658          might be 1.0249x faster
   simple-getter-access                              10.3615+-0.3310     ?     10.5888+-0.4820        ? might be 1.0219x slower
   simple-poly-call-nested                            8.4572+-0.1856     ?      8.5163+-0.5092        ?
   simple-poly-call                                   1.2171+-0.0511     ?      1.2476+-0.0236        ? might be 1.0250x slower
   sin-boolean                                       17.6104+-0.7849     ?     18.1829+-0.5633        ? might be 1.0325x slower
   singleton-scope                                   57.3776+-1.3370           57.2948+-0.7073        
   sink-function                                      9.1988+-0.8236     ?      9.5696+-0.8152        ? might be 1.0403x slower
   sink-huge-activation                              16.3401+-0.8877     ?     16.4679+-1.0364        ?
   sinkable-new-object-dag                           56.0027+-2.0327     ?     56.4583+-1.7138        ?
   sinkable-new-object-taken                         42.8366+-0.3905           41.5056+-1.1038          might be 1.0321x faster
   sinkable-new-object                               29.6855+-0.7479           29.5966+-0.8989        
   slow-array-profile-convergence                     2.5593+-0.0700            2.4167+-0.1560          might be 1.0590x faster
   slow-convergence                                   2.3380+-0.0639     ?      2.4402+-0.2639        ? might be 1.0437x slower
   slow-ternaries                                    17.0802+-1.1567           16.3400+-0.5025          might be 1.0453x faster
   sorting-benchmark                                 16.7271+-0.7309     ?     17.2496+-1.1350        ? might be 1.0312x slower
   sparse-conditional                                 1.1231+-0.0685     ?      1.1281+-0.0984        ?
   splice-to-remove                                  12.7288+-0.4852     ?     13.4135+-0.8492        ? might be 1.0538x slower
   string-char-code-at                               14.0789+-0.2012     ?     14.5408+-0.6210        ? might be 1.0328x slower
   string-concat-object                               2.0315+-0.1222     ?      2.0942+-0.2208        ? might be 1.0308x slower
   string-concat-pair-object                          2.1005+-0.0973            2.0427+-0.0998          might be 1.0283x faster
   string-concat-pair-simple                          9.1489+-0.2608     ?      9.4525+-0.6427        ? might be 1.0332x slower
   string-concat-simple                               9.3206+-0.3588            9.1401+-0.2679          might be 1.0197x faster
   string-cons-repeat                                 6.5197+-0.3724            6.2753+-0.0930          might be 1.0389x faster
   string-cons-tower                                  6.8563+-0.2696            6.8459+-0.4448        
   string-equality                                   14.9040+-0.2879     ?     16.8920+-4.9129        ? might be 1.1334x slower
   string-get-by-val-big-char                         6.4945+-0.2081     ?      6.6141+-0.3633        ? might be 1.0184x slower
   string-get-by-val-out-of-bounds-insane             3.2140+-0.1606            3.1789+-0.1510          might be 1.0110x faster
   string-get-by-val-out-of-bounds                    4.0335+-0.0897            4.0117+-0.1012        
   string-get-by-val                                  2.7732+-0.0312     ?      2.8350+-0.1523        ? might be 1.0223x slower
   string-hash                                        1.8011+-0.0503     ?      1.8518+-0.1423        ? might be 1.0281x slower
   string-long-ident-equality                        12.5070+-0.3099           12.4930+-0.1623        
   string-out-of-bounds                              10.2957+-0.2414     ?     10.3895+-0.5651        ?
   string-repeat-arith                               28.3127+-2.4203           27.6652+-1.9970          might be 1.0234x faster
   string-sub                                        52.2406+-1.7343     ?     53.7339+-2.7587        ? might be 1.0286x slower
   string-test                                        2.7150+-0.1090            2.7052+-0.1575        
   string-var-equality                               26.0236+-0.8814           25.8988+-0.1012        
   structure-hoist-over-transitions                   2.5518+-0.3256            2.3871+-0.1026          might be 1.0690x faster
   substring-concat-weird                            36.3336+-1.0488           36.0645+-0.9566        
   substring-concat                                  40.4528+-1.1500           39.6150+-1.0643          might be 1.0211x faster
   substring                                         44.2067+-0.6149     ?     45.1627+-1.7261        ? might be 1.0216x slower
   switch-char-constant                               2.6517+-0.0763            2.6501+-0.0475        
   switch-char                                        5.3918+-0.4063     ?      6.1407+-0.7219        ? might be 1.1389x slower
   switch-constant                                    9.1096+-0.5317            8.6955+-0.7775          might be 1.0476x faster
   switch-string-basic-big-var                       15.8295+-0.6737           15.5594+-0.3867          might be 1.0174x faster
   switch-string-basic-big                           14.6224+-0.0502     ?     14.9059+-0.3785        ? might be 1.0194x slower
   switch-string-basic-var                           12.9771+-0.2716     ?     13.0095+-0.2295        ?
   switch-string-basic                               12.9408+-0.5119     ?     13.0186+-0.4379        ?
   switch-string-big-length-tower-var                18.5831+-0.7327           17.9133+-0.4198          might be 1.0374x faster
   switch-string-length-tower-var                    13.5752+-0.2019     ?     13.7209+-0.5233        ? might be 1.0107x slower
   switch-string-length-tower                        11.9496+-0.5654     ?     12.0768+-0.7585        ? might be 1.0106x slower
   switch-string-short                               11.7242+-0.4068           11.6760+-0.1826        
   switch                                            13.5850+-0.4935           13.5618+-1.2831        
   tear-off-arguments-simple                          3.0074+-0.3629     ?      3.1211+-0.6195        ? might be 1.0378x slower
   tear-off-arguments                                 3.9759+-0.5293            3.8374+-0.1186          might be 1.0361x faster
   temporal-structure                                11.8560+-0.1123     ?     12.1626+-0.4011        ? might be 1.0259x slower
   to-int32-boolean                                  12.9554+-0.1760     ?     12.9683+-0.3637        ?
   try-catch-get-by-val-cloned-arguments             15.0916+-1.5418     ?     15.8611+-2.0070        ? might be 1.0510x slower
   try-catch-get-by-val-direct-arguments              6.3882+-0.1744            6.3547+-0.1022        
   try-catch-get-by-val-scoped-arguments              7.6905+-0.8553            7.4753+-0.2672          might be 1.0288x faster
   typed-array-get-set-by-val-profiling              27.8927+-1.0758           26.7041+-0.4257          might be 1.0445x faster
   undefined-property-access                        222.5137+-2.2166     ?    224.9151+-9.8847        ? might be 1.0108x slower
   undefined-test                                     2.8036+-0.0765     ?      2.9485+-0.2998        ? might be 1.0517x slower
   unprofiled-licm                                   14.4114+-0.7128           13.8948+-0.3951          might be 1.0372x faster
   varargs-call                                      13.8079+-0.1498     ?     13.9062+-0.2306        ?
   varargs-construct-inline                          22.4495+-1.1794     ?     22.5368+-0.8581        ?
   varargs-construct                                 20.5671+-1.8610           19.7297+-0.7125          might be 1.0424x faster
   varargs-inline                                     8.3321+-0.3159     ?      8.4739+-0.4129        ? might be 1.0170x slower
   varargs-strict-mode                               10.2015+-3.0752            8.9217+-0.0706          might be 1.1434x faster
   varargs                                            9.0400+-0.1417     ?      9.2693+-0.3876        ? might be 1.0254x slower
   weird-inlining-const-prop                          2.7458+-0.1319            2.7002+-0.2400          might be 1.0169x faster

   &lt;geometric&gt;                                        7.7854+-0.0322            7.7793+-0.0177          might be 1.0008x faster

                                                        TipOfTree                   Locks                                       
AsmBench:
   bigfib.cpp                                       451.7339+-2.7386          449.9489+-4.0480        
   cray.c                                           396.9018+-1.6414          396.5612+-3.0379        
   dry.c                                            426.3335+-14.6658         418.8844+-17.7420         might be 1.0178x faster
   FloatMM.c                                        684.4924+-3.5659          682.9594+-4.2914        
   gcc-loops.cpp                                   3417.9097+-20.6120    ?   3422.5210+-10.5589       ?
   n-body.c                                         825.2303+-6.7249          824.3636+-6.6153        
   Quicksort.c                                      405.9477+-2.4087          403.7581+-3.2103        
   stepanov_container.cpp                          3570.5713+-53.9702    ?   3580.5184+-46.7172       ?
   Towers.c                                         234.2159+-1.0423     ?    236.5055+-1.6307        ?

   &lt;geometric&gt;                                      716.9863+-3.2946          715.5897+-3.1498          might be 1.0020x faster

                                                        TipOfTree                   Locks                                       
CompressionBench:
   huffman                                           60.2603+-1.2999           59.1404+-1.9187          might be 1.0189x faster
   arithmetic-simple                                269.4722+-0.9750     ?    270.8483+-1.9146        ?
   arithmetic-precise                               245.4895+-1.8101     ?    246.4168+-2.1057        ?
   arithmetic-complex-precise                       245.1629+-0.8891     !    246.9762+-0.8129        ! definitely 1.0074x slower
   arithmetic-precise-order-0                       277.8969+-1.8417     ?    280.1409+-1.1917        ?
   arithmetic-precise-order-1                       303.8276+-1.6805     ?    304.0233+-1.3715        ?
   arithmetic-precise-order-2                       358.0378+-8.1948          357.3034+-1.4944        
   arithmetic-simple-order-1                        322.2326+-1.9211     ?    322.4513+-1.4659        ?
   arithmetic-simple-order-2                        385.6448+-9.7185          384.8462+-4.3312        
   lz-string                                        308.5616+-4.8886          307.8201+-5.6033        

   &lt;geometric&gt;                                      254.3239+-1.1574     ?    254.3342+-0.9678        ? might be 1.0000x slower

                                                        TipOfTree                   Locks                                       
Geomean of preferred means:
   &lt;scaled-result&gt;                                   51.1798+-0.2764     ?     51.2575+-0.1970        ? might be 1.0015x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114918</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 18:10:00 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; &gt; From what I can tell, Fil&apos;s implementation does not support priority
&gt; &gt; &gt; inheritance.  If all a low priority is thread is holding the Lock/Mutex and
&gt; &gt; &gt; high priority threads are waiting on the ConditionVar, the owner thread of
&gt; &gt; &gt; the Lock will continue to run at a low priority relative to other high
&gt; &gt; &gt; priority threads.  Does WebKit rely on priority inheritance anywhere?
&gt; &gt; 
&gt; &gt; True.  Our SpinLock also doesn&apos;t support priority inheritance, and this
&gt; &gt; currently replaces SpinLock.  So, we should be fine.
&gt; 
&gt; This line of reasoning make me like the name WTF::SystemMutex for the old
&gt; mutex.
&gt; 
&gt; If you explicitly need all the system mutex behaviors (i.e. priority
&gt; inheritance) you should use WTF::SystemMutex. If you don&apos;t (i.e. most use
&gt; cases) then just use WTF::Mutex.

But std::mutex gives you those things as well.  Therefore, you should use std::mutex instead of WTF::Mutex.  That means that WTF::Mutex should be called WTF::DeprecatedMutex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115110</commentid>
    <comment_count>20</comment_count>
      <attachid>258299</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-05 14:08:10 -0700</bug_when>
    <thetext>Created attachment 258299
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115111</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-05 14:11:23 -0700</bug_when>
    <thetext>Attachment 258299 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/ListableHandler.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:64:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/EventDispatcher.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/MetaAllocator.h:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/Mutex.cpp:68:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/heap/CopiedSpace.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/ViewUpdateDispatcher.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 8 in 34 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>1115164</commentid>
    <comment_count>22</comment_count>
      <attachid>258316</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-05 16:19:43 -0700</bug_when>
    <thetext>Created attachment 258316
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115171</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-05 16:24:32 -0700</bug_when>
    <thetext>Attachment 258316 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/ListableHandler.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:64:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/EventDispatcher.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/MetaAllocator.h:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/Mutex.cpp:68:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/heap/CopiedSpace.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/ViewUpdateDispatcher.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 8 in 36 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>1115410</commentid>
    <comment_count>24</comment_count>
      <attachid>258385</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 12:43:34 -0700</bug_when>
    <thetext>Created attachment 258385
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115411</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-06 12:46:04 -0700</bug_when>
    <thetext>Attachment 258385 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/ListableHandler.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:64:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/EventDispatcher.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/MetaAllocator.h:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/CopiedSpace.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Lock.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/ViewUpdateDispatcher.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/Lock.cpp:68:  Missing space before {  [whitespace/braces] [5]
Total errors found: 9 in 44 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>1115427</commentid>
    <comment_count>26</comment_count>
      <attachid>258392</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 13:37:28 -0700</bug_when>
    <thetext>Created attachment 258392
fix build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115429</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-06 13:39:24 -0700</bug_when>
    <thetext>Attachment 258392 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/ListableHandler.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:64:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/EventDispatcher.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/MetaAllocator.h:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/CopiedSpace.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Lock.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/ViewUpdateDispatcher.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/Lock.cpp:68:  Missing space before {  [whitespace/braces] [5]
Total errors found: 9 in 43 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>1115437</commentid>
    <comment_count>28</comment_count>
      <attachid>258385</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-06 14:04:28 -0700</bug_when>
    <thetext>Comment on attachment 258385
the patch

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

r=me

I think this is all correct code, but I have some substantial comments below.

Please fix style warnings.

&gt; Source/JavaScriptCore/heap/CopiedSpace.cpp:194
&gt; -        SpinLockHolder locker(&amp;m_toSpaceLock);
&gt; +        LockHolder locker(&amp;m_toSpaceLock);

It would be nice just to use std::lock_guard, and get rid of our hand-rolled holders.

&gt; Source/WTF/wtf/Lock.cpp:137
&gt; +            // Release the queue lock.
&gt; +            for (;;) {
&gt; +                currentWordValue = m_word.load();
&gt; +                ASSERT(currentWordValue &amp; ~mask);
&gt; +                ASSERT(currentWordValue &amp; lockedQueueBit);
&gt; +                bool result = m_word.compareExchangeWeak(
&gt; +                    currentWordValue, currentWordValue &amp; ~lockedQueueBit);

Given that another thread holds the lock, that we hold the queue lock, and that the other thread can&apos;t drop the lock until we drop the queue lock, it should be impossible at this point for any other thread to store to m_word. Therefore, we can do a plain store here without a looping compare-and-exchange.

If my reasoning were incorrect, then it would seem that queue modification would be non-atomic, which would probably be broken (or at least scary). Therefore, I think it is clearer to remove this looping compare-and-exchange.

&gt; Source/WTF/wtf/Lock.cpp:139
&gt; +                if (result)
&gt; +                    break;

I would say return here. You have to read pretty far to see what break means.

&gt; Source/WTF/wtf/Lock.cpp:148
&gt; +            // We need a CAS loop to install the queue head. This CAS loop is just to protect against
&gt; +            // isHeldBit changing. We also release the queue lock here.
&gt; +            for (;;) {

Again, I find this loop confusing, because it seems to assert that it need not loop, and I believe the assertion.

&gt; Source/WTF/wtf/Lock.cpp:229
&gt; +    // Change the queue head, possibly removing it if newQueueHead is null. This is a CAS loop
&gt; +    // out of paranoia. It doesn&apos;t have to be since the state of the lock cannot change right now.
&gt; +    // We would get no performance win from making this anything but a CAS loop, and it would make
&gt; +    // it confusing to add more bits to the lock.
&gt; +    for (;;) {

It helps that you explain in a comment that this loop is not needed, but I really don&apos;t like reading and debugging code that says &quot;this code shouldn&apos;t be here&quot; :(. I would just remove this loop, and perform a naked store.

I don&apos;t understand what paranoia in this loop buys me. I guess it ensures, at a base level, that the queueHead bits will be valid, but if another thread is illegally modifying the queue or the lock while I hold the lock and the queue lock, I don&apos;t think a coherent set of queueHead bits will save me from the other incoherencies that will result.

&gt; Source/WTF/wtf/Lock.cpp:255
&gt; +        std::unique_lock&lt;std::mutex&gt; locker(queueHead-&gt;parkingLock);

This should be std::lock_guard since it doesn&apos;t need to unlock manually. Also, you should scope the lock_guard so that you release parkingLock right before calling notify. Otherwise, you create a pathology where the awoken thread immediately re-sleeps due to contention on parkingLock.

&gt; Source/WTF/wtf/Lock.cpp:258
&gt; +        // Use notify_all() out of paranoia. In reality, only the blocked thread is waiting on
&gt; +        // this condition variable.

I would call this convenience or expedience rather than paranoia. We really do need to notify all threads, since we have no API for notifying just the head of the queue.

&gt; Source/WTF/wtf/Lock.h:136
&gt; +    bool isHeld() const
&gt; +    {
&gt; +        return m_word.load(std::memory_order_acquire) &amp; isHeldBit;
&gt; +    }
&gt; +
&gt; +    bool isLocked() const
&gt; +    {
&gt; +        return isHeld();
&gt; +    }

Can we use just one name for this?

&gt; Source/WTF/wtf/Lock.h:138
&gt; +    // Everything below here should be considered private. It&apos;s not private because of POD rules.

Can we say protected here, or perhaps private and make Lock a friend? POD structs can have private stuff.

&gt; Source/WTF/wtf/Lock.h:141
&gt; +    static const uintptr_t isHeldBit = 1;
&gt; +    static const uintptr_t lockedQueueBit = 2;
&gt; +    static const uintptr_t mask = 3;

It would be nice to have helper functions for dealing with these bits:

bool isLocked(uintptr_t);
uintptr_t lock(uintptr_t);
uintptr_t unlock(uintptr_t);

bool isQueueLocked(uintptr_t);
uintptr_t lockQueue(uintptr_t);
uintptr_t unlockQueue(uintptr_t);

ThreadData* queue(uintptr_t word);
uintptr_t setQueue(uintptr_t, ThreadData*);

In addition to being more readable at the call site, these functions can help document and verify preconditions. For example, unlock can assert that the queue is not locked, lockQueue can assert that the lock is locked, and so on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115460</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 14:43:41 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Comment on attachment 258385 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=258385&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; I think this is all correct code, but I have some substantial comments below.
&gt; 
&gt; Please fix style warnings.

OK, but I&apos;ll leave the ones regarding lambdas alone since what the style bot thinks is the opposite of what everyone does.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/CopiedSpace.cpp:194
&gt; &gt; -        SpinLockHolder locker(&amp;m_toSpaceLock);
&gt; &gt; +        LockHolder locker(&amp;m_toSpaceLock);
&gt; 
&gt; It would be nice just to use std::lock_guard, and get rid of our hand-rolled
&gt; holders.

Maybe, but that seems like a different patch.  Also, are you advocating having to always say std::lock_guard&lt;Lock&gt; locker(...) instead of LockHolder locker(...)?  The latter is more concise.

&gt; 
&gt; &gt; Source/WTF/wtf/Lock.cpp:137
&gt; &gt; +            // Release the queue lock.
&gt; &gt; +            for (;;) {
&gt; &gt; +                currentWordValue = m_word.load();
&gt; &gt; +                ASSERT(currentWordValue &amp; ~mask);
&gt; &gt; +                ASSERT(currentWordValue &amp; lockedQueueBit);
&gt; &gt; +                bool result = m_word.compareExchangeWeak(
&gt; &gt; +                    currentWordValue, currentWordValue &amp; ~lockedQueueBit);
&gt; 
&gt; Given that another thread holds the lock, that we hold the queue lock, and
&gt; that the other thread can&apos;t drop the lock until we drop the queue lock, it
&gt; should be impossible at this point for any other thread to store to m_word.
&gt; Therefore, we can do a plain store here without a looping
&gt; compare-and-exchange.

This is true.  Using a CAS loop here makes it easier to assert that it&apos;s true.  But, I&apos;m fine with removing the loop.

&gt; 
&gt; If my reasoning were incorrect, then it would seem that queue modification
&gt; would be non-atomic, which would probably be broken (or at least scary).
&gt; Therefore, I think it is clearer to remove this looping compare-and-exchange.
&gt; 
&gt; &gt; Source/WTF/wtf/Lock.cpp:139
&gt; &gt; +                if (result)
&gt; &gt; +                    break;
&gt; 
&gt; I would say return here. You have to read pretty far to see what break means.

OK.

&gt; 
&gt; &gt; Source/WTF/wtf/Lock.cpp:148
&gt; &gt; +            // We need a CAS loop to install the queue head. This CAS loop is just to protect against
&gt; &gt; +            // isHeldBit changing. We also release the queue lock here.
&gt; &gt; +            for (;;) {
&gt; 
&gt; Again, I find this loop confusing, because it seems to assert that it need
&gt; not loop, and I believe the assertion.

You&apos;re right, isHeldBit cannot change here.  It&apos;s true that making this a loop makes it easier to assert things.

&gt; 
&gt; &gt; Source/WTF/wtf/Lock.cpp:229
&gt; &gt; +    // Change the queue head, possibly removing it if newQueueHead is null. This is a CAS loop
&gt; &gt; +    // out of paranoia. It doesn&apos;t have to be since the state of the lock cannot change right now.
&gt; &gt; +    // We would get no performance win from making this anything but a CAS loop, and it would make
&gt; &gt; +    // it confusing to add more bits to the lock.
&gt; &gt; +    for (;;) {
&gt; 
&gt; It helps that you explain in a comment that this loop is not needed, but I
&gt; really don&apos;t like reading and debugging code that says &quot;this code shouldn&apos;t
&gt; be here&quot; :(. I would just remove this loop, and perform a naked store.

OK.

&gt; 
&gt; I don&apos;t understand what paranoia in this loop buys me. I guess it ensures,
&gt; at a base level, that the queueHead bits will be valid, but if another
&gt; thread is illegally modifying the queue or the lock while I hold the lock
&gt; and the queue lock, I don&apos;t think a coherent set of queueHead bits will save
&gt; me from the other incoherencies that will result.

Loading, asserting, and then CASing to change state ensures that the assert held right up until the moment when you unlock.

If you assert that something is true about something you load(), and then you do a store(), then the bad state could have arisen after the load() but before the store().

&gt; 
&gt; &gt; Source/WTF/wtf/Lock.cpp:255
&gt; &gt; +        std::unique_lock&lt;std::mutex&gt; locker(queueHead-&gt;parkingLock);
&gt; 
&gt; This should be std::lock_guard since it doesn&apos;t need to unlock manually.
&gt; Also, you should scope the lock_guard so that you release parkingLock right
&gt; before calling notify. Otherwise, you create a pathology where the awoken
&gt; thread immediately re-sleeps due to contention on parkingLock.

You&apos;re right that the style I&apos;m using can cause this rare pathology.  My performance testing seems to imply that the pathology isn&apos;t happening, in the sense that when I have enough contention to cause parking, my locks perform as well as a WTF::Mutex - so it&apos;s unlikely that the awoken thread is paying a steeper price than just waking up out of the condition variable and then successfully acquiring the parking lock.

I&apos;m fine with changing this, but the counterpoint here is that the style I&apos;m using is less error-prone. It prevents a large class of bugs where someone calls notify after having changed some state but without ever holding the lock.  For example, if unlock() never acquired the parking lock, unlock() could end up setting shouldPark just after lock() checks that shouldPark is still true and just before lock() calls wait().  The way that I like to mentally steer myself away from making that mistake is to add &quot;notify should be called while the lock is held&quot; to my mental checklist.  That&apos;s a good way of ensuring that you don&apos;t mess up, since:

shouldPark = false;
lock {
    notify();
}

is just as correct as either of these:

lock {
    shouldPark = false;
    notify();
}

shouldPark = false;
lock { }
notify();

While this is definitely wrong:

shouldPark = false;
notify();

So, forcing the lock to be held while calling notify() is often enough to compensate for a race condition involving the state variable (in this case, shouldPark).  I&apos;d say that&apos;s a pretty good deal.

But for this code I&apos;m down with being precise and efficient, since it&apos;s fine to spend more time thinking about this code.  But as a general rule, I guess I&apos;d want to be able to continue to use my &quot;notify while locked&quot; mental checklist item; I&apos;d even prefer if our own API for notify ASSERTed that the lock was held.  I&apos;m curious if the &quot;stuck in unlock&quot; pathology affects WebKit.  Are you bringing it up as a hypothetical or do we have experience with it?

&gt; 
&gt; &gt; Source/WTF/wtf/Lock.cpp:258
&gt; &gt; +        // Use notify_all() out of paranoia. In reality, only the blocked thread is waiting on
&gt; &gt; +        // this condition variable.
&gt; 
&gt; I would call this convenience or expedience rather than paranoia. We really
&gt; do need to notify all threads, since we have no API for notifying just the
&gt; head of the queue.

No, it&apos;s paranoia.  There is at most one thread waiting on the parking condition.  Each thread has its own parking condition.  The parking condition is only waited on by the thread that owns it.  Therefore, notify_all and notify_one are exactly the same here.

I have two reasons for preferring notify_all pretty much all the time:

- If you allow yourself to use notify_one, you will probably eventually introduce a hard-to-catch deadlock due to there being more than one thread that needed to be notified.

- In my Jikes RVM days, I played around with making Java&apos;s notify() just do notifyAll() behind your back.  There was no change in performance on the benchmarks I had available.

I suspect that you could easily craft a microbenchmark that gets slower if you force yourself to use notify_all() even though you could have used notify_one().  But I&apos;ve never seen notify_one() turn into a speed-up, and I have seen it turn into a deadlock.  That seems like a rotten deal to me.  For that reason, I prefer notify_all().

In this code, I&apos;m fine with using notify_one() if you believe that the proper style is to be precise about notifications.  But as a general style, I like notify_all() better.  OTOH, in this code, it totally doesn&apos;t matter since it would be a bug if more than one thread waited on the same parking condition.

&gt; 
&gt; &gt; Source/WTF/wtf/Lock.h:136
&gt; &gt; +    bool isHeld() const
&gt; &gt; +    {
&gt; &gt; +        return m_word.load(std::memory_order_acquire) &amp; isHeldBit;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    bool isLocked() const
&gt; &gt; +    {
&gt; &gt; +        return isHeld();
&gt; &gt; +    }
&gt; 
&gt; Can we use just one name for this?

I&apos;d rather save that for another patch.  I was trying to minimize code changes due to existing inconsistency.

&gt; 
&gt; &gt; Source/WTF/wtf/Lock.h:138
&gt; &gt; +    // Everything below here should be considered private. It&apos;s not private because of POD rules.
&gt; 
&gt; Can we say protected here, or perhaps private and make Lock a friend? POD
&gt; structs can have private stuff.

The old rules definitely said otherwise, and we seem to still obey those old rules in SpinLockBase.  I guess maybe the rules changed: http://stackoverflow.com/questions/4762788/can-a-class-with-all-private-members-be-a-pod-class

So I guess in new C++, LockBase would be POD for our purposes if all data members are private, which is easy to ensure.

I&apos;m going to try to use protected, but I might revert that if one of our various compilers doesn&apos;t like this.

&gt; 
&gt; &gt; Source/WTF/wtf/Lock.h:141
&gt; &gt; +    static const uintptr_t isHeldBit = 1;
&gt; &gt; +    static const uintptr_t lockedQueueBit = 2;
&gt; &gt; +    static const uintptr_t mask = 3;
&gt; 
&gt; It would be nice to have helper functions for dealing with these bits:
&gt; 
&gt; bool isLocked(uintptr_t);
&gt; uintptr_t lock(uintptr_t);
&gt; uintptr_t unlock(uintptr_t);
&gt; 
&gt; bool isQueueLocked(uintptr_t);
&gt; uintptr_t lockQueue(uintptr_t);
&gt; uintptr_t unlockQueue(uintptr_t);
&gt; 
&gt; ThreadData* queue(uintptr_t word);
&gt; uintptr_t setQueue(uintptr_t, ThreadData*);
&gt; 
&gt; In addition to being more readable at the call site, these functions can
&gt; help document and verify preconditions. For example, unlock can assert that
&gt; the queue is not locked, lockQueue can assert that the lock is locked, and
&gt; so on.

I actually disagree with this.  To me, if I had the option of:

1) word = lock(word);
2) word |= isHeldBit;

I would take (2) any day, because the intent is just as clear as (1) and the implementation is strictly more clear.  With (1), I&apos;d have to look to see how the act of locking was represented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115464</commentid>
    <comment_count>30</comment_count>
      <attachid>258402</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 14:56:09 -0700</bug_when>
    <thetext>Created attachment 258402
patch for landing

This addresses all of ggaren&apos;s comments except for check-style fixes and using helpers for setting and clearing the m_word bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115465</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-06 14:58:15 -0700</bug_when>
    <thetext>Attachment 258402 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/ListableHandler.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:64:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/EventDispatcher.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/MetaAllocator.h:40:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/CopiedSpace.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Lock.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/WebProcess/WebPage/ViewUpdateDispatcher.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/Lock.cpp:69:  Missing space before {  [whitespace/braces] [5]
Total errors found: 9 in 43 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>1115469</commentid>
    <comment_count>32</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 15:02:31 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; Attachment 258402 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/heap/ListableHandler.h:26:  Alphabetical
&gt; sorting problem.  [build/include_order] [4]
&gt; ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:64:  Place brace on its own
&gt; line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:78:  Place brace on its own
&gt; line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/WebKit2/WebProcess/WebPage/EventDispatcher.h:37:  Alphabetical
&gt; sorting problem.  [build/include_order] [4]
&gt; ERROR: Source/WTF/wtf/MetaAllocator.h:40:  Alphabetical sorting problem. 
&gt; [build/include_order] [4]
&gt; ERROR: Source/JavaScriptCore/heap/CopiedSpace.h:38:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]
&gt; ERROR: Tools/TestWebKitAPI/Tests/WTF/Lock.cpp:48:  Place brace on its own
&gt; line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/WebKit2/WebProcess/WebPage/ViewUpdateDispatcher.h:34: 
&gt; Alphabetical sorting problem.  [build/include_order] [4]
&gt; ERROR: Source/WTF/wtf/Lock.cpp:69:  Missing space before { 
&gt; [whitespace/braces] [5]
&gt; Total errors found: 9 in 43 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

Fixed most of this locally.  The &quot;Place brace&quot; and &quot;Missing space&quot; errors are because check-webkit-style doesn&apos;t grok lambdas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115471</commentid>
    <comment_count>33</comment_count>
      <attachid>258405</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 15:04:06 -0700</bug_when>
    <thetext>Created attachment 258405
fix most style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115473</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-06 15:07:29 -0700</bug_when>
    <thetext>Attachment 258405 did not pass style-queue:


ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:64:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Lock.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 43 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>1115499</commentid>
    <comment_count>35</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-06 15:43:22 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/JavaScriptCore/heap/CopiedSpace.cpp:194
&gt; &gt; &gt; -        SpinLockHolder locker(&amp;m_toSpaceLock);
&gt; &gt; &gt; +        LockHolder locker(&amp;m_toSpaceLock);
&gt; &gt; 
&gt; &gt; It would be nice just to use std::lock_guard, and get rid of our hand-rolled
&gt; &gt; holders.
&gt; 
&gt; Maybe, but that seems like a different patch.  Also, are you advocating
&gt; having to always say std::lock_guard&lt;Lock&gt; locker(...) instead of LockHolder
&gt; locker(...)?  The latter is more concise.

Yeah, I guess it&apos;s a different patch.

I&apos;m primarily saying that it&apos;s nice not to reinvent things. If we like brevity, I&apos;d prefer to typedef std::lock_guard&lt;Lock&gt; to LockHolder or LockGuard rather than write a class.

The lock_guard has the slight downside that we would need to obey the C++ naming scheme.

&gt; So, forcing the lock to be held while calling notify() is often enough to
&gt; compensate for a race condition involving the state variable (in this case,
&gt; shouldPark).  I&apos;d say that&apos;s a pretty good deal.
&gt; 
&gt; But for this code I&apos;m down with being precise and efficient, since it&apos;s fine
&gt; to spend more time thinking about this code.  But as a general rule, I guess
&gt; I&apos;d want to be able to continue to use my &quot;notify while locked&quot; mental
&gt; checklist item; I&apos;d even prefer if our own API for notify ASSERTed that the
&gt; lock was held.  I&apos;m curious if the &quot;stuck in unlock&quot; pathology affects
&gt; WebKit.  Are you bringing it up as a hypothetical or do we have experience
&gt; with it?

I think you have a reasonable counterpoint for non-performance-critical code -- and, indeed, it took me a while to understand the subtlety here.

I&apos;m bringing up lock/notify performance as a hypothetical, based on reading C++ documentation. I haven&apos;t measured a performance problem caused by lock/notify.

Perhaps we want a custom version of notify that requires a lock, and then unlocks it for you before notifying, as a kind of reminder that you should have locked before notifying, but without the performance penalty.

For my part, I find it easy enough to remember the mental rule &quot;unlock right before notify&quot; -- which implies the same safety as &quot;unlock right after notify&quot;, since both require having previously locked. Maybe we should bring this up on webkit-dev to see how other people feel.

&gt; &gt; &gt; Source/WTF/wtf/Lock.cpp:258
&gt; &gt; &gt; +        // Use notify_all() out of paranoia. In reality, only the blocked thread is waiting on
&gt; &gt; &gt; +        // this condition variable.
&gt; &gt; 
&gt; &gt; I would call this convenience or expedience rather than paranoia. We really
&gt; &gt; do need to notify all threads, since we have no API for notifying just the
&gt; &gt; head of the queue.
&gt; 
&gt; No, it&apos;s paranoia.  There is at most one thread waiting on the parking
&gt; condition.  Each thread has its own parking condition.  

Oh, I see -- because we guard the parking condition with the parking mutex.

&gt; The parking
&gt; condition is only waited on by the thread that owns it.  Therefore,
&gt; notify_all and notify_one are exactly the same here.
&gt; 
&gt; I have two reasons for preferring notify_all pretty much all the time:
&gt; 
&gt; - If you allow yourself to use notify_one, you will probably eventually
&gt; introduce a hard-to-catch deadlock due to there being more than one thread
&gt; that needed to be notified.
&gt; 
&gt; - In my Jikes RVM days, I played around with making Java&apos;s notify() just do
&gt; notifyAll() behind your back.  There was no change in performance on the
&gt; benchmarks I had available.
&gt; 
&gt; I suspect that you could easily craft a microbenchmark that gets slower if
&gt; you force yourself to use notify_all() even though you could have used
&gt; notify_one().  But I&apos;ve never seen notify_one() turn into a speed-up, and I
&gt; have seen it turn into a deadlock.  That seems like a rotten deal to me. 
&gt; For that reason, I prefer notify_all().
&gt; 
&gt; In this code, I&apos;m fine with using notify_one() if you believe that the
&gt; proper style is to be precise about notifications.  But as a general style,
&gt; I like notify_all() better.  OTOH, in this code, it totally doesn&apos;t matter
&gt; since it would be a bug if more than one thread waited on the same parking
&gt; condition.

Hmmm... I haven&apos;t written enough wait/notify code to have a strong intuition about notify_one vs notify_all. I&apos;m happy with either in this case.

&gt; &gt; &gt; Source/WTF/wtf/Lock.h:141
&gt; &gt; &gt; +    static const uintptr_t isHeldBit = 1;
&gt; &gt; &gt; +    static const uintptr_t lockedQueueBit = 2;
&gt; &gt; &gt; +    static const uintptr_t mask = 3;
&gt; &gt; 
&gt; &gt; It would be nice to have helper functions for dealing with these bits:
&gt; &gt; 
&gt; &gt; bool isLocked(uintptr_t);
&gt; &gt; uintptr_t lock(uintptr_t);
&gt; &gt; uintptr_t unlock(uintptr_t);
&gt; &gt; 
&gt; &gt; bool isQueueLocked(uintptr_t);
&gt; &gt; uintptr_t lockQueue(uintptr_t);
&gt; &gt; uintptr_t unlockQueue(uintptr_t);
&gt; &gt; 
&gt; &gt; ThreadData* queue(uintptr_t word);
&gt; &gt; uintptr_t setQueue(uintptr_t, ThreadData*);
&gt; &gt; 
&gt; &gt; In addition to being more readable at the call site, these functions can
&gt; &gt; help document and verify preconditions. For example, unlock can assert that
&gt; &gt; the queue is not locked, lockQueue can assert that the lock is locked, and
&gt; &gt; so on.
&gt; 
&gt; I actually disagree with this.  To me, if I had the option of:
&gt; 
&gt; 1) word = lock(word);
&gt; 2) word |= isHeldBit;
&gt; 
&gt; I would take (2) any day, because the intent is just as clear as (1) and the
&gt; implementation is strictly more clear.  With (1), I&apos;d have to look to see
&gt; how the act of locking was represented.

In that case, how about these name changes: 
isLockedBit
isQueueLockedBit
queueHeadMask</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115503</commentid>
    <comment_count>36</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-06 15:51:19 -0700</bug_when>
    <thetext>&gt; &gt; No, it&apos;s paranoia.  There is at most one thread waiting on the parking
&gt; &gt; condition.  Each thread has its own parking condition.  
&gt; 
&gt; Oh, I see -- because we guard the parking condition with the parking mutex.

LOL, no, that was wrong -- it&apos;s because there&apos;s one condition variable per thread!

I guess in the case of one condition variable per thread, you&apos;d be taking the &quot;always notify_all()&quot; idiom to a bit of an extreme, but I still don&apos;t have a strong negative feeling about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115504</commentid>
    <comment_count>37</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 15:52:30 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; &gt; &gt; &gt; Source/JavaScriptCore/heap/CopiedSpace.cpp:194
&gt; &gt; &gt; &gt; -        SpinLockHolder locker(&amp;m_toSpaceLock);
&gt; &gt; &gt; &gt; +        LockHolder locker(&amp;m_toSpaceLock);
&gt; &gt; &gt; 
&gt; &gt; &gt; It would be nice just to use std::lock_guard, and get rid of our hand-rolled
&gt; &gt; &gt; holders.
&gt; &gt; 
&gt; &gt; Maybe, but that seems like a different patch.  Also, are you advocating
&gt; &gt; having to always say std::lock_guard&lt;Lock&gt; locker(...) instead of LockHolder
&gt; &gt; locker(...)?  The latter is more concise.
&gt; 
&gt; Yeah, I guess it&apos;s a different patch.
&gt; 
&gt; I&apos;m primarily saying that it&apos;s nice not to reinvent things. If we like
&gt; brevity, I&apos;d prefer to typedef std::lock_guard&lt;Lock&gt; to LockHolder or
&gt; LockGuard rather than write a class.
&gt; 
&gt; The lock_guard has the slight downside that we would need to obey the C++
&gt; naming scheme.
&gt; 
&gt; &gt; So, forcing the lock to be held while calling notify() is often enough to
&gt; &gt; compensate for a race condition involving the state variable (in this case,
&gt; &gt; shouldPark).  I&apos;d say that&apos;s a pretty good deal.
&gt; &gt; 
&gt; &gt; But for this code I&apos;m down with being precise and efficient, since it&apos;s fine
&gt; &gt; to spend more time thinking about this code.  But as a general rule, I guess
&gt; &gt; I&apos;d want to be able to continue to use my &quot;notify while locked&quot; mental
&gt; &gt; checklist item; I&apos;d even prefer if our own API for notify ASSERTed that the
&gt; &gt; lock was held.  I&apos;m curious if the &quot;stuck in unlock&quot; pathology affects
&gt; &gt; WebKit.  Are you bringing it up as a hypothetical or do we have experience
&gt; &gt; with it?
&gt; 
&gt; I think you have a reasonable counterpoint for non-performance-critical code
&gt; -- and, indeed, it took me a while to understand the subtlety here.
&gt; 
&gt; I&apos;m bringing up lock/notify performance as a hypothetical, based on reading
&gt; C++ documentation. I haven&apos;t measured a performance problem caused by
&gt; lock/notify.
&gt; 
&gt; Perhaps we want a custom version of notify that requires a lock, and then
&gt; unlocks it for you before notifying, as a kind of reminder that you should
&gt; have locked before notifying, but without the performance penalty.

How do you do this with lexically scoped locking?  The &quot;notify while locked&quot; rule is easier to enforce.

I guess we could have an API that does the notify as part of ~LockHolder, after it calls unlock.  That strikes me as the best: notify() takes a special LockHolder that has Vector&lt;Condition*, 1&gt; in it.  This can be used to both assert the safety property and ensure that the notify() comes after unlock().

&gt; 
&gt; For my part, I find it easy enough to remember the mental rule &quot;unlock right
&gt; before notify&quot; -- which implies the same safety as &quot;unlock right after
&gt; notify&quot;, since both require having previously locked. Maybe we should bring
&gt; this up on webkit-dev to see how other people feel.

I&apos;d probably want to bring this up once I start writing a replacement for ThreadCondition/std::condition_variable using the ParkingLot (https://bugs.webkit.org/show_bug.cgi?id=147665).  The API I propose above seems the nicest, so I&apos;ll propose that.

&gt; 
&gt; &gt; &gt; &gt; Source/WTF/wtf/Lock.cpp:258
&gt; &gt; &gt; &gt; +        // Use notify_all() out of paranoia. In reality, only the blocked thread is waiting on
&gt; &gt; &gt; &gt; +        // this condition variable.
&gt; &gt; &gt; 
&gt; &gt; &gt; I would call this convenience or expedience rather than paranoia. We really
&gt; &gt; &gt; do need to notify all threads, since we have no API for notifying just the
&gt; &gt; &gt; head of the queue.
&gt; &gt; 
&gt; &gt; No, it&apos;s paranoia.  There is at most one thread waiting on the parking
&gt; &gt; condition.  Each thread has its own parking condition.  
&gt; 
&gt; Oh, I see -- because we guard the parking condition with the parking mutex.
&gt; 
&gt; &gt; The parking
&gt; &gt; condition is only waited on by the thread that owns it.  Therefore,
&gt; &gt; notify_all and notify_one are exactly the same here.
&gt; &gt; 
&gt; &gt; I have two reasons for preferring notify_all pretty much all the time:
&gt; &gt; 
&gt; &gt; - If you allow yourself to use notify_one, you will probably eventually
&gt; &gt; introduce a hard-to-catch deadlock due to there being more than one thread
&gt; &gt; that needed to be notified.
&gt; &gt; 
&gt; &gt; - In my Jikes RVM days, I played around with making Java&apos;s notify() just do
&gt; &gt; notifyAll() behind your back.  There was no change in performance on the
&gt; &gt; benchmarks I had available.
&gt; &gt; 
&gt; &gt; I suspect that you could easily craft a microbenchmark that gets slower if
&gt; &gt; you force yourself to use notify_all() even though you could have used
&gt; &gt; notify_one().  But I&apos;ve never seen notify_one() turn into a speed-up, and I
&gt; &gt; have seen it turn into a deadlock.  That seems like a rotten deal to me. 
&gt; &gt; For that reason, I prefer notify_all().
&gt; &gt; 
&gt; &gt; In this code, I&apos;m fine with using notify_one() if you believe that the
&gt; &gt; proper style is to be precise about notifications.  But as a general style,
&gt; &gt; I like notify_all() better.  OTOH, in this code, it totally doesn&apos;t matter
&gt; &gt; since it would be a bug if more than one thread waited on the same parking
&gt; &gt; condition.
&gt; 
&gt; Hmmm... I haven&apos;t written enough wait/notify code to have a strong intuition
&gt; about notify_one vs notify_all. I&apos;m happy with either in this case.
&gt; 
&gt; &gt; &gt; &gt; Source/WTF/wtf/Lock.h:141
&gt; &gt; &gt; &gt; +    static const uintptr_t isHeldBit = 1;
&gt; &gt; &gt; &gt; +    static const uintptr_t lockedQueueBit = 2;
&gt; &gt; &gt; &gt; +    static const uintptr_t mask = 3;
&gt; &gt; &gt; 
&gt; &gt; &gt; It would be nice to have helper functions for dealing with these bits:
&gt; &gt; &gt; 
&gt; &gt; &gt; bool isLocked(uintptr_t);
&gt; &gt; &gt; uintptr_t lock(uintptr_t);
&gt; &gt; &gt; uintptr_t unlock(uintptr_t);
&gt; &gt; &gt; 
&gt; &gt; &gt; bool isQueueLocked(uintptr_t);
&gt; &gt; &gt; uintptr_t lockQueue(uintptr_t);
&gt; &gt; &gt; uintptr_t unlockQueue(uintptr_t);
&gt; &gt; &gt; 
&gt; &gt; &gt; ThreadData* queue(uintptr_t word);
&gt; &gt; &gt; uintptr_t setQueue(uintptr_t, ThreadData*);
&gt; &gt; &gt; 
&gt; &gt; &gt; In addition to being more readable at the call site, these functions can
&gt; &gt; &gt; help document and verify preconditions. For example, unlock can assert that
&gt; &gt; &gt; the queue is not locked, lockQueue can assert that the lock is locked, and
&gt; &gt; &gt; so on.
&gt; &gt; 
&gt; &gt; I actually disagree with this.  To me, if I had the option of:
&gt; &gt; 
&gt; &gt; 1) word = lock(word);
&gt; &gt; 2) word |= isHeldBit;
&gt; &gt; 
&gt; &gt; I would take (2) any day, because the intent is just as clear as (1) and the
&gt; &gt; implementation is strictly more clear.  With (1), I&apos;d have to look to see
&gt; &gt; how the act of locking was represented.
&gt; 
&gt; In that case, how about these name changes: 
&gt; isLockedBit
&gt; isQueueLockedBit
&gt; queueHeadMask

Yeah, those are better names.  I&apos;ll make the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115505</commentid>
    <comment_count>38</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 15:53:42 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; &gt; &gt; No, it&apos;s paranoia.  There is at most one thread waiting on the parking
&gt; &gt; &gt; condition.  Each thread has its own parking condition.  
&gt; &gt; 
&gt; &gt; Oh, I see -- because we guard the parking condition with the parking mutex.
&gt; 
&gt; LOL, no, that was wrong -- it&apos;s because there&apos;s one condition variable per
&gt; thread!
&gt; 
&gt; I guess in the case of one condition variable per thread, you&apos;d be taking
&gt; the &quot;always notify_all()&quot; idiom to a bit of an extreme, but I still don&apos;t
&gt; have a strong negative feeling about it.

Yup, it&apos;s an extreme alright!  I&apos;ve changed the code to use notify_one().  I think that these kinds of safety idioms make more sense in higher-level code where we don&apos;t scrutinize it as much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115508</commentid>
    <comment_count>39</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-06 15:58:50 -0700</bug_when>
    <thetext>&gt; &gt; Perhaps we want a custom version of notify that requires a lock, and then
&gt; &gt; unlocks it for you before notifying, as a kind of reminder that you should
&gt; &gt; have locked before notifying, but without the performance penalty.
&gt; 
&gt; How do you do this with lexically scoped locking?  The &quot;notify while locked&quot;
&gt; rule is easier to enforce.

Either you manually close the scope and then notify (as you did in this patch), or the notify helper function takes an std::unique_lock, which allows it to manually unlock, and which notices at the end of scope that it has already been unlocked, and you call the helper function right before the scope closes.

That said, I agree that it can be annoying to manually close a scope early and move the notify out of it (as you did in this patch).

&gt; I guess we could have an API that does the notify as part of ~LockHolder,
&gt; after it calls unlock.  That strikes me as the best: notify() takes a
&gt; special LockHolder that has Vector&lt;Condition*, 1&gt; in it.  This can be used
&gt; to both assert the safety property and ensure that the notify() comes after
&gt; unlock().

Seems pretty good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115514</commentid>
    <comment_count>40</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-06 16:07:58 -0700</bug_when>
    <thetext>&gt; That said, I agree that it can be annoying to manually close a scope early
&gt; and move the notify out of it (as you did in this patch).

An argument in favor of your &quot;hold like while notify&quot; proposal is the degenerate case where your predicate is guarded by some other mutex or lockless design, and so you have a mutex solely for your condition variable.

In such a case, you might be tempted to do this:

Waiter:
while (!predicate()) {
    unique_lock&lt;mutex&gt; lock(m_conditionMutex);
    m_condition.wait(lock...);
}

Signaler:
// I happen to know that predicate() is true now, so I&apos;ll signal.
m_condition.notify_all();

But this code is incorrect! In order to make it correct, you must acquire the lock before you signal, like so:

Signaler:
{ lock_guard&lt;mutex&gt; lock(m_conditionMutex); }
m_condition.notify_all();

It is indeed a simpler mental model to think, &quot;The lock guards the condition variable&quot; -- even though it&apos;s not quite true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115553</commentid>
    <comment_count>41</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 16:59:44 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; &gt; That said, I agree that it can be annoying to manually close a scope early
&gt; &gt; and move the notify out of it (as you did in this patch).
&gt; 
&gt; An argument in favor of your &quot;hold like while notify&quot; proposal is the
&gt; degenerate case where your predicate is guarded by some other mutex or
&gt; lockless design, and so you have a mutex solely for your condition variable.
&gt; 
&gt; In such a case, you might be tempted to do this:
&gt; 
&gt; Waiter:
&gt; while (!predicate()) {
&gt;     unique_lock&lt;mutex&gt; lock(m_conditionMutex);
&gt;     m_condition.wait(lock...);
&gt; }
&gt; 
&gt; Signaler:
&gt; // I happen to know that predicate() is true now, so I&apos;ll signal.
&gt; m_condition.notify_all();
&gt; 
&gt; But this code is incorrect! In order to make it correct, you must acquire
&gt; the lock before you signal, like so:
&gt; 
&gt; Signaler:
&gt; { lock_guard&lt;mutex&gt; lock(m_conditionMutex); }
&gt; m_condition.notify_all();
&gt; 
&gt; It is indeed a simpler mental model to think, &quot;The lock guards the condition
&gt; variable&quot; -- even though it&apos;s not quite true.

Interesting, it&apos;s been a while since I&apos;ve seen that kind of code!  I probably got bit by this when I first learned how to threads.

Simple mental models are very powerful for condition-variable-heavy code because the performance benefits of more complex approaches are low while the risks are high.  I&apos;ve yet to see a legit program (not a pathological microbenchmark) where notify_one was better than notify_all or where calling notify while locked caused a performance problem, or indeed where the speed of the wait/notify algorithm even mattered that much.  I&apos;ve also yet to see an example where using one condition variable per lock ever caused a performance problem.  So, I prefer to simplify the model down to:

- 1 condition variable per lock, in the style of Monitors in Java.
- only one kind of notify: notifyAll().
- notifyAll() must be called while the lock is held.

The only problem that this could introduce is some thread waking up too soon and then realizing that it should go back to sleep.  This would be a troubling issue if we had a lot of threads - but we don&apos;t.  We rely on threads mostly for concurrency rather than parallelism.

I think a lot of why sophisticated wait/notify tricks don&apos;t pan out is that all they can do is reduce the probability of spurious thread wake-ups.  The probability of spurious thread wake-ups is low to begin with.  The cost of spurious thread wake-up is small - it&apos;s just an extra context switch.  You&apos;d have to spuriously wake up a lot of threads for it to matter.  In WebKit, probably the maximum number of threads you could wake up with any condition variable is bounded by NUM_CPU.

Thinking more about it, I&apos;d be *really* surprised if the notify-before-unlock issue ever arose in real code because if it did, then it would contradict the traditional greediness assumption in locking algorithms: the currently running thread has effectively higher priority than any thread we could wake up because in most schedulers, if a thread wakes up another thread, it doesn&apos;t cause an immediate context switch.  Instead, the thread that was previously running will continue to run - at full speed, on a hot cache.  The woken-up thread is at lower priority because either it: (1) is slated to run on the current CPU but cannot because the thread that did notify() is still running, (2) is slated to run on another CPU but that CPU is still doing something else, or (3) is slated to run on another CPU and that CPU is idle, and so it needs to start up.  In (3), there will be a delay since everything will be running on a cold cache.  Also, OS schedulers sometimes delay waking up a CPU to run a thread under the optimistic assumption that the current CPU will go idle before the other one will wake up.  The notion of greed is known in the literature (see for example http://janvitek.github.io/vitekj/490s12/Schedule_files/ols2002-pages-479-495.pdf, page 3) and is thought to be a key quality of barging locks.  I witnessed it when I was writing benchmarks of lock fairness, years ago - if you have many threads all doing &quot;while (true) lock { cnt++; }&quot; then one thread will usually spend some time repeatedly locking and unlocking the lock until it loses its timeslice, and only then will another thread have a chance at acquiring the lock. This property is what makes barging locks faster than FIFO locks - you get fewer context switches.  Because of how fundamental greed is to scheduling, it seems super unlikely that a call to notify() will cause a thread to run before you get around to calling unlock().  Most likely, the notify() will not cause an immediate context switch, and most likely, the current thread will not run out of its timeslice just as it is about to call unlock().

I want to think about this more before proposing a style change, and probably, instead of proposing a style change the best approach would be to write a patch that imposes the style globally and then prove that this patch is not a slow-down.  That, I think should be the thing we use to determine our style: the simplest and most fool-proof style that still maximizes performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115571</commentid>
    <comment_count>42</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 17:50:34 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/188100</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115598</commentid>
    <comment_count>43</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 19:38:14 -0700</bug_when>
    <thetext>I&apos;m seeing some timeouts on the WK2 bots.  I&apos;m investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115621</commentid>
    <comment_count>44</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 21:18:00 -0700</bug_when>
    <thetext>Fix some test gardening in http://trac.webkit.org/changeset/188113</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115657</commentid>
    <comment_count>45</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-08-06 22:46:44 -0700</bug_when>
    <thetext>Window is pretty crashy:
https://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29?numbuilds=100</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115664</commentid>
    <comment_count>46</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 23:16:32 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; Window is pretty crashy:
&gt; https://build.webkit.org/builders/
&gt; Apple%20Win%207%20Debug%20%28Tests%29?numbuilds=100

Oh man, Windows makes weird assertions in compare_exchange_weak and friends.  I&apos;ve got a fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115665</commentid>
    <comment_count>47</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 23:18:07 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; &gt; Window is pretty crashy:
&gt; &gt; https://build.webkit.org/builders/
&gt; &gt; Apple%20Win%207%20Debug%20%28Tests%29?numbuilds=100
&gt; 
&gt; Oh man, Windows makes weird assertions in compare_exchange_weak and friends.
&gt; I&apos;ve got a fix.

I think this fixes it: http://trac.webkit.org/changeset/188117</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115696</commentid>
    <comment_count>48</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-08-07 02:18:58 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; Fix some test gardening in http://trac.webkit.org/changeset/188113

It made ~500-1000 tests fail on ARM Linux bots. Could you check it?
See bug147776 for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115820</commentid>
    <comment_count>49</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-07 11:37:05 -0700</bug_when>
    <thetext>Completely broke iOS: rdar://problem/22191332</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115829</commentid>
    <comment_count>50</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-07 11:52:25 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; Completely broke iOS: rdar://problem/22191332

Rolled out in &lt;http://trac.webkit.org/changeset/188144&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115833</commentid>
    <comment_count>51</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-07 11:56:49 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; (In reply to comment #49)
&gt; &gt; Completely broke iOS: rdar://problem/22191332
&gt; 
&gt; Rolled out in &lt;http://trac.webkit.org/changeset/188144&gt;.

Sorry, it looks like it messed up my commit message somehow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115851</commentid>
    <comment_count>52</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-07 13:05:28 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; (In reply to comment #50)
&gt; &gt; (In reply to comment #49)
&gt; &gt; &gt; Completely broke iOS: rdar://problem/22191332
&gt; &gt; 
&gt; &gt; Rolled out in &lt;http://trac.webkit.org/changeset/188144&gt;.
&gt; 
&gt; Sorry, it looks like it messed up my commit message somehow.

The bug was that the unlock fast path was using a weak CAS, which could cause the unlock slow path to run even when there is nobody on the lock&apos;s queue.  But the unlock slow path assumes that once the queue lock is acquired, the queue will be non-empty - and it dereferences the queue head unconditionally.  That null dereference was crashing every time that the weak CAS failed spuriously.  This is an ARM-only issue because X86 has no notion of weak CAS; all CASes are strong and so they never fail spuriously.

I&apos;ll reland shortly with the fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115852</commentid>
    <comment_count>53</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-07 13:06:07 -0700</bug_when>
    <thetext>This got rolled out so reopening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115853</commentid>
    <comment_count>54</comment_count>
      <attachid>258522</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-07 13:10:45 -0700</bug_when>
    <thetext>Created attachment 258522
patch for relanding</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115856</commentid>
    <comment_count>55</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-07 13:13:55 -0700</bug_when>
    <thetext>Attachment 258522 did not pass style-queue:


ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:64:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/benchmarks/LockSpeedTest.cpp:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Lock.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 44 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>1115908</commentid>
    <comment_count>56</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-07 15:40:01 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/188169</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258040</attachid>
            <date>2015-08-02 14:14:27 -0700</date>
            <delta_ts>2015-08-04 11:55:23 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17063</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1dvcmRMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9Xb3JkTG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9Xb3Jk
TG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldvcmRMb2NrLmgiCisKKyNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRpdmVzLmgiCisK
K25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgeworCisvLyBUaGlzIGRhdGEgc3RydWN0dXJl
IHNlcnZlcyB0aHJlZSBwdXJwb3NlczoKKy8vCisvLyAxKSBBIHBhcmtpbmcgbWVjaGFuaXNtIGZv
ciB0aHJlYWRzIHRoYXQgZ28gdG8gc2xlZXAuIFRoYXQgaW52b2x2ZXMganVzdCBhIHN5c3RlbSBt
dXRleCBhbmQKKy8vICAgIGNvbmRpdGlvbiB2YXJpYWJsZS4KKy8vCisvLyAyKSBBIHF1ZXVlIG5v
ZGUgZm9yIHdoZW4gYSB0aHJlYWQgaXMgb24gc29tZSBXb3JkTG9jaydzIHF1ZXVlLgorLy8KKy8v
IDMpIFRoZSBxdWV1ZSBoZWFkLiBUaGlzIGlzIGtpbmQgb2YgZnVua3kuIFdoZW4gYSB0aHJlYWQg
aXMgdGhlIGhlYWQgb2YgYSBxdWV1ZSwgaXQgYWxzbyBzZXJ2ZXMgYXMKKy8vICAgIHRoZSBiYXNp
YyBxdWV1ZSBib29ra2VlcGluZyBkYXRhIHN0cnVjdHVyZS4gV2hlbiBhIHRocmVhZCBpcyBkZXF1
ZXVlZCwgdGhlIG5leHQgdGhyZWFkIGluIHRoZQorLy8gICAgcXVldWUgdGFrZXMgb24gdGhlIHF1
ZXVlIGhlYWQgZHV0aWVzLgorc3RydWN0IFRocmVhZERhdGEgeworICAgIC8vIFRoZSBwYXJraW5n
IG1lY2hhbmlzbS4KKyAgICBib29sIHNob3VsZFBhcmsgeyBmYWxzZSB9OworICAgIHN0ZDo6bXV0
ZXggcGFya2luZ0xvY2s7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRp
dGlvbjsKKworICAgIC8vIFRoZSBxdWV1ZSBub2RlLgorICAgIFRocmVhZERhdGEqIG5leHRJblF1
ZXVlIHsgbnVsbHB0ciB9OworCisgICAgLy8gVGhlIHF1ZXVlIGl0c2VsZi4KKyAgICBUaHJlYWRE
YXRhKiBxdWV1ZVRhaWwgeyBudWxscHRyIH07Cit9OworCitUaHJlYWRTcGVjaWZpYzxUaHJlYWRE
YXRhPiogdGhyZWFkRGF0YTsKKworVGhyZWFkRGF0YSogbXlUaHJlYWREYXRhKCkKK3sKKyAgICBU
aHJlYWREYXRhKiByZXN1bHQgPSB0aHJlYWREYXRhLT5nZXQoKTsKKyAgICBpZiAoIXJlc3VsdCkg
eworICAgICAgICByZXN1bHQgPSBuZXcgVGhyZWFkRGF0YSgpOworICAgICAgICB0aHJlYWREYXRh
LT5zZXQocmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgV29yZExvY2s6OmluaXRpYWxpemUoKQoreworICAgIHRo
cmVhZERhdGEgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFkRGF0YT4oKTsKK30KKwordm9pZCBX
b3JkTG9jazo6bG9ja1Nsb3coKQoreworICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisKKyAg
ICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBw
YXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgorICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9
IDQwOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdWludHB0cl90IGN1cnJlbnRXb3Jk
VmFsdWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCEoY3VycmVudFdv
cmRWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICYmIG1fd29yZC5jb21wYXJlRXhjaGFu
Z2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBpc0hlbGRCaXQpKSB7
CisgICAgICAgICAgICAvLyBTdWNjZXNzISBXZSBhY3F1aXJlZCB0aGUgbG9jay4KKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHF1ZXVl
IGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFy
b3VuZCBhZ2Fpbi4KKyAgICAgICAgaWYgKCEoY3VycmVudFdvcmRWYWx1ZSAmIH5tYXNrKSAmJiBz
cGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAgICAgICAgICAgIHNwaW5Db3VudCsrOworICAgICAg
ICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gTmVlZCB0byBwdXQgb3Vyc2VsdmVzIG9uIHRoZSBxdWV1
ZS4gQ3JlYXRlIHRoZSBxdWV1ZSBpZiBvbmUgZG9lcyBub3QgZXhpc3QuIFRoaXMgcmVxdXJpZXMK
KyAgICAgICAgLy8gb3duaW5nIHRoZSBxdWV1ZSBmb3IgYSBsaXR0bGUgYml0LiBUaGUgbG9jayB0
aGF0IGNvbnRyb2xzIHRoZSBxdWV1ZSBpcyBpdHNlbGYgYSBzcGlubG9jay4KKyAgICAgICAgLy8g
QnV0IGJlZm9yZSB3ZSBhY3F1aXJlIHRoZSBxdWV1ZSBzcGlubG9jaywgd2UgbWFrZSBzdXJlIHRo
YXQgd2UgaGF2ZSBhIFRocmVhZERhdGEgZm9yIHRoaXMKKyAgICAgICAgLy8gdGhyZWFkLgorICAg
ICAgICBUaHJlYWREYXRhKiBtZSA9IG15VGhyZWFkRGF0YSgpOworICAgICAgICBBU1NFUlQoIW1l
LT5zaG91bGRQYXJrKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+bmV4dEluUXVldWUpOworICAgICAg
ICBBU1NFUlQoIW1lLT5xdWV1ZVRhaWwpOworCisgICAgICAgIC8vIFJlbG9hZCB0aGUgY3VycmVu
dCB3b3JkIHZhbHVlLCBzaW5jZSBzb21lIHRpbWUgbWF5IGhhdmUgcGFzc2VkLgorICAgICAgICBj
dXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKworICAgICAgICAvLyBXZSBwcm9jZWVk
IG9ubHkgaWYgdGhlIHF1ZXVlIGxvY2sgaXMgbm90IGhlbGQsIHRoZSBXb3JkTG9jayBpcyBoZWxk
LCBhbmQgd2Ugc3VjY2VlZCBpbgorICAgICAgICAvLyBhY3F1aXJpbmcgdGhlIHF1ZXVlIGxvY2su
CisgICAgICAgIGlmICgoY3VycmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KQorICAgICAg
ICAgICAgfHwgIShjdXJyZW50V29yZFZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgfHwg
IW1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRXb3Jk
VmFsdWUgfCBsb2NrZWRRdWV1ZUJpdCkpIHsKKyAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6
OnlpZWxkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1l
LT5zaG91bGRQYXJrID0gdHJ1ZTsKKworICAgICAgICAvLyBXZSBvd24gdGhlIHF1ZXVlLiBOb2Jv
ZHkgY2FuIGVucXVldWUgb3IgZGVxdWV1ZSB1bnRpbCB3ZSdyZSBkb25lLiBBbHNvLCBpdCdzIG5v
dCBwb3NzaWJsZQorICAgICAgICAvLyB0byByZWxlYXNlIHRoZSBXb3JkTG9jayB3aGlsZSB3ZSBo
b2xkIHRoZSBxdWV1ZSBsb2NrLgorICAgICAgICBUaHJlYWREYXRhKiBxdWV1ZUhlYWQgPSBiaXR3
aXNlX2Nhc3Q8VGhyZWFkRGF0YSo+KGN1cnJlbnRXb3JkVmFsdWUgJiB+bWFzayk7CisgICAgICAg
IGlmIChxdWV1ZUhlYWQpIHsKKyAgICAgICAgICAgIC8vIFB1dCB0aGlzIHRocmVhZCBhdCB0aGUg
ZW5kIG9mIHRoZSBxdWV1ZS4KKyAgICAgICAgICAgIHF1ZXVlSGVhZC0+cXVldWVUYWlsLT5uZXh0
SW5RdWV1ZSA9IG1lOworICAgICAgICAgICAgcXVldWVoZWFkLT5xdWV1ZVRhaWwgPSBtZTsKKwor
ICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgcXVldWUgbG9jay4KKyAgICAgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIH5tYXNrKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KTsKKyAg
ICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKAor
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50V29yZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlICYg
fmxvY2tlZFF1ZXVlQml0KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIE1ha2UgdGhpcyB0aHJlYWQgYmUgdGhlIHF1ZXVlLWhlYWQuCisgICAgICAgICAg
ICBxdWV1ZUhlYWQgPSBtZTsKKyAgICAgICAgICAgIG1lLT5xdWV1ZVRhaWwgPSBtZTsKKworICAg
ICAgICAgICAgLy8gV2UgbmVlZCBhIENBUyBsb29wIHRvIGluc3RhbGwgdGhlIHF1ZXVlIGhlYWQu
IFRoaXMgQ0FTIGxvb3AgaXMganVzdCB0byBwcm90ZWN0IGFnYWluc3QKKyAgICAgICAgICAgIC8v
IGlzSGVsZEJpdCBjaGFuZ2luZy4gV2UgYWxzbyByZWxlYXNlIHRoZSBxdWV1ZSBsb2NrIGhlcmUu
CisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgY3VycmVudFdvcmRWYWx1
ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgICAgICAgICAgICAgLy8gTm9ib2R5IGNvdWxkIGhhdmUg
aW5zdGFsbGVkIGEgcXVldWUgYmVjYXVzZSB3ZSBsb2NrZWQgdGhlIHF1ZXVlLgorICAgICAgICAg
ICAgICAgIEFTU0VSVCghKGN1cnJlbnRXb3JkVmFsdWUgJiB+bWFzaykpOworICAgICAgICAgICAg
ICAgIC8vIFdlIGFyZSBob2xkaW5nIHRoZSBxdWV1ZSBsb2NrLgorICAgICAgICAgICAgICAgIEFT
U0VSVChjdXJyZW50V29yZFZhbHVlICYgbG9ja2VkUXVldWVCaXQpOworICAgICAgICAgICAgICAg
IC8vIE5vYm9keSBjYW4gcmVsZWFzZSB0aGUgbG9jayB3aGlsZSB3ZSBob2xkIHRoZSBxdWV1ZSBs
b2NrLgorICAgICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNIZWxkQml0
KTsKKworICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBuZXdXb3JkVmFsdWUgPSBjdXJyZW50V29y
ZFZhbHVlOworICAgICAgICAgICAgICAgIG5ld1dvcmRWYWx1ZSB8PSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihxdWV1ZUhlYWQpOworICAgICAgICAgICAgICAgIG5ld1dvcmRWYWx1ZSAmPSB+bG9j
a2VkUXVldWVCaXQ7CisKKyAgICAgICAgICAgICAgICBpZiAobV93b3JkLmNvbXBhcmVFeGNoYW5n
ZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwgbmV3V29yZFZhbHVlKSkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBdCB0aGlz
IHBvaW50IGV2ZXJ5b25lIHdobyBhY3F1aXJlcyB0aGUgcXVldWUgbG9jayB3aWxsIHNlZSBtZSBv
biB0aGUgcXVldWUsIGFuZCBhbnlvbmUgd2hvCisgICAgICAgIC8vIGFjcXVpcmVzIG1lJ3MgbG9j
ayB3aWxsIHNlZSB0aGF0IG1lIHdhbnRzIHRvIHBhcmsuIE5vdGUgdGhhdCBzaG91bGRQYXJrIG1h
eSBoYXZlIGJlZW4KKyAgICAgICAgLy8gY2xlYXJlZCBhcyBzb29uIGFzIHRoZSBxdWV1ZSBsb2Nr
IHdhcyByZWxlYXNlZCBhYm92ZSwgYnV0IGl0IHdpbGwgaGFwcGVuIHdoaWxlIHRoZQorICAgICAg
ICAvLyByZWxlYXNpbmcgdGhyZWFkIGhvbGRzIG1lJ3MgcGFya2luZ0xvY2suCisKKyAgICAgICAg
eworICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBh
cmtpbmdMb2NrKTsKKyAgICAgICAgICAgIHdoaWxlIChtZS0+c2hvdWxkUGFyaykKKyAgICAgICAg
ICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0KGxvY2tlcik7CisgICAgICAgIH0KKwor
ICAgICAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+bmV4
dEluUXVldWUpOworICAgICAgICBBU1NFUlQoIW1lLT5xdWV1ZVRhaWwpOworICAgICAgICAKKyAg
ICAgICAgLy8gTm93IHdlIGNhbiBsb29wIGFyb3VuZCBhbmQgdHJ5IHRvIGFjcXVpcmUgdGhlIGxv
Y2sgYWdhaW4uCisgICAgfQorfQorCit2b2lkIFdvcmRMb2NrOjp1bmxvY2tTbG93KCkKK3sKKyAg
ICAvLyBJZiB0aGUgZmFzdCBwYXRoIGZhaWxlZCwgaXQgY2FuIG9ubHkgYmUgYmVjYXVzZSBzb21l
b25lIHB1dCBhIHRocmVhZCBvbiB0aGUgcXVldWUgb3IgdGhlIHF1ZXVlCisgICAgLy8gbG9jayBp
cyBoZWxkLiBJZiB0aGUgcXVldWUgbG9jayBpcyBoZWxkLCBpdCBjYW4gb25seSBiZSBiZWNhdXNl
IHNvbWVvbmUgKndpbGwqIGVucXVldWUgYSB0aHJlYWQKKyAgICAvLyBvbnRvIHRoZSBxdWV1ZS4K
KworICAgIC8vIEFjcXVpcmUgdGhlIHF1ZXVlIGxvY2suCisgICAgZm9yICg7OykgeworICAgICAg
ICBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKworICAgICAgICBBU1NFUlQoY3Vy
cmVudFdvcmRWYWx1ZSAmIGlzSGVsZEJpdCk7CisgICAgICAgIAorICAgICAgICBpZiAoY3VycmVu
dFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KSB7CisgICAgICAgICAgICBzdGQ6OnRoaXNfdGhy
ZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJZiB0aGUgcXVldWUgbG9jayBpcyBub3QgaGVsZCwgdGhlbiB0aGVyZSBtdXN0IGJlIGFu
IGVudHJ5IG9uIHRoZSBxdWV1ZS4KKyAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiB+
bWFzayk7CisKKyAgICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRX
b3JkVmFsdWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBsb2NrZWRRdWV1ZUJpdCkpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICB1aW50cHRyX3QgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29y
ZC5sb2FkKCk7CisgICAgICAgIAorICAgIC8vIEFmdGVyIHdlIGFjcXVpcmUgdGhlIHF1ZXVlIGxv
Y2ssIHRoZSBXb3JkTG9jayBtdXN0IHN0aWxsIGJlIGhlbGQgYW5kIHRoZSBxdWV1ZSBtdXN0IGJl
CisgICAgLy8gbm9uLWVtcHR5LiBUaGUgcXVldWUgbXVzdCBiZSBub24tZW1wdHkgc2luY2Ugb25s
eSB0aGUgbG9ja1Nsb3coKSBtZXRob2QgY291bGQgaGF2ZSBoZWxkIHRoZQorICAgIC8vIHF1ZXVl
IGxvY2sgYW5kIGlmIGl0IGRpZCB0aGVuIGl0IG9ubHkgcmVsZWFzZXMgaXQgYWZ0ZXIgcHV0dGlu
ZyBzb21ldGhpbmcgb24gdGhlIHF1ZXVlLgorICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYg
aXNIZWxkQml0KTsKKyAgICBBU1NFUlQoIShjdXJyZW50V29yZFZhbHVlICYgbG9ja2VkUXVldWVC
aXQpKTsKKyAgICBUaHJlYWREYXRhKiBxdWV1ZUhlYWQgPSBiaXR3aXNlX2Nhc3Q8VGhyZWFkRGF0
YSo+KGN1cnJlbnRXb3JkVmFsdWUgJiB+bWFzayk7CisgICAgQVNTRVJUKHF1ZXVlSGVhZCk7CisK
KyAgICBUaHJlYWREYXRhKiBuZXdRdWV1ZUhlYWQgPSBxdWV1ZUhlYWQtPm5leHRJblF1ZXVlOwor
ICAgIC8vIEVpdGhlciB0aGlzIHdhcyB0aGUgb25seSB0aHJlYWQgb24gdGhlIHF1ZXVlLCBpbiB3
aGljaCBjYXNlIHdlIGRlbGV0ZSB0aGUgcXVldWUsIG9yIHRoZXJlCisgICAgLy8gYXJlIHN0aWxs
IG1vcmUgdGhyZWFkcyBvbiB0aGUgcXVldWUsIGluIHdoaWNoIGNhc2Ugd2UgY3JlYXRlIGEgbmV3
IHF1ZXVlIGhlYWQuCisgICAgaWYgKG5ld1F1ZXVlSGVhZCkKKyAgICAgICAgbmV3UXVldWVIZWFk
LT5xdWV1ZVRhaWwgPSBxdWV1ZUhlYWQtPnF1ZXVlVGFpbDsKKworICAgIC8vIENoYW5nZSB0aGUg
cXVldWUgaGVhZCwgcG9zc2libHkgcmVtb3ZpbmcgaXQgaWYgbmV3UXVldWVIZWFkIGlzIG51bGwu
IFRoaXMgaXMgYSBDQVMgbG9vcAorICAgIC8vIG91dCBvZiBwYXJhbm9pYS4gSXQgZG9lc24ndCBo
YXZlIHRvIGJlIHNpbmNlIHRoZSBzdGF0ZSBvZiB0aGUgbG9jayBjYW5ub3QgY2hhbmdlIHJpZ2h0
IG5vdy4KKyAgICAvLyBXZSB3b3VsZCBnZXQgbm8gcGVyZm9ybWFuY2Ugd2luIGZyb20gbWFraW5n
IHRoaXMgYW55dGhpbmcgYnV0IGEgQ0FTIGxvb3AsIGFuZCBpdCB3b3VsZCBtYWtlCisgICAgLy8g
aXQgY29uZnVzaW5nIHRvIGFkZCBtb3JlIGJpdHMgdG8gdGhlIGxvY2suCisgICAgZm9yICg7Oykg
eworICAgICAgICBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKworICAgICAgICBB
U1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzSGVsZEJpdCk7CisgICAgICAgIEFTU0VSVChjdXJy
ZW50V29yZFZhbHVlICYgbG9ja2VkUXVldWVCaXQpOworICAgICAgICBBU1NFUlQoKGN1cnJlbnRX
b3JkVmFsdWUgJiB+bWFzaykgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocXVldWVIZWFkKSk7
CisKKyAgICAgICAgdWludHB0cl90IG5ld1dvcmRWYWx1ZSA9IGN1cnJlbnRXb3JkVmFsdWU7Cisg
ICAgICAgIG5ld1dvcmRWYWx1ZSAmPSB+aXNIZWxkQml0OyAvLyBSZWxlYXNlIHRoZSBXb3JkTG9j
ay4KKyAgICAgICAgbmV3V29yZFZhbHVlICY9IH5sb2NrZWRRdWV1ZUJpdDsgLy8gUmVsZWFzZSB0
aGUgcXVldWUgbG9jay4KKyAgICAgICAgbmV3V29yZFZhbHVlICY9IG1hc2s7IC8vIENsZWFyIG91
dCB0aGUgb2xkIHF1ZXVlIGhlYWQuCisgICAgICAgIG5ld1dvcmRWYWx1ZSB8PSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihuZXdRdWV1ZUhlYWQpOyAvLyBJbnN0YWxsIG5ldyBxdWV1ZSBoZWFkLgor
ICAgICAgICAgICAgCisgICAgICAgIGlmIChtX2xvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJy
ZW50V29yZFZhbHVlLCBuZXdXb3JkVmFsdWUpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgLy8gTm93IHRoZSBsb2NrIGlzIGF2YWlsYWJsZSBmb3IgYWNxdWlzaXRpb24uIEJ1dCB3
ZSBqdXN0IGhhdmUgdG8gd2FrZSB1cCB0aGUgb2xkIHF1ZXVlIGhlYWQuCisgICAgLy8gQWZ0ZXIg
dGhhdCwgd2UncmUgZG9uZSEKKworICAgIHF1ZXVlSGVhZC0+bmV4dEluUXVldWUgPSBudWxscHRy
OworICAgIHF1ZXVlSGVhZC0+cXVldWVUYWlsID0gbnVsbHB0cjsKKworICAgIC8vIFdlIGRvIHRo
aXMgY2FyZWZ1bGx5IGJlY2F1c2UgdGhpcyBtYXkgcnVuIGVpdGhlciBiZWZvcmUgb3IgZHVyaW5n
IHRoZSBwYXJraW5nTG9jayBjcml0aWNhbAorICAgIC8vIHNlY3Rpb24gaW4gbG9ja1Nsb3coKS4K
KyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1lLT5w
YXJraW5nTG9jayk7CisgICAgICAgIG1lLT5zaG91bGRQYXJrID0gZmFsc2U7CisgICAgICAgIC8v
IFVzZSBub3RpZnlfYWxsKCkgb3V0IG9mIHBhcmFub2lhLiBJbiByZWFsaXR5LCBvbmx5IHRoZSBi
bG9ja2VkIHRocmVhZCBpcyB3YWl0aW5nIG9uCisgICAgICAgIC8vIHRoaXMgY29uZGl0aW9uIHZh
cmlhYmxlLgorICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CisgICAg
fQorCisgICAgLy8gVGhlIG9sZCBxdWV1ZSBoZWFkIGNhbiBub3cgY29udGVuZCBmb3IgdGhlIGxv
Y2sgYWdhaW4uIFdlJ3JlIGRvbmUhCit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9Xb3JkTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dv
cmRMb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9Xb3JkTG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX1dvcmRMb2NrX2gKKyNkZWZpbmUgV1RGX1dv
cmRMb2NrX2gKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBp
bGVyLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CisvLyBBIFdvcmRMb2NrIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0ZXggdGhhdCB3aWxsIGdlbmVy
YWxseSBvdXRwZXJmb3JtIGEgc3BpbmxvY2suIEluIGNhc2Ugb2YgaGlnaAorLy8gY29udGVudGlv
biB3aXRoIHNvbWUgdGhyZWFkcyBob2xkaW5nIHRoZSBsb2NrIGZvciBhIHdoaWxlIChlaXRoZXIg
YmVjYXVzZSB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcworLy8gcmVhbGx5IGxvbmcgb3IgdGhlIHRo
cmVhZCBnZXRzIHByZWVtcHRlZCB3aGlsZSBob2xkaW5nIHRoZSBsb2NrKSwgdGhlIFdvcmRMb2Nr
IHdpbGwgb3V0cGVyZm9ybSBhCisvLyBzcGlubG9jayBieSBhIGxvdCAtIHRoZSBzcGlubG9jayB3
aWxsIGNhdXNlIGFsbCB3YWl0aW5nIHRocmVhZHMgdG8gZWF0IHVwIENQVSB3aGlsZSB0aGUgV29y
ZExvY2sKKy8vIHdpbGwgcHV0IHRoZW0gdG8gc2xlZXAuIFRoZSBXb3JkTG9jayBoYXMgdGhlIGZv
bGxvd2luZyBuaWNlIHByb3BlcnRpZXM6CisvLworLy8gLSBVbmNvbnRlbmRlZCBmYXN0IHBhdGhz
IGZvciBsb2NrIGFjcXVpc2l0aW9uIGFuZCBsb2NrIHJlbGVhc2UgdGhhdCBhcmUgYWxtb3N0IGFz
IGZhc3QgYXMgdGhlCisvLyAgIHVuY29udGVuZGVkIGZhc3QgcGF0aHMgb2YgYSBzcGlubG9jay4g
VGhlIG9ubHkgb3ZlcmhlYWQgaXMgdGhhdCB0aGUgc3BpbmxvY2sgd2lsbCBub3QgQ0FTIG9uCisv
LyAgIHJlbGVhc2UsIHdoaWxlIFdvcmRMb2NrIHdpbGwgQ0FTLgorLy8KKy8vIC0gQ29udGVuZGVk
IGZhc3QgcGF0aCB0aGF0IGF0dGVtcHRzIHRvIHNwaW4gYW5kIHlpZWxkIGZvciBzb21lIG51bWJl
ciBvZiB0aW1lcy4gRm9yIGNyaXRpY2FsCisvLyAgIHNlY3Rpb25zIHRoYXQgYXJlIGhlbGQgb25s
eSBicmllZmx5LCB0aGlzIGFsbG93cyBXb3JkTG9jayB0byBwZXJmb3JtIGFzIHdlbGwgYXMgdGhl
IGJlc3QKKy8vICAgc3BpbmxvY2suCisvLworLy8gLSBDb250ZW5kZWQgc2xvdyBwYXRoIHRoYXQg
ZW5xdWV1ZXMgdGhlIGNvbnRlbmRpbmcgdGhyZWFkIGFuZCBjYXVzZXMgaXQgdG8gd2FpdCBvbiBh
IGNvbmRpdGlvbgorLy8gICB2YXJpYWJsZSB1bnRpbCB0aGUgbG9jayBpcyByZWxlYXNlZC4gVGhp
cyBpcyB0aGUgb25seSBjYXNlIGluIHdoaWNoIHN5c3RlbSBtdXRleGVzIGFuZCBjb25kaXRpb24K
Ky8vICAgdmFyaWFibGVzIGFyZSB1c2VkLiBUaGlzIGNhc2UgaXMgcmFyZSBhbmQgc2VsZi1saW1p
dGluZzogaXQgd2lsbCBvbmx5IGhhcHBlbiB3aGVuIGEgbG9jayBpcyBoZWxkCisvLyAgIGZvciBs
b25nIGVub3VnaCB0aGF0IHNwaW5uaW5nIHNvbWUgbnVtYmVyIG9mIHRpbWVzIGRvZXNuJ3QgYWNx
dWlyZSBpdC4KKy8vCisvLyAtIFZlcnkgbG93IG1lbW9yeSB1c2FnZS4gRWFjaCBXb3JkTG9jayBy
ZXF1aXJlcyBvbmx5IHNpemVvZih2b2lkKikgbWVtb3J5LiBXaGVuIHRoZSBjb250ZW5kZWQgc2xv
dworLy8gICBwYXRoIGlzIGFjdGl2YXRlZCwgV29yZExvY2sgb25seSByZWxpZXMgb24gZWFjaCB0
aHJlYWQgaGF2aW5nIGEgcHJlYWxsb2NhdGVkIHRocmVhZC1zcGVjaWZpYyBkYXRhCisvLyAgIHN0
cnVjdHVyZSBjYWxsZWQgVGhyZWFkRGF0YSB0aGF0LCB0b2dldGhlciB3aXRoIHRoZSBXb3JkTG9j
ayBpdHNlbGYsIGlzIHVzZWQgdG8gYnVpbGQgdXAgYSB0aHJlYWQKKy8vICAgcXVldWUuIFNvLCB0
aGUgdG90YWwgbWVtb3J5IHVzYWdlIG9mIGFsbCBXb3JkTG9ja3MgaXMgc3RpbGwgYm91bmRlZCBi
eToKKy8vCisvLyAgICAgICBudW1iZXJPZldvcmRMb2NrcyAqIHNpemVvZih2b2lkKikgKyBudW1i
ZXJPZlRocmVhZHMgKiBzaXplb2YoVGhyZWFkRGF0YSkKKy8vCisvLyAgIFdoZXJlIFRocmVhZERh
dGEgaXMgYSBkZWNlbnRseSBsYXJnZSBkYXRhIHN0cnVjdHVyZSwgYnV0IHdlIHdpbGwgb25seSBl
dmVyIGhhdmUgb25lIHBlciB0aHJlYWQsCisvLyAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBv
ZiBXb3JkTG9ja3MgaW4gbWVtb3J5LiBBbm90aGVyIHdheSB0byB2aWV3IHRoaXMgaXMgdGhhdCB0
aGUgd29yc3QgY2FzZQorLy8gICBtZW1vcnkgdXNhZ2UgcGVyIFdvcmRMb2NrIGlzOgorLy8KKy8v
ICAgICAgIHNpemVvZih2b2lkKikgKyBudW1iZXJPZlRocmVhZHMgLyBudW1iZXJPZldvcmRMb2Nr
cyAqIHNpemVvZihUaHJlYWREYXRhKQorLy8KKy8vICAgU28sIHVubGVzcyB5b3UgaGF2ZSBhIHNt
YWxsIG51bWJlciBvZiBXb3JkTG9ja3MgKG9yLCBhIGxhcmdlIG51bWJlciBvZiB0aHJlYWRzLCB3
aGljaCBpcyBmYXIgbGVzcworLy8gICBsaWtlbHkpLCB0aGUgbWVtb3J5IHVzYWdlIHBlci1Xb3Jk
TG9jayBpcyBzdGlsbCBnb2luZyB0byBiZSBzb21ld2hlcmUgYXJvdW5kIHNpemVvZih2b2lkKiku
CisvLworLy8gLSBCYXJnaW5nIGZhc3QgcGF0aHMuIFRoZSBXb3JkTG9jayBpcyB0dW5lZCBmb3Ig
bWF4aW11bSB0aHJvdWdocHV0IHJhdGhlciB0aGFuIG1heGltdW0gZmFpcm5lc3MuIElmCisvLyAg
IGEgdGhyZWFkIHJlbGVhc2VzIGEgV29yZExvY2sgdGhhdCB3YXMgY29udGVuZGVkIGFuZCBoYWQg
YSBxdWV1ZSBvZiB3YWl0aW5nIHRocmVhZHMsIHRoZW4gaXQgd2lsbAorLy8gICB3YWtlIHVwIHRo
ZSBoZWFkIG9mIHRoZSBxdWV1ZSwgYnV0IGl0IHdpbGwgYWxzbyBtYXJrIHRoZSBsb2NrIGFzIGJl
aW5nIGF2YWlsYWJsZS4gVGhpcyBtZWFucyB0aGF0CisvLyAgIHNvbWUgb3RoZXIgdGhyZWFkIHRo
YXQgaXMganVzdCBub3cgYXR0ZW1wdGluZyB0byBhY3F1aXJlIHRoZSBsb2NrIG1heSBnZXQgaXQg
YmVmb3JlIHRoZSB0aHJlYWQKKy8vICAgdGhhdCBnb3Qgd29rZW4gdXAuIFdoZW4gYSB0aHJlYWQg
YmFyZ2VzIGludG8gdGhlIGxvY2ssIHRoZSB0aHJlYWQgdGhhdCBnb3Qgd29rZW4gdXAgd2lsbCBz
aW1wbHkKKy8vICAgZ28gYmFjayB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZS4gVGhlIGJhcmdpbmcg
YmVoYXZpb3IgZW5kcyB1cCBiZWluZyBwcm9iYWJpbGlzdGljIG9uIG1vc3QKKy8vICAgcGxhdGZv
cm1zIGFuZCBldmVuIHRob3VnaCBpdCBtYXkgYmUgdW5mYWlyIHRvIHNvbWUgdGhyZWFkIGF0IHNv
bWUgbW9tZW50IGluIHRpbWUsIGl0IHdpbGwgcmFyZWx5CisvLyAgIGhhdmUgYSBsb25nIHN0cmVh
ayBvZiB1bmZhaXJuZXNzIHRvd2FyZHMgYW55IHBhcnRpY3VsYXIgdGhyZWFkOiBldmVudHVhbGx5
IGVhY2ggdGhyZWFkIHdhaXRpbmcgb24KKy8vICAgdGhlIGxvY2sgd2lsbCBnZXQgdG8gaGF2ZSBh
IHR1cm4gc28gbG9uZyBhcyBubyB0aHJlYWQganVzdCBob2xkcyB0aGUgbG9jayBmb3JldmVyLiBU
aGF0IHNhaWQsCisvLyAgIHRoZXJlICppcyogYSBjaGFuY2Ugb2YgcGF0aG9sb2dpZXMgaWYgeW91
IGhhdmUgbWFueSB0aHJlYWRzIC0gaG90IHRocmVhZHMgYXJlIG1vcmUgbGlrZWx5IHRvCisvLyAg
IGJhcmdlIHNvIHRocmVhZHMgdGhhdCB3YWl0IGZvciBhIGxvbmcgdGltZSBvbiB0aGUgcXVldWUg
bWF5IGdldCBzdGFydmVkIC0gYnV0IHdlIGRvbid0IGhhdmUKKy8vICAgZW5vdWdoIHRocmVhZHMg
aW4gV2ViS2l0IGZvciB0aGlzIHRvIGhhcHBlbi4KKworY2xhc3MgV29yZExvY2sgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFdvcmRMb2NrKTsKK3B1YmxpYzoKKyAgICBXb3JkTG9jaygpCisg
ICAgeworICAgICAgICBtX3dvcmQuc3RvcmUoMCk7CisgICAgfQorCisgICAgdm9pZCBsb2NrKCkK
KyAgICB7CisgICAgICAgIGlmIChMSUtFTFkobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoMCwg
aXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpIHsKKyAgICAgICAgICAgIC8v
IExvY2sgYWNxdWlyZWQhCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBsb2NrU2xvdygpOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrKCkKKyAgICB7CisgICAgICAg
IGlmIChMSUtFTFkobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsKKyAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQs
IGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICB1bmxvY2tTbG93KCk7CisgICAgfQorCisgICAgYm9vbCBpc0hlbGQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd29yZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2Fj
cXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKworICAgIC8vIFRoaXMgaXMgY2FsbGVkIGJ5IGlu
aXRpYWxpemVUaHJlYWRpbmcoKS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CisgICAg
Citwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgaXNIZWxkQml0ID0gMTsKKyAg
ICBzdGF0aWMgY29uc3QgdWludHB0cl90IGxvY2tlZFF1ZXVlQml0ID0gMjsKKyAgICBzdGF0aWMg
Y29uc3QgdWludHB0cl90IG1hc2sgPSAzOworCisgICAgdm9pZCBsb2NrU2xvdygpOworICAgIHZv
aWQgdW5sb2NrU2xvdygpOworICAgIAorICAgIEF0b21pYzx1aW50cHRyX3Q+IG1fd29yZDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OldvcmRMb2NrOworCisjZW5kaWYg
Ly8gV1RGX1dvcmRMb2NrX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258193</attachid>
            <date>2015-08-04 11:55:23 -0700</date>
            <delta_ts>2015-08-05 14:08:10 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48337</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkocmV2aXNpb24g
MTg3ODY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNs
dWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+Ci0j
aW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogICAgIHZvaWQgZGlkUHJvbW90
ZSgpOwogCiAgICAgdW5zaWduZWQgbGl2ZUJ5dGVzKCk7Ci0gICAgYm9vbCBzaG91bGRSZXBvcnRM
aXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyKTsKLSAgICB2b2lkIHJlcG9y
dExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpTQ2VsbCosIENvcHlUb2tlbiwgdW5zaWduZWQp
OworICAgIGJvb2wgc2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqIG93
bmVyKTsKKyAgICB2b2lkIHJlcG9ydExpdmVCeXRlcyhMb2NrSG9sZGVyJiwgSlNDZWxsKiwgQ29w
eVRva2VuLCB1bnNpZ25lZCk7CiAgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5n
KHVuc2lnbmVkKTsKICAgICB2b2lkIGRpZFN1cnZpdmVHQygpOwogICAgIHZvaWQgZGlkRXZhY3Vh
dGVCeXRlcyh1bnNpZ25lZCk7CkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aGFzV29ya0xpc3QoKTsKICAgICBDb3B5V29ya0xpc3QmIHdvcmtMaXN0KCk7Ci0gICAgU3Bpbkxv
Y2smIHdvcmtMaXN0TG9jaygpIHsgcmV0dXJuIG1fd29ya0xpc3RMb2NrOyB9CisgICAgTG9jayYg
d29ya0xpc3RMb2NrKCkgeyByZXR1cm4gbV93b3JrTGlzdExvY2s7IH0KIAogcHJpdmF0ZToKICAg
ICBDb3BpZWRCbG9jayhzaXplX3QpOwpAQCAtOTgsNyArOTgsNyBAQCBwcml2YXRlOgogCiAgICAg
c2l6ZV90IG1fY2FwYWNpdHk7CiAKLSAgICBTcGluTG9jayBtX3dvcmtMaXN0TG9jazsKKyAgICBM
b2NrIG1fd29ya0xpc3RMb2NrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb3B5V29ya0xpc3Q+IG1f
d29ya0xpc3Q7CiAKICAgICBzaXplX3QgbV9yZW1haW5pbmc7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTg3ODY1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi1p
bmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6c2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKFNwaW5Mb2NrSG9s
ZGVyJiwgSlNDZWxsKiBvd25lcikKK2lubGluZSBib29sIENvcGllZEJsb2NrOjpzaG91bGRSZXBv
cnRMaXZlQnl0ZXMoTG9ja0hvbGRlciYsIEpTQ2VsbCogb3duZXIpCiB7CiAgICAgLy8gV2Ugd2Fu
dCB0byBhZGQgdG8gbGl2ZSBieXRlcyBpZiB0aGUgb3duZXIgaXNuJ3QgcGFydCBvZiB0aGUgcmVt
ZW1iZXJlZCBzZXQgb3IKICAgICAvLyBpZiB0aGlzIGJsb2NrIHdhcyBhbGxvY2F0ZWQgZHVyaW5n
IHRoZSBsYXN0IGN5Y2xlLiAKQEAgLTQzLDcgKzQzLDcgQEAgaW5saW5lIGJvb2wgQ29waWVkQmxv
Y2s6OnNob3VsZFJlcG9ydExpdgogICAgIHJldHVybiAhSGVhcDo6aXNSZW1lbWJlcmVkKG93bmVy
KSB8fCAhbV9pc09sZDsKIH0KIAotaW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVC
eXRlcyhTcGluTG9ja0hvbGRlciYsIEpTQ2VsbCogb3duZXIsIENvcHlUb2tlbiB0b2tlbiwgdW5z
aWduZWQgYnl0ZXMpCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKExv
Y2tIb2xkZXImLCBKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4gdG9rZW4sIHVuc2lnbmVkIGJ5dGVz
KQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDE4Nzg2NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9PU0FsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQmxvY2suaD4KLSNpbmNsdWRlIDx3
dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCkBAIC0x
MTMsNyArMTEzLDcgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8Q29waWVkQmxvY2sqPiBtX2Js
b2NrU2V0OwogCi0gICAgU3BpbkxvY2sgbV90b1NwYWNlTG9jazsKKyAgICBMb2NrIG1fdG9TcGFj
ZUxvY2s7CiAKICAgICBzdHJ1Y3QgQ29waWVkR2VuZXJhdGlvbiB7CiAgICAgICAgIENvcGllZEdl
bmVyYXRpb24oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
U3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDE4Nzg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3
IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGUKICAgICBBU1NFUlQo
YmxvY2stPmNhbkJlUmVjeWNsZWQoKSk7CiAgICAgQVNTRVJUKCFibG9jay0+bV9pc1Bpbm5lZCk7
CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOwor
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9jayk7CiAgICAgICAgIG1fYmxv
Y2tTZXQucmVtb3ZlKGJsb2NrKTsKICAgICAgICAgaWYgKGNvbGxlY3Rpb25UeXBlID09IEVkZW5D
b2xsZWN0aW9uKQogICAgICAgICAgICAgbV9uZXdHZW4uZnJvbVNwYWNlLT5yZW1vdmUoYmxvY2sp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWRE
YXRhLmgJKHJldmlzaW9uIDE4Nzg2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
VGhyZWFkU2hhcmVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5j
bHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJp
YWJsZT4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9TcGluTG9jay5o
PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTk3LDcgKzk3LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6Om11dGV4IG1f
b3BhcXVlUm9vdHNNdXRleDsKICAgICBIYXNoU2V0PHZvaWQqPiBtX29wYXF1ZVJvb3RzOwogCi0g
ICAgU3BpbkxvY2sgbV9jb3B5TG9jazsKKyAgICBMb2NrIG1fY29weUxvY2s7CiAgICAgVmVjdG9y
PENvcGllZEJsb2NrKj4gbV9ibG9ja3NUb0NvcHk7CiAgICAgc2l6ZV90IG1fY29weUluZGV4Owog
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19ibG9ja0ZyYWdtZW50TGVuZ3RoID0gMzI7CkBAIC0x
MTUsNyArMTE1LDcgQEAgcHJpdmF0ZToKIAogaW5saW5lIHZvaWQgR0NUaHJlYWRTaGFyZWREYXRh
OjpnZXROZXh0QmxvY2tzVG9Db3B5KHNpemVfdCYgc3RhcnQsIHNpemVfdCYgZW5kKQogewotICAg
IFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fY29weUxvY2spOwogICAgIHN0YXJ0ID0gbV9jb3B5SW5kZXg7CiAgICAgZW5kID0gc3Rk
OjptaW4obV9ibG9ja3NUb0NvcHkuc2l6ZSgpLCBtX2NvcHlJbmRleCArIHNfYmxvY2tGcmFnbWVu
dExlbmd0aCk7CiAgICAgbV9jb3B5SW5kZXggPSBlbmQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9MaXN0YWJsZUhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9MaXN0YWJsZUhhbmRsZXIuaAkocmV2aXNpb24gMTg3ODY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGlzdGFibGVIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvTG9j
a2VyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5M
b2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJp
bWl0aXZlcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIHZvaWQgYWRkVGhyZWFkU2FmZShUKiBoYW5kbGVyKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICAgICAgICAgIGFkZE5vdFRocmVh
ZFNhZmUoaGFuZGxlcik7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMDMsNyArMTAzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIG1fZmlyc3QgPSBoYW5kbGVyOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBTcGluTG9jayBtX2xvY2s7CisgICAgICAgIExvY2sgbV9sb2NrOwogICAg
ICAgICBUKiBtX2ZpcnN0OwogICAgIH07CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTg3ODY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1MCw3ICsyNTAsNyBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxh
dGVyKEpTQ2VsCiAKICAgICBBU1NFUlQoaGVhcCgpLT5tX3N0b3JhZ2VTcGFjZS5jb250YWlucyhi
bG9jaykpOwogCi0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZibG9jay0+d29ya0xpc3RMb2Nr
KCkpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZibG9jay0+d29ya0xpc3RMb2NrKCkpOwogICAg
IGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbiB8fCBi
bG9jay0+c2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKGxvY2tlciwgb3duZXIpKSB7CiAgICAgICAgIG1f
Ynl0ZXNDb3BpZWQgKz0gYnl0ZXM7CiAgICAgICAgIGJsb2NrLT5yZXBvcnRMaXZlQnl0ZXMobG9j
a2VyLCBvd25lciwgdG9rZW4sIGJ5dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlckxvZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCShyZXZpc2lvbiAxODc4NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKLSNpbmNsdWRlIDx3dGYvQnl0
ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE4Nzg2NSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAKIAkJMEZEODFBQzUxNTRGQjIyRTAwOTgz
RTcyIC8qIEZhc3RCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMEZEREJGQTcxNjY2REZB
MzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJp
bmdQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBGRERCRkE4MTY2NkRGQTMwMEM1NUZFRiAvKiBT
dHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmgg
Ki87IH07CisJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY4MUI2RkZDOTYwMDQw
MEU3QyAvKiBMb2NrLmNwcCAqLzsgfTsKKwkJMEZFMTY0NkIxQjZGRkM5NjAwNDAwRTdDIC8qIExv
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2
NDY5MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgw
MDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICov
OyB9OwogCQkxNDAyMkY0MTE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hIGluIEZyYW1l
d29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMjJGNDAxOEY1QzNG
QzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLzsgfTsKIAkJMTQzRjYxMUYxNTY1RjBGOTAwREI1
MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovOyB9OwpA
QCAtMzIxLDYgKzMyMyw4IEBACiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0
VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVG
IC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkUxNjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7
IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CkBAIC03NzAsNiArNzc0LDggQEAKIAkJCQk3Q0REN0ZGOTE4NkQyQTU0MDA3NDMzQ0QgLyogSXRl
cmF0b3JSYW5nZS5oICovLAogCQkJCUE3MERBMDgzMTc5OUYwNEQwMDUyOUE5QiAvKiBMaXN0RHVt
cC5oICovLAogCQkJCUE4QTQ3MkMxMTUxQTgyNUEwMDQxMjNGRiAvKiBMaXN0SGFzaFNldC5oICov
LAorCQkJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLywKKwkJCQkwRkUx
NjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oICovLAogCQkJCUE4QTQ3MkMzMTUxQTgyNUEw
MDQxMjNGRiAvKiBMb2NrZXIuaCAqLywKIAkJCQkxNDQ3QUVDODE4RkNFNTk0MDBCM0Q3RkYgLyog
bWJtYWxsb2MuY3BwICovLAogCQkJCUE4QTQ3MkNBMTUxQTgyNUIwMDQxMjNGRiAvKiBNRDUuY3Bw
ICovLApAQCAtMTIwNiw2ICsxMjEyLDcgQEAKIAkJCQlBOEE0NzQ2QTE1MUE4MjVCMDA0MTIzRkYg
LyogVVRGOC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQjkxNTFBODI1QjAwNDEyM0ZGIC8q
IHV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ3RDE1MUE4MjVCMDA0MTIzRkYgLyog
VmFsdWVDaGVjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFMTY0NkIxQjZGRkM5NjAwNDAwRTdD
IC8qIExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDdFMTUxQTgyNUIwMDQxMjNGRiAv
KiBWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDdGMTUxQTgyNUIwMDQxMjNGRiAv
KiBWZWN0b3JUcmFpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2
Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTEzMzcsNiArMTM0NCw3IEBA
CiAJCQkJQThBNDczOUUxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQThBNDczQTAxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVNYXRoLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4QTQ3M0EyMTUxQTgyNUIwMDQxMjNGRiAvKiBEZWNpbWFsTnVtYmVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0FFMTUxQTgyNUIwMDQxMjNGRiAvKiBkaXktZnAu
Y2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNCMDE1MUE4MjVCMDA0MTIzRkYgLyogZG91Ymxl
LWNvbnZlcnNpb24uY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNCQTE1MUE4MjVCMDA0MTIz
RkYgLyogZHRvYS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvYmVuY2htYXJr
cy9Mb2NrU3BlZWRUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL2JlbmNobWFya3Mv
TG9ja1NwZWVkVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL2JlbmNobWFya3Mv
TG9ja1NwZWVkVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSB7CisKK3Vuc2ln
bmVkIG51bVRocmVhZEdyb3VwczsKK3Vuc2lnbmVkIG51bVRocmVhZHNQZXJHcm91cDsKK3Vuc2ln
bmVkIHdvcmtQZXJDcml0aWNhbFNlY3Rpb247Cit1bnNpZ25lZCBudW1Ob2lzZVRocmVhZHM7Cit1
bnNpZ25lZCBudW1JdGVyYXRpb25zOworICAgIAordm9pZCB1c2FnZSgpCit7CisgICAgcHJpbnRm
KCJVc2FnZTogTG9ja1NwZWVkVGVzdCBzcGlubG9ja3xsb2NrfG11dGV4fGFsbCA8bnVtIHRocmVh
ZCBncm91cHM+IDxudW0gdGhyZWFkcyBwZXIgZ3JvdXA+IDx3b3JrIHBlciBjcml0aWNhbCBzZWN0
aW9uPiA8bnVtIG5vaXNlIHRocmVhZHM+IDxudW0gaXRlcmF0aW9ucz5cbiIpOworICAgIGV4aXQo
MSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgordm9pZCBydW5CZW5jaG1hcmso
Y29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9ja1R5cGVbXT4gbG9j
a3MgPSBzdGQ6Om1ha2VfdW5pcXVlPExvY2tUeXBlW10+KG51bVRocmVhZEdyb3Vwcyk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPGRvdWJsZVtdPiB3b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8ZG91Ymxl
W10+KG51bVRocmVhZEdyb3Vwcyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZp
ZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1U
aHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOworICAgIHN0ZDo6dW5pcXVlX3B0cjxU
aHJlYWRJZGVudGlmaWVyW10+IG5vaXNlVGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFk
SWRlbnRpZmllcltdPihudW1Ob2lzZVRocmVhZHMpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxkb3Vi
bGVbXT4gbm9pc2VDb3VudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPGRvdWJsZVtdPihudW1Ob2lzZVRo
cmVhZHMpOworCisgICAgdm9sYXRpbGUgYm9vbCBzaG91bGRTdG9wID0gZmFsc2U7CisgICAgZm9y
ICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bU5vaXNlVGhyZWFkczsgdGhyZWFkSW5kZXgtLTsp
IHsKKyAgICAgICAgbm9pc2VDb3VudHNbdGhyZWFkSW5kZXhdID0gMDsKKyAgICAgICAgbm9pc2VU
aHJlYWRzW3RocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICJOb2lzZSBU
aHJlYWQiLAorICAgICAgICAgICAgWyZzaG91bGRTdG9wLCAmbm9pc2VDb3VudHMsIHRocmVhZElu
ZGV4XSAoKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCFzaG91bGRTdG9wKQorICAgICAgICAg
ICAgICAgICAgICBub2lzZUNvdW50c1t0aHJlYWRJbmRleF0rKzsKKyAgICAgICAgICAgIH0pOwor
ICAgIH0KKworICAgIGRvdWJsZSBiZWZvcmUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVN
UygpOworICAgIAorICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRleCA9IG51bVRocmVh
ZEdyb3VwczsgdGhyZWFkR3JvdXBJbmRleC0tOykgeworICAgICAgICB3b3Jkc1t0aHJlYWRHcm91
cEluZGV4XSA9IDA7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRo
cmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKKyAgICAgICAgICAgIHRocmVhZHNbdGhy
ZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IGNyZWF0
ZVRocmVhZCgKKyAgICAgICAgICAgICAgICAiQmVuY2htYXJrIHRocmVhZCIsCisgICAgICAgICAg
ICAgICAgW3RocmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRzXSAoKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUl0ZXJhdGlvbnM7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2tzW3RocmVhZEdyb3VwSW5kZXhdLmxvY2soKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHdvcmtQZXJDcml0aWNhbFNlY3Rp
b247IGotLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jkc1t0aHJlYWRHcm91
cEluZGV4XSsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3Vw
SW5kZXhdICo9IDEuMDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBsb2Nrc1t0aHJlYWRHcm91cEluZGV4XS51bmxvY2soKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQ
ZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspCisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9u
KHRocmVhZHNbdGhyZWFkSW5kZXhdKTsKKyAgICBzaG91bGRTdG9wID0gdHJ1ZTsKKyAgICBkb3Vi
bGUgbm9pc2VDb3VudCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bU5v
aXNlVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKKyAgICAgICAgd2FpdEZvclRocmVhZENvbXBs
ZXRpb24obm9pc2VUaHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgIG5vaXNlQ291bnQgKz0g
bm9pc2VDb3VudHNbdGhyZWFkSW5kZXhdOworICAgIH0KKworICAgIGRvdWJsZSBhZnRlciA9IG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisKKyAgICBwcmludGYoIiVzOiAlLjNsZiBt
cywgJS4wbGYgbm9pc2UuXG4iLCBuYW1lLCBhZnRlciAtIGJlZm9yZSwgbm9pc2VDb3VudCk7Cit9
CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCit7CisgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgCisgICAgaWYg
KGFyZ2MgIT0gNworICAgICAgICB8fCBzc2NhbmYoYXJndlsyXSwgIiV1IiwgJm51bVRocmVhZEdy
b3VwcykgIT0gMQorICAgICAgICB8fCBzc2NhbmYoYXJndlszXSwgIiV1IiwgJm51bVRocmVhZHNQ
ZXJHcm91cCkgIT0gMQorICAgICAgICB8fCBzc2NhbmYoYXJndls0XSwgIiV1IiwgJndvcmtQZXJD
cml0aWNhbFNlY3Rpb24pICE9IDEKKyAgICAgICAgfHwgc3NjYW5mKGFyZ3ZbNV0sICIldSIsICZu
dW1Ob2lzZVRocmVhZHMpICE9IDEKKyAgICAgICAgfHwgc3NjYW5mKGFyZ3ZbNl0sICIldSIsICZu
dW1JdGVyYXRpb25zKSAhPSAxKQorICAgICAgICB1c2FnZSgpOworCisgICAgYm9vbCBkaWRSdW4g
PSBmYWxzZTsKKyAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAic3BpbmxvY2siKSB8fCAhc3RyY21w
KGFyZ3ZbMV0sICJhbGwiKSkgeworICAgICAgICBydW5CZW5jaG1hcms8U3BpbkxvY2s+KCJTcGlu
TG9jayIpOworICAgICAgICBkaWRSdW4gPSB0cnVlOworICAgIH0KKyAgICBpZiAoIXN0cmNtcChh
cmd2WzFdLCAibG9jayIpIHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CisgICAgICAgIHJ1
bkJlbmNobWFyazxMb2NrPigiV1RGIExvY2siKTsKKyAgICAgICAgZGlkUnVuID0gdHJ1ZTsKKyAg
ICB9CisgICAgaWYgKCFzdHJjbXAoYXJndlsxXSwgIm11dGV4IikgfHwgIXN0cmNtcChhcmd2WzFd
LCAiYWxsIikpIHsKKyAgICAgICAgcnVuQmVuY2htYXJrPE11dGV4PigiUGxhdGZvcm0gTXV0ZXgi
KTsKKyAgICAgICAgZGlkUnVuID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWRpZFJ1bikKKyAg
ICAgICAgdXNhZ2UoKTsKKworICAgIHJldHVybiAwOworfQpJbmRleDogU291cmNlL1dURi93dGYv
TG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9jay5oIgorCisjaW5jbHVkZSAiVGhyZWFk
U3BlY2lmaWMuaCIKKyNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRpdmVzLmgiCisjaW5jbHVkZSA8
bXV0ZXg+CisjaW5jbHVkZSA8dGhyZWFkPgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNl
IHsKKworLy8gVGhpcyBkYXRhIHN0cnVjdHVyZSBzZXJ2ZXMgdGhyZWUgcHVycG9zZXM6CisvLwor
Ly8gMSkgQSBwYXJraW5nIG1lY2hhbmlzbSBmb3IgdGhyZWFkcyB0aGF0IGdvIHRvIHNsZWVwLiBU
aGF0IGludm9sdmVzIGp1c3QgYSBzeXN0ZW0gbXV0ZXggYW5kCisvLyAgICBjb25kaXRpb24gdmFy
aWFibGUuCisvLworLy8gMikgQSBxdWV1ZSBub2RlIGZvciB3aGVuIGEgdGhyZWFkIGlzIG9uIHNv
bWUgTG9jaydzIHF1ZXVlLgorLy8KKy8vIDMpIFRoZSBxdWV1ZSBoZWFkLiBUaGlzIGlzIGtpbmQg
b2YgZnVua3kuIFdoZW4gYSB0aHJlYWQgaXMgdGhlIGhlYWQgb2YgYSBxdWV1ZSwgaXQgYWxzbyBz
ZXJ2ZXMgYXMKKy8vICAgIHRoZSBiYXNpYyBxdWV1ZSBib29ra2VlcGluZyBkYXRhIHN0cnVjdHVy
ZS4gV2hlbiBhIHRocmVhZCBpcyBkZXF1ZXVlZCwgdGhlIG5leHQgdGhyZWFkIGluIHRoZQorLy8g
ICAgcXVldWUgdGFrZXMgb24gdGhlIHF1ZXVlIGhlYWQgZHV0aWVzLgorc3RydWN0IFRocmVhZERh
dGEgeworICAgIC8vIFRoZSBwYXJraW5nIG1lY2hhbmlzbS4KKyAgICBib29sIHNob3VsZFBhcmsg
eyBmYWxzZSB9OworICAgIHN0ZDo6bXV0ZXggcGFya2luZ0xvY2s7CisgICAgc3RkOjpjb25kaXRp
b25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlvbjsKKworICAgIC8vIFRoZSBxdWV1ZSBub2RlLgor
ICAgIFRocmVhZERhdGEqIG5leHRJblF1ZXVlIHsgbnVsbHB0ciB9OworCisgICAgLy8gVGhlIHF1
ZXVlIGl0c2VsZi4KKyAgICBUaHJlYWREYXRhKiBxdWV1ZVRhaWwgeyBudWxscHRyIH07Cit9Owor
CitUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPiogdGhyZWFkRGF0YTsKKworVGhyZWFkRGF0YSog
bXlUaHJlYWREYXRhKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9u
Y2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIGluaXRpYWxpemVPbmNlLAorICAgICAg
ICBbXXsKKyAgICAgICAgICAgIHRocmVhZERhdGEgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFk
RGF0YT4oKTsKKyAgICAgICAgfSk7CisKKyAgICByZXR1cm4gKnRocmVhZERhdGE7Cit9CisKK30g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCit7Cisg
ICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKKworICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1
cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVudHMu
CisgICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7CisgICAgCisgICAgZm9yICg7Oykg
eworICAgICAgICB1aW50cHRyX3QgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIShjdXJyZW50V29yZFZhbHVlICYgaXNIZWxkQml0KQorICAg
ICAgICAgICAgJiYgbV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwg
Y3VycmVudFdvcmRWYWx1ZSB8IGlzSGVsZEJpdCkpIHsKKyAgICAgICAgICAgIC8vIFN1Y2Nlc3Mh
IFdlIGFjcXVpcmVkIHRoZSBsb2NrLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gcXVldWUgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28g
bXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kIGFnYWluLgorICAgICAgICBpZiAo
IShjdXJyZW50V29yZFZhbHVlICYgfm1hc2spICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgewor
ICAgICAgICAgICAgc3BpbkNvdW50Kys7CisgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5
aWVsZCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBO
ZWVkIHRvIHB1dCBvdXJzZWx2ZXMgb24gdGhlIHF1ZXVlLiBDcmVhdGUgdGhlIHF1ZXVlIGlmIG9u
ZSBkb2VzIG5vdCBleGlzdC4gVGhpcyByZXF1cmllcworICAgICAgICAvLyBvd25pbmcgdGhlIHF1
ZXVlIGZvciBhIGxpdHRsZSBiaXQuIFRoZSBsb2NrIHRoYXQgY29udHJvbHMgdGhlIHF1ZXVlIGlz
IGl0c2VsZiBhIHNwaW5sb2NrLgorICAgICAgICAvLyBCdXQgYmVmb3JlIHdlIGFjcXVpcmUgdGhl
IHF1ZXVlIHNwaW5sb2NrLCB3ZSBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgVGhyZWFkRGF0YSBm
b3IgdGhpcworICAgICAgICAvLyB0aHJlYWQuCisgICAgICAgIFRocmVhZERhdGEqIG1lID0gbXlU
aHJlYWREYXRhKCk7CisgICAgICAgIEFTU0VSVCghbWUtPnNob3VsZFBhcmspOworICAgICAgICBB
U1NFUlQoIW1lLT5uZXh0SW5RdWV1ZSk7CisgICAgICAgIEFTU0VSVCghbWUtPnF1ZXVlVGFpbCk7
CisKKyAgICAgICAgLy8gUmVsb2FkIHRoZSBjdXJyZW50IHdvcmQgdmFsdWUsIHNpbmNlIHNvbWUg
dGltZSBtYXkgaGF2ZSBwYXNzZWQuCisgICAgICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQu
bG9hZCgpOworCisgICAgICAgIC8vIFdlIHByb2NlZWQgb25seSBpZiB0aGUgcXVldWUgbG9jayBp
cyBub3QgaGVsZCwgdGhlIExvY2sgaXMgaGVsZCwgYW5kIHdlIHN1Y2NlZWQgaW4KKyAgICAgICAg
Ly8gYWNxdWlyaW5nIHRoZSBxdWV1ZSBsb2NrLgorICAgICAgICBpZiAoKGN1cnJlbnRXb3JkVmFs
dWUgJiBsb2NrZWRRdWV1ZUJpdCkKKyAgICAgICAgICAgIHx8ICEoY3VycmVudFdvcmRWYWx1ZSAm
IGlzSGVsZEJpdCkKKyAgICAgICAgICAgIHx8ICFtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2Vhayhj
dXJyZW50V29yZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlIHwgbG9ja2VkUXVldWVCaXQpKSB7Cisg
ICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBtZS0+c2hvdWxkUGFyayA9IHRydWU7CisKKyAgICAg
ICAgLy8gV2Ugb3duIHRoZSBxdWV1ZS4gTm9ib2R5IGNhbiBlbnF1ZXVlIG9yIGRlcXVldWUgdW50
aWwgd2UncmUgZG9uZS4gQWxzbywgaXQncyBub3QgcG9zc2libGUKKyAgICAgICAgLy8gdG8gcmVs
ZWFzZSB0aGUgTG9jayB3aGlsZSB3ZSBob2xkIHRoZSBxdWV1ZSBsb2NrLgorICAgICAgICBUaHJl
YWREYXRhKiBxdWV1ZUhlYWQgPSBiaXR3aXNlX2Nhc3Q8VGhyZWFkRGF0YSo+KGN1cnJlbnRXb3Jk
VmFsdWUgJiB+bWFzayk7CisgICAgICAgIGlmIChxdWV1ZUhlYWQpIHsKKyAgICAgICAgICAgIC8v
IFB1dCB0aGlzIHRocmVhZCBhdCB0aGUgZW5kIG9mIHRoZSBxdWV1ZS4KKyAgICAgICAgICAgIHF1
ZXVlSGVhZC0+cXVldWVUYWlsLT5uZXh0SW5RdWV1ZSA9IG1lOworICAgICAgICAgICAgcXVldWVI
ZWFkLT5xdWV1ZVRhaWwgPSBtZTsKKworICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgcXVldWUg
bG9jay4KKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50V29y
ZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdv
cmRWYWx1ZSAmIH5tYXNrKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1
ZSAmIGxvY2tlZFF1ZXVlQml0KTsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IG1fd29y
ZC5jb21wYXJlRXhjaGFuZ2VXZWFrKAorICAgICAgICAgICAgICAgICAgICBjdXJyZW50V29yZFZh
bHVlLCBjdXJyZW50V29yZFZhbHVlICYgfmxvY2tlZFF1ZXVlQml0KTsKKyAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE1ha2UgdGhpcyB0aHJlYWQgYmUgdGhl
IHF1ZXVlLWhlYWQuCisgICAgICAgICAgICBxdWV1ZUhlYWQgPSBtZTsKKyAgICAgICAgICAgIG1l
LT5xdWV1ZVRhaWwgPSBtZTsKKworICAgICAgICAgICAgLy8gV2UgbmVlZCBhIENBUyBsb29wIHRv
IGluc3RhbGwgdGhlIHF1ZXVlIGhlYWQuIFRoaXMgQ0FTIGxvb3AgaXMganVzdCB0byBwcm90ZWN0
IGFnYWluc3QKKyAgICAgICAgICAgIC8vIGlzSGVsZEJpdCBjaGFuZ2luZy4gV2UgYWxzbyByZWxl
YXNlIHRoZSBxdWV1ZSBsb2NrIGhlcmUuCisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAg
ICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgICAgICAgICAg
ICAgLy8gTm9ib2R5IGNvdWxkIGhhdmUgaW5zdGFsbGVkIGEgcXVldWUgYmVjYXVzZSB3ZSBsb2Nr
ZWQgdGhlIHF1ZXVlLgorICAgICAgICAgICAgICAgIEFTU0VSVCghKGN1cnJlbnRXb3JkVmFsdWUg
JiB+bWFzaykpOworICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBob2xkaW5nIHRoZSBxdWV1ZSBs
b2NrLgorICAgICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgbG9ja2VkUXVl
dWVCaXQpOworICAgICAgICAgICAgICAgIC8vIE5vYm9keSBjYW4gcmVsZWFzZSB0aGUgbG9jayB3
aGlsZSB3ZSBob2xkIHRoZSBxdWV1ZSBsb2NrLgorICAgICAgICAgICAgICAgIEFTU0VSVChjdXJy
ZW50V29yZFZhbHVlICYgaXNIZWxkQml0KTsKKworICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBu
ZXdXb3JkVmFsdWUgPSBjdXJyZW50V29yZFZhbHVlOworICAgICAgICAgICAgICAgIG5ld1dvcmRW
YWx1ZSB8PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihxdWV1ZUhlYWQpOworICAgICAgICAgICAg
ICAgIG5ld1dvcmRWYWx1ZSAmPSB+bG9ja2VkUXVldWVCaXQ7CisKKyAgICAgICAgICAgICAgICBp
ZiAobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwgbmV3V29yZFZh
bHVlKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGV2ZXJ5b25lIHdobyBhY3F1aXJlcyB0aGUg
cXVldWUgbG9jayB3aWxsIHNlZSBtZSBvbiB0aGUgcXVldWUsIGFuZCBhbnlvbmUgd2hvCisgICAg
ICAgIC8vIGFjcXVpcmVzIG1lJ3MgbG9jayB3aWxsIHNlZSB0aGF0IG1lIHdhbnRzIHRvIHBhcmsu
IE5vdGUgdGhhdCBzaG91bGRQYXJrIG1heSBoYXZlIGJlZW4KKyAgICAgICAgLy8gY2xlYXJlZCBh
cyBzb29uIGFzIHRoZSBxdWV1ZSBsb2NrIHdhcyByZWxlYXNlZCBhYm92ZSwgYnV0IGl0IHdpbGwg
aGFwcGVuIHdoaWxlIHRoZQorICAgICAgICAvLyByZWxlYXNpbmcgdGhyZWFkIGhvbGRzIG1lJ3Mg
cGFya2luZ0xvY2suCisKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxz
dGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgICAgIHdoaWxlICht
ZS0+c2hvdWxkUGFyaykKKyAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0
KGxvY2tlcik7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsK
KyAgICAgICAgQVNTRVJUKCFtZS0+bmV4dEluUXVldWUpOworICAgICAgICBBU1NFUlQoIW1lLT5x
dWV1ZVRhaWwpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGNhbiBsb29wIGFyb3VuZCBh
bmQgdHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2sgYWdhaW4uCisgICAgfQorfQorCit2b2lkIExvY2tC
YXNlOjp1bmxvY2tTbG93KCkKK3sKKyAgICAvLyBJZiB0aGUgZmFzdCBwYXRoIGZhaWxlZCwgaXQg
Y2FuIG9ubHkgYmUgYmVjYXVzZSBzb21lb25lIHB1dCBhIHRocmVhZCBvbiB0aGUgcXVldWUgb3Ig
dGhlIHF1ZXVlCisgICAgLy8gbG9jayBpcyBoZWxkLiBJZiB0aGUgcXVldWUgbG9jayBpcyBoZWxk
LCBpdCBjYW4gb25seSBiZSBiZWNhdXNlIHNvbWVvbmUgKndpbGwqIGVucXVldWUgYSB0aHJlYWQK
KyAgICAvLyBvbnRvIHRoZSBxdWV1ZS4KKworICAgIC8vIEFjcXVpcmUgdGhlIHF1ZXVlIGxvY2su
CisgICAgZm9yICg7OykgeworICAgICAgICB1aW50cHRyX3QgY3VycmVudFdvcmRWYWx1ZSA9IG1f
d29yZC5sb2FkKCk7CisKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0hlbGRC
aXQpOworICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnRXb3JkVmFsdWUgJiBsb2NrZWRRdWV1
ZUJpdCkgeworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlIHF1ZXVlIGxvY2sg
aXMgbm90IGhlbGQsIHRoZW4gdGhlcmUgbXVzdCBiZSBhbiBlbnRyeSBvbiB0aGUgcXVldWUuCisg
ICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgfm1hc2spOworCisgICAgICAgIGlmICht
X3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50V29yZFZhbHVlLCBjdXJyZW50V29yZFZh
bHVlIHwgbG9ja2VkUXVldWVCaXQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
dWludHB0cl90IGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAKKyAg
ICAvLyBBZnRlciB3ZSBhY3F1aXJlIHRoZSBxdWV1ZSBsb2NrLCB0aGUgTG9jayBtdXN0IHN0aWxs
IGJlIGhlbGQgYW5kIHRoZSBxdWV1ZSBtdXN0IGJlCisgICAgLy8gbm9uLWVtcHR5LiBUaGUgcXVl
dWUgbXVzdCBiZSBub24tZW1wdHkgc2luY2Ugb25seSB0aGUgbG9ja1Nsb3coKSBtZXRob2QgY291
bGQgaGF2ZSBoZWxkIHRoZQorICAgIC8vIHF1ZXVlIGxvY2sgYW5kIGlmIGl0IGRpZCB0aGVuIGl0
IG9ubHkgcmVsZWFzZXMgaXQgYWZ0ZXIgcHV0dGluZyBzb21ldGhpbmcgb24gdGhlIHF1ZXVlLgor
ICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNIZWxkQml0KTsKKyAgICBBU1NFUlQoY3Vy
cmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KTsKKyAgICBUaHJlYWREYXRhKiBxdWV1ZUhl
YWQgPSBiaXR3aXNlX2Nhc3Q8VGhyZWFkRGF0YSo+KGN1cnJlbnRXb3JkVmFsdWUgJiB+bWFzayk7
CisgICAgQVNTRVJUKHF1ZXVlSGVhZCk7CisKKyAgICBUaHJlYWREYXRhKiBuZXdRdWV1ZUhlYWQg
PSBxdWV1ZUhlYWQtPm5leHRJblF1ZXVlOworICAgIC8vIEVpdGhlciB0aGlzIHdhcyB0aGUgb25s
eSB0aHJlYWQgb24gdGhlIHF1ZXVlLCBpbiB3aGljaCBjYXNlIHdlIGRlbGV0ZSB0aGUgcXVldWUs
IG9yIHRoZXJlCisgICAgLy8gYXJlIHN0aWxsIG1vcmUgdGhyZWFkcyBvbiB0aGUgcXVldWUsIGlu
IHdoaWNoIGNhc2Ugd2UgY3JlYXRlIGEgbmV3IHF1ZXVlIGhlYWQuCisgICAgaWYgKG5ld1F1ZXVl
SGVhZCkKKyAgICAgICAgbmV3UXVldWVIZWFkLT5xdWV1ZVRhaWwgPSBxdWV1ZUhlYWQtPnF1ZXVl
VGFpbDsKKworICAgIC8vIENoYW5nZSB0aGUgcXVldWUgaGVhZCwgcG9zc2libHkgcmVtb3Zpbmcg
aXQgaWYgbmV3UXVldWVIZWFkIGlzIG51bGwuIFRoaXMgaXMgYSBDQVMgbG9vcAorICAgIC8vIG91
dCBvZiBwYXJhbm9pYS4gSXQgZG9lc24ndCBoYXZlIHRvIGJlIHNpbmNlIHRoZSBzdGF0ZSBvZiB0
aGUgbG9jayBjYW5ub3QgY2hhbmdlIHJpZ2h0IG5vdy4KKyAgICAvLyBXZSB3b3VsZCBnZXQgbm8g
cGVyZm9ybWFuY2Ugd2luIGZyb20gbWFraW5nIHRoaXMgYW55dGhpbmcgYnV0IGEgQ0FTIGxvb3As
IGFuZCBpdCB3b3VsZCBtYWtlCisgICAgLy8gaXQgY29uZnVzaW5nIHRvIGFkZCBtb3JlIGJpdHMg
dG8gdGhlIGxvY2suCisgICAgZm9yICg7OykgeworICAgICAgICBjdXJyZW50V29yZFZhbHVlID0g
bV93b3JkLmxvYWQoKTsKKworICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzSGVs
ZEJpdCk7CisgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgbG9ja2VkUXVldWVCaXQp
OworICAgICAgICBBU1NFUlQoKGN1cnJlbnRXb3JkVmFsdWUgJiB+bWFzaykgPT0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4ocXVldWVIZWFkKSk7CisKKyAgICAgICAgdWludHB0cl90IG5ld1dvcmRW
YWx1ZSA9IGN1cnJlbnRXb3JkVmFsdWU7CisgICAgICAgIG5ld1dvcmRWYWx1ZSAmPSB+aXNIZWxk
Qml0OyAvLyBSZWxlYXNlIHRoZSBMb2NrLgorICAgICAgICBuZXdXb3JkVmFsdWUgJj0gfmxvY2tl
ZFF1ZXVlQml0OyAvLyBSZWxlYXNlIHRoZSBxdWV1ZSBsb2NrLgorICAgICAgICBuZXdXb3JkVmFs
dWUgJj0gbWFzazsgLy8gQ2xlYXIgb3V0IHRoZSBvbGQgcXVldWUgaGVhZC4KKyAgICAgICAgbmV3
V29yZFZhbHVlIHw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld1F1ZXVlSGVhZCk7IC8vIElu
c3RhbGwgbmV3IHF1ZXVlIGhlYWQuCisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fd29yZC5j
b21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIG5ld1dvcmRWYWx1ZSkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBOb3cgdGhlIGxvY2sgaXMgYXZhaWxhYmxl
IGZvciBhY3F1aXNpdGlvbi4gQnV0IHdlIGp1c3QgaGF2ZSB0byB3YWtlIHVwIHRoZSBvbGQgcXVl
dWUgaGVhZC4KKyAgICAvLyBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIQorCisgICAgcXVldWVIZWFk
LT5uZXh0SW5RdWV1ZSA9IG51bGxwdHI7CisgICAgcXVldWVIZWFkLT5xdWV1ZVRhaWwgPSBudWxs
cHRyOworCisgICAgLy8gV2UgZG8gdGhpcyBjYXJlZnVsbHkgYmVjYXVzZSB0aGlzIG1heSBydW4g
ZWl0aGVyIGJlZm9yZSBvciBkdXJpbmcgdGhlIHBhcmtpbmdMb2NrIGNyaXRpY2FsCisgICAgLy8g
c2VjdGlvbiBpbiBsb2NrU2xvdygpLgorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxz
dGQ6Om11dGV4PiBsb2NrZXIocXVldWVIZWFkLT5wYXJraW5nTG9jayk7CisgICAgICAgIHF1ZXVl
SGVhZC0+c2hvdWxkUGFyayA9IGZhbHNlOworICAgICAgICAvLyBVc2Ugbm90aWZ5X2FsbCgpIG91
dCBvZiBwYXJhbm9pYS4gSW4gcmVhbGl0eSwgb25seSB0aGUgYmxvY2tlZCB0aHJlYWQgaXMgd2Fp
dGluZyBvbgorICAgICAgICAvLyB0aGlzIGNvbmRpdGlvbiB2YXJpYWJsZS4KKyAgICAgICAgcXVl
dWVIZWFkLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKKyAgICB9CisKKyAgICAvLyBU
aGUgb2xkIHF1ZXVlIGhlYWQgY2FuIG5vdyBjb250ZW5kIGZvciB0aGUgbG9jayBhZ2Fpbi4gV2Un
cmUgZG9uZSEKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0xvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBXVEZfTG9ja19oCisjZGVmaW5lIFdURl9Mb2NrX2gKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNz
Lmg+CisjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSBM
b2NrIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0ZXggdGhhdCBnaXZlcyB5b3UgdGhlIGJlc3Qgb2Yg
U3BpbkxvY2sgYW5kIE11dGV4LiBGb3Igc21hbGwgY3JpdGljYWwKKy8vIHNlY3Rpb25zICh0aGF0
IHRha2UgbmFub3NlY29uZHMpLCBpdCB3aWxsIHVzdWFsbHkgcGVyZm9ybSB3aXRoaW4gMnggb2Yg
YSBTcGluTG9jayBpbiBib3RoIHRoZQorLy8gY29udGVuZGVkIGFuZCB1bmNvbnRlbmRlZCBjYXNl
LiBXaGVuIHVzaW5nIGEgTXV0ZXgsIHN1Y2ggY3JpdGljYWwgc2VjdGlvbnMgdGFrZSB1cCB0byAx
MDB4IGxvbmdlcgorLy8gdGhhbiBMb2NrIGluIHRoZSBjb250ZW5kZWQgY2FzZSwgb3IgM3ggbG9u
Z2VyIHRoYW4gTG9jayBpbiB0aGUgdW5jb250ZW5kZWQgY2FzZS4gRm9yIGxvbmdlcgorLy8gY3Jp
dGljYWwgc2VjdGlvbnMgKHRoYXQgdGFrZSB0ZW5zIG9mIG1pY3Jvc2Vjb25kcyksIGl0IHdpbGwg
cGVyZm9ybSBhcyB3ZWxsIGFzIGEgTXV0ZXggYW5kIHNsaWdodGx5CisvLyBiZXR0ZXIgdGhhbiBh
IFNwaW5Mb2NrLiBCdXQsIGNydWNpYWxseSwgYSBTcGluTG9jayB3aWxsIGJ1cm4gdXAgdG8gOTB4
IG1vcmUgdGltZSBpbiB0aGUga2VybmVsIGZvcgorLy8gc3VjaCBjcml0aWNhbCBzZWN0aW9ucyB0
aGFuIGVpdGhlciBMb2NrIG9yIE11dGV4LiBIZW5jZSwgdXNpbmcgTG9jayB3aWxsIG1ha2UgdGhl
IGNvbW1vbiBjYXNlIG9mCisvLyBsb2NraW5nIHBlcmZvcm0gY2xvc2UgdG8gU3BpbkxvY2sgZm9y
IGFueSBjcml0aWNhbCBzZWN0aW9uIHRoYXQgZG9lcyBtb3JlIHRoYW4gYSBmZXcgbmFub3NlY29u
ZHMgb2YKKy8vIHdvcmsgd2hpbGUgYmVpbmcgYXMga2luZCB0byB0aGUgc2NoZWR1bGVyIGZvciBs
b25nZXIgY3JpdGljYWwgc2VjdGlvbnMgYXMgYSBNdXRleC4KKy8vCisvLyBMaWtlIFNwaW5Mb2Nr
LCBMb2NrIHRha2VzIHZlcnkgbGl0dGxlIG1lbW9yeSAtIGp1c3Qgc2l6ZW9mKHZvaWQqKSwgdGhv
dWdoIHNlZSBhIGRldGFpbGVkIGNhdmVhdAorLy8gYmVsb3cuCisvLworLy8gR2VuZXJhbGx5LCB5
b3Ugc2hvdWxkIHVzZSBMb2NrIGluc3RlYWQgb2YgU3BpbkxvY2sgYmVjYXVzZSB3aGlsZSBpdCBw
ZW5hbGl6ZXMgeW91IHNsaWdodGx5LCB5b3UKKy8vIG1ha2UgdXAgZm9yIGl0IGJ5IG5vdCB3YXN0
aW5nIENQVSBjeWNsZXMgaW4gY2FzZSBvZiBjb250ZW50aW9uLgorLy8KKy8vIFRoZSBMb2NrIGhh
cyB0aGUgZm9sbG93aW5nIG5pY2UgcHJvcGVydGllczoKKy8vCisvLyAtIFVuY29udGVuZGVkIGZh
c3QgcGF0aHMgZm9yIGxvY2sgYWNxdWlzaXRpb24gYW5kIGxvY2sgcmVsZWFzZSB0aGF0IGFyZSBh
bG1vc3QgYXMgZmFzdCBhcyB0aGUKKy8vICAgdW5jb250ZW5kZWQgZmFzdCBwYXRocyBvZiBhIHNw
aW5sb2NrLiBUaGUgb25seSBvdmVyaGVhZCBpcyB0aGF0IHRoZSBzcGlubG9jayB3aWxsIG5vdCBD
QVMgb24KKy8vICAgcmVsZWFzZSwgd2hpbGUgTG9jayB3aWxsIENBUy4gVGhpcyBvdmVyaGVhZCAq
Y2FuKiBzbG93IHRoaW5ncyBkb3duIGZvciBleHRyZW1lbHkgc21hbGwgY3JpdGljYWwKKy8vICAg
c2VjdGlvbnMgdGhhdCBkbyBsaXR0bGUgb3Igbm90aGluZyAtIGl0IG1ha2VzIHRoZW0gMnggc2xv
d2VyIHNpbmNlIGluIHRoYXQgY2FzZSwgQ0FTIGlzIHRoZSBtb3N0CisvLyAgIGV4cGVuc2l2ZSBp
bnN0cnVjdGlvbiBhbmQgaGF2aW5nIHR3byBvZiB0aGVtIGlzIHR3aWNlIGFzIGJhZCBhcyBqdXN0
IGhhdmluZyBvbmUuIEhvd2V2ZXIsIHRoaXMKKy8vICAgbG9jayBpbXBsZW1lbnRhdGlvbiBpcyBz
dGlsbCBhbG1vc3QgM3ggZmFzdGVyIHRoYW4gYSBwbGF0Zm9ybSBtdXRleCBpbiB0aG9zZSBjYXNl
cy4gSXQncyB1bmxpa2VseQorLy8gICB0aGF0IHlvdSdsbCBlbmNvdW50ZXIgbm8tb3AgY3JpdGlj
YWwgc2VjdGlvbnMsIHNvIHVzdWFsbHksIHRoaXMgbG9jayBpcyBiZXR0ZXIgdGhhbiBhIHNwaW5s
b2NrLgorLy8KKy8vIC0gQ29udGVuZGVkIGZhc3QgcGF0aCB0aGF0IGF0dGVtcHRzIHRvIHNwaW4g
YW5kIHlpZWxkIGZvciBzb21lIG51bWJlciBvZiB0aW1lcy4gRm9yIGNyaXRpY2FsCisvLyAgIHNl
Y3Rpb25zIHRoYXQgYXJlIGhlbGQgb25seSBicmllZmx5LCB0aGlzIGFsbG93cyBMb2NrIHRvIHBl
cmZvcm0gYWxtb3N0IGFzIHdlbGwgYXMgYSBTcGluTG9jay4KKy8vICAgU3BpbkxvY2sgY2FuIHN0
aWxsIGJlIGFsbW9zdCAyeCBmYXN0ZXIgdGhhbiBMb2NrIGlmIHRoZSBjcml0aWNhbCBzZWN0aW9u
IGlzIGEgbm8tb3AsIGJ1dCB0aGlzCisvLyAgIGFkdmFudGFnZSBkaW1pbmlzaGVzIGFzIHRoZSBj
cml0aWNhbCBzZWN0aW9uIGdyb3dzLgorLy8KKy8vIC0gQ29udGVuZGVkIHNsb3cgcGF0aCB0aGF0
IGVucXVldWVzIHRoZSBjb250ZW5kaW5nIHRocmVhZCBhbmQgY2F1c2VzIGl0IHRvIHdhaXQgb24g
YSBjb25kaXRpb24KKy8vICAgdmFyaWFibGUgdW50aWwgdGhlIGxvY2sgaXMgcmVsZWFzZWQuIFRo
aXMgaXMgdGhlIG9ubHkgY2FzZSBpbiB3aGljaCBzeXN0ZW0gbXV0ZXhlcyBhbmQgY29uZGl0aW9u
CisvLyAgIHZhcmlhYmxlcyBhcmUgdXNlZC4gVGhpcyBjYXNlIGlzIHJhcmUgYW5kIHNlbGYtbGlt
aXRpbmc6IGl0IHdpbGwgb25seSBoYXBwZW4gd2hlbiBhIGxvY2sgaXMgaGVsZAorLy8gICBmb3Ig
bG9uZyBlbm91Z2ggdGhhdCBzcGlubmluZyBzb21lIG51bWJlciBvZiB0aW1lcyBkb2Vzbid0IGFj
cXVpcmUgaXQuIFRoZSBmYWN0IHRoYXQgTG9jayBkb2VzCisvLyAgIHRoaXMgYXMgYSBmYWxsYmFj
ayB3aGVuIHNwaW5uaW5nIGZvciBzb21lIG51bWJlciBvZiB0aW1lcyBmYWlscyBtZWFucyB0aGF0
IGl0IHdpbGwgYnVybgorLy8gICBkcmFtYXRpY2FsbHkgZmV3ZXIgQ1BVIGN5Y2xlcyAtIGZvciBl
eGFtcGxlIHdpdGggMTAgdGhyZWFkcyBvbiBhbiA4IGxvZ2ljYWwgQ1BVIG1hY2hpbmUgYWNxdWly
aW5nCisvLyAgIGEgY3JpdGljYWwgc2VjdGlvbiB0aGF0IHRha2VzIDUwIG1pY3Jvc2Vjb25kcywg
dGhlIFdURiBTcGluTG9jayB3aWxsIGNhdXNlIDkweCBtb3JlIHRpbWUgdG8gYmUKKy8vICAgc3Bl
bnQgaW4gdGhlIGtlcm5lbCB0aGFuIExvY2suCisvLworLy8gLSBWZXJ5IGxvdyBtZW1vcnkgdXNh
Z2UuIEVhY2ggTG9jayByZXF1aXJlcyBvbmx5IHNpemVvZih2b2lkKikgbWVtb3J5LiBXaGVuIHRo
ZSBjb250ZW5kZWQgc2xvdworLy8gICBwYXRoIGlzIGFjdGl2YXRlZCwgTG9jayBvbmx5IHJlbGll
cyBvbiBlYWNoIHRocmVhZCBoYXZpbmcgYSBwcmVhbGxvY2F0ZWQgdGhyZWFkLXNwZWNpZmljIGRh
dGEKKy8vICAgc3RydWN0dXJlIGNhbGxlZCBUaHJlYWREYXRhIHRoYXQsIHRvZ2V0aGVyIHdpdGgg
dGhlIExvY2sgaXRzZWxmLCBpcyB1c2VkIHRvIGJ1aWxkIHVwIGEgdGhyZWFkCisvLyAgIHF1ZXVl
LiBTbywgdGhlIHRvdGFsIG1lbW9yeSB1c2FnZSBvZiBhbGwgTG9ja3MgaXMgc3RpbGwgYm91bmRl
ZCBieToKKy8vCisvLyAgICAgICBudW1iZXJPZkxvY2tzICogc2l6ZW9mKHZvaWQqKSArIG51bWJl
ck9mVGhyZWFkcyAqIHNpemVvZihUaHJlYWREYXRhKQorLy8KKy8vICAgV2hlcmUgVGhyZWFkRGF0
YSBpcyBhIGRlY2VudGx5IGxhcmdlIGRhdGEgc3RydWN0dXJlLCBidXQgd2Ugd2lsbCBvbmx5IGV2
ZXIgaGF2ZSBvbmUgcGVyIHRocmVhZCwKKy8vICAgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9m
IExvY2tzIGluIG1lbW9yeS4gQW5vdGhlciB3YXkgdG8gdmlldyB0aGlzIGlzIHRoYXQgdGhlIHdv
cnN0IGNhc2UKKy8vICAgbWVtb3J5IHVzYWdlIHBlciBMb2NrIGlzOgorLy8KKy8vICAgICAgIHNp
emVvZih2b2lkKikgKyBudW1iZXJPZlRocmVhZHMgLyBudW1iZXJPZkxvY2tzICogc2l6ZW9mKFRo
cmVhZERhdGEpCisvLworLy8gICBTbywgdW5sZXNzIHlvdSBoYXZlIGEgc21hbGwgbnVtYmVyIG9m
IExvY2tzIChvciwgYSBsYXJnZSBudW1iZXIgb2YgdGhyZWFkcywgd2hpY2ggaXMgZmFyIGxlc3MK
Ky8vICAgbGlrZWx5KSwgdGhlIG1lbW9yeSB1c2FnZSBwZXItTG9jayBpcyBzdGlsbCBnb2luZyB0
byBiZSBzb21ld2hlcmUgYXJvdW5kIHNpemVvZih2b2lkKikuCisvLworLy8gLSBCYXJnaW5nIGZh
c3QgcGF0aHMuIFRoZSBMb2NrIGlzIHR1bmVkIGZvciBtYXhpbXVtIHRocm91Z2hwdXQgcmF0aGVy
IHRoYW4gbWF4aW11bSBmYWlybmVzcy4gSWYKKy8vICAgYSB0aHJlYWQgcmVsZWFzZXMgYSBMb2Nr
IHRoYXQgd2FzIGNvbnRlbmRlZCBhbmQgaGFkIGEgcXVldWUgb2Ygd2FpdGluZyB0aHJlYWRzLCB0
aGVuIGl0IHdpbGwKKy8vICAgd2FrZSB1cCB0aGUgaGVhZCBvZiB0aGUgcXVldWUsIGJ1dCBpdCB3
aWxsIGFsc28gbWFyayB0aGUgbG9jayBhcyBiZWluZyBhdmFpbGFibGUuIFRoaXMgbWVhbnMgdGhh
dAorLy8gICBzb21lIG90aGVyIHRocmVhZCB0aGF0IGlzIGp1c3Qgbm93IGF0dGVtcHRpbmcgdG8g
YWNxdWlyZSB0aGUgbG9jayBtYXkgZ2V0IGl0IGJlZm9yZSB0aGUgdGhyZWFkCisvLyAgIHRoYXQg
Z290IHdva2VuIHVwLiBXaGVuIGEgdGhyZWFkIGJhcmdlcyBpbnRvIHRoZSBsb2NrLCB0aGUgdGhy
ZWFkIHRoYXQgZ290IHdva2VuIHVwIHdpbGwgc2ltcGx5CisvLyAgIGdvIGJhY2sgdG8gdGhlIGVu
ZCBvZiB0aGUgcXVldWUuIFRoZSBiYXJnaW5nIGJlaGF2aW9yIGVuZHMgdXAgYmVpbmcgcHJvYmFi
aWxpc3RpYyBvbiBtb3N0CisvLyAgIHBsYXRmb3JtcyBhbmQgZXZlbiB0aG91Z2ggaXQgbWF5IGJl
IHVuZmFpciB0byBzb21lIHRocmVhZCBhdCBzb21lIG1vbWVudCBpbiB0aW1lLCBpdCB3aWxsIHJh
cmVseQorLy8gICBoYXZlIGEgbG9uZyBzdHJlYWsgb2YgdW5mYWlybmVzcyB0b3dhcmRzIGFueSBw
YXJ0aWN1bGFyIHRocmVhZDogZXZlbnR1YWxseSBlYWNoIHRocmVhZCB3YWl0aW5nIG9uCisvLyAg
IHRoZSBsb2NrIHdpbGwgZ2V0IHRvIGhhdmUgYSB0dXJuIHNvIGxvbmcgYXMgbm8gdGhyZWFkIGp1
c3QgaG9sZHMgdGhlIGxvY2sgZm9yZXZlci4gVGhhdCBzYWlkLAorLy8gICB0aGVyZSAqaXMqIGEg
Y2hhbmNlIG9mIHBhdGhvbG9naWVzIC0gdXNlcnMgb2YgTG9jayBzaG91bGQgbm90IGRlcGVuZCBv
biBmaXJzdC1pbiwgZmlyc3Qtb3V0IGxvY2sKKy8vICAgYWNxdWlzaXRpb24gb3JkZXIgdW5kZXIg
Y29udGVudGlvbi4gVGhlIHNhbWUgY2F2ZWF0IGlzIGdlbmVyYWxseSB0cnVlIG9mIFNwaW5Mb2Nr
IGFuZCBwbGF0Zm9ybQorLy8gICBtdXRleGVzIG9uIHNvbWUgcGxhdGZvcm1zLgorCisvLyBUaGlz
IGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yIHNvIHRoYXQg
aXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCisvLyBVc2UgTG9jayBpbiBpbnN0YW5j
ZSB2YXJpYWJsZXMuCitzdHJ1Y3QgTG9ja0Jhc2UgeworICAgIHZvaWQgbG9jaygpCisgICAgewor
ICAgICAgICBpZiAoTElLRUxZKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJp
dCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7CisgICAgICAgICAgICAvLyBMb2NrIGFj
cXVpcmVkIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbG9ja1Ns
b3coKTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBpZiAoTElL
RUxZKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlf
b3JkZXJfcmVsZWFzZSkpKSB7CisgICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2VkLCBhbmQgbm9i
b2R5IHdhcyB3YWl0aW5nIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgdW5sb2NrU2xvdygpOworICAgIH0KKworICAgIGJvb2wgaXNIZWxkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3dvcmQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAm
IGlzSGVsZEJpdDsKKyAgICB9CisKKyAgICAvLyBFdmVyeXRoaW5nIGJlbG93IGhlcmUgc2hvdWxk
IGJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4gSXQncyBub3QgcHJpdmF0ZSBiZWNhdXNlIG9mIFBPRCBy
dWxlcy4KKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGlzSGVsZEJpdCA9IDE7CisgICAgc3Rh
dGljIGNvbnN0IHVpbnRwdHJfdCBsb2NrZWRRdWV1ZUJpdCA9IDI7CisgICAgc3RhdGljIGNvbnN0
IHVpbnRwdHJfdCBtYXNrID0gMzsKKworICAgIHZvaWQgbG9ja1Nsb3coKTsKKyAgICB2b2lkIHVu
bG9ja1Nsb3coKTsKKworICAgIEF0b21pYzx1aW50cHRyX3Q+IG1fd29yZDsKK307CisKK2NsYXNz
IExvY2sgOiBwdWJsaWMgTG9ja0Jhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2sp
OworcHVibGljOgorICAgIExvY2soKQorICAgIHsKKyAgICAgICAgbV93b3JkLnN0b3JlKDAsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIH0KK307CisKK3R5cGVkZWYgTG9ja0Jhc2Ug
U3RhdGljTG9jazsKK3R5cGVkZWYgTG9ja2VyPExvY2tCYXNlPiBMb2NrSG9sZGVyOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTdGF0aWNMb2NrOwordXNpbmcgV1RGOjpMb2Nr
OwordXNpbmcgV1RGOjpMb2NrSG9sZGVyOworCisjZW5kaWYgLy8gV1RGX0xvY2tfaAorCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTg3ODY1KQorKysgU291cmNlL1dU
Ri93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAg
dm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVsZWFzZShNZXRhQQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUp
CiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIExvY2tIb2xkZXIg
bG9ja2VyKCZtX2xvY2spOwogICAgIGlmIChoYW5kbGUtPnNpemVJbkJ5dGVzKCkpIHsKICAgICAg
ICAgZGVjcmVtZW50UGFnZU9jY3VwYW5jeShoYW5kbGUtPnN0YXJ0KCksIGhhbmRsZS0+c2l6ZUlu
Qnl0ZXMoKSk7CiAgICAgICAgIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShoYW5kbGUt
PnN0YXJ0KCksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSk7CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQg
TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCAKIHsKICAgICBBU1NFUlQobmV3U2l6
ZUluQnl0ZXMgPD0gbV9zaXplSW5CeXRlcyk7CiAgICAgCi0gICAgU3BpbkxvY2tIb2xkZXIgbG9j
a2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxv
Y2F0b3ItPm1fbG9jayk7CiAKICAgICBuZXdTaXplSW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5yb3Vu
ZFVwKG5ld1NpemVJbkJ5dGVzKTsKICAgICAKQEAgLTE1MCw3ICsxNTAsNyBAQCBNZXRhQWxsb2Nh
dG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvCiAKIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRv
ckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lk
KiBvd25lclVJRCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAg
TG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAKICAgICBpZiAoIXNpemVJbkJ5dGVzKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTE5Niw3ICsxOTYsNyBAQCBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0
b3JIYW5kbGU+IE1ldGFBbGxvCiAKIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgTWV0YUFsbG9j
YXRvcjo6Y3VycmVudFN0YXRpc3RpY3MoKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigm
bV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBTdGF0aXN0aWNz
IHJlc3VsdDsKICAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQgPSBtX2J5dGVzQWxsb2NhdGVkOwog
ICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkID0gbV9ieXRlc1Jlc2VydmVkOwpAQCAtMjgxLDcgKzI4
MSw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlRnJvbVJlbGUKIAogdm9pZCBN
ZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJ
bkJ5dGVzKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBtX2J5dGVzUmVzZXJ2ZWQgKz0gc2l6ZUluQnl0
ZXM7CiAgICAgYWRkRnJlZVNwYWNlKHN0YXJ0LCBzaXplSW5CeXRlcyk7CiB9CkBAIC0yODksNyAr
Mjg5LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSh2bwogc2l6ZV90
IE1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSgpCiB7CiAjaWZuZGVmIE5ERUJVRwot
ICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cigmbV9sb2NrKTsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICBmb3IgKEZyZWVTcGFjZU5v
ZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmlyc3QoKTsgbm9kZTsgbm9kZSA9IG5vZGUt
PnN1Y2Nlc3NvcigpKQogICAgICAgICByZXN1bHQgKz0gbm9kZS0+bV9zaXplSW5CeXRlczsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE4Nzg2NSkKKysrIFNvdXJjZS9XVEYv
d3RmL01ldGFBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNs
dWRlIDx3dGYvTG9jay5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMTgzLDcgKzE4Myw3IEBA
IHByaXZhdGU6CiAgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKICAgICBzaXplX3QgbV9ieXRl
c0NvbW1pdHRlZDsKICAgICAKLSAgICBTcGluTG9jayBtX2xvY2s7CisgICAgTG9jayBtX2xvY2s7
CiAKICAgICBNZXRhQWxsb2NhdG9yVHJhY2tlciogbV90cmFja2VyOwogCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9TcGluTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NwaW5Mb2Nr
LmgJKHJldmlzaW9uIDE4Nzg2NSkKKysrIFNvdXJjZS9XVEYvd3RmL1NwaW5Mb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDE2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCisvLyBTcGlu
TG9jayBpcyBhIHZlcnkgc2ltcGxlIGxvY2sgaW1wbGVtZW50YXRpb24gdGhhdCBoYXMgZXh0cmVt
ZWx5IGZhc3QgbG9jay91bmxvY2sgZm9yIHZlcnkgc21hbGwKKy8vIHVuY29udGVuZGVkIGNyaXRp
Y2FsIHNlY3Rpb25zLiBIb3dldmVyLCBpdCB3aWxsIGV4aGliaXQgYmFkIHBlcmZvcm1hbmNlIGRl
Z3JhZGF0aW9uIHdoZW4gdGhlIGxvY2sKKy8vIGJlY29tZXMgY29udGVuZGVkOiB0aGUgdGhyZWFk
IHRyeWluZyB0byBhY3F1aXJlIHRoZSBsb2NrIHdpbGwgc2ltcGx5IHdhc3RlIENQVSBjeWNsZXMu
CisvLworLy8gRm9yIG1vc3QgKGFsbD8pIGxvY2tpbmcgdXNlIGNhc2VzLCBpdCdzIGJldHRlciB0
byB1c2UgTG9jayAoc2VlIHd0Zi9Mb2NrLmgpLiBUaGF0IHVzZXMgb25seSBhIGJpdAorLy8gbW9y
ZSBtZW1vcnkgKDggYnl0ZXMgaW5zdGVhZCBvZiA0IG9uIDY0LWJpdCksIGFuZCBpcyBvbmx5IGEg
Yml0IHNsb3dlciBpbiB0aGUgdW5jb250ZW5kZWQgY2FzZQorLy8gKExvY2sgbmVlZHMgQ0FTIHRv
IHVubG9jaywgd2hpbGUgU3BpbkxvY2sgZG9lc24ndCksIGJ1dCB3aWxsIGJ1cm4gYSBsb3QgbGVz
cyBDUFUgdGltZSAtIGZvciAxMAorLy8gdGhyZWFkcyBhY3F1aXJpbmcgYSA1MCBtaWNyb3NlY29u
ZCBjcml0aWNhbCBzZWN0aW9uLCBMb2NrIHdpbGwgdXNlIHVwIHRvIDEwMHggbGVzcyBrZXJuZWwg
Q1BVIHRpbWUKKy8vIHRoYW4gU3BpbkxvY2suCisKIC8vIFNwaW5Mb2NrQmFzZSBpcyBhIHN0cnVj
dCB3aXRob3V0IGFuIGV4cGxpY2l0bHkgZGVmaW5lZCBjb25zdHJ1Y3RvcnMgc28gdGhhdAogLy8g
aXQgY2FuIGJlIGluaXRpYWxpemVkIGF0IGNvbXBpbGUgdGltZS4gU2VlIFN0YXRpY1NwaW5Mb2Nr
IGJlbG93Lgogc3RydWN0IFNwaW5Mb2NrQmFzZSB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmdQdGhyZWFkcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFkaW5n
UHRocmVhZHMuY3BwCShyZXZpc2lvbiAxODc4NjUpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJl
YWt0aXguY29tKQogICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZ1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNw
cAkocmV2aXNpb24gMTg3ODY1KQorKysgU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHJldmlzaW9uIDE4Nzg2NSkK
KysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImR0b2EuaCIKIAogI2lmIFVTRShXRUJfVEhSRUFE
KQotI2luY2x1ZGUgIlNwaW5Mb2NrLmgiCisjaW5jbHVkZSAiTG9jay5oIgogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwu
Y3BwCShyZXZpc2lvbiAxODc4NjUpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmlu
Z0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8d3Rm
L3VuaWNvZGUvVVRGOC5oPgogCiAjaWYgVVNFKFdFQl9USFJFQUQpCi0jaW5jbHVkZSAiU3Bpbkxv
Y2suaCIKKyNpbmNsdWRlICJMb2NrLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CkBAIC00
MiwxOCArNDIsMTggQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKICNpZiBVU0UoV0VCX1RI
UkVBRCkKIAotY2xhc3MgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgOiBwdWJsaWMgU3BpbkxvY2tI
b2xkZXIgeworY2xhc3MgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgOiBwdWJsaWMgTG9ja0hvbGRl
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXRvbWljU3RyaW5nVGFibGVMb2NrZXIpOwog
Ci0gICAgc3RhdGljIFN0YXRpY1NwaW5Mb2NrIHNfc3RyaW5nVGFibGVMb2NrOworICAgIHN0YXRp
YyBTdGF0aWNMb2NrIHNfc3RyaW5nVGFibGVMb2NrOwogcHVibGljOgogICAgIEF0b21pY1N0cmlu
Z1RhYmxlTG9ja2VyKCkKLSAgICAgICAgOiBTcGluTG9ja0hvbGRlcigmc19zdHJpbmdUYWJsZUxv
Y2spCisgICAgICAgIDogTG9ja0hvbGRlcigmc19zdHJpbmdUYWJsZUxvY2spCiAgICAgewogICAg
IH0KIH07CiAKLVN0YXRpY1NwaW5Mb2NrIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyOjpzX3N0cmlu
Z1RhYmxlTG9jazsKK1N0YXRpY0xvY2sgQXRvbWljU3RyaW5nVGFibGVMb2NrZXI6OnNfc3RyaW5n
VGFibGVMb2NrOwogCiAjZWxzZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTg3ODY1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAKICNpbXBvcnQgPHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW1wb3J0IDxydW50
aW1lL0NvbXBsZXRpb24uaD4KICNpbXBvcnQgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgotI2ltcG9y
dCA8d3RmL1NwaW5Mb2NrLmg+CisjaW1wb3J0IDx3dGYvTG9jay5oPgogI2ltcG9ydCA8d3RmL1Ro
cmVhZGluZy5oPgogI2ltcG9ydCA8d3RmL3NwaS9jb2NvYS9OU01hcFRhYmxlU1BJLmg+CiAjaW1w
b3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTcyLDEyICs3MiwxMiBAQCB1c2luZyBKU0M6
Om1ha2VTb3VyY2U7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBOU01hcFRhYmxlKiBK
U1dyYXBwZXJDYWNoZTsKLXN0YXRpYyBTdGF0aWNTcGluTG9jayBzcGluTG9jazsKK3N0YXRpYyBT
dGF0aWNMb2NrIHNwaW5Mb2NrOwogCiBOU09iamVjdCogZ2V0SlNXcmFwcGVyKEpTT2JqZWN0KiBp
bXBsKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgU3BpbkxvY2tIb2xkZXIg
aG9sZGVyKCZzcGluTG9jayk7CisgICAgTG9ja0hvbGRlciBob2xkZXIoJnNwaW5Mb2NrKTsKIAog
ICAgIGlmICghSlNXcmFwcGVyQ2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC04OCw3ICs4
OCw3IEBAIE5TT2JqZWN0KiBnZXRKU1dyYXBwZXIoSlNPYmplY3QqIGltcGwpCiB2b2lkIGFkZEpT
V3JhcHBlcihOU09iamVjdCogd3JhcHBlciwgSlNPYmplY3QqIGltcGwpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJnNwaW5Mb2NrKTsK
KyAgICBMb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOwogCiAgICAgaWYgKCFKU1dyYXBwZXJD
YWNoZSkKICAgICAgICAgSlNXcmFwcGVyQ2FjaGUgPSBjcmVhdGVXcmFwcGVyQ2FjaGUoKTsKQEAg
LTk3LDcgKzk3LDcgQEAgdm9pZCBhZGRKU1dyYXBwZXIoTlNPYmplY3QqIHdyYXBwZXIsIEpTTwog
CiB2b2lkIHJlbW92ZUpTV3JhcHBlcihKU09iamVjdCogaW1wbCkKIHsKLSAgICBTcGluTG9ja0hv
bGRlciBob2xkZXIoJnNwaW5Mb2NrKTsKKyAgICBMb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2sp
OwogCiAgICAgaWYgKCFKU1dyYXBwZXJDYWNoZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA2LDcg
KzEwNiw3IEBAIHZvaWQgcmVtb3ZlSlNXcmFwcGVyKEpTT2JqZWN0KiBpbXBsKQogCiBzdGF0aWMg
dm9pZCByZW1vdmVKU1dyYXBwZXJJZlJldGFpbkNvdW50T25lKE5TT2JqZWN0KiB3cmFwcGVyLCBK
U09iamVjdCogaW1wbCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJnNwaW5Mb2NrKTsK
KyAgICBMb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOwogCiAgICAgaWYgKCFKU1dyYXBwZXJD
YWNoZSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L3dhay9XQUtXaW5kb3cubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL3dhay9XQUtXaW5kb3cubW0JKHJldmlzaW9uIDE4Nzg2NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy93YWsvV0FLV2luZG93Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw3IEBACiAjaW1wb3J0ICJXS0NvbnRlbnRPYnNlcnZhdGlvbi5oIgogI2ltcG9ydCAiV0tWaWV3
UHJpdmF0ZS5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDx3
dGYvU3BpbkxvY2suaD4KKyNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAKIFdFQkNPUkVfRVhQT1JUIE5T
U3RyaW5nICogY29uc3QgV0FLV2luZG93U2NyZWVuU2NhbGVEaWRDaGFuZ2VOb3RpZmljYXRpb24g
PSBAIldBS1dpbmRvd1NjcmVlblNjYWxlRGlkQ2hhbmdlTm90aWZpY2F0aW9uIjsKIFdFQkNPUkVf
RVhQT1JUIE5TU3RyaW5nICogY29uc3QgV0FLV2luZG93VmlzaWJpbGl0eURpZENoYW5nZU5vdGlm
aWNhdGlvbiA9IEAiV0FLV2luZG93VmlzaWJpbGl0eURpZENoYW5nZU5vdGlmaWNhdGlvbiI7CkBA
IC01Niw3ICs1Niw3IEBAIHN0YXRpYyBXZWJFdmVudCAqY3VycmVudEV2ZW50ID0gbmlsOwogc3Rh
dGljIGlkPE9yaWVudGF0aW9uUHJvdmlkZXI+IGdPcmllbnRhdGlvblByb3ZpZGVyOwogCiBAaW1w
bGVtZW50YXRpb24gV0FLV2luZG93IHsKLSAgICBTcGluTG9jayBfZXhwb3NlZFNjcm9sbFZpZXdS
ZWN0TG9jazsKKyAgICBMb2NrIF9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrOwogICAgIENHUmVj
dCBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0OwogfQogCkBAIC0zNTgsMTQgKzM1OCwxNCBAQCAtICh2
b2lkKXNlbmRNb3VzZU1vdmVFdmVudDooV2ViRXZlbnQgKilhCiAKIC0gKHZvaWQpc2V0RXhwb3Nl
ZFNjcm9sbFZpZXdSZWN0OihDR1JlY3QpZXhwb3NlZFNjcm9sbFZpZXdSZWN0CiB7Ci0gICAgU3Bp
bkxvY2tIb2xkZXIgbG9ja2VyKCZfZXhwb3NlZFNjcm9sbFZpZXdSZWN0TG9jayk7CisgICAgTG9j
a0hvbGRlciBsb2NrZXIoJl9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrKTsKICAgICBfZXhwb3Nl
ZFNjcm9sbFZpZXdSZWN0ID0gZXhwb3NlZFNjcm9sbFZpZXdSZWN0OwogfQogCiAtIChDR1JlY3Qp
ZXhwb3NlZFNjcm9sbFZpZXdSZWN0CiB7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBs
b2NrZXIoJl9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIoJl9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrKTsKICAgICAgICAgaWYgKCFDR1JlY3RJ
c051bGwoX2V4cG9zZWRTY3JvbGxWaWV3UmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gX2V4cG9z
ZWRTY3JvbGxWaWV3UmVjdDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAkocmV2aXNpb24gMTg3ODY1
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MiwxMyArMTcyLDEzIEBAIHZvaWQgRXZlbnREaXNwYXRj
aGVyOjp3aGVlbEV2ZW50KHVpbnQ2NF8KICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjpjbGVhclF1ZXVlZFRvdWNoRXZlbnRzRm9yUGFnZShjb25zdCBX
ZWJQYWdlJiB3ZWJQYWdlKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2
ZW50c0xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7CiAg
ICAgbV90b3VjaEV2ZW50cy5yZW1vdmUod2ViUGFnZS5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgRXZl
bnREaXNwYXRjaGVyOjpnZXRRdWV1ZWRUb3VjaEV2ZW50c0ZvclBhZ2UoY29uc3QgV2ViUGFnZSYg
d2ViUGFnZSwgVG91Y2hFdmVudFF1ZXVlJiBkZXN0aW5hdGlvblF1ZXVlKQogewotICAgIFNwaW5M
b2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xvY2spOworICAgIExvY2tIb2xkZXIgbG9j
a2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7CiAgICAgZGVzdGluYXRpb25RdWV1ZSA9IG1fdG91Y2hF
dmVudHMudGFrZSh3ZWJQYWdlLnBhZ2VJRCgpKTsKIH0KIApAQCAtMTg2LDcgKzE4Niw3IEBAIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjp0b3VjaEV2ZW50KHVpbnQ2NF8KIHsKICAgICBib29sIHVwZGF0
ZUxpc3RXYXNFbXB0eTsKICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90
b3VjaEV2ZW50c0xvY2spOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50
c0xvY2spOwogICAgICAgICB1cGRhdGVMaXN0V2FzRW1wdHkgPSBtX3RvdWNoRXZlbnRzLmlzRW1w
dHkoKTsKICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3RvdWNoRXZlbnRzLmFkZChwYWdlSUQs
IFRvdWNoRXZlbnRRdWV1ZSgpKTsKICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQpA
QCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFRvdWNoRXZl
bnQKIHsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBUb3VjaEV2ZW50UXVldWU+IGxvY2FsQ29weTsK
ICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xvY2sp
OworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xvY2spOwogICAgICAg
ICBsb2NhbENvcHkuc3dhcChtX3RvdWNoRXZlbnRzKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmgJKHJl
dmlzaW9uIDE4Nzg2NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVu
dERpc3BhdGNoZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TcGluTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OldoZWVsRXZlbnREZWx0YVRyYWNrZXI+IG1fcmVjZW50V2hlZWxF
dmVudERlbHRhVHJhY2tlcjsKICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBTcGlu
TG9jayBtX3RvdWNoRXZlbnRzTG9jazsKKyAgICBMb2NrIG1fdG91Y2hFdmVudHNMb2NrOwogICAg
IEhhc2hNYXA8dWludDY0X3QsIFRvdWNoRXZlbnRRdWV1ZT4gbV90b3VjaEV2ZW50czsKICNlbmRp
ZgogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRl
RGlzcGF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcAkocmV2aXNpb24gMTg3ODY1KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCB2b2lkIFZpZXdVcGRhdGVEaXNwYXRjaGVy
Ojp2aXNpYmxlQ29udGVuCiB7CiAgICAgYm9vbCB1cGRhdGVMaXN0V2FzRW1wdHk7CiAgICAgewot
ICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fZGF0YU11dGV4KTsKKyAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIoJm1fZGF0YU11dGV4KTsKICAgICAgICAgdXBkYXRlTGlzdFdhc0VtcHR5
ID0gbV9sYXRlc3RVcGRhdGUuaXNFbXB0eSgpOwogICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9s
YXRlc3RVcGRhdGUuZmluZChwYWdlSUQpOwogICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV9sYXRl
c3RVcGRhdGUuZW5kKCkpCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgVmlld1VwZGF0ZURpc3BhdGNo
ZXI6OmRpc3BhdGNoVmlzaWIKIHsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBVcGRhdGVEYXRhPiB1
cGRhdGU7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fZGF0YU11dGV4
KTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fZGF0YU11dGV4KTsKICAgICAgICAgdXBk
YXRlID0gV1RGOjptb3ZlKG1fbGF0ZXN0VXBkYXRlKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0
Y2hlci5oCShyZXZpc2lvbiAxODc4NjUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogI2luY2x1ZGUgIlZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8uaCIKICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvU3Bp
bkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApA
QCAtNTcsNyArNTcsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBSZWY8V29ya1F1ZXVlPiBt
X3F1ZXVlOwotICAgIFNwaW5Mb2NrIG1fZGF0YU11dGV4OworICAgIExvY2sgbV9kYXRhTXV0ZXg7
CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgVXBkYXRlRGF0YT4gbV9sYXRlc3RVcGRhdGU7CiB9Owog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258299</attachid>
            <date>2015-08-05 14:08:10 -0700</date>
            <delta_ts>2015-08-05 16:19:43 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>65156</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3OTg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBA
CisyMDE1LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TGlnaHR3ZWlnaHQgbG9ja3Mgc2hvdWxkIGJlIGFkYXB0aXZlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1NDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIFNwaW5Mb2Nr
IHdpdGggTXV0ZXguCisKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpzdGFydENyYXNoaW5nKToKKyAgICAgICAgKiBoZWFwL0NvcGllZEJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjp3b3JrTGlzdExvY2spOgorICAgICAgICAqIGhlYXAv
Q29waWVkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpzaG91bGRS
ZXBvcnRMaXZlQnl0ZXMpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5
dGVzKToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29w
aWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2spOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2Uu
aDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OkNvcGllZEdlbmVyYXRpb246OkNvcGllZEdl
bmVyYXRpb24pOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2spOgorICAgICAgICAqIGhl
YXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWRE
YXRhOjpkaWRTdGFydENvcHlpbmcpOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRh
Lmg6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6Z2V0TmV4dEJsb2Nrc1RvQ29w
eSk6CisgICAgICAgICogaGVhcC9MaXN0YWJsZUhhbmRsZXIuaDoKKyAgICAgICAgKEpTQzo6TGlz
dGFibGVIYW5kbGVyOjpMaXN0OjphZGRUaHJlYWRTYWZlKToKKyAgICAgICAgKEpTQzo6TGlzdGFi
bGVIYW5kbGVyOjpMaXN0OjphZGROb3RUaHJlYWRTYWZlKToKKyAgICAgICAgKiBoZWFwL01hY2hp
bmVTdGFja01hcmtlci5jcHA6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5
T3RoZXJUaHJlYWRTdGFja3MpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIpOgorICAgICAgICAqIHByb2Zp
bGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6RGF0YWJh
c2U6OmVuc3VyZUJ5dGVjb2Rlc0Zvcik6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpEYXRhYmFz
ZTo6bm90aWZ5RGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6RGF0YWJhc2U6
OmFkZERhdGFiYXNlVG9BdEV4aXQpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6RGF0YWJhc2U6
OnJlbW92ZURhdGFiYXNlRnJvbUF0RXhpdCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpEYXRh
YmFzZTo6cmVtb3ZlRmlyc3RBdEV4aXREYXRhYmFzZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJv
ZmlsZXJEYXRhYmFzZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmg6CisK
IDIwMTUtMDgtMDUgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEFkZCB0aGUgSW50bCBBUEkgdG8gdGhlIHN0YXR1cyBwYWdlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAxODc5NzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1zdGF0aWMg
U3RhdGljU3BpbkxvY2sgY3Jhc2hMb2NrOworc3RhdGljIFN0YXRpY011dGV4IGNyYXNoTG9jazsK
IAogdm9pZCBzdGFydENyYXNoaW5nKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkQmxvY2suaAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAog
I2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUg
PHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5j
bHVkZSA8d3RmL011dGV4Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01NCw4ICs1NCw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRpZFByb21vdGUoKTsKIAogICAgIHVuc2lnbmVkIGxpdmVCeXRl
cygpOwotICAgIGJvb2wgc2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKFNwaW5Mb2NrSG9sZGVyJiwgSlND
ZWxsKiBvd25lcik7Ci0gICAgdm9pZCByZXBvcnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBK
U0NlbGwqLCBDb3B5VG9rZW4sIHVuc2lnbmVkKTsKKyAgICBib29sIHNob3VsZFJlcG9ydExpdmVC
eXRlcyhNdXRleEhvbGRlciYsIEpTQ2VsbCogb3duZXIpOworICAgIHZvaWQgcmVwb3J0TGl2ZUJ5
dGVzKE11dGV4SG9sZGVyJiwgSlNDZWxsKiwgQ29weVRva2VuLCB1bnNpZ25lZCk7CiAgICAgdm9p
ZCByZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkKTsKICAgICB2b2lkIGRpZFN1
cnZpdmVHQygpOwogICAgIHZvaWQgZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCk7CkBAIC04NSw3
ICs4NSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzV29ya0xpc3QoKTsKICAgICBDb3B5V29y
a0xpc3QmIHdvcmtMaXN0KCk7Ci0gICAgU3BpbkxvY2smIHdvcmtMaXN0TG9jaygpIHsgcmV0dXJu
IG1fd29ya0xpc3RMb2NrOyB9CisgICAgTXV0ZXgmIHdvcmtMaXN0TG9jaygpIHsgcmV0dXJuIG1f
d29ya0xpc3RMb2NrOyB9CiAKIHByaXZhdGU6CiAgICAgQ29waWVkQmxvY2soc2l6ZV90KTsKQEAg
LTk4LDcgKzk4LDcgQEAgcHJpdmF0ZToKIAogICAgIHNpemVfdCBtX2NhcGFjaXR5OwogCi0gICAg
U3BpbkxvY2sgbV93b3JrTGlzdExvY2s7CisgICAgTXV0ZXggbV93b3JrTGlzdExvY2s7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPENvcHlXb3JrTGlzdD4gbV93b3JrTGlzdDsKIAogICAgIHNpemVfdCBt
X3JlbWFpbmluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2Nr
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxODc5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLWlubGluZSBib29sIENvcGllZEJsb2NrOjpz
aG91bGRSZXBvcnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyKQoraW5s
aW5lIGJvb2wgQ29waWVkQmxvY2s6OnNob3VsZFJlcG9ydExpdmVCeXRlcyhNdXRleEhvbGRlciYs
IEpTQ2VsbCogb3duZXIpCiB7CiAgICAgLy8gV2Ugd2FudCB0byBhZGQgdG8gbGl2ZSBieXRlcyBp
ZiB0aGUgb3duZXIgaXNuJ3QgcGFydCBvZiB0aGUgcmVtZW1iZXJlZCBzZXQgb3IKICAgICAvLyBp
ZiB0aGlzIGJsb2NrIHdhcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBsYXN0IGN5Y2xlLiAKQEAgLTQz
LDcgKzQzLDcgQEAgaW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OnNob3VsZFJlcG9ydExpdgogICAg
IHJldHVybiAhSGVhcDo6aXNSZW1lbWJlcmVkKG93bmVyKSB8fCAhbV9pc09sZDsKIH0KIAotaW5s
aW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpT
Q2VsbCogb3duZXIsIENvcHlUb2tlbiB0b2tlbiwgdW5zaWduZWQgYnl0ZXMpCitpbmxpbmUgdm9p
ZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKE11dGV4SG9sZGVyJiwgSlNDZWxsKiBvd25l
ciwgQ29weVRva2VuIHRva2VuLCB1bnNpZ25lZCBieXRlcykKIHsKICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcg
QEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogCiAgICAgewogICAg
ICAgICAvLyBBbHdheXMgcHV0IHRoZSBibG9jayBpbnRvIHRoZSBvbGQgZ2VuIGJlY2F1c2UgaXQn
cyBiZWluZyBwcm9tb3RlZCEKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvU3Bh
Y2VMb2NrKTsKKyAgICAgICAgTXV0ZXhIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKICAg
ICAgICAgbV9vbGRHZW4udG9TcGFjZS0+cHVzaChibG9jayk7CiAgICAgICAgIG1fYmxvY2tTZXQu
YWRkKGJsb2NrKTsKICAgICAgICAgbV9vbGRHZW4uYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0
X2Nhc3Q8Qml0cz4oYmxvY2spKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkU3BhY2UuaAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL09TQWxsb2NhdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL1BhZ2VCbG9jay5oPgotI2luY2x1ZGUgPHd0Zi9TcGluTG9jay5oPgorI2luY2x1ZGUg
PHd0Zi9NdXRleC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCkBAIC0xMTMsNyArMTEzLDcgQEAgcHJpdmF0ZToK
IAogICAgIEhhc2hTZXQ8Q29waWVkQmxvY2sqPiBtX2Jsb2NrU2V0OwogCi0gICAgU3BpbkxvY2sg
bV90b1NwYWNlTG9jazsKKyAgICBNdXRleCBtX3RvU3BhY2VMb2NrOwogCiAgICAgc3RydWN0IENv
cGllZEdlbmVyYXRpb24gewogICAgICAgICBDb3BpZWRHZW5lcmF0aW9uKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCShyZXZpc2lv
biAxODc5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBpbmxpbmUgdm9pZCBDb3BpZWRT
cGFjZTo6cmVjeWNsZUV2YWN1YXRlCiAgICAgQVNTRVJUKGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkp
OwogICAgIEFTU0VSVCghYmxvY2stPm1faXNQaW5uZWQpOwogICAgIHsKLSAgICAgICAgU3Bpbkxv
Y2tIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKKyAgICAgICAgTXV0ZXhIb2xkZXIgbG9j
a2VyKCZtX3RvU3BhY2VMb2NrKTsKICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2spOwog
ICAgICAgICBpZiAoY29sbGVjdGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rpb24pCiAgICAgICAgICAg
ICBtX25ld0dlbi5mcm9tU3BhY2UtPnJlbW92ZShibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJldmlzaW9uIDE4
Nzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIEdDVGhyZWFkU2hhcmVk
RGF0YTo6ZGlkRmluaXNoTWFya2luCiB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRD
b3B5aW5nKCkKIHsKICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5
TG9jayk7CisgICAgICAgIE11dGV4SG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CiAgICAgICAg
IGlmIChtX3ZtLT5oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikg
ewogICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHZlY3RvciB0byBiZSBlbXB0eSwgYnV0IGRvbid0
IHRocm93IGF3YXkgdGhlIGJhY2tpbmcgc3RvcmUuCiAgICAgICAgICAgICBtX2Jsb2Nrc1RvQ29w
eS5zaHJpbmsoMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNo
YXJlZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1Ro
cmVhZFNoYXJlZERhdGEuaAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDcgQEAKICNpbmNsdWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCiAjaW5jbHVkZSA8Y29u
ZGl0aW9uX3ZhcmlhYmxlPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L1NwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL011dGV4Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk3LDcgKzk3LDcgQEAgcHJpdmF0ZToKICAgICBz
dGQ6Om11dGV4IG1fb3BhcXVlUm9vdHNNdXRleDsKICAgICBIYXNoU2V0PHZvaWQqPiBtX29wYXF1
ZVJvb3RzOwogCi0gICAgU3BpbkxvY2sgbV9jb3B5TG9jazsKKyAgICBNdXRleCBtX2NvcHlMb2Nr
OwogICAgIFZlY3RvcjxDb3BpZWRCbG9jayo+IG1fYmxvY2tzVG9Db3B5OwogICAgIHNpemVfdCBt
X2NvcHlJbmRleDsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0
aCA9IDMyOwpAQCAtMTE1LDcgKzExNSw3IEBAIHByaXZhdGU6CiAKIGlubGluZSB2b2lkIEdDVGhy
ZWFkU2hhcmVkRGF0YTo6Z2V0TmV4dEJsb2Nrc1RvQ29weShzaXplX3QmIHN0YXJ0LCBzaXplX3Qm
IGVuZCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fY29weUxvY2spOworICAgIE11
dGV4SG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CiAgICAgc3RhcnQgPSBtX2NvcHlJbmRleDsK
ICAgICBlbmQgPSBzdGQ6Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXplKCksIG1fY29weUluZGV4ICsg
c19ibG9ja0ZyYWdtZW50TGVuZ3RoKTsKICAgICBtX2NvcHlJbmRleCA9IGVuZDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xpc3RhYmxlSGFuZGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xpc3RhYmxlSGFuZGxlci5oCShyZXZpc2lvbiAx
ODc5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MaXN0YWJsZUhhbmRsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNs
dWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTXV0ZXguaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTY1LDcgKzY1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHZvaWQgYWRkVGhyZWFkU2FmZShUKiBo
YW5kbGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1f
bG9jayk7CisgICAgICAgICAgICBNdXRleEhvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAgICAgICAg
ICAgICBhZGROb3RUaHJlYWRTYWZlKGhhbmRsZXIpOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
MTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2ZpcnN0ID0gaGFuZGxlcjsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BpbkxvY2sgbV9sb2NrOworICAgICAgICBN
dXRleCBtX2xvY2s7CiAgICAgICAgIFQqIG1fZmlyc3Q7CiAgICAgfTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAko
cmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0
YWNrTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY4LDggKzU2OCw4IEBAIGJvb2wgTWFj
aGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFMKIHsKICAgICAvLyBQcmV2ZW50IHR3byBW
TXMgZnJvbSBzdXNwZW5kaW5nIGVhY2ggb3RoZXIncyB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUs
CiAgICAgLy8gd2hpY2ggY2FuIGNhdXNlIGRlYWRsb2NrOiA8cmRhcjovL3Byb2JsZW0vMjAzMDA4
NDI+LgotICAgIHN0YXRpYyBTdGF0aWNTcGluTG9jayBtdXRleDsKLSAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljU3BpbkxvY2s+IGxvY2sobXV0ZXgpOworICAgIHN0YXRpYyBTdGF0aWNNdXRleCBt
dXRleDsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2sobXV0ZXgpOwogCiAg
ICAgKnNpemUgPSAwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw3
ICsyNTAsNyBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVyKEpTQ2VsCiAKICAg
ICBBU1NFUlQoaGVhcCgpLT5tX3N0b3JhZ2VTcGFjZS5jb250YWlucyhibG9jaykpOwogCi0gICAg
U3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZibG9jay0+d29ya0xpc3RMb2NrKCkpOworICAgIE11dGV4
SG9sZGVyIGxvY2tlcigmYmxvY2stPndvcmtMaXN0TG9jaygpKTsKICAgICBpZiAoaGVhcCgpLT5v
cGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24gfHwgYmxvY2stPnNob3VsZFJl
cG9ydExpdmVCeXRlcyhsb2NrZXIsIG93bmVyKSkgewogICAgICAgICBtX2J5dGVzQ29waWVkICs9
IGJ5dGVzOwogICAgICAgICBibG9jay0+cmVwb3J0TGl2ZUJ5dGVzKGxvY2tlciwgb3duZXIsIHRv
a2VuLCBieXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxODc5NzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiAK
IHN0YXRpYyBzdGQ6OmF0b21pYzxpbnQ+IGRhdGFiYXNlQ291bnRlcjsKIAotc3RhdGljIFN0YXRp
Y1NwaW5Mb2NrIHJlZ2lzdHJhdGlvbkxvY2s7CitzdGF0aWMgU3RhdGljTXV0ZXggcmVnaXN0cmF0
aW9uTG9jazsKIHN0YXRpYyBzdGQ6OmF0b21pYzxpbnQ+IGRpZFJlZ2lzdGVyQXRFeGl0Owogc3Rh
dGljIERhdGFiYXNlKiBmaXJzdERhdGFiYXNlOwogCkBAIC01Nyw3ICs1Nyw3IEBAIERhdGFiYXNl
Ojp+RGF0YWJhc2UoKQogCiBCeXRlY29kZXMqIERhdGFiYXNlOjplbnN1cmVCeXRlY29kZXNGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAg
IE11dGV4SG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIAogICAgIGNvZGVCbG9jayA9IGNvZGVC
bG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAgICAgCkBAIC03NSw3ICs3NSw3IEBAIEJ5dGVjb2Rl
cyogRGF0YWJhc2U6OmVuc3VyZUJ5dGVjb2Rlc0ZvcigKIAogdm9pZCBEYXRhYmFzZTo6bm90aWZ5
RGVzdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgIE11dGV4SG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIAogICAgIG1fYnl0
ZWNvZGVzTWFwLnJlbW92ZShjb2RlQmxvY2spOwogfQpAQCAtMTM4LDE0ICsxMzgsMTQgQEAgdm9p
ZCBEYXRhYmFzZTo6YWRkRGF0YWJhc2VUb0F0RXhpdCgpCiAgICAgaWYgKCsrZGlkUmVnaXN0ZXJB
dEV4aXQgPT0gMSkKICAgICAgICAgYXRleGl0KGF0RXhpdENhbGxiYWNrKTsKICAgICAKLSAgICBT
cGluTG9ja0hvbGRlciBob2xkZXIocmVnaXN0cmF0aW9uTG9jayk7CisgICAgTXV0ZXhIb2xkZXIg
aG9sZGVyKHJlZ2lzdHJhdGlvbkxvY2spOwogICAgIG1fbmV4dFJlZ2lzdGVyZWREYXRhYmFzZSA9
IGZpcnN0RGF0YWJhc2U7CiAgICAgZmlyc3REYXRhYmFzZSA9IHRoaXM7CiB9CiAKIHZvaWQgRGF0
YWJhc2U6OnJlbW92ZURhdGFiYXNlRnJvbUF0RXhpdCgpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIg
aG9sZGVyKHJlZ2lzdHJhdGlvbkxvY2spOworICAgIE11dGV4SG9sZGVyIGhvbGRlcihyZWdpc3Ry
YXRpb25Mb2NrKTsKICAgICBmb3IgKERhdGFiYXNlKiogY3VycmVudCA9ICZmaXJzdERhdGFiYXNl
OyAqY3VycmVudDsgY3VycmVudCA9ICYoKmN1cnJlbnQpLT5tX25leHRSZWdpc3RlcmVkRGF0YWJh
c2UpIHsKICAgICAgICAgaWYgKCpjdXJyZW50ICE9IHRoaXMpCiAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIERhdGFiYXNlOjpwZXJmb3JtQXRFeGl0U2F2ZSgp
IGNvbnN0CiAKIERhdGFiYXNlKiBEYXRhYmFzZTo6cmVtb3ZlRmlyc3RBdEV4aXREYXRhYmFzZSgp
CiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVyKHJlZ2lzdHJhdGlvbkxvY2spOworICAgIE11
dGV4SG9sZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKICAgICBEYXRhYmFzZSogcmVzdWx0
ID0gZmlyc3REYXRhYmFzZTsKICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgIGZpcnN0RGF0YWJh
c2UgPSByZXN1bHQtPm1fbmV4dFJlZ2lzdGVyZWREYXRhYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuaAkocmV2aXNpb24g
MTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlByb2ZpbGVy
Q29tcGlsYXRpb25LaW5kLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NdXRleC5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1NlZ21lbnRlZFZlY3Rvci5oPgpAQCAtOTksNyArMTAwLDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fc2hvdWxkU2F2ZUF0RXhpdDsKICAgICBDU3RyaW5nIG1fYXRFeGl0U2F2ZUZpbGVuYW1lOwog
ICAgIERhdGFiYXNlKiBtX25leHRSZWdpc3RlcmVkRGF0YWJhc2U7Ci0gICAgTG9jayBtX2xvY2s7
CisgICAgTXV0ZXggbV9sb2NrOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OlByb2ZpbGVy
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJM
b2cuaAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVByb2ZpbGVyTG9nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNs
dWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiVHlw
ZVByb2ZpbGVyLmgiCi0jaW5jbHVkZSA8d3RmL0J5dGVTcGluTG9jay5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Nzk4NSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTUtMDgtMDUgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBMaWdodHdlaWdodCBsb2NrcyBzaG91bGQg
YmUgYWRhcHRpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NzU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEEgY29tbW9uIGlkaW9tIGluIFdlYktpdCBpcyB0byB1c2Ugc3BpbmxvY2tzLiBXZSB1c2Ug
dGhlbSBiZWNhdXNlIHRoZSBsb2NrIGFjcXVpc2l0aW9uCisgICAgICAgIG92ZXJoZWFkIGlzIGxv
d2VyIHRoYW4gc3lzdGVtIGxvY2tzIGFuZCBiZWNhdXNlIHRoZXkgdGFrZSBkcmFtYXRpY2FsbHkg
bGVzcyBzcGFjZSB0aGFuIHN5c3RlbQorICAgICAgICBsb2Nrcy4gVGhlIHNwZWVkIGFuZCBzcGFj
ZSBhZHZhbnRhZ2VzIG9mIHNwaW5sb2NrcyBjYW4gYmUgYXN0b25pc2hpbmc6IGFuIHVuY29udGVu
ZGVkIHNwaW5sb2NrCisgICAgICAgIGFjcXVpcmUgaXMgdXAgdG8gMTB4IGZhc3RlciBhbmQgdW5k
ZXIgbWljcm9jb250ZW50aW9uIC0gc2hvcnQgY3JpdGljYWwgc2VjdGlvbiB3aXRoIHR3byBvcgor
ICAgICAgICBtb3JlIHRocmVhZHMgdGFraW5nIHR1cm5zIC0gc3BpbmxvY2tzIGFyZSB1cCB0byAx
MDB4IGZhc3Rlci4gU3BpbmxvY2tzIHRha2Ugb25seSAxIGJ5dGUgb3IgNAorICAgICAgICBieXRl
cyBkZXBlbmRpbmcgb24gdGhlIGZsYXZvciwgd2hpbGUgc3lzdGVtIGxvY2tzIHRha2UgNjQgYnl0
ZXMgb3IgbW9yZS4gQ2xlYXJseSwgV2ViS2l0CisgICAgICAgIHNob3VsZCBjb250aW51ZSB0byBh
dm9pZCBzeXN0ZW0gbG9ja3MgLSB0aGV5IGFyZSBqdXN0IGZhciB0b28gc2xvdyBhbmQgZmFyIHRv
byBiaWcuCisKKyAgICAgICAgQnV0IHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoaXMgaWRpb20u
IFN5c3RlbSBsb2NrIGltcGxlbWVudGF0aW9ucyB3aWxsIHNsZWVwIGEgdGhyZWFkIHdoZW4KKyAg
ICAgICAgaXQgYXR0ZW1wdHMgdG8gYWNxdWlyZSBhIGxvY2sgdGhhdCBpcyBoZWxkLCB3aGlsZSBz
cGlubG9ja3Mgd2lsbCBjYXVzZSB0aGUgdGhyZWFkIHRvIGJ1cm4gQ1BVLgorICAgICAgICBJbiBX
ZWJLaXQgc3BpbmxvY2tzLCB0aGUgdGhyZWFkIHdpbGwgcmVwZWF0ZWRseSBjYWxsIHNjaGVkX3lp
ZWxkKCkuIFRoaXMgaXMgYXdlc29tZSBmb3IKKyAgICAgICAgbWljcm9jb250ZW50aW9uLCBidXQg
YXdmdWwgd2hlbiB0aGUgbG9jayB3aWxsIG5vdCBiZSByZWxlYXNlZCBmb3IgYSB3aGlsZS4gSW4g
ZmFjdCwgd2hlbgorICAgICAgICBjcml0aWNhbCBzZWN0aW9ucyB0YWtlIHRlbnMgb2YgbWljcm9z
ZWNvbmRzIG9yIG1vcmUsIHRoZSBDUFUgdGltZSBjb3N0IG9mIG91ciBzcGlubG9ja3MgaXMKKyAg
ICAgICAgYWxtb3N0IDEwMHggbW9yZSB0aGFuIHRoZSBDUFUgdGltZSBjb3N0IG9mIGEgc3lzdGVt
IGxvY2suIFRoaXMgY2FzZSBkb2Vzbid0IGFyaXNlIHRvbworICAgICAgICBmcmVxdWVudGx5IGlu
IG91ciBjdXJyZW50IHVzZXMgb2Ygc3BpbmxvY2tzLCBidXQgdGhhdCdzIHByb2JhYmx5IGJlY2F1
c2UgcmlnaHQgbm93IHRoZXJlIGFyZQorICAgICAgICBwbGFjZXMgd2hlcmUgd2UgbWFrZSBhIGNv
bnNjaW91cyBkZWNpc2lvbiB0byB1c2Ugc3lzdGVtIGxvY2tzIC0gZXZlbiB0aG91Z2ggdGhleSB1
c2UgbW9yZQorICAgICAgICBtZW1vcnkgYW5kIGFyZSBzbG93ZXIgLSBiZWNhdXNlIHdlIGRvbid0
IHdhbnQgdG8gd2FzdGUgQ1BVIGN5Y2xlcyB3aGVuIGEgdGhyZWFkIGhhcyB0byB3YWl0IGEKKyAg
ICAgICAgd2hpbGUgdG8gYWNxdWlyZSB0aGUgbG9jay4KKworICAgICAgICBUaGUgc29sdXRpb24g
aXMgdG8ganVzdCBpbXBsZW1lbnQgYSBtb2Rlcm4gYWRhcHRpdmUgbXV0ZXggaW4gV1RGLiBMdWNr
aWx5LCB0aGlzIGlzbid0IGEgbmV3CisgICAgICAgIGNvbmNlcHQuIFRoaXMgcGF0Y2ggaW1wbGVt
ZW50cyBhIG11dGV4IHRoYXQgaXMgcmVtaW5pc2NlbnQgb2YgdGhlIGtpbmRzIG9mIGxvdy1vdmVy
aGVhZCBsb2NrcworICAgICAgICB0aGF0IEpWTXMgdXNlLiBUaGUgYWN0dWFsIGltcGxlbWVudGF0
aW9uIGhlcmUgaXMgaW5zcGlyZWQgYnkgc29tZSBvZiB0aGUgaWRlYXMgZnJvbSBbMV0uIFRoZQor
ICAgICAgICBpZGVhIGlzIHNpbXBsZTogdGhlIGZhc3QgcGF0aCBpcyBhbiBpbmxpbmVkIENBUyB0
byBpbW1lZGlhdGVseSBhY3F1aXJlIGEgbG9jayB0aGF0IGlzbid0IGhlbGQsCisgICAgICAgIHRo
ZSBzbG93IHBhdGggdHJpZXMgc29tZSBudW1iZXIgb2Ygc3BpbnMgdG8gYWNxdWlyZSB0aGUgbG9j
aywgYW5kIGlmIHRoYXQgZmFpbHMsIHRoZSB0aHJlYWQgaXMKKyAgICAgICAgcHV0IG9uIGEgcXVl
dWUgYW5kIHB1dCB0byBzbGVlcC4gVGhlIHF1ZXVlIGlzIG1hZGUgdXAgb2Ygc3RhdGljYWxseSBh
bGxvY2F0ZWQgdGhyZWFkIG5vZGVzIGFuZAorICAgICAgICB0aGUgbG9jayBpdHNlbGYgaXMgYSB0
YWdnZWQgcG9pbnRlcjogZWl0aGVyIGl0IGlzIGp1c3QgYml0cyB0ZWxsaW5nIHVzIHRoZSBjb21w
bGV0ZSBsb2NrIHN0YXRlCisgICAgICAgIChub3QgaGVsZCBvciBoZWxkKSBvciBpdCBpcyBhIHBv
aW50ZXIgdG8gdGhlIGhlYWQgb2YgYSBxdWV1ZSBvZiB0aHJlYWRzIHdhaXRpbmcgdG8gYWNxdWly
ZSB0aGUKKyAgICAgICAgbG9jay4gVGhpcyBhcHByb2FjaCBnaXZlcyBNdXRleCB0aHJlZSBkaWZm
ZXJlbnQgbGV2ZWxzIG9mIGFkYXB0YXRpb246IGFuIGlubGluZWQgZmFzdCBwYXRoIGlmCisgICAg
ICAgIHRoZSBsb2NrIGlzIG5vdCBjb250ZW5kZWQsIGEgc2hvcnQgYnVyc3Qgb2Ygc3Bpbm5pbmcg
Zm9yIG1pY3JvY29udGVudGlvbiwgYW5kIGEgZnVsbC1ibG93bgorICAgICAgICBxdWV1ZSBmb3Ig
Y3JpdGljYWwgc2VjdGlvbnMgdGhhdCBhcmUgaGVsZCBmb3IgYSBsb25nIHRpbWUuCisKKyAgICAg
ICAgT24gYSBsb2NraW5nIG1pY3JvYmVuY2htYXJrLCB0aGlzIG5ldyBXVEY6Ok11dGV4IGV4aGli
aXRzIHRoZSBmb2xsb3dpbmcgcGVyZm9ybWFuY2UKKyAgICAgICAgY2hhcmFjdGVyaXN0aWNzOgor
CisgICAgICAgIC0gTG9jayt1bmxvY2sgb24gYW4gdW5jb250ZW5kZWQgbm8tb3AgY3JpdGljYWwg
c2VjdGlvbjogMnggc2xvd2VyIHRoYW4gU3BpbkxvY2sgYW5kIDN4IGZhc3RlcgorICAgICAgICAg
IHRoYW4gYSBzeXN0ZW0gbXV0ZXguCisKKyAgICAgICAgLSBMb2NrK3VubG9jayBvbiBhIGNvbnRl
bmRlZCBuby1vcCBjcml0aWNhbCBzZWN0aW9uOiAyeCBzbG93ZXIgdGhhbiBTcGluTG9jayBhbmQg
MTAweCBmYXN0ZXIKKyAgICAgICAgICB0aGFuIGEgc3lzdGVtIG11dGV4LgorCisgICAgICAgIC0g
Q1BVIHRpbWUgc3BlbnQgaW4gbG9jaygpIG9uIGEgbG9jayBoZWxkIGZvciBhIHdoaWxlOiBzYW1l
IGFzIHN5c3RlbSBtdXRleCwgOTB4IGxlc3MgdGhhbiBhCisgICAgICAgICAgU3BpbkxvY2suCisK
KyAgICAgICAgLSBNZW1vcnkgdXNhZ2U6IHNpemVvZih2b2lkKiksIHNvIG9uIDY0LWJpdCBpdCdz
IDh4IGxlc3MgdGhhbiBhIHN5c3RlbSBtdXRleCBidXQgMnggd29yc2UgdGhhbgorICAgICAgICAg
IGEgU3BpbkxvY2suCisKKyAgICAgICAgVGhpcyBwYXRjaCByZXBsYWNlcyBhbGwgdXNlcyBvZiBT
cGluTG9jayB3aXRoIE11dGV4LCBzaW5jZSBvdXIgY3JpdGljYWwgc2VjdGlvbnMgYXJlIG5vdAor
ICAgICAgICBuby1vcHMgc28gaWYgeW91IGRvIGJhc2ljYWxseSBhbnl0aGluZyBpbiB5b3VyIGNy
aXRpY2FsIHNlY3Rpb24sIHRoZSBNdXRleCBvdmVyaGVhZCB3aWxsIGJlCisgICAgICAgIGludmlz
aWJsZS4gQWxzbywgaW4gYWxsIHBsYWNlcyB3aGVyZSB3ZSB1c2VkIFNwaW5Mb2NrLCB3ZSBjb3Vs
ZCB0b2xlcmF0ZSA4IGJ5dGVzIG9mIG92ZXJoZWFkCisgICAgICAgIGluc3RlYWQgb2YgNC4gUGVy
Zm9ybWFuY2UgYmVuY2htYXJraW5nIHVzaW5nIEpTQyBtYWNyb2JlbmNobWFya3Mgc2hvd3Mgbm8g
ZGlmZmVyZW5jZSwgd2hpY2ggaXMKKyAgICAgICAgYXMgaXQgc2hvdWxkIGJlOiB0aGUgcHVycG9z
ZSBvZiB0aGlzIGNoYW5nZSBpcyB0byByZWR1Y2UgQ1BVIHRpbWUgd2FzdGVkLCBub3Qgd2FsbGNs
b2NrIHRpbWUuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lc24ndCByZXBsYWNlIGFueSB1c2VzIG9m
IEJ5dGVTcGluTG9jaywgc2luY2Ugd2UgZXhwZWN0IHRoYXQgdGhlIHNwYWNlIGJlbmVmaXRzCisg
ICAgICAgIG9mIGhhdmluZyBhIGxvY2sgdGhhdCBqdXN0IHVzZXMgYSBieXRlIGFyZSBzdGlsbCBi
ZXR0ZXIgdGhhbiB0aGUgQ1BVIHdhc3RhZ2UgYmVuZWZpdHMgb2YKKyAgICAgICAgTXV0ZXguIEJ1
dCwgdGhpcyB3b3JrIHdpbGwgZW5hYmxlIHNvbWUgZnV0dXJlIHdvcmsgdG8gY3JlYXRlIGxvY2tz
IHRoYXQgd2lsbCBmaXQgaW4ganVzdCAxLjYKKyAgICAgICAgYml0czogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzY2NS4KKworICAgICAgICBbMV0gaHR0cDovL3d3
dy5maWxwaXpsby5jb20vcGFwZXJzL3BpemxvLXBwcGoyMDExLWZhYmxlLnBkZgorCisgICAgICAg
ICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmVuY2htYXJrczog
QWRkZWQuCisgICAgICAgICogYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcDogQWRkZWQuCisg
ICAgICAgIChtYWluKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6CisgICAgICAg
IChXVEY6Ok1ldGFBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2Nh
dG9ySGFuZGxlOjpzaHJpbmspOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlc2hGcmVlU3BhY2UpOgorICAgICAgICAo
V1RGOjpNZXRhQWxsb2NhdG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUpOgorICAgICAgICAqIHd0Zi9N
ZXRhQWxsb2NhdG9yLmg6CisgICAgICAgICogd3RmL011dGV4LmNwcDogQWRkZWQuCisgICAgICAg
IChXVEY6Ok11dGV4QmFzZTo6bG9ja1Nsb3cpOgorICAgICAgICAoV1RGOjpNdXRleEJhc2U6OnVu
bG9ja1Nsb3cpOgorICAgICAgICAqIHd0Zi9NdXRleC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
TXV0ZXhCYXNlOjpsb2NrKToKKyAgICAgICAgKFdURjo6TXV0ZXhCYXNlOjp1bmxvY2spOgorICAg
ICAgICAoV1RGOjpNdXRleEJhc2U6OmlzSGVsZCk6CisgICAgICAgIChXVEY6Ok11dGV4QmFzZTo6
aXNMb2NrZWQpOgorICAgICAgICAoV1RGOjpNdXRleDo6TXV0ZXgpOgorICAgICAgICAqIHd0Zi9T
cGluTG9jay5oOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHA6CisgICAgICAg
ICogd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OkF0b21pY1N0
cmluZ1RhYmxlTG9ja2VyOjpBdG9taWNTdHJpbmdUYWJsZUxvY2tlcik6CisKIDIwMTUtMDgtMDQg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgTXV0ZXgg
dG8gRGVwcmVjYXRlZE11dGV4CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE4Nzk3MykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDggQEAKIAkJMEZEREJG
QTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZF
RiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBGRERCRkE4MTY2NkRGQTMwMEM1
NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50
U3RyZWFtLmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdC
NTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OworCQkwRkZDNDVBMjFCNzI5
Rjg3MDA4NUJENjIgLyogTXV0ZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZGQzQ1QTAxQjcyOUY4NzAwODVCRDYyIC8qIE11dGV4LmNwcCAqLzsg
fTsKKwkJMEZGQzQ1QTMxQjcyOUY4NzAwODVCRDYyIC8qIE11dGV4LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDNDVBMTFCNzI5Rjg3MDA4NUJENjIg
LyogTXV0ZXguaCAqLzsgfTsKIAkJMTQwMjJGNDExOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxs
b2MuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
MDIyRjQwMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9jLmEgKi87IH07CiAJCTE0M0Y2MTFG
MTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXpl
LmNwcCAqLzsgfTsKIAkJMTQzRjYxMjAxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFFMTU2NUYw
RjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsg
fTsgfTsKQEAgLTMyMyw2ICszMjUsOCBAQAogCQkwRkREQkZBNjE2NjZERkEzMDBDNTVGRUYgLyog
U3RyaW5nUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Ry
aW5nUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzNFRTQx
NzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlU3Bp
bkxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjUxQjIyRDREODAw
NjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGlueVB0clNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDNDVBMDFCNzI5
Rjg3MDA4NUJENjIgLyogTXV0ZXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTXV0ZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDNDVBMTFC
NzI5Rjg3MDA4NUJENjIgLyogTXV0ZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTXV0ZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNG
QzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0
QSAvKiBSQU1TaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJB
TVNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNGNjExRTE1NjVGMEY5
MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
QU1TaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03ODQsNiArNzg4LDggQEAK
IAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvci5jcHAgKi8sCiAJ
CQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuaCAqLywKIAkJCQlB
OEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovLAorCQkJ
CTBGRkM0NUEwMUI3MjlGODcwMDg1QkQ2MiAvKiBNdXRleC5jcHAgKi8sCisJCQkJMEZGQzQ1QTEx
QjcyOUY4NzAwODVCRDYyIC8qIE11dGV4LmggKi8sCiAJCQkJRkU4MjI1MzAxQjJBMUU1QjAwQkE2
OEZEIC8qIE5ha2VkUHRyLmggKi8sCiAJCQkJMUEzRjZCRTYxNzRBREEyMTAwQjJFRUE3IC8qIE5l
dmVyRGVzdHJveWVkLmggKi8sCiAJCQkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9j
ay5oICovLApAQCAtMTEyMSw2ICsxMTI3LDcgQEAKIAkJCQlBOEE0NzNFNjE1MUE4MjVCMDA0MTIz
RkYgLyogTWFpblRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRTgxNTFBODI1QjAw
NDEyM0ZGIC8qIE1hdGhFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VBMTUxQTgy
NUIwMDQxMjNGRiAvKiBNRDUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkM0NUEzMUI3MjlGODcw
MDg1QkQ2MiAvKiBNdXRleC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NCQkEwNzQxOUJCN0ZEQzAw
QkJGMDI1IC8qIE9TT2JqZWN0UHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDU0OTdBRDE1ODU3
RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFQjE1
MUE4MjVCMDA0MTIzRkYgLyogTWVzc2FnZVF1ZXVlLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNjEs
NiArMTM2OCw3IEBACiAJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIzOTBCIC8qIFN0cmluZ1ZpZXcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczRjkxNTFBODI1QjAwNDEyM0ZGIC8qIE9TUmFu
ZG9tU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDAyMTUxQTgyNUIwMDQxMjNG
RiAvKiBQYWdlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGQzQ1QTIxQjcyOUY4NzAw
ODVCRDYyIC8qIE11dGV4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzYyMTY1REJBNzMw
MDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDNGNjExRjE1
NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQx
NDE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvTXV0ZXguaD4KKyNpbmNsdWRl
IDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+
CisKK25hbWVzcGFjZSB7CisKK3Vuc2lnbmVkIG51bVRocmVhZEdyb3VwczsKK3Vuc2lnbmVkIG51
bVRocmVhZHNQZXJHcm91cDsKK3Vuc2lnbmVkIHdvcmtQZXJDcml0aWNhbFNlY3Rpb247Cit1bnNp
Z25lZCBudW1Ob2lzZVRocmVhZHM7Cit1bnNpZ25lZCBudW1JdGVyYXRpb25zOworICAgIAordm9p
ZCB1c2FnZSgpCit7CisgICAgcHJpbnRmKCJVc2FnZTogTG9ja1NwZWVkVGVzdCBzcGlubG9ja3xt
dXRleHxzeXN0ZW18YWxsIDxudW0gdGhyZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBncm91
cD4gPHdvcmsgcGVyIGNyaXRpY2FsIHNlY3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51bSBp
dGVyYXRpb25zPlxuIik7CisgICAgZXhpdCgxKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTG9j
a1R5cGU+Cit2b2lkIHJ1bkJlbmNobWFyayhjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHN0ZDo6
dW5pcXVlX3B0cjxMb2NrVHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8TG9ja1R5cGVb
XT4obnVtVGhyZWFkR3JvdXBzKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8ZG91YmxlW10+IHdvcmRz
ID0gc3RkOjptYWtlX3VuaXF1ZTxkb3VibGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1
ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91
cCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZpZXJbXT4gbm9pc2VUaHJlYWRz
ID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bU5vaXNlVGhyZWFkcyk7
CisgICAgc3RkOjp1bmlxdWVfcHRyPGRvdWJsZVtdPiBub2lzZUNvdW50cyA9IHN0ZDo6bWFrZV91
bmlxdWU8ZG91YmxlW10+KG51bU5vaXNlVGhyZWFkcyk7CisKKyAgICB2b2xhdGlsZSBib29sIHNo
b3VsZFN0b3AgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtTm9p
c2VUaHJlYWRzOyB0aHJlYWRJbmRleC0tOykgeworICAgICAgICBub2lzZUNvdW50c1t0aHJlYWRJ
bmRleF0gPSAwOworICAgICAgICBub2lzZVRocmVhZHNbdGhyZWFkSW5kZXhdID0gY3JlYXRlVGhy
ZWFkKAorICAgICAgICAgICAgIk5vaXNlIFRocmVhZCIsCisgICAgICAgICAgICBbJnNob3VsZFN0
b3AsICZub2lzZUNvdW50cywgdGhyZWFkSW5kZXhdICgpIHsKKyAgICAgICAgICAgICAgICB3aGls
ZSAoIXNob3VsZFN0b3ApCisgICAgICAgICAgICAgICAgICAgIG5vaXNlQ291bnRzW3RocmVhZElu
ZGV4XSsrOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgZG91YmxlIGJlZm9yZSA9IG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCB0
aHJlYWRHcm91cEluZGV4ID0gbnVtVGhyZWFkR3JvdXBzOyB0aHJlYWRHcm91cEluZGV4LS07KSB7
CisgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdID0gMDsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykg
eworICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVtVGhyZWFkc1Blckdy
b3VwICsgdGhyZWFkSW5kZXhdID0gY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgICAgICJCZW5j
aG1hcmsgdGhyZWFkIiwKKyAgICAgICAgICAgICAgICBbdGhyZWFkR3JvdXBJbmRleCwgJmxvY2tz
LCAmd29yZHNdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
SXRlcmF0aW9uczsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9ja3NbdGhyZWFk
R3JvdXBJbmRleF0ubG9jaygpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gd29ya1BlckNyaXRpY2FsU2VjdGlvbjsgai0tOykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdKys7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0gKj0gMS4wMTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tzW3RocmVhZEdyb3VwSW5k
ZXhdLnVubG9jaygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVt
VGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykKKyAgICAg
ICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOworICAgIHNo
b3VsZFN0b3AgPSB0cnVlOworICAgIGRvdWJsZSBub2lzZUNvdW50ID0gMDsKKyAgICBmb3IgKHVu
c2lnbmVkIHRocmVhZEluZGV4ID0gbnVtTm9pc2VUaHJlYWRzOyB0aHJlYWRJbmRleC0tOykgewor
ICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihub2lzZVRocmVhZHNbdGhyZWFkSW5kZXhd
KTsKKyAgICAgICAgbm9pc2VDb3VudCArPSBub2lzZUNvdW50c1t0aHJlYWRJbmRleF07CisgICAg
fQorCisgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsK
KworICAgIHByaW50ZigiJXM6ICUuM2xmIG1zLCAlLjBsZiBub2lzZS5cbiIsIG5hbWUsIGFmdGVy
IC0gYmVmb3JlLCBub2lzZUNvdW50KTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBXVEY6OmluaXRpYWxpemVU
aHJlYWRpbmcoKTsKKyAgICAKKyAgICBpZiAoYXJnYyAhPSA3CisgICAgICAgIHx8IHNzY2FuZihh
cmd2WzJdLCAiJXUiLCAmbnVtVGhyZWFkR3JvdXBzKSAhPSAxCisgICAgICAgIHx8IHNzY2FuZihh
cmd2WzNdLCAiJXUiLCAmbnVtVGhyZWFkc1Blckdyb3VwKSAhPSAxCisgICAgICAgIHx8IHNzY2Fu
Zihhcmd2WzRdLCAiJXUiLCAmd29ya1BlckNyaXRpY2FsU2VjdGlvbikgIT0gMQorICAgICAgICB8
fCBzc2NhbmYoYXJndls1XSwgIiV1IiwgJm51bU5vaXNlVGhyZWFkcykgIT0gMQorICAgICAgICB8
fCBzc2NhbmYoYXJndls2XSwgIiV1IiwgJm51bUl0ZXJhdGlvbnMpICE9IDEpCisgICAgICAgIHVz
YWdlKCk7CisKKyAgICBib29sIGRpZFJ1biA9IGZhbHNlOworICAgIGlmICghc3RyY21wKGFyZ3Zb
MV0sICJzcGlubG9jayIpIHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CisgICAgICAgIHJ1
bkJlbmNobWFyazxTcGluTG9jaz4oIlNwaW5Mb2NrIik7CisgICAgICAgIGRpZFJ1biA9IHRydWU7
CisgICAgfQorICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJtdXRleCIpIHx8ICFzdHJjbXAoYXJn
dlsxXSwgImFsbCIpKSB7CisgICAgICAgIHJ1bkJlbmNobWFyazxNdXRleD4oIldURiBNdXRleCIp
OworICAgICAgICBkaWRSdW4gPSB0cnVlOworICAgIH0KKyAgICBpZiAoIXN0cmNtcChhcmd2WzFd
LCAic3lzdGVtIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKKyAgICAgICAgcnVuQmVu
Y2htYXJrPERlcHJlY2F0ZWRNdXRleD4oIlN5c3RlbSBNdXRleCIpOworICAgICAgICBkaWRSdW4g
PSB0cnVlOworICAgIH0KKworICAgIGlmICghZGlkUnVuKQorICAgICAgICB1c2FnZSgpOworCisg
ICAgcmV0dXJuIDA7Cit9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MTg3OTczKQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVsZWFzZShN
ZXRhQQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzZShNZXRhQWxs
b2NhdG9ySGFuZGxlKiBoYW5kbGUpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xv
Y2spOworICAgIE11dGV4SG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBpZiAoaGFuZGxlLT5z
aXplSW5CeXRlcygpKSB7CiAgICAgICAgIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3koaGFuZGxlLT5z
dGFydCgpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCkpOwogICAgICAgICBhZGRGcmVlU3BhY2VGcm9t
UmVsZWFzZWRIYW5kbGUoaGFuZGxlLT5zdGFydCgpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCkpOwpA
QCAtOTEsNyArOTEsNyBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3Qg
CiB7CiAgICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVzIDw9IG1fc2l6ZUluQnl0ZXMpOwogICAgIAot
ICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CisgICAgTXV0
ZXhIb2xkZXIgbG9ja2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKIAogICAgIG5ld1NpemVJbkJ5
dGVzID0gbV9hbGxvY2F0b3ItPnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOwogICAgIApAQCAtMTUw
LDcgKzE1MCw3IEBAIE1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG8KIAog
UGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShz
aXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogewotICAgIFNwaW5Mb2NrSG9sZGVy
IGxvY2tlcigmbV9sb2NrKTsKKyAgICBNdXRleEhvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAKICAg
ICBpZiAoIXNpemVJbkJ5dGVzKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE5Niw3ICsxOTYsNyBA
QCBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvCiAKIE1ldGFBbGxvY2F0
b3I6OlN0YXRpc3RpY3MgTWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3MoKQogewotICAg
IFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBNdXRleEhvbGRlciBsb2NrZXIo
Jm1fbG9jayk7CiAgICAgU3RhdGlzdGljcyByZXN1bHQ7CiAgICAgcmVzdWx0LmJ5dGVzQWxsb2Nh
dGVkID0gbV9ieXRlc0FsbG9jYXRlZDsKICAgICByZXN1bHQuYnl0ZXNSZXNlcnZlZCA9IG1fYnl0
ZXNSZXNlcnZlZDsKQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZy
ZWVTcGFjZUZyb21SZWxlCiAKIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlc2hGcmVlU3BhY2Uo
dm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKIHsKLSAgICBTcGluTG9ja0hvbGRlciBs
b2NrZXIoJm1fbG9jayk7CisgICAgTXV0ZXhIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogICAgIG1f
Ynl0ZXNSZXNlcnZlZCArPSBzaXplSW5CeXRlczsKICAgICBhZGRGcmVlU3BhY2Uoc3RhcnQsIHNp
emVJbkJ5dGVzKTsKIH0KQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFk
ZEZyZXNoRnJlZVNwYWNlKHZvCiBzaXplX3QgTWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VT
aXplKCkKIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xv
Y2spOworICAgIE11dGV4SG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBzaXplX3QgcmVzdWx0
ID0gMDsKICAgICBmb3IgKEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAu
Zmlyc3QoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnN1Y2Nlc3NvcigpKQogICAgICAgICByZXN1bHQg
Kz0gbm9kZS0+bV9zaXplSW5CeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlz
aW9uIDE4Nzk3MykKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTXV0ZXguaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKQEAgLTE4Myw3ICsxODMsNyBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX2J5dGVz
UmVzZXJ2ZWQ7CiAgICAgc2l6ZV90IG1fYnl0ZXNDb21taXR0ZWQ7CiAgICAgCi0gICAgU3Bpbkxv
Y2sgbV9sb2NrOworICAgIE11dGV4IG1fbG9jazsKIAogICAgIE1ldGFBbGxvY2F0b3JUcmFja2Vy
KiBtX3RyYWNrZXI7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL011dGV4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NdXRleC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RG
L3d0Zi9NdXRleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIk11dGV4LmgiCisKKyNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgorI2lu
Y2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRl
IDx0aHJlYWQ+CisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgeworCisvLyBUaGlzIGRh
dGEgc3RydWN0dXJlIHNlcnZlcyB0aHJlZSBwdXJwb3NlczoKKy8vCisvLyAxKSBBIHBhcmtpbmcg
bWVjaGFuaXNtIGZvciB0aHJlYWRzIHRoYXQgZ28gdG8gc2xlZXAuIFRoYXQgaW52b2x2ZXMganVz
dCBhIHN5c3RlbSBtdXRleCBhbmQKKy8vICAgIGNvbmRpdGlvbiB2YXJpYWJsZS4KKy8vCisvLyAy
KSBBIHF1ZXVlIG5vZGUgZm9yIHdoZW4gYSB0aHJlYWQgaXMgb24gc29tZSBNdXRleCdzIHF1ZXVl
LgorLy8KKy8vIDMpIFRoZSBxdWV1ZSBoZWFkLiBUaGlzIGlzIGtpbmQgb2YgZnVua3kuIFdoZW4g
YSB0aHJlYWQgaXMgdGhlIGhlYWQgb2YgYSBxdWV1ZSwgaXQgYWxzbyBzZXJ2ZXMgYXMKKy8vICAg
IHRoZSBiYXNpYyBxdWV1ZSBib29ra2VlcGluZyBkYXRhIHN0cnVjdHVyZS4gV2hlbiBhIHRocmVh
ZCBpcyBkZXF1ZXVlZCwgdGhlIG5leHQgdGhyZWFkIGluIHRoZQorLy8gICAgcXVldWUgdGFrZXMg
b24gdGhlIHF1ZXVlIGhlYWQgZHV0aWVzLgorc3RydWN0IFRocmVhZERhdGEgeworICAgIC8vIFRo
ZSBwYXJraW5nIG1lY2hhbmlzbS4KKyAgICBib29sIHNob3VsZFBhcmsgeyBmYWxzZSB9OworICAg
IHN0ZDo6bXV0ZXggcGFya2luZ011dGV4OworICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHBh
cmtpbmdDb25kaXRpb247CisKKyAgICAvLyBUaGUgcXVldWUgbm9kZS4KKyAgICBUaHJlYWREYXRh
KiBuZXh0SW5RdWV1ZSB7IG51bGxwdHIgfTsKKworICAgIC8vIFRoZSBxdWV1ZSBpdHNlbGYuCisg
ICAgVGhyZWFkRGF0YSogcXVldWVUYWlsIHsgbnVsbHB0ciB9OworfTsKKworVGhyZWFkU3BlY2lm
aWM8VGhyZWFkRGF0YT4qIHRocmVhZERhdGE7CisKK1RocmVhZERhdGEqIG15VGhyZWFkRGF0YSgp
Cit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOworICAgIHN0ZDo6
Y2FsbF9vbmNlKAorICAgICAgICBpbml0aWFsaXplT25jZSwKKyAgICAgICAgW117CisgICAgICAg
ICAgICB0aHJlYWREYXRhID0gbmV3IFRocmVhZFNwZWNpZmljPFRocmVhZERhdGE+KCk7CisgICAg
ICAgIH0pOworCisgICAgcmV0dXJuICp0aHJlYWREYXRhOworfQorCit9IC8vIGFub255bW91cyBu
YW1lc3BhY2UKKwordm9pZCBNdXRleEJhc2U6OmxvY2tTbG93KCkKK3sKKyAgICB1bnNpZ25lZCBz
cGluQ291bnQgPSAwOworCisgICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJl
IG9wdGltYWwgYmFzZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KKyAgICBjb25zdCB1
bnNpZ25lZCBzcGluTGltaXQgPSA0MDsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHVp
bnRwdHJfdCBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICAmJiBt
X3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50V29yZFZhbHVlLCBjdXJyZW50V29yZFZh
bHVlIHwgaXNIZWxkQml0KSkgeworICAgICAgICAgICAgLy8gU3VjY2VzcyEgV2UgYWNxdWlyZWQg
dGhlIGxvY2suCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBJ
ZiB0aGVyZSBpcyBubyBxdWV1ZSBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4g
anVzdCB0cnkgdG8gc3BpbiBhcm91bmQgYWdhaW4uCisgICAgICAgIGlmICghKGN1cnJlbnRXb3Jk
VmFsdWUgJiB+bWFzaykgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgICAgICBz
cGluQ291bnQrKzsKKyAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5lZWQgdG8gcHV0IG91
cnNlbHZlcyBvbiB0aGUgcXVldWUuIENyZWF0ZSB0aGUgcXVldWUgaWYgb25lIGRvZXMgbm90IGV4
aXN0LiBUaGlzIHJlcXVyaWVzCisgICAgICAgIC8vIG93bmluZyB0aGUgcXVldWUgZm9yIGEgbGl0
dGxlIGJpdC4gVGhlIGxvY2sgdGhhdCBjb250cm9scyB0aGUgcXVldWUgaXMgaXRzZWxmIGEgc3Bp
bmxvY2suCisgICAgICAgIC8vIEJ1dCBiZWZvcmUgd2UgYWNxdWlyZSB0aGUgcXVldWUgc3Bpbmxv
Y2ssIHdlIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSBUaHJlYWREYXRhIGZvciB0aGlzCisgICAg
ICAgIC8vIHRocmVhZC4KKyAgICAgICAgVGhyZWFkRGF0YSogbWUgPSBteVRocmVhZERhdGEoKTsK
KyAgICAgICAgQVNTRVJUKCFtZS0+c2hvdWxkUGFyayk7CisgICAgICAgIEFTU0VSVCghbWUtPm5l
eHRJblF1ZXVlKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+cXVldWVUYWlsKTsKKworICAgICAgICAv
LyBSZWxvYWQgdGhlIGN1cnJlbnQgd29yZCB2YWx1ZSwgc2luY2Ugc29tZSB0aW1lIG1heSBoYXZl
IHBhc3NlZC4KKyAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisKKyAg
ICAgICAgLy8gV2UgcHJvY2VlZCBvbmx5IGlmIHRoZSBxdWV1ZSBsb2NrIGlzIG5vdCBoZWxkLCB0
aGUgTXV0ZXggaXMgaGVsZCwgYW5kIHdlIHN1Y2NlZWQgaW4KKyAgICAgICAgLy8gYWNxdWlyaW5n
IHRoZSBxdWV1ZSBsb2NrLgorICAgICAgICBpZiAoKGN1cnJlbnRXb3JkVmFsdWUgJiBsb2NrZWRR
dWV1ZUJpdCkKKyAgICAgICAgICAgIHx8ICEoY3VycmVudFdvcmRWYWx1ZSAmIGlzSGVsZEJpdCkK
KyAgICAgICAgICAgIHx8ICFtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50V29yZFZh
bHVlLCBjdXJyZW50V29yZFZhbHVlIHwgbG9ja2VkUXVldWVCaXQpKSB7CisgICAgICAgICAgICBz
dGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICBtZS0+c2hvdWxkUGFyayA9IHRydWU7CisKKyAgICAgICAgLy8gV2Ugb3du
IHRoZSBxdWV1ZS4gTm9ib2R5IGNhbiBlbnF1ZXVlIG9yIGRlcXVldWUgdW50aWwgd2UncmUgZG9u
ZS4gQWxzbywgaXQncyBub3QgcG9zc2libGUKKyAgICAgICAgLy8gdG8gcmVsZWFzZSB0aGUgTXV0
ZXggd2hpbGUgd2UgaG9sZCB0aGUgcXVldWUgbG9jay4KKyAgICAgICAgVGhyZWFkRGF0YSogcXVl
dWVIZWFkID0gYml0d2lzZV9jYXN0PFRocmVhZERhdGEqPihjdXJyZW50V29yZFZhbHVlICYgfm1h
c2spOworICAgICAgICBpZiAocXVldWVIZWFkKSB7CisgICAgICAgICAgICAvLyBQdXQgdGhpcyB0
aHJlYWQgYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUuCisgICAgICAgICAgICBxdWV1ZUhlYWQtPnF1
ZXVlVGFpbC0+bmV4dEluUXVldWUgPSBtZTsKKyAgICAgICAgICAgIHF1ZXVlSGVhZC0+cXVldWVU
YWlsID0gbWU7CisKKyAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIHF1ZXVlIGxvY2suCisgICAg
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1f
d29yZC5sb2FkKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiB+
bWFzayk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBsb2NrZWRR
dWV1ZUJpdCk7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtX3dvcmQuY29tcGFyZUV4
Y2hhbmdlV2VhaygKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSwgY3VycmVu
dFdvcmRWYWx1ZSAmIH5sb2NrZWRRdWV1ZUJpdCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBNYWtlIHRoaXMgdGhyZWFkIGJlIHRoZSBxdWV1ZS1oZWFk
LgorICAgICAgICAgICAgcXVldWVIZWFkID0gbWU7CisgICAgICAgICAgICBtZS0+cXVldWVUYWls
ID0gbWU7CisKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgYSBDQVMgbG9vcCB0byBpbnN0YWxsIHRo
ZSBxdWV1ZSBoZWFkLiBUaGlzIENBUyBsb29wIGlzIGp1c3QgdG8gcHJvdGVjdCBhZ2FpbnN0Cisg
ICAgICAgICAgICAvLyBpc0hlbGRCaXQgY2hhbmdpbmcuIFdlIGFsc28gcmVsZWFzZSB0aGUgcXVl
dWUgbG9jayBoZXJlLgorICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIGN1
cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAgICAgICAgIC8vIE5vYm9k
eSBjb3VsZCBoYXZlIGluc3RhbGxlZCBhIHF1ZXVlIGJlY2F1c2Ugd2UgbG9ja2VkIHRoZSBxdWV1
ZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoIShjdXJyZW50V29yZFZhbHVlICYgfm1hc2spKTsK
KyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaG9sZGluZyB0aGUgcXVldWUgbG9jay4KKyAgICAg
ICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KTsKKyAg
ICAgICAgICAgICAgICAvLyBOb2JvZHkgY2FuIHJlbGVhc2UgdGhlIGxvY2sgd2hpbGUgd2UgaG9s
ZCB0aGUgcXVldWUgbG9jay4KKyAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1
ZSAmIGlzSGVsZEJpdCk7CisKKyAgICAgICAgICAgICAgICB1aW50cHRyX3QgbmV3V29yZFZhbHVl
ID0gY3VycmVudFdvcmRWYWx1ZTsKKyAgICAgICAgICAgICAgICBuZXdXb3JkVmFsdWUgfD0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4ocXVldWVIZWFkKTsKKyAgICAgICAgICAgICAgICBuZXdXb3Jk
VmFsdWUgJj0gfmxvY2tlZFF1ZXVlQml0OworCisgICAgICAgICAgICAgICAgaWYgKG1fd29yZC5j
b21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIG5ld1dvcmRWYWx1ZSkpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gQXQgdGhpcyBwb2ludCBldmVyeW9uZSB3aG8gYWNxdWlyZXMgdGhlIHF1ZXVlIGxvY2sg
d2lsbCBzZWUgbWUgb24gdGhlIHF1ZXVlLCBhbmQgYW55b25lIHdobworICAgICAgICAvLyBhY3F1
aXJlcyBtZSdzIGxvY2sgd2lsbCBzZWUgdGhhdCBtZSB3YW50cyB0byBwYXJrLiBOb3RlIHRoYXQg
c2hvdWxkUGFyayBtYXkgaGF2ZSBiZWVuCisgICAgICAgIC8vIGNsZWFyZWQgYXMgc29vbiBhcyB0
aGUgcXVldWUgbG9jayB3YXMgcmVsZWFzZWQgYWJvdmUsIGJ1dCBpdCB3aWxsIGhhcHBlbiB3aGls
ZSB0aGUKKyAgICAgICAgLy8gcmVsZWFzaW5nIHRocmVhZCBob2xkcyBtZSdzIHBhcmtpbmdNdXRl
eC4KKworICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+
IGxvY2tlcihtZS0+cGFya2luZ011dGV4KTsKKyAgICAgICAgICAgIHdoaWxlIChtZS0+c2hvdWxk
UGFyaykKKyAgICAgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0KGxvY2tlcik7
CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKKyAgICAgICAg
QVNTRVJUKCFtZS0+bmV4dEluUXVldWUpOworICAgICAgICBBU1NFUlQoIW1lLT5xdWV1ZVRhaWwp
OworICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGNhbiBsb29wIGFyb3VuZCBhbmQgdHJ5IHRv
IGFjcXVpcmUgdGhlIGxvY2sgYWdhaW4uCisgICAgfQorfQorCit2b2lkIE11dGV4QmFzZTo6dW5s
b2NrU2xvdygpCit7CisgICAgLy8gSWYgdGhlIGZhc3QgcGF0aCBmYWlsZWQsIGl0IGNhbiBvbmx5
IGJlIGJlY2F1c2Ugc29tZW9uZSBwdXQgYSB0aHJlYWQgb24gdGhlIHF1ZXVlIG9yIHRoZSBxdWV1
ZQorICAgIC8vIGxvY2sgaXMgaGVsZC4gSWYgdGhlIHF1ZXVlIGxvY2sgaXMgaGVsZCwgaXQgY2Fu
IG9ubHkgYmUgYmVjYXVzZSBzb21lb25lICp3aWxsKiBlbnF1ZXVlIGEgdGhyZWFkCisgICAgLy8g
b250byB0aGUgcXVldWUuCisKKyAgICAvLyBBY3F1aXJlIHRoZSBxdWV1ZSBsb2NrLgorICAgIGZv
ciAoOzspIHsKKyAgICAgICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9h
ZCgpOworCisgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNIZWxkQml0KTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChjdXJyZW50V29yZFZhbHVlICYgbG9ja2VkUXVldWVCaXQpIHsK
KyAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBxdWV1ZSBsb2NrIGlzIG5vdCBo
ZWxkLCB0aGVuIHRoZXJlIG11c3QgYmUgYW4gZW50cnkgb24gdGhlIHF1ZXVlLgorICAgICAgICBB
U1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIH5tYXNrKTsKKworICAgICAgICBpZiAobV93b3JkLmNv
bXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwgY3VycmVudFdvcmRWYWx1ZSB8IGxv
Y2tlZFF1ZXVlQml0KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHVpbnRwdHJf
dCBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKyAgICAgICAgCisgICAgLy8gQWZ0
ZXIgd2UgYWNxdWlyZSB0aGUgcXVldWUgbG9jaywgdGhlIE11dGV4IG11c3Qgc3RpbGwgYmUgaGVs
ZCBhbmQgdGhlIHF1ZXVlIG11c3QgYmUKKyAgICAvLyBub24tZW1wdHkuIFRoZSBxdWV1ZSBtdXN0
IGJlIG5vbi1lbXB0eSBzaW5jZSBvbmx5IHRoZSBsb2NrU2xvdygpIG1ldGhvZCBjb3VsZCBoYXZl
IGhlbGQgdGhlCisgICAgLy8gcXVldWUgbG9jayBhbmQgaWYgaXQgZGlkIHRoZW4gaXQgb25seSBy
ZWxlYXNlcyBpdCBhZnRlciBwdXR0aW5nIHNvbWV0aGluZyBvbiB0aGUgcXVldWUuCisgICAgQVNT
RVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0hlbGRCaXQpOworICAgIEFTU0VSVChjdXJyZW50V29y
ZFZhbHVlICYgbG9ja2VkUXVldWVCaXQpOworICAgIFRocmVhZERhdGEqIHF1ZXVlSGVhZCA9IGJp
dHdpc2VfY2FzdDxUaHJlYWREYXRhKj4oY3VycmVudFdvcmRWYWx1ZSAmIH5tYXNrKTsKKyAgICBB
U1NFUlQocXVldWVIZWFkKTsKKworICAgIFRocmVhZERhdGEqIG5ld1F1ZXVlSGVhZCA9IHF1ZXVl
SGVhZC0+bmV4dEluUXVldWU7CisgICAgLy8gRWl0aGVyIHRoaXMgd2FzIHRoZSBvbmx5IHRocmVh
ZCBvbiB0aGUgcXVldWUsIGluIHdoaWNoIGNhc2Ugd2UgZGVsZXRlIHRoZSBxdWV1ZSwgb3IgdGhl
cmUKKyAgICAvLyBhcmUgc3RpbGwgbW9yZSB0aHJlYWRzIG9uIHRoZSBxdWV1ZSwgaW4gd2hpY2gg
Y2FzZSB3ZSBjcmVhdGUgYSBuZXcgcXVldWUgaGVhZC4KKyAgICBpZiAobmV3UXVldWVIZWFkKQor
ICAgICAgICBuZXdRdWV1ZUhlYWQtPnF1ZXVlVGFpbCA9IHF1ZXVlSGVhZC0+cXVldWVUYWlsOwor
CisgICAgLy8gQ2hhbmdlIHRoZSBxdWV1ZSBoZWFkLCBwb3NzaWJseSByZW1vdmluZyBpdCBpZiBu
ZXdRdWV1ZUhlYWQgaXMgbnVsbC4gVGhpcyBpcyBhIENBUyBsb29wCisgICAgLy8gb3V0IG9mIHBh
cmFub2lhLiBJdCBkb2Vzbid0IGhhdmUgdG8gYmUgc2luY2UgdGhlIHN0YXRlIG9mIHRoZSBsb2Nr
IGNhbm5vdCBjaGFuZ2UgcmlnaHQgbm93LgorICAgIC8vIFdlIHdvdWxkIGdldCBubyBwZXJmb3Jt
YW5jZSB3aW4gZnJvbSBtYWtpbmcgdGhpcyBhbnl0aGluZyBidXQgYSBDQVMgbG9vcCwgYW5kIGl0
IHdvdWxkIG1ha2UKKyAgICAvLyBpdCBjb25mdXNpbmcgdG8gYWRkIG1vcmUgYml0cyB0byB0aGUg
bG9jay4KKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQu
bG9hZCgpOworCisgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNIZWxkQml0KTsK
KyAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBsb2NrZWRRdWV1ZUJpdCk7CisgICAg
ICAgIEFTU0VSVCgoY3VycmVudFdvcmRWYWx1ZSAmIH5tYXNrKSA9PSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihxdWV1ZUhlYWQpKTsKKworICAgICAgICB1aW50cHRyX3QgbmV3V29yZFZhbHVlID0g
Y3VycmVudFdvcmRWYWx1ZTsKKyAgICAgICAgbmV3V29yZFZhbHVlICY9IH5pc0hlbGRCaXQ7IC8v
IFJlbGVhc2UgdGhlIE11dGV4LgorICAgICAgICBuZXdXb3JkVmFsdWUgJj0gfmxvY2tlZFF1ZXVl
Qml0OyAvLyBSZWxlYXNlIHRoZSBxdWV1ZSBsb2NrLgorICAgICAgICBuZXdXb3JkVmFsdWUgJj0g
bWFzazsgLy8gQ2xlYXIgb3V0IHRoZSBvbGQgcXVldWUgaGVhZC4KKyAgICAgICAgbmV3V29yZFZh
bHVlIHw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld1F1ZXVlSGVhZCk7IC8vIEluc3RhbGwg
bmV3IHF1ZXVlIGhlYWQuCisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fd29yZC5jb21wYXJl
RXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIG5ld1dvcmRWYWx1ZSkpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICAvLyBOb3cgdGhlIGxvY2sgaXMgYXZhaWxhYmxlIGZvciBh
Y3F1aXNpdGlvbi4gQnV0IHdlIGp1c3QgaGF2ZSB0byB3YWtlIHVwIHRoZSBvbGQgcXVldWUgaGVh
ZC4KKyAgICAvLyBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIQorCisgICAgcXVldWVIZWFkLT5uZXh0
SW5RdWV1ZSA9IG51bGxwdHI7CisgICAgcXVldWVIZWFkLT5xdWV1ZVRhaWwgPSBudWxscHRyOwor
CisgICAgLy8gV2UgZG8gdGhpcyBjYXJlZnVsbHkgYmVjYXVzZSB0aGlzIG1heSBydW4gZWl0aGVy
IGJlZm9yZSBvciBkdXJpbmcgdGhlIHBhcmtpbmdNdXRleCBjcml0aWNhbAorICAgIC8vIHNlY3Rp
b24gaW4gbG9ja1Nsb3coKS4KKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjpt
dXRleD4gbG9ja2VyKHF1ZXVlSGVhZC0+cGFya2luZ011dGV4KTsKKyAgICAgICAgcXVldWVIZWFk
LT5zaG91bGRQYXJrID0gZmFsc2U7CisgICAgICAgIC8vIFVzZSBub3RpZnlfYWxsKCkgb3V0IG9m
IHBhcmFub2lhLiBJbiByZWFsaXR5LCBvbmx5IHRoZSBibG9ja2VkIHRocmVhZCBpcyB3YWl0aW5n
IG9uCisgICAgICAgIC8vIHRoaXMgY29uZGl0aW9uIHZhcmlhYmxlLgorICAgICAgICBxdWV1ZUhl
YWQtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X2FsbCgpOworICAgIH0KKworICAgIC8vIFRoZSBv
bGQgcXVldWUgaGVhZCBjYW4gbm93IGNvbnRlbmQgZm9yIHRoZSBsb2NrIGFnYWluLiBXZSdyZSBk
b25lIQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvTXV0
ZXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NdXRleC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dURi93dGYvTXV0ZXguaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFdURl9NdXRleF9oCisjZGVmaW5lIFdURl9NdXRleF9oCisKKyNpbmNsdWRlIDx3dGYvQXRvbWlj
cy5oPgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEg
V1RGOjpNdXRleCBpcyBhIGZ1bGx5IGFkYXB0aXZlIG11dGV4IHRoYXQgZ2l2ZXMgeW91IHRoZSBi
ZXN0IG9mIFNwaW5Mb2NrIGFuZCBzdGQ6Om11dGV4LiBGb3IKKy8vIHNtYWxsIGNyaXRpY2FsIHNl
Y3Rpb25zICh0aGF0IHRha2UgbmFub3NlY29uZHMpLCBpdCB3aWxsIHVzdWFsbHkgcGVyZm9ybSB3
aXRoaW4gMnggb2YgYSBTcGluTG9jayBpbgorLy8gYm90aCB0aGUgY29udGVuZGVkIGFuZCB1bmNv
bnRlbmRlZCBjYXNlLiBXaGVuIHVzaW5nIGEgc3RkOjptdXRleCwgc3VjaCBjcml0aWNhbCBzZWN0
aW9ucyB0YWtlIHVwIHRvCisvLyAxMDB4IGxvbmdlciB0aGFuIE11dGV4IGluIHRoZSBjb250ZW5k
ZWQgY2FzZSwgb3IgM3ggbG9uZ2VyIHRoYW4gTXV0ZXggaW4gdGhlIHVuY29udGVuZGVkIGNhc2Uu
IEZvcgorLy8gbG9uZ2VyIGNyaXRpY2FsIHNlY3Rpb25zICh0aGF0IHRha2UgdGVucyBvZiBtaWNy
b3NlY29uZHMpLCBNdXRleCB3aWxsIHBlcmZvcm0gYXMgd2VsbCBhcyBhCisvLyBzdGQ6Om11dGV4
IGFuZCBzbGlnaHRseSBiZXR0ZXIgdGhhbiBhIFNwaW5Mb2NrLiBCdXQsIGNydWNpYWxseSwgYSBT
cGluTG9jayB3aWxsIGJ1cm4gdXAgdG8gOTB4IG1vcmUKKy8vIHRpbWUgaW4gdGhlIGtlcm5lbCBm
b3Igc3VjaCBjcml0aWNhbCBzZWN0aW9ucyB0aGFuIGVpdGhlciBzdGQ6Om11dGV4IG9yIE11dGV4
LiBIZW5jZSwgdXNpbmcgTXV0ZXgKKy8vIHdpbGwgbWFrZSB0aGUgY29tbW9uIGNhc2Ugb2YgbG9j
a2luZyBwZXJmb3JtIGNsb3NlIHRvIFNwaW5Mb2NrIGZvciBhbnkgY3JpdGljYWwgc2VjdGlvbiB0
aGF0IGRvZXMKKy8vIG1vcmUgdGhhbiBhIGZldyBuYW5vc2Vjb25kcyBvZiB3b3JrIHdoaWxlIGJl
aW5nIGFzIGtpbmQgdG8gdGhlIHNjaGVkdWxlciBmb3IgbG9uZ2VyIGNyaXRpY2FsCisvLyBzZWN0
aW9ucyBhcyBhIHN0ZDo6bXV0ZXguCisvLworLy8gTGlrZSBTcGluTG9jaywgTG9jayB0YWtlcyB2
ZXJ5IGxpdHRsZSBtZW1vcnkgLSBqdXN0IHNpemVvZih2b2lkKiksIHRob3VnaCBzZWUgYSBkZXRh
aWxlZCBjYXZlYXQKKy8vIGJlbG93LgorLy8KKy8vIEdlbmVyYWxseSwgeW91IHNob3VsZCB1c2Ug
TXV0ZXggaW5zdGVhZCBvZiBTcGluTG9jayBiZWNhdXNlIHdoaWxlIGl0IHBlbmFsaXplcyB5b3Ug
c2xpZ2h0bHksIHlvdQorLy8gbWFrZSB1cCBmb3IgaXQgYnkgbm90IHdhc3RpbmcgQ1BVIGN5Y2xl
cyBpbiBjYXNlIG9mIGNvbnRlbnRpb24uIFlvdSBzaG91bGQgdXNlIE11dGV4IGluc3RlYWQgb2YK
Ky8vIHN0ZDo6bXV0ZXggZXZlcnl3aGVyZSB0aGF0IHlvdSBkb24ndCBuZWVkIHRvIGFsc28gdXNl
IGEgc3RkOjpjb25kaXRpb25fdmFyaWFibGUuCisvLworLy8gVGhlIExvY2sgaGFzIHRoZSBmb2xs
b3dpbmcgbmljZSBwcm9wZXJ0aWVzOgorLy8KKy8vIC0gVW5jb250ZW5kZWQgZmFzdCBwYXRocyBm
b3IgbG9jayBhY3F1aXNpdGlvbiBhbmQgbG9jayByZWxlYXNlIHRoYXQgYXJlIGFsbW9zdCBhcyBm
YXN0IGFzIHRoZQorLy8gICB1bmNvbnRlbmRlZCBmYXN0IHBhdGhzIG9mIGEgc3BpbmxvY2suIFRo
ZSBvbmx5IG92ZXJoZWFkIGlzIHRoYXQgdGhlIHNwaW5sb2NrIHdpbGwgbm90IENBUyBvbgorLy8g
ICByZWxlYXNlLCB3aGlsZSBNdXRleCB3aWxsIENBUy4gVGhpcyBvdmVyaGVhZCAqY2FuKiBzbG93
IHRoaW5ncyBkb3duIGZvciBleHRyZW1lbHkgc21hbGwgY3JpdGljYWwKKy8vICAgc2VjdGlvbnMg
dGhhdCBkbyBsaXR0bGUgb3Igbm90aGluZyAtIGl0IG1ha2VzIHRoZW0gMnggc2xvd2VyIHNpbmNl
IGluIHRoYXQgY2FzZSwgQ0FTIGlzIHRoZSBtb3N0CisvLyAgIGV4cGVuc2l2ZSBpbnN0cnVjdGlv
biBhbmQgaGF2aW5nIHR3byBvZiB0aGVtIGlzIHR3aWNlIGFzIGJhZCBhcyBqdXN0IGhhdmluZyBv
bmUuIEhvd2V2ZXIsIHRoaXMKKy8vICAgbG9jayBpbXBsZW1lbnRhdGlvbiBpcyBzdGlsbCBhbG1v
c3QgM3ggZmFzdGVyIHRoYW4gYSBwbGF0Zm9ybSBtdXRleCBpbiB0aG9zZSBjYXNlcy4gSXQncyB1
bmxpa2VseQorLy8gICB0aGF0IHlvdSdsbCBlbmNvdW50ZXIgbm8tb3AgY3JpdGljYWwgc2VjdGlv
bnMsIHNvIHVzdWFsbHksIHRoaXMgbG9jayBpcyBiZXR0ZXIgdGhhbiBhIHNwaW5sb2NrLgorLy8K
Ky8vIC0gQ29udGVuZGVkIGZhc3QgcGF0aCB0aGF0IGF0dGVtcHRzIHRvIHNwaW4gYW5kIHlpZWxk
IGZvciBzb21lIG51bWJlciBvZiB0aW1lcy4gRm9yIGNyaXRpY2FsCisvLyAgIHNlY3Rpb25zIHRo
YXQgYXJlIGhlbGQgb25seSBicmllZmx5LCB0aGlzIGFsbG93cyBNdXRleCB0byBwZXJmb3JtIGFs
bW9zdCBhcyB3ZWxsIGFzIGEgU3BpbkxvY2suCisvLyAgIFNwaW5Mb2NrIGNhbiBzdGlsbCBiZSBh
bG1vc3QgMnggZmFzdGVyIHRoYW4gTXV0ZXggaWYgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgYSBu
by1vcCwgYnV0IHRoaXMKKy8vICAgYWR2YW50YWdlIGRpbWluaXNoZXMgYXMgdGhlIGNyaXRpY2Fs
IHNlY3Rpb24gZ3Jvd3MuCisvLworLy8gLSBDb250ZW5kZWQgc2xvdyBwYXRoIHRoYXQgZW5xdWV1
ZXMgdGhlIGNvbnRlbmRpbmcgdGhyZWFkIGFuZCBjYXVzZXMgaXQgdG8gd2FpdCBvbiBhIGNvbmRp
dGlvbgorLy8gICB2YXJpYWJsZSB1bnRpbCB0aGUgbG9jayBpcyByZWxlYXNlZC4gVGhpcyBpcyB0
aGUgb25seSBjYXNlIGluIHdoaWNoIHN5c3RlbSBtdXRleGVzIGFuZCBjb25kaXRpb24KKy8vICAg
dmFyaWFibGVzIGFyZSB1c2VkLiBUaGlzIGNhc2UgaXMgcmFyZSBhbmQgc2VsZi1saW1pdGluZzog
aXQgd2lsbCBvbmx5IGhhcHBlbiB3aGVuIGEgbG9jayBpcyBoZWxkCisvLyAgIGZvciBsb25nIGVu
b3VnaCB0aGF0IHNwaW5uaW5nIHNvbWUgbnVtYmVyIG9mIHRpbWVzIGRvZXNuJ3QgYWNxdWlyZSBp
dC4gVGhlIGZhY3QgdGhhdCBNdXRleCBkb2VzCisvLyAgIHRoaXMgYXMgYSBmYWxsYmFjayB3aGVu
IHNwaW5uaW5nIGZvciBzb21lIG51bWJlciBvZiB0aW1lcyBmYWlscyBtZWFucyB0aGF0IGl0IHdp
bGwgYnVybgorLy8gICBkcmFtYXRpY2FsbHkgZmV3ZXIgQ1BVIGN5Y2xlcyAtIGZvciBleGFtcGxl
IHdpdGggMTAgdGhyZWFkcyBvbiBhbiA4IGxvZ2ljYWwgQ1BVIG1hY2hpbmUgYWNxdWlyaW5nCisv
LyAgIGEgY3JpdGljYWwgc2VjdGlvbiB0aGF0IHRha2VzIDUwIG1pY3Jvc2Vjb25kcywgdGhlIFdU
RiBTcGluTG9jayB3aWxsIGNhdXNlIDkweCBtb3JlIHRpbWUgdG8gYmUKKy8vICAgc3BlbnQgaW4g
dGhlIGtlcm5lbCB0aGFuIE11dGV4LgorLy8KKy8vIC0gVmVyeSBsb3cgbWVtb3J5IHVzYWdlLiBF
YWNoIE11dGV4IHJlcXVpcmVzIG9ubHkgc2l6ZW9mKHZvaWQqKSBtZW1vcnkuIFdoZW4gdGhlIGNv
bnRlbmRlZCBzbG93CisvLyAgIHBhdGggaXMgYWN0aXZhdGVkLCBNdXRleCBvbmx5IHJlbGllcyBv
biBlYWNoIHRocmVhZCBoYXZpbmcgYSBwcmVhbGxvY2F0ZWQgdGhyZWFkLXNwZWNpZmljIGRhdGEK
Ky8vICAgc3RydWN0dXJlIGNhbGxlZCBUaHJlYWREYXRhIHRoYXQsIHRvZ2V0aGVyIHdpdGggdGhl
IE11dGV4IGl0c2VsZiwgaXMgdXNlZCB0byBidWlsZCB1cCBhIHRocmVhZAorLy8gICBxdWV1ZS4g
U28sIHRoZSB0b3RhbCBtZW1vcnkgdXNhZ2Ugb2YgYWxsIE11dGV4ZXMgaXMgc3RpbGwgYm91bmRl
ZCBieToKKy8vCisvLyAgICAgICBudW1iZXJPZkxvY2tzICogc2l6ZW9mKHZvaWQqKSArIG51bWJl
ck9mVGhyZWFkcyAqIHNpemVvZihUaHJlYWREYXRhKQorLy8KKy8vICAgV2hlcmUgVGhyZWFkRGF0
YSBpcyBhIGRlY2VudGx5IGxhcmdlIGRhdGEgc3RydWN0dXJlLCBidXQgd2Ugd2lsbCBvbmx5IGV2
ZXIgaGF2ZSBvbmUgcGVyIHRocmVhZCwKKy8vICAgcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9m
IE11dGV4ZXMgaW4gbWVtb3J5LiBBbm90aGVyIHdheSB0byB2aWV3IHRoaXMgaXMgdGhhdCB0aGUg
d29yc3QgY2FzZQorLy8gICBtZW1vcnkgdXNhZ2UgcGVyIE11dGV4IGlzOgorLy8KKy8vICAgICAg
IHNpemVvZih2b2lkKikgKyBudW1iZXJPZlRocmVhZHMgLyBudW1iZXJPZkxvY2tzICogc2l6ZW9m
KFRocmVhZERhdGEpCisvLworLy8gICBTbywgdW5sZXNzIHlvdSBoYXZlIGEgc21hbGwgbnVtYmVy
IG9mIE11dGV4ZXMgKG9yLCBhIGxhcmdlIG51bWJlciBvZiB0aHJlYWRzLCB3aGljaCBpcyBmYXIg
bGVzcworLy8gICBsaWtlbHkpLCB0aGUgbWVtb3J5IHVzYWdlIHBlci1NdXRleCBpcyBzdGlsbCBn
b2luZyB0byBiZSBzb21ld2hlcmUgYXJvdW5kIHNpemVvZih2b2lkKikuCisvLworLy8gLSBCYXJn
aW5nIGZhc3QgcGF0aHMuIFRoZSBNdXRleCBpcyB0dW5lZCBmb3IgbWF4aW11bSB0aHJvdWdocHV0
IHJhdGhlciB0aGFuIG1heGltdW0gZmFpcm5lc3MuIElmCisvLyAgIGEgdGhyZWFkIHJlbGVhc2Vz
IGEgTXV0ZXggdGhhdCB3YXMgY29udGVuZGVkIGFuZCBoYWQgYSBxdWV1ZSBvZiB3YWl0aW5nIHRo
cmVhZHMsIHRoZW4gaXQgd2lsbAorLy8gICB3YWtlIHVwIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSwg
YnV0IGl0IHdpbGwgYWxzbyBtYXJrIHRoZSBsb2NrIGFzIGJlaW5nIGF2YWlsYWJsZS4gVGhpcyBt
ZWFucyB0aGF0CisvLyAgIHNvbWUgb3RoZXIgdGhyZWFkIHRoYXQgaXMganVzdCBub3cgYXR0ZW1w
dGluZyB0byBhY3F1aXJlIHRoZSBsb2NrIG1heSBnZXQgaXQgYmVmb3JlIHRoZSB0aHJlYWQKKy8v
ICAgdGhhdCBnb3Qgd29rZW4gdXAuIFdoZW4gYSB0aHJlYWQgYmFyZ2VzIGludG8gdGhlIGxvY2ss
IHRoZSB0aHJlYWQgdGhhdCBnb3Qgd29rZW4gdXAgd2lsbCBzaW1wbHkKKy8vICAgZ28gYmFjayB0
byB0aGUgZW5kIG9mIHRoZSBxdWV1ZS4gVGhlIGJhcmdpbmcgYmVoYXZpb3IgZW5kcyB1cCBiZWlu
ZyBwcm9iYWJpbGlzdGljIG9uIG1vc3QKKy8vICAgcGxhdGZvcm1zIGFuZCBldmVuIHRob3VnaCBp
dCBtYXkgYmUgdW5mYWlyIHRvIHNvbWUgdGhyZWFkIGF0IHNvbWUgbW9tZW50IGluIHRpbWUsIGl0
IHdpbGwgcmFyZWx5CisvLyAgIGhhdmUgYSBsb25nIHN0cmVhayBvZiB1bmZhaXJuZXNzIHRvd2Fy
ZHMgYW55IHBhcnRpY3VsYXIgdGhyZWFkOiBldmVudHVhbGx5IGVhY2ggdGhyZWFkIHdhaXRpbmcg
b24KKy8vICAgdGhlIGxvY2sgd2lsbCBnZXQgdG8gaGF2ZSBhIHR1cm4gc28gbG9uZyBhcyBubyB0
aHJlYWQganVzdCBob2xkcyB0aGUgbG9jayBmb3JldmVyLiBUaGF0IHNhaWQsCisvLyAgIHRoZXJl
ICppcyogYSBjaGFuY2Ugb2YgcGF0aG9sb2dpZXMgLSB1c2VycyBvZiBNdXRleCBzaG91bGQgbm90
IGRlcGVuZCBvbiBmaXJzdC1pbiwgZmlyc3Qtb3V0IGxvY2sKKy8vICAgYWNxdWlzaXRpb24gb3Jk
ZXIgdW5kZXIgY29udGVudGlvbi4gVGhlIHNhbWUgY2F2ZWF0IGlzIGdlbmVyYWxseSB0cnVlIG9m
IFNwaW5Mb2NrIGFuZCBwbGF0Zm9ybQorLy8gICBtdXRleGVzIG9uIHNvbWUgcGxhdGZvcm1zLgor
CisvLyBUaGlzIGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9y
IHNvIHRoYXQgaXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCisvLyBVc2UgTXV0ZXgg
aW4gaW5zdGFuY2UgdmFyaWFibGVzLgorc3RydWN0IE11dGV4QmFzZSB7CisgICAgdm9pZCBsb2Nr
KCkKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWso
MCwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpIHsKKyAgICAgICAgICAg
IC8vIExvY2sgYWNxdWlyZWQhCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBsb2NrU2xvdygpOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrKCkKKyAgICB7CisgICAg
ICAgIC8vIEZJWE1FOiBJdCdzIHVuZm9ydHVuYXRlIHRoYXQgdGhpcyByZXF1aXJlcyBhIENBUy4g
QSBiZXR0ZXIgYXBwcm9hY2ggd291bGQgYmUgdG8gZG8KKyAgICAgICAgLy8gc29tZXRoaW5nIGxp
a2UgWEFERCBvbiB0aGUgZmFzdCBwYXRoLCBidXQgbWFraW5nIHRoYXQgd29yayByaWdodCBpcyBh
IGxvdCBoYXJkZXIuIFlvdSBjb3VsZAorICAgICAgICAvLyBpbWFnaW5lIGp1c3QgbWFraW5nIHRo
aXMgYSBiYXJyaWVyZWQgc3RvcmUsIGJ1dCB0aGVuIHdlJ2QgbmVlZCBzb21lIG90aGVyIG1hZ2lj
IHRvIHdha2UgdXAKKyAgICAgICAgLy8gcGFya2VkIHRocmVhZHMsIGFuZCB0aGF0IHNvdW5kcyBy
ZWFsbHkgaGFyZC4KKyAgICAgICAgCisgICAgICAgIGlmIChMSUtFTFkobV93b3JkLmNvbXBhcmVF
eGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsK
KyAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQsIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1bmxvY2tTbG93KCk7Cisg
ICAgfQorCisgICAgYm9vbCBpc0hlbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
d29yZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgIH0K
KworICAgIC8vIFN5bm9ueW0gZm9yIGlzSGVsZCgpIC0gcHJvdmlkZWQgYmVjYXVzZSBCeXRlU3Bp
bkxvY2sgdXNlcyBpc0hlbGQoKSB3aGlsZSBTcGluTG9jayB1c2VzCisgICAgLy8gaXNMb2NrZWQo
KS4KKyAgICBib29sIGlzTG9ja2VkKCkgY29uc3QgeyByZXR1cm4gaXNIZWxkKCk7IH0KKworICAg
IC8vIEV2ZXJ5dGhpbmcgYmVsb3cgaGVyZSBzaG91bGQgYmUgY29uc2lkZXJlZCBwcml2YXRlLiBJ
dCdzIG5vdCBwcml2YXRlIGJlY2F1c2Ugb2YgUE9EIHJ1bGVzLgorICAgIHN0YXRpYyBjb25zdCB1
aW50cHRyX3QgaXNIZWxkQml0ID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGxvY2tl
ZFF1ZXVlQml0ID0gMjsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IG1hc2sgPSAzOworCisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Nsb3coKTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CisKKyAgICBBdG9taWM8dWludHB0cl90PiBtX3dvcmQ7
Cit9OworCitjbGFzcyBNdXRleCA6IHB1YmxpYyBNdXRleEJhc2UgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKE11dGV4KTsKK3B1YmxpYzoKKyAgICBNdXRleCgpCisgICAgeworICAgICAgICBt
X3dvcmQuc3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgfQorfTsKKwor
dHlwZWRlZiBNdXRleEJhc2UgU3RhdGljTXV0ZXg7Cit0eXBlZGVmIExvY2tlcjxNdXRleEJhc2U+
IE11dGV4SG9sZGVyOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTdGF0aWNN
dXRleDsKK3VzaW5nIFdURjo6TXV0ZXg7Cit1c2luZyBXVEY6Ok11dGV4SG9sZGVyOworCisjZW5k
aWYgLy8gV1RGX011dGV4X2gKKwpJbmRleDogU291cmNlL1dURi93dGYvU3BpbkxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TcGluTG9jay5oCShyZXZpc2lvbiAxODc5NzMpCisr
KyBTb3VyY2UvV1RGL3d0Zi9TcGluTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiwx
NiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAorLy8gU3BpbkxvY2sgaXMgYSB2ZXJ5IHNpbXBsZSBs
b2NrIGltcGxlbWVudGF0aW9uIHRoYXQgaGFzIGV4dHJlbWVseSBmYXN0IGxvY2svdW5sb2NrIGZv
ciB2ZXJ5IHNtYWxsCisvLyB1bmNvbnRlbmRlZCBjcml0aWNhbCBzZWN0aW9ucy4gSG93ZXZlciwg
aXQgd2lsbCBleGhpYml0IGJhZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiB3aGVuIHRoZSBsb2Nr
CisvLyBiZWNvbWVzIGNvbnRlbmRlZDogdGhlIHRocmVhZCB0cnlpbmcgdG8gYWNxdWlyZSB0aGUg
bG9jayB3aWxsIHNpbXBseSB3YXN0ZSBDUFUgY3ljbGVzLgorLy8KKy8vIEZvciBtb3N0IChhbGw/
KSBsb2NraW5nIHVzZSBjYXNlcywgaXQncyBiZXR0ZXIgdG8gdXNlIE11dGV4IChzZWUgd3RmL011
dGV4LmgpLiBUaGF0IHVzZXMgb25seSBhIGJpdAorLy8gbW9yZSBtZW1vcnkgKDggYnl0ZXMgaW5z
dGVhZCBvZiA0IG9uIDY0LWJpdCksIGFuZCBpcyBvbmx5IGEgYml0IHNsb3dlciBpbiB0aGUgdW5j
b250ZW5kZWQgY2FzZQorLy8gKExvY2sgbmVlZHMgQ0FTIHRvIHVubG9jaywgd2hpbGUgU3Bpbkxv
Y2sgZG9lc24ndCksIGJ1dCB3aWxsIGJ1cm4gYSBsb3QgbGVzcyBDUFUgdGltZSAtIGZvciAxMAor
Ly8gdGhyZWFkcyBhY3F1aXJpbmcgYSA1MCBtaWNyb3NlY29uZCBjcml0aWNhbCBzZWN0aW9uLCBM
b2NrIHdpbGwgdXNlIHVwIHRvIDEwMHggbGVzcyBrZXJuZWwgQ1BVIHRpbWUKKy8vIHRoYW4gU3Bp
bkxvY2suCisKIC8vIFNwaW5Mb2NrQmFzZSBpcyBhIHN0cnVjdCB3aXRob3V0IGFuIGV4cGxpY2l0
bHkgZGVmaW5lZCBjb25zdHJ1Y3RvcnMgc28gdGhhdAogLy8gaXQgY2FuIGJlIGluaXRpYWxpemVk
IGF0IGNvbXBpbGUgdGltZS4gU2VlIFN0YXRpY1NwaW5Mb2NrIGJlbG93Lgogc3RydWN0IFNwaW5M
b2NrQmFzZSB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwCShyZXZpc2lv
biAxODc5NzMpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJkdG9hLmgiCiAKICNpZiBVU0Uo
V0VCX1RIUkVBRCkKLSNpbmNsdWRlICJTcGluTG9jay5oIgorI2luY2x1ZGUgIk11dGV4LmgiCiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21p
Y1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWlj
U3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDE4Nzk3MykKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQv
QXRvbWljU3RyaW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNp
bmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+CiAKICNpZiBVU0UoV0VCX1RIUkVBRCkKLSNpbmNs
dWRlICJTcGluTG9jay5oIgorI2luY2x1ZGUgIk11dGV4LmgiCiAjZW5kaWYKIAogbmFtZXNwYWNl
IFdURiB7CkBAIC00MiwxOCArNDIsMTggQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKICNp
ZiBVU0UoV0VCX1RIUkVBRCkKIAotY2xhc3MgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgOiBwdWJs
aWMgU3BpbkxvY2tIb2xkZXIgeworY2xhc3MgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgOiBwdWJs
aWMgTXV0ZXhIb2xkZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEF0b21pY1N0cmluZ1Rh
YmxlTG9ja2VyKTsKIAotICAgIHN0YXRpYyBTdGF0aWNTcGluTG9jayBzX3N0cmluZ1RhYmxlTG9j
azsKKyAgICBzdGF0aWMgU3RhdGljTXV0ZXggc19zdHJpbmdUYWJsZUxvY2s7CiBwdWJsaWM6CiAg
ICAgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIoKQotICAgICAgICA6IFNwaW5Mb2NrSG9sZGVyKCZz
X3N0cmluZ1RhYmxlTG9jaykKKyAgICAgICAgOiBNdXRleEhvbGRlcigmc19zdHJpbmdUYWJsZUxv
Y2spCiAgICAgewogICAgIH0KIH07CiAKLVN0YXRpY1NwaW5Mb2NrIEF0b21pY1N0cmluZ1RhYmxl
TG9ja2VyOjpzX3N0cmluZ1RhYmxlTG9jazsKK1N0YXRpY011dGV4IEF0b21pY1N0cmluZ1RhYmxl
TG9ja2VyOjpzX3N0cmluZ1RhYmxlTG9jazsKIAogI2Vsc2UKIApJbmRleDogU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMTg3OTg1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjkgQEAKKzIwMTUtMDgtMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KKworICAgICAgICBMaWdodHdlaWdodCBsb2NrcyBzaG91bGQgYmUgYWRhcHRpdmUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzU0NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgYWxs
IHVzZXMgb2YgU3BpbkxvY2sgd2l0aCBNdXRleC4gQWxzbyByZXBsYWNlIG9uZSB1c2Ugb2YgQnl0
ZVNwaW5Mb2NrIHdpdGggTXV0ZXgKKyAgICAgICAgYmVjYXVzZSB0aGUgYXV0aG9yIG9mIHRoYXQg
Y29kZSAoSmVyKSBjb25maXJtZWQgdGhhdCB0aGVyZSBpc24ndCByZWFsbHkgYW55IHNwYWNlIGFk
dmFudGFnZSB0bworICAgICAgICB1c2luZyBhIEJ5dGVTcGluTG9jay4KKyAgICAgICAgCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAg
ICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW06CisgICAgICAgIChXZWJDb3JlOjpn
ZXRKU1dyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6YWRkSlNXcmFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnJlbW92ZUpTV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVKU1dy
YXBwZXJJZlJldGFpbkNvdW50T25lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FS
aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6c2V0Q3VycmVu
dEZyYW1lQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6Z2V0Q3VycmVu
dEZyYW1lQm91bmRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cubW06CisgICAgICAgICgt
W1dBS1dpbmRvdyBzZXRFeHBvc2VkU2Nyb2xsVmlld1JlY3Q6XSk6CisgICAgICAgICgtW1dBS1dp
bmRvdyBleHBvc2VkU2Nyb2xsVmlld1JlY3RdKToKKwogMjAxNS0wOC0wNSAgQW5kZXJzIENhcmxz
c29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBidWlsZC4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZp
c2lvbiAxODc5NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9i
amVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQAogI2ltcG9ydCA8cnVudGlt
ZS9KU0xvY2suaD4KICNpbXBvcnQgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2ltcG9ydCA8cnVu
dGltZS9Db21wbGV0aW9uLmg+Ci0jaW1wb3J0IDx3dGYvU3BpbkxvY2suaD4KKyNpbXBvcnQgPHd0
Zi9NdXRleC5oPgogI2ltcG9ydCA8d3RmL1RocmVhZGluZy5oPgogI2ltcG9ydCA8d3RmL3NwaS9j
b2NvYS9OU01hcFRhYmxlU1BJLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAg
LTcyLDEyICs3MiwxMiBAQCB1c2luZyBKU0M6Om1ha2VTb3VyY2U7CiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBOU01hcFRhYmxlKiBKU1dyYXBwZXJDYWNoZTsKLXN0YXRpYyBTdGF0aWNT
cGluTG9jayBzcGluTG9jazsKK3N0YXRpYyBTdGF0aWNNdXRleCBjYWNoZUxvY2s7CiAKIE5TT2Jq
ZWN0KiBnZXRKU1dyYXBwZXIoSlNPYmplY3QqIGltcGwpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJnNwaW5Mb2NrKTsKKyAgICBNdXRl
eEhvbGRlciBob2xkZXIoJmNhY2hlTG9jayk7CiAKICAgICBpZiAoIUpTV3JhcHBlckNhY2hlKQog
ICAgICAgICByZXR1cm4gbmlsOwpAQCAtODgsNyArODgsNyBAQCBOU09iamVjdCogZ2V0SlNXcmFw
cGVyKEpTT2JqZWN0KiBpbXBsKQogdm9pZCBhZGRKU1dyYXBwZXIoTlNPYmplY3QqIHdyYXBwZXIs
IEpTT2JqZWN0KiBpbXBsKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgU3Bp
bkxvY2tIb2xkZXIgaG9sZGVyKCZzcGluTG9jayk7CisgICAgTXV0ZXhIb2xkZXIgaG9sZGVyKCZj
YWNoZUxvY2spOwogCiAgICAgaWYgKCFKU1dyYXBwZXJDYWNoZSkKICAgICAgICAgSlNXcmFwcGVy
Q2FjaGUgPSBjcmVhdGVXcmFwcGVyQ2FjaGUoKTsKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBhZGRK
U1dyYXBwZXIoTlNPYmplY3QqIHdyYXBwZXIsIEpTTwogCiB2b2lkIHJlbW92ZUpTV3JhcHBlcihK
U09iamVjdCogaW1wbCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJnNwaW5Mb2NrKTsK
KyAgICBNdXRleEhvbGRlciBob2xkZXIoJmNhY2hlTG9jayk7CiAKICAgICBpZiAoIUpTV3JhcHBl
ckNhY2hlKQogICAgICAgICByZXR1cm47CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCByZW1vdmVK
U1dyYXBwZXIoSlNPYmplY3QqIGltcGwpCiAKIHN0YXRpYyB2b2lkIHJlbW92ZUpTV3JhcHBlcklm
UmV0YWluQ291bnRPbmUoTlNPYmplY3QqIHdyYXBwZXIsIEpTT2JqZWN0KiBpbXBsKQogewotICAg
IFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOworICAgIE11dGV4SG9sZGVyIGhvbGRl
cigmY2FjaGVMb2NrKTsKIAogICAgIGlmICghSlNXcmFwcGVyQ2FjaGUpCiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJp
bmdCdWZmZXIuY3BwCShyZXZpc2lvbiAxODc5NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDcgKzIw
MCw3IEBAIENBUmluZ0J1ZmZlcjo6RXJyb3IgQ0FSaW5nQnVmZmVyOjpzdG9yZSgKIAogdm9pZCBD
QVJpbmdCdWZmZXI6OnNldEN1cnJlbnRGcmFtZUJvdW5kcyh1aW50NjRfdCBzdGFydFRpbWUsIHVp
bnQ2NF90IGVuZFRpbWUpCiB7Ci0gICAgQnl0ZVNwaW5Mb2NrZXIgbG9ja2VyKG1fY3VycmVudEZy
YW1lQm91bmRzTG9jayk7CisgICAgTXV0ZXhIb2xkZXIgbG9ja2VyKG1fY3VycmVudEZyYW1lQm91
bmRzTG9jayk7CiAgICAgdWludDMyX3QgbmV4dFB0ciA9IG1fdGltZUJvdW5kc1F1ZXVlUHRyICsg
MTsKICAgICB1aW50MzJfdCBpbmRleCA9IG5leHRQdHIgJiBrR2VuZXJhbFJpbmdUaW1lQm91bmRz
UXVldWVNYXNrOwogCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBDQVJpbmdCdWZmZXI6OnNldEN1
cnJlbnRGcmFtZUJvdW5kcwogCiB2b2lkIENBUmluZ0J1ZmZlcjo6Z2V0Q3VycmVudEZyYW1lQm91
bmRzKHVpbnQ2NF90ICZzdGFydFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1lKQogewotICAgIEJ5dGVT
cGluTG9ja2VyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOworICAgIE11dGV4SG9s
ZGVyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOwogICAgIHVpbnQzMl90IGN1clB0
ciA9IG1fdGltZUJvdW5kc1F1ZXVlUHRyOwogICAgIHVpbnQzMl90IGluZGV4ID0gY3VyUHRyICYg
a0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFzazsKICAgICBDQVJpbmdCdWZmZXI6OlRpbWVC
b3VuZHMmIGJvdW5kcyA9IG1fdGltZUJvdW5kc1F1ZXVlW2luZGV4XTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmgJKHJldmlzaW9u
IDE4Nzk3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZm
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShXRUJfQVVE
SU8pICYmIFVTRShNRURJQVRPT0xCT1gpCiAKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL0J5dGVTcGluTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9NdXRleC5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgQXVkaW9CdWZmZXJM
aXN0IEF1ZGlvQnVmZmVyTGlzdDsKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICB9Owog
ICAgIAogICAgIFZlY3RvcjxUaW1lQm91bmRzPiBtX3RpbWVCb3VuZHNRdWV1ZTsKLSAgICBCeXRl
U3BpbkxvY2sgbV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrOworICAgIE11dGV4IG1fY3VycmVudEZy
YW1lQm91bmRzTG9jazsKICAgICBpbnQzMl90IG1fdGltZUJvdW5kc1F1ZXVlUHRyOwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cubW0JKHJl
dmlzaW9uIDE4Nzk3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0FLV2lu
ZG93Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW1wb3J0ICJXS0NvbnRl
bnRPYnNlcnZhdGlvbi5oIgogI2ltcG9ydCAiV0tWaWV3UHJpdmF0ZS5oIgogI2ltcG9ydCA8UXVh
cnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDx3dGYvU3BpbkxvY2suaD4KKyNpbXBvcnQg
PHd0Zi9NdXRleC5oPgogCiBXRUJDT1JFX0VYUE9SVCBOU1N0cmluZyAqIGNvbnN0IFdBS1dpbmRv
d1NjcmVlblNjYWxlRGlkQ2hhbmdlTm90aWZpY2F0aW9uID0gQCJXQUtXaW5kb3dTY3JlZW5TY2Fs
ZURpZENoYW5nZU5vdGlmaWNhdGlvbiI7CiBXRUJDT1JFX0VYUE9SVCBOU1N0cmluZyAqIGNvbnN0
IFdBS1dpbmRvd1Zpc2liaWxpdHlEaWRDaGFuZ2VOb3RpZmljYXRpb24gPSBAIldBS1dpbmRvd1Zp
c2liaWxpdHlEaWRDaGFuZ2VOb3RpZmljYXRpb24iOwpAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMg
V2ViRXZlbnQgKmN1cnJlbnRFdmVudCA9IG5pbDsKIHN0YXRpYyBpZDxPcmllbnRhdGlvblByb3Zp
ZGVyPiBnT3JpZW50YXRpb25Qcm92aWRlcjsKIAogQGltcGxlbWVudGF0aW9uIFdBS1dpbmRvdyB7
Ci0gICAgU3BpbkxvY2sgX2V4cG9zZWRTY3JvbGxWaWV3UmVjdExvY2s7CisgICAgTXV0ZXggX2V4
cG9zZWRTY3JvbGxWaWV3UmVjdExvY2s7CiAgICAgQ0dSZWN0IF9leHBvc2VkU2Nyb2xsVmlld1Jl
Y3Q7CiB9CiAKQEAgLTM1OCwxNCArMzU4LDE0IEBAIC0gKHZvaWQpc2VuZE1vdXNlTW92ZUV2ZW50
OihXZWJFdmVudCAqKWEKIAogLSAodm9pZClzZXRFeHBvc2VkU2Nyb2xsVmlld1JlY3Q6KENHUmVj
dClleHBvc2VkU2Nyb2xsVmlld1JlY3QKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJl9l
eHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrKTsKKyAgICBNdXRleEhvbGRlciBsb2NrZXIoJl9leHBv
c2VkU2Nyb2xsVmlld1JlY3RMb2NrKTsKICAgICBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0ID0gZXhw
b3NlZFNjcm9sbFZpZXdSZWN0OwogfQogCiAtIChDR1JlY3QpZXhwb3NlZFNjcm9sbFZpZXdSZWN0
CiB7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJl9leHBvc2VkU2Nyb2xs
Vmlld1JlY3RMb2NrKTsKKyAgICAgICAgTXV0ZXhIb2xkZXIgbG9ja2VyKCZfZXhwb3NlZFNjcm9s
bFZpZXdSZWN0TG9jayk7CiAgICAgICAgIGlmICghQ0dSZWN0SXNOdWxsKF9leHBvc2VkU2Nyb2xs
Vmlld1JlY3QpKQogICAgICAgICAgICAgcmV0dXJuIF9leHBvc2VkU2Nyb2xsVmlld1JlY3Q7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3OTg1KQorKysgU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTUtMDgtMDUgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBMaWdodHdlaWdodCBsb2Nr
cyBzaG91bGQgYmUgYWRhcHRpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NzU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlcGxhY2UgYWxsIHVzZXMgb2YgU3BpbkxvY2sgd2l0aCBNdXRleC4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OmNsZWFyUXVldWVkVG91Y2hFdmVudHNGb3JQYWdl
KToKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjpnZXRRdWV1ZWRUb3VjaEV2ZW50
c0ZvclBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OnRvdWNoRXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoVG91Y2hFdmVudHMp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpWaWV3VXBkYXRlRGlzcGF0Y2hlcjo6dmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6Vmlld1VwZGF0ZURpc3BhdGNoZXI6OmRpc3BhdGNoVmlzaWJs
ZUNvbnRlbnRSZWN0VXBkYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1Vw
ZGF0ZURpc3BhdGNoZXIuaDoKKwogMjAxNS0wOC0wNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBXZWJJbnNwZWN0b3JQcm94eSBzaG91bGQgbWFrZSBXS1dlYlZp
ZXcgZmlyc3QgcmVzcG9uZGVyCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRXZlbnREaXNwYXRjaGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAkocmV2aXNpb24gMTg3OTczKQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3MiwxMyArMTcyLDEzIEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjp3
aGVlbEV2ZW50KHVpbnQ2NF8KICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKIHZvaWQgRXZl
bnREaXNwYXRjaGVyOjpjbGVhclF1ZXVlZFRvdWNoRXZlbnRzRm9yUGFnZShjb25zdCBXZWJQYWdl
JiB3ZWJQYWdlKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xv
Y2spOworICAgIE11dGV4SG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xvY2spOwogICAgIG1f
dG91Y2hFdmVudHMucmVtb3ZlKHdlYlBhZ2UucGFnZUlEKCkpOwogfQogCiB2b2lkIEV2ZW50RGlz
cGF0Y2hlcjo6Z2V0UXVldWVkVG91Y2hFdmVudHNGb3JQYWdlKGNvbnN0IFdlYlBhZ2UmIHdlYlBh
Z2UsIFRvdWNoRXZlbnRRdWV1ZSYgZGVzdGluYXRpb25RdWV1ZSkKIHsKLSAgICBTcGluTG9ja0hv
bGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKKyAgICBNdXRleEhvbGRlciBsb2NrZXIo
Jm1fdG91Y2hFdmVudHNMb2NrKTsKICAgICBkZXN0aW5hdGlvblF1ZXVlID0gbV90b3VjaEV2ZW50
cy50YWtlKHdlYlBhZ2UucGFnZUlEKCkpOwogfQogCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBF
dmVudERpc3BhdGNoZXI6OnRvdWNoRXZlbnQodWludDY0XwogewogICAgIGJvb2wgdXBkYXRlTGlz
dFdhc0VtcHR5OwogICAgIHsKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvdWNo
RXZlbnRzTG9jayk7CisgICAgICAgIE11dGV4SG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xv
Y2spOwogICAgICAgICB1cGRhdGVMaXN0V2FzRW1wdHkgPSBtX3RvdWNoRXZlbnRzLmlzRW1wdHko
KTsKICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3RvdWNoRXZlbnRzLmFkZChwYWdlSUQsIFRv
dWNoRXZlbnRRdWV1ZSgpKTsKICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQpAQCAt
MjE3LDcgKzIxNyw3IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFRvdWNoRXZlbnQK
IHsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBUb3VjaEV2ZW50UXVldWU+IGxvY2FsQ29weTsKICAg
ICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xvY2spOwor
ICAgICAgICBNdXRleEhvbGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKICAgICAgICAg
bG9jYWxDb3B5LnN3YXAobV90b3VjaEV2ZW50cyk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oCShyZXZp
c2lvbiAxODc5NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnRE
aXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTXV0
ZXguaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC05Nyw3ICs5Nyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6V2hlZWxFdmVudERlbHRhVHJhY2tlcj4gbV9yZWNlbnRXaGVlbEV2
ZW50RGVsdGFUcmFja2VyOwogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIFNwaW5M
b2NrIG1fdG91Y2hFdmVudHNMb2NrOworICAgIE11dGV4IG1fdG91Y2hFdmVudHNMb2NrOwogICAg
IEhhc2hNYXA8dWludDY0X3QsIFRvdWNoRXZlbnRRdWV1ZT4gbV90b3VjaEV2ZW50czsKICNlbmRp
ZgogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRl
RGlzcGF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcAkocmV2aXNpb24gMTg3OTczKQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCB2b2lkIFZpZXdVcGRhdGVEaXNwYXRjaGVy
Ojp2aXNpYmxlQ29udGVuCiB7CiAgICAgYm9vbCB1cGRhdGVMaXN0V2FzRW1wdHk7CiAgICAgewot
ICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fZGF0YU11dGV4KTsKKyAgICAgICAgTXV0
ZXhIb2xkZXIgbG9ja2VyKCZtX2RhdGFNdXRleCk7CiAgICAgICAgIHVwZGF0ZUxpc3RXYXNFbXB0
eSA9IG1fbGF0ZXN0VXBkYXRlLmlzRW1wdHkoKTsKICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1f
bGF0ZXN0VXBkYXRlLmZpbmQocGFnZUlEKTsKICAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fbGF0
ZXN0VXBkYXRlLmVuZCgpKQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFZpZXdVcGRhdGVEaXNwYXRj
aGVyOjpkaXNwYXRjaFZpc2liCiB7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgVXBkYXRlRGF0YT4g
dXBkYXRlOwogICAgIHsKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2RhdGFNdXRl
eCk7CisgICAgICAgIE11dGV4SG9sZGVyIGxvY2tlcigmbV9kYXRhTXV0ZXgpOwogICAgICAgICB1
cGRhdGUgPSBXVEY6Om1vdmUobV9sYXRlc3RVcGRhdGUpOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNw
YXRjaGVyLmgJKHJldmlzaW9uIDE4Nzk3MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw3IEBACiAjaW5jbHVkZSAiVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mby5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9T
cGluTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9NdXRleC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IApAQCAtNTcsNyArNTcsNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBSZWY8V29ya1F1ZXVl
PiBtX3F1ZXVlOwotICAgIFNwaW5Mb2NrIG1fZGF0YU11dGV4OworICAgIE11dGV4IG1fZGF0YU11
dGV4OwogICAgIEhhc2hNYXA8dWludDY0X3QsIFVwZGF0ZURhdGE+IG1fbGF0ZXN0VXBkYXRlOwog
fTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258316</attachid>
            <date>2015-08-05 16:19:43 -0700</date>
            <delta_ts>2015-08-06 12:43:34 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67075</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3OTg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBA
CisyMDE1LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TGlnaHR3ZWlnaHQgbG9ja3Mgc2hvdWxkIGJlIGFkYXB0aXZlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1NDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlIGFsbCB1c2VzIG9mIFNwaW5Mb2Nr
IHdpdGggTXV0ZXguCisKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpzdGFydENyYXNoaW5nKToKKyAgICAgICAgKiBoZWFwL0NvcGllZEJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjp3b3JrTGlzdExvY2spOgorICAgICAgICAqIGhlYXAv
Q29waWVkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpzaG91bGRS
ZXBvcnRMaXZlQnl0ZXMpOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5
dGVzKToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29w
aWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2spOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2Uu
aDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OkNvcGllZEdlbmVyYXRpb246OkNvcGllZEdl
bmVyYXRpb24pOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2spOgorICAgICAgICAqIGhl
YXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWRE
YXRhOjpkaWRTdGFydENvcHlpbmcpOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRh
Lmg6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6Z2V0TmV4dEJsb2Nrc1RvQ29w
eSk6CisgICAgICAgICogaGVhcC9MaXN0YWJsZUhhbmRsZXIuaDoKKyAgICAgICAgKEpTQzo6TGlz
dGFibGVIYW5kbGVyOjpMaXN0OjphZGRUaHJlYWRTYWZlKToKKyAgICAgICAgKEpTQzo6TGlzdGFi
bGVIYW5kbGVyOjpMaXN0OjphZGROb3RUaHJlYWRTYWZlKToKKyAgICAgICAgKiBoZWFwL01hY2hp
bmVTdGFja01hcmtlci5jcHA6CisgICAgICAgIChKU0M6Ok1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5
T3RoZXJUaHJlYWRTdGFja3MpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIpOgorICAgICAgICAqIHByb2Zp
bGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6RGF0YWJh
c2U6OmVuc3VyZUJ5dGVjb2Rlc0Zvcik6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpEYXRhYmFz
ZTo6bm90aWZ5RGVzdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6RGF0YWJhc2U6
OmFkZERhdGFiYXNlVG9BdEV4aXQpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6RGF0YWJhc2U6
OnJlbW92ZURhdGFiYXNlRnJvbUF0RXhpdCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpEYXRh
YmFzZTo6cmVtb3ZlRmlyc3RBdEV4aXREYXRhYmFzZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJv
ZmlsZXJEYXRhYmFzZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmg6CisK
IDIwMTUtMDgtMDUgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEFkZCB0aGUgSW50bCBBUEkgdG8gdGhlIHN0YXR1cyBwYWdlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAxODc5NzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1zdGF0aWMg
U3RhdGljU3BpbkxvY2sgY3Jhc2hMb2NrOworc3RhdGljIFN0YXRpY011dGV4IGNyYXNoTG9jazsK
IAogdm9pZCBzdGFydENyYXNoaW5nKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkQmxvY2suaAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAog
I2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUg
PHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5j
bHVkZSA8d3RmL011dGV4Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01NCw4ICs1NCw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIGRpZFByb21vdGUoKTsKIAogICAgIHVuc2lnbmVkIGxpdmVCeXRl
cygpOwotICAgIGJvb2wgc2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKFNwaW5Mb2NrSG9sZGVyJiwgSlND
ZWxsKiBvd25lcik7Ci0gICAgdm9pZCByZXBvcnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBK
U0NlbGwqLCBDb3B5VG9rZW4sIHVuc2lnbmVkKTsKKyAgICBib29sIHNob3VsZFJlcG9ydExpdmVC
eXRlcyhNdXRleEhvbGRlciYsIEpTQ2VsbCogb3duZXIpOworICAgIHZvaWQgcmVwb3J0TGl2ZUJ5
dGVzKE11dGV4SG9sZGVyJiwgSlNDZWxsKiwgQ29weVRva2VuLCB1bnNpZ25lZCk7CiAgICAgdm9p
ZCByZXBvcnRMaXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkKTsKICAgICB2b2lkIGRpZFN1
cnZpdmVHQygpOwogICAgIHZvaWQgZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCk7CkBAIC04NSw3
ICs4NSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzV29ya0xpc3QoKTsKICAgICBDb3B5V29y
a0xpc3QmIHdvcmtMaXN0KCk7Ci0gICAgU3BpbkxvY2smIHdvcmtMaXN0TG9jaygpIHsgcmV0dXJu
IG1fd29ya0xpc3RMb2NrOyB9CisgICAgTXV0ZXgmIHdvcmtMaXN0TG9jaygpIHsgcmV0dXJuIG1f
d29ya0xpc3RMb2NrOyB9CiAKIHByaXZhdGU6CiAgICAgQ29waWVkQmxvY2soc2l6ZV90KTsKQEAg
LTk4LDcgKzk4LDcgQEAgcHJpdmF0ZToKIAogICAgIHNpemVfdCBtX2NhcGFjaXR5OwogCi0gICAg
U3BpbkxvY2sgbV93b3JrTGlzdExvY2s7CisgICAgTXV0ZXggbV93b3JrTGlzdExvY2s7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPENvcHlXb3JrTGlzdD4gbV93b3JrTGlzdDsKIAogICAgIHNpemVfdCBt
X3JlbWFpbmluZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2Nr
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxODc5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLWlubGluZSBib29sIENvcGllZEJsb2NrOjpz
aG91bGRSZXBvcnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyKQoraW5s
aW5lIGJvb2wgQ29waWVkQmxvY2s6OnNob3VsZFJlcG9ydExpdmVCeXRlcyhNdXRleEhvbGRlciYs
IEpTQ2VsbCogb3duZXIpCiB7CiAgICAgLy8gV2Ugd2FudCB0byBhZGQgdG8gbGl2ZSBieXRlcyBp
ZiB0aGUgb3duZXIgaXNuJ3QgcGFydCBvZiB0aGUgcmVtZW1iZXJlZCBzZXQgb3IKICAgICAvLyBp
ZiB0aGlzIGJsb2NrIHdhcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBsYXN0IGN5Y2xlLiAKQEAgLTQz
LDcgKzQzLDcgQEAgaW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OnNob3VsZFJlcG9ydExpdgogICAg
IHJldHVybiAhSGVhcDo6aXNSZW1lbWJlcmVkKG93bmVyKSB8fCAhbV9pc09sZDsKIH0KIAotaW5s
aW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpT
Q2VsbCogb3duZXIsIENvcHlUb2tlbiB0b2tlbiwgdW5zaWduZWQgYnl0ZXMpCitpbmxpbmUgdm9p
ZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKE11dGV4SG9sZGVyJiwgSlNDZWxsKiBvd25l
ciwgQ29weVRva2VuIHRva2VuLCB1bnNpZ25lZCBieXRlcykKIHsKICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcg
QEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogCiAgICAgewogICAg
ICAgICAvLyBBbHdheXMgcHV0IHRoZSBibG9jayBpbnRvIHRoZSBvbGQgZ2VuIGJlY2F1c2UgaXQn
cyBiZWluZyBwcm9tb3RlZCEKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvU3Bh
Y2VMb2NrKTsKKyAgICAgICAgTXV0ZXhIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKICAg
ICAgICAgbV9vbGRHZW4udG9TcGFjZS0+cHVzaChibG9jayk7CiAgICAgICAgIG1fYmxvY2tTZXQu
YWRkKGJsb2NrKTsKICAgICAgICAgbV9vbGRHZW4uYmxvY2tGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0
X2Nhc3Q8Qml0cz4oYmxvY2spKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkU3BhY2UuaAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL09TQWxsb2NhdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL1BhZ2VCbG9jay5oPgotI2luY2x1ZGUgPHd0Zi9TcGluTG9jay5oPgorI2luY2x1ZGUg
PHd0Zi9NdXRleC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCkBAIC0xMTMsNyArMTEzLDcgQEAgcHJpdmF0ZToK
IAogICAgIEhhc2hTZXQ8Q29waWVkQmxvY2sqPiBtX2Jsb2NrU2V0OwogCi0gICAgU3BpbkxvY2sg
bV90b1NwYWNlTG9jazsKKyAgICBNdXRleCBtX3RvU3BhY2VMb2NrOwogCiAgICAgc3RydWN0IENv
cGllZEdlbmVyYXRpb24gewogICAgICAgICBDb3BpZWRHZW5lcmF0aW9uKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCShyZXZpc2lv
biAxODc5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBpbmxpbmUgdm9pZCBDb3BpZWRT
cGFjZTo6cmVjeWNsZUV2YWN1YXRlCiAgICAgQVNTRVJUKGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkp
OwogICAgIEFTU0VSVCghYmxvY2stPm1faXNQaW5uZWQpOwogICAgIHsKLSAgICAgICAgU3Bpbkxv
Y2tIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKKyAgICAgICAgTXV0ZXhIb2xkZXIgbG9j
a2VyKCZtX3RvU3BhY2VMb2NrKTsKICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2spOwog
ICAgICAgICBpZiAoY29sbGVjdGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rpb24pCiAgICAgICAgICAg
ICBtX25ld0dlbi5mcm9tU3BhY2UtPnJlbW92ZShibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJldmlzaW9uIDE4
Nzk3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIEdDVGhyZWFkU2hhcmVk
RGF0YTo6ZGlkRmluaXNoTWFya2luCiB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRD
b3B5aW5nKCkKIHsKICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5
TG9jayk7CisgICAgICAgIE11dGV4SG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CiAgICAgICAg
IGlmIChtX3ZtLT5oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikg
ewogICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHZlY3RvciB0byBiZSBlbXB0eSwgYnV0IGRvbid0
IHRocm93IGF3YXkgdGhlIGJhY2tpbmcgc3RvcmUuCiAgICAgICAgICAgICBtX2Jsb2Nrc1RvQ29w
eS5zaHJpbmsoMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNo
YXJlZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1Ro
cmVhZFNoYXJlZERhdGEuaAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDcgQEAKICNpbmNsdWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCiAjaW5jbHVkZSA8Y29u
ZGl0aW9uX3ZhcmlhYmxlPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L1NwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL011dGV4Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTk3LDcgKzk3LDcgQEAgcHJpdmF0ZToKICAgICBz
dGQ6Om11dGV4IG1fb3BhcXVlUm9vdHNNdXRleDsKICAgICBIYXNoU2V0PHZvaWQqPiBtX29wYXF1
ZVJvb3RzOwogCi0gICAgU3BpbkxvY2sgbV9jb3B5TG9jazsKKyAgICBNdXRleCBtX2NvcHlMb2Nr
OwogICAgIFZlY3RvcjxDb3BpZWRCbG9jayo+IG1fYmxvY2tzVG9Db3B5OwogICAgIHNpemVfdCBt
X2NvcHlJbmRleDsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0
aCA9IDMyOwpAQCAtMTE1LDcgKzExNSw3IEBAIHByaXZhdGU6CiAKIGlubGluZSB2b2lkIEdDVGhy
ZWFkU2hhcmVkRGF0YTo6Z2V0TmV4dEJsb2Nrc1RvQ29weShzaXplX3QmIHN0YXJ0LCBzaXplX3Qm
IGVuZCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fY29weUxvY2spOworICAgIE11
dGV4SG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CiAgICAgc3RhcnQgPSBtX2NvcHlJbmRleDsK
ICAgICBlbmQgPSBzdGQ6Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXplKCksIG1fY29weUluZGV4ICsg
c19ibG9ja0ZyYWdtZW50TGVuZ3RoKTsKICAgICBtX2NvcHlJbmRleCA9IGVuZDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xpc3RhYmxlSGFuZGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xpc3RhYmxlSGFuZGxlci5oCShyZXZpc2lvbiAx
ODc5NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MaXN0YWJsZUhhbmRsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNs
dWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTXV0ZXguaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTY1LDcgKzY1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHZvaWQgYWRkVGhyZWFkU2FmZShUKiBo
YW5kbGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1f
bG9jayk7CisgICAgICAgICAgICBNdXRleEhvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAgICAgICAg
ICAgICBhZGROb3RUaHJlYWRTYWZlKGhhbmRsZXIpOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
MTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2ZpcnN0ID0gaGFuZGxlcjsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BpbkxvY2sgbV9sb2NrOworICAgICAgICBN
dXRleCBtX2xvY2s7CiAgICAgICAgIFQqIG1fZmlyc3Q7CiAgICAgfTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAko
cmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0
YWNrTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY4LDggKzU2OCw4IEBAIGJvb2wgTWFj
aGluZVRocmVhZHM6OnRyeUNvcHlPdGhlclRocmVhZFMKIHsKICAgICAvLyBQcmV2ZW50IHR3byBW
TXMgZnJvbSBzdXNwZW5kaW5nIGVhY2ggb3RoZXIncyB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUs
CiAgICAgLy8gd2hpY2ggY2FuIGNhdXNlIGRlYWRsb2NrOiA8cmRhcjovL3Byb2JsZW0vMjAzMDA4
NDI+LgotICAgIHN0YXRpYyBTdGF0aWNTcGluTG9jayBtdXRleDsKLSAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljU3BpbkxvY2s+IGxvY2sobXV0ZXgpOworICAgIHN0YXRpYyBTdGF0aWNNdXRleCBt
dXRleDsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2sobXV0ZXgpOwogCiAg
ICAgKnNpemUgPSAwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw3
ICsyNTAsNyBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVyKEpTQ2VsCiAKICAg
ICBBU1NFUlQoaGVhcCgpLT5tX3N0b3JhZ2VTcGFjZS5jb250YWlucyhibG9jaykpOwogCi0gICAg
U3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZibG9jay0+d29ya0xpc3RMb2NrKCkpOworICAgIE11dGV4
SG9sZGVyIGxvY2tlcigmYmxvY2stPndvcmtMaXN0TG9jaygpKTsKICAgICBpZiAoaGVhcCgpLT5v
cGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24gfHwgYmxvY2stPnNob3VsZFJl
cG9ydExpdmVCeXRlcyhsb2NrZXIsIG93bmVyKSkgewogICAgICAgICBtX2J5dGVzQ29waWVkICs9
IGJ5dGVzOwogICAgICAgICBibG9jay0+cmVwb3J0TGl2ZUJ5dGVzKGxvY2tlciwgb3duZXIsIHRv
a2VuLCBieXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxODc5NzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiAK
IHN0YXRpYyBzdGQ6OmF0b21pYzxpbnQ+IGRhdGFiYXNlQ291bnRlcjsKIAotc3RhdGljIFN0YXRp
Y1NwaW5Mb2NrIHJlZ2lzdHJhdGlvbkxvY2s7CitzdGF0aWMgU3RhdGljTXV0ZXggcmVnaXN0cmF0
aW9uTG9jazsKIHN0YXRpYyBzdGQ6OmF0b21pYzxpbnQ+IGRpZFJlZ2lzdGVyQXRFeGl0Owogc3Rh
dGljIERhdGFiYXNlKiBmaXJzdERhdGFiYXNlOwogCkBAIC01Nyw3ICs1Nyw3IEBAIERhdGFiYXNl
Ojp+RGF0YWJhc2UoKQogCiBCeXRlY29kZXMqIERhdGFiYXNlOjplbnN1cmVCeXRlY29kZXNGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAg
IE11dGV4SG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIAogICAgIGNvZGVCbG9jayA9IGNvZGVC
bG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAgICAgCkBAIC03NSw3ICs3NSw3IEBAIEJ5dGVjb2Rl
cyogRGF0YWJhc2U6OmVuc3VyZUJ5dGVjb2Rlc0ZvcigKIAogdm9pZCBEYXRhYmFzZTo6bm90aWZ5
RGVzdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgIE11dGV4SG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIAogICAgIG1fYnl0
ZWNvZGVzTWFwLnJlbW92ZShjb2RlQmxvY2spOwogfQpAQCAtMTM4LDE0ICsxMzgsMTQgQEAgdm9p
ZCBEYXRhYmFzZTo6YWRkRGF0YWJhc2VUb0F0RXhpdCgpCiAgICAgaWYgKCsrZGlkUmVnaXN0ZXJB
dEV4aXQgPT0gMSkKICAgICAgICAgYXRleGl0KGF0RXhpdENhbGxiYWNrKTsKICAgICAKLSAgICBT
cGluTG9ja0hvbGRlciBob2xkZXIocmVnaXN0cmF0aW9uTG9jayk7CisgICAgTXV0ZXhIb2xkZXIg
aG9sZGVyKHJlZ2lzdHJhdGlvbkxvY2spOwogICAgIG1fbmV4dFJlZ2lzdGVyZWREYXRhYmFzZSA9
IGZpcnN0RGF0YWJhc2U7CiAgICAgZmlyc3REYXRhYmFzZSA9IHRoaXM7CiB9CiAKIHZvaWQgRGF0
YWJhc2U6OnJlbW92ZURhdGFiYXNlRnJvbUF0RXhpdCgpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIg
aG9sZGVyKHJlZ2lzdHJhdGlvbkxvY2spOworICAgIE11dGV4SG9sZGVyIGhvbGRlcihyZWdpc3Ry
YXRpb25Mb2NrKTsKICAgICBmb3IgKERhdGFiYXNlKiogY3VycmVudCA9ICZmaXJzdERhdGFiYXNl
OyAqY3VycmVudDsgY3VycmVudCA9ICYoKmN1cnJlbnQpLT5tX25leHRSZWdpc3RlcmVkRGF0YWJh
c2UpIHsKICAgICAgICAgaWYgKCpjdXJyZW50ICE9IHRoaXMpCiAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIERhdGFiYXNlOjpwZXJmb3JtQXRFeGl0U2F2ZSgp
IGNvbnN0CiAKIERhdGFiYXNlKiBEYXRhYmFzZTo6cmVtb3ZlRmlyc3RBdEV4aXREYXRhYmFzZSgp
CiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVyKHJlZ2lzdHJhdGlvbkxvY2spOworICAgIE11
dGV4SG9sZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKICAgICBEYXRhYmFzZSogcmVzdWx0
ID0gZmlyc3REYXRhYmFzZTsKICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgIGZpcnN0RGF0YWJh
c2UgPSByZXN1bHQtPm1fbmV4dFJlZ2lzdGVyZWREYXRhYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuaAkocmV2aXNpb24g
MTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlByb2ZpbGVy
Q29tcGlsYXRpb25LaW5kLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9NdXRleC5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1NlZ21lbnRlZFZlY3Rvci5oPgpAQCAtOTksNyArMTAwLDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fc2hvdWxkU2F2ZUF0RXhpdDsKICAgICBDU3RyaW5nIG1fYXRFeGl0U2F2ZUZpbGVuYW1lOwog
ICAgIERhdGFiYXNlKiBtX25leHRSZWdpc3RlcmVkRGF0YWJhc2U7Ci0gICAgTG9jayBtX2xvY2s7
CisgICAgTXV0ZXggbV9sb2NrOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OlByb2ZpbGVy
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJM
b2cuaAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVByb2ZpbGVyTG9nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNs
dWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiVHlw
ZVByb2ZpbGVyLmgiCi0jaW5jbHVkZSA8d3RmL0J5dGVTcGluTG9jay5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Nzk4NSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTYgQEAKKzIwMTUtMDgtMDUgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBMaWdodHdlaWdodCBsb2NrcyBzaG91bGQg
YmUgYWRhcHRpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NzU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEEgY29tbW9uIGlkaW9tIGluIFdlYktpdCBpcyB0byB1c2Ugc3BpbmxvY2tzLiBXZSB1c2Ug
dGhlbSBiZWNhdXNlIHRoZSBsb2NrIGFjcXVpc2l0aW9uCisgICAgICAgIG92ZXJoZWFkIGlzIGxv
d2VyIHRoYW4gc3lzdGVtIGxvY2tzIGFuZCBiZWNhdXNlIHRoZXkgdGFrZSBkcmFtYXRpY2FsbHkg
bGVzcyBzcGFjZSB0aGFuIHN5c3RlbQorICAgICAgICBsb2Nrcy4gVGhlIHNwZWVkIGFuZCBzcGFj
ZSBhZHZhbnRhZ2VzIG9mIHNwaW5sb2NrcyBjYW4gYmUgYXN0b25pc2hpbmc6IGFuIHVuY29udGVu
ZGVkIHNwaW5sb2NrCisgICAgICAgIGFjcXVpcmUgaXMgdXAgdG8gMTB4IGZhc3RlciBhbmQgdW5k
ZXIgbWljcm9jb250ZW50aW9uIC0gc2hvcnQgY3JpdGljYWwgc2VjdGlvbiB3aXRoIHR3byBvcgor
ICAgICAgICBtb3JlIHRocmVhZHMgdGFraW5nIHR1cm5zIC0gc3BpbmxvY2tzIGFyZSB1cCB0byAx
MDB4IGZhc3Rlci4gU3BpbmxvY2tzIHRha2Ugb25seSAxIGJ5dGUgb3IgNAorICAgICAgICBieXRl
cyBkZXBlbmRpbmcgb24gdGhlIGZsYXZvciwgd2hpbGUgc3lzdGVtIGxvY2tzIHRha2UgNjQgYnl0
ZXMgb3IgbW9yZS4gQ2xlYXJseSwgV2ViS2l0CisgICAgICAgIHNob3VsZCBjb250aW51ZSB0byBh
dm9pZCBzeXN0ZW0gbG9ja3MgLSB0aGV5IGFyZSBqdXN0IGZhciB0b28gc2xvdyBhbmQgZmFyIHRv
byBiaWcuCisKKyAgICAgICAgQnV0IHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoaXMgaWRpb20u
IFN5c3RlbSBsb2NrIGltcGxlbWVudGF0aW9ucyB3aWxsIHNsZWVwIGEgdGhyZWFkIHdoZW4KKyAg
ICAgICAgaXQgYXR0ZW1wdHMgdG8gYWNxdWlyZSBhIGxvY2sgdGhhdCBpcyBoZWxkLCB3aGlsZSBz
cGlubG9ja3Mgd2lsbCBjYXVzZSB0aGUgdGhyZWFkIHRvIGJ1cm4gQ1BVLgorICAgICAgICBJbiBX
ZWJLaXQgc3BpbmxvY2tzLCB0aGUgdGhyZWFkIHdpbGwgcmVwZWF0ZWRseSBjYWxsIHNjaGVkX3lp
ZWxkKCkuIFRoaXMgaXMgYXdlc29tZSBmb3IKKyAgICAgICAgbWljcm9jb250ZW50aW9uLCBidXQg
YXdmdWwgd2hlbiB0aGUgbG9jayB3aWxsIG5vdCBiZSByZWxlYXNlZCBmb3IgYSB3aGlsZS4gSW4g
ZmFjdCwgd2hlbgorICAgICAgICBjcml0aWNhbCBzZWN0aW9ucyB0YWtlIHRlbnMgb2YgbWljcm9z
ZWNvbmRzIG9yIG1vcmUsIHRoZSBDUFUgdGltZSBjb3N0IG9mIG91ciBzcGlubG9ja3MgaXMKKyAg
ICAgICAgYWxtb3N0IDEwMHggbW9yZSB0aGFuIHRoZSBDUFUgdGltZSBjb3N0IG9mIGEgc3lzdGVt
IGxvY2suIFRoaXMgY2FzZSBkb2Vzbid0IGFyaXNlIHRvbworICAgICAgICBmcmVxdWVudGx5IGlu
IG91ciBjdXJyZW50IHVzZXMgb2Ygc3BpbmxvY2tzLCBidXQgdGhhdCdzIHByb2JhYmx5IGJlY2F1
c2UgcmlnaHQgbm93IHRoZXJlIGFyZQorICAgICAgICBwbGFjZXMgd2hlcmUgd2UgbWFrZSBhIGNv
bnNjaW91cyBkZWNpc2lvbiB0byB1c2Ugc3lzdGVtIGxvY2tzIC0gZXZlbiB0aG91Z2ggdGhleSB1
c2UgbW9yZQorICAgICAgICBtZW1vcnkgYW5kIGFyZSBzbG93ZXIgLSBiZWNhdXNlIHdlIGRvbid0
IHdhbnQgdG8gd2FzdGUgQ1BVIGN5Y2xlcyB3aGVuIGEgdGhyZWFkIGhhcyB0byB3YWl0IGEKKyAg
ICAgICAgd2hpbGUgdG8gYWNxdWlyZSB0aGUgbG9jay4KKworICAgICAgICBUaGUgc29sdXRpb24g
aXMgdG8ganVzdCBpbXBsZW1lbnQgYSBtb2Rlcm4gYWRhcHRpdmUgbXV0ZXggaW4gV1RGLiBMdWNr
aWx5LCB0aGlzIGlzbid0IGEgbmV3CisgICAgICAgIGNvbmNlcHQuIFRoaXMgcGF0Y2ggaW1wbGVt
ZW50cyBhIG11dGV4IHRoYXQgaXMgcmVtaW5pc2NlbnQgb2YgdGhlIGtpbmRzIG9mIGxvdy1vdmVy
aGVhZCBsb2NrcworICAgICAgICB0aGF0IEpWTXMgdXNlLiBUaGUgYWN0dWFsIGltcGxlbWVudGF0
aW9uIGhlcmUgaXMgaW5zcGlyZWQgYnkgc29tZSBvZiB0aGUgaWRlYXMgZnJvbSBbMV0uIFRoZQor
ICAgICAgICBpZGVhIGlzIHNpbXBsZTogdGhlIGZhc3QgcGF0aCBpcyBhbiBpbmxpbmVkIENBUyB0
byBpbW1lZGlhdGVseSBhY3F1aXJlIGEgbG9jayB0aGF0IGlzbid0IGhlbGQsCisgICAgICAgIHRo
ZSBzbG93IHBhdGggdHJpZXMgc29tZSBudW1iZXIgb2Ygc3BpbnMgdG8gYWNxdWlyZSB0aGUgbG9j
aywgYW5kIGlmIHRoYXQgZmFpbHMsIHRoZSB0aHJlYWQgaXMKKyAgICAgICAgcHV0IG9uIGEgcXVl
dWUgYW5kIHB1dCB0byBzbGVlcC4gVGhlIHF1ZXVlIGlzIG1hZGUgdXAgb2Ygc3RhdGljYWxseSBh
bGxvY2F0ZWQgdGhyZWFkIG5vZGVzIGFuZAorICAgICAgICB0aGUgbG9jayBpdHNlbGYgaXMgYSB0
YWdnZWQgcG9pbnRlcjogZWl0aGVyIGl0IGlzIGp1c3QgYml0cyB0ZWxsaW5nIHVzIHRoZSBjb21w
bGV0ZSBsb2NrIHN0YXRlCisgICAgICAgIChub3QgaGVsZCBvciBoZWxkKSBvciBpdCBpcyBhIHBv
aW50ZXIgdG8gdGhlIGhlYWQgb2YgYSBxdWV1ZSBvZiB0aHJlYWRzIHdhaXRpbmcgdG8gYWNxdWly
ZSB0aGUKKyAgICAgICAgbG9jay4gVGhpcyBhcHByb2FjaCBnaXZlcyBNdXRleCB0aHJlZSBkaWZm
ZXJlbnQgbGV2ZWxzIG9mIGFkYXB0YXRpb246IGFuIGlubGluZWQgZmFzdCBwYXRoIGlmCisgICAg
ICAgIHRoZSBsb2NrIGlzIG5vdCBjb250ZW5kZWQsIGEgc2hvcnQgYnVyc3Qgb2Ygc3Bpbm5pbmcg
Zm9yIG1pY3JvY29udGVudGlvbiwgYW5kIGEgZnVsbC1ibG93bgorICAgICAgICBxdWV1ZSBmb3Ig
Y3JpdGljYWwgc2VjdGlvbnMgdGhhdCBhcmUgaGVsZCBmb3IgYSBsb25nIHRpbWUuCisKKyAgICAg
ICAgT24gYSBsb2NraW5nIG1pY3JvYmVuY2htYXJrLCB0aGlzIG5ldyBXVEY6Ok11dGV4IGV4aGli
aXRzIHRoZSBmb2xsb3dpbmcgcGVyZm9ybWFuY2UKKyAgICAgICAgY2hhcmFjdGVyaXN0aWNzOgor
CisgICAgICAgIC0gTG9jayt1bmxvY2sgb24gYW4gdW5jb250ZW5kZWQgbm8tb3AgY3JpdGljYWwg
c2VjdGlvbjogMnggc2xvd2VyIHRoYW4gU3BpbkxvY2sgYW5kIDN4IGZhc3RlcgorICAgICAgICAg
IHRoYW4gYSBzeXN0ZW0gbXV0ZXguCisKKyAgICAgICAgLSBMb2NrK3VubG9jayBvbiBhIGNvbnRl
bmRlZCBuby1vcCBjcml0aWNhbCBzZWN0aW9uOiAyeCBzbG93ZXIgdGhhbiBTcGluTG9jayBhbmQg
MTAweCBmYXN0ZXIKKyAgICAgICAgICB0aGFuIGEgc3lzdGVtIG11dGV4LgorCisgICAgICAgIC0g
Q1BVIHRpbWUgc3BlbnQgaW4gbG9jaygpIG9uIGEgbG9jayBoZWxkIGZvciBhIHdoaWxlOiBzYW1l
IGFzIHN5c3RlbSBtdXRleCwgOTB4IGxlc3MgdGhhbiBhCisgICAgICAgICAgU3BpbkxvY2suCisK
KyAgICAgICAgLSBNZW1vcnkgdXNhZ2U6IHNpemVvZih2b2lkKiksIHNvIG9uIDY0LWJpdCBpdCdz
IDh4IGxlc3MgdGhhbiBhIHN5c3RlbSBtdXRleCBidXQgMnggd29yc2UgdGhhbgorICAgICAgICAg
IGEgU3BpbkxvY2suCisKKyAgICAgICAgVGhpcyBwYXRjaCByZXBsYWNlcyBhbGwgdXNlcyBvZiBT
cGluTG9jayB3aXRoIE11dGV4LCBzaW5jZSBvdXIgY3JpdGljYWwgc2VjdGlvbnMgYXJlIG5vdAor
ICAgICAgICBuby1vcHMgc28gaWYgeW91IGRvIGJhc2ljYWxseSBhbnl0aGluZyBpbiB5b3VyIGNy
aXRpY2FsIHNlY3Rpb24sIHRoZSBNdXRleCBvdmVyaGVhZCB3aWxsIGJlCisgICAgICAgIGludmlz
aWJsZS4gQWxzbywgaW4gYWxsIHBsYWNlcyB3aGVyZSB3ZSB1c2VkIFNwaW5Mb2NrLCB3ZSBjb3Vs
ZCB0b2xlcmF0ZSA4IGJ5dGVzIG9mIG92ZXJoZWFkCisgICAgICAgIGluc3RlYWQgb2YgNC4gUGVy
Zm9ybWFuY2UgYmVuY2htYXJraW5nIHVzaW5nIEpTQyBtYWNyb2JlbmNobWFya3Mgc2hvd3Mgbm8g
ZGlmZmVyZW5jZSwgd2hpY2ggaXMKKyAgICAgICAgYXMgaXQgc2hvdWxkIGJlOiB0aGUgcHVycG9z
ZSBvZiB0aGlzIGNoYW5nZSBpcyB0byByZWR1Y2UgQ1BVIHRpbWUgd2FzdGVkLCBub3Qgd2FsbGNs
b2NrIHRpbWUuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lc24ndCByZXBsYWNlIGFueSB1c2VzIG9m
IEJ5dGVTcGluTG9jaywgc2luY2Ugd2UgZXhwZWN0IHRoYXQgdGhlIHNwYWNlIGJlbmVmaXRzCisg
ICAgICAgIG9mIGhhdmluZyBhIGxvY2sgdGhhdCBqdXN0IHVzZXMgYSBieXRlIGFyZSBzdGlsbCBi
ZXR0ZXIgdGhhbiB0aGUgQ1BVIHdhc3RhZ2UgYmVuZWZpdHMgb2YKKyAgICAgICAgTXV0ZXguIEJ1
dCwgdGhpcyB3b3JrIHdpbGwgZW5hYmxlIHNvbWUgZnV0dXJlIHdvcmsgdG8gY3JlYXRlIGxvY2tz
IHRoYXQgd2lsbCBmaXQgaW4ganVzdCAxLjYKKyAgICAgICAgYml0czogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzY2NS4KKworICAgICAgICBbMV0gaHR0cDovL3d3
dy5maWxwaXpsby5jb20vcGFwZXJzL3BpemxvLXBwcGoyMDExLWZhYmxlLnBkZgorCisgICAgICAg
ICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2o6CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYmVuY2htYXJrczogQWRkZWQuCisgICAgICAgICogYmVu
Y2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAg
ICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuY3Bw
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAgICAgKFdURjo6
TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRv
cjo6YWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlz
dGljcyk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNwYWNlKToK
KyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKToKKyAgICAg
ICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAqIHd0Zi9NdXRleC5jcHA6IEFkZGVk
LgorICAgICAgICAoV1RGOjpNdXRleEJhc2U6OmxvY2tTbG93KToKKyAgICAgICAgKFdURjo6TXV0
ZXhCYXNlOjp1bmxvY2tTbG93KToKKyAgICAgICAgKiB3dGYvTXV0ZXguaDogQWRkZWQuCisgICAg
ICAgIChXVEY6Ok11dGV4QmFzZTo6bG9jayk6CisgICAgICAgIChXVEY6Ok11dGV4QmFzZTo6dW5s
b2NrKToKKyAgICAgICAgKFdURjo6TXV0ZXhCYXNlOjppc0hlbGQpOgorICAgICAgICAoV1RGOjpN
dXRleEJhc2U6OmlzTG9ja2VkKToKKyAgICAgICAgKFdURjo6TXV0ZXg6Ok11dGV4KToKKyAgICAg
ICAgKiB3dGYvU3BpbkxvY2suaDoKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmcuY3Bw
OgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RG
OjpBdG9taWNTdHJpbmdUYWJsZUxvY2tlcjo6QXRvbWljU3RyaW5nVGFibGVMb2NrZXIpOgorCiAy
MDE1LTA4LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVu
YW1lIE11dGV4IHRvIERlcHJlY2F0ZWRNdXRleApJbmRleDogU291cmNlL1dURi9XVEYudmN4cHJv
ai9XVEYudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52
Y3hwcm9qCShyZXZpc2lvbiAxODc5NzMpCisrKyBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52
Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAot77u/PD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0
Zi04Ij8+CiA8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIu
MCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQv
MjAwMyI+CiAgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CiAgICAg
PFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnU3VmZml4fFdpbjMyIj4KQEAgLTEx
MCw2ICsxMTAsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXE1ENS5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcTWVkaWFUaW1lLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxNZXRhQWxsb2NhdG9yLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxNdXRleC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlx3dGZcTnVtYmVyT2ZDb3Jlcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlx3dGZcT1NBbGxvY2F0b3JXaW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cd3RmXE9TUmFuZG9tU291cmNlLmNwcCIgLz4KQEAgLTIzMiw2ICsyMzMsNyBAQAogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXE1lc3NhZ2VRdWV1ZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cd3RmXE1ldGFBbGxvY2F0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxNZXRhQWxsb2NhdG9ySGFuZGxlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlx3dGZcTXV0ZXguaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0
ZlxOZXZlckRlc3Ryb3llZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXE5v
bmNvcHlhYmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTnVtYmVyT2ZD
b3Jlcy5oIiAvPgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxODc5NzMpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBACiAJCTBGRERCRkE3MTY2NkRG
QTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3Ry
aW5nUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRkREQkZBODE2NjZERkEzMDBDNTVGRUYgLyog
U3RyaW5nUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5o
ICovOyB9OwogCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjUxQjIyRDRE
ODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLzsgfTsKKwkJMEZGQzQ1QTIxQjcyOUY4NzAwODVC
RDYyIC8qIE11dGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRkM0NUEwMUI3MjlGODcwMDg1QkQ2MiAvKiBNdXRleC5jcHAgKi87IH07CisJCTBG
RkM0NUEzMUI3MjlGODcwMDg1QkQ2MiAvKiBNdXRleC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzQ1QTExQjcyOUY4NzAwODVCRDYyIC8qIE11dGV4
LmggKi87IH07CiAJCTE0MDIyRjQxMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9jLmEgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAyMkY0MDE4
RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hICovOyB9OwogCQkxNDNGNjExRjE1NjVGMEY5
MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi87
IH07CiAJCTE0M0Y2MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVGMEY5MDBEQjUx
NEEgLyogUkFNU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CkBA
IC0zMjMsNiArMzI1LDggQEAKIAkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50
U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUMzRUU0MTcxQjgzNDcw
MEZEQUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZVNwaW5Mb2NrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAv
KiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJT
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzQ1QTAxQjcyOUY4NzAwODVC
RDYyIC8qIE11dGV4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11
dGV4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGQzQ1QTExQjcyOUY4NzAw
ODVCRDYyIC8qIE11dGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11dGV4
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDIyRjQwMThGNUMzRkMwMDdGRjBF
QiAvKiBsaWJibWFsbG9jLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBwYXRoID0gbGliYm1hbGxvYy5hOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFN
U2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSQU1TaXplLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRjYxMUUxNTY1RjBGOTAwREI1MTRB
IC8qIFJBTVNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUkFNU2l6ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzg0LDYgKzc4OCw4IEBACiAJCQkJQThB
NDcyQ0QxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAogCQkJCUE4QTQ3
MkNFMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmggKi8sCiAJCQkJQThBNDcyQ0Yx
NTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCAqLywKKwkJCQkwRkZDNDVB
MDFCNzI5Rjg3MDA4NUJENjIgLyogTXV0ZXguY3BwICovLAorCQkJCTBGRkM0NUExMUI3MjlGODcw
MDg1QkQ2MiAvKiBNdXRleC5oICovLAogCQkJCUZFODIyNTMwMUIyQTFFNUIwMEJBNjhGRCAvKiBO
YWtlZFB0ci5oICovLAogCQkJCTFBM0Y2QkU2MTc0QURBMjEwMEIyRUVBNyAvKiBOZXZlckRlc3Ry
b3llZC5oICovLAogCQkJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLywK
QEAgLTExMjEsNiArMTEyNyw3IEBACiAJCQkJQThBNDczRTYxNTFBODI1QjAwNDEyM0ZGIC8qIE1h
aW5UaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0U4MTUxQTgyNUIwMDQxMjNGRiAv
KiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFQTE1MUE4MjVCMDA0MTIz
RkYgLyogTUQ1LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZDNDVBMzFCNzI5Rjg3MDA4NUJENjIg
LyogTXV0ZXguaCBpbiBIZWFkZXJzICovLAogCQkJCTdDQkJBMDc0MTlCQjdGREMwMEJCRjAyNSAv
KiBPU09iamVjdFB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1NDk3QUQxNTg1N0QwMzAwQjVC
QzMwIC8qIE1lZGlhVGltZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRUIxNTFBODI1QjAw
NDEyM0ZGIC8qIE1lc3NhZ2VRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzYxLDYgKzEzNjgs
NyBAQAogCQkJCTkzRjE5OTNFMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4QTQ3M0Y5MTUxQTgyNUIwMDQxMjNGRiAvKiBPU1JhbmRvbVNvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQwMjE1MUE4MjVCMDA0MTIzRkYgLyogUGFn
ZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRkM0NUEyMUI3MjlGODcwMDg1QkQ2MiAv
KiBNdXRleC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM2MjE2NURCQTczMDA1QUQzODcg
LyogUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAw
REI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MTQxNTFBODI1
QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL011dGV4Lmg+CisjaW5jbHVkZSA8d3RmL1Nw
aW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorCituYW1l
c3BhY2UgeworCit1bnNpZ25lZCBudW1UaHJlYWRHcm91cHM7Cit1bnNpZ25lZCBudW1UaHJlYWRz
UGVyR3JvdXA7Cit1bnNpZ25lZCB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uOwordW5zaWduZWQgbnVt
Tm9pc2VUaHJlYWRzOwordW5zaWduZWQgbnVtSXRlcmF0aW9uczsKKyAgICAKK3ZvaWQgdXNhZ2Uo
KQoreworICAgIHByaW50ZigiVXNhZ2U6IExvY2tTcGVlZFRlc3Qgc3BpbmxvY2t8bXV0ZXh8c3lz
dGVtfGFsbCA8bnVtIHRocmVhZCBncm91cHM+IDxudW0gdGhyZWFkcyBwZXIgZ3JvdXA+IDx3b3Jr
IHBlciBjcml0aWNhbCBzZWN0aW9uPiA8bnVtIG5vaXNlIHRocmVhZHM+IDxudW0gaXRlcmF0aW9u
cz5cbiIpOworICAgIGV4aXQoMSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgor
dm9pZCBydW5CZW5jaG1hcmsoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8TG9ja1R5cGVbXT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPExvY2tUeXBlW10+KG51bVRo
cmVhZEdyb3Vwcyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPGRvdWJsZVtdPiB3b3JkcyA9IHN0ZDo6
bWFrZV91bmlxdWU8ZG91YmxlW10+KG51bVRocmVhZEdyb3Vwcyk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFk
SWRlbnRpZmllcltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRJZGVudGlmaWVyW10+IG5vaXNlVGhyZWFkcyA9IHN0ZDo6
bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1Ob2lzZVRocmVhZHMpOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxkb3VibGVbXT4gbm9pc2VDb3VudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPGRv
dWJsZVtdPihudW1Ob2lzZVRocmVhZHMpOworCisgICAgdm9sYXRpbGUgYm9vbCBzaG91bGRTdG9w
ID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bU5vaXNlVGhyZWFk
czsgdGhyZWFkSW5kZXgtLTspIHsKKyAgICAgICAgbm9pc2VDb3VudHNbdGhyZWFkSW5kZXhdID0g
MDsKKyAgICAgICAgbm9pc2VUaHJlYWRzW3RocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAg
ICAgICAgICAgICJOb2lzZSBUaHJlYWQiLAorICAgICAgICAgICAgWyZzaG91bGRTdG9wLCAmbm9p
c2VDb3VudHMsIHRocmVhZEluZGV4XSAoKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCFzaG91
bGRTdG9wKQorICAgICAgICAgICAgICAgICAgICBub2lzZUNvdW50c1t0aHJlYWRJbmRleF0rKzsK
KyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIGRvdWJsZSBiZWZvcmUgPSBtb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWVNUygpOworICAgIAorICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3Jv
dXBJbmRleCA9IG51bVRocmVhZEdyb3VwczsgdGhyZWFkR3JvdXBJbmRleC0tOykgeworICAgICAg
ICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSA9IDA7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0
aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKKyAgICAg
ICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRo
cmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICAiQmVuY2htYXJrIHRo
cmVhZCIsCisgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRz
XSAoKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUl0ZXJhdGlv
bnM7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tzW3RocmVhZEdyb3VwSW5k
ZXhdLmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHdv
cmtQZXJDcml0aWNhbFNlY3Rpb247IGotLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdICo9IDEuMDE7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBsb2Nrc1t0aHJlYWRHcm91cEluZGV4XS51bmxv
Y2soKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdy
b3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspCisgICAgICAgIHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbdGhyZWFkSW5kZXhdKTsKKyAgICBzaG91bGRTdG9w
ID0gdHJ1ZTsKKyAgICBkb3VibGUgbm9pc2VDb3VudCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCB0
aHJlYWRJbmRleCA9IG51bU5vaXNlVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKKyAgICAgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24obm9pc2VUaHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAg
ICAgIG5vaXNlQ291bnQgKz0gbm9pc2VDb3VudHNbdGhyZWFkSW5kZXhdOworICAgIH0KKworICAg
IGRvdWJsZSBhZnRlciA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisKKyAgICBw
cmludGYoIiVzOiAlLjNsZiBtcywgJS4wbGYgbm9pc2UuXG4iLCBuYW1lLCBhZnRlciAtIGJlZm9y
ZSwgbm9pc2VDb3VudCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5n
KCk7CisgICAgCisgICAgaWYgKGFyZ2MgIT0gNworICAgICAgICB8fCBzc2NhbmYoYXJndlsyXSwg
IiV1IiwgJm51bVRocmVhZEdyb3VwcykgIT0gMQorICAgICAgICB8fCBzc2NhbmYoYXJndlszXSwg
IiV1IiwgJm51bVRocmVhZHNQZXJHcm91cCkgIT0gMQorICAgICAgICB8fCBzc2NhbmYoYXJndls0
XSwgIiV1IiwgJndvcmtQZXJDcml0aWNhbFNlY3Rpb24pICE9IDEKKyAgICAgICAgfHwgc3NjYW5m
KGFyZ3ZbNV0sICIldSIsICZudW1Ob2lzZVRocmVhZHMpICE9IDEKKyAgICAgICAgfHwgc3NjYW5m
KGFyZ3ZbNl0sICIldSIsICZudW1JdGVyYXRpb25zKSAhPSAxKQorICAgICAgICB1c2FnZSgpOwor
CisgICAgYm9vbCBkaWRSdW4gPSBmYWxzZTsKKyAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAic3Bp
bmxvY2siKSB8fCAhc3RyY21wKGFyZ3ZbMV0sICJhbGwiKSkgeworICAgICAgICBydW5CZW5jaG1h
cms8U3BpbkxvY2s+KCJTcGluTG9jayIpOworICAgICAgICBkaWRSdW4gPSB0cnVlOworICAgIH0K
KyAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAibXV0ZXgiKSB8fCAhc3RyY21wKGFyZ3ZbMV0sICJh
bGwiKSkgeworICAgICAgICBydW5CZW5jaG1hcms8TXV0ZXg+KCJXVEYgTXV0ZXgiKTsKKyAgICAg
ICAgZGlkUnVuID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFzdHJjbXAoYXJndlsxXSwgInN5c3Rl
bSIpIHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CisgICAgICAgIHJ1bkJlbmNobWFyazxE
ZXByZWNhdGVkTXV0ZXg+KCJTeXN0ZW0gTXV0ZXgiKTsKKyAgICAgICAgZGlkUnVuID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoIWRpZFJ1bikKKyAgICAgICAgdXNhZ2UoKTsKKworICAgIHJldHVy
biAwOworfQpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4Nzk3MykKKysrIFNv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3
IEBAIHNldChXVEZfSEVBREVSUwogICAgIE1lc3NhZ2VRdWV1ZS5oCiAgICAgTWV0YUFsbG9jYXRv
ci5oCiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZS5oCisgICAgTXV0ZXguaAogICAgIE5vbmNvcHlh
YmxlLmgKICAgICBOdW1iZXJPZkNvcmVzLmgKICAgICBPU0FsbG9jYXRvci5oCkBAIC0xNjAsNiAr
MTYxLDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgTWFpblRocmVhZC5jcHAKICAgICBNZWRpYVRp
bWUuY3BwCiAgICAgTWV0YUFsbG9jYXRvci5jcHAKKyAgICBNdXRleC5jcHAKICAgICBOdW1iZXJP
ZkNvcmVzLmNwcAogICAgIE9TUmFuZG9tU291cmNlLmNwcAogICAgIFBhZ2VCbG9jay5jcHAKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxODc5NzMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QCB2b2lkIE1ldGFBbGxvY2F0b3JUcmFja2VyOjpyZWxlYXNlKE1ldGFBCiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRs
ZSkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgTXV0ZXhIb2xk
ZXIgbG9ja2VyKCZtX2xvY2spOwogICAgIGlmIChoYW5kbGUtPnNpemVJbkJ5dGVzKCkpIHsKICAg
ICAgICAgZGVjcmVtZW50UGFnZU9jY3VwYW5jeShoYW5kbGUtPnN0YXJ0KCksIGhhbmRsZS0+c2l6
ZUluQnl0ZXMoKSk7CiAgICAgICAgIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShoYW5k
bGUtPnN0YXJ0KCksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSk7CkBAIC05MSw3ICs5MSw3IEBAIHZv
aWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCAKIHsKICAgICBBU1NFUlQobmV3
U2l6ZUluQnl0ZXMgPD0gbV9zaXplSW5CeXRlcyk7CiAgICAgCi0gICAgU3BpbkxvY2tIb2xkZXIg
bG9ja2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKKyAgICBNdXRleEhvbGRlciBsb2NrZXIoJm1f
YWxsb2NhdG9yLT5tX2xvY2spOwogCiAgICAgbmV3U2l6ZUluQnl0ZXMgPSBtX2FsbG9jYXRvci0+
cm91bmRVcChuZXdTaXplSW5CeXRlcyk7CiAgICAgCkBAIC0xNTAsNyArMTUwLDcgQEAgTWV0YUFs
bG9jYXRvcjo6TWV0YUFsbG9jYXRvcihzaXplX3QgYWxsbwogCiBQYXNzUmVmUHRyPE1ldGFBbGxv
Y2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywg
dm9pZCogb3duZXJVSUQpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwor
ICAgIE11dGV4SG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKIAogICAgIGlmICghc2l6ZUluQnl0ZXMp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTk2LDcgKzE5Niw3IEBAIFBhc3NSZWZQdHI8TWV0YUFs
bG9jYXRvckhhbmRsZT4gTWV0YUFsbG8KIAogTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBNZXRh
QWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9j
a2VyKCZtX2xvY2spOworICAgIE11dGV4SG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBTdGF0
aXN0aWNzIHJlc3VsdDsKICAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQgPSBtX2J5dGVzQWxsb2Nh
dGVkOwogICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkID0gbV9ieXRlc1Jlc2VydmVkOwpAQCAtMjgx
LDcgKzI4MSw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlRnJvbVJlbGUKIAog
dm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90
IHNpemVJbkJ5dGVzKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAg
ICBNdXRleEhvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAgICAgbV9ieXRlc1Jlc2VydmVkICs9IHNp
emVJbkJ5dGVzOwogICAgIGFkZEZyZWVTcGFjZShzdGFydCwgc2l6ZUluQnl0ZXMpOwogfQpAQCAt
Mjg5LDcgKzI4OSw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlc2hGcmVlU3BhY2Uodm8K
IHNpemVfdCBNZXRhQWxsb2NhdG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUoKQogewogI2lmbmRlZiBO
REVCVUcKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgTXV0ZXhIb2xk
ZXIgbG9ja2VyKCZtX2xvY2spOwogICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgIGZvciAoRnJl
ZVNwYWNlTm9kZSogbm9kZSA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5maXJzdCgpOyBub2RlOyBub2Rl
ID0gbm9kZS0+c3VjY2Vzc29yKCkpCiAgICAgICAgIHJlc3VsdCArPSBub2RlLT5tX3NpemVJbkJ5
dGVzOwpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMTg3OTczKQorKysgU291
cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3
IEBACiAjaW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TcGluTG9jay5o
PgorI2luY2x1ZGUgPHd0Zi9NdXRleC5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMTgzLDcg
KzE4Myw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKICAgICBzaXpl
X3QgbV9ieXRlc0NvbW1pdHRlZDsKICAgICAKLSAgICBTcGluTG9jayBtX2xvY2s7CisgICAgTXV0
ZXggbV9sb2NrOwogCiAgICAgTWV0YUFsbG9jYXRvclRyYWNrZXIqIG1fdHJhY2tlcjsKIApJbmRl
eDogU291cmNlL1dURi93dGYvTXV0ZXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L011dGV4LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL011dGV4LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTXV0ZXgu
aCIKKworI2luY2x1ZGUgIlRocmVhZFNwZWNpZmljLmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nUHJp
bWl0aXZlcy5oIgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHRocmVhZD4KKworbmFtZXNw
YWNlIFdURiB7CisKK25hbWVzcGFjZSB7CisKKy8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgc2VydmVz
IHRocmVlIHB1cnBvc2VzOgorLy8KKy8vIDEpIEEgcGFya2luZyBtZWNoYW5pc20gZm9yIHRocmVh
ZHMgdGhhdCBnbyB0byBzbGVlcC4gVGhhdCBpbnZvbHZlcyBqdXN0IGEgc3lzdGVtIG11dGV4IGFu
ZAorLy8gICAgY29uZGl0aW9uIHZhcmlhYmxlLgorLy8KKy8vIDIpIEEgcXVldWUgbm9kZSBmb3Ig
d2hlbiBhIHRocmVhZCBpcyBvbiBzb21lIE11dGV4J3MgcXVldWUuCisvLworLy8gMykgVGhlIHF1
ZXVlIGhlYWQuIFRoaXMgaXMga2luZCBvZiBmdW5reS4gV2hlbiBhIHRocmVhZCBpcyB0aGUgaGVh
ZCBvZiBhIHF1ZXVlLCBpdCBhbHNvIHNlcnZlcyBhcworLy8gICAgdGhlIGJhc2ljIHF1ZXVlIGJv
b2trZWVwaW5nIGRhdGEgc3RydWN0dXJlLiBXaGVuIGEgdGhyZWFkIGlzIGRlcXVldWVkLCB0aGUg
bmV4dCB0aHJlYWQgaW4gdGhlCisvLyAgICBxdWV1ZSB0YWtlcyBvbiB0aGUgcXVldWUgaGVhZCBk
dXRpZXMuCitzdHJ1Y3QgVGhyZWFkRGF0YSB7CisgICAgLy8gVGhlIHBhcmtpbmcgbWVjaGFuaXNt
LgorICAgIGJvb2wgc2hvdWxkUGFyayB7IGZhbHNlIH07CisgICAgc3RkOjptdXRleCBwYXJraW5n
TXV0ZXg7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlvbjsKKwor
ICAgIC8vIFRoZSBxdWV1ZSBub2RlLgorICAgIFRocmVhZERhdGEqIG5leHRJblF1ZXVlIHsgbnVs
bHB0ciB9OworCisgICAgLy8gVGhlIHF1ZXVlIGl0c2VsZi4KKyAgICBUaHJlYWREYXRhKiBxdWV1
ZVRhaWwgeyBudWxscHRyIH07Cit9OworCitUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPiogdGhy
ZWFkRGF0YTsKKworVGhyZWFkRGF0YSogbXlUaHJlYWREYXRhKCkKK3sKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAg
IGluaXRpYWxpemVPbmNlLAorICAgICAgICBbXXsKKyAgICAgICAgICAgIHRocmVhZERhdGEgPSBu
ZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFkRGF0YT4oKTsKKyAgICAgICAgfSk7CisKKyAgICByZXR1
cm4gKnRocmVhZERhdGE7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIE11
dGV4QmFzZTo6bG9ja1Nsb3coKQoreworICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisKKyAg
ICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBw
YXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgorICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9
IDQwOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdWludHB0cl90IGN1cnJlbnRXb3Jk
VmFsdWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCEoY3VycmVudFdv
cmRWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICYmIG1fd29yZC5jb21wYXJlRXhjaGFu
Z2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBpc0hlbGRCaXQpKSB7
CisgICAgICAgICAgICAvLyBTdWNjZXNzISBXZSBhY3F1aXJlZCB0aGUgbG9jay4KKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHF1ZXVl
IGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFy
b3VuZCBhZ2Fpbi4KKyAgICAgICAgaWYgKCEoY3VycmVudFdvcmRWYWx1ZSAmIH5tYXNrKSAmJiBz
cGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAgICAgICAgICAgIHNwaW5Db3VudCsrOworICAgICAg
ICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gTmVlZCB0byBwdXQgb3Vyc2VsdmVzIG9uIHRoZSBxdWV1
ZS4gQ3JlYXRlIHRoZSBxdWV1ZSBpZiBvbmUgZG9lcyBub3QgZXhpc3QuIFRoaXMgcmVxdXJpZXMK
KyAgICAgICAgLy8gb3duaW5nIHRoZSBxdWV1ZSBmb3IgYSBsaXR0bGUgYml0LiBUaGUgbG9jayB0
aGF0IGNvbnRyb2xzIHRoZSBxdWV1ZSBpcyBpdHNlbGYgYSBzcGlubG9jay4KKyAgICAgICAgLy8g
QnV0IGJlZm9yZSB3ZSBhY3F1aXJlIHRoZSBxdWV1ZSBzcGlubG9jaywgd2UgbWFrZSBzdXJlIHRo
YXQgd2UgaGF2ZSBhIFRocmVhZERhdGEgZm9yIHRoaXMKKyAgICAgICAgLy8gdGhyZWFkLgorICAg
ICAgICBUaHJlYWREYXRhKiBtZSA9IG15VGhyZWFkRGF0YSgpOworICAgICAgICBBU1NFUlQoIW1l
LT5zaG91bGRQYXJrKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+bmV4dEluUXVldWUpOworICAgICAg
ICBBU1NFUlQoIW1lLT5xdWV1ZVRhaWwpOworCisgICAgICAgIC8vIFJlbG9hZCB0aGUgY3VycmVu
dCB3b3JkIHZhbHVlLCBzaW5jZSBzb21lIHRpbWUgbWF5IGhhdmUgcGFzc2VkLgorICAgICAgICBj
dXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKworICAgICAgICAvLyBXZSBwcm9jZWVk
IG9ubHkgaWYgdGhlIHF1ZXVlIGxvY2sgaXMgbm90IGhlbGQsIHRoZSBNdXRleCBpcyBoZWxkLCBh
bmQgd2Ugc3VjY2VlZCBpbgorICAgICAgICAvLyBhY3F1aXJpbmcgdGhlIHF1ZXVlIGxvY2suCisg
ICAgICAgIGlmICgoY3VycmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KQorICAgICAgICAg
ICAgfHwgIShjdXJyZW50V29yZFZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgfHwgIW1f
d29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRXb3JkVmFs
dWUgfCBsb2NrZWRRdWV1ZUJpdCkpIHsKKyAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6Onlp
ZWxkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1lLT5z
aG91bGRQYXJrID0gdHJ1ZTsKKworICAgICAgICAvLyBXZSBvd24gdGhlIHF1ZXVlLiBOb2JvZHkg
Y2FuIGVucXVldWUgb3IgZGVxdWV1ZSB1bnRpbCB3ZSdyZSBkb25lLiBBbHNvLCBpdCdzIG5vdCBw
b3NzaWJsZQorICAgICAgICAvLyB0byByZWxlYXNlIHRoZSBNdXRleCB3aGlsZSB3ZSBob2xkIHRo
ZSBxdWV1ZSBsb2NrLgorICAgICAgICBUaHJlYWREYXRhKiBxdWV1ZUhlYWQgPSBiaXR3aXNlX2Nh
c3Q8VGhyZWFkRGF0YSo+KGN1cnJlbnRXb3JkVmFsdWUgJiB+bWFzayk7CisgICAgICAgIGlmIChx
dWV1ZUhlYWQpIHsKKyAgICAgICAgICAgIC8vIFB1dCB0aGlzIHRocmVhZCBhdCB0aGUgZW5kIG9m
IHRoZSBxdWV1ZS4KKyAgICAgICAgICAgIHF1ZXVlSGVhZC0+cXVldWVUYWlsLT5uZXh0SW5RdWV1
ZSA9IG1lOworICAgICAgICAgICAgcXVldWVIZWFkLT5xdWV1ZVRhaWwgPSBtZTsKKworICAgICAg
ICAgICAgLy8gUmVsZWFzZSB0aGUgcXVldWUgbG9jay4KKyAgICAgICAgICAgIGZvciAoOzspIHsK
KyAgICAgICAgICAgICAgICBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIH5tYXNrKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KTsKKyAgICAgICAg
ICAgICAgICBib29sIHJlc3VsdCA9IG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKAorICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50V29yZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlICYgfmxvY2tl
ZFF1ZXVlQml0KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIE1ha2UgdGhpcyB0aHJlYWQgYmUgdGhlIHF1ZXVlLWhlYWQuCisgICAgICAgICAgICBxdWV1
ZUhlYWQgPSBtZTsKKyAgICAgICAgICAgIG1lLT5xdWV1ZVRhaWwgPSBtZTsKKworICAgICAgICAg
ICAgLy8gV2UgbmVlZCBhIENBUyBsb29wIHRvIGluc3RhbGwgdGhlIHF1ZXVlIGhlYWQuIFRoaXMg
Q0FTIGxvb3AgaXMganVzdCB0byBwcm90ZWN0IGFnYWluc3QKKyAgICAgICAgICAgIC8vIGlzSGVs
ZEJpdCBjaGFuZ2luZy4gV2UgYWxzbyByZWxlYXNlIHRoZSBxdWV1ZSBsb2NrIGhlcmUuCisgICAg
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1f
d29yZC5sb2FkKCk7CisgICAgICAgICAgICAgICAgLy8gTm9ib2R5IGNvdWxkIGhhdmUgaW5zdGFs
bGVkIGEgcXVldWUgYmVjYXVzZSB3ZSBsb2NrZWQgdGhlIHF1ZXVlLgorICAgICAgICAgICAgICAg
IEFTU0VSVCghKGN1cnJlbnRXb3JkVmFsdWUgJiB+bWFzaykpOworICAgICAgICAgICAgICAgIC8v
IFdlIGFyZSBob2xkaW5nIHRoZSBxdWV1ZSBsb2NrLgorICAgICAgICAgICAgICAgIEFTU0VSVChj
dXJyZW50V29yZFZhbHVlICYgbG9ja2VkUXVldWVCaXQpOworICAgICAgICAgICAgICAgIC8vIE5v
Ym9keSBjYW4gcmVsZWFzZSB0aGUgbG9jayB3aGlsZSB3ZSBob2xkIHRoZSBxdWV1ZSBsb2NrLgor
ICAgICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNIZWxkQml0KTsKKwor
ICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBuZXdXb3JkVmFsdWUgPSBjdXJyZW50V29yZFZhbHVl
OworICAgICAgICAgICAgICAgIG5ld1dvcmRWYWx1ZSB8PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihxdWV1ZUhlYWQpOworICAgICAgICAgICAgICAgIG5ld1dvcmRWYWx1ZSAmPSB+bG9ja2VkUXVl
dWVCaXQ7CisKKyAgICAgICAgICAgICAgICBpZiAobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWso
Y3VycmVudFdvcmRWYWx1ZSwgbmV3V29yZFZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50
IGV2ZXJ5b25lIHdobyBhY3F1aXJlcyB0aGUgcXVldWUgbG9jayB3aWxsIHNlZSBtZSBvbiB0aGUg
cXVldWUsIGFuZCBhbnlvbmUgd2hvCisgICAgICAgIC8vIGFjcXVpcmVzIG1lJ3MgbG9jayB3aWxs
IHNlZSB0aGF0IG1lIHdhbnRzIHRvIHBhcmsuIE5vdGUgdGhhdCBzaG91bGRQYXJrIG1heSBoYXZl
IGJlZW4KKyAgICAgICAgLy8gY2xlYXJlZCBhcyBzb29uIGFzIHRoZSBxdWV1ZSBsb2NrIHdhcyBy
ZWxlYXNlZCBhYm92ZSwgYnV0IGl0IHdpbGwgaGFwcGVuIHdoaWxlIHRoZQorICAgICAgICAvLyBy
ZWxlYXNpbmcgdGhyZWFkIGhvbGRzIG1lJ3MgcGFya2luZ011dGV4LgorCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1lLT5wYXJraW5n
TXV0ZXgpOworICAgICAgICAgICAgd2hpbGUgKG1lLT5zaG91bGRQYXJrKQorICAgICAgICAgICAg
ICAgIG1lLT5wYXJraW5nQ29uZGl0aW9uLndhaXQobG9ja2VyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEFTU0VSVCghbWUtPnNob3VsZFBhcmspOworICAgICAgICBBU1NFUlQoIW1lLT5uZXh0SW5R
dWV1ZSk7CisgICAgICAgIEFTU0VSVCghbWUtPnF1ZXVlVGFpbCk7CisgICAgICAgIAorICAgICAg
ICAvLyBOb3cgd2UgY2FuIGxvb3AgYXJvdW5kIGFuZCB0cnkgdG8gYWNxdWlyZSB0aGUgbG9jayBh
Z2Fpbi4KKyAgICB9Cit9CisKK3ZvaWQgTXV0ZXhCYXNlOjp1bmxvY2tTbG93KCkKK3sKKyAgICAv
LyBJZiB0aGUgZmFzdCBwYXRoIGZhaWxlZCwgaXQgY2FuIG9ubHkgYmUgYmVjYXVzZSBzb21lb25l
IHB1dCBhIHRocmVhZCBvbiB0aGUgcXVldWUgb3IgdGhlIHF1ZXVlCisgICAgLy8gbG9jayBpcyBo
ZWxkLiBJZiB0aGUgcXVldWUgbG9jayBpcyBoZWxkLCBpdCBjYW4gb25seSBiZSBiZWNhdXNlIHNv
bWVvbmUgKndpbGwqIGVucXVldWUgYSB0aHJlYWQKKyAgICAvLyBvbnRvIHRoZSBxdWV1ZS4KKwor
ICAgIC8vIEFjcXVpcmUgdGhlIHF1ZXVlIGxvY2suCisgICAgZm9yICg7OykgeworICAgICAgICB1
aW50cHRyX3QgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisKKyAgICAgICAgQVNT
RVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0hlbGRCaXQpOworICAgICAgICAKKyAgICAgICAgaWYg
KGN1cnJlbnRXb3JkVmFsdWUgJiBsb2NrZWRRdWV1ZUJpdCkgeworICAgICAgICAgICAgc3RkOjp0
aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gSWYgdGhlIHF1ZXVlIGxvY2sgaXMgbm90IGhlbGQsIHRoZW4gdGhlcmUgbXVz
dCBiZSBhbiBlbnRyeSBvbiB0aGUgcXVldWUuCisgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZh
bHVlICYgfm1hc2spOworCisgICAgICAgIGlmIChtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2Vhayhj
dXJyZW50V29yZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlIHwgbG9ja2VkUXVldWVCaXQpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFsdWUg
PSBtX3dvcmQubG9hZCgpOworICAgICAgICAKKyAgICAvLyBBZnRlciB3ZSBhY3F1aXJlIHRoZSBx
dWV1ZSBsb2NrLCB0aGUgTXV0ZXggbXVzdCBzdGlsbCBiZSBoZWxkIGFuZCB0aGUgcXVldWUgbXVz
dCBiZQorICAgIC8vIG5vbi1lbXB0eS4gVGhlIHF1ZXVlIG11c3QgYmUgbm9uLWVtcHR5IHNpbmNl
IG9ubHkgdGhlIGxvY2tTbG93KCkgbWV0aG9kIGNvdWxkIGhhdmUgaGVsZCB0aGUKKyAgICAvLyBx
dWV1ZSBsb2NrIGFuZCBpZiBpdCBkaWQgdGhlbiBpdCBvbmx5IHJlbGVhc2VzIGl0IGFmdGVyIHB1
dHRpbmcgc29tZXRoaW5nIG9uIHRoZSBxdWV1ZS4KKyAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1
ZSAmIGlzSGVsZEJpdCk7CisgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBsb2NrZWRRdWV1
ZUJpdCk7CisgICAgVGhyZWFkRGF0YSogcXVldWVIZWFkID0gYml0d2lzZV9jYXN0PFRocmVhZERh
dGEqPihjdXJyZW50V29yZFZhbHVlICYgfm1hc2spOworICAgIEFTU0VSVChxdWV1ZUhlYWQpOwor
CisgICAgVGhyZWFkRGF0YSogbmV3UXVldWVIZWFkID0gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZTsK
KyAgICAvLyBFaXRoZXIgdGhpcyB3YXMgdGhlIG9ubHkgdGhyZWFkIG9uIHRoZSBxdWV1ZSwgaW4g
d2hpY2ggY2FzZSB3ZSBkZWxldGUgdGhlIHF1ZXVlLCBvciB0aGVyZQorICAgIC8vIGFyZSBzdGls
bCBtb3JlIHRocmVhZHMgb24gdGhlIHF1ZXVlLCBpbiB3aGljaCBjYXNlIHdlIGNyZWF0ZSBhIG5l
dyBxdWV1ZSBoZWFkLgorICAgIGlmIChuZXdRdWV1ZUhlYWQpCisgICAgICAgIG5ld1F1ZXVlSGVh
ZC0+cXVldWVUYWlsID0gcXVldWVIZWFkLT5xdWV1ZVRhaWw7CisKKyAgICAvLyBDaGFuZ2UgdGhl
IHF1ZXVlIGhlYWQsIHBvc3NpYmx5IHJlbW92aW5nIGl0IGlmIG5ld1F1ZXVlSGVhZCBpcyBudWxs
LiBUaGlzIGlzIGEgQ0FTIGxvb3AKKyAgICAvLyBvdXQgb2YgcGFyYW5vaWEuIEl0IGRvZXNuJ3Qg
aGF2ZSB0byBiZSBzaW5jZSB0aGUgc3RhdGUgb2YgdGhlIGxvY2sgY2Fubm90IGNoYW5nZSByaWdo
dCBub3cuCisgICAgLy8gV2Ugd291bGQgZ2V0IG5vIHBlcmZvcm1hbmNlIHdpbiBmcm9tIG1ha2lu
ZyB0aGlzIGFueXRoaW5nIGJ1dCBhIENBUyBsb29wLCBhbmQgaXQgd291bGQgbWFrZQorICAgIC8v
IGl0IGNvbmZ1c2luZyB0byBhZGQgbW9yZSBiaXRzIHRvIHRoZSBsb2NrLgorICAgIGZvciAoOzsp
IHsKKyAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisKKyAgICAgICAg
QVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0hlbGRCaXQpOworICAgICAgICBBU1NFUlQoY3Vy
cmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KTsKKyAgICAgICAgQVNTRVJUKChjdXJyZW50
V29yZFZhbHVlICYgfm1hc2spID09IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHF1ZXVlSGVhZCkp
OworCisgICAgICAgIHVpbnRwdHJfdCBuZXdXb3JkVmFsdWUgPSBjdXJyZW50V29yZFZhbHVlOwor
ICAgICAgICBuZXdXb3JkVmFsdWUgJj0gfmlzSGVsZEJpdDsgLy8gUmVsZWFzZSB0aGUgTXV0ZXgu
CisgICAgICAgIG5ld1dvcmRWYWx1ZSAmPSB+bG9ja2VkUXVldWVCaXQ7IC8vIFJlbGVhc2UgdGhl
IHF1ZXVlIGxvY2suCisgICAgICAgIG5ld1dvcmRWYWx1ZSAmPSBtYXNrOyAvLyBDbGVhciBvdXQg
dGhlIG9sZCBxdWV1ZSBoZWFkLgorICAgICAgICBuZXdXb3JkVmFsdWUgfD0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4obmV3UXVldWVIZWFkKTsgLy8gSW5zdGFsbCBuZXcgcXVldWUgaGVhZC4KKyAg
ICAgICAgICAgIAorICAgICAgICBpZiAobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVu
dFdvcmRWYWx1ZSwgbmV3V29yZFZhbHVlKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIC8vIE5vdyB0aGUgbG9jayBpcyBhdmFpbGFibGUgZm9yIGFjcXVpc2l0aW9uLiBCdXQgd2Ug
anVzdCBoYXZlIHRvIHdha2UgdXAgdGhlIG9sZCBxdWV1ZSBoZWFkLgorICAgIC8vIEFmdGVyIHRo
YXQsIHdlJ3JlIGRvbmUhCisKKyAgICBxdWV1ZUhlYWQtPm5leHRJblF1ZXVlID0gbnVsbHB0cjsK
KyAgICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbCA9IG51bGxwdHI7CisKKyAgICAvLyBXZSBkbyB0aGlz
IGNhcmVmdWxseSBiZWNhdXNlIHRoaXMgbWF5IHJ1biBlaXRoZXIgYmVmb3JlIG9yIGR1cmluZyB0
aGUgcGFya2luZ011dGV4IGNyaXRpY2FsCisgICAgLy8gc2VjdGlvbiBpbiBsb2NrU2xvdygpLgor
ICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIocXVldWVI
ZWFkLT5wYXJraW5nTXV0ZXgpOworICAgICAgICBxdWV1ZUhlYWQtPnNob3VsZFBhcmsgPSBmYWxz
ZTsKKyAgICAgICAgLy8gVXNlIG5vdGlmeV9hbGwoKSBvdXQgb2YgcGFyYW5vaWEuIEluIHJlYWxp
dHksIG9ubHkgdGhlIGJsb2NrZWQgdGhyZWFkIGlzIHdhaXRpbmcgb24KKyAgICAgICAgLy8gdGhp
cyBjb25kaXRpb24gdmFyaWFibGUuCisgICAgICAgIHF1ZXVlSGVhZC0+cGFya2luZ0NvbmRpdGlv
bi5ub3RpZnlfYWxsKCk7CisgICAgfQorCisgICAgLy8gVGhlIG9sZCBxdWV1ZSBoZWFkIGNhbiBu
b3cgY29udGVuZCBmb3IgdGhlIGxvY2sgYWdhaW4uIFdlJ3JlIGRvbmUhCit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NdXRleC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL011dGV4LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9N
dXRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX011dGV4X2gKKyNkZWZp
bmUgV1RGX011dGV4X2gKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3Rm
L0NvbXBpbGVyLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSBXVEY6Ok11dGV4IGlzIGEgZnVs
bHkgYWRhcHRpdmUgbXV0ZXggdGhhdCBnaXZlcyB5b3UgdGhlIGJlc3Qgb2YgU3BpbkxvY2sgYW5k
IHN0ZDo6bXV0ZXguIEZvcgorLy8gc21hbGwgY3JpdGljYWwgc2VjdGlvbnMgKHRoYXQgdGFrZSBu
YW5vc2Vjb25kcyksIGl0IHdpbGwgdXN1YWxseSBwZXJmb3JtIHdpdGhpbiAyeCBvZiBhIFNwaW5M
b2NrIGluCisvLyBib3RoIHRoZSBjb250ZW5kZWQgYW5kIHVuY29udGVuZGVkIGNhc2UuIFdoZW4g
dXNpbmcgYSBzdGQ6Om11dGV4LCBzdWNoIGNyaXRpY2FsIHNlY3Rpb25zIHRha2UgdXAgdG8KKy8v
IDEwMHggbG9uZ2VyIHRoYW4gTXV0ZXggaW4gdGhlIGNvbnRlbmRlZCBjYXNlLCBvciAzeCBsb25n
ZXIgdGhhbiBNdXRleCBpbiB0aGUgdW5jb250ZW5kZWQgY2FzZS4gRm9yCisvLyBsb25nZXIgY3Jp
dGljYWwgc2VjdGlvbnMgKHRoYXQgdGFrZSB0ZW5zIG9mIG1pY3Jvc2Vjb25kcyksIE11dGV4IHdp
bGwgcGVyZm9ybSBhcyB3ZWxsIGFzIGEKKy8vIHN0ZDo6bXV0ZXggYW5kIHNsaWdodGx5IGJldHRl
ciB0aGFuIGEgU3BpbkxvY2suIEJ1dCwgY3J1Y2lhbGx5LCBhIFNwaW5Mb2NrIHdpbGwgYnVybiB1
cCB0byA5MHggbW9yZQorLy8gdGltZSBpbiB0aGUga2VybmVsIGZvciBzdWNoIGNyaXRpY2FsIHNl
Y3Rpb25zIHRoYW4gZWl0aGVyIHN0ZDo6bXV0ZXggb3IgTXV0ZXguIEhlbmNlLCB1c2luZyBNdXRl
eAorLy8gd2lsbCBtYWtlIHRoZSBjb21tb24gY2FzZSBvZiBsb2NraW5nIHBlcmZvcm0gY2xvc2Ug
dG8gU3BpbkxvY2sgZm9yIGFueSBjcml0aWNhbCBzZWN0aW9uIHRoYXQgZG9lcworLy8gbW9yZSB0
aGFuIGEgZmV3IG5hbm9zZWNvbmRzIG9mIHdvcmsgd2hpbGUgYmVpbmcgYXMga2luZCB0byB0aGUg
c2NoZWR1bGVyIGZvciBsb25nZXIgY3JpdGljYWwKKy8vIHNlY3Rpb25zIGFzIGEgc3RkOjptdXRl
eC4KKy8vCisvLyBMaWtlIFNwaW5Mb2NrLCBMb2NrIHRha2VzIHZlcnkgbGl0dGxlIG1lbW9yeSAt
IGp1c3Qgc2l6ZW9mKHZvaWQqKSwgdGhvdWdoIHNlZSBhIGRldGFpbGVkIGNhdmVhdAorLy8gYmVs
b3cuCisvLworLy8gR2VuZXJhbGx5LCB5b3Ugc2hvdWxkIHVzZSBNdXRleCBpbnN0ZWFkIG9mIFNw
aW5Mb2NrIGJlY2F1c2Ugd2hpbGUgaXQgcGVuYWxpemVzIHlvdSBzbGlnaHRseSwgeW91CisvLyBt
YWtlIHVwIGZvciBpdCBieSBub3Qgd2FzdGluZyBDUFUgY3ljbGVzIGluIGNhc2Ugb2YgY29udGVu
dGlvbi4gWW91IHNob3VsZCB1c2UgTXV0ZXggaW5zdGVhZCBvZgorLy8gc3RkOjptdXRleCBldmVy
eXdoZXJlIHRoYXQgeW91IGRvbid0IG5lZWQgdG8gYWxzbyB1c2UgYSBzdGQ6OmNvbmRpdGlvbl92
YXJpYWJsZS4KKy8vCisvLyBUaGUgTG9jayBoYXMgdGhlIGZvbGxvd2luZyBuaWNlIHByb3BlcnRp
ZXM6CisvLworLy8gLSBVbmNvbnRlbmRlZCBmYXN0IHBhdGhzIGZvciBsb2NrIGFjcXVpc2l0aW9u
IGFuZCBsb2NrIHJlbGVhc2UgdGhhdCBhcmUgYWxtb3N0IGFzIGZhc3QgYXMgdGhlCisvLyAgIHVu
Y29udGVuZGVkIGZhc3QgcGF0aHMgb2YgYSBzcGlubG9jay4gVGhlIG9ubHkgb3ZlcmhlYWQgaXMg
dGhhdCB0aGUgc3BpbmxvY2sgd2lsbCBub3QgQ0FTIG9uCisvLyAgIHJlbGVhc2UsIHdoaWxlIE11
dGV4IHdpbGwgQ0FTLiBUaGlzIG92ZXJoZWFkICpjYW4qIHNsb3cgdGhpbmdzIGRvd24gZm9yIGV4
dHJlbWVseSBzbWFsbCBjcml0aWNhbAorLy8gICBzZWN0aW9ucyB0aGF0IGRvIGxpdHRsZSBvciBu
b3RoaW5nIC0gaXQgbWFrZXMgdGhlbSAyeCBzbG93ZXIgc2luY2UgaW4gdGhhdCBjYXNlLCBDQVMg
aXMgdGhlIG1vc3QKKy8vICAgZXhwZW5zaXZlIGluc3RydWN0aW9uIGFuZCBoYXZpbmcgdHdvIG9m
IHRoZW0gaXMgdHdpY2UgYXMgYmFkIGFzIGp1c3QgaGF2aW5nIG9uZS4gSG93ZXZlciwgdGhpcwor
Ly8gICBsb2NrIGltcGxlbWVudGF0aW9uIGlzIHN0aWxsIGFsbW9zdCAzeCBmYXN0ZXIgdGhhbiBh
IHBsYXRmb3JtIG11dGV4IGluIHRob3NlIGNhc2VzLiBJdCdzIHVubGlrZWx5CisvLyAgIHRoYXQg
eW91J2xsIGVuY291bnRlciBuby1vcCBjcml0aWNhbCBzZWN0aW9ucywgc28gdXN1YWxseSwgdGhp
cyBsb2NrIGlzIGJldHRlciB0aGFuIGEgc3BpbmxvY2suCisvLworLy8gLSBDb250ZW5kZWQgZmFz
dCBwYXRoIHRoYXQgYXR0ZW1wdHMgdG8gc3BpbiBhbmQgeWllbGQgZm9yIHNvbWUgbnVtYmVyIG9m
IHRpbWVzLiBGb3IgY3JpdGljYWwKKy8vICAgc2VjdGlvbnMgdGhhdCBhcmUgaGVsZCBvbmx5IGJy
aWVmbHksIHRoaXMgYWxsb3dzIE11dGV4IHRvIHBlcmZvcm0gYWxtb3N0IGFzIHdlbGwgYXMgYSBT
cGluTG9jay4KKy8vICAgU3BpbkxvY2sgY2FuIHN0aWxsIGJlIGFsbW9zdCAyeCBmYXN0ZXIgdGhh
biBNdXRleCBpZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBhIG5vLW9wLCBidXQgdGhpcworLy8g
ICBhZHZhbnRhZ2UgZGltaW5pc2hlcyBhcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBncm93cy4KKy8v
CisvLyAtIENvbnRlbmRlZCBzbG93IHBhdGggdGhhdCBlbnF1ZXVlcyB0aGUgY29udGVuZGluZyB0
aHJlYWQgYW5kIGNhdXNlcyBpdCB0byB3YWl0IG9uIGEgY29uZGl0aW9uCisvLyAgIHZhcmlhYmxl
IHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBUaGlzIGlzIHRoZSBvbmx5IGNhc2UgaW4gd2hp
Y2ggc3lzdGVtIG11dGV4ZXMgYW5kIGNvbmRpdGlvbgorLy8gICB2YXJpYWJsZXMgYXJlIHVzZWQu
IFRoaXMgY2FzZSBpcyByYXJlIGFuZCBzZWxmLWxpbWl0aW5nOiBpdCB3aWxsIG9ubHkgaGFwcGVu
IHdoZW4gYSBsb2NrIGlzIGhlbGQKKy8vICAgZm9yIGxvbmcgZW5vdWdoIHRoYXQgc3Bpbm5pbmcg
c29tZSBudW1iZXIgb2YgdGltZXMgZG9lc24ndCBhY3F1aXJlIGl0LiBUaGUgZmFjdCB0aGF0IE11
dGV4IGRvZXMKKy8vICAgdGhpcyBhcyBhIGZhbGxiYWNrIHdoZW4gc3Bpbm5pbmcgZm9yIHNvbWUg
bnVtYmVyIG9mIHRpbWVzIGZhaWxzIG1lYW5zIHRoYXQgaXQgd2lsbCBidXJuCisvLyAgIGRyYW1h
dGljYWxseSBmZXdlciBDUFUgY3ljbGVzIC0gZm9yIGV4YW1wbGUgd2l0aCAxMCB0aHJlYWRzIG9u
IGFuIDggbG9naWNhbCBDUFUgbWFjaGluZSBhY3F1aXJpbmcKKy8vICAgYSBjcml0aWNhbCBzZWN0
aW9uIHRoYXQgdGFrZXMgNTAgbWljcm9zZWNvbmRzLCB0aGUgV1RGIFNwaW5Mb2NrIHdpbGwgY2F1
c2UgOTB4IG1vcmUgdGltZSB0byBiZQorLy8gICBzcGVudCBpbiB0aGUga2VybmVsIHRoYW4gTXV0
ZXguCisvLworLy8gLSBWZXJ5IGxvdyBtZW1vcnkgdXNhZ2UuIEVhY2ggTXV0ZXggcmVxdWlyZXMg
b25seSBzaXplb2Yodm9pZCopIG1lbW9yeS4gV2hlbiB0aGUgY29udGVuZGVkIHNsb3cKKy8vICAg
cGF0aCBpcyBhY3RpdmF0ZWQsIE11dGV4IG9ubHkgcmVsaWVzIG9uIGVhY2ggdGhyZWFkIGhhdmlu
ZyBhIHByZWFsbG9jYXRlZCB0aHJlYWQtc3BlY2lmaWMgZGF0YQorLy8gICBzdHJ1Y3R1cmUgY2Fs
bGVkIFRocmVhZERhdGEgdGhhdCwgdG9nZXRoZXIgd2l0aCB0aGUgTXV0ZXggaXRzZWxmLCBpcyB1
c2VkIHRvIGJ1aWxkIHVwIGEgdGhyZWFkCisvLyAgIHF1ZXVlLiBTbywgdGhlIHRvdGFsIG1lbW9y
eSB1c2FnZSBvZiBhbGwgTXV0ZXhlcyBpcyBzdGlsbCBib3VuZGVkIGJ5OgorLy8KKy8vICAgICAg
IG51bWJlck9mTG9ja3MgKiBzaXplb2Yodm9pZCopICsgbnVtYmVyT2ZUaHJlYWRzICogc2l6ZW9m
KFRocmVhZERhdGEpCisvLworLy8gICBXaGVyZSBUaHJlYWREYXRhIGlzIGEgZGVjZW50bHkgbGFy
Z2UgZGF0YSBzdHJ1Y3R1cmUsIGJ1dCB3ZSB3aWxsIG9ubHkgZXZlciBoYXZlIG9uZSBwZXIgdGhy
ZWFkLAorLy8gICByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgTXV0ZXhlcyBpbiBtZW1vcnku
IEFub3RoZXIgd2F5IHRvIHZpZXcgdGhpcyBpcyB0aGF0IHRoZSB3b3JzdCBjYXNlCisvLyAgIG1l
bW9yeSB1c2FnZSBwZXIgTXV0ZXggaXM6CisvLworLy8gICAgICAgc2l6ZW9mKHZvaWQqKSArIG51
bWJlck9mVGhyZWFkcyAvIG51bWJlck9mTG9ja3MgKiBzaXplb2YoVGhyZWFkRGF0YSkKKy8vCisv
LyAgIFNvLCB1bmxlc3MgeW91IGhhdmUgYSBzbWFsbCBudW1iZXIgb2YgTXV0ZXhlcyAob3IsIGEg
bGFyZ2UgbnVtYmVyIG9mIHRocmVhZHMsIHdoaWNoIGlzIGZhciBsZXNzCisvLyAgIGxpa2VseSks
IHRoZSBtZW1vcnkgdXNhZ2UgcGVyLU11dGV4IGlzIHN0aWxsIGdvaW5nIHRvIGJlIHNvbWV3aGVy
ZSBhcm91bmQgc2l6ZW9mKHZvaWQqKS4KKy8vCisvLyAtIEJhcmdpbmcgZmFzdCBwYXRocy4gVGhl
IE11dGV4IGlzIHR1bmVkIGZvciBtYXhpbXVtIHRocm91Z2hwdXQgcmF0aGVyIHRoYW4gbWF4aW11
bSBmYWlybmVzcy4gSWYKKy8vICAgYSB0aHJlYWQgcmVsZWFzZXMgYSBNdXRleCB0aGF0IHdhcyBj
b250ZW5kZWQgYW5kIGhhZCBhIHF1ZXVlIG9mIHdhaXRpbmcgdGhyZWFkcywgdGhlbiBpdCB3aWxs
CisvLyAgIHdha2UgdXAgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLCBidXQgaXQgd2lsbCBhbHNvIG1h
cmsgdGhlIGxvY2sgYXMgYmVpbmcgYXZhaWxhYmxlLiBUaGlzIG1lYW5zIHRoYXQKKy8vICAgc29t
ZSBvdGhlciB0aHJlYWQgdGhhdCBpcyBqdXN0IG5vdyBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdGhl
IGxvY2sgbWF5IGdldCBpdCBiZWZvcmUgdGhlIHRocmVhZAorLy8gICB0aGF0IGdvdCB3b2tlbiB1
cC4gV2hlbiBhIHRocmVhZCBiYXJnZXMgaW50byB0aGUgbG9jaywgdGhlIHRocmVhZCB0aGF0IGdv
dCB3b2tlbiB1cCB3aWxsIHNpbXBseQorLy8gICBnbyBiYWNrIHRvIHRoZSBlbmQgb2YgdGhlIHF1
ZXVlLiBUaGUgYmFyZ2luZyBiZWhhdmlvciBlbmRzIHVwIGJlaW5nIHByb2JhYmlsaXN0aWMgb24g
bW9zdAorLy8gICBwbGF0Zm9ybXMgYW5kIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSB1bmZhaXIgdG8g
c29tZSB0aHJlYWQgYXQgc29tZSBtb21lbnQgaW4gdGltZSwgaXQgd2lsbCByYXJlbHkKKy8vICAg
aGF2ZSBhIGxvbmcgc3RyZWFrIG9mIHVuZmFpcm5lc3MgdG93YXJkcyBhbnkgcGFydGljdWxhciB0
aHJlYWQ6IGV2ZW50dWFsbHkgZWFjaCB0aHJlYWQgd2FpdGluZyBvbgorLy8gICB0aGUgbG9jayB3
aWxsIGdldCB0byBoYXZlIGEgdHVybiBzbyBsb25nIGFzIG5vIHRocmVhZCBqdXN0IGhvbGRzIHRo
ZSBsb2NrIGZvcmV2ZXIuIFRoYXQgc2FpZCwKKy8vICAgdGhlcmUgKmlzKiBhIGNoYW5jZSBvZiBw
YXRob2xvZ2llcyAtIHVzZXJzIG9mIE11dGV4IHNob3VsZCBub3QgZGVwZW5kIG9uIGZpcnN0LWlu
LCBmaXJzdC1vdXQgbG9jaworLy8gICBhY3F1aXNpdGlvbiBvcmRlciB1bmRlciBjb250ZW50aW9u
LiBUaGUgc2FtZSBjYXZlYXQgaXMgZ2VuZXJhbGx5IHRydWUgb2YgU3BpbkxvY2sgYW5kIHBsYXRm
b3JtCisvLyAgIG11dGV4ZXMgb24gc29tZSBwbGF0Zm9ybXMuCisKKy8vIFRoaXMgaXMgYSBzdHJ1
Y3Qgd2l0aG91dCBhIGNvbnN0cnVjdG9yIG9yIGRlc3RydWN0b3Igc28gdGhhdCBpdCBjYW4gYmUg
c3RhdGljYWxseSBpbml0aWFsaXplZC4KKy8vIFVzZSBNdXRleCBpbiBpbnN0YW5jZSB2YXJpYWJs
ZXMuCitzdHJ1Y3QgTXV0ZXhCYXNlIHsKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAg
aWYgKExJS0VMWShtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6
bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgeworICAgICAgICAgICAgLy8gTG9jayBhY3F1aXJlZCEK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGxvY2tTbG93KCk7Cisg
ICAgfQorCisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEl0J3Mg
dW5mb3J0dW5hdGUgdGhhdCB0aGlzIHJlcXVpcmVzIGEgQ0FTLiBBIGJldHRlciBhcHByb2FjaCB3
b3VsZCBiZSB0byBkbworICAgICAgICAvLyBzb21ldGhpbmcgbGlrZSBYQUREIG9uIHRoZSBmYXN0
IHBhdGgsIGJ1dCBtYWtpbmcgdGhhdCB3b3JrIHJpZ2h0IGlzIGEgbG90IGhhcmRlci4gWW91IGNv
dWxkCisgICAgICAgIC8vIGltYWdpbmUganVzdCBtYWtpbmcgdGhpcyBhIGJhcnJpZXJlZCBzdG9y
ZSwgYnV0IHRoZW4gd2UnZCBuZWVkIHNvbWUgb3RoZXIgbWFnaWMgdG8gd2FrZSB1cAorICAgICAg
ICAvLyBwYXJrZWQgdGhyZWFkcywgYW5kIHRoYXQgc291bmRzIHJlYWxseSBoYXJkLgorICAgICAg
ICAKKyAgICAgICAgaWYgKExJS0VMWShtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRC
aXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkgeworICAgICAgICAgICAgLy8gTG9j
ayByZWxlYXNlZCwgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHVubG9ja1Nsb3coKTsKKyAgICB9CisKKyAgICBib29sIGlz
SGVsZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93b3JkLmxvYWQoc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7CisgICAgfQorCisgICAgLy8gU3lub255bSBm
b3IgaXNIZWxkKCkgLSBwcm92aWRlZCBiZWNhdXNlIEJ5dGVTcGluTG9jayB1c2VzIGlzSGVsZCgp
IHdoaWxlIFNwaW5Mb2NrIHVzZXMKKyAgICAvLyBpc0xvY2tlZCgpLgorICAgIGJvb2wgaXNMb2Nr
ZWQoKSBjb25zdCB7IHJldHVybiBpc0hlbGQoKTsgfQorCisgICAgLy8gRXZlcnl0aGluZyBiZWxv
dyBoZXJlIHNob3VsZCBiZSBjb25zaWRlcmVkIHByaXZhdGUuIEl0J3Mgbm90IHByaXZhdGUgYmVj
YXVzZSBvZiBQT0QgcnVsZXMuCisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBpc0hlbGRCaXQg
PSAxOworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgbG9ja2VkUXVldWVCaXQgPSAyOworICAg
IHN0YXRpYyBjb25zdCB1aW50cHRyX3QgbWFzayA9IDM7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBsb2NrU2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Ns
b3coKTsKKworICAgIEF0b21pYzx1aW50cHRyX3Q+IG1fd29yZDsKK307CisKK2NsYXNzIE11dGV4
IDogcHVibGljIE11dGV4QmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTXV0ZXgpOwor
cHVibGljOgorICAgIE11dGV4KCkKKyAgICB7CisgICAgICAgIG1fd29yZC5zdG9yZSgwLCBzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICB9Cit9OworCit0eXBlZGVmIE11dGV4QmFzZSBT
dGF0aWNNdXRleDsKK3R5cGVkZWYgTG9ja2VyPE11dGV4QmFzZT4gTXV0ZXhIb2xkZXI7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlN0YXRpY011dGV4OwordXNpbmcgV1RGOjpN
dXRleDsKK3VzaW5nIFdURjo6TXV0ZXhIb2xkZXI7CisKKyNlbmRpZiAvLyBXVEZfTXV0ZXhfaAor
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TcGluTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1NwaW5Mb2NrLmgJKHJldmlzaW9uIDE4Nzk3MykKKysrIFNvdXJjZS9XVEYvd3RmL1Nw
aW5Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDE2IEBACiAKIG5hbWVzcGFjZSBX
VEYgewogCisvLyBTcGluTG9jayBpcyBhIHZlcnkgc2ltcGxlIGxvY2sgaW1wbGVtZW50YXRpb24g
dGhhdCBoYXMgZXh0cmVtZWx5IGZhc3QgbG9jay91bmxvY2sgZm9yIHZlcnkgc21hbGwKKy8vIHVu
Y29udGVuZGVkIGNyaXRpY2FsIHNlY3Rpb25zLiBIb3dldmVyLCBpdCB3aWxsIGV4aGliaXQgYmFk
IHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIHdoZW4gdGhlIGxvY2sKKy8vIGJlY29tZXMgY29udGVu
ZGVkOiB0aGUgdGhyZWFkIHRyeWluZyB0byBhY3F1aXJlIHRoZSBsb2NrIHdpbGwgc2ltcGx5IHdh
c3RlIENQVSBjeWNsZXMuCisvLworLy8gRm9yIG1vc3QgKGFsbD8pIGxvY2tpbmcgdXNlIGNhc2Vz
LCBpdCdzIGJldHRlciB0byB1c2UgTXV0ZXggKHNlZSB3dGYvTXV0ZXguaCkuIFRoYXQgdXNlcyBv
bmx5IGEgYml0CisvLyBtb3JlIG1lbW9yeSAoOCBieXRlcyBpbnN0ZWFkIG9mIDQgb24gNjQtYml0
KSwgYW5kIGlzIG9ubHkgYSBiaXQgc2xvd2VyIGluIHRoZSB1bmNvbnRlbmRlZCBjYXNlCisvLyAo
TG9jayBuZWVkcyBDQVMgdG8gdW5sb2NrLCB3aGlsZSBTcGluTG9jayBkb2Vzbid0KSwgYnV0IHdp
bGwgYnVybiBhIGxvdCBsZXNzIENQVSB0aW1lIC0gZm9yIDEwCisvLyB0aHJlYWRzIGFjcXVpcmlu
ZyBhIDUwIG1pY3Jvc2Vjb25kIGNyaXRpY2FsIHNlY3Rpb24sIExvY2sgd2lsbCB1c2UgdXAgdG8g
MTAweCBsZXNzIGtlcm5lbCBDUFUgdGltZQorLy8gdGhhbiBTcGluTG9jay4KKwogLy8gU3Bpbkxv
Y2tCYXNlIGlzIGEgc3RydWN0IHdpdGhvdXQgYW4gZXhwbGljaXRseSBkZWZpbmVkIGNvbnN0cnVj
dG9ycyBzbyB0aGF0CiAvLyBpdCBjYW4gYmUgaW5pdGlhbGl6ZWQgYXQgY29tcGlsZSB0aW1lLiBT
ZWUgU3RhdGljU3BpbkxvY2sgYmVsb3cuCiBzdHJ1Y3QgU3BpbkxvY2tCYXNlIHsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHJldmlzaW9uIDE4Nzk3MykKKysrIFNvdXJj
ZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQAogI2luY2x1ZGUgImR0b2EuaCIKIAogI2lmIFVTRShXRUJfVEhSRUFEKQotI2luY2x1
ZGUgIlNwaW5Mb2NrLmgiCisjaW5jbHVkZSAiTXV0ZXguaCIKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V1RGIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmNwcAkocmV2
aXNpb24gMTg3OTczKQorKysgU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPHd0Zi91bmljb2Rl
L1VURjguaD4KIAogI2lmIFVTRShXRUJfVEhSRUFEKQotI2luY2x1ZGUgIlNwaW5Mb2NrLmgiCisj
aW5jbHVkZSAiTXV0ZXguaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQyLDE4ICs0
MiwxOCBAQCB1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKIAogI2lmIFVTRShXRUJfVEhSRUFEKQog
Ci1jbGFzcyBBdG9taWNTdHJpbmdUYWJsZUxvY2tlciA6IHB1YmxpYyBTcGluTG9ja0hvbGRlciB7
CitjbGFzcyBBdG9taWNTdHJpbmdUYWJsZUxvY2tlciA6IHB1YmxpYyBNdXRleEhvbGRlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXRvbWljU3RyaW5nVGFibGVMb2NrZXIpOwogCi0gICAg
c3RhdGljIFN0YXRpY1NwaW5Mb2NrIHNfc3RyaW5nVGFibGVMb2NrOworICAgIHN0YXRpYyBTdGF0
aWNNdXRleCBzX3N0cmluZ1RhYmxlTG9jazsKIHB1YmxpYzoKICAgICBBdG9taWNTdHJpbmdUYWJs
ZUxvY2tlcigpCi0gICAgICAgIDogU3BpbkxvY2tIb2xkZXIoJnNfc3RyaW5nVGFibGVMb2NrKQor
ICAgICAgICA6IE11dGV4SG9sZGVyKCZzX3N0cmluZ1RhYmxlTG9jaykKICAgICB7CiAgICAgfQog
fTsKIAotU3RhdGljU3BpbkxvY2sgQXRvbWljU3RyaW5nVGFibGVMb2NrZXI6OnNfc3RyaW5nVGFi
bGVMb2NrOworU3RhdGljTXV0ZXggQXRvbWljU3RyaW5nVGFibGVMb2NrZXI6OnNfc3RyaW5nVGFi
bGVMb2NrOwogCiAjZWxzZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODc5ODUpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAor
MjAxNS0wOC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIExp
Z2h0d2VpZ2h0IGxvY2tzIHNob3VsZCBiZSBhZGFwdGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBhbGwgdXNlcyBvZiBTcGluTG9jayB3
aXRoIE11dGV4LiBBbHNvIHJlcGxhY2Ugb25lIHVzZSBvZiBCeXRlU3BpbkxvY2sgd2l0aCBNdXRl
eAorICAgICAgICBiZWNhdXNlIHRoZSBhdXRob3Igb2YgdGhhdCBjb2RlIChKZXIpIGNvbmZpcm1l
ZCB0aGF0IHRoZXJlIGlzbid0IHJlYWxseSBhbnkgc3BhY2UgYWR2YW50YWdlIHRvCisgICAgICAg
IHVzaW5nIGEgQnl0ZVNwaW5Mb2NrLgorICAgICAgICAKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJl
Y2F1c2Ugbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dl
YlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTV3JhcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjphZGRKU1dyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlSlNX
cmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUpTV3JhcHBlcklmUmV0YWluQ291bnRP
bmUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpzZXRDdXJyZW50RnJhbWVCb3VuZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpnZXRDdXJyZW50RnJhbWVCb3VuZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9pb3Mvd2FrL1dBS1dpbmRvdy5tbToKKyAgICAgICAgKC1bV0FLV2luZG93IHNldEV4cG9z
ZWRTY3JvbGxWaWV3UmVjdDpdKToKKyAgICAgICAgKC1bV0FLV2luZG93IGV4cG9zZWRTY3JvbGxW
aWV3UmVjdF0pOgorCiAyMDE1LTA4LTA1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBs
ZS5jb20+CiAKICAgICAgICAgRml4IGJ1aWxkLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDE4Nzk3MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBACiAjaW1wb3J0IDxydW50aW1lL0pTTG9jay5oPgogI2ltcG9y
dCA8cnVudGltZS9Db21wbGV0aW9uLmg+CiAjaW1wb3J0IDxydW50aW1lL0NvbXBsZXRpb24uaD4K
LSNpbXBvcnQgPHd0Zi9TcGluTG9jay5oPgorI2ltcG9ydCA8d3RmL011dGV4Lmg+CiAjaW1wb3J0
IDx3dGYvVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL05TTWFwVGFibGVTUEku
aD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNzIsMTIgKzcyLDEyIEBAIHVz
aW5nIEpTQzo6bWFrZVNvdXJjZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIE5TTWFw
VGFibGUqIEpTV3JhcHBlckNhY2hlOwotc3RhdGljIFN0YXRpY1NwaW5Mb2NrIHNwaW5Mb2NrOwor
c3RhdGljIFN0YXRpY011dGV4IGNhY2hlTG9jazsKIAogTlNPYmplY3QqIGdldEpTV3JhcHBlcihK
U09iamVjdCogaW1wbCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIFNwaW5M
b2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOworICAgIE11dGV4SG9sZGVyIGhvbGRlcigmY2Fj
aGVMb2NrKTsKIAogICAgIGlmICghSlNXcmFwcGVyQ2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7
CkBAIC04OCw3ICs4OCw3IEBAIE5TT2JqZWN0KiBnZXRKU1dyYXBwZXIoSlNPYmplY3QqIGltcGwp
CiB2b2lkIGFkZEpTV3JhcHBlcihOU09iamVjdCogd3JhcHBlciwgSlNPYmplY3QqIGltcGwpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIo
JnNwaW5Mb2NrKTsKKyAgICBNdXRleEhvbGRlciBob2xkZXIoJmNhY2hlTG9jayk7CiAKICAgICBp
ZiAoIUpTV3JhcHBlckNhY2hlKQogICAgICAgICBKU1dyYXBwZXJDYWNoZSA9IGNyZWF0ZVdyYXBw
ZXJDYWNoZSgpOwpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIGFkZEpTV3JhcHBlcihOU09iamVjdCog
d3JhcHBlciwgSlNPCiAKIHZvaWQgcmVtb3ZlSlNXcmFwcGVyKEpTT2JqZWN0KiBpbXBsKQogewot
ICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOworICAgIE11dGV4SG9sZGVyIGhv
bGRlcigmY2FjaGVMb2NrKTsKIAogICAgIGlmICghSlNXcmFwcGVyQ2FjaGUpCiAgICAgICAgIHJl
dHVybjsKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIHJlbW92ZUpTV3JhcHBlcihKU09iamVjdCog
aW1wbCkKIAogc3RhdGljIHZvaWQgcmVtb3ZlSlNXcmFwcGVySWZSZXRhaW5Db3VudE9uZShOU09i
amVjdCogd3JhcHBlciwgSlNPYmplY3QqIGltcGwpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaG9s
ZGVyKCZzcGluTG9jayk7CisgICAgTXV0ZXhIb2xkZXIgaG9sZGVyKCZjYWNoZUxvY2spOwogCiAg
ICAgaWYgKCFKU1dyYXBwZXJDYWNoZSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAJKHJldmlz
aW9uIDE4Nzk3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdC
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNyArMjAwLDcgQEAgQ0FSaW5nQnVmZmVy
OjpFcnJvciBDQVJpbmdCdWZmZXI6OnN0b3JlKAogCiB2b2lkIENBUmluZ0J1ZmZlcjo6c2V0Q3Vy
cmVudEZyYW1lQm91bmRzKHVpbnQ2NF90IHN0YXJ0VGltZSwgdWludDY0X3QgZW5kVGltZSkKIHsK
LSAgICBCeXRlU3BpbkxvY2tlciBsb2NrZXIobV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrKTsKKyAg
ICBNdXRleEhvbGRlciBsb2NrZXIobV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrKTsKICAgICB1aW50
MzJfdCBuZXh0UHRyID0gbV90aW1lQm91bmRzUXVldWVQdHIgKyAxOwogICAgIHVpbnQzMl90IGlu
ZGV4ID0gbmV4dFB0ciAmIGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWV1ZU1hc2s7CiAKQEAgLTIx
Miw3ICsyMTIsNyBAQCB2b2lkIENBUmluZ0J1ZmZlcjo6c2V0Q3VycmVudEZyYW1lQm91bmRzCiAK
IHZvaWQgQ0FSaW5nQnVmZmVyOjpnZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3QgJnN0YXJ0
VGltZSwgdWludDY0X3QgJmVuZFRpbWUpCiB7Ci0gICAgQnl0ZVNwaW5Mb2NrZXIgbG9ja2VyKG1f
Y3VycmVudEZyYW1lQm91bmRzTG9jayk7CisgICAgTXV0ZXhIb2xkZXIgbG9ja2VyKG1fY3VycmVu
dEZyYW1lQm91bmRzTG9jayk7CiAgICAgdWludDMyX3QgY3VyUHRyID0gbV90aW1lQm91bmRzUXVl
dWVQdHI7CiAgICAgdWludDMyX3QgaW5kZXggPSBjdXJQdHIgJiBrR2VuZXJhbFJpbmdUaW1lQm91
bmRzUXVldWVNYXNrOwogICAgIENBUmluZ0J1ZmZlcjo6VGltZUJvdW5kcyYgYm91bmRzID0gbV90
aW1lQm91bmRzUXVldWVbaW5kZXhdOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0NBUmluZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaAkocmV2aXNpb24gMTg3OTczKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1FRElBVE9P
TEJPWCkKIAogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYv
Qnl0ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL011dGV4Lmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiB0eXBlZGVmIHN0cnVjdCBBdWRpb0J1ZmZlckxpc3QgQXVkaW9CdWZmZXJMaXN0
OwpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgCiAgICAgVmVjdG9yPFRp
bWVCb3VuZHM+IG1fdGltZUJvdW5kc1F1ZXVlOwotICAgIEJ5dGVTcGluTG9jayBtX2N1cnJlbnRG
cmFtZUJvdW5kc0xvY2s7CisgICAgTXV0ZXggbV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrOwogICAg
IGludDMyX3QgbV90aW1lQm91bmRzUXVldWVQdHI7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3Mvd2FrL1dBS1dpbmRvdy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dBS1dpbmRvdy5tbQkocmV2aXNpb24gMTg3OTczKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbXBvcnQgIldLQ29udGVudE9ic2VydmF0aW9uLmgiCiAj
aW1wb3J0ICJXS1ZpZXdQcml2YXRlLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUu
aD4KLSNpbXBvcnQgPHd0Zi9TcGluTG9jay5oPgorI2ltcG9ydCA8d3RmL011dGV4Lmg+CiAKIFdF
QkNPUkVfRVhQT1JUIE5TU3RyaW5nICogY29uc3QgV0FLV2luZG93U2NyZWVuU2NhbGVEaWRDaGFu
Z2VOb3RpZmljYXRpb24gPSBAIldBS1dpbmRvd1NjcmVlblNjYWxlRGlkQ2hhbmdlTm90aWZpY2F0
aW9uIjsKIFdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICogY29uc3QgV0FLV2luZG93VmlzaWJpbGl0
eURpZENoYW5nZU5vdGlmaWNhdGlvbiA9IEAiV0FLV2luZG93VmlzaWJpbGl0eURpZENoYW5nZU5v
dGlmaWNhdGlvbiI7CkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyBXZWJFdmVudCAqY3VycmVudEV2
ZW50ID0gbmlsOwogc3RhdGljIGlkPE9yaWVudGF0aW9uUHJvdmlkZXI+IGdPcmllbnRhdGlvblBy
b3ZpZGVyOwogCiBAaW1wbGVtZW50YXRpb24gV0FLV2luZG93IHsKLSAgICBTcGluTG9jayBfZXhw
b3NlZFNjcm9sbFZpZXdSZWN0TG9jazsKKyAgICBNdXRleCBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0
TG9jazsKICAgICBDR1JlY3QgX2V4cG9zZWRTY3JvbGxWaWV3UmVjdDsKIH0KIApAQCAtMzU4LDE0
ICszNTgsMTQgQEAgLSAodm9pZClzZW5kTW91c2VNb3ZlRXZlbnQ6KFdlYkV2ZW50ICopYQogCiAt
ICh2b2lkKXNldEV4cG9zZWRTY3JvbGxWaWV3UmVjdDooQ0dSZWN0KWV4cG9zZWRTY3JvbGxWaWV3
UmVjdAogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmX2V4cG9zZWRTY3JvbGxWaWV3UmVj
dExvY2spOworICAgIE11dGV4SG9sZGVyIGxvY2tlcigmX2V4cG9zZWRTY3JvbGxWaWV3UmVjdExv
Y2spOwogICAgIF9leHBvc2VkU2Nyb2xsVmlld1JlY3QgPSBleHBvc2VkU2Nyb2xsVmlld1JlY3Q7
CiB9CiAKIC0gKENHUmVjdClleHBvc2VkU2Nyb2xsVmlld1JlY3QKIHsKICAgICB7Ci0gICAgICAg
IFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmX2V4cG9zZWRTY3JvbGxWaWV3UmVjdExvY2spOworICAg
ICAgICBNdXRleEhvbGRlciBsb2NrZXIoJl9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrKTsKICAg
ICAgICAgaWYgKCFDR1JlY3RJc051bGwoX2V4cG9zZWRTY3JvbGxWaWV3UmVjdCkpCiAgICAgICAg
ICAgICByZXR1cm4gX2V4cG9zZWRTY3JvbGxWaWV3UmVjdDsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODc5ODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxNS0wOC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIExpZ2h0d2VpZ2h0IGxvY2tzIHNob3VsZCBiZSBhZGFwdGl2
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTQ1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFj
ZSBhbGwgdXNlcyBvZiBTcGluTG9jayB3aXRoIE11dGV4LgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkV2ZW50RGlz
cGF0Y2hlcjo6Y2xlYXJRdWV1ZWRUb3VjaEV2ZW50c0ZvclBhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpFdmVudERpc3BhdGNoZXI6OmdldFF1ZXVlZFRvdWNoRXZlbnRzRm9yUGFnZSk6CisgICAgICAg
IChXZWJLaXQ6OkV2ZW50RGlzcGF0Y2hlcjo6dG91Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXQ6
OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hUb3VjaEV2ZW50cyk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlZpZXdVcGRh
dGVEaXNwYXRjaGVyOjp2aXNpYmxlQ29udGVudFJlY3RVcGRhdGUpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3VXBkYXRlRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5oOgor
CiAyMDE1LTA4LTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFdlYkluc3BlY3RvclByb3h5IHNob3VsZCBtYWtlIFdLV2ViVmlldyBmaXJzdCByZXNwb25kZXIK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVu
dERpc3BhdGNoZXIuY3BwCShyZXZpc2lvbiAxODc5NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcy
LDEzICsxNzIsMTMgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OndoZWVsRXZlbnQodWludDY0Xwog
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQogdm9pZCBFdmVudERpc3BhdGNoZXI6OmNsZWFy
UXVldWVkVG91Y2hFdmVudHNGb3JQYWdlKGNvbnN0IFdlYlBhZ2UmIHdlYlBhZ2UpCiB7Ci0gICAg
U3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7CisgICAgTXV0ZXhIb2xk
ZXIgbG9ja2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7CiAgICAgbV90b3VjaEV2ZW50cy5yZW1vdmUo
d2ViUGFnZS5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpnZXRRdWV1ZWRU
b3VjaEV2ZW50c0ZvclBhZ2UoY29uc3QgV2ViUGFnZSYgd2ViUGFnZSwgVG91Y2hFdmVudFF1ZXVl
JiBkZXN0aW5hdGlvblF1ZXVlKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90b3Vj
aEV2ZW50c0xvY2spOworICAgIE11dGV4SG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xvY2sp
OwogICAgIGRlc3RpbmF0aW9uUXVldWUgPSBtX3RvdWNoRXZlbnRzLnRha2Uod2ViUGFnZS5wYWdl
SUQoKSk7CiB9CiAKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6dG91
Y2hFdmVudCh1aW50NjRfCiB7CiAgICAgYm9vbCB1cGRhdGVMaXN0V2FzRW1wdHk7CiAgICAgewot
ICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKKyAgICAg
ICAgTXV0ZXhIb2xkZXIgbG9ja2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7CiAgICAgICAgIHVwZGF0
ZUxpc3RXYXNFbXB0eSA9IG1fdG91Y2hFdmVudHMuaXNFbXB0eSgpOwogICAgICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fdG91Y2hFdmVudHMuYWRkKHBhZ2VJRCwgVG91Y2hFdmVudFF1ZXVlKCkpOwog
ICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCkBAIC0yMTcsNyArMjE3LDcgQEAgdm9p
ZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoVG91Y2hFdmVudAogewogICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFRvdWNoRXZlbnRRdWV1ZT4gbG9jYWxDb3B5OwogICAgIHsKLSAgICAgICAgU3Bpbkxv
Y2tIb2xkZXIgbG9ja2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7CisgICAgICAgIE11dGV4SG9sZGVy
IGxvY2tlcigmbV90b3VjaEV2ZW50c0xvY2spOwogICAgICAgICBsb2NhbENvcHkuc3dhcChtX3Rv
dWNoRXZlbnRzKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9FdmVudERpc3BhdGNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmgJKHJldmlzaW9uIDE4Nzk3MykKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9TcGluTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9NdXRleC5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk3LDcg
Kzk3LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpX
aGVlbEV2ZW50RGVsdGFUcmFja2VyPiBtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRyYWNrZXI7CiAj
aWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgU3BpbkxvY2sgbV90b3VjaEV2ZW50c0xv
Y2s7CisgICAgTXV0ZXggbV90b3VjaEV2ZW50c0xvY2s7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwg
VG91Y2hFdmVudFF1ZXVlPiBtX3RvdWNoRXZlbnRzOwogI2VuZGlmCiB9OwpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURp
c3BhdGNoZXIuY3BwCShyZXZpc2lvbiAxODc5NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw3ICs1OCw3IEBAIHZvaWQgVmlld1VwZGF0ZURpc3BhdGNoZXI6OnZpc2libGVDb250ZW4KIHsK
ICAgICBib29sIHVwZGF0ZUxpc3RXYXNFbXB0eTsKICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9s
ZGVyIGxvY2tlcigmbV9kYXRhTXV0ZXgpOworICAgICAgICBNdXRleEhvbGRlciBsb2NrZXIoJm1f
ZGF0YU11dGV4KTsKICAgICAgICAgdXBkYXRlTGlzdFdhc0VtcHR5ID0gbV9sYXRlc3RVcGRhdGUu
aXNFbXB0eSgpOwogICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9sYXRlc3RVcGRhdGUuZmluZChw
YWdlSUQpOwogICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV9sYXRlc3RVcGRhdGUuZW5kKCkpCkBA
IC03OCw3ICs3OCw3IEBAIHZvaWQgVmlld1VwZGF0ZURpc3BhdGNoZXI6OmRpc3BhdGNoVmlzaWIK
IHsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBVcGRhdGVEYXRhPiB1cGRhdGU7CiAgICAgewotICAg
ICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fZGF0YU11dGV4KTsKKyAgICAgICAgTXV0ZXhI
b2xkZXIgbG9ja2VyKCZtX2RhdGFNdXRleCk7CiAgICAgICAgIHVwZGF0ZSA9IFdURjo6bW92ZSht
X2xhdGVzdFVwZGF0ZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuaAkocmV2aXNpb24g
MTg3OTczKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVE
aXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJW
aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5jbHVk
ZSA8d3RmL011dGV4Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC01Nyw3ICs1Nyw3IEBA
IHByaXZhdGU6CiAgICAgfTsKIAogICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7Ci0gICAgU3Bp
bkxvY2sgbV9kYXRhTXV0ZXg7CisgICAgTXV0ZXggbV9kYXRhTXV0ZXg7CiAgICAgSGFzaE1hcDx1
aW50NjRfdCwgVXBkYXRlRGF0YT4gbV9sYXRlc3RVcGRhdGU7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258385</attachid>
            <date>2015-08-06 12:43:34 -0700</date>
            <delta_ts>2015-08-06 14:51:26 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>76216</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDE1LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TGlnaHR3ZWlnaHQgbG9ja3Mgc2hvdWxkIGJlIGFkYXB0aXZlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1NDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoKKyAgICAg
ICAgKEpTQzo6Q29waWVkQmxvY2s6OndvcmtMaXN0TG9jayk6CisgICAgICAgICogaGVhcC9Db3Bp
ZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnNob3VsZFJlcG9y
dExpdmVCeXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMp
OgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3Bh
Y2U6OkNvcGllZEdlbmVyYXRpb246OkNvcGllZEdlbmVyYXRpb24pOgorICAgICAgICAqIGhlYXAv
Q29waWVkU3BhY2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xl
RXZhY3VhdGVkQmxvY2spOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmg6Cisg
ICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6Z2V0TmV4dEJsb2Nrc1RvQ29weSk6Cisg
ICAgICAgICogaGVhcC9MaXN0YWJsZUhhbmRsZXIuaDoKKyAgICAgICAgKEpTQzo6TGlzdGFibGVI
YW5kbGVyOjpMaXN0OjphZGRUaHJlYWRTYWZlKToKKyAgICAgICAgKEpTQzo6TGlzdGFibGVIYW5k
bGVyOjpMaXN0OjphZGROb3RUaHJlYWRTYWZlKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9y
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29weUxhdGVyKToKKyAgICAg
ICAgKiBydW50aW1lL1R5cGVQcm9maWxlckxvZy5oOgorCiAyMDE1LTA4LTA1ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtFUzZdIENsYXNzIHBhcnNlciBkb2Vz
IG5vdCBhbGxvdyBtZXRob2RzIG5hbWVkIHNldCBhbmQgZ2V0LgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotc3RhdGljIFN0YXRp
Y1NwaW5Mb2NrIGNyYXNoTG9jazsKK3N0YXRpYyBTdGF0aWNMb2NrIGNyYXNoTG9jazsKIAogdm9p
ZCBzdGFydENyYXNoaW5nKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2suaAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1
ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9E
b3VibHlMaW5rZWRMaXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5jbHVkZSA8
d3RmL0xvY2suaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU0LDggKzU0LDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGlkUHJvbW90ZSgpOwogCiAgICAgdW5zaWduZWQgbGl2ZUJ5dGVzKCk7Ci0g
ICAgYm9vbCBzaG91bGRSZXBvcnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBKU0NlbGwqIG93
bmVyKTsKLSAgICB2b2lkIHJlcG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpTQ2VsbCos
IENvcHlUb2tlbiwgdW5zaWduZWQpOworICAgIGJvb2wgc2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKExv
Y2tIb2xkZXImLCBKU0NlbGwqIG93bmVyKTsKKyAgICB2b2lkIHJlcG9ydExpdmVCeXRlcyhMb2Nr
SG9sZGVyJiwgSlNDZWxsKiwgQ29weVRva2VuLCB1bnNpZ25lZCk7CiAgICAgdm9pZCByZXBvcnRM
aXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkKTsKICAgICB2b2lkIGRpZFN1cnZpdmVHQygp
OwogICAgIHZvaWQgZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCk7CkBAIC04NSw3ICs4NSw3IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaGFzV29ya0xpc3QoKTsKICAgICBDb3B5V29ya0xpc3QmIHdv
cmtMaXN0KCk7Ci0gICAgU3BpbkxvY2smIHdvcmtMaXN0TG9jaygpIHsgcmV0dXJuIG1fd29ya0xp
c3RMb2NrOyB9CisgICAgTG9jayYgd29ya0xpc3RMb2NrKCkgeyByZXR1cm4gbV93b3JrTGlzdExv
Y2s7IH0KIAogcHJpdmF0ZToKICAgICBDb3BpZWRCbG9jayhzaXplX3QpOwpAQCAtOTgsNyArOTgs
NyBAQCBwcml2YXRlOgogCiAgICAgc2l6ZV90IG1fY2FwYWNpdHk7CiAKLSAgICBTcGluTG9jayBt
X3dvcmtMaXN0TG9jazsKKyAgICBMb2NrIG1fd29ya0xpc3RMb2NrOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxDb3B5V29ya0xpc3Q+IG1fd29ya0xpc3Q7CiAKICAgICBzaXplX3QgbV9yZW1haW5pbmc7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGlu
ZXMuaAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAgICAgCi1pbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6c2hvdWxkUmVwb3J0
TGl2ZUJ5dGVzKFNwaW5Mb2NrSG9sZGVyJiwgSlNDZWxsKiBvd25lcikKK2lubGluZSBib29sIENv
cGllZEJsb2NrOjpzaG91bGRSZXBvcnRMaXZlQnl0ZXMoTG9ja0hvbGRlciYsIEpTQ2VsbCogb3du
ZXIpCiB7CiAgICAgLy8gV2Ugd2FudCB0byBhZGQgdG8gbGl2ZSBieXRlcyBpZiB0aGUgb3duZXIg
aXNuJ3QgcGFydCBvZiB0aGUgcmVtZW1iZXJlZCBzZXQgb3IKICAgICAvLyBpZiB0aGlzIGJsb2Nr
IHdhcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBsYXN0IGN5Y2xlLiAKQEAgLTQzLDcgKzQzLDcgQEAg
aW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OnNob3VsZFJlcG9ydExpdgogICAgIHJldHVybiAhSGVh
cDo6aXNSZW1lbWJlcmVkKG93bmVyKSB8fCAhbV9pc09sZDsKIH0KIAotaW5saW5lIHZvaWQgQ29w
aWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpTQ2VsbCogb3duZXIs
IENvcHlUb2tlbiB0b2tlbiwgdW5zaWduZWQgYnl0ZXMpCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9j
azo6cmVwb3J0TGl2ZUJ5dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4g
dG9rZW4sIHVuc2lnbmVkIGJ5dGVzKQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICNpZm5k
ZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIENvcGll
ZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKENvcGllCiAKICAgICB7CiAgICAgICAgIC8vIEFsd2F5
cyBwdXQgdGhlIGJsb2NrIGludG8gdGhlIG9sZCBnZW4gYmVjYXVzZSBpdCdzIGJlaW5nIHByb21v
dGVkIQotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9jayk7CiAgICAgICAgIG1fb2xkR2Vu
LnRvU3BhY2UtPnB1c2goYmxvY2spOwogICAgICAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7CiAg
ICAgICAgIG1fb2xkR2VuLmJsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJs
b2NrKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJl
dmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQmxv
Y2suaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJp
bWl0aXZlcy5oPgogCkBAIC0xMTMsNyArMTEzLDcgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8
Q29waWVkQmxvY2sqPiBtX2Jsb2NrU2V0OwogCi0gICAgU3BpbkxvY2sgbV90b1NwYWNlTG9jazsK
KyAgICBMb2NrIG1fdG9TcGFjZUxvY2s7CiAKICAgICBzdHJ1Y3QgQ29waWVkR2VuZXJhdGlvbiB7
CiAgICAgICAgIENvcGllZEdlbmVyYXRpb24oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC05OCw3ICs5OCw3IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZh
Y3VhdGUKICAgICBBU1NFUlQoYmxvY2stPmNhbkJlUmVjeWNsZWQoKSk7CiAgICAgQVNTRVJUKCFi
bG9jay0+bV9pc1Bpbm5lZCk7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIo
Jm1fdG9TcGFjZUxvY2spOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9j
ayk7CiAgICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsKICAgICAgICAgaWYgKGNvbGxl
Y3Rpb25UeXBlID09IEVkZW5Db2xsZWN0aW9uKQogICAgICAgICAgICAgbV9uZXdHZW4uZnJvbVNw
YWNlLT5yZW1vdmUoYmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZEZpbmlzaE1h
cmtpbgogdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0Q29weWluZygpCiB7CiAgICAg
ewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fY29weUxvY2spOworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CiAgICAgICAgIGlmIChtX3ZtLT5oZWFwLm9w
ZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikgewogICAgICAgICAgICAgLy8g
UmVzZXQgdGhlIHZlY3RvciB0byBiZSBlbXB0eSwgYnV0IGRvbid0IHRocm93IGF3YXkgdGhlIGJh
Y2tpbmcgc3RvcmUuCiAgICAgICAgICAgICBtX2Jsb2Nrc1RvQ29weS5zaHJpbmsoMCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAko
cmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRT
aGFyZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCiAjaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6bXV0ZXggbV9vcGFxdWVS
b290c011dGV4OwogICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3BhcXVlUm9vdHM7CiAKLSAgICBTcGlu
TG9jayBtX2NvcHlMb2NrOworICAgIExvY2sgbV9jb3B5TG9jazsKICAgICBWZWN0b3I8Q29waWVk
QmxvY2sqPiBtX2Jsb2Nrc1RvQ29weTsKICAgICBzaXplX3QgbV9jb3B5SW5kZXg7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKQEAgLTExNSw3ICsx
MTUsNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmdldE5l
eHRCbG9ja3NUb0NvcHkoc2l6ZV90JiBzdGFydCwgc2l6ZV90JiBlbmQpCiB7Ci0gICAgU3Bpbkxv
Y2tIb2xkZXIgbG9ja2VyKCZtX2NvcHlMb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9j
b3B5TG9jayk7CiAgICAgc3RhcnQgPSBtX2NvcHlJbmRleDsKICAgICBlbmQgPSBzdGQ6Om1pbiht
X2Jsb2Nrc1RvQ29weS5zaXplKCksIG1fY29weUluZGV4ICsgc19ibG9ja0ZyYWdtZW50TGVuZ3Ro
KTsKICAgICBtX2NvcHlJbmRleCA9IGVuZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0xpc3RhYmxlSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0xpc3RhYmxlSGFuZGxlci5oCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9MaXN0YWJsZUhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NyArMjMsNyBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVz
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgdm9pZCBhZGRUaHJlYWRTYWZlKFQqIGhhbmRsZXIpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICAgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogICAgICAgICAgICAgYWRkTm90VGhyZWFkU2FmZSho
YW5kbGVyKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9maXJzdCA9IGhhbmRsZXI7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIFNwaW5Mb2NrIG1fbG9jazsKKyAgICAgICAgTG9jayBtX2xvY2s7CiAgICAgICAgIFQq
IG1fZmlyc3Q7CiAgICAgfTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hY2hpbmVTdGFja01hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTY4LDggKzU2OCw4IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhl
clRocmVhZFMKIHsKICAgICAvLyBQcmV2ZW50IHR3byBWTXMgZnJvbSBzdXNwZW5kaW5nIGVhY2gg
b3RoZXIncyB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUsCiAgICAgLy8gd2hpY2ggY2FuIGNhdXNl
IGRlYWRsb2NrOiA8cmRhcjovL3Byb2JsZW0vMjAzMDA4NDI+LgotICAgIHN0YXRpYyBTdGF0aWNT
cGluTG9jayBtdXRleDsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljU3BpbkxvY2s+IGxvY2so
bXV0ZXgpOworICAgIHN0YXRpYyBTdGF0aWNMb2NrIG11dGV4OworICAgIHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNMb2NrPiBsb2NrKG11dGV4KTsKIAogICAgICpzaXplID0gMDsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDE4ODAxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDcgQEAgaW5saW5lIHZvaWQgU2xv
dFZpc2l0b3I6OmNvcHlMYXRlcihKU0NlbAogCiAgICAgQVNTRVJUKGhlYXAoKS0+bV9zdG9yYWdl
U3BhY2UuY29udGFpbnMoYmxvY2spKTsKIAotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmYmxv
Y2stPndvcmtMaXN0TG9jaygpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmYmxvY2stPndvcmtM
aXN0TG9jaygpKTsKICAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVs
bENvbGxlY3Rpb24gfHwgYmxvY2stPnNob3VsZFJlcG9ydExpdmVCeXRlcyhsb2NrZXIsIG93bmVy
KSkgewogICAgICAgICBtX2J5dGVzQ29waWVkICs9IGJ5dGVzOwogICAgICAgICBibG9jay0+cmVw
b3J0TGl2ZUJ5dGVzKGxvY2tlciwgb3duZXIsIHRva2VuLCBieXRlcyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmNwcAkocmV2aXNpb24g
MTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJTb3VyY2VQcm92
aWRlci5oIgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TcGluTG9j
ay5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ0LDExICs0NCwxMSBAQCBTb3VyY2VQcm92aWRlcjo6
flNvdXJjZVByb3ZpZGVyKCkKIHsKIH0KIAotc3RhdGljIFN0YXRpY1NwaW5Mb2NrIHByb3ZpZGVy
SWRMb2NrOworc3RhdGljIFN0YXRpY0xvY2sgcHJvdmlkZXJJZExvY2s7CiAKIHZvaWQgU291cmNl
UHJvdmlkZXI6OmdldElEKCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrKCZwcm92aWRlcklk
TG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrKCZwcm92aWRlcklkTG9jayk7CiAgICAgaWYgKCFt
X2lkKSB7CiAgICAgICAgIHN0YXRpYyBpbnRwdHJfdCBuZXh0UHJvdmlkZXJJRCA9IDA7CiAgICAg
ICAgIG1faWQgPSArK25leHRQcm92aWRlcklEOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAkocmV2aXNpb24gMTg4MDE4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgUHJvZmlsZXIgewogCiBzdGF0aWMgc3RkOjphdG9taWM8aW50PiBkYXRhYmFzZUNvdW50ZXI7
CiAKLXN0YXRpYyBTdGF0aWNTcGluTG9jayByZWdpc3RyYXRpb25Mb2NrOworc3RhdGljIFN0YXRp
Y0xvY2sgcmVnaXN0cmF0aW9uTG9jazsKIHN0YXRpYyBzdGQ6OmF0b21pYzxpbnQ+IGRpZFJlZ2lz
dGVyQXRFeGl0Owogc3RhdGljIERhdGFiYXNlKiBmaXJzdERhdGFiYXNlOwogCkBAIC0xMzgsMTQg
KzEzOCwxNCBAQCB2b2lkIERhdGFiYXNlOjphZGREYXRhYmFzZVRvQXRFeGl0KCkKICAgICBpZiAo
KytkaWRSZWdpc3RlckF0RXhpdCA9PSAxKQogICAgICAgICBhdGV4aXQoYXRFeGl0Q2FsbGJhY2sp
OwogICAgIAotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKKyAg
ICBMb2NrSG9sZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKICAgICBtX25leHRSZWdpc3Rl
cmVkRGF0YWJhc2UgPSBmaXJzdERhdGFiYXNlOwogICAgIGZpcnN0RGF0YWJhc2UgPSB0aGlzOwog
fQogCiB2b2lkIERhdGFiYXNlOjpyZW1vdmVEYXRhYmFzZUZyb21BdEV4aXQoKQogewotICAgIFNw
aW5Mb2NrSG9sZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKKyAgICBMb2NrSG9sZGVyIGhv
bGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKICAgICBmb3IgKERhdGFiYXNlKiogY3VycmVudCA9ICZm
aXJzdERhdGFiYXNlOyAqY3VycmVudDsgY3VycmVudCA9ICYoKmN1cnJlbnQpLT5tX25leHRSZWdp
c3RlcmVkRGF0YWJhc2UpIHsKICAgICAgICAgaWYgKCpjdXJyZW50ICE9IHRoaXMpCiAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIERhdGFiYXNlOjpwZXJmb3Jt
QXRFeGl0U2F2ZSgpIGNvbnN0CiAKIERhdGFiYXNlKiBEYXRhYmFzZTo6cmVtb3ZlRmlyc3RBdEV4
aXREYXRhYmFzZSgpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVyKHJlZ2lzdHJhdGlvbkxv
Y2spOworICAgIExvY2tIb2xkZXIgaG9sZGVyKHJlZ2lzdHJhdGlvbkxvY2spOwogICAgIERhdGFi
YXNlKiByZXN1bHQgPSBmaXJzdERhdGFiYXNlOwogICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAg
Zmlyc3REYXRhYmFzZSA9IHJlc3VsdC0+bV9uZXh0UmVnaXN0ZXJlZERhdGFiYXNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJl
dmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiSlND
SlNWYWx1ZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxl
ci5oIgotI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvQnl0ZUxv
Y2suaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODgwMTgpCisrKyBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBACisyMDE1
LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgTGlnaHR3
ZWlnaHQgbG9ja3Mgc2hvdWxkIGJlIGFkYXB0aXZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBIGNvbW1vbiBpZGlvbSBpbiBXZWJLaXQgaXMgdG8gdXNl
IHNwaW5sb2Nrcy4gV2UgdXNlIHRoZW0gYmVjYXVzZSB0aGUgbG9jayBhY3F1aXNpdGlvbgorICAg
ICAgICBvdmVyaGVhZCBpcyBsb3dlciB0aGFuIHN5c3RlbSBsb2NrcyBhbmQgYmVjYXVzZSB0aGV5
IHRha2UgZHJhbWF0aWNhbGx5IGxlc3Mgc3BhY2UgdGhhbiBzeXN0ZW0KKyAgICAgICAgbG9ja3Mu
IFRoZSBzcGVlZCBhbmQgc3BhY2UgYWR2YW50YWdlcyBvZiBzcGlubG9ja3MgY2FuIGJlIGFzdG9u
aXNoaW5nOiBhbiB1bmNvbnRlbmRlZCBzcGlubG9jaworICAgICAgICBhY3F1aXJlIGlzIHVwIHRv
IDEweCBmYXN0ZXIgYW5kIHVuZGVyIG1pY3JvY29udGVudGlvbiAtIHNob3J0IGNyaXRpY2FsIHNl
Y3Rpb24gd2l0aCB0d28gb3IKKyAgICAgICAgbW9yZSB0aHJlYWRzIHRha2luZyB0dXJucyAtIHNw
aW5sb2NrcyBhcmUgdXAgdG8gMTAweCBmYXN0ZXIuIFNwaW5sb2NrcyB0YWtlIG9ubHkgMSBieXRl
IG9yIDQKKyAgICAgICAgYnl0ZXMgZGVwZW5kaW5nIG9uIHRoZSBmbGF2b3IsIHdoaWxlIHN5c3Rl
bSBsb2NrcyB0YWtlIDY0IGJ5dGVzIG9yIG1vcmUuIENsZWFybHksIFdlYktpdAorICAgICAgICBz
aG91bGQgY29udGludWUgdG8gYXZvaWQgc3lzdGVtIGxvY2tzIC0gdGhleSBhcmUganVzdCBmYXIg
dG9vIHNsb3cgYW5kIGZhciB0b28gYmlnLgorCisgICAgICAgIEJ1dCB0aGVyZSBpcyBhIHByb2Js
ZW0gd2l0aCB0aGlzIGlkaW9tLiBTeXN0ZW0gbG9jayBpbXBsZW1lbnRhdGlvbnMgd2lsbCBzbGVl
cCBhIHRocmVhZCB3aGVuCisgICAgICAgIGl0IGF0dGVtcHRzIHRvIGFjcXVpcmUgYSBsb2NrIHRo
YXQgaXMgaGVsZCwgd2hpbGUgc3BpbmxvY2tzIHdpbGwgY2F1c2UgdGhlIHRocmVhZCB0byBidXJu
IENQVS4KKyAgICAgICAgSW4gV2ViS2l0IHNwaW5sb2NrcywgdGhlIHRocmVhZCB3aWxsIHJlcGVh
dGVkbHkgY2FsbCBzY2hlZF95aWVsZCgpLiBUaGlzIGlzIGF3ZXNvbWUgZm9yCisgICAgICAgIG1p
Y3JvY29udGVudGlvbiwgYnV0IGF3ZnVsIHdoZW4gdGhlIGxvY2sgd2lsbCBub3QgYmUgcmVsZWFz
ZWQgZm9yIGEgd2hpbGUuIEluIGZhY3QsIHdoZW4KKyAgICAgICAgY3JpdGljYWwgc2VjdGlvbnMg
dGFrZSB0ZW5zIG9mIG1pY3Jvc2Vjb25kcyBvciBtb3JlLCB0aGUgQ1BVIHRpbWUgY29zdCBvZiBv
dXIgc3BpbmxvY2tzIGlzCisgICAgICAgIGFsbW9zdCAxMDB4IG1vcmUgdGhhbiB0aGUgQ1BVIHRp
bWUgY29zdCBvZiBhIHN5c3RlbSBsb2NrLiBUaGlzIGNhc2UgZG9lc24ndCBhcmlzZSB0b28KKyAg
ICAgICAgZnJlcXVlbnRseSBpbiBvdXIgY3VycmVudCB1c2VzIG9mIHNwaW5sb2NrcywgYnV0IHRo
YXQncyBwcm9iYWJseSBiZWNhdXNlIHJpZ2h0IG5vdyB0aGVyZSBhcmUKKyAgICAgICAgcGxhY2Vz
IHdoZXJlIHdlIG1ha2UgYSBjb25zY2lvdXMgZGVjaXNpb24gdG8gdXNlIHN5c3RlbSBsb2NrcyAt
IGV2ZW4gdGhvdWdoIHRoZXkgdXNlIG1vcmUKKyAgICAgICAgbWVtb3J5IGFuZCBhcmUgc2xvd2Vy
IC0gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHdhc3RlIENQVSBjeWNsZXMgd2hlbiBhIHRocmVh
ZCBoYXMgdG8gd2FpdCBhCisgICAgICAgIHdoaWxlIHRvIGFjcXVpcmUgdGhlIGxvY2suCisKKyAg
ICAgICAgVGhlIHNvbHV0aW9uIGlzIHRvIGp1c3QgaW1wbGVtZW50IGEgbW9kZXJuIGFkYXB0aXZl
IG11dGV4IGluIFdURi4gTHVja2lseSwgdGhpcyBpc24ndCBhIG5ldworICAgICAgICBjb25jZXB0
LiBUaGlzIHBhdGNoIGltcGxlbWVudHMgYSBtdXRleCB0aGF0IGlzIHJlbWluaXNjZW50IG9mIHRo
ZSBraW5kcyBvZiBsb3ctb3ZlcmhlYWQgbG9ja3MKKyAgICAgICAgdGhhdCBKVk1zIHVzZS4gVGhl
IGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBoZXJlIGlzIGluc3BpcmVkIGJ5IHNvbWUgb2YgdGhlIGlk
ZWFzIGZyb20gWzFdLiBUaGUKKyAgICAgICAgaWRlYSBpcyBzaW1wbGU6IHRoZSBmYXN0IHBhdGgg
aXMgYW4gaW5saW5lZCBDQVMgdG8gaW1tZWRpYXRlbHkgYWNxdWlyZSBhIGxvY2sgdGhhdCBpc24n
dCBoZWxkLAorICAgICAgICB0aGUgc2xvdyBwYXRoIHRyaWVzIHNvbWUgbnVtYmVyIG9mIHNwaW5z
IHRvIGFjcXVpcmUgdGhlIGxvY2ssIGFuZCBpZiB0aGF0IGZhaWxzLCB0aGUgdGhyZWFkIGlzCisg
ICAgICAgIHB1dCBvbiBhIHF1ZXVlIGFuZCBwdXQgdG8gc2xlZXAuIFRoZSBxdWV1ZSBpcyBtYWRl
IHVwIG9mIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHRocmVhZCBub2RlcyBhbmQKKyAgICAgICAgdGhl
IGxvY2sgaXRzZWxmIGlzIGEgdGFnZ2VkIHBvaW50ZXI6IGVpdGhlciBpdCBpcyBqdXN0IGJpdHMg
dGVsbGluZyB1cyB0aGUgY29tcGxldGUgbG9jayBzdGF0ZQorICAgICAgICAobm90IGhlbGQgb3Ig
aGVsZCkgb3IgaXQgaXMgYSBwb2ludGVyIHRvIHRoZSBoZWFkIG9mIGEgcXVldWUgb2YgdGhyZWFk
cyB3YWl0aW5nIHRvIGFjcXVpcmUgdGhlCisgICAgICAgIGxvY2suIFRoaXMgYXBwcm9hY2ggZ2l2
ZXMgV1RGOjpMb2NrIHRocmVlIGRpZmZlcmVudCBsZXZlbHMgb2YgYWRhcHRhdGlvbjogYW4gaW5s
aW5lZCBmYXN0IHBhdGgKKyAgICAgICAgaWYgdGhlIGxvY2sgaXMgbm90IGNvbnRlbmRlZCwgYSBz
aG9ydCBidXJzdCBvZiBzcGlubmluZyBmb3IgbWljcm9jb250ZW50aW9uLCBhbmQgYSBmdWxsLWJs
b3duCisgICAgICAgIHF1ZXVlIGZvciBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IGFyZSBoZWxkIGZv
ciBhIGxvbmcgdGltZS4KKworICAgICAgICBPbiBhIGxvY2tpbmcgbWljcm9iZW5jaG1hcmssIHRo
aXMgbmV3IExvY2sgZXhoaWJpdHMgdGhlIGZvbGxvd2luZyBwZXJmb3JtYW5jZQorICAgICAgICBj
aGFyYWN0ZXJpc3RpY3M6CisKKyAgICAgICAgLSBMb2NrK3VubG9jayBvbiBhbiB1bmNvbnRlbmRl
ZCBuby1vcCBjcml0aWNhbCBzZWN0aW9uOiAyeCBzbG93ZXIgdGhhbiBTcGluTG9jayBhbmQgM3gg
ZmFzdGVyCisgICAgICAgICAgdGhhbiBhIHN5c3RlbSBtdXRleC4KKworICAgICAgICAtIExvY2sr
dW5sb2NrIG9uIGEgY29udGVuZGVkIG5vLW9wIGNyaXRpY2FsIHNlY3Rpb246IDJ4IHNsb3dlciB0
aGFuIFNwaW5Mb2NrIGFuZCAxMDB4IGZhc3RlcgorICAgICAgICAgIHRoYW4gYSBzeXN0ZW0gbXV0
ZXguCisKKyAgICAgICAgLSBDUFUgdGltZSBzcGVudCBpbiBsb2NrKCkgb24gYSBsb2NrIGhlbGQg
Zm9yIGEgd2hpbGU6IHNhbWUgYXMgc3lzdGVtIG11dGV4LCA5MHggbGVzcyB0aGFuIGEKKyAgICAg
ICAgICBTcGluTG9jay4KKworICAgICAgICAtIE1lbW9yeSB1c2FnZTogc2l6ZW9mKHZvaWQqKSwg
c28gb24gNjQtYml0IGl0J3MgOHggbGVzcyB0aGFuIGEgc3lzdGVtIG11dGV4IGJ1dCAyeCB3b3Jz
ZSB0aGFuCisgICAgICAgICAgYSBTcGluTG9jay4KKworICAgICAgICBUaGlzIHBhdGNoIHJlcGxh
Y2VzIGFsbCB1c2VzIG9mIFNwaW5Mb2NrIHdpdGggTG9jaywgc2luY2Ugb3VyIGNyaXRpY2FsIHNl
Y3Rpb25zIGFyZSBub3QKKyAgICAgICAgbm8tb3BzIHNvIGlmIHlvdSBkbyBiYXNpY2FsbHkgYW55
dGhpbmcgaW4geW91ciBjcml0aWNhbCBzZWN0aW9uLCB0aGUgTG9jayBvdmVyaGVhZCB3aWxsIGJl
CisgICAgICAgIGludmlzaWJsZS4gQWxzbywgaW4gYWxsIHBsYWNlcyB3aGVyZSB3ZSB1c2VkIFNw
aW5Mb2NrLCB3ZSBjb3VsZCB0b2xlcmF0ZSA4IGJ5dGVzIG9mIG92ZXJoZWFkCisgICAgICAgIGlu
c3RlYWQgb2YgNC4gUGVyZm9ybWFuY2UgYmVuY2htYXJraW5nIHVzaW5nIEpTQyBtYWNyb2JlbmNo
bWFya3Mgc2hvd3Mgbm8gZGlmZmVyZW5jZSwgd2hpY2ggaXMKKyAgICAgICAgYXMgaXQgc2hvdWxk
IGJlOiB0aGUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZSBpcyB0byByZWR1Y2UgQ1BVIHRpbWUgd2Fz
dGVkLCBub3Qgd2FsbGNsb2NrIHRpbWUuCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lc24ndCByZXBs
YWNlIGFueSB1c2VzIG9mIEJ5dGVTcGluTG9jaywgc2luY2Ugd2UgZXhwZWN0IHRoYXQgdGhlIHNw
YWNlIGJlbmVmaXRzCisgICAgICAgIG9mIGhhdmluZyBhIGxvY2sgdGhhdCBqdXN0IHVzZXMgYSBi
eXRlIGFyZSBzdGlsbCBiZXR0ZXIgdGhhbiB0aGUgQ1BVIHdhc3RhZ2UgYmVuZWZpdHMgb2YKKyAg
ICAgICAgTG9jay4gQnV0LCB0aGlzIHdvcmsgd2lsbCBlbmFibGUgc29tZSBmdXR1cmUgd29yayB0
byBjcmVhdGUgbG9ja3MgdGhhdCB3aWxsIGZpdCBpbiBqdXN0IDEuNgorICAgICAgICBiaXRzOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NjY1LgorCisgICAgICAg
IFsxXSBodHRwOi8vd3d3LmZpbHBpemxvLmNvbS9wYXBlcnMvcGl6bG8tcHBwajIwMTEtZmFibGUu
cGRmCisKKyAgICAgICAgKiBXVEYudmN4cHJvai9XVEYudmN4cHJvajoKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiZW5jaG1hcmtzOiBBZGRlZC4K
KyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAg
KG1haW4pOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTG9j
ay5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6bG9ja1Nsb3cpOgorICAgICAg
ICAoV1RGOjpMb2NrQmFzZTo6dW5sb2NrU2xvdyk6CisgICAgICAgICogd3RmL0xvY2suaDogQWRk
ZWQuCisgICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0Jh
c2U6OnVubG9jayk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjppc0hlbGQpOgorICAgICAgICAo
V1RGOjpMb2NrOjpMb2NrKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxs
b2NhdG9ySGFuZGxlOjpzaHJpbmspOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxv
Y2F0ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToK
KyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlc2hGcmVlU3BhY2UpOgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUpOgorICAgICAgICAqIHd0
Zi9NZXRhQWxsb2NhdG9yLmg6CisgICAgICAgICogd3RmL1NwaW5Mb2NrLmg6CisgICAgICAgICog
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNw
cDoKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmcuY3BwOgorICAgICAgICAqIHd0Zi90
ZXh0L0F0b21pY1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmdUYWJs
ZUxvY2tlcjo6QXRvbWljU3RyaW5nVGFibGVMb2NrZXIpOgorCiAyMDE1LTA4LTA1ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbCBvdXQg
aHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTg3OTcyLgpJbmRleDogU291cmNlL1dU
Ri9XVEYudmN4cHJvai9XVEYudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi52
Y3hwcm9qL1dURi52Y3hwcm9qCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV1RGL1dURi52
Y3hwcm9qL1dURi52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAot77u/PD94
bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9InV0Zi04Ij8+CiA8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xz
VmVyc2lvbj0iMTIuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxv
cGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0
aW9ucyI+CiAgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnU3VmZml4fFdp
bjMyIj4KQEAgLTEwNiw2ICsxMDYsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3Rm
XGdsaWJcR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlx3dGZcR3JlZ29yaWFuRGF0ZVRpbWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cd3RmXEhhc2hUYWJsZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlx3dGZcTG9jay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcTWFp
blRocmVhZC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcTUQ1LmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxNZWRpYVRpbWUuY3BwIiAvPgpAQCAt
MjIzLDYgKzIyNCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcSXRlcmF0b3JB
ZGFwdG9ycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEl0ZXJhdG9yUmFu
Z2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxMaXN0SGFzaFNldC5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXExvY2suaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHd0ZlxMb2NrZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHd0ZlxNYWluVGhyZWFkLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZc
TWFsbG9jUHRyLmgiIC8+CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAKIAkJMEZEODFBQzUx
NTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0
Qml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMEZE
REJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1
NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBGRERCRkE4MTY2NkRGQTMw
MEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmggKi87IH07CisJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY4
MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLzsgfTsKKwkJMEZFMTY0NkIxQjZGRkM5NjAw
NDAwRTdDIC8qIExvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTE2NDY5MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmggKi87IH07CiAJCTBGRUQ2
N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlu
eVB0clNldC5oICovOyB9OwogCQkxNDAyMkY0MTE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxv
Yy5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQw
MjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLzsgfTsKIAkJMTQzRjYxMUYx
NTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUu
Y3BwICovOyB9OwpAQCAtMzIxLDYgKzMyMyw4IEBACiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3
MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZh
c3RCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2
REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3Ry
ZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3
QyAvKiBMb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkUxNjQ2OTFCNkZGQzk2MDA0MDBF
N0MgLyogTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBC
eXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJt
YWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CkBAIC03NzAsNiArNzc0LDggQEAKIAkJCQk3Q0REN0ZGOTE4NkQyQTU0MDA3
NDMzQ0QgLyogSXRlcmF0b3JSYW5nZS5oICovLAogCQkJCUE3MERBMDgzMTc5OUYwNEQwMDUyOUE5
QiAvKiBMaXN0RHVtcC5oICovLAogCQkJCUE4QTQ3MkMxMTUxQTgyNUEwMDQxMjNGRiAvKiBMaXN0
SGFzaFNldC5oICovLAorCQkJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAq
LywKKwkJCQkwRkUxNjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oICovLAogCQkJCUE4QTQ3
MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBMb2NrZXIuaCAqLywKIAkJCQkxNDQ3QUVDODE4RkNFNTk0
MDBCM0Q3RkYgLyogbWJtYWxsb2MuY3BwICovLAogCQkJCUE4QTQ3MkNBMTUxQTgyNUIwMDQxMjNG
RiAvKiBNRDUuY3BwICovLApAQCAtMTIwNiw2ICsxMjEyLDcgQEAKIAkJCQlBOEE0NzQ2QTE1MUE4
MjVCMDA0MTIzRkYgLyogVVRGOC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQjkxNTFBODI1
QjAwNDEyM0ZGIC8qIHV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ3RDE1MUE4MjVC
MDA0MTIzRkYgLyogVmFsdWVDaGVjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFMTY0NkIxQjZG
RkM5NjAwNDAwRTdDIC8qIExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDdFMTUxQTgy
NUIwMDQxMjNGRiAvKiBWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDdGMTUxQTgy
NUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUQ2N0I2
MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTEzMzcs
NiArMTM0NCw3IEBACiAJCQkJQThBNDczOUUxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQTAxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVNYXRo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0EyMTUxQTgyNUIwMDQxMjNGRiAvKiBEZWNp
bWFsTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3
QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0FFMTUxQTgyNUIwMDQxMjNG
RiAvKiBkaXktZnAuY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNCMDE1MUE4MjVCMDA0MTIz
RkYgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNCQTE1
MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9X
VEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RG
L2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU3Bpbkxv
Y2suaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFj
ZSB7CisKK3Vuc2lnbmVkIG51bVRocmVhZEdyb3VwczsKK3Vuc2lnbmVkIG51bVRocmVhZHNQZXJH
cm91cDsKK3Vuc2lnbmVkIHdvcmtQZXJDcml0aWNhbFNlY3Rpb247Cit1bnNpZ25lZCBudW1Ob2lz
ZVRocmVhZHM7Cit1bnNpZ25lZCBudW1JdGVyYXRpb25zOworICAgIAordm9pZCB1c2FnZSgpCit7
CisgICAgcHJpbnRmKCJVc2FnZTogTG9ja1NwZWVkVGVzdCBzcGlubG9ja3xsb2NrfG11dGV4fGFs
bCA8bnVtIHRocmVhZCBncm91cHM+IDxudW0gdGhyZWFkcyBwZXIgZ3JvdXA+IDx3b3JrIHBlciBj
cml0aWNhbCBzZWN0aW9uPiA8bnVtIG5vaXNlIHRocmVhZHM+IDxudW0gaXRlcmF0aW9ucz5cbiIp
OworICAgIGV4aXQoMSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlPgordm9pZCBy
dW5CZW5jaG1hcmsoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9j
a1R5cGVbXT4gbG9ja3MgPSBzdGQ6Om1ha2VfdW5pcXVlPExvY2tUeXBlW10+KG51bVRocmVhZEdy
b3Vwcyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPGRvdWJsZVtdPiB3b3JkcyA9IHN0ZDo6bWFrZV91
bmlxdWU8ZG91YmxlW10+KG51bVRocmVhZEdyb3Vwcyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRo
cmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRp
ZmllcltdPihudW1UaHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXApOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxUaHJlYWRJZGVudGlmaWVyW10+IG5vaXNlVGhyZWFkcyA9IHN0ZDo6bWFrZV91
bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1Ob2lzZVRocmVhZHMpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxkb3VibGVbXT4gbm9pc2VDb3VudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPGRvdWJsZVtd
PihudW1Ob2lzZVRocmVhZHMpOworCisgICAgdm9sYXRpbGUgYm9vbCBzaG91bGRTdG9wID0gZmFs
c2U7CisgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bU5vaXNlVGhyZWFkczsgdGhy
ZWFkSW5kZXgtLTspIHsKKyAgICAgICAgbm9pc2VDb3VudHNbdGhyZWFkSW5kZXhdID0gMDsKKyAg
ICAgICAgbm9pc2VUaHJlYWRzW3RocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAg
ICAgICJOb2lzZSBUaHJlYWQiLAorICAgICAgICAgICAgWyZzaG91bGRTdG9wLCAmbm9pc2VDb3Vu
dHMsIHRocmVhZEluZGV4XSAoKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCFzaG91bGRTdG9w
KQorICAgICAgICAgICAgICAgICAgICBub2lzZUNvdW50c1t0aHJlYWRJbmRleF0rKzsKKyAgICAg
ICAgICAgIH0pOworICAgIH0KKworICAgIGRvdWJsZSBiZWZvcmUgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWVNUygpOworICAgIAorICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRl
eCA9IG51bVRocmVhZEdyb3VwczsgdGhyZWFkR3JvdXBJbmRleC0tOykgeworICAgICAgICB3b3Jk
c1t0aHJlYWRHcm91cEluZGV4XSA9IDA7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJ
bmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKKyAgICAgICAgICAg
IHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZElu
ZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICAiQmVuY2htYXJrIHRocmVhZCIs
CisgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRzXSAoKSB7
CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUl0ZXJhdGlvbnM7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tzW3RocmVhZEdyb3VwSW5kZXhdLmxv
Y2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHdvcmtQZXJD
cml0aWNhbFNlY3Rpb247IGotLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jk
c1t0aHJlYWRHcm91cEluZGV4XSsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRz
W3RocmVhZEdyb3VwSW5kZXhdICo9IDEuMDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsb2Nrc1t0aHJlYWRHcm91cEluZGV4XS51bmxvY2soKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAq
IG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspCisgICAgICAgIHdhaXRGb3JUaHJl
YWRDb21wbGV0aW9uKHRocmVhZHNbdGhyZWFkSW5kZXhdKTsKKyAgICBzaG91bGRTdG9wID0gdHJ1
ZTsKKyAgICBkb3VibGUgbm9pc2VDb3VudCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJ
bmRleCA9IG51bU5vaXNlVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKKyAgICAgICAgd2FpdEZv
clRocmVhZENvbXBsZXRpb24obm9pc2VUaHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgIG5v
aXNlQ291bnQgKz0gbm9pc2VDb3VudHNbdGhyZWFkSW5kZXhdOworICAgIH0KKworICAgIGRvdWJs
ZSBhZnRlciA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisKKyAgICBwcmludGYo
IiVzOiAlLjNsZiBtcywgJS4wbGYgbm9pc2UuXG4iLCBuYW1lLCBhZnRlciAtIGJlZm9yZSwgbm9p
c2VDb3VudCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Cisg
ICAgCisgICAgaWYgKGFyZ2MgIT0gNworICAgICAgICB8fCBzc2NhbmYoYXJndlsyXSwgIiV1Iiwg
Jm51bVRocmVhZEdyb3VwcykgIT0gMQorICAgICAgICB8fCBzc2NhbmYoYXJndlszXSwgIiV1Iiwg
Jm51bVRocmVhZHNQZXJHcm91cCkgIT0gMQorICAgICAgICB8fCBzc2NhbmYoYXJndls0XSwgIiV1
IiwgJndvcmtQZXJDcml0aWNhbFNlY3Rpb24pICE9IDEKKyAgICAgICAgfHwgc3NjYW5mKGFyZ3Zb
NV0sICIldSIsICZudW1Ob2lzZVRocmVhZHMpICE9IDEKKyAgICAgICAgfHwgc3NjYW5mKGFyZ3Zb
Nl0sICIldSIsICZudW1JdGVyYXRpb25zKSAhPSAxKQorICAgICAgICB1c2FnZSgpOworCisgICAg
Ym9vbCBkaWRSdW4gPSBmYWxzZTsKKyAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAic3BpbmxvY2si
KSB8fCAhc3RyY21wKGFyZ3ZbMV0sICJhbGwiKSkgeworICAgICAgICBydW5CZW5jaG1hcms8U3Bp
bkxvY2s+KCJTcGluTG9jayIpOworICAgICAgICBkaWRSdW4gPSB0cnVlOworICAgIH0KKyAgICBp
ZiAoIXN0cmNtcChhcmd2WzFdLCAibG9jayIpIHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7
CisgICAgICAgIHJ1bkJlbmNobWFyazxMb2NrPigiV1RGIExvY2siKTsKKyAgICAgICAgZGlkUnVu
ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFzdHJjbXAoYXJndlsxXSwgIm11dGV4IikgfHwgIXN0
cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKKyAgICAgICAgcnVuQmVuY2htYXJrPE11dGV4PigiUGxh
dGZvcm0gTXV0ZXgiKTsKKyAgICAgICAgZGlkUnVuID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
IWRpZFJ1bikKKyAgICAgICAgdXNhZ2UoKTsKKworICAgIHJldHVybiAwOworfQpJbmRleDogU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIHNldChXVEZfSEVBREVS
UwogICAgIEl0ZXJhdG9yQWRhcHRvcnMuaAogICAgIEl0ZXJhdG9yUmFuZ2UuaAogICAgIExpc3RI
YXNoU2V0LmgKKyAgICBMb2NrLmgKICAgICBMb2NrZXIuaAogICAgIE1ENS5oCiAgICAgTWFpblRo
cmVhZC5oCkBAIC0xNTYsNiArMTU3LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgRnVuY3Rpb25E
aXNwYXRjaGVyLmNwcAogICAgIEdyZWdvcmlhbkRhdGVUaW1lLmNwcAogICAgIEhhc2hUYWJsZS5j
cHAKKyAgICBMb2NrLmNwcAogICAgIE1ENS5jcHAKICAgICBNYWluVGhyZWFkLmNwcAogICAgIE1l
ZGlhVGltZS5jcHAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYv
TG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkxvY2suaCIKKworI2luY2x1ZGUgIlRocmVhZFNwZWNpZmljLmgiCisjaW5jbHVkZSAi
VGhyZWFkaW5nUHJpbWl0aXZlcy5oIgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHRocmVh
ZD4KKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSB7CisKKy8vIFRoaXMgZGF0YSBzdHJ1
Y3R1cmUgc2VydmVzIHRocmVlIHB1cnBvc2VzOgorLy8KKy8vIDEpIEEgcGFya2luZyBtZWNoYW5p
c20gZm9yIHRocmVhZHMgdGhhdCBnbyB0byBzbGVlcC4gVGhhdCBpbnZvbHZlcyBqdXN0IGEgc3lz
dGVtIG11dGV4IGFuZAorLy8gICAgY29uZGl0aW9uIHZhcmlhYmxlLgorLy8KKy8vIDIpIEEgcXVl
dWUgbm9kZSBmb3Igd2hlbiBhIHRocmVhZCBpcyBvbiBzb21lIExvY2sncyBxdWV1ZS4KKy8vCisv
LyAzKSBUaGUgcXVldWUgaGVhZC4gVGhpcyBpcyBraW5kIG9mIGZ1bmt5LiBXaGVuIGEgdGhyZWFk
IGlzIHRoZSBoZWFkIG9mIGEgcXVldWUsIGl0IGFsc28gc2VydmVzIGFzCisvLyAgICB0aGUgYmFz
aWMgcXVldWUgYm9va2tlZXBpbmcgZGF0YSBzdHJ1Y3R1cmUuIFdoZW4gYSB0aHJlYWQgaXMgZGVx
dWV1ZWQsIHRoZSBuZXh0IHRocmVhZCBpbiB0aGUKKy8vICAgIHF1ZXVlIHRha2VzIG9uIHRoZSBx
dWV1ZSBoZWFkIGR1dGllcy4KK3N0cnVjdCBUaHJlYWREYXRhIHsKKyAgICAvLyBUaGUgcGFya2lu
ZyBtZWNoYW5pc20uCisgICAgYm9vbCBzaG91bGRQYXJrIHsgZmFsc2UgfTsKKyAgICBzdGQ6Om11
dGV4IHBhcmtpbmdMb2NrOworICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHBhcmtpbmdDb25k
aXRpb247CisKKyAgICAvLyBUaGUgcXVldWUgbm9kZS4KKyAgICBUaHJlYWREYXRhKiBuZXh0SW5R
dWV1ZSB7IG51bGxwdHIgfTsKKworICAgIC8vIFRoZSBxdWV1ZSBpdHNlbGYuCisgICAgVGhyZWFk
RGF0YSogcXVldWVUYWlsIHsgbnVsbHB0ciB9OworfTsKKworVGhyZWFkU3BlY2lmaWM8VGhyZWFk
RGF0YT4qIHRocmVhZERhdGE7CisKK1RocmVhZERhdGEqIG15VGhyZWFkRGF0YSgpCit7CisgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNl
KAorICAgICAgICBpbml0aWFsaXplT25jZSwKKyAgICAgICAgW117CisgICAgICAgICAgICB0aHJl
YWREYXRhID0gbmV3IFRocmVhZFNwZWNpZmljPFRocmVhZERhdGE+KCk7CisgICAgICAgIH0pOwor
CisgICAgcmV0dXJuICp0aHJlYWREYXRhOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
Kwordm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQoreworICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9
IDA7CisKKyAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBi
YXNlZCBvbiBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgorICAgIGNvbnN0IHVuc2lnbmVkIHNw
aW5MaW1pdCA9IDQwOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdWludHB0cl90IGN1
cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCEo
Y3VycmVudFdvcmRWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICYmIG1fd29yZC5jb21w
YXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBpc0hl
bGRCaXQpKSB7CisgICAgICAgICAgICAvLyBTdWNjZXNzISBXZSBhY3F1aXJlZCB0aGUgbG9jay4K
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIGlz
IG5vIHF1ZXVlIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0
byBzcGluIGFyb3VuZCBhZ2Fpbi4KKyAgICAgICAgaWYgKCEoY3VycmVudFdvcmRWYWx1ZSAmIH5t
YXNrKSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAgICAgICAgICAgIHNwaW5Db3VudCsr
OworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gTmVlZCB0byBwdXQgb3Vyc2VsdmVzIG9u
IHRoZSBxdWV1ZS4gQ3JlYXRlIHRoZSBxdWV1ZSBpZiBvbmUgZG9lcyBub3QgZXhpc3QuIFRoaXMg
cmVxdXJpZXMKKyAgICAgICAgLy8gb3duaW5nIHRoZSBxdWV1ZSBmb3IgYSBsaXR0bGUgYml0LiBU
aGUgbG9jayB0aGF0IGNvbnRyb2xzIHRoZSBxdWV1ZSBpcyBpdHNlbGYgYSBzcGlubG9jay4KKyAg
ICAgICAgLy8gQnV0IGJlZm9yZSB3ZSBhY3F1aXJlIHRoZSBxdWV1ZSBzcGlubG9jaywgd2UgbWFr
ZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIFRocmVhZERhdGEgZm9yIHRoaXMKKyAgICAgICAgLy8gdGhy
ZWFkLgorICAgICAgICBUaHJlYWREYXRhKiBtZSA9IG15VGhyZWFkRGF0YSgpOworICAgICAgICBB
U1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+bmV4dEluUXVldWUp
OworICAgICAgICBBU1NFUlQoIW1lLT5xdWV1ZVRhaWwpOworCisgICAgICAgIC8vIFJlbG9hZCB0
aGUgY3VycmVudCB3b3JkIHZhbHVlLCBzaW5jZSBzb21lIHRpbWUgbWF5IGhhdmUgcGFzc2VkLgor
ICAgICAgICBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKworICAgICAgICAvLyBX
ZSBwcm9jZWVkIG9ubHkgaWYgdGhlIHF1ZXVlIGxvY2sgaXMgbm90IGhlbGQsIHRoZSBMb2NrIGlz
IGhlbGQsIGFuZCB3ZSBzdWNjZWVkIGluCisgICAgICAgIC8vIGFjcXVpcmluZyB0aGUgcXVldWUg
bG9jay4KKyAgICAgICAgaWYgKChjdXJyZW50V29yZFZhbHVlICYgbG9ja2VkUXVldWVCaXQpCisg
ICAgICAgICAgICB8fCAhKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAg
ICB8fCAhbV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwgY3VycmVu
dFdvcmRWYWx1ZSB8IGxvY2tlZFF1ZXVlQml0KSkgeworICAgICAgICAgICAgc3RkOjp0aGlzX3Ro
cmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgbWUtPnNob3VsZFBhcmsgPSB0cnVlOworCisgICAgICAgIC8vIFdlIG93biB0aGUgcXVldWUu
IE5vYm9keSBjYW4gZW5xdWV1ZSBvciBkZXF1ZXVlIHVudGlsIHdlJ3JlIGRvbmUuIEFsc28sIGl0
J3Mgbm90IHBvc3NpYmxlCisgICAgICAgIC8vIHRvIHJlbGVhc2UgdGhlIExvY2sgd2hpbGUgd2Ug
aG9sZCB0aGUgcXVldWUgbG9jay4KKyAgICAgICAgVGhyZWFkRGF0YSogcXVldWVIZWFkID0gYml0
d2lzZV9jYXN0PFRocmVhZERhdGEqPihjdXJyZW50V29yZFZhbHVlICYgfm1hc2spOworICAgICAg
ICBpZiAocXVldWVIZWFkKSB7CisgICAgICAgICAgICAvLyBQdXQgdGhpcyB0aHJlYWQgYXQgdGhl
IGVuZCBvZiB0aGUgcXVldWUuCisgICAgICAgICAgICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbC0+bmV4
dEluUXVldWUgPSBtZTsKKyAgICAgICAgICAgIHF1ZXVlSGVhZC0+cXVldWVUYWlsID0gbWU7CisK
KyAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIHF1ZXVlIGxvY2suCisgICAgICAgICAgICBmb3Ig
KDs7KSB7CisgICAgICAgICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiB+bWFzayk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBsb2NrZWRRdWV1ZUJpdCk7Cisg
ICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhaygK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSwgY3VycmVudFdvcmRWYWx1ZSAm
IH5sb2NrZWRRdWV1ZUJpdCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBNYWtlIHRoaXMgdGhyZWFkIGJlIHRoZSBxdWV1ZS1oZWFkLgorICAgICAgICAg
ICAgcXVldWVIZWFkID0gbWU7CisgICAgICAgICAgICBtZS0+cXVldWVUYWlsID0gbWU7CisKKyAg
ICAgICAgICAgIC8vIFdlIG5lZWQgYSBDQVMgbG9vcCB0byBpbnN0YWxsIHRoZSBxdWV1ZSBoZWFk
LiBUaGlzIENBUyBsb29wIGlzIGp1c3QgdG8gcHJvdGVjdCBhZ2FpbnN0CisgICAgICAgICAgICAv
LyBpc0hlbGRCaXQgY2hhbmdpbmcuIFdlIGFsc28gcmVsZWFzZSB0aGUgcXVldWUgbG9jayBoZXJl
LgorICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIGN1cnJlbnRXb3JkVmFs
dWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAgICAgICAgIC8vIE5vYm9keSBjb3VsZCBoYXZl
IGluc3RhbGxlZCBhIHF1ZXVlIGJlY2F1c2Ugd2UgbG9ja2VkIHRoZSBxdWV1ZS4KKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIShjdXJyZW50V29yZFZhbHVlICYgfm1hc2spKTsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBhcmUgaG9sZGluZyB0aGUgcXVldWUgbG9jay4KKyAgICAgICAgICAgICAgICBB
U1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KTsKKyAgICAgICAgICAgICAg
ICAvLyBOb2JvZHkgY2FuIHJlbGVhc2UgdGhlIGxvY2sgd2hpbGUgd2UgaG9sZCB0aGUgcXVldWUg
bG9jay4KKyAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzSGVsZEJp
dCk7CisKKyAgICAgICAgICAgICAgICB1aW50cHRyX3QgbmV3V29yZFZhbHVlID0gY3VycmVudFdv
cmRWYWx1ZTsKKyAgICAgICAgICAgICAgICBuZXdXb3JkVmFsdWUgfD0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4ocXVldWVIZWFkKTsKKyAgICAgICAgICAgICAgICBuZXdXb3JkVmFsdWUgJj0gfmxv
Y2tlZFF1ZXVlQml0OworCisgICAgICAgICAgICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhjaGFu
Z2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIG5ld1dvcmRWYWx1ZSkpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQXQgdGhp
cyBwb2ludCBldmVyeW9uZSB3aG8gYWNxdWlyZXMgdGhlIHF1ZXVlIGxvY2sgd2lsbCBzZWUgbWUg
b24gdGhlIHF1ZXVlLCBhbmQgYW55b25lIHdobworICAgICAgICAvLyBhY3F1aXJlcyBtZSdzIGxv
Y2sgd2lsbCBzZWUgdGhhdCBtZSB3YW50cyB0byBwYXJrLiBOb3RlIHRoYXQgc2hvdWxkUGFyayBt
YXkgaGF2ZSBiZWVuCisgICAgICAgIC8vIGNsZWFyZWQgYXMgc29vbiBhcyB0aGUgcXVldWUgbG9j
ayB3YXMgcmVsZWFzZWQgYWJvdmUsIGJ1dCBpdCB3aWxsIGhhcHBlbiB3aGlsZSB0aGUKKyAgICAg
ICAgLy8gcmVsZWFzaW5nIHRocmVhZCBob2xkcyBtZSdzIHBhcmtpbmdMb2NrLgorCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1lLT5w
YXJraW5nTG9jayk7CisgICAgICAgICAgICB3aGlsZSAobWUtPnNob3VsZFBhcmspCisgICAgICAg
ICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChsb2NrZXIpOworICAgICAgICB9CisK
KyAgICAgICAgQVNTRVJUKCFtZS0+c2hvdWxkUGFyayk7CisgICAgICAgIEFTU0VSVCghbWUtPm5l
eHRJblF1ZXVlKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+cXVldWVUYWlsKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIE5vdyB3ZSBjYW4gbG9vcCBhcm91bmQgYW5kIHRyeSB0byBhY3F1aXJlIHRoZSBs
b2NrIGFnYWluLgorICAgIH0KK30KKwordm9pZCBMb2NrQmFzZTo6dW5sb2NrU2xvdygpCit7Cisg
ICAgLy8gSWYgdGhlIGZhc3QgcGF0aCBmYWlsZWQsIGl0IGNhbiBvbmx5IGJlIGJlY2F1c2Ugc29t
ZW9uZSBwdXQgYSB0aHJlYWQgb24gdGhlIHF1ZXVlIG9yIHRoZSBxdWV1ZQorICAgIC8vIGxvY2sg
aXMgaGVsZC4gSWYgdGhlIHF1ZXVlIGxvY2sgaXMgaGVsZCwgaXQgY2FuIG9ubHkgYmUgYmVjYXVz
ZSBzb21lb25lICp3aWxsKiBlbnF1ZXVlIGEgdGhyZWFkCisgICAgLy8gb250byB0aGUgcXVldWUu
CisKKyAgICAvLyBBY3F1aXJlIHRoZSBxdWV1ZSBsb2NrLgorICAgIGZvciAoOzspIHsKKyAgICAg
ICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOworCisgICAgICAg
IEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNIZWxkQml0KTsKKyAgICAgICAgCisgICAgICAg
IGlmIChjdXJyZW50V29yZFZhbHVlICYgbG9ja2VkUXVldWVCaXQpIHsKKyAgICAgICAgICAgIHN0
ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIElmIHRoZSBxdWV1ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGVuIHRoZXJl
IG11c3QgYmUgYW4gZW50cnkgb24gdGhlIHF1ZXVlLgorICAgICAgICBBU1NFUlQoY3VycmVudFdv
cmRWYWx1ZSAmIH5tYXNrKTsKKworICAgICAgICBpZiAobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdl
YWsoY3VycmVudFdvcmRWYWx1ZSwgY3VycmVudFdvcmRWYWx1ZSB8IGxvY2tlZFF1ZXVlQml0KSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHVpbnRwdHJfdCBjdXJyZW50V29yZFZh
bHVlID0gbV93b3JkLmxvYWQoKTsKKyAgICAgICAgCisgICAgLy8gQWZ0ZXIgd2UgYWNxdWlyZSB0
aGUgcXVldWUgbG9jaywgdGhlIExvY2sgbXVzdCBzdGlsbCBiZSBoZWxkIGFuZCB0aGUgcXVldWUg
bXVzdCBiZQorICAgIC8vIG5vbi1lbXB0eS4gVGhlIHF1ZXVlIG11c3QgYmUgbm9uLWVtcHR5IHNp
bmNlIG9ubHkgdGhlIGxvY2tTbG93KCkgbWV0aG9kIGNvdWxkIGhhdmUgaGVsZCB0aGUKKyAgICAv
LyBxdWV1ZSBsb2NrIGFuZCBpZiBpdCBkaWQgdGhlbiBpdCBvbmx5IHJlbGVhc2VzIGl0IGFmdGVy
IHB1dHRpbmcgc29tZXRoaW5nIG9uIHRoZSBxdWV1ZS4KKyAgICBBU1NFUlQoY3VycmVudFdvcmRW
YWx1ZSAmIGlzSGVsZEJpdCk7CisgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBsb2NrZWRR
dWV1ZUJpdCk7CisgICAgVGhyZWFkRGF0YSogcXVldWVIZWFkID0gYml0d2lzZV9jYXN0PFRocmVh
ZERhdGEqPihjdXJyZW50V29yZFZhbHVlICYgfm1hc2spOworICAgIEFTU0VSVChxdWV1ZUhlYWQp
OworCisgICAgVGhyZWFkRGF0YSogbmV3UXVldWVIZWFkID0gcXVldWVIZWFkLT5uZXh0SW5RdWV1
ZTsKKyAgICAvLyBFaXRoZXIgdGhpcyB3YXMgdGhlIG9ubHkgdGhyZWFkIG9uIHRoZSBxdWV1ZSwg
aW4gd2hpY2ggY2FzZSB3ZSBkZWxldGUgdGhlIHF1ZXVlLCBvciB0aGVyZQorICAgIC8vIGFyZSBz
dGlsbCBtb3JlIHRocmVhZHMgb24gdGhlIHF1ZXVlLCBpbiB3aGljaCBjYXNlIHdlIGNyZWF0ZSBh
IG5ldyBxdWV1ZSBoZWFkLgorICAgIGlmIChuZXdRdWV1ZUhlYWQpCisgICAgICAgIG5ld1F1ZXVl
SGVhZC0+cXVldWVUYWlsID0gcXVldWVIZWFkLT5xdWV1ZVRhaWw7CisKKyAgICAvLyBDaGFuZ2Ug
dGhlIHF1ZXVlIGhlYWQsIHBvc3NpYmx5IHJlbW92aW5nIGl0IGlmIG5ld1F1ZXVlSGVhZCBpcyBu
dWxsLiBUaGlzIGlzIGEgQ0FTIGxvb3AKKyAgICAvLyBvdXQgb2YgcGFyYW5vaWEuIEl0IGRvZXNu
J3QgaGF2ZSB0byBiZSBzaW5jZSB0aGUgc3RhdGUgb2YgdGhlIGxvY2sgY2Fubm90IGNoYW5nZSBy
aWdodCBub3cuCisgICAgLy8gV2Ugd291bGQgZ2V0IG5vIHBlcmZvcm1hbmNlIHdpbiBmcm9tIG1h
a2luZyB0aGlzIGFueXRoaW5nIGJ1dCBhIENBUyBsb29wLCBhbmQgaXQgd291bGQgbWFrZQorICAg
IC8vIGl0IGNvbmZ1c2luZyB0byBhZGQgbW9yZSBiaXRzIHRvIHRoZSBsb2NrLgorICAgIGZvciAo
OzspIHsKKyAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisKKyAgICAg
ICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0hlbGRCaXQpOworICAgICAgICBBU1NFUlQo
Y3VycmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KTsKKyAgICAgICAgQVNTRVJUKChjdXJy
ZW50V29yZFZhbHVlICYgfm1hc2spID09IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHF1ZXVlSGVh
ZCkpOworCisgICAgICAgIHVpbnRwdHJfdCBuZXdXb3JkVmFsdWUgPSBjdXJyZW50V29yZFZhbHVl
OworICAgICAgICBuZXdXb3JkVmFsdWUgJj0gfmlzSGVsZEJpdDsgLy8gUmVsZWFzZSB0aGUgTG9j
ay4KKyAgICAgICAgbmV3V29yZFZhbHVlICY9IH5sb2NrZWRRdWV1ZUJpdDsgLy8gUmVsZWFzZSB0
aGUgcXVldWUgbG9jay4KKyAgICAgICAgbmV3V29yZFZhbHVlICY9IG1hc2s7IC8vIENsZWFyIG91
dCB0aGUgb2xkIHF1ZXVlIGhlYWQuCisgICAgICAgIG5ld1dvcmRWYWx1ZSB8PSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihuZXdRdWV1ZUhlYWQpOyAvLyBJbnN0YWxsIG5ldyBxdWV1ZSBoZWFkLgor
ICAgICAgICAgICAgCisgICAgICAgIGlmIChtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJy
ZW50V29yZFZhbHVlLCBuZXdXb3JkVmFsdWUpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgLy8gTm93IHRoZSBsb2NrIGlzIGF2YWlsYWJsZSBmb3IgYWNxdWlzaXRpb24uIEJ1dCB3
ZSBqdXN0IGhhdmUgdG8gd2FrZSB1cCB0aGUgb2xkIHF1ZXVlIGhlYWQuCisgICAgLy8gQWZ0ZXIg
dGhhdCwgd2UncmUgZG9uZSEKKworICAgIHF1ZXVlSGVhZC0+bmV4dEluUXVldWUgPSBudWxscHRy
OworICAgIHF1ZXVlSGVhZC0+cXVldWVUYWlsID0gbnVsbHB0cjsKKworICAgIC8vIFdlIGRvIHRo
aXMgY2FyZWZ1bGx5IGJlY2F1c2UgdGhpcyBtYXkgcnVuIGVpdGhlciBiZWZvcmUgb3IgZHVyaW5n
IHRoZSBwYXJraW5nTG9jayBjcml0aWNhbAorICAgIC8vIHNlY3Rpb24gaW4gbG9ja1Nsb3coKS4K
KyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHF1ZXVl
SGVhZC0+cGFya2luZ0xvY2spOworICAgICAgICBxdWV1ZUhlYWQtPnNob3VsZFBhcmsgPSBmYWxz
ZTsKKyAgICAgICAgLy8gVXNlIG5vdGlmeV9hbGwoKSBvdXQgb2YgcGFyYW5vaWEuIEluIHJlYWxp
dHksIG9ubHkgdGhlIGJsb2NrZWQgdGhyZWFkIGlzIHdhaXRpbmcgb24KKyAgICAgICAgLy8gdGhp
cyBjb25kaXRpb24gdmFyaWFibGUuCisgICAgICAgIHF1ZXVlSGVhZC0+cGFya2luZ0NvbmRpdGlv
bi5ub3RpZnlfYWxsKCk7CisgICAgfQorCisgICAgLy8gVGhlIG9sZCBxdWV1ZSBoZWFkIGNhbiBu
b3cgY29udGVuZCBmb3IgdGhlIGxvY2sgYWdhaW4uIFdlJ3JlIGRvbmUhCit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvTG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX0xvY2tfaAorI2RlZmluZSBX
VEZfTG9ja19oCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Db21w
aWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgTG9jayBpcyBhIGZ1bGx5IGFkYXB0aXZl
IG11dGV4IHRoYXQgZ2l2ZXMgeW91IHRoZSBiZXN0IG9mIFNwaW5Mb2NrIGFuZCBNdXRleC4gRm9y
IHNtYWxsIGNyaXRpY2FsCisvLyBzZWN0aW9ucyAodGhhdCB0YWtlIG5hbm9zZWNvbmRzKSwgaXQg
d2lsbCB1c3VhbGx5IHBlcmZvcm0gd2l0aGluIDJ4IG9mIGEgU3BpbkxvY2sgaW4gYm90aCB0aGUK
Ky8vIGNvbnRlbmRlZCBhbmQgdW5jb250ZW5kZWQgY2FzZS4gV2hlbiB1c2luZyBhIE11dGV4LCBz
dWNoIGNyaXRpY2FsIHNlY3Rpb25zIHRha2UgdXAgdG8gMTAweCBsb25nZXIKKy8vIHRoYW4gTG9j
ayBpbiB0aGUgY29udGVuZGVkIGNhc2UsIG9yIDN4IGxvbmdlciB0aGFuIExvY2sgaW4gdGhlIHVu
Y29udGVuZGVkIGNhc2UuIEZvciBsb25nZXIKKy8vIGNyaXRpY2FsIHNlY3Rpb25zICh0aGF0IHRh
a2UgdGVucyBvZiBtaWNyb3NlY29uZHMpLCBpdCB3aWxsIHBlcmZvcm0gYXMgd2VsbCBhcyBhIE11
dGV4IGFuZCBzbGlnaHRseQorLy8gYmV0dGVyIHRoYW4gYSBTcGluTG9jay4gQnV0LCBjcnVjaWFs
bHksIGEgU3BpbkxvY2sgd2lsbCBidXJuIHVwIHRvIDkweCBtb3JlIHRpbWUgaW4gdGhlIGtlcm5l
bCBmb3IKKy8vIHN1Y2ggY3JpdGljYWwgc2VjdGlvbnMgdGhhbiBlaXRoZXIgTG9jayBvciBNdXRl
eC4gSGVuY2UsIHVzaW5nIExvY2sgd2lsbCBtYWtlIHRoZSBjb21tb24gY2FzZSBvZgorLy8gbG9j
a2luZyBwZXJmb3JtIGNsb3NlIHRvIFNwaW5Mb2NrIGZvciBhbnkgY3JpdGljYWwgc2VjdGlvbiB0
aGF0IGRvZXMgbW9yZSB0aGFuIGEgZmV3IG5hbm9zZWNvbmRzIG9mCisvLyB3b3JrIHdoaWxlIGJl
aW5nIGFzIGtpbmQgdG8gdGhlIHNjaGVkdWxlciBmb3IgbG9uZ2VyIGNyaXRpY2FsIHNlY3Rpb25z
IGFzIGEgTXV0ZXguCisvLworLy8gTGlrZSBTcGluTG9jaywgTG9jayB0YWtlcyB2ZXJ5IGxpdHRs
ZSBtZW1vcnkgLSBqdXN0IHNpemVvZih2b2lkKiksIHRob3VnaCBzZWUgYSBkZXRhaWxlZCBjYXZl
YXQKKy8vIGJlbG93LgorLy8KKy8vIEdlbmVyYWxseSwgeW91IHNob3VsZCB1c2UgTG9jayBpbnN0
ZWFkIG9mIFNwaW5Mb2NrIGJlY2F1c2Ugd2hpbGUgaXQgcGVuYWxpemVzIHlvdSBzbGlnaHRseSwg
eW91CisvLyBtYWtlIHVwIGZvciBpdCBieSBub3Qgd2FzdGluZyBDUFUgY3ljbGVzIGluIGNhc2Ug
b2YgY29udGVudGlvbi4KKy8vCisvLyBUaGUgTG9jayBoYXMgdGhlIGZvbGxvd2luZyBuaWNlIHBy
b3BlcnRpZXM6CisvLworLy8gLSBVbmNvbnRlbmRlZCBmYXN0IHBhdGhzIGZvciBsb2NrIGFjcXVp
c2l0aW9uIGFuZCBsb2NrIHJlbGVhc2UgdGhhdCBhcmUgYWxtb3N0IGFzIGZhc3QgYXMgdGhlCisv
LyAgIHVuY29udGVuZGVkIGZhc3QgcGF0aHMgb2YgYSBzcGlubG9jay4gVGhlIG9ubHkgb3Zlcmhl
YWQgaXMgdGhhdCB0aGUgc3BpbmxvY2sgd2lsbCBub3QgQ0FTIG9uCisvLyAgIHJlbGVhc2UsIHdo
aWxlIExvY2sgd2lsbCBDQVMuIFRoaXMgb3ZlcmhlYWQgKmNhbiogc2xvdyB0aGluZ3MgZG93biBm
b3IgZXh0cmVtZWx5IHNtYWxsIGNyaXRpY2FsCisvLyAgIHNlY3Rpb25zIHRoYXQgZG8gbGl0dGxl
IG9yIG5vdGhpbmcgLSBpdCBtYWtlcyB0aGVtIDJ4IHNsb3dlciBzaW5jZSBpbiB0aGF0IGNhc2Us
IENBUyBpcyB0aGUgbW9zdAorLy8gICBleHBlbnNpdmUgaW5zdHJ1Y3Rpb24gYW5kIGhhdmluZyB0
d28gb2YgdGhlbSBpcyB0d2ljZSBhcyBiYWQgYXMganVzdCBoYXZpbmcgb25lLiBIb3dldmVyLCB0
aGlzCisvLyAgIGxvY2sgaW1wbGVtZW50YXRpb24gaXMgc3RpbGwgYWxtb3N0IDN4IGZhc3RlciB0
aGFuIGEgcGxhdGZvcm0gbXV0ZXggaW4gdGhvc2UgY2FzZXMuIEl0J3MgdW5saWtlbHkKKy8vICAg
dGhhdCB5b3UnbGwgZW5jb3VudGVyIG5vLW9wIGNyaXRpY2FsIHNlY3Rpb25zLCBzbyB1c3VhbGx5
LCB0aGlzIGxvY2sgaXMgYmV0dGVyIHRoYW4gYSBzcGlubG9jay4KKy8vCisvLyAtIENvbnRlbmRl
ZCBmYXN0IHBhdGggdGhhdCBhdHRlbXB0cyB0byBzcGluIGFuZCB5aWVsZCBmb3Igc29tZSBudW1i
ZXIgb2YgdGltZXMuIEZvciBjcml0aWNhbAorLy8gICBzZWN0aW9ucyB0aGF0IGFyZSBoZWxkIG9u
bHkgYnJpZWZseSwgdGhpcyBhbGxvd3MgTG9jayB0byBwZXJmb3JtIGFsbW9zdCBhcyB3ZWxsIGFz
IGEgU3BpbkxvY2suCisvLyAgIFNwaW5Mb2NrIGNhbiBzdGlsbCBiZSBhbG1vc3QgMnggZmFzdGVy
IHRoYW4gTG9jayBpZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBhIG5vLW9wLCBidXQgdGhpcwor
Ly8gICBhZHZhbnRhZ2UgZGltaW5pc2hlcyBhcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBncm93cy4K
Ky8vCisvLyAtIENvbnRlbmRlZCBzbG93IHBhdGggdGhhdCBlbnF1ZXVlcyB0aGUgY29udGVuZGlu
ZyB0aHJlYWQgYW5kIGNhdXNlcyBpdCB0byB3YWl0IG9uIGEgY29uZGl0aW9uCisvLyAgIHZhcmlh
YmxlIHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBUaGlzIGlzIHRoZSBvbmx5IGNhc2UgaW4g
d2hpY2ggc3lzdGVtIG11dGV4ZXMgYW5kIGNvbmRpdGlvbgorLy8gICB2YXJpYWJsZXMgYXJlIHVz
ZWQuIFRoaXMgY2FzZSBpcyByYXJlIGFuZCBzZWxmLWxpbWl0aW5nOiBpdCB3aWxsIG9ubHkgaGFw
cGVuIHdoZW4gYSBsb2NrIGlzIGhlbGQKKy8vICAgZm9yIGxvbmcgZW5vdWdoIHRoYXQgc3Bpbm5p
bmcgc29tZSBudW1iZXIgb2YgdGltZXMgZG9lc24ndCBhY3F1aXJlIGl0LiBUaGUgZmFjdCB0aGF0
IExvY2sgZG9lcworLy8gICB0aGlzIGFzIGEgZmFsbGJhY2sgd2hlbiBzcGlubmluZyBmb3Igc29t
ZSBudW1iZXIgb2YgdGltZXMgZmFpbHMgbWVhbnMgdGhhdCBpdCB3aWxsIGJ1cm4KKy8vICAgZHJh
bWF0aWNhbGx5IGZld2VyIENQVSBjeWNsZXMgLSBmb3IgZXhhbXBsZSB3aXRoIDEwIHRocmVhZHMg
b24gYW4gOCBsb2dpY2FsIENQVSBtYWNoaW5lIGFjcXVpcmluZworLy8gICBhIGNyaXRpY2FsIHNl
Y3Rpb24gdGhhdCB0YWtlcyA1MCBtaWNyb3NlY29uZHMsIHRoZSBXVEYgU3BpbkxvY2sgd2lsbCBj
YXVzZSA5MHggbW9yZSB0aW1lIHRvIGJlCisvLyAgIHNwZW50IGluIHRoZSBrZXJuZWwgdGhhbiBM
b2NrLgorLy8KKy8vIC0gVmVyeSBsb3cgbWVtb3J5IHVzYWdlLiBFYWNoIExvY2sgcmVxdWlyZXMg
b25seSBzaXplb2Yodm9pZCopIG1lbW9yeS4gV2hlbiB0aGUgY29udGVuZGVkIHNsb3cKKy8vICAg
cGF0aCBpcyBhY3RpdmF0ZWQsIExvY2sgb25seSByZWxpZXMgb24gZWFjaCB0aHJlYWQgaGF2aW5n
IGEgcHJlYWxsb2NhdGVkIHRocmVhZC1zcGVjaWZpYyBkYXRhCisvLyAgIHN0cnVjdHVyZSBjYWxs
ZWQgVGhyZWFkRGF0YSB0aGF0LCB0b2dldGhlciB3aXRoIHRoZSBMb2NrIGl0c2VsZiwgaXMgdXNl
ZCB0byBidWlsZCB1cCBhIHRocmVhZAorLy8gICBxdWV1ZS4gU28sIHRoZSB0b3RhbCBtZW1vcnkg
dXNhZ2Ugb2YgYWxsIExvY2tzIGlzIHN0aWxsIGJvdW5kZWQgYnk6CisvLworLy8gICAgICAgbnVt
YmVyT2ZMb2NrcyAqIHNpemVvZih2b2lkKikgKyBudW1iZXJPZlRocmVhZHMgKiBzaXplb2YoVGhy
ZWFkRGF0YSkKKy8vCisvLyAgIFdoZXJlIFRocmVhZERhdGEgaXMgYSBkZWNlbnRseSBsYXJnZSBk
YXRhIHN0cnVjdHVyZSwgYnV0IHdlIHdpbGwgb25seSBldmVyIGhhdmUgb25lIHBlciB0aHJlYWQs
CisvLyAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBMb2NrcyBpbiBtZW1vcnkuIEFub3Ro
ZXIgd2F5IHRvIHZpZXcgdGhpcyBpcyB0aGF0IHRoZSB3b3JzdCBjYXNlCisvLyAgIG1lbW9yeSB1
c2FnZSBwZXIgTG9jayBpczoKKy8vCisvLyAgICAgICBzaXplb2Yodm9pZCopICsgbnVtYmVyT2ZU
aHJlYWRzIC8gbnVtYmVyT2ZMb2NrcyAqIHNpemVvZihUaHJlYWREYXRhKQorLy8KKy8vICAgU28s
IHVubGVzcyB5b3UgaGF2ZSBhIHNtYWxsIG51bWJlciBvZiBMb2NrcyAob3IsIGEgbGFyZ2UgbnVt
YmVyIG9mIHRocmVhZHMsIHdoaWNoIGlzIGZhciBsZXNzCisvLyAgIGxpa2VseSksIHRoZSBtZW1v
cnkgdXNhZ2UgcGVyLUxvY2sgaXMgc3RpbGwgZ29pbmcgdG8gYmUgc29tZXdoZXJlIGFyb3VuZCBz
aXplb2Yodm9pZCopLgorLy8KKy8vIC0gQmFyZ2luZyBmYXN0IHBhdGhzLiBUaGUgTG9jayBpcyB0
dW5lZCBmb3IgbWF4aW11bSB0aHJvdWdocHV0IHJhdGhlciB0aGFuIG1heGltdW0gZmFpcm5lc3Mu
IElmCisvLyAgIGEgdGhyZWFkIHJlbGVhc2VzIGEgTG9jayB0aGF0IHdhcyBjb250ZW5kZWQgYW5k
IGhhZCBhIHF1ZXVlIG9mIHdhaXRpbmcgdGhyZWFkcywgdGhlbiBpdCB3aWxsCisvLyAgIHdha2Ug
dXAgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLCBidXQgaXQgd2lsbCBhbHNvIG1hcmsgdGhlIGxvY2sg
YXMgYmVpbmcgYXZhaWxhYmxlLiBUaGlzIG1lYW5zIHRoYXQKKy8vICAgc29tZSBvdGhlciB0aHJl
YWQgdGhhdCBpcyBqdXN0IG5vdyBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdGhlIGxvY2sgbWF5IGdl
dCBpdCBiZWZvcmUgdGhlIHRocmVhZAorLy8gICB0aGF0IGdvdCB3b2tlbiB1cC4gV2hlbiBhIHRo
cmVhZCBiYXJnZXMgaW50byB0aGUgbG9jaywgdGhlIHRocmVhZCB0aGF0IGdvdCB3b2tlbiB1cCB3
aWxsIHNpbXBseQorLy8gICBnbyBiYWNrIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLiBUaGUgYmFy
Z2luZyBiZWhhdmlvciBlbmRzIHVwIGJlaW5nIHByb2JhYmlsaXN0aWMgb24gbW9zdAorLy8gICBw
bGF0Zm9ybXMgYW5kIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSB1bmZhaXIgdG8gc29tZSB0aHJlYWQg
YXQgc29tZSBtb21lbnQgaW4gdGltZSwgaXQgd2lsbCByYXJlbHkKKy8vICAgaGF2ZSBhIGxvbmcg
c3RyZWFrIG9mIHVuZmFpcm5lc3MgdG93YXJkcyBhbnkgcGFydGljdWxhciB0aHJlYWQ6IGV2ZW50
dWFsbHkgZWFjaCB0aHJlYWQgd2FpdGluZyBvbgorLy8gICB0aGUgbG9jayB3aWxsIGdldCB0byBo
YXZlIGEgdHVybiBzbyBsb25nIGFzIG5vIHRocmVhZCBqdXN0IGhvbGRzIHRoZSBsb2NrIGZvcmV2
ZXIuIFRoYXQgc2FpZCwKKy8vICAgdGhlcmUgKmlzKiBhIGNoYW5jZSBvZiBwYXRob2xvZ2llcyAt
IHVzZXJzIG9mIExvY2sgc2hvdWxkIG5vdCBkZXBlbmQgb24gZmlyc3QtaW4sIGZpcnN0LW91dCBs
b2NrCisvLyAgIGFjcXVpc2l0aW9uIG9yZGVyIHVuZGVyIGNvbnRlbnRpb24uIFRoZSBzYW1lIGNh
dmVhdCBpcyBnZW5lcmFsbHkgdHJ1ZSBvZiBTcGluTG9jayBhbmQgcGxhdGZvcm0KKy8vICAgbXV0
ZXhlcyBvbiBzb21lIHBsYXRmb3Jtcy4KKworLy8gVGhpcyBpcyBhIHN0cnVjdCB3aXRob3V0IGEg
Y29uc3RydWN0b3Igb3IgZGVzdHJ1Y3RvciBzbyB0aGF0IGl0IGNhbiBiZSBzdGF0aWNhbGx5IGlu
aXRpYWxpemVkLgorLy8gVXNlIExvY2sgaW4gaW5zdGFuY2UgdmFyaWFibGVzLgorc3RydWN0IExv
Y2tCYXNlIHsKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX3dv
cmQuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2Fj
cXVpcmUpKSkgeworICAgICAgICAgICAgLy8gTG9jayBhY3F1aXJlZCEKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGxvY2tTbG93KCk7CisgICAgfQorCisgICAgdm9p
ZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX3dvcmQuY29tcGFyZUV4Y2hh
bmdlV2Vhayhpc0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkgeworICAg
ICAgICAgICAgLy8gTG9jayByZWxlYXNlZCwgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHVubG9ja1Nsb3coKTsKKyAgICB9
CisKKyAgICBib29sIGlzSGVsZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93b3Jk
LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7CisgICAgfQorCisg
ICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNIZWxkKCk7
CisgICAgfQorCisgICAgLy8gRXZlcnl0aGluZyBiZWxvdyBoZXJlIHNob3VsZCBiZSBjb25zaWRl
cmVkIHByaXZhdGUuIEl0J3Mgbm90IHByaXZhdGUgYmVjYXVzZSBvZiBQT0QgcnVsZXMuCisgICAg
c3RhdGljIGNvbnN0IHVpbnRwdHJfdCBpc0hlbGRCaXQgPSAxOworICAgIHN0YXRpYyBjb25zdCB1
aW50cHRyX3QgbG9ja2VkUXVldWVCaXQgPSAyOworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3Qg
bWFzayA9IDM7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3coKTsKKworICAgIEF0b21pYzx1aW50
cHRyX3Q+IG1fd29yZDsKK307CisKK2NsYXNzIExvY2sgOiBwdWJsaWMgTG9ja0Jhc2UgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2spOworcHVibGljOgorICAgIExvY2soKQorICAgIHsK
KyAgICAgICAgbV93b3JkLnN0b3JlKDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAg
IH0KK307CisKK3R5cGVkZWYgTG9ja0Jhc2UgU3RhdGljTG9jazsKK3R5cGVkZWYgTG9ja2VyPExv
Y2tCYXNlPiBMb2NrSG9sZGVyOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpT
dGF0aWNMb2NrOwordXNpbmcgV1RGOjpMb2NrOwordXNpbmcgV1RGOjpMb2NrSG9sZGVyOworCisj
ZW5kaWYgLy8gV1RGX0xvY2tfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2
aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVs
ZWFzZShNZXRhQQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzZShN
ZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2Vy
KCZtX2xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogICAgIGlmIChoYW5k
bGUtPnNpemVJbkJ5dGVzKCkpIHsKICAgICAgICAgZGVjcmVtZW50UGFnZU9jY3VwYW5jeShoYW5k
bGUtPnN0YXJ0KCksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSk7CiAgICAgICAgIGFkZEZyZWVTcGFj
ZUZyb21SZWxlYXNlZEhhbmRsZShoYW5kbGUtPnN0YXJ0KCksIGhhbmRsZS0+c2l6ZUluQnl0ZXMo
KSk7CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNp
emVfdCAKIHsKICAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gbV9zaXplSW5CeXRlcyk7CiAg
ICAgCi0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKKyAg
ICBMb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CiAKICAgICBuZXdTaXpl
SW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5yb3VuZFVwKG5ld1NpemVJbkJ5dGVzKTsKICAgICAKQEAg
LTE1MCw3ICsxNTAsNyBAQCBNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxv
CiAKIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2Nh
dGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKIHsKLSAgICBTcGluTG9ja0hv
bGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAK
ICAgICBpZiAoIXNpemVJbkJ5dGVzKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE5Niw3ICsxOTYs
NyBAQCBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvCiAKIE1ldGFBbGxv
Y2F0b3I6OlN0YXRpc3RpY3MgTWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3MoKQogewot
ICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cigmbV9sb2NrKTsKICAgICBTdGF0aXN0aWNzIHJlc3VsdDsKICAgICByZXN1bHQuYnl0ZXNBbGxv
Y2F0ZWQgPSBtX2J5dGVzQWxsb2NhdGVkOwogICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkID0gbV9i
eXRlc1Jlc2VydmVkOwpAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRk
RnJlZVNwYWNlRnJvbVJlbGUKIAogdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFj
ZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogewotICAgIFNwaW5Mb2NrSG9sZGVy
IGxvY2tlcigmbV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBt
X2J5dGVzUmVzZXJ2ZWQgKz0gc2l6ZUluQnl0ZXM7CiAgICAgYWRkRnJlZVNwYWNlKHN0YXJ0LCBz
aXplSW5CeXRlcyk7CiB9CkBAIC0yODksNyArMjg5LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjph
ZGRGcmVzaEZyZWVTcGFjZSh2bwogc2l6ZV90IE1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNl
U2l6ZSgpCiB7CiAjaWZuZGVmIE5ERUJVRwotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9s
b2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBzaXplX3QgcmVzdWx0
ID0gMDsKICAgICBmb3IgKEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAu
Zmlyc3QoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnN1Y2Nlc3NvcigpKQogICAgICAgICByZXN1bHQg
Kz0gbm9kZS0+bV9zaXplSW5CeXRlczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlz
aW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIApAQCAtMTgzLDcgKzE4Myw3IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fYnl0ZXNS
ZXNlcnZlZDsKICAgICBzaXplX3QgbV9ieXRlc0NvbW1pdHRlZDsKICAgICAKLSAgICBTcGluTG9j
ayBtX2xvY2s7CisgICAgTG9jayBtX2xvY2s7CiAKICAgICBNZXRhQWxsb2NhdG9yVHJhY2tlciog
bV90cmFja2VyOwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TcGluTG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1NwaW5Mb2NrLmgJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJj
ZS9XVEYvd3RmL1NwaW5Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDE2IEBACiAK
IG5hbWVzcGFjZSBXVEYgewogCisvLyBTcGluTG9jayBpcyBhIHZlcnkgc2ltcGxlIGxvY2sgaW1w
bGVtZW50YXRpb24gdGhhdCBoYXMgZXh0cmVtZWx5IGZhc3QgbG9jay91bmxvY2sgZm9yIHZlcnkg
c21hbGwKKy8vIHVuY29udGVuZGVkIGNyaXRpY2FsIHNlY3Rpb25zLiBIb3dldmVyLCBpdCB3aWxs
IGV4aGliaXQgYmFkIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIHdoZW4gdGhlIGxvY2sKKy8vIGJl
Y29tZXMgY29udGVuZGVkOiB0aGUgdGhyZWFkIHRyeWluZyB0byBhY3F1aXJlIHRoZSBsb2NrIHdp
bGwgc2ltcGx5IHdhc3RlIENQVSBjeWNsZXMuCisvLworLy8gRm9yIG1vc3QgKGFsbD8pIGxvY2tp
bmcgdXNlIGNhc2VzLCBpdCdzIGJldHRlciB0byB1c2UgTG9jayAoc2VlIHd0Zi9Mb2NrLmgpLiBU
aGF0IHVzZXMgb25seSBhIGJpdAorLy8gbW9yZSBtZW1vcnkgKDggYnl0ZXMgaW5zdGVhZCBvZiA0
IG9uIDY0LWJpdCksIGFuZCBpcyBvbmx5IGEgYml0IHNsb3dlciBpbiB0aGUgdW5jb250ZW5kZWQg
Y2FzZQorLy8gKExvY2sgbmVlZHMgQ0FTIHRvIHVubG9jaywgd2hpbGUgU3BpbkxvY2sgZG9lc24n
dCksIGJ1dCB3aWxsIGJ1cm4gYSBsb3QgbGVzcyBDUFUgdGltZSAtIGZvciAxMAorLy8gdGhyZWFk
cyBhY3F1aXJpbmcgYSA1MCBtaWNyb3NlY29uZCBjcml0aWNhbCBzZWN0aW9uLCBMb2NrIHdpbGwg
dXNlIHVwIHRvIDEwMHggbGVzcyBrZXJuZWwgQ1BVIHRpbWUKKy8vIHRoYW4gU3BpbkxvY2suCisK
IC8vIFNwaW5Mb2NrQmFzZSBpcyBhIHN0cnVjdCB3aXRob3V0IGFuIGV4cGxpY2l0bHkgZGVmaW5l
ZCBjb25zdHJ1Y3RvcnMgc28gdGhhdAogLy8gaXQgY2FuIGJlIGluaXRpYWxpemVkIGF0IGNvbXBp
bGUgdGltZS4gU2VlIFN0YXRpY1NwaW5Mb2NrIGJlbG93Lgogc3RydWN0IFNwaW5Mb2NrQmFzZSB7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCShyZXZpc2lvbiAxODgwMTgp
CisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQogICogQ29weXJpZ2h0IChDKSAy
MDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNl
L1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRv
bWljU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0
cmluZy5jcHAJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWlj
U3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImR0
b2EuaCIKIAogI2lmIFVTRShXRUJfVEhSRUFEKQotI2luY2x1ZGUgIlNwaW5Mb2NrLmgiCisjaW5j
bHVkZSAiTG9jay5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL1dU
Ri93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw3ICszMyw3IEBACiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgogCiAjaWYgVVNFKFdF
Ql9USFJFQUQpCi0jaW5jbHVkZSAiU3BpbkxvY2suaCIKKyNpbmNsdWRlICJMb2NrLmgiCiAjZW5k
aWYKIAogbmFtZXNwYWNlIFdURiB7CkBAIC00MiwxOCArNDIsMTggQEAgdXNpbmcgbmFtZXNwYWNl
IFVuaWNvZGU7CiAKICNpZiBVU0UoV0VCX1RIUkVBRCkKIAotY2xhc3MgQXRvbWljU3RyaW5nVGFi
bGVMb2NrZXIgOiBwdWJsaWMgU3BpbkxvY2tIb2xkZXIgeworY2xhc3MgQXRvbWljU3RyaW5nVGFi
bGVMb2NrZXIgOiBwdWJsaWMgTG9ja0hvbGRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QXRvbWljU3RyaW5nVGFibGVMb2NrZXIpOwogCi0gICAgc3RhdGljIFN0YXRpY1NwaW5Mb2NrIHNf
c3RyaW5nVGFibGVMb2NrOworICAgIHN0YXRpYyBTdGF0aWNMb2NrIHNfc3RyaW5nVGFibGVMb2Nr
OwogcHVibGljOgogICAgIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyKCkKLSAgICAgICAgOiBTcGlu
TG9ja0hvbGRlcigmc19zdHJpbmdUYWJsZUxvY2spCisgICAgICAgIDogTG9ja0hvbGRlcigmc19z
dHJpbmdUYWJsZUxvY2spCiAgICAgewogICAgIH0KIH07CiAKLVN0YXRpY1NwaW5Mb2NrIEF0b21p
Y1N0cmluZ1RhYmxlTG9ja2VyOjpzX3N0cmluZ1RhYmxlTG9jazsKK1N0YXRpY0xvY2sgQXRvbWlj
U3RyaW5nVGFibGVMb2NrZXI6OnNfc3RyaW5nVGFibGVMb2NrOwogCiAjZWxzZQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxNS0wOC0wNSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIExpZ2h0d2VpZ2h0IGxvY2tzIHNob3VsZCBiZSBh
ZGFwdGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ3NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gbmV3IGJlaGF2aW9yLgorCisgICAgICAgICogYmluZGlu
Z3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW06CisgICAgICAgIChXZWJDb3JlOjpnZXRKU1dyYXBw
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6YWRkSlNXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlbW92ZUpTV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVKU1dyYXBwZXJJZlJl
dGFpbkNvdW50T25lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mvd2FrL1dBS1dpbmRvdy5tbToK
KyAgICAgICAgKC1bV0FLV2luZG93IHNldEV4cG9zZWRTY3JvbGxWaWV3UmVjdDpdKToKKyAgICAg
ICAgKC1bV0FLV2luZG93IGV4cG9zZWRTY3JvbGxWaWV3UmVjdF0pOgorCiAyMDE1LTA4LTA1ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggd2hlbiByZW1v
dmluZyBjaGlsZHJlbiBvZiBhIE1hdGhNTFNlbGVjdEVsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiAxODgw
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQAogI2ltcG9ydCA8cnVudGltZS9KU0xvY2su
aD4KICNpbXBvcnQgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2ltcG9ydCA8cnVudGltZS9Db21w
bGV0aW9uLmg+Ci0jaW1wb3J0IDx3dGYvU3BpbkxvY2suaD4KKyNpbXBvcnQgPHd0Zi9Mb2NrLmg+
CiAjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL05TTWFw
VGFibGVTUEkuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNzIsMTIgKzcy
LDEyIEBAIHVzaW5nIEpTQzo6bWFrZVNvdXJjZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Rh
dGljIE5TTWFwVGFibGUqIEpTV3JhcHBlckNhY2hlOwotc3RhdGljIFN0YXRpY1NwaW5Mb2NrIHNw
aW5Mb2NrOworc3RhdGljIFN0YXRpY0xvY2sgc3BpbkxvY2s7CiAKIE5TT2JqZWN0KiBnZXRKU1dy
YXBwZXIoSlNPYmplY3QqIGltcGwpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBTcGluTG9ja0hvbGRlciBob2xkZXIoJnNwaW5Mb2NrKTsKKyAgICBMb2NrSG9sZGVyIGhvbGRl
cigmc3BpbkxvY2spOwogCiAgICAgaWYgKCFKU1dyYXBwZXJDYWNoZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKQEAgLTg4LDcgKzg4LDcgQEAgTlNPYmplY3QqIGdldEpTV3JhcHBlcihKU09iamVjdCog
aW1wbCkKIHZvaWQgYWRkSlNXcmFwcGVyKE5TT2JqZWN0KiB3cmFwcGVyLCBKU09iamVjdCogaW1w
bCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIFNwaW5Mb2NrSG9sZGVyIGhv
bGRlcigmc3BpbkxvY2spOworICAgIExvY2tIb2xkZXIgaG9sZGVyKCZzcGluTG9jayk7CiAKICAg
ICBpZiAoIUpTV3JhcHBlckNhY2hlKQogICAgICAgICBKU1dyYXBwZXJDYWNoZSA9IGNyZWF0ZVdy
YXBwZXJDYWNoZSgpOwpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIGFkZEpTV3JhcHBlcihOU09iamVj
dCogd3JhcHBlciwgSlNPCiAKIHZvaWQgcmVtb3ZlSlNXcmFwcGVyKEpTT2JqZWN0KiBpbXBsKQog
ewotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOworICAgIExvY2tIb2xkZXIg
aG9sZGVyKCZzcGluTG9jayk7CiAKICAgICBpZiAoIUpTV3JhcHBlckNhY2hlKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCByZW1vdmVKU1dyYXBwZXIoSlNPYmplY3Qq
IGltcGwpCiAKIHN0YXRpYyB2b2lkIHJlbW92ZUpTV3JhcHBlcklmUmV0YWluQ291bnRPbmUoTlNP
YmplY3QqIHdyYXBwZXIsIEpTT2JqZWN0KiBpbXBsKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGhv
bGRlcigmc3BpbkxvY2spOworICAgIExvY2tIb2xkZXIgaG9sZGVyKCZzcGluTG9jayk7CiAKICAg
ICBpZiAoIUpTV3JhcHBlckNhY2hlKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcAkocmV2aXNp
b24gMTg4MDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw3ICsyMDAsNyBAQCBDQVJpbmdCdWZmZXI6
OkVycm9yIENBUmluZ0J1ZmZlcjo6c3RvcmUoCiAKIHZvaWQgQ0FSaW5nQnVmZmVyOjpzZXRDdXJy
ZW50RnJhbWVCb3VuZHModWludDY0X3Qgc3RhcnRUaW1lLCB1aW50NjRfdCBlbmRUaW1lKQogewot
ICAgIEJ5dGVTcGluTG9ja2VyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOworICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fY3VycmVudEZyYW1lQm91bmRzTG9jayk7CiAgICAgdWludDMy
X3QgbmV4dFB0ciA9IG1fdGltZUJvdW5kc1F1ZXVlUHRyICsgMTsKICAgICB1aW50MzJfdCBpbmRl
eCA9IG5leHRQdHIgJiBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVNYXNrOwogCkBAIC0yMTIs
NyArMjEyLDcgQEAgdm9pZCBDQVJpbmdCdWZmZXI6OnNldEN1cnJlbnRGcmFtZUJvdW5kcwogCiB2
b2lkIENBUmluZ0J1ZmZlcjo6Z2V0Q3VycmVudEZyYW1lQm91bmRzKHVpbnQ2NF90ICZzdGFydFRp
bWUsIHVpbnQ2NF90ICZlbmRUaW1lKQogewotICAgIEJ5dGVTcGluTG9ja2VyIGxvY2tlcihtX2N1
cnJlbnRGcmFtZUJvdW5kc0xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY3VycmVudEZy
YW1lQm91bmRzTG9jayk7CiAgICAgdWludDMyX3QgY3VyUHRyID0gbV90aW1lQm91bmRzUXVldWVQ
dHI7CiAgICAgdWludDMyX3QgaW5kZXggPSBjdXJQdHIgJiBrR2VuZXJhbFJpbmdUaW1lQm91bmRz
UXVldWVNYXNrOwogICAgIENBUmluZ0J1ZmZlcjo6VGltZUJvdW5kcyYgYm91bmRzID0gbV90aW1l
Qm91bmRzUXVldWVbaW5kZXhdOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
bWFjL0NBUmluZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJP
WCkKIAogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvQnl0
ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIHR5cGVkZWYgc3RydWN0IEF1ZGlvQnVmZmVyTGlzdCBBdWRpb0J1ZmZlckxpc3Q7CkBA
IC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICAKICAgICBWZWN0b3I8VGltZUJv
dW5kcz4gbV90aW1lQm91bmRzUXVldWU7Ci0gICAgQnl0ZVNwaW5Mb2NrIG1fY3VycmVudEZyYW1l
Qm91bmRzTG9jazsKKyAgICBMb2NrIG1fY3VycmVudEZyYW1lQm91bmRzTG9jazsKICAgICBpbnQz
Ml90IG1fdGltZUJvdW5kc1F1ZXVlUHRyOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL3dhay9XQUtXaW5kb3cubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cubW0JKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0FLV2luZG93Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBACiAjaW1wb3J0ICJXS0NvbnRlbnRPYnNlcnZhdGlvbi5oIgogI2ltcG9y
dCAiV0tWaWV3UHJpdmF0ZS5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0j
aW1wb3J0IDx3dGYvU3BpbkxvY2suaD4KKyNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAKIFdFQkNPUkVf
RVhQT1JUIE5TU3RyaW5nICogY29uc3QgV0FLV2luZG93U2NyZWVuU2NhbGVEaWRDaGFuZ2VOb3Rp
ZmljYXRpb24gPSBAIldBS1dpbmRvd1NjcmVlblNjYWxlRGlkQ2hhbmdlTm90aWZpY2F0aW9uIjsK
IFdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICogY29uc3QgV0FLV2luZG93VmlzaWJpbGl0eURpZENo
YW5nZU5vdGlmaWNhdGlvbiA9IEAiV0FLV2luZG93VmlzaWJpbGl0eURpZENoYW5nZU5vdGlmaWNh
dGlvbiI7CkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyBXZWJFdmVudCAqY3VycmVudEV2ZW50ID0g
bmlsOwogc3RhdGljIGlkPE9yaWVudGF0aW9uUHJvdmlkZXI+IGdPcmllbnRhdGlvblByb3ZpZGVy
OwogCiBAaW1wbGVtZW50YXRpb24gV0FLV2luZG93IHsKLSAgICBTcGluTG9jayBfZXhwb3NlZFNj
cm9sbFZpZXdSZWN0TG9jazsKKyAgICBMb2NrIF9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrOwog
ICAgIENHUmVjdCBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0OwogfQogCkBAIC0zNTgsMTQgKzM1OCwx
NCBAQCAtICh2b2lkKXNlbmRNb3VzZU1vdmVFdmVudDooV2ViRXZlbnQgKilhCiAKIC0gKHZvaWQp
c2V0RXhwb3NlZFNjcm9sbFZpZXdSZWN0OihDR1JlY3QpZXhwb3NlZFNjcm9sbFZpZXdSZWN0CiB7
Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZfZXhwb3NlZFNjcm9sbFZpZXdSZWN0TG9jayk7
CisgICAgTG9ja0hvbGRlciBsb2NrZXIoJl9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrKTsKICAg
ICBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0ID0gZXhwb3NlZFNjcm9sbFZpZXdSZWN0OwogfQogCiAt
IChDR1JlY3QpZXhwb3NlZFNjcm9sbFZpZXdSZWN0CiB7CiAgICAgewotICAgICAgICBTcGluTG9j
a0hvbGRlciBsb2NrZXIoJl9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrKTsKKyAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIoJl9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrKTsKICAgICAgICAgaWYg
KCFDR1JlY3RJc051bGwoX2V4cG9zZWRTY3JvbGxWaWV3UmVjdCkpCiAgICAgICAgICAgICByZXR1
cm4gX2V4cG9zZWRTY3JvbGxWaWV3UmVjdDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAxODgwMTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyMSBAQAorMjAxNS0wOC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIExpZ2h0d2VpZ2h0IGxvY2tzIHNob3VsZCBiZSBhZGFwdGl2ZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTQ1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRj
aGVyOjpjbGVhclF1ZXVlZFRvdWNoRXZlbnRzRm9yUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OkV2
ZW50RGlzcGF0Y2hlcjo6Z2V0UXVldWVkVG91Y2hFdmVudHNGb3JQYWdlKToKKyAgICAgICAgKFdl
YktpdDo6RXZlbnREaXNwYXRjaGVyOjp0b3VjaEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6RXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaFRvdWNoRXZlbnRzKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Vmlld1VwZGF0ZURp
c3BhdGNoZXI6OnZpc2libGVDb250ZW50UmVjdFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZXdVcGRhdGVEaXNwYXRjaGVyOjpkaXNwYXRjaFZpc2libGVDb250ZW50UmVjdFVwZGF0ZSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmg6CisKIDIw
MTUtMDgtMDUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUERGUGx1Z2lucyBhcmUgY2xpcHBlZCBpbiBsaW5rIHByZXZpZXdzIChhbmQgcmVtYWluIHNv
IHdoZW4gb3BlbmVkKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2
ZW50RGlzcGF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzIsMTMgKzE3MiwxMyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxF
dmVudCh1aW50NjRfCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiB2b2lkIEV2ZW50RGlz
cGF0Y2hlcjo6Y2xlYXJRdWV1ZWRUb3VjaEV2ZW50c0ZvclBhZ2UoY29uc3QgV2ViUGFnZSYgd2Vi
UGFnZSkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsK
KyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xvY2spOwogICAgIG1fdG91Y2hF
dmVudHMucmVtb3ZlKHdlYlBhZ2UucGFnZUlEKCkpOwogfQogCiB2b2lkIEV2ZW50RGlzcGF0Y2hl
cjo6Z2V0UXVldWVkVG91Y2hFdmVudHNGb3JQYWdlKGNvbnN0IFdlYlBhZ2UmIHdlYlBhZ2UsIFRv
dWNoRXZlbnRRdWV1ZSYgZGVzdGluYXRpb25RdWV1ZSkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBs
b2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b3Vj
aEV2ZW50c0xvY2spOwogICAgIGRlc3RpbmF0aW9uUXVldWUgPSBtX3RvdWNoRXZlbnRzLnRha2Uo
d2ViUGFnZS5wYWdlSUQoKSk7CiB9CiAKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIEV2ZW50RGlz
cGF0Y2hlcjo6dG91Y2hFdmVudCh1aW50NjRfCiB7CiAgICAgYm9vbCB1cGRhdGVMaXN0V2FzRW1w
dHk7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNM
b2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKICAg
ICAgICAgdXBkYXRlTGlzdFdhc0VtcHR5ID0gbV90b3VjaEV2ZW50cy5pc0VtcHR5KCk7CiAgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90b3VjaEV2ZW50cy5hZGQocGFnZUlELCBUb3VjaEV2ZW50
UXVldWUoKSk7CiAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKQEAgLTIxNyw3ICsy
MTcsNyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hUb3VjaEV2ZW50CiB7CiAgICAg
SGFzaE1hcDx1aW50NjRfdCwgVG91Y2hFdmVudFF1ZXVlPiBsb2NhbENvcHk7CiAgICAgewotICAg
ICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKKyAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKICAgICAgICAgbG9jYWxDb3B5
LnN3YXAobV90b3VjaEV2ZW50cyk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oCShyZXZpc2lvbiAxODgw
MTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTk3LDcgKzk3LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpXaGVlbEV2ZW50RGVsdGFUcmFja2VyPiBtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRy
YWNrZXI7CiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgU3BpbkxvY2sgbV90b3Vj
aEV2ZW50c0xvY2s7CisgICAgTG9jayBtX3RvdWNoRXZlbnRzTG9jazsKICAgICBIYXNoTWFwPHVp
bnQ2NF90LCBUb3VjaEV2ZW50UXVldWU+IG1fdG91Y2hFdmVudHM7CiAjZW5kaWYKIH07CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3
VXBkYXRlRGlzcGF0Y2hlci5jcHAJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBWaWV3VXBkYXRlRGlzcGF0Y2hlcjo6dmlzaWJsZUNv
bnRlbgogewogICAgIGJvb2wgdXBkYXRlTGlzdFdhc0VtcHR5OwogICAgIHsKLSAgICAgICAgU3Bp
bkxvY2tIb2xkZXIgbG9ja2VyKCZtX2RhdGFNdXRleCk7CisgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKCZtX2RhdGFNdXRleCk7CiAgICAgICAgIHVwZGF0ZUxpc3RXYXNFbXB0eSA9IG1fbGF0ZXN0
VXBkYXRlLmlzRW1wdHkoKTsKICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fbGF0ZXN0VXBkYXRl
LmZpbmQocGFnZUlEKTsKICAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fbGF0ZXN0VXBkYXRlLmVu
ZCgpKQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFZpZXdVcGRhdGVEaXNwYXRjaGVyOjpkaXNwYXRj
aFZpc2liCiB7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgVXBkYXRlRGF0YT4gdXBkYXRlOwogICAg
IHsKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2RhdGFNdXRleCk7CisgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKCZtX2RhdGFNdXRleCk7CiAgICAgICAgIHVwZGF0ZSA9IFdURjo6
bW92ZShtX2xhdGVzdFVwZGF0ZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuaAkocmV2
aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdV
cGRhdGVEaXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNs
dWRlICJWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+Cisj
aW5jbHVkZSA8d3RmL0xvY2suaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTU3LDcgKzU3
LDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKLSAg
ICBTcGluTG9jayBtX2RhdGFNdXRleDsKKyAgICBMb2NrIG1fZGF0YU11dGV4OwogICAgIEhhc2hN
YXA8dWludDY0X3QsIFVwZGF0ZURhdGE+IG1fbGF0ZXN0VXBkYXRlOwogfTsKIApJbmRleDogVG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4
MDUxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTUtMDgtMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBM
aWdodHdlaWdodCBsb2NrcyBzaG91bGQgYmUgYWRhcHRpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzU0NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0V2Vi
S2l0QVBJLnZjeHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvTG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cnVuTG9ja1Rlc3Qp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTUtMDgtMDYgIFl1c3VrZSBT
dXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgUGFzcy10aHJvdWdoIHRo
ZSB1bmRlZmluZWQgb3B0aW9ucyBpbiBydW4tanNjCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE4ODAxOCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDcgQEAgc2V0KFRlc3RXVEZfU09V
UkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNoU2V0LmNwcAogICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9u
LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9MaXN0SGFzaFNldC5jcHAK
KyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTG9jay5jcHAKICAgICAke1RFU1RX
RUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTUQ1LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9
L1Rlc3RzL1dURi9NYXRoRXh0cmFzLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3Rz
L1dURi9NZWRpYVRpbWUuY3BwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkudmN4cHJvai9UZXN0V2ViS2l0QVBJLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnZjeHByb2ovVGVzdFdlYktpdEFQSS52Y3hwcm9qCShy
ZXZpc2lvbiAxODgwMTgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4
cHJvai9UZXN0V2ViS2l0QVBJLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBA
Ci3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lv
bj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWls
ZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29t
L2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29u
ZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z1N1
ZmZpeHxXaW4zMiI+CkBAIC0zMTksNiArMzE5LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXFRlc3RzXFdURlxIYXNoU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XFRlc3RzXFdURlxJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxMaXN0SGFzaFNldC5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xXVEZcTG9jay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxUZXN0c1xXVEZcTUQ1LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXFRlc3RzXFdURlxNYXRoRXh0cmFzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXFRlc3RzXFdURlxNZWRpYVRpbWUuY3BwIiAvPgpAQCAtMzY1LDQgKzM2Niw0IEBACiAgIDxJ
bXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+
CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3Jv
dXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4ODAxOCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAv
KiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRp
bGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0
Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVz
Q29jb2EubW0gKi87IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdF
dmFsdWF0ZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVK
YXZhU2NyaXB0Lm1tICovOyB9OworCQkwRkZDNDVBNjFCNzNFQkVCMDA4NUJENjIgLyogTG9jay5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDNDVB
NDFCNzNFQkUyMDA4NUJENjIgLyogTG9jay5jcHAgKi87IH07CiAJCTFBMDJDODcwMTI1RDRDRkQw
MEUzRjRCRCAvKiBmaW5kLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUEwMkM4NEIxMjVENEE1RTAwRTNGNEJEIC8qIGZpbmQuaHRtbCAq
LzsgfTsKIAkJMUE1MEFBMjAxQTJBNTFGQzAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNy
ZWF0ZS1wYWdlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE1MEFBMUYxQTJBNEVBNTAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGlu
LWNyZWF0ZS1wYWdlLmh0bWwgKi87IH07CiAJCTFBNjM0NzlGMTgzRDcyQTQwMDVCMTcwNyAvKiBh
bGwtY29udGVudC1pbi1vbmUtaWZyYW1lLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNEM0QxOUIxN0IxQTdCMDAwQzdDNDE1IC8qIGFs
bC1jb250ZW50LWluLW9uZS1pZnJhbWUuaHRtbCAqLzsgfTsKQEAgLTQyOCw2ICs0MjksNyBAQAog
CQkwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3RXZh
bHVhdGVKYXZhU2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM2QzRD
QjE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlZEJsYWNrVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQzZDNENFMTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxsb2NhdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZDNDVBNDFCNzNFQkUyMDA4NUJENjIgLyog
TG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NrLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0NjQwMTIxNjdBODMwNTAwMEJEMjE4IC8q
IExheW91dFVuaXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5
b3V0VW5pdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjNCMTEyMTVFNDVF
QUIwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9u
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRCMTI1RDRBNUUwMEUz
RjRCRCAvKiBmaW5kLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBmaW5kLmh0bWw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDk2LDYgKzEwOTgsNyBAQAogCQkJCTI2
QjJERkY4MTVCREU1OTkwMDRGNjkxRCAvKiBIYXNoU2V0LmNwcCAqLywKIAkJCQkyNjZGQUZEMjE1
RTU3NzUyMDBGNjFENUIgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgKi8sCiAJCQkJ
MjYzMDBCMTcxNjc1NUNEOTAwNjY4ODZEIC8qIExpc3RIYXNoU2V0LmNwcCAqLywKKwkJCQkwRkZD
NDVBNDFCNzNFQkUyMDA4NUJENjIgLyogTG9jay5jcHAgKi8sCiAJCQkJQjQwMzlGOUMxNUU2RDhC
MzAwNzI1NUQ2IC8qIE1hdGhFeHRyYXMuY3BwICovLAogCQkJCUNENTM5M0M3MTc1N0JBOTcwMEMw
NzEyMyAvKiBNRDUuY3BwICovLAogCQkJCUNENTQ5N0IzMTU4NTdGMEMwMEI1QkMzMCAvKiBNZWRp
YVRpbWUuY3BwICovLApAQCAtMTU2Nyw2ICsxNTcwLDcgQEAKIAkJCQk3Q0NFN0VDOTFBNDExQTdF
MDA0NDdDNEMgLyogUmVuZGVyZWRJbWFnZUZyb21ET01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0NDRTdFQ0ExQTQxMUE3RTAwNDQ3QzRDIC8qIFJlbmRlcmVkSW1hZ2VGcm9tRE9NUmFuZ2Uu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUNEMUM2QzFCMzhDRTQzMDAxNDJDQTUgLyogTW9kYWxB
bGVydHMubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkZDNDVBNjFCNzNFQkVCMDA4NUJENjIgLyog
TG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YwRTFBNDExQUU2MDA0NDdDNEMgLyog
UmVzaXplUmV2ZXJzZVBhZ2luYXRlZFdlYlZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0ND
RTdGMEYxQTQxMUFFNjAwNDQ3QzRDIC8qIFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2guY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0NDRTdGMTAxQTQxMUFFNjAwNDQ3QzRDIC8qIFJlc3BvbnNpdmVuZXNz
VGltZXJEb2VzbnRGaXJlRWFybHkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmlt
aXRpdmVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Cit2b2lkIHJ1bkxvY2tUZXN0KHVu
c2lnbmVkIG51bVRocmVhZEdyb3VwcywgdW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNp
Z25lZCB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uLCB1bnNpZ25lZCBudW1JdGVyYXRpb25zKQorewor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2NrVHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8
TG9ja1R5cGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8ZG91Ymxl
W10+IHdvcmRzID0gc3RkOjptYWtlX3VuaXF1ZTxkb3VibGVbXT4obnVtVGhyZWFkR3JvdXBzKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjpt
YWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVh
ZHNQZXJHcm91cCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEdyb3VwSW5kZXggPSBudW1U
aHJlYWRHcm91cHM7IHRocmVhZEdyb3VwSW5kZXgtLTspIHsKKyAgICAgICAgd29yZHNbdGhyZWFk
R3JvdXBJbmRleF0gPSAwOworCisgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBu
dW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KSB7CisgICAgICAgICAgICB0aHJlYWRz
W3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBj
cmVhdGVUaHJlYWQoCisgICAgICAgICAgICAgICAgIkJlbmNobWFyayB0aHJlYWQiLAorICAgICAg
ICAgICAgICAgIFt0aHJlYWRHcm91cEluZGV4LCAmbG9ja3MsICZ3b3JkcywgbnVtSXRlcmF0aW9u
cywgd29ya1BlckNyaXRpY2FsU2VjdGlvbl0gKCkgeworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1JdGVyYXRpb25zOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsb2Nrc1t0aHJlYWRHcm91cEluZGV4XS5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uOyBqLS07KQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdKys7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsb2Nrc1t0aHJlYWRHcm91cEluZGV4XS51bmxvY2soKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51
bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspCisgICAgICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKHRocmVhZHNbdGhyZWFkSW5kZXhdKTsKKworICAgIGRvdWJsZSBleHBlY3RlZCA9
IDA7CisgICAgZm9yICh1aW50NjRfdCBpID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bUl0ZXJh
dGlvbnMpICogd29ya1BlckNyaXRpY2FsU2VjdGlvbiAqIG51bVRocmVhZHNQZXJHcm91cDsgaS0t
OykKKyAgICAgICAgZXhwZWN0ZWQrKzsKKworICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJ
bmRleCA9IG51bVRocmVhZEdyb3VwczsgdGhyZWFkR3JvdXBJbmRleC0tOykKKyAgICAgICAgRVhQ
RUNUX0VRKGV4cGVjdGVkLCB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSk7Cit9CisKK1RFU1QoV1RG
X0xvY2ssIFVuY29udGVudGVkU2hvcnRTZWN0aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PExvY2s+
KDEsIDEsIDEsIDEwMDAwMDAwKTsKK30KKworVEVTVChXVEZfTG9jaywgVW5jb250ZW50ZWRMb25n
U2VjdGlvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxLCAxMDAwMCwgMTAwMCk7Cit9
CisKK1RFU1QoV1RGX0xvY2ssIENvbnRlbnRlZFNob3J0U2VjdGlvbikKK3sKKyAgICBydW5Mb2Nr
VGVzdDxMb2NrPigxLCAxMCwgMSwgMTAwMDAwMDApOworfQorCitURVNUKFdURl9Mb2NrLCBDb250
ZW50ZWRMb25nU2VjdGlvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxMCwgMTAwMDAs
IDEwMDAwKTsKK30KKworVEVTVChXVEZfTG9jaywgTWFueUNvbnRlbnRlZFNob3J0U2VjdGlvbnMp
Cit7CisgICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMTAsIDEwLCAxLCA1MDAwMDApOworfQorCitURVNU
KFdURl9Mb2NrLCBNYW55Q29udGVudGVkTG9uZ1NlY3Rpb25zKQoreworICAgIHJ1bkxvY2tUZXN0
PExvY2s+KDEwLCAxMCwgMTAwMDAsIDIwMDApOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258392</attachid>
            <date>2015-08-06 13:37:28 -0700</date>
            <delta_ts>2015-08-06 14:56:09 -0700</delta_ts>
            <desc>fix build</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>76189</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDE1LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TGlnaHR3ZWlnaHQgbG9ja3Mgc2hvdWxkIGJlIGFkYXB0aXZlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1NDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoKKyAgICAg
ICAgKEpTQzo6Q29waWVkQmxvY2s6OndvcmtMaXN0TG9jayk6CisgICAgICAgICogaGVhcC9Db3Bp
ZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnNob3VsZFJlcG9y
dExpdmVCeXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMp
OgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3Bh
Y2U6OkNvcGllZEdlbmVyYXRpb246OkNvcGllZEdlbmVyYXRpb24pOgorICAgICAgICAqIGhlYXAv
Q29waWVkU3BhY2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xl
RXZhY3VhdGVkQmxvY2spOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmg6Cisg
ICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6Z2V0TmV4dEJsb2Nrc1RvQ29weSk6Cisg
ICAgICAgICogaGVhcC9MaXN0YWJsZUhhbmRsZXIuaDoKKyAgICAgICAgKEpTQzo6TGlzdGFibGVI
YW5kbGVyOjpMaXN0OjphZGRUaHJlYWRTYWZlKToKKyAgICAgICAgKEpTQzo6TGlzdGFibGVIYW5k
bGVyOjpMaXN0OjphZGROb3RUaHJlYWRTYWZlKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9y
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29weUxhdGVyKToKKyAgICAg
ICAgKiBydW50aW1lL1R5cGVQcm9maWxlckxvZy5oOgorCiAyMDE1LTA4LTA1ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtFUzZdIENsYXNzIHBhcnNlciBkb2Vz
IG5vdCBhbGxvdyBtZXRob2RzIG5hbWVkIHNldCBhbmQgZ2V0LgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotc3RhdGljIFN0YXRp
Y1NwaW5Mb2NrIGNyYXNoTG9jazsKK3N0YXRpYyBTdGF0aWNMb2NrIGNyYXNoTG9jazsKIAogdm9p
ZCBzdGFydENyYXNoaW5nKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2suaAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1
ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9E
b3VibHlMaW5rZWRMaXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5jbHVkZSA8
d3RmL0xvY2suaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU0LDggKzU0LDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGlkUHJvbW90ZSgpOwogCiAgICAgdW5zaWduZWQgbGl2ZUJ5dGVzKCk7Ci0g
ICAgYm9vbCBzaG91bGRSZXBvcnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBKU0NlbGwqIG93
bmVyKTsKLSAgICB2b2lkIHJlcG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpTQ2VsbCos
IENvcHlUb2tlbiwgdW5zaWduZWQpOworICAgIGJvb2wgc2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKExv
Y2tIb2xkZXImLCBKU0NlbGwqIG93bmVyKTsKKyAgICB2b2lkIHJlcG9ydExpdmVCeXRlcyhMb2Nr
SG9sZGVyJiwgSlNDZWxsKiwgQ29weVRva2VuLCB1bnNpZ25lZCk7CiAgICAgdm9pZCByZXBvcnRM
aXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkKTsKICAgICB2b2lkIGRpZFN1cnZpdmVHQygp
OwogICAgIHZvaWQgZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCk7CkBAIC04NSw3ICs4NSw3IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaGFzV29ya0xpc3QoKTsKICAgICBDb3B5V29ya0xpc3QmIHdv
cmtMaXN0KCk7Ci0gICAgU3BpbkxvY2smIHdvcmtMaXN0TG9jaygpIHsgcmV0dXJuIG1fd29ya0xp
c3RMb2NrOyB9CisgICAgTG9jayYgd29ya0xpc3RMb2NrKCkgeyByZXR1cm4gbV93b3JrTGlzdExv
Y2s7IH0KIAogcHJpdmF0ZToKICAgICBDb3BpZWRCbG9jayhzaXplX3QpOwpAQCAtOTgsNyArOTgs
NyBAQCBwcml2YXRlOgogCiAgICAgc2l6ZV90IG1fY2FwYWNpdHk7CiAKLSAgICBTcGluTG9jayBt
X3dvcmtMaXN0TG9jazsKKyAgICBMb2NrIG1fd29ya0xpc3RMb2NrOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxDb3B5V29ya0xpc3Q+IG1fd29ya0xpc3Q7CiAKICAgICBzaXplX3QgbV9yZW1haW5pbmc7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGlu
ZXMuaAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAgICAgCi1pbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6c2hvdWxkUmVwb3J0
TGl2ZUJ5dGVzKFNwaW5Mb2NrSG9sZGVyJiwgSlNDZWxsKiBvd25lcikKK2lubGluZSBib29sIENv
cGllZEJsb2NrOjpzaG91bGRSZXBvcnRMaXZlQnl0ZXMoTG9ja0hvbGRlciYsIEpTQ2VsbCogb3du
ZXIpCiB7CiAgICAgLy8gV2Ugd2FudCB0byBhZGQgdG8gbGl2ZSBieXRlcyBpZiB0aGUgb3duZXIg
aXNuJ3QgcGFydCBvZiB0aGUgcmVtZW1iZXJlZCBzZXQgb3IKICAgICAvLyBpZiB0aGlzIGJsb2Nr
IHdhcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBsYXN0IGN5Y2xlLiAKQEAgLTQzLDcgKzQzLDcgQEAg
aW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OnNob3VsZFJlcG9ydExpdgogICAgIHJldHVybiAhSGVh
cDo6aXNSZW1lbWJlcmVkKG93bmVyKSB8fCAhbV9pc09sZDsKIH0KIAotaW5saW5lIHZvaWQgQ29w
aWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpTQ2VsbCogb3duZXIs
IENvcHlUb2tlbiB0b2tlbiwgdW5zaWduZWQgYnl0ZXMpCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9j
azo6cmVwb3J0TGl2ZUJ5dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4g
dG9rZW4sIHVuc2lnbmVkIGJ5dGVzKQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICNpZm5k
ZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIENvcGll
ZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKENvcGllCiAKICAgICB7CiAgICAgICAgIC8vIEFsd2F5
cyBwdXQgdGhlIGJsb2NrIGludG8gdGhlIG9sZCBnZW4gYmVjYXVzZSBpdCdzIGJlaW5nIHByb21v
dGVkIQotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9jayk7CiAgICAgICAgIG1fb2xkR2Vu
LnRvU3BhY2UtPnB1c2goYmxvY2spOwogICAgICAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7CiAg
ICAgICAgIG1fb2xkR2VuLmJsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJs
b2NrKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJl
dmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQmxv
Y2suaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJp
bWl0aXZlcy5oPgogCkBAIC0xMTMsNyArMTEzLDcgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8
Q29waWVkQmxvY2sqPiBtX2Jsb2NrU2V0OwogCi0gICAgU3BpbkxvY2sgbV90b1NwYWNlTG9jazsK
KyAgICBMb2NrIG1fdG9TcGFjZUxvY2s7CiAKICAgICBzdHJ1Y3QgQ29waWVkR2VuZXJhdGlvbiB7
CiAgICAgICAgIENvcGllZEdlbmVyYXRpb24oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC05OCw3ICs5OCw3IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZh
Y3VhdGUKICAgICBBU1NFUlQoYmxvY2stPmNhbkJlUmVjeWNsZWQoKSk7CiAgICAgQVNTRVJUKCFi
bG9jay0+bV9pc1Bpbm5lZCk7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIo
Jm1fdG9TcGFjZUxvY2spOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9j
ayk7CiAgICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsKICAgICAgICAgaWYgKGNvbGxl
Y3Rpb25UeXBlID09IEVkZW5Db2xsZWN0aW9uKQogICAgICAgICAgICAgbV9uZXdHZW4uZnJvbVNw
YWNlLT5yZW1vdmUoYmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZEZpbmlzaE1h
cmtpbgogdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0Q29weWluZygpCiB7CiAgICAg
ewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fY29weUxvY2spOworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CiAgICAgICAgIGlmIChtX3ZtLT5oZWFwLm9w
ZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikgewogICAgICAgICAgICAgLy8g
UmVzZXQgdGhlIHZlY3RvciB0byBiZSBlbXB0eSwgYnV0IGRvbid0IHRocm93IGF3YXkgdGhlIGJh
Y2tpbmcgc3RvcmUuCiAgICAgICAgICAgICBtX2Jsb2Nrc1RvQ29weS5zaHJpbmsoMCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAko
cmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRT
aGFyZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCiAjaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6bXV0ZXggbV9vcGFxdWVS
b290c011dGV4OwogICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3BhcXVlUm9vdHM7CiAKLSAgICBTcGlu
TG9jayBtX2NvcHlMb2NrOworICAgIExvY2sgbV9jb3B5TG9jazsKICAgICBWZWN0b3I8Q29waWVk
QmxvY2sqPiBtX2Jsb2Nrc1RvQ29weTsKICAgICBzaXplX3QgbV9jb3B5SW5kZXg7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKQEAgLTExNSw3ICsx
MTUsNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmdldE5l
eHRCbG9ja3NUb0NvcHkoc2l6ZV90JiBzdGFydCwgc2l6ZV90JiBlbmQpCiB7Ci0gICAgU3Bpbkxv
Y2tIb2xkZXIgbG9ja2VyKCZtX2NvcHlMb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9j
b3B5TG9jayk7CiAgICAgc3RhcnQgPSBtX2NvcHlJbmRleDsKICAgICBlbmQgPSBzdGQ6Om1pbiht
X2Jsb2Nrc1RvQ29weS5zaXplKCksIG1fY29weUluZGV4ICsgc19ibG9ja0ZyYWdtZW50TGVuZ3Ro
KTsKICAgICBtX2NvcHlJbmRleCA9IGVuZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0xpc3RhYmxlSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0xpc3RhYmxlSGFuZGxlci5oCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9MaXN0YWJsZUhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NyArMjMsNyBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVz
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgdm9pZCBhZGRUaHJlYWRTYWZlKFQqIGhhbmRsZXIpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICAgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogICAgICAgICAgICAgYWRkTm90VGhyZWFkU2FmZSho
YW5kbGVyKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9maXJzdCA9IGhhbmRsZXI7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIFNwaW5Mb2NrIG1fbG9jazsKKyAgICAgICAgTG9jayBtX2xvY2s7CiAgICAgICAgIFQq
IG1fZmlyc3Q7CiAgICAgfTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hY2hpbmVTdGFja01hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTY4LDggKzU2OCw4IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhl
clRocmVhZFMKIHsKICAgICAvLyBQcmV2ZW50IHR3byBWTXMgZnJvbSBzdXNwZW5kaW5nIGVhY2gg
b3RoZXIncyB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUsCiAgICAgLy8gd2hpY2ggY2FuIGNhdXNl
IGRlYWRsb2NrOiA8cmRhcjovL3Byb2JsZW0vMjAzMDA4NDI+LgotICAgIHN0YXRpYyBTdGF0aWNT
cGluTG9jayBtdXRleDsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljU3BpbkxvY2s+IGxvY2so
bXV0ZXgpOworICAgIHN0YXRpYyBTdGF0aWNMb2NrIG11dGV4OworICAgIHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNMb2NrPiBsb2NrKG11dGV4KTsKIAogICAgICpzaXplID0gMDsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDE4ODAxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDcgQEAgaW5saW5lIHZvaWQgU2xv
dFZpc2l0b3I6OmNvcHlMYXRlcihKU0NlbAogCiAgICAgQVNTRVJUKGhlYXAoKS0+bV9zdG9yYWdl
U3BhY2UuY29udGFpbnMoYmxvY2spKTsKIAotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmYmxv
Y2stPndvcmtMaXN0TG9jaygpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmYmxvY2stPndvcmtM
aXN0TG9jaygpKTsKICAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVs
bENvbGxlY3Rpb24gfHwgYmxvY2stPnNob3VsZFJlcG9ydExpdmVCeXRlcyhsb2NrZXIsIG93bmVy
KSkgewogICAgICAgICBtX2J5dGVzQ29waWVkICs9IGJ5dGVzOwogICAgICAgICBibG9jay0+cmVw
b3J0TGl2ZUJ5dGVzKGxvY2tlciwgb3duZXIsIHRva2VuLCBieXRlcyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmNwcAkocmV2aXNpb24g
MTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJTb3VyY2VQcm92
aWRlci5oIgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TcGluTG9j
ay5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ0LDExICs0NCwxMSBAQCBTb3VyY2VQcm92aWRlcjo6
flNvdXJjZVByb3ZpZGVyKCkKIHsKIH0KIAotc3RhdGljIFN0YXRpY1NwaW5Mb2NrIHByb3ZpZGVy
SWRMb2NrOworc3RhdGljIFN0YXRpY0xvY2sgcHJvdmlkZXJJZExvY2s7CiAKIHZvaWQgU291cmNl
UHJvdmlkZXI6OmdldElEKCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrKCZwcm92aWRlcklk
TG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrKCZwcm92aWRlcklkTG9jayk7CiAgICAgaWYgKCFt
X2lkKSB7CiAgICAgICAgIHN0YXRpYyBpbnRwdHJfdCBuZXh0UHJvdmlkZXJJRCA9IDA7CiAgICAg
ICAgIG1faWQgPSArK25leHRQcm92aWRlcklEOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAkocmV2aXNpb24gMTg4MDE4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgUHJvZmlsZXIgewogCiBzdGF0aWMgc3RkOjphdG9taWM8aW50PiBkYXRhYmFzZUNvdW50ZXI7
CiAKLXN0YXRpYyBTdGF0aWNTcGluTG9jayByZWdpc3RyYXRpb25Mb2NrOworc3RhdGljIFN0YXRp
Y0xvY2sgcmVnaXN0cmF0aW9uTG9jazsKIHN0YXRpYyBzdGQ6OmF0b21pYzxpbnQ+IGRpZFJlZ2lz
dGVyQXRFeGl0Owogc3RhdGljIERhdGFiYXNlKiBmaXJzdERhdGFiYXNlOwogCkBAIC0xMzgsMTQg
KzEzOCwxNCBAQCB2b2lkIERhdGFiYXNlOjphZGREYXRhYmFzZVRvQXRFeGl0KCkKICAgICBpZiAo
KytkaWRSZWdpc3RlckF0RXhpdCA9PSAxKQogICAgICAgICBhdGV4aXQoYXRFeGl0Q2FsbGJhY2sp
OwogICAgIAotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKKyAg
ICBMb2NrSG9sZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKICAgICBtX25leHRSZWdpc3Rl
cmVkRGF0YWJhc2UgPSBmaXJzdERhdGFiYXNlOwogICAgIGZpcnN0RGF0YWJhc2UgPSB0aGlzOwog
fQogCiB2b2lkIERhdGFiYXNlOjpyZW1vdmVEYXRhYmFzZUZyb21BdEV4aXQoKQogewotICAgIFNw
aW5Mb2NrSG9sZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKKyAgICBMb2NrSG9sZGVyIGhv
bGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKICAgICBmb3IgKERhdGFiYXNlKiogY3VycmVudCA9ICZm
aXJzdERhdGFiYXNlOyAqY3VycmVudDsgY3VycmVudCA9ICYoKmN1cnJlbnQpLT5tX25leHRSZWdp
c3RlcmVkRGF0YWJhc2UpIHsKICAgICAgICAgaWYgKCpjdXJyZW50ICE9IHRoaXMpCiAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIERhdGFiYXNlOjpwZXJmb3Jt
QXRFeGl0U2F2ZSgpIGNvbnN0CiAKIERhdGFiYXNlKiBEYXRhYmFzZTo6cmVtb3ZlRmlyc3RBdEV4
aXREYXRhYmFzZSgpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVyKHJlZ2lzdHJhdGlvbkxv
Y2spOworICAgIExvY2tIb2xkZXIgaG9sZGVyKHJlZ2lzdHJhdGlvbkxvY2spOwogICAgIERhdGFi
YXNlKiByZXN1bHQgPSBmaXJzdERhdGFiYXNlOwogICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAg
Zmlyc3REYXRhYmFzZSA9IHJlc3VsdC0+bV9uZXh0UmVnaXN0ZXJlZERhdGFiYXNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJl
dmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiSlND
SlNWYWx1ZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxl
ci5oIgotI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBACisyMDE1LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgTGlnaHR3ZWlnaHQgbG9ja3Mgc2hvdWxkIGJlIGFkYXB0
aXZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1
NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGNv
bW1vbiBpZGlvbSBpbiBXZWJLaXQgaXMgdG8gdXNlIHNwaW5sb2Nrcy4gV2UgdXNlIHRoZW0gYmVj
YXVzZSB0aGUgbG9jayBhY3F1aXNpdGlvbgorICAgICAgICBvdmVyaGVhZCBpcyBsb3dlciB0aGFu
IHN5c3RlbSBsb2NrcyBhbmQgYmVjYXVzZSB0aGV5IHRha2UgZHJhbWF0aWNhbGx5IGxlc3Mgc3Bh
Y2UgdGhhbiBzeXN0ZW0KKyAgICAgICAgbG9ja3MuIFRoZSBzcGVlZCBhbmQgc3BhY2UgYWR2YW50
YWdlcyBvZiBzcGlubG9ja3MgY2FuIGJlIGFzdG9uaXNoaW5nOiBhbiB1bmNvbnRlbmRlZCBzcGlu
bG9jaworICAgICAgICBhY3F1aXJlIGlzIHVwIHRvIDEweCBmYXN0ZXIgYW5kIHVuZGVyIG1pY3Jv
Y29udGVudGlvbiAtIHNob3J0IGNyaXRpY2FsIHNlY3Rpb24gd2l0aCB0d28gb3IKKyAgICAgICAg
bW9yZSB0aHJlYWRzIHRha2luZyB0dXJucyAtIHNwaW5sb2NrcyBhcmUgdXAgdG8gMTAweCBmYXN0
ZXIuIFNwaW5sb2NrcyB0YWtlIG9ubHkgMSBieXRlIG9yIDQKKyAgICAgICAgYnl0ZXMgZGVwZW5k
aW5nIG9uIHRoZSBmbGF2b3IsIHdoaWxlIHN5c3RlbSBsb2NrcyB0YWtlIDY0IGJ5dGVzIG9yIG1v
cmUuIENsZWFybHksIFdlYktpdAorICAgICAgICBzaG91bGQgY29udGludWUgdG8gYXZvaWQgc3lz
dGVtIGxvY2tzIC0gdGhleSBhcmUganVzdCBmYXIgdG9vIHNsb3cgYW5kIGZhciB0b28gYmlnLgor
CisgICAgICAgIEJ1dCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGlzIGlkaW9tLiBTeXN0ZW0g
bG9jayBpbXBsZW1lbnRhdGlvbnMgd2lsbCBzbGVlcCBhIHRocmVhZCB3aGVuCisgICAgICAgIGl0
IGF0dGVtcHRzIHRvIGFjcXVpcmUgYSBsb2NrIHRoYXQgaXMgaGVsZCwgd2hpbGUgc3BpbmxvY2tz
IHdpbGwgY2F1c2UgdGhlIHRocmVhZCB0byBidXJuIENQVS4KKyAgICAgICAgSW4gV2ViS2l0IHNw
aW5sb2NrcywgdGhlIHRocmVhZCB3aWxsIHJlcGVhdGVkbHkgY2FsbCBzY2hlZF95aWVsZCgpLiBU
aGlzIGlzIGF3ZXNvbWUgZm9yCisgICAgICAgIG1pY3JvY29udGVudGlvbiwgYnV0IGF3ZnVsIHdo
ZW4gdGhlIGxvY2sgd2lsbCBub3QgYmUgcmVsZWFzZWQgZm9yIGEgd2hpbGUuIEluIGZhY3QsIHdo
ZW4KKyAgICAgICAgY3JpdGljYWwgc2VjdGlvbnMgdGFrZSB0ZW5zIG9mIG1pY3Jvc2Vjb25kcyBv
ciBtb3JlLCB0aGUgQ1BVIHRpbWUgY29zdCBvZiBvdXIgc3BpbmxvY2tzIGlzCisgICAgICAgIGFs
bW9zdCAxMDB4IG1vcmUgdGhhbiB0aGUgQ1BVIHRpbWUgY29zdCBvZiBhIHN5c3RlbSBsb2NrLiBU
aGlzIGNhc2UgZG9lc24ndCBhcmlzZSB0b28KKyAgICAgICAgZnJlcXVlbnRseSBpbiBvdXIgY3Vy
cmVudCB1c2VzIG9mIHNwaW5sb2NrcywgYnV0IHRoYXQncyBwcm9iYWJseSBiZWNhdXNlIHJpZ2h0
IG5vdyB0aGVyZSBhcmUKKyAgICAgICAgcGxhY2VzIHdoZXJlIHdlIG1ha2UgYSBjb25zY2lvdXMg
ZGVjaXNpb24gdG8gdXNlIHN5c3RlbSBsb2NrcyAtIGV2ZW4gdGhvdWdoIHRoZXkgdXNlIG1vcmUK
KyAgICAgICAgbWVtb3J5IGFuZCBhcmUgc2xvd2VyIC0gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRv
IHdhc3RlIENQVSBjeWNsZXMgd2hlbiBhIHRocmVhZCBoYXMgdG8gd2FpdCBhCisgICAgICAgIHdo
aWxlIHRvIGFjcXVpcmUgdGhlIGxvY2suCisKKyAgICAgICAgVGhlIHNvbHV0aW9uIGlzIHRvIGp1
c3QgaW1wbGVtZW50IGEgbW9kZXJuIGFkYXB0aXZlIG11dGV4IGluIFdURi4gTHVja2lseSwgdGhp
cyBpc24ndCBhIG5ldworICAgICAgICBjb25jZXB0LiBUaGlzIHBhdGNoIGltcGxlbWVudHMgYSBt
dXRleCB0aGF0IGlzIHJlbWluaXNjZW50IG9mIHRoZSBraW5kcyBvZiBsb3ctb3ZlcmhlYWQgbG9j
a3MKKyAgICAgICAgdGhhdCBKVk1zIHVzZS4gVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBoZXJl
IGlzIGluc3BpcmVkIGJ5IHNvbWUgb2YgdGhlIGlkZWFzIGZyb20gWzFdLiBUaGUKKyAgICAgICAg
aWRlYSBpcyBzaW1wbGU6IHRoZSBmYXN0IHBhdGggaXMgYW4gaW5saW5lZCBDQVMgdG8gaW1tZWRp
YXRlbHkgYWNxdWlyZSBhIGxvY2sgdGhhdCBpc24ndCBoZWxkLAorICAgICAgICB0aGUgc2xvdyBw
YXRoIHRyaWVzIHNvbWUgbnVtYmVyIG9mIHNwaW5zIHRvIGFjcXVpcmUgdGhlIGxvY2ssIGFuZCBp
ZiB0aGF0IGZhaWxzLCB0aGUgdGhyZWFkIGlzCisgICAgICAgIHB1dCBvbiBhIHF1ZXVlIGFuZCBw
dXQgdG8gc2xlZXAuIFRoZSBxdWV1ZSBpcyBtYWRlIHVwIG9mIHN0YXRpY2FsbHkgYWxsb2NhdGVk
IHRocmVhZCBub2RlcyBhbmQKKyAgICAgICAgdGhlIGxvY2sgaXRzZWxmIGlzIGEgdGFnZ2VkIHBv
aW50ZXI6IGVpdGhlciBpdCBpcyBqdXN0IGJpdHMgdGVsbGluZyB1cyB0aGUgY29tcGxldGUgbG9j
ayBzdGF0ZQorICAgICAgICAobm90IGhlbGQgb3IgaGVsZCkgb3IgaXQgaXMgYSBwb2ludGVyIHRv
IHRoZSBoZWFkIG9mIGEgcXVldWUgb2YgdGhyZWFkcyB3YWl0aW5nIHRvIGFjcXVpcmUgdGhlCisg
ICAgICAgIGxvY2suIFRoaXMgYXBwcm9hY2ggZ2l2ZXMgV1RGOjpMb2NrIHRocmVlIGRpZmZlcmVu
dCBsZXZlbHMgb2YgYWRhcHRhdGlvbjogYW4gaW5saW5lZCBmYXN0IHBhdGgKKyAgICAgICAgaWYg
dGhlIGxvY2sgaXMgbm90IGNvbnRlbmRlZCwgYSBzaG9ydCBidXJzdCBvZiBzcGlubmluZyBmb3Ig
bWljcm9jb250ZW50aW9uLCBhbmQgYSBmdWxsLWJsb3duCisgICAgICAgIHF1ZXVlIGZvciBjcml0
aWNhbCBzZWN0aW9ucyB0aGF0IGFyZSBoZWxkIGZvciBhIGxvbmcgdGltZS4KKworICAgICAgICBP
biBhIGxvY2tpbmcgbWljcm9iZW5jaG1hcmssIHRoaXMgbmV3IExvY2sgZXhoaWJpdHMgdGhlIGZv
bGxvd2luZyBwZXJmb3JtYW5jZQorICAgICAgICBjaGFyYWN0ZXJpc3RpY3M6CisKKyAgICAgICAg
LSBMb2NrK3VubG9jayBvbiBhbiB1bmNvbnRlbmRlZCBuby1vcCBjcml0aWNhbCBzZWN0aW9uOiAy
eCBzbG93ZXIgdGhhbiBTcGluTG9jayBhbmQgM3ggZmFzdGVyCisgICAgICAgICAgdGhhbiBhIHN5
c3RlbSBtdXRleC4KKworICAgICAgICAtIExvY2srdW5sb2NrIG9uIGEgY29udGVuZGVkIG5vLW9w
IGNyaXRpY2FsIHNlY3Rpb246IDJ4IHNsb3dlciB0aGFuIFNwaW5Mb2NrIGFuZCAxMDB4IGZhc3Rl
cgorICAgICAgICAgIHRoYW4gYSBzeXN0ZW0gbXV0ZXguCisKKyAgICAgICAgLSBDUFUgdGltZSBz
cGVudCBpbiBsb2NrKCkgb24gYSBsb2NrIGhlbGQgZm9yIGEgd2hpbGU6IHNhbWUgYXMgc3lzdGVt
IG11dGV4LCA5MHggbGVzcyB0aGFuIGEKKyAgICAgICAgICBTcGluTG9jay4KKworICAgICAgICAt
IE1lbW9yeSB1c2FnZTogc2l6ZW9mKHZvaWQqKSwgc28gb24gNjQtYml0IGl0J3MgOHggbGVzcyB0
aGFuIGEgc3lzdGVtIG11dGV4IGJ1dCAyeCB3b3JzZSB0aGFuCisgICAgICAgICAgYSBTcGluTG9j
ay4KKworICAgICAgICBUaGlzIHBhdGNoIHJlcGxhY2VzIGFsbCB1c2VzIG9mIFNwaW5Mb2NrIHdp
dGggTG9jaywgc2luY2Ugb3VyIGNyaXRpY2FsIHNlY3Rpb25zIGFyZSBub3QKKyAgICAgICAgbm8t
b3BzIHNvIGlmIHlvdSBkbyBiYXNpY2FsbHkgYW55dGhpbmcgaW4geW91ciBjcml0aWNhbCBzZWN0
aW9uLCB0aGUgTG9jayBvdmVyaGVhZCB3aWxsIGJlCisgICAgICAgIGludmlzaWJsZS4gQWxzbywg
aW4gYWxsIHBsYWNlcyB3aGVyZSB3ZSB1c2VkIFNwaW5Mb2NrLCB3ZSBjb3VsZCB0b2xlcmF0ZSA4
IGJ5dGVzIG9mIG92ZXJoZWFkCisgICAgICAgIGluc3RlYWQgb2YgNC4gUGVyZm9ybWFuY2UgYmVu
Y2htYXJraW5nIHVzaW5nIEpTQyBtYWNyb2JlbmNobWFya3Mgc2hvd3Mgbm8gZGlmZmVyZW5jZSwg
d2hpY2ggaXMKKyAgICAgICAgYXMgaXQgc2hvdWxkIGJlOiB0aGUgcHVycG9zZSBvZiB0aGlzIGNo
YW5nZSBpcyB0byByZWR1Y2UgQ1BVIHRpbWUgd2FzdGVkLCBub3Qgd2FsbGNsb2NrIHRpbWUuCisg
ICAgICAgIFRoaXMgcGF0Y2ggZG9lc24ndCByZXBsYWNlIGFueSB1c2VzIG9mIEJ5dGVTcGluTG9j
aywgc2luY2Ugd2UgZXhwZWN0IHRoYXQgdGhlIHNwYWNlIGJlbmVmaXRzCisgICAgICAgIG9mIGhh
dmluZyBhIGxvY2sgdGhhdCBqdXN0IHVzZXMgYSBieXRlIGFyZSBzdGlsbCBiZXR0ZXIgdGhhbiB0
aGUgQ1BVIHdhc3RhZ2UgYmVuZWZpdHMgb2YKKyAgICAgICAgTG9jay4gQnV0LCB0aGlzIHdvcmsg
d2lsbCBlbmFibGUgc29tZSBmdXR1cmUgd29yayB0byBjcmVhdGUgbG9ja3MgdGhhdCB3aWxsIGZp
dCBpbiBqdXN0IDEuNgorICAgICAgICBiaXRzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ3NjY1LgorCisgICAgICAgIFsxXSBodHRwOi8vd3d3LmZpbHBpemxvLmNv
bS9wYXBlcnMvcGl6bG8tcHBwajIwMTEtZmFibGUucGRmCisKKyAgICAgICAgKiBXVEYudmN4cHJv
ai9XVEYudmN4cHJvajoKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBiZW5jaG1hcmtzOiBBZGRlZC4KKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tT
cGVlZFRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHd0Zi9DTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoV1RG
OjpMb2NrQmFzZTo6bG9ja1Nsb3cpOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6dW5sb2NrU2xv
dyk6CisgICAgICAgICogd3RmL0xvY2suaDogQWRkZWQuCisgICAgICAgIChXVEY6OkxvY2tCYXNl
Ojpsb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9jayk6CisgICAgICAgIChXVEY6
OkxvY2tCYXNlOjppc0hlbGQpOgorICAgICAgICAoV1RGOjpMb2NrOjpMb2NrKToKKyAgICAgICAg
KiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OnJl
bGVhc2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmspOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChXVEY6Ok1ldGFB
bGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRv
cjo6YWRkRnJlc2hGcmVlU3BhY2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkZWJ1
Z0ZyZWVTcGFjZVNpemUpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmg6CisgICAgICAg
ICogd3RmL1NwaW5Mb2NrLmg6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoK
KyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuY3BwOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuY3BwOgor
ICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmdUYWJsZUxvY2tlcjo6QXRvbWljU3RyaW5nVGFibGVM
b2NrZXIpOgorCiAyMDE1LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbCBvdXQgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvMTg3OTcyLgpJbmRleDogU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCShyZXZpc2lv
biAxODgwMTgpCisrKyBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzEsNCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
dXRmLTgiPz4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8UHJvamVj
dCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCIgeG1sbnM9Imh0dHA6
Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVt
R3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CiAgICAgPFByb2plY3RDb25maWd1
cmF0aW9uIEluY2x1ZGU9IkRlYnVnU3VmZml4fFdpbjMyIj4KQEAgLTEwNiw2ICsxMDYsNyBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXGdsaWJcR1RocmVhZFNhZmVNYWluTG9vcFNv
dXJjZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcR3JlZ29yaWFuRGF0
ZVRpbWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEhhc2hUYWJsZS5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcTG9jay5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcTWFpblRocmVhZC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlx3dGZcTUQ1LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHd0ZlxNZWRpYVRpbWUuY3BwIiAvPgpAQCAtMjIzLDYgKzIyNCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlx3dGZcSXRlcmF0b3JBZGFwdG9ycy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cd3RmXEl0ZXJhdG9yUmFuZ2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxMaXN0SGFzaFNldC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cd3RmXExvY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxMb2NrZXIu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxNYWluVGhyZWFkLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTWFsbG9jUHRyLmgiIC8+CkluZGV4OiBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4ODAxOCkKKysr
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDggQEAKIAkJMEZEODFBQzUxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRW
ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0
cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5j
cHAgKi87IH07CiAJCTBGRERCRkE4MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVh
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJG
QTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi87IH07CisJCTBGRTE2
NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNw
cCAqLzsgfTsKKwkJMEZFMTY0NkIxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY5MUI2RkZDOTYwMDQw
MEU3QyAvKiBMb2NrLmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55
UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkxNDAyMkY0
MTE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxp
YmJtYWxsb2MuYSAqLzsgfTsKIAkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYx
MUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovOyB9OwpAQCAtMzIxLDYgKzMyMyw4
IEBACiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50
U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1By
aW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTYxNjY2
REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkUxNjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1
MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQw
MjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFs
bG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC03NzAsNiArNzc0
LDggQEAKIAkJCQk3Q0REN0ZGOTE4NkQyQTU0MDA3NDMzQ0QgLyogSXRlcmF0b3JSYW5nZS5oICov
LAogCQkJCUE3MERBMDgzMTc5OUYwNEQwMDUyOUE5QiAvKiBMaXN0RHVtcC5oICovLAogCQkJCUE4
QTQ3MkMxMTUxQTgyNUEwMDQxMjNGRiAvKiBMaXN0SGFzaFNldC5oICovLAorCQkJCTBGRTE2NDY4
MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLywKKwkJCQkwRkUxNjQ2OTFCNkZGQzk2MDA0
MDBFN0MgLyogTG9jay5oICovLAogCQkJCUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBMb2Nr
ZXIuaCAqLywKIAkJCQkxNDQ3QUVDODE4RkNFNTk0MDBCM0Q3RkYgLyogbWJtYWxsb2MuY3BwICov
LAogCQkJCUE4QTQ3MkNBMTUxQTgyNUIwMDQxMjNGRiAvKiBNRDUuY3BwICovLApAQCAtMTIwNiw2
ICsxMjEyLDcgQEAKIAkJCQlBOEE0NzQ2QTE1MUE4MjVCMDA0MTIzRkYgLyogVVRGOC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDczQjkxNTFBODI1QjAwNDEyM0ZGIC8qIHV0aWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzQ3RDE1MUE4MjVCMDA0MTIzRkYgLyogVmFsdWVDaGVjay5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFMTY0NkIxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDdFMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDdGMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRy
U2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTEzMzcsNiArMTM0NCw3IEBACiAJCQkJQThBNDczOUUx
NTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDcz
QTAxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVNYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
QTQ3M0EyMTUxQTgyNUIwMDQxMjNGRiAvKiBEZWNpbWFsTnVtYmVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4QTQ3M0FFMTUxQTgyNUIwMDQxMjNGRiAvKiBkaXktZnAuY2MgaW4gU291cmNlcyAq
LywKIAkJCQlBOEE0NzNCMDE1MUE4MjVCMDA0MTIzRkYgLyogZG91YmxlLWNvbnZlcnNpb24uY2Mg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNCQTE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSB7CisKK3Vuc2lnbmVkIG51bVRocmVhZEdy
b3VwczsKK3Vuc2lnbmVkIG51bVRocmVhZHNQZXJHcm91cDsKK3Vuc2lnbmVkIHdvcmtQZXJDcml0
aWNhbFNlY3Rpb247Cit1bnNpZ25lZCBudW1Ob2lzZVRocmVhZHM7Cit1bnNpZ25lZCBudW1JdGVy
YXRpb25zOworICAgIAordm9pZCB1c2FnZSgpCit7CisgICAgcHJpbnRmKCJVc2FnZTogTG9ja1Nw
ZWVkVGVzdCBzcGlubG9ja3xsb2NrfG11dGV4fGFsbCA8bnVtIHRocmVhZCBncm91cHM+IDxudW0g
dGhyZWFkcyBwZXIgZ3JvdXA+IDx3b3JrIHBlciBjcml0aWNhbCBzZWN0aW9uPiA8bnVtIG5vaXNl
IHRocmVhZHM+IDxudW0gaXRlcmF0aW9ucz5cbiIpOworICAgIGV4aXQoMSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIExvY2tUeXBlPgordm9pZCBydW5CZW5jaG1hcmsoY29uc3QgY2hhciogbmFt
ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9ja1R5cGVbXT4gbG9ja3MgPSBzdGQ6Om1ha2Vf
dW5pcXVlPExvY2tUeXBlW10+KG51bVRocmVhZEdyb3Vwcyk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PGRvdWJsZVtdPiB3b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8ZG91YmxlW10+KG51bVRocmVhZEdy
b3Vwcyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9
IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1UaHJlYWRHcm91cHMgKiBu
dW1UaHJlYWRzUGVyR3JvdXApOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRJZGVudGlmaWVy
W10+IG5vaXNlVGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihu
dW1Ob2lzZVRocmVhZHMpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxkb3VibGVbXT4gbm9pc2VDb3Vu
dHMgPSBzdGQ6Om1ha2VfdW5pcXVlPGRvdWJsZVtdPihudW1Ob2lzZVRocmVhZHMpOworCisgICAg
dm9sYXRpbGUgYm9vbCBzaG91bGRTdG9wID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCB0aHJl
YWRJbmRleCA9IG51bU5vaXNlVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKKyAgICAgICAgbm9p
c2VDb3VudHNbdGhyZWFkSW5kZXhdID0gMDsKKyAgICAgICAgbm9pc2VUaHJlYWRzW3RocmVhZElu
ZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICJOb2lzZSBUaHJlYWQiLAorICAgICAg
ICAgICAgWyZzaG91bGRTdG9wLCAmbm9pc2VDb3VudHMsIHRocmVhZEluZGV4XSAoKSB7CisgICAg
ICAgICAgICAgICAgd2hpbGUgKCFzaG91bGRTdG9wKQorICAgICAgICAgICAgICAgICAgICBub2lz
ZUNvdW50c1t0aHJlYWRJbmRleF0rKzsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIGRv
dWJsZSBiZWZvcmUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOworICAgIAorICAg
IGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRleCA9IG51bVRocmVhZEdyb3VwczsgdGhyZWFk
R3JvdXBJbmRleC0tOykgeworICAgICAgICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSA9IDA7CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsg
dGhyZWFkSW5kZXgtLTspIHsKKyAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAq
IG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAg
ICAgICAgICAgICAiQmVuY2htYXJrIHRocmVhZCIsCisgICAgICAgICAgICAgICAgW3RocmVhZEdy
b3VwSW5kZXgsICZsb2NrcywgJndvcmRzXSAoKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bUl0ZXJhdGlvbnM7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2tzW3RocmVhZEdyb3VwSW5kZXhdLmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IHdvcmtQZXJDcml0aWNhbFNlY3Rpb247IGotLTspIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSsrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdICo9IDEuMDE7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBsb2Nr
c1t0aHJlYWRHcm91cEluZGV4XS51bmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCB0
aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFk
SW5kZXgtLTspCisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbdGhyZWFk
SW5kZXhdKTsKKyAgICBzaG91bGRTdG9wID0gdHJ1ZTsKKyAgICBkb3VibGUgbm9pc2VDb3VudCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bU5vaXNlVGhyZWFkczsgdGhy
ZWFkSW5kZXgtLTspIHsKKyAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obm9pc2VUaHJl
YWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgIG5vaXNlQ291bnQgKz0gbm9pc2VDb3VudHNbdGhy
ZWFkSW5kZXhdOworICAgIH0KKworICAgIGRvdWJsZSBhZnRlciA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZU1TKCk7CisKKyAgICBwcmludGYoIiVzOiAlLjNsZiBtcywgJS4wbGYgbm9pc2Uu
XG4iLCBuYW1lLCBhZnRlciAtIGJlZm9yZSwgbm9pc2VDb3VudCk7Cit9CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAg
V1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgCisgICAgaWYgKGFyZ2MgIT0gNworICAg
ICAgICB8fCBzc2NhbmYoYXJndlsyXSwgIiV1IiwgJm51bVRocmVhZEdyb3VwcykgIT0gMQorICAg
ICAgICB8fCBzc2NhbmYoYXJndlszXSwgIiV1IiwgJm51bVRocmVhZHNQZXJHcm91cCkgIT0gMQor
ICAgICAgICB8fCBzc2NhbmYoYXJndls0XSwgIiV1IiwgJndvcmtQZXJDcml0aWNhbFNlY3Rpb24p
ICE9IDEKKyAgICAgICAgfHwgc3NjYW5mKGFyZ3ZbNV0sICIldSIsICZudW1Ob2lzZVRocmVhZHMp
ICE9IDEKKyAgICAgICAgfHwgc3NjYW5mKGFyZ3ZbNl0sICIldSIsICZudW1JdGVyYXRpb25zKSAh
PSAxKQorICAgICAgICB1c2FnZSgpOworCisgICAgYm9vbCBkaWRSdW4gPSBmYWxzZTsKKyAgICBp
ZiAoIXN0cmNtcChhcmd2WzFdLCAic3BpbmxvY2siKSB8fCAhc3RyY21wKGFyZ3ZbMV0sICJhbGwi
KSkgeworICAgICAgICBydW5CZW5jaG1hcms8U3BpbkxvY2s+KCJTcGluTG9jayIpOworICAgICAg
ICBkaWRSdW4gPSB0cnVlOworICAgIH0KKyAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAibG9jayIp
IHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CisgICAgICAgIHJ1bkJlbmNobWFyazxMb2Nr
PigiV1RGIExvY2siKTsKKyAgICAgICAgZGlkUnVuID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFz
dHJjbXAoYXJndlsxXSwgIm11dGV4IikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKKyAg
ICAgICAgcnVuQmVuY2htYXJrPE11dGV4PigiUGxhdGZvcm0gTXV0ZXgiKTsKKyAgICAgICAgZGlk
UnVuID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWRpZFJ1bikKKyAgICAgICAgdXNhZ2UoKTsK
KworICAgIHJldHVybiAwOworfQpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4
ODAxOCkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIEl0ZXJhdG9yQWRhcHRvcnMuaAog
ICAgIEl0ZXJhdG9yUmFuZ2UuaAogICAgIExpc3RIYXNoU2V0LmgKKyAgICBMb2NrLmgKICAgICBM
b2NrZXIuaAogICAgIE1ENS5oCiAgICAgTWFpblRocmVhZC5oCkBAIC0xNTYsNiArMTU3LDcgQEAg
c2V0KFdURl9TT1VSQ0VTCiAgICAgRnVuY3Rpb25EaXNwYXRjaGVyLmNwcAogICAgIEdyZWdvcmlh
bkRhdGVUaW1lLmNwcAogICAgIEhhc2hUYWJsZS5jcHAKKyAgICBMb2NrLmNwcAogICAgIE1ENS5j
cHAKICAgICBNYWluVGhyZWFkLmNwcAogICAgIE1lZGlhVGltZS5jcHAKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvY2suaCIKKworI2luY2x1ZGUg
IlRocmVhZFNwZWNpZmljLmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0aXZlcy5oIgorI2lu
Y2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHRocmVhZD4KKworbmFtZXNwYWNlIFdURiB7CisKK25h
bWVzcGFjZSB7CisKKy8vIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgc2VydmVzIHRocmVlIHB1cnBvc2Vz
OgorLy8KKy8vIDEpIEEgcGFya2luZyBtZWNoYW5pc20gZm9yIHRocmVhZHMgdGhhdCBnbyB0byBz
bGVlcC4gVGhhdCBpbnZvbHZlcyBqdXN0IGEgc3lzdGVtIG11dGV4IGFuZAorLy8gICAgY29uZGl0
aW9uIHZhcmlhYmxlLgorLy8KKy8vIDIpIEEgcXVldWUgbm9kZSBmb3Igd2hlbiBhIHRocmVhZCBp
cyBvbiBzb21lIExvY2sncyBxdWV1ZS4KKy8vCisvLyAzKSBUaGUgcXVldWUgaGVhZC4gVGhpcyBp
cyBraW5kIG9mIGZ1bmt5LiBXaGVuIGEgdGhyZWFkIGlzIHRoZSBoZWFkIG9mIGEgcXVldWUsIGl0
IGFsc28gc2VydmVzIGFzCisvLyAgICB0aGUgYmFzaWMgcXVldWUgYm9va2tlZXBpbmcgZGF0YSBz
dHJ1Y3R1cmUuIFdoZW4gYSB0aHJlYWQgaXMgZGVxdWV1ZWQsIHRoZSBuZXh0IHRocmVhZCBpbiB0
aGUKKy8vICAgIHF1ZXVlIHRha2VzIG9uIHRoZSBxdWV1ZSBoZWFkIGR1dGllcy4KK3N0cnVjdCBU
aHJlYWREYXRhIHsKKyAgICAvLyBUaGUgcGFya2luZyBtZWNoYW5pc20uCisgICAgYm9vbCBzaG91
bGRQYXJrIHsgZmFsc2UgfTsKKyAgICBzdGQ6Om11dGV4IHBhcmtpbmdMb2NrOworICAgIHN0ZDo6
Y29uZGl0aW9uX3ZhcmlhYmxlIHBhcmtpbmdDb25kaXRpb247CisKKyAgICAvLyBUaGUgcXVldWUg
bm9kZS4KKyAgICBUaHJlYWREYXRhKiBuZXh0SW5RdWV1ZSB7IG51bGxwdHIgfTsKKworICAgIC8v
IFRoZSBxdWV1ZSBpdHNlbGYuCisgICAgVGhyZWFkRGF0YSogcXVldWVUYWlsIHsgbnVsbHB0ciB9
OworfTsKKworVGhyZWFkU3BlY2lmaWM8VGhyZWFkRGF0YT4qIHRocmVhZERhdGE7CisKK1RocmVh
ZERhdGEqIG15VGhyZWFkRGF0YSgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRp
YWxpemVPbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBpbml0aWFsaXplT25jZSwK
KyAgICAgICAgW117CisgICAgICAgICAgICB0aHJlYWREYXRhID0gbmV3IFRocmVhZFNwZWNpZmlj
PFRocmVhZERhdGE+KCk7CisgICAgICAgIH0pOworCisgICAgcmV0dXJuICp0aHJlYWREYXRhOwor
fQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3co
KQoreworICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisKKyAgICAvLyBUaGlzIG1hZ2ljIG51
bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBwYXN0IEppa2VzUlZNIGV4cGVy
aW1lbnRzLgorICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQwOworICAgIAorICAgIGZv
ciAoOzspIHsKKyAgICAgICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9h
ZCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCEoY3VycmVudFdvcmRWYWx1ZSAmIGlzSGVsZEJp
dCkKKyAgICAgICAgICAgICYmIG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3Jk
VmFsdWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBpc0hlbGRCaXQpKSB7CisgICAgICAgICAgICAvLyBT
dWNjZXNzISBXZSBhY3F1aXJlZCB0aGUgbG9jay4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHF1ZXVlIGFuZCB3ZSBoYXZlbid0IHNw
dW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZCBhZ2Fpbi4KKyAgICAg
ICAgaWYgKCEoY3VycmVudFdvcmRWYWx1ZSAmIH5tYXNrKSAmJiBzcGluQ291bnQgPCBzcGluTGlt
aXQpIHsKKyAgICAgICAgICAgIHNwaW5Db3VudCsrOworICAgICAgICAgICAgc3RkOjp0aGlzX3Ro
cmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gTmVlZCB0byBwdXQgb3Vyc2VsdmVzIG9uIHRoZSBxdWV1ZS4gQ3JlYXRlIHRoZSBxdWV1
ZSBpZiBvbmUgZG9lcyBub3QgZXhpc3QuIFRoaXMgcmVxdXJpZXMKKyAgICAgICAgLy8gb3duaW5n
IHRoZSBxdWV1ZSBmb3IgYSBsaXR0bGUgYml0LiBUaGUgbG9jayB0aGF0IGNvbnRyb2xzIHRoZSBx
dWV1ZSBpcyBpdHNlbGYgYSBzcGlubG9jay4KKyAgICAgICAgLy8gQnV0IGJlZm9yZSB3ZSBhY3F1
aXJlIHRoZSBxdWV1ZSBzcGlubG9jaywgd2UgbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIFRocmVh
ZERhdGEgZm9yIHRoaXMKKyAgICAgICAgLy8gdGhyZWFkLgorICAgICAgICBUaHJlYWREYXRhKiBt
ZSA9IG15VGhyZWFkRGF0YSgpOworICAgICAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKKyAg
ICAgICAgQVNTRVJUKCFtZS0+bmV4dEluUXVldWUpOworICAgICAgICBBU1NFUlQoIW1lLT5xdWV1
ZVRhaWwpOworCisgICAgICAgIC8vIFJlbG9hZCB0aGUgY3VycmVudCB3b3JkIHZhbHVlLCBzaW5j
ZSBzb21lIHRpbWUgbWF5IGhhdmUgcGFzc2VkLgorICAgICAgICBjdXJyZW50V29yZFZhbHVlID0g
bV93b3JkLmxvYWQoKTsKKworICAgICAgICAvLyBXZSBwcm9jZWVkIG9ubHkgaWYgdGhlIHF1ZXVl
IGxvY2sgaXMgbm90IGhlbGQsIHRoZSBMb2NrIGlzIGhlbGQsIGFuZCB3ZSBzdWNjZWVkIGluCisg
ICAgICAgIC8vIGFjcXVpcmluZyB0aGUgcXVldWUgbG9jay4KKyAgICAgICAgaWYgKChjdXJyZW50
V29yZFZhbHVlICYgbG9ja2VkUXVldWVCaXQpCisgICAgICAgICAgICB8fCAhKGN1cnJlbnRXb3Jk
VmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICB8fCAhbV93b3JkLmNvbXBhcmVFeGNoYW5n
ZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwgY3VycmVudFdvcmRWYWx1ZSB8IGxvY2tlZFF1ZXVlQml0
KSkgeworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbWUtPnNob3VsZFBhcmsgPSB0cnVlOwor
CisgICAgICAgIC8vIFdlIG93biB0aGUgcXVldWUuIE5vYm9keSBjYW4gZW5xdWV1ZSBvciBkZXF1
ZXVlIHVudGlsIHdlJ3JlIGRvbmUuIEFsc28sIGl0J3Mgbm90IHBvc3NpYmxlCisgICAgICAgIC8v
IHRvIHJlbGVhc2UgdGhlIExvY2sgd2hpbGUgd2UgaG9sZCB0aGUgcXVldWUgbG9jay4KKyAgICAg
ICAgVGhyZWFkRGF0YSogcXVldWVIZWFkID0gYml0d2lzZV9jYXN0PFRocmVhZERhdGEqPihjdXJy
ZW50V29yZFZhbHVlICYgfm1hc2spOworICAgICAgICBpZiAocXVldWVIZWFkKSB7CisgICAgICAg
ICAgICAvLyBQdXQgdGhpcyB0aHJlYWQgYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUuCisgICAgICAg
ICAgICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbC0+bmV4dEluUXVldWUgPSBtZTsKKyAgICAgICAgICAg
IHF1ZXVlSGVhZC0+cXVldWVUYWlsID0gbWU7CisKKyAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhl
IHF1ZXVlIGxvY2suCisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgY3Vy
cmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGN1
cnJlbnRXb3JkVmFsdWUgJiB+bWFzayk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRX
b3JkVmFsdWUgJiBsb2NrZWRRdWV1ZUJpdCk7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQg
PSBtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhaygKKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFdvcmRWYWx1ZSwgY3VycmVudFdvcmRWYWx1ZSAmIH5sb2NrZWRRdWV1ZUJpdCk7CisgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBNYWtlIHRoaXMgdGhyZWFk
IGJlIHRoZSBxdWV1ZS1oZWFkLgorICAgICAgICAgICAgcXVldWVIZWFkID0gbWU7CisgICAgICAg
ICAgICBtZS0+cXVldWVUYWlsID0gbWU7CisKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgYSBDQVMg
bG9vcCB0byBpbnN0YWxsIHRoZSBxdWV1ZSBoZWFkLiBUaGlzIENBUyBsb29wIGlzIGp1c3QgdG8g
cHJvdGVjdCBhZ2FpbnN0CisgICAgICAgICAgICAvLyBpc0hlbGRCaXQgY2hhbmdpbmcuIFdlIGFs
c28gcmVsZWFzZSB0aGUgcXVldWUgbG9jayBoZXJlLgorICAgICAgICAgICAgZm9yICg7Oykgewor
ICAgICAgICAgICAgICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOworICAgICAg
ICAgICAgICAgIC8vIE5vYm9keSBjb3VsZCBoYXZlIGluc3RhbGxlZCBhIHF1ZXVlIGJlY2F1c2Ug
d2UgbG9ja2VkIHRoZSBxdWV1ZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoIShjdXJyZW50V29y
ZFZhbHVlICYgfm1hc2spKTsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaG9sZGluZyB0aGUg
cXVldWUgbG9jay4KKyAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGxv
Y2tlZFF1ZXVlQml0KTsKKyAgICAgICAgICAgICAgICAvLyBOb2JvZHkgY2FuIHJlbGVhc2UgdGhl
IGxvY2sgd2hpbGUgd2UgaG9sZCB0aGUgcXVldWUgbG9jay4KKyAgICAgICAgICAgICAgICBBU1NF
UlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzSGVsZEJpdCk7CisKKyAgICAgICAgICAgICAgICB1aW50
cHRyX3QgbmV3V29yZFZhbHVlID0gY3VycmVudFdvcmRWYWx1ZTsKKyAgICAgICAgICAgICAgICBu
ZXdXb3JkVmFsdWUgfD0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocXVldWVIZWFkKTsKKyAgICAg
ICAgICAgICAgICBuZXdXb3JkVmFsdWUgJj0gfmxvY2tlZFF1ZXVlQml0OworCisgICAgICAgICAg
ICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIG5l
d1dvcmRWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBldmVyeW9uZSB3aG8gYWNxdWly
ZXMgdGhlIHF1ZXVlIGxvY2sgd2lsbCBzZWUgbWUgb24gdGhlIHF1ZXVlLCBhbmQgYW55b25lIHdo
bworICAgICAgICAvLyBhY3F1aXJlcyBtZSdzIGxvY2sgd2lsbCBzZWUgdGhhdCBtZSB3YW50cyB0
byBwYXJrLiBOb3RlIHRoYXQgc2hvdWxkUGFyayBtYXkgaGF2ZSBiZWVuCisgICAgICAgIC8vIGNs
ZWFyZWQgYXMgc29vbiBhcyB0aGUgcXVldWUgbG9jayB3YXMgcmVsZWFzZWQgYWJvdmUsIGJ1dCBp
dCB3aWxsIGhhcHBlbiB3aGlsZSB0aGUKKyAgICAgICAgLy8gcmVsZWFzaW5nIHRocmVhZCBob2xk
cyBtZSdzIHBhcmtpbmdMb2NrLgorCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7CisgICAgICAgICAgICB3
aGlsZSAobWUtPnNob3VsZFBhcmspCisgICAgICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRp
b24ud2FpdChsb2NrZXIpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKCFtZS0+c2hvdWxk
UGFyayk7CisgICAgICAgIEFTU0VSVCghbWUtPm5leHRJblF1ZXVlKTsKKyAgICAgICAgQVNTRVJU
KCFtZS0+cXVldWVUYWlsKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSBjYW4gbG9vcCBh
cm91bmQgYW5kIHRyeSB0byBhY3F1aXJlIHRoZSBsb2NrIGFnYWluLgorICAgIH0KK30KKwordm9p
ZCBMb2NrQmFzZTo6dW5sb2NrU2xvdygpCit7CisgICAgLy8gSWYgdGhlIGZhc3QgcGF0aCBmYWls
ZWQsIGl0IGNhbiBvbmx5IGJlIGJlY2F1c2Ugc29tZW9uZSBwdXQgYSB0aHJlYWQgb24gdGhlIHF1
ZXVlIG9yIHRoZSBxdWV1ZQorICAgIC8vIGxvY2sgaXMgaGVsZC4gSWYgdGhlIHF1ZXVlIGxvY2sg
aXMgaGVsZCwgaXQgY2FuIG9ubHkgYmUgYmVjYXVzZSBzb21lb25lICp3aWxsKiBlbnF1ZXVlIGEg
dGhyZWFkCisgICAgLy8gb250byB0aGUgcXVldWUuCisKKyAgICAvLyBBY3F1aXJlIHRoZSBxdWV1
ZSBsb2NrLgorICAgIGZvciAoOzspIHsKKyAgICAgICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFs
dWUgPSBtX3dvcmQubG9hZCgpOworCisgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYg
aXNIZWxkQml0KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjdXJyZW50V29yZFZhbHVlICYgbG9j
a2VkUXVldWVCaXQpIHsKKyAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBxdWV1
ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGVuIHRoZXJlIG11c3QgYmUgYW4gZW50cnkgb24gdGhlIHF1
ZXVlLgorICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIH5tYXNrKTsKKworICAgICAg
ICBpZiAobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwgY3VycmVu
dFdvcmRWYWx1ZSB8IGxvY2tlZFF1ZXVlQml0KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHVpbnRwdHJfdCBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKyAgICAg
ICAgCisgICAgLy8gQWZ0ZXIgd2UgYWNxdWlyZSB0aGUgcXVldWUgbG9jaywgdGhlIExvY2sgbXVz
dCBzdGlsbCBiZSBoZWxkIGFuZCB0aGUgcXVldWUgbXVzdCBiZQorICAgIC8vIG5vbi1lbXB0eS4g
VGhlIHF1ZXVlIG11c3QgYmUgbm9uLWVtcHR5IHNpbmNlIG9ubHkgdGhlIGxvY2tTbG93KCkgbWV0
aG9kIGNvdWxkIGhhdmUgaGVsZCB0aGUKKyAgICAvLyBxdWV1ZSBsb2NrIGFuZCBpZiBpdCBkaWQg
dGhlbiBpdCBvbmx5IHJlbGVhc2VzIGl0IGFmdGVyIHB1dHRpbmcgc29tZXRoaW5nIG9uIHRoZSBx
dWV1ZS4KKyAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzSGVsZEJpdCk7CisgICAgQVNT
RVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBsb2NrZWRRdWV1ZUJpdCk7CisgICAgVGhyZWFkRGF0YSog
cXVldWVIZWFkID0gYml0d2lzZV9jYXN0PFRocmVhZERhdGEqPihjdXJyZW50V29yZFZhbHVlICYg
fm1hc2spOworICAgIEFTU0VSVChxdWV1ZUhlYWQpOworCisgICAgVGhyZWFkRGF0YSogbmV3UXVl
dWVIZWFkID0gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZTsKKyAgICAvLyBFaXRoZXIgdGhpcyB3YXMg
dGhlIG9ubHkgdGhyZWFkIG9uIHRoZSBxdWV1ZSwgaW4gd2hpY2ggY2FzZSB3ZSBkZWxldGUgdGhl
IHF1ZXVlLCBvciB0aGVyZQorICAgIC8vIGFyZSBzdGlsbCBtb3JlIHRocmVhZHMgb24gdGhlIHF1
ZXVlLCBpbiB3aGljaCBjYXNlIHdlIGNyZWF0ZSBhIG5ldyBxdWV1ZSBoZWFkLgorICAgIGlmIChu
ZXdRdWV1ZUhlYWQpCisgICAgICAgIG5ld1F1ZXVlSGVhZC0+cXVldWVUYWlsID0gcXVldWVIZWFk
LT5xdWV1ZVRhaWw7CisKKyAgICAvLyBDaGFuZ2UgdGhlIHF1ZXVlIGhlYWQsIHBvc3NpYmx5IHJl
bW92aW5nIGl0IGlmIG5ld1F1ZXVlSGVhZCBpcyBudWxsLiBUaGlzIGlzIGEgQ0FTIGxvb3AKKyAg
ICAvLyBvdXQgb2YgcGFyYW5vaWEuIEl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBzaW5jZSB0aGUgc3Rh
dGUgb2YgdGhlIGxvY2sgY2Fubm90IGNoYW5nZSByaWdodCBub3cuCisgICAgLy8gV2Ugd291bGQg
Z2V0IG5vIHBlcmZvcm1hbmNlIHdpbiBmcm9tIG1ha2luZyB0aGlzIGFueXRoaW5nIGJ1dCBhIENB
UyBsb29wLCBhbmQgaXQgd291bGQgbWFrZQorICAgIC8vIGl0IGNvbmZ1c2luZyB0byBhZGQgbW9y
ZSBiaXRzIHRvIHRoZSBsb2NrLgorICAgIGZvciAoOzspIHsKKyAgICAgICAgY3VycmVudFdvcmRW
YWx1ZSA9IG1fd29yZC5sb2FkKCk7CisKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUg
JiBpc0hlbGRCaXQpOworICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1
ZXVlQml0KTsKKyAgICAgICAgQVNTRVJUKChjdXJyZW50V29yZFZhbHVlICYgfm1hc2spID09IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KHF1ZXVlSGVhZCkpOworCisgICAgICAgIHVpbnRwdHJfdCBu
ZXdXb3JkVmFsdWUgPSBjdXJyZW50V29yZFZhbHVlOworICAgICAgICBuZXdXb3JkVmFsdWUgJj0g
fmlzSGVsZEJpdDsgLy8gUmVsZWFzZSB0aGUgTG9jay4KKyAgICAgICAgbmV3V29yZFZhbHVlICY9
IH5sb2NrZWRRdWV1ZUJpdDsgLy8gUmVsZWFzZSB0aGUgcXVldWUgbG9jay4KKyAgICAgICAgbmV3
V29yZFZhbHVlICY9IG1hc2s7IC8vIENsZWFyIG91dCB0aGUgb2xkIHF1ZXVlIGhlYWQuCisgICAg
ICAgIG5ld1dvcmRWYWx1ZSB8PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXdRdWV1ZUhlYWQp
OyAvLyBJbnN0YWxsIG5ldyBxdWV1ZSBoZWFkLgorICAgICAgICAgICAgCisgICAgICAgIGlmICht
X3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50V29yZFZhbHVlLCBuZXdXb3JkVmFsdWUp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gTm93IHRoZSBsb2NrIGlzIGF2
YWlsYWJsZSBmb3IgYWNxdWlzaXRpb24uIEJ1dCB3ZSBqdXN0IGhhdmUgdG8gd2FrZSB1cCB0aGUg
b2xkIHF1ZXVlIGhlYWQuCisgICAgLy8gQWZ0ZXIgdGhhdCwgd2UncmUgZG9uZSEKKworICAgIHF1
ZXVlSGVhZC0+bmV4dEluUXVldWUgPSBudWxscHRyOworICAgIHF1ZXVlSGVhZC0+cXVldWVUYWls
ID0gbnVsbHB0cjsKKworICAgIC8vIFdlIGRvIHRoaXMgY2FyZWZ1bGx5IGJlY2F1c2UgdGhpcyBt
YXkgcnVuIGVpdGhlciBiZWZvcmUgb3IgZHVyaW5nIHRoZSBwYXJraW5nTG9jayBjcml0aWNhbAor
ICAgIC8vIHNlY3Rpb24gaW4gbG9ja1Nsb3coKS4KKyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHF1ZXVlSGVhZC0+cGFya2luZ0xvY2spOworICAgICAg
ICBxdWV1ZUhlYWQtPnNob3VsZFBhcmsgPSBmYWxzZTsKKyAgICAgICAgLy8gVXNlIG5vdGlmeV9h
bGwoKSBvdXQgb2YgcGFyYW5vaWEuIEluIHJlYWxpdHksIG9ubHkgdGhlIGJsb2NrZWQgdGhyZWFk
IGlzIHdhaXRpbmcgb24KKyAgICAgICAgLy8gdGhpcyBjb25kaXRpb24gdmFyaWFibGUuCisgICAg
ICAgIHF1ZXVlSGVhZC0+cGFya2luZ0NvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CisgICAgfQorCisg
ICAgLy8gVGhlIG9sZCBxdWV1ZSBoZWFkIGNhbiBub3cgY29udGVuZCBmb3IgdGhlIGxvY2sgYWdh
aW4uIFdlJ3JlIGRvbmUhCit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dURi93dGYvTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgV1RGX0xvY2tfaAorI2RlZmluZSBXVEZfTG9ja19oCisKKyNpbmNsdWRlIDx3dGYv
QXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2Nr
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
Ky8vIEEgTG9jayBpcyBhIGZ1bGx5IGFkYXB0aXZlIG11dGV4IHRoYXQgZ2l2ZXMgeW91IHRoZSBi
ZXN0IG9mIFNwaW5Mb2NrIGFuZCBNdXRleC4gRm9yIHNtYWxsIGNyaXRpY2FsCisvLyBzZWN0aW9u
cyAodGhhdCB0YWtlIG5hbm9zZWNvbmRzKSwgaXQgd2lsbCB1c3VhbGx5IHBlcmZvcm0gd2l0aGlu
IDJ4IG9mIGEgU3BpbkxvY2sgaW4gYm90aCB0aGUKKy8vIGNvbnRlbmRlZCBhbmQgdW5jb250ZW5k
ZWQgY2FzZS4gV2hlbiB1c2luZyBhIE11dGV4LCBzdWNoIGNyaXRpY2FsIHNlY3Rpb25zIHRha2Ug
dXAgdG8gMTAweCBsb25nZXIKKy8vIHRoYW4gTG9jayBpbiB0aGUgY29udGVuZGVkIGNhc2UsIG9y
IDN4IGxvbmdlciB0aGFuIExvY2sgaW4gdGhlIHVuY29udGVuZGVkIGNhc2UuIEZvciBsb25nZXIK
Ky8vIGNyaXRpY2FsIHNlY3Rpb25zICh0aGF0IHRha2UgdGVucyBvZiBtaWNyb3NlY29uZHMpLCBp
dCB3aWxsIHBlcmZvcm0gYXMgd2VsbCBhcyBhIE11dGV4IGFuZCBzbGlnaHRseQorLy8gYmV0dGVy
IHRoYW4gYSBTcGluTG9jay4gQnV0LCBjcnVjaWFsbHksIGEgU3BpbkxvY2sgd2lsbCBidXJuIHVw
IHRvIDkweCBtb3JlIHRpbWUgaW4gdGhlIGtlcm5lbCBmb3IKKy8vIHN1Y2ggY3JpdGljYWwgc2Vj
dGlvbnMgdGhhbiBlaXRoZXIgTG9jayBvciBNdXRleC4gSGVuY2UsIHVzaW5nIExvY2sgd2lsbCBt
YWtlIHRoZSBjb21tb24gY2FzZSBvZgorLy8gbG9ja2luZyBwZXJmb3JtIGNsb3NlIHRvIFNwaW5M
b2NrIGZvciBhbnkgY3JpdGljYWwgc2VjdGlvbiB0aGF0IGRvZXMgbW9yZSB0aGFuIGEgZmV3IG5h
bm9zZWNvbmRzIG9mCisvLyB3b3JrIHdoaWxlIGJlaW5nIGFzIGtpbmQgdG8gdGhlIHNjaGVkdWxl
ciBmb3IgbG9uZ2VyIGNyaXRpY2FsIHNlY3Rpb25zIGFzIGEgTXV0ZXguCisvLworLy8gTGlrZSBT
cGluTG9jaywgTG9jayB0YWtlcyB2ZXJ5IGxpdHRsZSBtZW1vcnkgLSBqdXN0IHNpemVvZih2b2lk
KiksIHRob3VnaCBzZWUgYSBkZXRhaWxlZCBjYXZlYXQKKy8vIGJlbG93LgorLy8KKy8vIEdlbmVy
YWxseSwgeW91IHNob3VsZCB1c2UgTG9jayBpbnN0ZWFkIG9mIFNwaW5Mb2NrIGJlY2F1c2Ugd2hp
bGUgaXQgcGVuYWxpemVzIHlvdSBzbGlnaHRseSwgeW91CisvLyBtYWtlIHVwIGZvciBpdCBieSBu
b3Qgd2FzdGluZyBDUFUgY3ljbGVzIGluIGNhc2Ugb2YgY29udGVudGlvbi4KKy8vCisvLyBUaGUg
TG9jayBoYXMgdGhlIGZvbGxvd2luZyBuaWNlIHByb3BlcnRpZXM6CisvLworLy8gLSBVbmNvbnRl
bmRlZCBmYXN0IHBhdGhzIGZvciBsb2NrIGFjcXVpc2l0aW9uIGFuZCBsb2NrIHJlbGVhc2UgdGhh
dCBhcmUgYWxtb3N0IGFzIGZhc3QgYXMgdGhlCisvLyAgIHVuY29udGVuZGVkIGZhc3QgcGF0aHMg
b2YgYSBzcGlubG9jay4gVGhlIG9ubHkgb3ZlcmhlYWQgaXMgdGhhdCB0aGUgc3BpbmxvY2sgd2ls
bCBub3QgQ0FTIG9uCisvLyAgIHJlbGVhc2UsIHdoaWxlIExvY2sgd2lsbCBDQVMuIFRoaXMgb3Zl
cmhlYWQgKmNhbiogc2xvdyB0aGluZ3MgZG93biBmb3IgZXh0cmVtZWx5IHNtYWxsIGNyaXRpY2Fs
CisvLyAgIHNlY3Rpb25zIHRoYXQgZG8gbGl0dGxlIG9yIG5vdGhpbmcgLSBpdCBtYWtlcyB0aGVt
IDJ4IHNsb3dlciBzaW5jZSBpbiB0aGF0IGNhc2UsIENBUyBpcyB0aGUgbW9zdAorLy8gICBleHBl
bnNpdmUgaW5zdHJ1Y3Rpb24gYW5kIGhhdmluZyB0d28gb2YgdGhlbSBpcyB0d2ljZSBhcyBiYWQg
YXMganVzdCBoYXZpbmcgb25lLiBIb3dldmVyLCB0aGlzCisvLyAgIGxvY2sgaW1wbGVtZW50YXRp
b24gaXMgc3RpbGwgYWxtb3N0IDN4IGZhc3RlciB0aGFuIGEgcGxhdGZvcm0gbXV0ZXggaW4gdGhv
c2UgY2FzZXMuIEl0J3MgdW5saWtlbHkKKy8vICAgdGhhdCB5b3UnbGwgZW5jb3VudGVyIG5vLW9w
IGNyaXRpY2FsIHNlY3Rpb25zLCBzbyB1c3VhbGx5LCB0aGlzIGxvY2sgaXMgYmV0dGVyIHRoYW4g
YSBzcGlubG9jay4KKy8vCisvLyAtIENvbnRlbmRlZCBmYXN0IHBhdGggdGhhdCBhdHRlbXB0cyB0
byBzcGluIGFuZCB5aWVsZCBmb3Igc29tZSBudW1iZXIgb2YgdGltZXMuIEZvciBjcml0aWNhbAor
Ly8gICBzZWN0aW9ucyB0aGF0IGFyZSBoZWxkIG9ubHkgYnJpZWZseSwgdGhpcyBhbGxvd3MgTG9j
ayB0byBwZXJmb3JtIGFsbW9zdCBhcyB3ZWxsIGFzIGEgU3BpbkxvY2suCisvLyAgIFNwaW5Mb2Nr
IGNhbiBzdGlsbCBiZSBhbG1vc3QgMnggZmFzdGVyIHRoYW4gTG9jayBpZiB0aGUgY3JpdGljYWwg
c2VjdGlvbiBpcyBhIG5vLW9wLCBidXQgdGhpcworLy8gICBhZHZhbnRhZ2UgZGltaW5pc2hlcyBh
cyB0aGUgY3JpdGljYWwgc2VjdGlvbiBncm93cy4KKy8vCisvLyAtIENvbnRlbmRlZCBzbG93IHBh
dGggdGhhdCBlbnF1ZXVlcyB0aGUgY29udGVuZGluZyB0aHJlYWQgYW5kIGNhdXNlcyBpdCB0byB3
YWl0IG9uIGEgY29uZGl0aW9uCisvLyAgIHZhcmlhYmxlIHVudGlsIHRoZSBsb2NrIGlzIHJlbGVh
c2VkLiBUaGlzIGlzIHRoZSBvbmx5IGNhc2UgaW4gd2hpY2ggc3lzdGVtIG11dGV4ZXMgYW5kIGNv
bmRpdGlvbgorLy8gICB2YXJpYWJsZXMgYXJlIHVzZWQuIFRoaXMgY2FzZSBpcyByYXJlIGFuZCBz
ZWxmLWxpbWl0aW5nOiBpdCB3aWxsIG9ubHkgaGFwcGVuIHdoZW4gYSBsb2NrIGlzIGhlbGQKKy8v
ICAgZm9yIGxvbmcgZW5vdWdoIHRoYXQgc3Bpbm5pbmcgc29tZSBudW1iZXIgb2YgdGltZXMgZG9l
c24ndCBhY3F1aXJlIGl0LiBUaGUgZmFjdCB0aGF0IExvY2sgZG9lcworLy8gICB0aGlzIGFzIGEg
ZmFsbGJhY2sgd2hlbiBzcGlubmluZyBmb3Igc29tZSBudW1iZXIgb2YgdGltZXMgZmFpbHMgbWVh
bnMgdGhhdCBpdCB3aWxsIGJ1cm4KKy8vICAgZHJhbWF0aWNhbGx5IGZld2VyIENQVSBjeWNsZXMg
LSBmb3IgZXhhbXBsZSB3aXRoIDEwIHRocmVhZHMgb24gYW4gOCBsb2dpY2FsIENQVSBtYWNoaW5l
IGFjcXVpcmluZworLy8gICBhIGNyaXRpY2FsIHNlY3Rpb24gdGhhdCB0YWtlcyA1MCBtaWNyb3Nl
Y29uZHMsIHRoZSBXVEYgU3BpbkxvY2sgd2lsbCBjYXVzZSA5MHggbW9yZSB0aW1lIHRvIGJlCisv
LyAgIHNwZW50IGluIHRoZSBrZXJuZWwgdGhhbiBMb2NrLgorLy8KKy8vIC0gVmVyeSBsb3cgbWVt
b3J5IHVzYWdlLiBFYWNoIExvY2sgcmVxdWlyZXMgb25seSBzaXplb2Yodm9pZCopIG1lbW9yeS4g
V2hlbiB0aGUgY29udGVuZGVkIHNsb3cKKy8vICAgcGF0aCBpcyBhY3RpdmF0ZWQsIExvY2sgb25s
eSByZWxpZXMgb24gZWFjaCB0aHJlYWQgaGF2aW5nIGEgcHJlYWxsb2NhdGVkIHRocmVhZC1zcGVj
aWZpYyBkYXRhCisvLyAgIHN0cnVjdHVyZSBjYWxsZWQgVGhyZWFkRGF0YSB0aGF0LCB0b2dldGhl
ciB3aXRoIHRoZSBMb2NrIGl0c2VsZiwgaXMgdXNlZCB0byBidWlsZCB1cCBhIHRocmVhZAorLy8g
ICBxdWV1ZS4gU28sIHRoZSB0b3RhbCBtZW1vcnkgdXNhZ2Ugb2YgYWxsIExvY2tzIGlzIHN0aWxs
IGJvdW5kZWQgYnk6CisvLworLy8gICAgICAgbnVtYmVyT2ZMb2NrcyAqIHNpemVvZih2b2lkKikg
KyBudW1iZXJPZlRocmVhZHMgKiBzaXplb2YoVGhyZWFkRGF0YSkKKy8vCisvLyAgIFdoZXJlIFRo
cmVhZERhdGEgaXMgYSBkZWNlbnRseSBsYXJnZSBkYXRhIHN0cnVjdHVyZSwgYnV0IHdlIHdpbGwg
b25seSBldmVyIGhhdmUgb25lIHBlciB0aHJlYWQsCisvLyAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG51
bWJlciBvZiBMb2NrcyBpbiBtZW1vcnkuIEFub3RoZXIgd2F5IHRvIHZpZXcgdGhpcyBpcyB0aGF0
IHRoZSB3b3JzdCBjYXNlCisvLyAgIG1lbW9yeSB1c2FnZSBwZXIgTG9jayBpczoKKy8vCisvLyAg
ICAgICBzaXplb2Yodm9pZCopICsgbnVtYmVyT2ZUaHJlYWRzIC8gbnVtYmVyT2ZMb2NrcyAqIHNp
emVvZihUaHJlYWREYXRhKQorLy8KKy8vICAgU28sIHVubGVzcyB5b3UgaGF2ZSBhIHNtYWxsIG51
bWJlciBvZiBMb2NrcyAob3IsIGEgbGFyZ2UgbnVtYmVyIG9mIHRocmVhZHMsIHdoaWNoIGlzIGZh
ciBsZXNzCisvLyAgIGxpa2VseSksIHRoZSBtZW1vcnkgdXNhZ2UgcGVyLUxvY2sgaXMgc3RpbGwg
Z29pbmcgdG8gYmUgc29tZXdoZXJlIGFyb3VuZCBzaXplb2Yodm9pZCopLgorLy8KKy8vIC0gQmFy
Z2luZyBmYXN0IHBhdGhzLiBUaGUgTG9jayBpcyB0dW5lZCBmb3IgbWF4aW11bSB0aHJvdWdocHV0
IHJhdGhlciB0aGFuIG1heGltdW0gZmFpcm5lc3MuIElmCisvLyAgIGEgdGhyZWFkIHJlbGVhc2Vz
IGEgTG9jayB0aGF0IHdhcyBjb250ZW5kZWQgYW5kIGhhZCBhIHF1ZXVlIG9mIHdhaXRpbmcgdGhy
ZWFkcywgdGhlbiBpdCB3aWxsCisvLyAgIHdha2UgdXAgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLCBi
dXQgaXQgd2lsbCBhbHNvIG1hcmsgdGhlIGxvY2sgYXMgYmVpbmcgYXZhaWxhYmxlLiBUaGlzIG1l
YW5zIHRoYXQKKy8vICAgc29tZSBvdGhlciB0aHJlYWQgdGhhdCBpcyBqdXN0IG5vdyBhdHRlbXB0
aW5nIHRvIGFjcXVpcmUgdGhlIGxvY2sgbWF5IGdldCBpdCBiZWZvcmUgdGhlIHRocmVhZAorLy8g
ICB0aGF0IGdvdCB3b2tlbiB1cC4gV2hlbiBhIHRocmVhZCBiYXJnZXMgaW50byB0aGUgbG9jaywg
dGhlIHRocmVhZCB0aGF0IGdvdCB3b2tlbiB1cCB3aWxsIHNpbXBseQorLy8gICBnbyBiYWNrIHRv
IHRoZSBlbmQgb2YgdGhlIHF1ZXVlLiBUaGUgYmFyZ2luZyBiZWhhdmlvciBlbmRzIHVwIGJlaW5n
IHByb2JhYmlsaXN0aWMgb24gbW9zdAorLy8gICBwbGF0Zm9ybXMgYW5kIGV2ZW4gdGhvdWdoIGl0
IG1heSBiZSB1bmZhaXIgdG8gc29tZSB0aHJlYWQgYXQgc29tZSBtb21lbnQgaW4gdGltZSwgaXQg
d2lsbCByYXJlbHkKKy8vICAgaGF2ZSBhIGxvbmcgc3RyZWFrIG9mIHVuZmFpcm5lc3MgdG93YXJk
cyBhbnkgcGFydGljdWxhciB0aHJlYWQ6IGV2ZW50dWFsbHkgZWFjaCB0aHJlYWQgd2FpdGluZyBv
bgorLy8gICB0aGUgbG9jayB3aWxsIGdldCB0byBoYXZlIGEgdHVybiBzbyBsb25nIGFzIG5vIHRo
cmVhZCBqdXN0IGhvbGRzIHRoZSBsb2NrIGZvcmV2ZXIuIFRoYXQgc2FpZCwKKy8vICAgdGhlcmUg
KmlzKiBhIGNoYW5jZSBvZiBwYXRob2xvZ2llcyAtIHVzZXJzIG9mIExvY2sgc2hvdWxkIG5vdCBk
ZXBlbmQgb24gZmlyc3QtaW4sIGZpcnN0LW91dCBsb2NrCisvLyAgIGFjcXVpc2l0aW9uIG9yZGVy
IHVuZGVyIGNvbnRlbnRpb24uIFRoZSBzYW1lIGNhdmVhdCBpcyBnZW5lcmFsbHkgdHJ1ZSBvZiBT
cGluTG9jayBhbmQgcGxhdGZvcm0KKy8vICAgbXV0ZXhlcyBvbiBzb21lIHBsYXRmb3Jtcy4KKwor
Ly8gVGhpcyBpcyBhIHN0cnVjdCB3aXRob3V0IGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3RvciBz
byB0aGF0IGl0IGNhbiBiZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkLgorLy8gVXNlIExvY2sgaW4g
aW5zdGFuY2UgdmFyaWFibGVzLgorc3RydWN0IExvY2tCYXNlIHsKKyAgICB2b2lkIGxvY2soKQor
ICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBp
c0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgeworICAgICAgICAgICAgLy8g
TG9jayBhY3F1aXJlZCEKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGxvY2tTbG93KCk7CisgICAgfQorCisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAg
aWYgKExJS0VMWShtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAsIHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkgeworICAgICAgICAgICAgLy8gTG9jayByZWxlYXNlZCwg
YW5kIG5vYm9keSB3YXMgd2FpdGluZyEKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIHVubG9ja1Nsb3coKTsKKyAgICB9CisKKyAgICBib29sIGlzSGVsZCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV93b3JkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNx
dWlyZSkgJiBpc0hlbGRCaXQ7CisgICAgfQorCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNIZWxkKCk7CisgICAgfQorCisgICAgLy8gRXZlcnl0aGlu
ZyBiZWxvdyBoZXJlIHNob3VsZCBiZSBjb25zaWRlcmVkIHByaXZhdGUuIEl0J3Mgbm90IHByaXZh
dGUgYmVjYXVzZSBvZiBQT0QgcnVsZXMuCisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBpc0hl
bGRCaXQgPSAxOworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgbG9ja2VkUXVldWVCaXQgPSAy
OworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgbWFzayA9IDM7CisKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVu
bG9ja1Nsb3coKTsKKworICAgIEF0b21pYzx1aW50cHRyX3Q+IG1fd29yZDsKK307CisKK2NsYXNz
IExvY2sgOiBwdWJsaWMgTG9ja0Jhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2sp
OworcHVibGljOgorICAgIExvY2soKQorICAgIHsKKyAgICAgICAgbV93b3JkLnN0b3JlKDAsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIH0KK307CisKK3R5cGVkZWYgTG9ja0Jhc2Ug
U3RhdGljTG9jazsKK3R5cGVkZWYgTG9ja2VyPExvY2tCYXNlPiBMb2NrSG9sZGVyOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTdGF0aWNMb2NrOwordXNpbmcgV1RGOjpMb2Nr
OwordXNpbmcgV1RGOjpMb2NrSG9sZGVyOworCisjZW5kaWYgLy8gV1RGX0xvY2tfaAorCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dU
Ri93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAg
dm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVsZWFzZShNZXRhQQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUp
CiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIExvY2tIb2xkZXIg
bG9ja2VyKCZtX2xvY2spOwogICAgIGlmIChoYW5kbGUtPnNpemVJbkJ5dGVzKCkpIHsKICAgICAg
ICAgZGVjcmVtZW50UGFnZU9jY3VwYW5jeShoYW5kbGUtPnN0YXJ0KCksIGhhbmRsZS0+c2l6ZUlu
Qnl0ZXMoKSk7CiAgICAgICAgIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShoYW5kbGUt
PnN0YXJ0KCksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSk7CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQg
TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCAKIHsKICAgICBBU1NFUlQobmV3U2l6
ZUluQnl0ZXMgPD0gbV9zaXplSW5CeXRlcyk7CiAgICAgCi0gICAgU3BpbkxvY2tIb2xkZXIgbG9j
a2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxv
Y2F0b3ItPm1fbG9jayk7CiAKICAgICBuZXdTaXplSW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5yb3Vu
ZFVwKG5ld1NpemVJbkJ5dGVzKTsKICAgICAKQEAgLTE1MCw3ICsxNTAsNyBAQCBNZXRhQWxsb2Nh
dG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvCiAKIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRv
ckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lk
KiBvd25lclVJRCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAg
TG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAKICAgICBpZiAoIXNpemVJbkJ5dGVzKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTE5Niw3ICsxOTYsNyBAQCBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0
b3JIYW5kbGU+IE1ldGFBbGxvCiAKIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgTWV0YUFsbG9j
YXRvcjo6Y3VycmVudFN0YXRpc3RpY3MoKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigm
bV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBTdGF0aXN0aWNz
IHJlc3VsdDsKICAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQgPSBtX2J5dGVzQWxsb2NhdGVkOwog
ICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkID0gbV9ieXRlc1Jlc2VydmVkOwpAQCAtMjgxLDcgKzI4
MSw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlRnJvbVJlbGUKIAogdm9pZCBN
ZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJ
bkJ5dGVzKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBtX2J5dGVzUmVzZXJ2ZWQgKz0gc2l6ZUluQnl0
ZXM7CiAgICAgYWRkRnJlZVNwYWNlKHN0YXJ0LCBzaXplSW5CeXRlcyk7CiB9CkBAIC0yODksNyAr
Mjg5LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSh2bwogc2l6ZV90
IE1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSgpCiB7CiAjaWZuZGVmIE5ERUJVRwot
ICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cigmbV9sb2NrKTsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICBmb3IgKEZyZWVTcGFjZU5v
ZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmlyc3QoKTsgbm9kZTsgbm9kZSA9IG5vZGUt
PnN1Y2Nlc3NvcigpKQogICAgICAgICByZXN1bHQgKz0gbm9kZS0+bV9zaXplSW5CeXRlczsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XVEYv
d3RmL01ldGFBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNs
dWRlIDx3dGYvTG9jay5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMTgzLDcgKzE4Myw3IEBA
IHByaXZhdGU6CiAgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKICAgICBzaXplX3QgbV9ieXRl
c0NvbW1pdHRlZDsKICAgICAKLSAgICBTcGluTG9jayBtX2xvY2s7CisgICAgTG9jayBtX2xvY2s7
CiAKICAgICBNZXRhQWxsb2NhdG9yVHJhY2tlciogbV90cmFja2VyOwogCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9TcGluTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NwaW5Mb2Nr
LmgJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XVEYvd3RmL1NwaW5Mb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDE2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCisvLyBTcGlu
TG9jayBpcyBhIHZlcnkgc2ltcGxlIGxvY2sgaW1wbGVtZW50YXRpb24gdGhhdCBoYXMgZXh0cmVt
ZWx5IGZhc3QgbG9jay91bmxvY2sgZm9yIHZlcnkgc21hbGwKKy8vIHVuY29udGVuZGVkIGNyaXRp
Y2FsIHNlY3Rpb25zLiBIb3dldmVyLCBpdCB3aWxsIGV4aGliaXQgYmFkIHBlcmZvcm1hbmNlIGRl
Z3JhZGF0aW9uIHdoZW4gdGhlIGxvY2sKKy8vIGJlY29tZXMgY29udGVuZGVkOiB0aGUgdGhyZWFk
IHRyeWluZyB0byBhY3F1aXJlIHRoZSBsb2NrIHdpbGwgc2ltcGx5IHdhc3RlIENQVSBjeWNsZXMu
CisvLworLy8gRm9yIG1vc3QgKGFsbD8pIGxvY2tpbmcgdXNlIGNhc2VzLCBpdCdzIGJldHRlciB0
byB1c2UgTG9jayAoc2VlIHd0Zi9Mb2NrLmgpLiBUaGF0IHVzZXMgb25seSBhIGJpdAorLy8gbW9y
ZSBtZW1vcnkgKDggYnl0ZXMgaW5zdGVhZCBvZiA0IG9uIDY0LWJpdCksIGFuZCBpcyBvbmx5IGEg
Yml0IHNsb3dlciBpbiB0aGUgdW5jb250ZW5kZWQgY2FzZQorLy8gKExvY2sgbmVlZHMgQ0FTIHRv
IHVubG9jaywgd2hpbGUgU3BpbkxvY2sgZG9lc24ndCksIGJ1dCB3aWxsIGJ1cm4gYSBsb3QgbGVz
cyBDUFUgdGltZSAtIGZvciAxMAorLy8gdGhyZWFkcyBhY3F1aXJpbmcgYSA1MCBtaWNyb3NlY29u
ZCBjcml0aWNhbCBzZWN0aW9uLCBMb2NrIHdpbGwgdXNlIHVwIHRvIDEwMHggbGVzcyBrZXJuZWwg
Q1BVIHRpbWUKKy8vIHRoYW4gU3BpbkxvY2suCisKIC8vIFNwaW5Mb2NrQmFzZSBpcyBhIHN0cnVj
dCB3aXRob3V0IGFuIGV4cGxpY2l0bHkgZGVmaW5lZCBjb25zdHJ1Y3RvcnMgc28gdGhhdAogLy8g
aXQgY2FuIGJlIGluaXRpYWxpemVkIGF0IGNvbXBpbGUgdGltZS4gU2VlIFN0YXRpY1NwaW5Mb2Nr
IGJlbG93Lgogc3RydWN0IFNwaW5Mb2NrQmFzZSB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmdQdGhyZWFkcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFkaW5n
UHRocmVhZHMuY3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJl
YWt0aXguY29tKQogICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZ1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNw
cAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHJldmlzaW9uIDE4ODAxOCkK
KysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImR0b2EuaCIKIAogI2lmIFVTRShXRUJfVEhSRUFE
KQotI2luY2x1ZGUgIlNwaW5Mb2NrLmgiCisjaW5jbHVkZSAiTG9jay5oIgogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwu
Y3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmlu
Z0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8d3Rm
L3VuaWNvZGUvVVRGOC5oPgogCiAjaWYgVVNFKFdFQl9USFJFQUQpCi0jaW5jbHVkZSAiU3Bpbkxv
Y2suaCIKKyNpbmNsdWRlICJMb2NrLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CkBAIC00
MiwxOCArNDIsMTggQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKICNpZiBVU0UoV0VCX1RI
UkVBRCkKIAotY2xhc3MgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgOiBwdWJsaWMgU3BpbkxvY2tI
b2xkZXIgeworY2xhc3MgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgOiBwdWJsaWMgTG9ja0hvbGRl
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXRvbWljU3RyaW5nVGFibGVMb2NrZXIpOwog
Ci0gICAgc3RhdGljIFN0YXRpY1NwaW5Mb2NrIHNfc3RyaW5nVGFibGVMb2NrOworICAgIHN0YXRp
YyBTdGF0aWNMb2NrIHNfc3RyaW5nVGFibGVMb2NrOwogcHVibGljOgogICAgIEF0b21pY1N0cmlu
Z1RhYmxlTG9ja2VyKCkKLSAgICAgICAgOiBTcGluTG9ja0hvbGRlcigmc19zdHJpbmdUYWJsZUxv
Y2spCisgICAgICAgIDogTG9ja0hvbGRlcigmc19zdHJpbmdUYWJsZUxvY2spCiAgICAgewogICAg
IH0KIH07CiAKLVN0YXRpY1NwaW5Mb2NrIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyOjpzX3N0cmlu
Z1RhYmxlTG9jazsKK1N0YXRpY0xvY2sgQXRvbWljU3RyaW5nVGFibGVMb2NrZXI6OnNfc3RyaW5n
VGFibGVMb2NrOwogCiAjZWxzZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODgwMTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBA
QAorMjAxNS0wOC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IExpZ2h0d2VpZ2h0IGxvY2tzIHNob3VsZCBiZSBhZGFwdGl2ZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gbmV3
IGJlaGF2aW9yLgorCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW06
CisgICAgICAgIChXZWJDb3JlOjpnZXRKU1dyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6YWRk
SlNXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUpTV3JhcHBlcik6CisgICAgICAg
IChXZWJDb3JlOjpyZW1vdmVKU1dyYXBwZXJJZlJldGFpbkNvdW50T25lKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3Mvd2FrL1dBS1dpbmRvdy5tbToKKyAgICAgICAgKC1bV0FLV2luZG93IHNldEV4
cG9zZWRTY3JvbGxWaWV3UmVjdDpdKToKKyAgICAgICAgKC1bV0FLV2luZG93IGV4cG9zZWRTY3Jv
bGxWaWV3UmVjdF0pOgorCiAyMDE1LTA4LTA1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgQ3Jhc2ggd2hlbiByZW1vdmluZyBjaGlsZHJlbiBvZiBhIE1hdGhNTFNl
bGVjdEVsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0
T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2Vi
U2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQAogI2ltcG9ydCA8cnVudGltZS9KU0xvY2suaD4KICNpbXBvcnQgPHJ1bnRpbWUvQ29tcGxl
dGlvbi5oPgogI2ltcG9ydCA8cnVudGltZS9Db21wbGV0aW9uLmg+Ci0jaW1wb3J0IDx3dGYvU3Bp
bkxvY2suaD4KKyNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+
CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL05TTWFwVGFibGVTUEkuaD4KICNpbXBvcnQgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgpAQCAtNzIsMTIgKzcyLDEyIEBAIHVzaW5nIEpTQzo6bWFrZVNvdXJj
ZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIE5TTWFwVGFibGUqIEpTV3JhcHBlckNh
Y2hlOwotc3RhdGljIFN0YXRpY1NwaW5Mb2NrIHNwaW5Mb2NrOworc3RhdGljIFN0YXRpY0xvY2sg
c3BpbkxvY2s7CiAKIE5TT2JqZWN0KiBnZXRKU1dyYXBwZXIoSlNPYmplY3QqIGltcGwpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJnNw
aW5Mb2NrKTsKKyAgICBMb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOwogCiAgICAgaWYgKCFK
U1dyYXBwZXJDYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTg4LDcgKzg4LDcgQEAgTlNP
YmplY3QqIGdldEpTV3JhcHBlcihKU09iamVjdCogaW1wbCkKIHZvaWQgYWRkSlNXcmFwcGVyKE5T
T2JqZWN0KiB3cmFwcGVyLCBKU09iamVjdCogaW1wbCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOworICAgIExvY2tI
b2xkZXIgaG9sZGVyKCZzcGluTG9jayk7CiAKICAgICBpZiAoIUpTV3JhcHBlckNhY2hlKQogICAg
ICAgICBKU1dyYXBwZXJDYWNoZSA9IGNyZWF0ZVdyYXBwZXJDYWNoZSgpOwpAQCAtOTcsNyArOTcs
NyBAQCB2b2lkIGFkZEpTV3JhcHBlcihOU09iamVjdCogd3JhcHBlciwgSlNPCiAKIHZvaWQgcmVt
b3ZlSlNXcmFwcGVyKEpTT2JqZWN0KiBpbXBsKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRl
cigmc3BpbkxvY2spOworICAgIExvY2tIb2xkZXIgaG9sZGVyKCZzcGluTG9jayk7CiAKICAgICBp
ZiAoIUpTV3JhcHBlckNhY2hlKQogICAgICAgICByZXR1cm47CkBAIC0xMDYsNyArMTA2LDcgQEAg
dm9pZCByZW1vdmVKU1dyYXBwZXIoSlNPYmplY3QqIGltcGwpCiAKIHN0YXRpYyB2b2lkIHJlbW92
ZUpTV3JhcHBlcklmUmV0YWluQ291bnRPbmUoTlNPYmplY3QqIHdyYXBwZXIsIEpTT2JqZWN0KiBp
bXBsKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOworICAgIExvY2tI
b2xkZXIgaG9sZGVyKCZzcGluTG9jayk7CiAKICAgICBpZiAoIUpTV3JhcHBlckNhY2hlKQogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FS
aW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9tYWMvQ0FSaW5nQnVmZmVyLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwMCw3ICsyMDAsNyBAQCBDQVJpbmdCdWZmZXI6OkVycm9yIENBUmluZ0J1ZmZlcjo6c3RvcmUo
CiAKIHZvaWQgQ0FSaW5nQnVmZmVyOjpzZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3Qgc3Rh
cnRUaW1lLCB1aW50NjRfdCBlbmRUaW1lKQogewotICAgIEJ5dGVTcGluTG9ja2VyIGxvY2tlciht
X2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY3VycmVu
dEZyYW1lQm91bmRzTG9jayk7CiAgICAgdWludDMyX3QgbmV4dFB0ciA9IG1fdGltZUJvdW5kc1F1
ZXVlUHRyICsgMTsKICAgICB1aW50MzJfdCBpbmRleCA9IG5leHRQdHIgJiBrR2VuZXJhbFJpbmdU
aW1lQm91bmRzUXVldWVNYXNrOwogCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBDQVJpbmdCdWZm
ZXI6OnNldEN1cnJlbnRGcmFtZUJvdW5kcwogCiB2b2lkIENBUmluZ0J1ZmZlcjo6Z2V0Q3VycmVu
dEZyYW1lQm91bmRzKHVpbnQ2NF90ICZzdGFydFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1lKQogewot
ICAgIEJ5dGVTcGluTG9ja2VyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOworICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fY3VycmVudEZyYW1lQm91bmRzTG9jayk7CiAgICAgdWludDMy
X3QgY3VyUHRyID0gbV90aW1lQm91bmRzUXVldWVQdHI7CiAgICAgdWludDMyX3QgaW5kZXggPSBj
dXJQdHIgJiBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVNYXNrOwogICAgIENBUmluZ0J1ZmZl
cjo6VGltZUJvdW5kcyYgYm91bmRzID0gbV90aW1lQm91bmRzUXVldWVbaW5kZXhdOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaAko
cmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NB
UmluZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5BQkxF
KFdFQl9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJPWCkKIAogI2luY2x1ZGUgPHJ1bnRpbWUvQXJy
YXlCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHR5cGVkZWYgc3RydWN0IEF1ZGlv
QnVmZmVyTGlzdCBBdWRpb0J1ZmZlckxpc3Q7CkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAg
ICAgfTsKICAgICAKICAgICBWZWN0b3I8VGltZUJvdW5kcz4gbV90aW1lQm91bmRzUXVldWU7Ci0g
ICAgQnl0ZVNwaW5Mb2NrIG1fY3VycmVudEZyYW1lQm91bmRzTG9jazsKKyAgICBMb2NrIG1fY3Vy
cmVudEZyYW1lQm91bmRzTG9jazsKICAgICBpbnQzMl90IG1fdGltZUJvdW5kc1F1ZXVlUHRyOwog
fTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cu
bW0JKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsv
V0FLV2luZG93Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW1wb3J0ICJX
S0NvbnRlbnRPYnNlcnZhdGlvbi5oIgogI2ltcG9ydCAiV0tWaWV3UHJpdmF0ZS5oIgogI2ltcG9y
dCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDx3dGYvU3BpbkxvY2suaD4KKyNp
bXBvcnQgPHd0Zi9Mb2NrLmg+CiAKIFdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICogY29uc3QgV0FL
V2luZG93U2NyZWVuU2NhbGVEaWRDaGFuZ2VOb3RpZmljYXRpb24gPSBAIldBS1dpbmRvd1NjcmVl
blNjYWxlRGlkQ2hhbmdlTm90aWZpY2F0aW9uIjsKIFdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICog
Y29uc3QgV0FLV2luZG93VmlzaWJpbGl0eURpZENoYW5nZU5vdGlmaWNhdGlvbiA9IEAiV0FLV2lu
ZG93VmlzaWJpbGl0eURpZENoYW5nZU5vdGlmaWNhdGlvbiI7CkBAIC01Niw3ICs1Niw3IEBAIHN0
YXRpYyBXZWJFdmVudCAqY3VycmVudEV2ZW50ID0gbmlsOwogc3RhdGljIGlkPE9yaWVudGF0aW9u
UHJvdmlkZXI+IGdPcmllbnRhdGlvblByb3ZpZGVyOwogCiBAaW1wbGVtZW50YXRpb24gV0FLV2lu
ZG93IHsKLSAgICBTcGluTG9jayBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0TG9jazsKKyAgICBMb2Nr
IF9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrOwogICAgIENHUmVjdCBfZXhwb3NlZFNjcm9sbFZp
ZXdSZWN0OwogfQogCkBAIC0zNTgsMTQgKzM1OCwxNCBAQCAtICh2b2lkKXNlbmRNb3VzZU1vdmVF
dmVudDooV2ViRXZlbnQgKilhCiAKIC0gKHZvaWQpc2V0RXhwb3NlZFNjcm9sbFZpZXdSZWN0OihD
R1JlY3QpZXhwb3NlZFNjcm9sbFZpZXdSZWN0CiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2Vy
KCZfZXhwb3NlZFNjcm9sbFZpZXdSZWN0TG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoJl9l
eHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrKTsKICAgICBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0ID0g
ZXhwb3NlZFNjcm9sbFZpZXdSZWN0OwogfQogCiAtIChDR1JlY3QpZXhwb3NlZFNjcm9sbFZpZXdS
ZWN0CiB7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJl9leHBvc2VkU2Ny
b2xsVmlld1JlY3RMb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoJl9leHBvc2VkU2Ny
b2xsVmlld1JlY3RMb2NrKTsKICAgICAgICAgaWYgKCFDR1JlY3RJc051bGwoX2V4cG9zZWRTY3Jv
bGxWaWV3UmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gX2V4cG9zZWRTY3JvbGxWaWV3UmVjdDsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxNS0wOC0wNSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIExpZ2h0d2VpZ2h0IGxv
Y2tzIHNob3VsZCBiZSBhZGFwdGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ3NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjpjbGVhclF1ZXVlZFRvdWNoRXZlbnRz
Rm9yUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OkV2ZW50RGlzcGF0Y2hlcjo6Z2V0UXVldWVkVG91
Y2hFdmVudHNGb3JQYWdlKToKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjp0b3Vj
aEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFRvdWNo
RXZlbnRzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Vmlld1VwZGF0ZURpc3BhdGNoZXI6OnZpc2libGVDb250ZW50UmVj
dFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdVcGRhdGVEaXNwYXRjaGVyOjpkaXNwYXRj
aFZpc2libGVDb250ZW50UmVjdFVwZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmg6CisKIDIwMTUtMDgtMDUgIFRpbSBIb3J0b24gIDx0aW1v
dGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUERGUGx1Z2lucyBhcmUgY2xpcHBlZCBp
biBsaW5rIHByZXZpZXdzIChhbmQgcmVtYWluIHNvIHdoZW4gb3BlbmVkKQpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5j
cHAJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9FdmVudERpc3BhdGNoZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsMTMgKzE3MiwxMyBA
QCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVudCh1aW50NjRfCiAjaWYgRU5BQkxFKElP
U19UT1VDSF9FVkVOVFMpCiB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6Y2xlYXJRdWV1ZWRUb3VjaEV2
ZW50c0ZvclBhZ2UoY29uc3QgV2ViUGFnZSYgd2ViUGFnZSkKIHsKLSAgICBTcGluTG9ja0hvbGRl
ciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90
b3VjaEV2ZW50c0xvY2spOwogICAgIG1fdG91Y2hFdmVudHMucmVtb3ZlKHdlYlBhZ2UucGFnZUlE
KCkpOwogfQogCiB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6Z2V0UXVldWVkVG91Y2hFdmVudHNGb3JQ
YWdlKGNvbnN0IFdlYlBhZ2UmIHdlYlBhZ2UsIFRvdWNoRXZlbnRRdWV1ZSYgZGVzdGluYXRpb25R
dWV1ZSkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsK
KyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xvY2spOwogICAgIGRlc3RpbmF0
aW9uUXVldWUgPSBtX3RvdWNoRXZlbnRzLnRha2Uod2ViUGFnZS5wYWdlSUQoKSk7CiB9CiAKQEAg
LTE4Niw3ICsxODYsNyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6dG91Y2hFdmVudCh1aW50NjRf
CiB7CiAgICAgYm9vbCB1cGRhdGVMaXN0V2FzRW1wdHk7CiAgICAgewotICAgICAgICBTcGluTG9j
a0hvbGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKICAgICAgICAgdXBkYXRlTGlzdFdhc0VtcHR5ID0g
bV90b3VjaEV2ZW50cy5pc0VtcHR5KCk7CiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90b3Vj
aEV2ZW50cy5hZGQocGFnZUlELCBUb3VjaEV2ZW50UXVldWUoKSk7CiAgICAgICAgIGlmIChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hUb3VjaEV2ZW50CiB7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgVG91Y2hFdmVu
dFF1ZXVlPiBsb2NhbENvcHk7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIo
Jm1fdG91Y2hFdmVudHNMb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fdG91Y2hF
dmVudHNMb2NrKTsKICAgICAgICAgbG9jYWxDb3B5LnN3YXAobV90b3VjaEV2ZW50cyk7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRj
aGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2
ZW50RGlzcGF0Y2hlci5oCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2su
aD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRp
dmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk3LDcgKzk3LDcgQEAgcHJpdmF0ZToK
ICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpXaGVlbEV2ZW50RGVsdGFUcmFj
a2VyPiBtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRyYWNrZXI7CiAjaWYgRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCi0gICAgU3BpbkxvY2sgbV90b3VjaEV2ZW50c0xvY2s7CisgICAgTG9jayBtX3Rv
dWNoRXZlbnRzTG9jazsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBUb3VjaEV2ZW50UXVldWU+IG1f
dG91Y2hFdmVudHM7CiAjZW5kaWYKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5jcHAJKHJldmlz
aW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBk
YXRlRGlzcGF0Y2hlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBW
aWV3VXBkYXRlRGlzcGF0Y2hlcjo6dmlzaWJsZUNvbnRlbgogewogICAgIGJvb2wgdXBkYXRlTGlz
dFdhc0VtcHR5OwogICAgIHsKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2RhdGFN
dXRleCk7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2RhdGFNdXRleCk7CiAgICAgICAg
IHVwZGF0ZUxpc3RXYXNFbXB0eSA9IG1fbGF0ZXN0VXBkYXRlLmlzRW1wdHkoKTsKICAgICAgICAg
YXV0byBpdGVyYXRvciA9IG1fbGF0ZXN0VXBkYXRlLmZpbmQocGFnZUlEKTsKICAgICAgICAgaWYg
KGl0ZXJhdG9yID09IG1fbGF0ZXN0VXBkYXRlLmVuZCgpKQpAQCAtNzgsNyArNzgsNyBAQCB2b2lk
IFZpZXdVcGRhdGVEaXNwYXRjaGVyOjpkaXNwYXRjaFZpc2liCiB7CiAgICAgSGFzaE1hcDx1aW50
NjRfdCwgVXBkYXRlRGF0YT4gdXBkYXRlOwogICAgIHsKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIg
bG9ja2VyKCZtX2RhdGFNdXRleCk7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2RhdGFN
dXRleCk7CiAgICAgICAgIHVwZGF0ZSA9IFdURjo6bW92ZShtX2xhdGVzdFVwZGF0ZSk7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURp
c3BhdGNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuaAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJWaXNpYmxlQ29udGVudFJlY3RVcGRh
dGVJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+
Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAg
ICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKLSAgICBTcGluTG9jayBtX2RhdGFNdXRleDsKKyAg
ICBMb2NrIG1fZGF0YU11dGV4OwogICAgIEhhc2hNYXA8dWludDY0X3QsIFVwZGF0ZURhdGE+IG1f
bGF0ZXN0VXBkYXRlOwogfTsKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MDUxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDgtMDYgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBMaWdodHdlaWdodCBsb2NrcyBzaG91bGQgYmUg
YWRhcHRpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NzU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0V2ViS2l0QVBJLnZjeHByb2o6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHA6IEFkZGVkLgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6cnVuTG9ja1Rlc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVCk6CisKIDIwMTUtMDgtMDYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+CiAKICAgICAgICAgUGFzcy10aHJvdWdoIHRoZSB1bmRlZmluZWQgb3B0aW9ucyBpbiBydW4t
anNjCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4ODAxOCkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTc1LDYgKzc1LDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dURi9IYXNoU2V0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3Rz
L1dURi9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dURi9MaXN0SGFzaFNldC5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XVEYvTG9jay5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTUQ1
LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NYXRoRXh0cmFzLmNwcAog
ICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NZWRpYVRpbWUuY3BwCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0V2ViS2l0QVBJLnZj
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnZj
eHByb2ovVGVzdFdlYktpdEFQSS52Y3hwcm9qCShyZXZpc2lvbiAxODgwMTgpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0V2ViS2l0QVBJLnZjeHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVu
Y29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4K
IDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5z
PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgog
ICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0
Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z1N1ZmZpeHxXaW4zMiI+CkBAIC0zMTksNiArMzE5
LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxIYXNoU2V0LmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxJbnRlZ2VyVG9TdHJpbmdD
b252ZXJzaW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxM
aXN0SGFzaFNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xXVEZc
TG9jay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xXVEZcTUQ1LmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxNYXRoRXh0cmFzLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxNZWRpYVRpbWUuY3Bw
IiAvPgpAQCAtMzY1LDQgKzM2Niw0IEBACiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQ
YXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0
ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE4ODAxOCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBA
CiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIx
QTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBG
MTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0Ey
QjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGM0I5NEE3
MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCOTRBNTFBNzcyNjZD
MDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovOyB9OworCQkwRkZD
NDVBNjFCNzNFQkVCMDA4NUJENjIgLyogTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDNDVBNDFCNzNFQkUyMDA4NUJENjIgLyogTG9jay5j
cHAgKi87IH07CiAJCTFBMDJDODcwMTI1RDRDRkQwMEUzRjRCRCAvKiBmaW5kLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwMkM4NEIx
MjVENEE1RTAwRTNGNEJEIC8qIGZpbmQuaHRtbCAqLzsgfTsKIAkJMUE1MEFBMjAxQTJBNTFGQzAw
RjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNyZWF0ZS1wYWdlLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1MEFBMUYxQTJBNEVB
NTAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNyZWF0ZS1wYWdlLmh0bWwgKi87IH07CiAJ
CTFBNjM0NzlGMTgzRDcyQTQwMDVCMTcwNyAvKiBhbGwtY29udGVudC1pbi1vbmUtaWZyYW1lLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNEM0QxOUIxN0IxQTdCMDAwQzdDNDE1IC8qIGFsbC1jb250ZW50LWluLW9uZS1pZnJhbWUuaHRt
bCAqLzsgfTsKQEAgLTQyOCw2ICs0MjksNyBAQAogCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIg
LyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM2QzRDQjE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxh
Y2tUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZEJsYWNr
VHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzZDNENFMTQxMDM0QUQw
MDVCN0YwQyAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkZDNDVBNDFCNzNFQkUyMDA4NUJENjIgLyogTG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBMb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQ0NjQwMTIxNjdBODMwNTAwMEJEMjE4IC8qIExheW91dFVuaXQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0VW5pdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0RjNCMTEyMTVFNDVFQUIwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0
aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBMDJDODRCMTI1RDRBNUUwMEUzRjRCRCAvKiBmaW5kLmh0bWwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IHBhdGggPSBmaW5kLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMDk2LDYgKzEwOTgsNyBAQAogCQkJCTI2QjJERkY4MTVCREU1OTkwMDRGNjkxRCAvKiBI
YXNoU2V0LmNwcCAqLywKIAkJCQkyNjZGQUZEMjE1RTU3NzUyMDBGNjFENUIgLyogSW50ZWdlclRv
U3RyaW5nQ29udmVyc2lvbi5jcHAgKi8sCiAJCQkJMjYzMDBCMTcxNjc1NUNEOTAwNjY4ODZEIC8q
IExpc3RIYXNoU2V0LmNwcCAqLywKKwkJCQkwRkZDNDVBNDFCNzNFQkUyMDA4NUJENjIgLyogTG9j
ay5jcHAgKi8sCiAJCQkJQjQwMzlGOUMxNUU2RDhCMzAwNzI1NUQ2IC8qIE1hdGhFeHRyYXMuY3Bw
ICovLAogCQkJCUNENTM5M0M3MTc1N0JBOTcwMEMwNzEyMyAvKiBNRDUuY3BwICovLAogCQkJCUNE
NTQ5N0IzMTU4NTdGMEMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuY3BwICovLApAQCAtMTU2Nyw2ICsx
NTcwLDcgQEAKIAkJCQk3Q0NFN0VDOTFBNDExQTdFMDA0NDdDNEMgLyogUmVuZGVyZWRJbWFnZUZy
b21ET01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQ0ExQTQxMUE3RTAwNDQ3QzRD
IC8qIFJlbmRlcmVkSW1hZ2VGcm9tRE9NUmFuZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUNE
MUM2QzFCMzhDRTQzMDAxNDJDQTUgLyogTW9kYWxBbGVydHMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQkwRkZDNDVBNjFCNzNFQkVCMDA4NUJENjIgLyogTG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3Q0NFN0YwRTFBNDExQUU2MDA0NDdDNEMgLyogUmVzaXplUmV2ZXJzZVBhZ2luYXRlZFdlYlZp
ZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEYxQTQxMUFFNjAwNDQ3QzRDIC8qIFJl
c2l6ZVdpbmRvd0FmdGVyQ3Jhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMTAxQTQx
MUFFNjAwNDQ3QzRDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHkuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAko
cmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXVEY7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
TG9ja1R5cGU+Cit2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVkIG51bVRocmVhZEdyb3VwcywgdW5z
aWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNpZ25lZCB3b3JrUGVyQ3JpdGljYWxTZWN0aW9u
LCB1bnNpZ25lZCBudW1JdGVyYXRpb25zKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2NrVHlw
ZVtdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8TG9ja1R5cGVbXT4obnVtVGhyZWFkR3JvdXBz
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8ZG91YmxlW10+IHdvcmRzID0gc3RkOjptYWtlX3VuaXF1
ZTxkb3VibGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFk
SWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVy
W10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIHRocmVhZEdyb3VwSW5kZXggPSBudW1UaHJlYWRHcm91cHM7IHRocmVhZEdyb3VwSW5k
ZXgtLTspIHsKKyAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0gPSAwOworCisgICAgICAg
IGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZElu
ZGV4LS07KSB7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJl
YWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICAg
ICAgIkJlbmNobWFyayB0aHJlYWQiLAorICAgICAgICAgICAgICAgIFt0aHJlYWRHcm91cEluZGV4
LCAmbG9ja3MsICZ3b3JkcywgbnVtSXRlcmF0aW9ucywgd29ya1BlckNyaXRpY2FsU2VjdGlvbl0g
KCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JdGVyYXRpb25z
OyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2Nrc1t0aHJlYWRHcm91cEluZGV4
XS5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB3b3Jr
UGVyQ3JpdGljYWxTZWN0aW9uOyBqLS07KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdv
cmRzW3RocmVhZEdyb3VwSW5kZXhdKys7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2Nrc1t0
aHJlYWRHcm91cEluZGV4XS51bmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCB0aHJl
YWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5k
ZXgtLTspCisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbdGhyZWFkSW5k
ZXhdKTsKKworICAgIGRvdWJsZSBleHBlY3RlZCA9IDA7CisgICAgZm9yICh1aW50NjRfdCBpID0g
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bUl0ZXJhdGlvbnMpICogd29ya1BlckNyaXRpY2FsU2Vj
dGlvbiAqIG51bVRocmVhZHNQZXJHcm91cDsgaS0tOykKKyAgICAgICAgZXhwZWN0ZWQrKzsKKwor
ICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRleCA9IG51bVRocmVhZEdyb3VwczsgdGhy
ZWFkR3JvdXBJbmRleC0tOykKKyAgICAgICAgRVhQRUNUX0VRKGV4cGVjdGVkLCB3b3Jkc1t0aHJl
YWRHcm91cEluZGV4XSk7Cit9CisKK1RFU1QoV1RGX0xvY2ssIFVuY29udGVudGVkU2hvcnRTZWN0
aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEsIDEsIDEwMDAwMDAwKTsKK30KKwor
VEVTVChXVEZfTG9jaywgVW5jb250ZW50ZWRMb25nU2VjdGlvbikKK3sKKyAgICBydW5Mb2NrVGVz
dDxMb2NrPigxLCAxLCAxMDAwMCwgMTAwMCk7Cit9CisKK1RFU1QoV1RGX0xvY2ssIENvbnRlbnRl
ZFNob3J0U2VjdGlvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxMCwgMSwgMTAwMDAw
MDApOworfQorCitURVNUKFdURl9Mb2NrLCBDb250ZW50ZWRMb25nU2VjdGlvbikKK3sKKyAgICBy
dW5Mb2NrVGVzdDxMb2NrPigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKK30KKworVEVTVChXVEZfTG9j
aywgTWFueUNvbnRlbnRlZFNob3J0U2VjdGlvbnMpCit7CisgICAgcnVuTG9ja1Rlc3Q8TG9jaz4o
MTAsIDEwLCAxLCA1MDAwMDApOworfQorCitURVNUKFdURl9Mb2NrLCBNYW55Q29udGVudGVkTG9u
Z1NlY3Rpb25zKQoreworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwgMTAwMDAsIDIwMDAp
OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258402</attachid>
            <date>2015-08-06 14:56:09 -0700</date>
            <delta_ts>2015-08-06 15:04:06 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>75679</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDE1LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TGlnaHR3ZWlnaHQgbG9ja3Mgc2hvdWxkIGJlIGFkYXB0aXZlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1NDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoKKyAgICAg
ICAgKEpTQzo6Q29waWVkQmxvY2s6OndvcmtMaXN0TG9jayk6CisgICAgICAgICogaGVhcC9Db3Bp
ZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnNob3VsZFJlcG9y
dExpdmVCeXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMp
OgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3Bh
Y2U6OkNvcGllZEdlbmVyYXRpb246OkNvcGllZEdlbmVyYXRpb24pOgorICAgICAgICAqIGhlYXAv
Q29waWVkU3BhY2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xl
RXZhY3VhdGVkQmxvY2spOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmg6Cisg
ICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6Z2V0TmV4dEJsb2Nrc1RvQ29weSk6Cisg
ICAgICAgICogaGVhcC9MaXN0YWJsZUhhbmRsZXIuaDoKKyAgICAgICAgKEpTQzo6TGlzdGFibGVI
YW5kbGVyOjpMaXN0OjphZGRUaHJlYWRTYWZlKToKKyAgICAgICAgKEpTQzo6TGlzdGFibGVIYW5k
bGVyOjpMaXN0OjphZGROb3RUaHJlYWRTYWZlKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9y
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29weUxhdGVyKToKKyAgICAg
ICAgKiBydW50aW1lL1R5cGVQcm9maWxlckxvZy5oOgorCiAyMDE1LTA4LTA1ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtFUzZdIENsYXNzIHBhcnNlciBkb2Vz
IG5vdCBhbGxvdyBtZXRob2RzIG5hbWVkIHNldCBhbmQgZ2V0LgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotc3RhdGljIFN0YXRp
Y1NwaW5Mb2NrIGNyYXNoTG9jazsKK3N0YXRpYyBTdGF0aWNMb2NrIGNyYXNoTG9jazsKIAogdm9p
ZCBzdGFydENyYXNoaW5nKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2suaAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1
ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9E
b3VibHlMaW5rZWRMaXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5jbHVkZSA8
d3RmL0xvY2suaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU0LDggKzU0LDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGlkUHJvbW90ZSgpOwogCiAgICAgdW5zaWduZWQgbGl2ZUJ5dGVzKCk7Ci0g
ICAgYm9vbCBzaG91bGRSZXBvcnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBKU0NlbGwqIG93
bmVyKTsKLSAgICB2b2lkIHJlcG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpTQ2VsbCos
IENvcHlUb2tlbiwgdW5zaWduZWQpOworICAgIGJvb2wgc2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKExv
Y2tIb2xkZXImLCBKU0NlbGwqIG93bmVyKTsKKyAgICB2b2lkIHJlcG9ydExpdmVCeXRlcyhMb2Nr
SG9sZGVyJiwgSlNDZWxsKiwgQ29weVRva2VuLCB1bnNpZ25lZCk7CiAgICAgdm9pZCByZXBvcnRM
aXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkKTsKICAgICB2b2lkIGRpZFN1cnZpdmVHQygp
OwogICAgIHZvaWQgZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCk7CkBAIC04NSw3ICs4NSw3IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaGFzV29ya0xpc3QoKTsKICAgICBDb3B5V29ya0xpc3QmIHdv
cmtMaXN0KCk7Ci0gICAgU3BpbkxvY2smIHdvcmtMaXN0TG9jaygpIHsgcmV0dXJuIG1fd29ya0xp
c3RMb2NrOyB9CisgICAgTG9jayYgd29ya0xpc3RMb2NrKCkgeyByZXR1cm4gbV93b3JrTGlzdExv
Y2s7IH0KIAogcHJpdmF0ZToKICAgICBDb3BpZWRCbG9jayhzaXplX3QpOwpAQCAtOTgsNyArOTgs
NyBAQCBwcml2YXRlOgogCiAgICAgc2l6ZV90IG1fY2FwYWNpdHk7CiAKLSAgICBTcGluTG9jayBt
X3dvcmtMaXN0TG9jazsKKyAgICBMb2NrIG1fd29ya0xpc3RMb2NrOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxDb3B5V29ya0xpc3Q+IG1fd29ya0xpc3Q7CiAKICAgICBzaXplX3QgbV9yZW1haW5pbmc7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGlu
ZXMuaAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAgICAgCi1pbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6c2hvdWxkUmVwb3J0
TGl2ZUJ5dGVzKFNwaW5Mb2NrSG9sZGVyJiwgSlNDZWxsKiBvd25lcikKK2lubGluZSBib29sIENv
cGllZEJsb2NrOjpzaG91bGRSZXBvcnRMaXZlQnl0ZXMoTG9ja0hvbGRlciYsIEpTQ2VsbCogb3du
ZXIpCiB7CiAgICAgLy8gV2Ugd2FudCB0byBhZGQgdG8gbGl2ZSBieXRlcyBpZiB0aGUgb3duZXIg
aXNuJ3QgcGFydCBvZiB0aGUgcmVtZW1iZXJlZCBzZXQgb3IKICAgICAvLyBpZiB0aGlzIGJsb2Nr
IHdhcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBsYXN0IGN5Y2xlLiAKQEAgLTQzLDcgKzQzLDcgQEAg
aW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OnNob3VsZFJlcG9ydExpdgogICAgIHJldHVybiAhSGVh
cDo6aXNSZW1lbWJlcmVkKG93bmVyKSB8fCAhbV9pc09sZDsKIH0KIAotaW5saW5lIHZvaWQgQ29w
aWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpTQ2VsbCogb3duZXIs
IENvcHlUb2tlbiB0b2tlbiwgdW5zaWduZWQgYnl0ZXMpCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9j
azo6cmVwb3J0TGl2ZUJ5dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4g
dG9rZW4sIHVuc2lnbmVkIGJ5dGVzKQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICNpZm5k
ZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIENvcGll
ZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKENvcGllCiAKICAgICB7CiAgICAgICAgIC8vIEFsd2F5
cyBwdXQgdGhlIGJsb2NrIGludG8gdGhlIG9sZCBnZW4gYmVjYXVzZSBpdCdzIGJlaW5nIHByb21v
dGVkIQotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9jayk7CiAgICAgICAgIG1fb2xkR2Vu
LnRvU3BhY2UtPnB1c2goYmxvY2spOwogICAgICAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7CiAg
ICAgICAgIG1fb2xkR2VuLmJsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJs
b2NrKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJl
dmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQmxv
Y2suaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJp
bWl0aXZlcy5oPgogCkBAIC0xMTMsNyArMTEzLDcgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8
Q29waWVkQmxvY2sqPiBtX2Jsb2NrU2V0OwogCi0gICAgU3BpbkxvY2sgbV90b1NwYWNlTG9jazsK
KyAgICBMb2NrIG1fdG9TcGFjZUxvY2s7CiAKICAgICBzdHJ1Y3QgQ29waWVkR2VuZXJhdGlvbiB7
CiAgICAgICAgIENvcGllZEdlbmVyYXRpb24oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC05OCw3ICs5OCw3IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZh
Y3VhdGUKICAgICBBU1NFUlQoYmxvY2stPmNhbkJlUmVjeWNsZWQoKSk7CiAgICAgQVNTRVJUKCFi
bG9jay0+bV9pc1Bpbm5lZCk7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIo
Jm1fdG9TcGFjZUxvY2spOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9j
ayk7CiAgICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsKICAgICAgICAgaWYgKGNvbGxl
Y3Rpb25UeXBlID09IEVkZW5Db2xsZWN0aW9uKQogICAgICAgICAgICAgbV9uZXdHZW4uZnJvbVNw
YWNlLT5yZW1vdmUoYmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZEZpbmlzaE1h
cmtpbgogdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0Q29weWluZygpCiB7CiAgICAg
ewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fY29weUxvY2spOworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CiAgICAgICAgIGlmIChtX3ZtLT5oZWFwLm9w
ZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikgewogICAgICAgICAgICAgLy8g
UmVzZXQgdGhlIHZlY3RvciB0byBiZSBlbXB0eSwgYnV0IGRvbid0IHRocm93IGF3YXkgdGhlIGJh
Y2tpbmcgc3RvcmUuCiAgICAgICAgICAgICBtX2Jsb2Nrc1RvQ29weS5zaHJpbmsoMCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAko
cmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRT
aGFyZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCiAjaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6bXV0ZXggbV9vcGFxdWVS
b290c011dGV4OwogICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3BhcXVlUm9vdHM7CiAKLSAgICBTcGlu
TG9jayBtX2NvcHlMb2NrOworICAgIExvY2sgbV9jb3B5TG9jazsKICAgICBWZWN0b3I8Q29waWVk
QmxvY2sqPiBtX2Jsb2Nrc1RvQ29weTsKICAgICBzaXplX3QgbV9jb3B5SW5kZXg7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKQEAgLTExNSw3ICsx
MTUsNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmdldE5l
eHRCbG9ja3NUb0NvcHkoc2l6ZV90JiBzdGFydCwgc2l6ZV90JiBlbmQpCiB7Ci0gICAgU3Bpbkxv
Y2tIb2xkZXIgbG9ja2VyKCZtX2NvcHlMb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9j
b3B5TG9jayk7CiAgICAgc3RhcnQgPSBtX2NvcHlJbmRleDsKICAgICBlbmQgPSBzdGQ6Om1pbiht
X2Jsb2Nrc1RvQ29weS5zaXplKCksIG1fY29weUluZGV4ICsgc19ibG9ja0ZyYWdtZW50TGVuZ3Ro
KTsKICAgICBtX2NvcHlJbmRleCA9IGVuZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0xpc3RhYmxlSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0xpc3RhYmxlSGFuZGxlci5oCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9MaXN0YWJsZUhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NyArMjMsNyBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVz
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgdm9pZCBhZGRUaHJlYWRTYWZlKFQqIGhhbmRsZXIpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICAgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogICAgICAgICAgICAgYWRkTm90VGhyZWFkU2FmZSho
YW5kbGVyKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9maXJzdCA9IGhhbmRsZXI7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIFNwaW5Mb2NrIG1fbG9jazsKKyAgICAgICAgTG9jayBtX2xvY2s7CiAgICAgICAgIFQq
IG1fZmlyc3Q7CiAgICAgfTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hY2hpbmVTdGFja01hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTY4LDggKzU2OCw4IEBAIGJvb2wgTWFjaGluZVRocmVhZHM6OnRyeUNvcHlPdGhl
clRocmVhZFMKIHsKICAgICAvLyBQcmV2ZW50IHR3byBWTXMgZnJvbSBzdXNwZW5kaW5nIGVhY2gg
b3RoZXIncyB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUsCiAgICAgLy8gd2hpY2ggY2FuIGNhdXNl
IGRlYWRsb2NrOiA8cmRhcjovL3Byb2JsZW0vMjAzMDA4NDI+LgotICAgIHN0YXRpYyBTdGF0aWNT
cGluTG9jayBtdXRleDsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljU3BpbkxvY2s+IGxvY2so
bXV0ZXgpOworICAgIHN0YXRpYyBTdGF0aWNMb2NrIG11dGV4OworICAgIHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNMb2NrPiBsb2NrKG11dGV4KTsKIAogICAgICpzaXplID0gMDsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDE4ODAxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDcgQEAgaW5saW5lIHZvaWQgU2xv
dFZpc2l0b3I6OmNvcHlMYXRlcihKU0NlbAogCiAgICAgQVNTRVJUKGhlYXAoKS0+bV9zdG9yYWdl
U3BhY2UuY29udGFpbnMoYmxvY2spKTsKIAotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmYmxv
Y2stPndvcmtMaXN0TG9jaygpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmYmxvY2stPndvcmtM
aXN0TG9jaygpKTsKICAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVs
bENvbGxlY3Rpb24gfHwgYmxvY2stPnNob3VsZFJlcG9ydExpdmVCeXRlcyhsb2NrZXIsIG93bmVy
KSkgewogICAgICAgICBtX2J5dGVzQ29waWVkICs9IGJ5dGVzOwogICAgICAgICBibG9jay0+cmVw
b3J0TGl2ZUJ5dGVzKGxvY2tlciwgb3duZXIsIHRva2VuLCBieXRlcyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmNwcAkocmV2aXNpb24g
MTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJTb3VyY2VQcm92
aWRlci5oIgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TcGluTG9j
ay5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ0LDExICs0NCwxMSBAQCBTb3VyY2VQcm92aWRlcjo6
flNvdXJjZVByb3ZpZGVyKCkKIHsKIH0KIAotc3RhdGljIFN0YXRpY1NwaW5Mb2NrIHByb3ZpZGVy
SWRMb2NrOworc3RhdGljIFN0YXRpY0xvY2sgcHJvdmlkZXJJZExvY2s7CiAKIHZvaWQgU291cmNl
UHJvdmlkZXI6OmdldElEKCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrKCZwcm92aWRlcklk
TG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrKCZwcm92aWRlcklkTG9jayk7CiAgICAgaWYgKCFt
X2lkKSB7CiAgICAgICAgIHN0YXRpYyBpbnRwdHJfdCBuZXh0UHJvdmlkZXJJRCA9IDA7CiAgICAg
ICAgIG1faWQgPSArK25leHRQcm92aWRlcklEOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAkocmV2aXNpb24gMTg4MDE4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgUHJvZmlsZXIgewogCiBzdGF0aWMgc3RkOjphdG9taWM8aW50PiBkYXRhYmFzZUNvdW50ZXI7
CiAKLXN0YXRpYyBTdGF0aWNTcGluTG9jayByZWdpc3RyYXRpb25Mb2NrOworc3RhdGljIFN0YXRp
Y0xvY2sgcmVnaXN0cmF0aW9uTG9jazsKIHN0YXRpYyBzdGQ6OmF0b21pYzxpbnQ+IGRpZFJlZ2lz
dGVyQXRFeGl0Owogc3RhdGljIERhdGFiYXNlKiBmaXJzdERhdGFiYXNlOwogCkBAIC0xMzgsMTQg
KzEzOCwxNCBAQCB2b2lkIERhdGFiYXNlOjphZGREYXRhYmFzZVRvQXRFeGl0KCkKICAgICBpZiAo
KytkaWRSZWdpc3RlckF0RXhpdCA9PSAxKQogICAgICAgICBhdGV4aXQoYXRFeGl0Q2FsbGJhY2sp
OwogICAgIAotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKKyAg
ICBMb2NrSG9sZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKICAgICBtX25leHRSZWdpc3Rl
cmVkRGF0YWJhc2UgPSBmaXJzdERhdGFiYXNlOwogICAgIGZpcnN0RGF0YWJhc2UgPSB0aGlzOwog
fQogCiB2b2lkIERhdGFiYXNlOjpyZW1vdmVEYXRhYmFzZUZyb21BdEV4aXQoKQogewotICAgIFNw
aW5Mb2NrSG9sZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKKyAgICBMb2NrSG9sZGVyIGhv
bGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKICAgICBmb3IgKERhdGFiYXNlKiogY3VycmVudCA9ICZm
aXJzdERhdGFiYXNlOyAqY3VycmVudDsgY3VycmVudCA9ICYoKmN1cnJlbnQpLT5tX25leHRSZWdp
c3RlcmVkRGF0YWJhc2UpIHsKICAgICAgICAgaWYgKCpjdXJyZW50ICE9IHRoaXMpCiAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIERhdGFiYXNlOjpwZXJmb3Jt
QXRFeGl0U2F2ZSgpIGNvbnN0CiAKIERhdGFiYXNlKiBEYXRhYmFzZTo6cmVtb3ZlRmlyc3RBdEV4
aXREYXRhYmFzZSgpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVyKHJlZ2lzdHJhdGlvbkxv
Y2spOworICAgIExvY2tIb2xkZXIgaG9sZGVyKHJlZ2lzdHJhdGlvbkxvY2spOwogICAgIERhdGFi
YXNlKiByZXN1bHQgPSBmaXJzdERhdGFiYXNlOwogICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAg
Zmlyc3REYXRhYmFzZSA9IHJlc3VsdC0+bV9uZXh0UmVnaXN0ZXJlZERhdGFiYXNlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJl
dmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiSlND
SlNWYWx1ZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxl
ci5oIgotI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBACisyMDE1LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgTGlnaHR3ZWlnaHQgbG9ja3Mgc2hvdWxkIGJlIGFkYXB0
aXZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1
NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGNv
bW1vbiBpZGlvbSBpbiBXZWJLaXQgaXMgdG8gdXNlIHNwaW5sb2Nrcy4gV2UgdXNlIHRoZW0gYmVj
YXVzZSB0aGUgbG9jayBhY3F1aXNpdGlvbgorICAgICAgICBvdmVyaGVhZCBpcyBsb3dlciB0aGFu
IHN5c3RlbSBsb2NrcyBhbmQgYmVjYXVzZSB0aGV5IHRha2UgZHJhbWF0aWNhbGx5IGxlc3Mgc3Bh
Y2UgdGhhbiBzeXN0ZW0KKyAgICAgICAgbG9ja3MuIFRoZSBzcGVlZCBhbmQgc3BhY2UgYWR2YW50
YWdlcyBvZiBzcGlubG9ja3MgY2FuIGJlIGFzdG9uaXNoaW5nOiBhbiB1bmNvbnRlbmRlZCBzcGlu
bG9jaworICAgICAgICBhY3F1aXJlIGlzIHVwIHRvIDEweCBmYXN0ZXIgYW5kIHVuZGVyIG1pY3Jv
Y29udGVudGlvbiAtIHNob3J0IGNyaXRpY2FsIHNlY3Rpb24gd2l0aCB0d28gb3IKKyAgICAgICAg
bW9yZSB0aHJlYWRzIHRha2luZyB0dXJucyAtIHNwaW5sb2NrcyBhcmUgdXAgdG8gMTAweCBmYXN0
ZXIuIFNwaW5sb2NrcyB0YWtlIG9ubHkgMSBieXRlIG9yIDQKKyAgICAgICAgYnl0ZXMgZGVwZW5k
aW5nIG9uIHRoZSBmbGF2b3IsIHdoaWxlIHN5c3RlbSBsb2NrcyB0YWtlIDY0IGJ5dGVzIG9yIG1v
cmUuIENsZWFybHksIFdlYktpdAorICAgICAgICBzaG91bGQgY29udGludWUgdG8gYXZvaWQgc3lz
dGVtIGxvY2tzIC0gdGhleSBhcmUganVzdCBmYXIgdG9vIHNsb3cgYW5kIGZhciB0b28gYmlnLgor
CisgICAgICAgIEJ1dCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGlzIGlkaW9tLiBTeXN0ZW0g
bG9jayBpbXBsZW1lbnRhdGlvbnMgd2lsbCBzbGVlcCBhIHRocmVhZCB3aGVuCisgICAgICAgIGl0
IGF0dGVtcHRzIHRvIGFjcXVpcmUgYSBsb2NrIHRoYXQgaXMgaGVsZCwgd2hpbGUgc3BpbmxvY2tz
IHdpbGwgY2F1c2UgdGhlIHRocmVhZCB0byBidXJuIENQVS4KKyAgICAgICAgSW4gV2ViS2l0IHNw
aW5sb2NrcywgdGhlIHRocmVhZCB3aWxsIHJlcGVhdGVkbHkgY2FsbCBzY2hlZF95aWVsZCgpLiBU
aGlzIGlzIGF3ZXNvbWUgZm9yCisgICAgICAgIG1pY3JvY29udGVudGlvbiwgYnV0IGF3ZnVsIHdo
ZW4gdGhlIGxvY2sgd2lsbCBub3QgYmUgcmVsZWFzZWQgZm9yIGEgd2hpbGUuIEluIGZhY3QsIHdo
ZW4KKyAgICAgICAgY3JpdGljYWwgc2VjdGlvbnMgdGFrZSB0ZW5zIG9mIG1pY3Jvc2Vjb25kcyBv
ciBtb3JlLCB0aGUgQ1BVIHRpbWUgY29zdCBvZiBvdXIgc3BpbmxvY2tzIGlzCisgICAgICAgIGFs
bW9zdCAxMDB4IG1vcmUgdGhhbiB0aGUgQ1BVIHRpbWUgY29zdCBvZiBhIHN5c3RlbSBsb2NrLiBU
aGlzIGNhc2UgZG9lc24ndCBhcmlzZSB0b28KKyAgICAgICAgZnJlcXVlbnRseSBpbiBvdXIgY3Vy
cmVudCB1c2VzIG9mIHNwaW5sb2NrcywgYnV0IHRoYXQncyBwcm9iYWJseSBiZWNhdXNlIHJpZ2h0
IG5vdyB0aGVyZSBhcmUKKyAgICAgICAgcGxhY2VzIHdoZXJlIHdlIG1ha2UgYSBjb25zY2lvdXMg
ZGVjaXNpb24gdG8gdXNlIHN5c3RlbSBsb2NrcyAtIGV2ZW4gdGhvdWdoIHRoZXkgdXNlIG1vcmUK
KyAgICAgICAgbWVtb3J5IGFuZCBhcmUgc2xvd2VyIC0gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRv
IHdhc3RlIENQVSBjeWNsZXMgd2hlbiBhIHRocmVhZCBoYXMgdG8gd2FpdCBhCisgICAgICAgIHdo
aWxlIHRvIGFjcXVpcmUgdGhlIGxvY2suCisKKyAgICAgICAgVGhlIHNvbHV0aW9uIGlzIHRvIGp1
c3QgaW1wbGVtZW50IGEgbW9kZXJuIGFkYXB0aXZlIG11dGV4IGluIFdURi4gTHVja2lseSwgdGhp
cyBpc24ndCBhIG5ldworICAgICAgICBjb25jZXB0LiBUaGlzIHBhdGNoIGltcGxlbWVudHMgYSBt
dXRleCB0aGF0IGlzIHJlbWluaXNjZW50IG9mIHRoZSBraW5kcyBvZiBsb3ctb3ZlcmhlYWQgbG9j
a3MKKyAgICAgICAgdGhhdCBKVk1zIHVzZS4gVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBoZXJl
IGlzIGluc3BpcmVkIGJ5IHNvbWUgb2YgdGhlIGlkZWFzIGZyb20gWzFdLiBUaGUKKyAgICAgICAg
aWRlYSBpcyBzaW1wbGU6IHRoZSBmYXN0IHBhdGggaXMgYW4gaW5saW5lZCBDQVMgdG8gaW1tZWRp
YXRlbHkgYWNxdWlyZSBhIGxvY2sgdGhhdCBpc24ndCBoZWxkLAorICAgICAgICB0aGUgc2xvdyBw
YXRoIHRyaWVzIHNvbWUgbnVtYmVyIG9mIHNwaW5zIHRvIGFjcXVpcmUgdGhlIGxvY2ssIGFuZCBp
ZiB0aGF0IGZhaWxzLCB0aGUgdGhyZWFkIGlzCisgICAgICAgIHB1dCBvbiBhIHF1ZXVlIGFuZCBw
dXQgdG8gc2xlZXAuIFRoZSBxdWV1ZSBpcyBtYWRlIHVwIG9mIHN0YXRpY2FsbHkgYWxsb2NhdGVk
IHRocmVhZCBub2RlcyBhbmQKKyAgICAgICAgdGhlIGxvY2sgaXRzZWxmIGlzIGEgdGFnZ2VkIHBv
aW50ZXI6IGVpdGhlciBpdCBpcyBqdXN0IGJpdHMgdGVsbGluZyB1cyB0aGUgY29tcGxldGUgbG9j
ayBzdGF0ZQorICAgICAgICAobm90IGhlbGQgb3IgaGVsZCkgb3IgaXQgaXMgYSBwb2ludGVyIHRv
IHRoZSBoZWFkIG9mIGEgcXVldWUgb2YgdGhyZWFkcyB3YWl0aW5nIHRvIGFjcXVpcmUgdGhlCisg
ICAgICAgIGxvY2suIFRoaXMgYXBwcm9hY2ggZ2l2ZXMgV1RGOjpMb2NrIHRocmVlIGRpZmZlcmVu
dCBsZXZlbHMgb2YgYWRhcHRhdGlvbjogYW4gaW5saW5lZCBmYXN0IHBhdGgKKyAgICAgICAgaWYg
dGhlIGxvY2sgaXMgbm90IGNvbnRlbmRlZCwgYSBzaG9ydCBidXJzdCBvZiBzcGlubmluZyBmb3Ig
bWljcm9jb250ZW50aW9uLCBhbmQgYSBmdWxsLWJsb3duCisgICAgICAgIHF1ZXVlIGZvciBjcml0
aWNhbCBzZWN0aW9ucyB0aGF0IGFyZSBoZWxkIGZvciBhIGxvbmcgdGltZS4KKworICAgICAgICBP
biBhIGxvY2tpbmcgbWljcm9iZW5jaG1hcmssIHRoaXMgbmV3IExvY2sgZXhoaWJpdHMgdGhlIGZv
bGxvd2luZyBwZXJmb3JtYW5jZQorICAgICAgICBjaGFyYWN0ZXJpc3RpY3M6CisKKyAgICAgICAg
LSBMb2NrK3VubG9jayBvbiBhbiB1bmNvbnRlbmRlZCBuby1vcCBjcml0aWNhbCBzZWN0aW9uOiAy
eCBzbG93ZXIgdGhhbiBTcGluTG9jayBhbmQgM3ggZmFzdGVyCisgICAgICAgICAgdGhhbiBhIHN5
c3RlbSBtdXRleC4KKworICAgICAgICAtIExvY2srdW5sb2NrIG9uIGEgY29udGVuZGVkIG5vLW9w
IGNyaXRpY2FsIHNlY3Rpb246IDJ4IHNsb3dlciB0aGFuIFNwaW5Mb2NrIGFuZCAxMDB4IGZhc3Rl
cgorICAgICAgICAgIHRoYW4gYSBzeXN0ZW0gbXV0ZXguCisKKyAgICAgICAgLSBDUFUgdGltZSBz
cGVudCBpbiBsb2NrKCkgb24gYSBsb2NrIGhlbGQgZm9yIGEgd2hpbGU6IHNhbWUgYXMgc3lzdGVt
IG11dGV4LCA5MHggbGVzcyB0aGFuIGEKKyAgICAgICAgICBTcGluTG9jay4KKworICAgICAgICAt
IE1lbW9yeSB1c2FnZTogc2l6ZW9mKHZvaWQqKSwgc28gb24gNjQtYml0IGl0J3MgOHggbGVzcyB0
aGFuIGEgc3lzdGVtIG11dGV4IGJ1dCAyeCB3b3JzZSB0aGFuCisgICAgICAgICAgYSBTcGluTG9j
ay4KKworICAgICAgICBUaGlzIHBhdGNoIHJlcGxhY2VzIGFsbCB1c2VzIG9mIFNwaW5Mb2NrIHdp
dGggTG9jaywgc2luY2Ugb3VyIGNyaXRpY2FsIHNlY3Rpb25zIGFyZSBub3QKKyAgICAgICAgbm8t
b3BzIHNvIGlmIHlvdSBkbyBiYXNpY2FsbHkgYW55dGhpbmcgaW4geW91ciBjcml0aWNhbCBzZWN0
aW9uLCB0aGUgTG9jayBvdmVyaGVhZCB3aWxsIGJlCisgICAgICAgIGludmlzaWJsZS4gQWxzbywg
aW4gYWxsIHBsYWNlcyB3aGVyZSB3ZSB1c2VkIFNwaW5Mb2NrLCB3ZSBjb3VsZCB0b2xlcmF0ZSA4
IGJ5dGVzIG9mIG92ZXJoZWFkCisgICAgICAgIGluc3RlYWQgb2YgNC4gUGVyZm9ybWFuY2UgYmVu
Y2htYXJraW5nIHVzaW5nIEpTQyBtYWNyb2JlbmNobWFya3Mgc2hvd3Mgbm8gZGlmZmVyZW5jZSwg
d2hpY2ggaXMKKyAgICAgICAgYXMgaXQgc2hvdWxkIGJlOiB0aGUgcHVycG9zZSBvZiB0aGlzIGNo
YW5nZSBpcyB0byByZWR1Y2UgQ1BVIHRpbWUgd2FzdGVkLCBub3Qgd2FsbGNsb2NrIHRpbWUuCisg
ICAgICAgIFRoaXMgcGF0Y2ggZG9lc24ndCByZXBsYWNlIGFueSB1c2VzIG9mIEJ5dGVTcGluTG9j
aywgc2luY2Ugd2UgZXhwZWN0IHRoYXQgdGhlIHNwYWNlIGJlbmVmaXRzCisgICAgICAgIG9mIGhh
dmluZyBhIGxvY2sgdGhhdCBqdXN0IHVzZXMgYSBieXRlIGFyZSBzdGlsbCBiZXR0ZXIgdGhhbiB0
aGUgQ1BVIHdhc3RhZ2UgYmVuZWZpdHMgb2YKKyAgICAgICAgTG9jay4gQnV0LCB0aGlzIHdvcmsg
d2lsbCBlbmFibGUgc29tZSBmdXR1cmUgd29yayB0byBjcmVhdGUgbG9ja3MgdGhhdCB3aWxsIGZp
dCBpbiBqdXN0IDEuNgorICAgICAgICBiaXRzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ3NjY1LgorCisgICAgICAgIFsxXSBodHRwOi8vd3d3LmZpbHBpemxvLmNv
bS9wYXBlcnMvcGl6bG8tcHBwajIwMTEtZmFibGUucGRmCisKKyAgICAgICAgKiBXVEYudmN4cHJv
ai9XVEYudmN4cHJvajoKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBiZW5jaG1hcmtzOiBBZGRlZC4KKyAgICAgICAgKiBiZW5jaG1hcmtzL0xvY2tT
cGVlZFRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHd0Zi9DTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoV1RG
OjpMb2NrQmFzZTo6bG9ja1Nsb3cpOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6dW5sb2NrU2xv
dyk6CisgICAgICAgICogd3RmL0xvY2suaDogQWRkZWQuCisgICAgICAgIChXVEY6OkxvY2tCYXNl
Ojpsb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9jayk6CisgICAgICAgIChXVEY6
OkxvY2tCYXNlOjppc0hlbGQpOgorICAgICAgICAoV1RGOjpMb2NrOjpMb2NrKToKKyAgICAgICAg
KiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OnJl
bGVhc2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmspOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChXVEY6Ok1ldGFB
bGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRv
cjo6YWRkRnJlc2hGcmVlU3BhY2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkZWJ1
Z0ZyZWVTcGFjZVNpemUpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmg6CisgICAgICAg
ICogd3RmL1NwaW5Mb2NrLmg6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoK
KyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuY3BwOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuY3BwOgor
ICAgICAgICAoV1RGOjpBdG9taWNTdHJpbmdUYWJsZUxvY2tlcjo6QXRvbWljU3RyaW5nVGFibGVM
b2NrZXIpOgorCiAyMDE1LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbCBvdXQgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvMTg3OTcyLgpJbmRleDogU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCShyZXZpc2lv
biAxODgwMTgpCisrKyBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzEsNCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
dXRmLTgiPz4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8UHJvamVj
dCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCIgeG1sbnM9Imh0dHA6
Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVt
R3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CiAgICAgPFByb2plY3RDb25maWd1
cmF0aW9uIEluY2x1ZGU9IkRlYnVnU3VmZml4fFdpbjMyIj4KQEAgLTEwNiw2ICsxMDYsNyBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXGdsaWJcR1RocmVhZFNhZmVNYWluTG9vcFNv
dXJjZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcR3JlZ29yaWFuRGF0
ZVRpbWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEhhc2hUYWJsZS5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcTG9jay5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcTWFpblRocmVhZC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlx3dGZcTUQ1LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHd0ZlxNZWRpYVRpbWUuY3BwIiAvPgpAQCAtMjIzLDYgKzIyNCw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlx3dGZcSXRlcmF0b3JBZGFwdG9ycy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cd3RmXEl0ZXJhdG9yUmFuZ2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxMaXN0SGFzaFNldC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cd3RmXExvY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxMb2NrZXIu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxNYWluVGhyZWFkLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTWFsbG9jUHRyLmgiIC8+CkluZGV4OiBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4ODAxOCkKKysr
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDggQEAKIAkJMEZEODFBQzUxNTRGQjIyRTAwOTgzRTcyIC8qIEZhc3RCaXRW
ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0
cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5j
cHAgKi87IH07CiAJCTBGRERCRkE4MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVh
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJG
QTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi87IH07CisJCTBGRTE2
NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNw
cCAqLzsgfTsKKwkJMEZFMTY0NkIxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY5MUI2RkZDOTYwMDQw
MEU3QyAvKiBMb2NrLmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55
UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkxNDAyMkY0
MTE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxp
YmJtYWxsb2MuYSAqLzsgfTsKIAkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYx
MUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovOyB9OwpAQCAtMzIxLDYgKzMyMyw4
IEBACiAJCTBGRDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50
U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1By
aW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTYxNjY2
REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkUxNjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1
MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQw
MjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFs
bG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC03NzAsNiArNzc0
LDggQEAKIAkJCQk3Q0REN0ZGOTE4NkQyQTU0MDA3NDMzQ0QgLyogSXRlcmF0b3JSYW5nZS5oICov
LAogCQkJCUE3MERBMDgzMTc5OUYwNEQwMDUyOUE5QiAvKiBMaXN0RHVtcC5oICovLAogCQkJCUE4
QTQ3MkMxMTUxQTgyNUEwMDQxMjNGRiAvKiBMaXN0SGFzaFNldC5oICovLAorCQkJCTBGRTE2NDY4
MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLywKKwkJCQkwRkUxNjQ2OTFCNkZGQzk2MDA0
MDBFN0MgLyogTG9jay5oICovLAogCQkJCUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBMb2Nr
ZXIuaCAqLywKIAkJCQkxNDQ3QUVDODE4RkNFNTk0MDBCM0Q3RkYgLyogbWJtYWxsb2MuY3BwICov
LAogCQkJCUE4QTQ3MkNBMTUxQTgyNUIwMDQxMjNGRiAvKiBNRDUuY3BwICovLApAQCAtMTIwNiw2
ICsxMjEyLDcgQEAKIAkJCQlBOEE0NzQ2QTE1MUE4MjVCMDA0MTIzRkYgLyogVVRGOC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDczQjkxNTFBODI1QjAwNDEyM0ZGIC8qIHV0aWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzQ3RDE1MUE4MjVCMDA0MTIzRkYgLyogVmFsdWVDaGVjay5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFMTY0NkIxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDdFMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDdGMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRy
U2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTEzMzcsNiArMTM0NCw3IEBACiAJCQkJQThBNDczOUUx
NTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDcz
QTAxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVNYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
QTQ3M0EyMTUxQTgyNUIwMDQxMjNGRiAvKiBEZWNpbWFsTnVtYmVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4QTQ3M0FFMTUxQTgyNUIwMDQxMjNGRiAvKiBkaXktZnAuY2MgaW4gU291cmNlcyAq
LywKIAkJCQlBOEE0NzNCMDE1MUE4MjVCMDA0MTIzRkYgLyogZG91YmxlLWNvbnZlcnNpb24uY2Mg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNCQTE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSB7CisKK3Vuc2lnbmVkIG51bVRocmVhZEdy
b3VwczsKK3Vuc2lnbmVkIG51bVRocmVhZHNQZXJHcm91cDsKK3Vuc2lnbmVkIHdvcmtQZXJDcml0
aWNhbFNlY3Rpb247Cit1bnNpZ25lZCBudW1Ob2lzZVRocmVhZHM7Cit1bnNpZ25lZCBudW1JdGVy
YXRpb25zOworICAgIAordm9pZCB1c2FnZSgpCit7CisgICAgcHJpbnRmKCJVc2FnZTogTG9ja1Nw
ZWVkVGVzdCBzcGlubG9ja3xsb2NrfG11dGV4fGFsbCA8bnVtIHRocmVhZCBncm91cHM+IDxudW0g
dGhyZWFkcyBwZXIgZ3JvdXA+IDx3b3JrIHBlciBjcml0aWNhbCBzZWN0aW9uPiA8bnVtIG5vaXNl
IHRocmVhZHM+IDxudW0gaXRlcmF0aW9ucz5cbiIpOworICAgIGV4aXQoMSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIExvY2tUeXBlPgordm9pZCBydW5CZW5jaG1hcmsoY29uc3QgY2hhciogbmFt
ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9ja1R5cGVbXT4gbG9ja3MgPSBzdGQ6Om1ha2Vf
dW5pcXVlPExvY2tUeXBlW10+KG51bVRocmVhZEdyb3Vwcyk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PGRvdWJsZVtdPiB3b3JkcyA9IHN0ZDo6bWFrZV91bmlxdWU8ZG91YmxlW10+KG51bVRocmVhZEdy
b3Vwcyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZpZXJbXT4gdGhyZWFkcyA9
IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihudW1UaHJlYWRHcm91cHMgKiBu
dW1UaHJlYWRzUGVyR3JvdXApOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRJZGVudGlmaWVy
W10+IG5vaXNlVGhyZWFkcyA9IHN0ZDo6bWFrZV91bmlxdWU8VGhyZWFkSWRlbnRpZmllcltdPihu
dW1Ob2lzZVRocmVhZHMpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxkb3VibGVbXT4gbm9pc2VDb3Vu
dHMgPSBzdGQ6Om1ha2VfdW5pcXVlPGRvdWJsZVtdPihudW1Ob2lzZVRocmVhZHMpOworCisgICAg
dm9sYXRpbGUgYm9vbCBzaG91bGRTdG9wID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCB0aHJl
YWRJbmRleCA9IG51bU5vaXNlVGhyZWFkczsgdGhyZWFkSW5kZXgtLTspIHsKKyAgICAgICAgbm9p
c2VDb3VudHNbdGhyZWFkSW5kZXhdID0gMDsKKyAgICAgICAgbm9pc2VUaHJlYWRzW3RocmVhZElu
ZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICJOb2lzZSBUaHJlYWQiLAorICAgICAg
ICAgICAgWyZzaG91bGRTdG9wLCAmbm9pc2VDb3VudHMsIHRocmVhZEluZGV4XSAoKSB7CisgICAg
ICAgICAgICAgICAgd2hpbGUgKCFzaG91bGRTdG9wKQorICAgICAgICAgICAgICAgICAgICBub2lz
ZUNvdW50c1t0aHJlYWRJbmRleF0rKzsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIGRv
dWJsZSBiZWZvcmUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOworICAgIAorICAg
IGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRleCA9IG51bVRocmVhZEdyb3VwczsgdGhyZWFk
R3JvdXBJbmRleC0tOykgeworICAgICAgICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSA9IDA7CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsg
dGhyZWFkSW5kZXgtLTspIHsKKyAgICAgICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAq
IG51bVRocmVhZHNQZXJHcm91cCArIHRocmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAg
ICAgICAgICAgICAiQmVuY2htYXJrIHRocmVhZCIsCisgICAgICAgICAgICAgICAgW3RocmVhZEdy
b3VwSW5kZXgsICZsb2NrcywgJndvcmRzXSAoKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bUl0ZXJhdGlvbnM7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2tzW3RocmVhZEdyb3VwSW5kZXhdLmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IHdvcmtQZXJDcml0aWNhbFNlY3Rpb247IGotLTspIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSsrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdICo9IDEuMDE7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBsb2Nr
c1t0aHJlYWRHcm91cEluZGV4XS51bmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCB0
aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFk
SW5kZXgtLTspCisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbdGhyZWFk
SW5kZXhdKTsKKyAgICBzaG91bGRTdG9wID0gdHJ1ZTsKKyAgICBkb3VibGUgbm9pc2VDb3VudCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bU5vaXNlVGhyZWFkczsgdGhy
ZWFkSW5kZXgtLTspIHsKKyAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obm9pc2VUaHJl
YWRzW3RocmVhZEluZGV4XSk7CisgICAgICAgIG5vaXNlQ291bnQgKz0gbm9pc2VDb3VudHNbdGhy
ZWFkSW5kZXhdOworICAgIH0KKworICAgIGRvdWJsZSBhZnRlciA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZU1TKCk7CisKKyAgICBwcmludGYoIiVzOiAlLjNsZiBtcywgJS4wbGYgbm9pc2Uu
XG4iLCBuYW1lLCBhZnRlciAtIGJlZm9yZSwgbm9pc2VDb3VudCk7Cit9CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAg
V1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgCisgICAgaWYgKGFyZ2MgIT0gNworICAg
ICAgICB8fCBzc2NhbmYoYXJndlsyXSwgIiV1IiwgJm51bVRocmVhZEdyb3VwcykgIT0gMQorICAg
ICAgICB8fCBzc2NhbmYoYXJndlszXSwgIiV1IiwgJm51bVRocmVhZHNQZXJHcm91cCkgIT0gMQor
ICAgICAgICB8fCBzc2NhbmYoYXJndls0XSwgIiV1IiwgJndvcmtQZXJDcml0aWNhbFNlY3Rpb24p
ICE9IDEKKyAgICAgICAgfHwgc3NjYW5mKGFyZ3ZbNV0sICIldSIsICZudW1Ob2lzZVRocmVhZHMp
ICE9IDEKKyAgICAgICAgfHwgc3NjYW5mKGFyZ3ZbNl0sICIldSIsICZudW1JdGVyYXRpb25zKSAh
PSAxKQorICAgICAgICB1c2FnZSgpOworCisgICAgYm9vbCBkaWRSdW4gPSBmYWxzZTsKKyAgICBp
ZiAoIXN0cmNtcChhcmd2WzFdLCAic3BpbmxvY2siKSB8fCAhc3RyY21wKGFyZ3ZbMV0sICJhbGwi
KSkgeworICAgICAgICBydW5CZW5jaG1hcms8U3BpbkxvY2s+KCJTcGluTG9jayIpOworICAgICAg
ICBkaWRSdW4gPSB0cnVlOworICAgIH0KKyAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAibG9jayIp
IHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CisgICAgICAgIHJ1bkJlbmNobWFyazxMb2Nr
PigiV1RGIExvY2siKTsKKyAgICAgICAgZGlkUnVuID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFz
dHJjbXAoYXJndlsxXSwgIm11dGV4IikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKKyAg
ICAgICAgcnVuQmVuY2htYXJrPE11dGV4PigiUGxhdGZvcm0gTXV0ZXgiKTsKKyAgICAgICAgZGlk
UnVuID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWRpZFJ1bikKKyAgICAgICAgdXNhZ2UoKTsK
KworICAgIHJldHVybiAwOworfQpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4
ODAxOCkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIEl0ZXJhdG9yQWRhcHRvcnMuaAog
ICAgIEl0ZXJhdG9yUmFuZ2UuaAogICAgIExpc3RIYXNoU2V0LmgKKyAgICBMb2NrLmgKICAgICBM
b2NrZXIuaAogICAgIE1ENS5oCiAgICAgTWFpblRocmVhZC5oCkBAIC0xNTYsNiArMTU3LDcgQEAg
c2V0KFdURl9TT1VSQ0VTCiAgICAgRnVuY3Rpb25EaXNwYXRjaGVyLmNwcAogICAgIEdyZWdvcmlh
bkRhdGVUaW1lLmNwcAogICAgIEhhc2hUYWJsZS5jcHAKKyAgICBMb2NrLmNwcAogICAgIE1ENS5j
cHAKICAgICBNYWluVGhyZWFkLmNwcAogICAgIE1lZGlhVGltZS5jcHAKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvY2suaCIKKworI2luY2x1ZGUg
IlRocmVhZFNwZWNpZmljLmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0aXZlcy5oIgorI2lu
Y2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx0
aHJlYWQ+CisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgeworCisvLyBUaGlzIGRhdGEg
c3RydWN0dXJlIHNlcnZlcyB0aHJlZSBwdXJwb3NlczoKKy8vCisvLyAxKSBBIHBhcmtpbmcgbWVj
aGFuaXNtIGZvciB0aHJlYWRzIHRoYXQgZ28gdG8gc2xlZXAuIFRoYXQgaW52b2x2ZXMganVzdCBh
IHN5c3RlbSBtdXRleCBhbmQKKy8vICAgIGNvbmRpdGlvbiB2YXJpYWJsZS4KKy8vCisvLyAyKSBB
IHF1ZXVlIG5vZGUgZm9yIHdoZW4gYSB0aHJlYWQgaXMgb24gc29tZSBMb2NrJ3MgcXVldWUuCisv
LworLy8gMykgVGhlIHF1ZXVlIGhlYWQuIFRoaXMgaXMga2luZCBvZiBmdW5reS4gV2hlbiBhIHRo
cmVhZCBpcyB0aGUgaGVhZCBvZiBhIHF1ZXVlLCBpdCBhbHNvIHNlcnZlcyBhcworLy8gICAgdGhl
IGJhc2ljIHF1ZXVlIGJvb2trZWVwaW5nIGRhdGEgc3RydWN0dXJlLiBXaGVuIGEgdGhyZWFkIGlz
IGRlcXVldWVkLCB0aGUgbmV4dCB0aHJlYWQgaW4gdGhlCisvLyAgICBxdWV1ZSB0YWtlcyBvbiB0
aGUgcXVldWUgaGVhZCBkdXRpZXMuCitzdHJ1Y3QgVGhyZWFkRGF0YSB7CisgICAgLy8gVGhlIHBh
cmtpbmcgbWVjaGFuaXNtLgorICAgIGJvb2wgc2hvdWxkUGFyayB7IGZhbHNlIH07CisgICAgc3Rk
OjptdXRleCBwYXJraW5nTG9jazsKKyAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBwYXJraW5n
Q29uZGl0aW9uOworCisgICAgLy8gVGhlIHF1ZXVlIG5vZGUuCisgICAgVGhyZWFkRGF0YSogbmV4
dEluUXVldWUgeyBudWxscHRyIH07CisKKyAgICAvLyBUaGUgcXVldWUgaXRzZWxmLgorICAgIFRo
cmVhZERhdGEqIHF1ZXVlVGFpbCB7IG51bGxwdHIgfTsKK307CisKK1RocmVhZFNwZWNpZmljPFRo
cmVhZERhdGE+KiB0aHJlYWREYXRhOworCitUaHJlYWREYXRhKiBteVRocmVhZERhdGEoKQorewor
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZTsKKyAgICBzdGQ6OmNhbGxf
b25jZSgKKyAgICAgICAgaW5pdGlhbGl6ZU9uY2UsCisgICAgICAgIFtdeworICAgICAgICAgICAg
dGhyZWFkRGF0YSA9IG5ldyBUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPigpOworICAgICAgICB9
KTsKKworICAgIHJldHVybiAqdGhyZWFkRGF0YTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK3ZvaWQgTG9ja0Jhc2U6OmxvY2tTbG93KCkKK3sKKyAgICB1bnNpZ25lZCBzcGluQ291
bnQgPSAwOworCisgICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGlt
YWwgYmFzZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KKyAgICBjb25zdCB1bnNpZ25l
ZCBzcGluTGltaXQgPSA0MDsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHVpbnRwdHJf
dCBjdXJyZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKyAgICAgICAgCisgICAgICAgIGlm
ICghKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0hlbGRCaXQpKSB7CisgICAgICAgICAgICAvLyBJdCdz
IG5vdCBwb3NzaWJsZSBmb3Igc29tZW9uZSB0byBob2xkIHRoZSBxdWV1ZSBsb2NrIHdoaWxlIHRo
ZSBsb2NrIGl0c2VsZiBpcyBubyBsb25nZXIKKyAgICAgICAgICAgIC8vIGhlbGQsIHNpbmNlIHdl
IHdpbGwgb25seSBhdHRlbXB0IHRvIGFjcXVpcmUgdGhlIHF1ZXVlIGxvY2sgd2hlbiB0aGUgbG9j
ayBpcyBoZWxkIGFuZAorICAgICAgICAgICAgLy8gdGhlIHF1ZXVlIGxvY2sgcHJldmVudHMgdW5s
b2NrLgorICAgICAgICAgICAgQVNTRVJUKCEoY3VycmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVl
Qml0KSk7CisgICAgICAgICAgICBpZiAobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVu
dFdvcmRWYWx1ZSwgY3VycmVudFdvcmRWYWx1ZSB8IGlzSGVsZEJpdCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBTdWNjZXNzISBXZSBhY3F1aXJlZCB0aGUgbG9jay4KKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBxdWV1ZSBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVzdCB0cnkg
dG8gc3BpbiBhcm91bmQgYWdhaW4uCisgICAgICAgIGlmICghKGN1cnJlbnRXb3JkVmFsdWUgJiB+
bWFzaykgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgICAgICBzcGluQ291bnQr
KzsKKyAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5lZWQgdG8gcHV0IG91cnNlbHZlcyBv
biB0aGUgcXVldWUuIENyZWF0ZSB0aGUgcXVldWUgaWYgb25lIGRvZXMgbm90IGV4aXN0LiBUaGlz
IHJlcXVyaWVzCisgICAgICAgIC8vIG93bmluZyB0aGUgcXVldWUgZm9yIGEgbGl0dGxlIGJpdC4g
VGhlIGxvY2sgdGhhdCBjb250cm9scyB0aGUgcXVldWUgaXMgaXRzZWxmIGEgc3BpbmxvY2suCisg
ICAgICAgIC8vIEJ1dCBiZWZvcmUgd2UgYWNxdWlyZSB0aGUgcXVldWUgc3BpbmxvY2ssIHdlIG1h
a2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSBUaHJlYWREYXRhIGZvciB0aGlzCisgICAgICAgIC8vIHRo
cmVhZC4KKyAgICAgICAgVGhyZWFkRGF0YSogbWUgPSBteVRocmVhZERhdGEoKTsKKyAgICAgICAg
QVNTRVJUKCFtZS0+c2hvdWxkUGFyayk7CisgICAgICAgIEFTU0VSVCghbWUtPm5leHRJblF1ZXVl
KTsKKyAgICAgICAgQVNTRVJUKCFtZS0+cXVldWVUYWlsKTsKKworICAgICAgICAvLyBSZWxvYWQg
dGhlIGN1cnJlbnQgd29yZCB2YWx1ZSwgc2luY2Ugc29tZSB0aW1lIG1heSBoYXZlIHBhc3NlZC4K
KyAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisKKyAgICAgICAgLy8g
V2UgcHJvY2VlZCBvbmx5IGlmIHRoZSBxdWV1ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGUgTG9jayBp
cyBoZWxkLCBhbmQgd2Ugc3VjY2VlZCBpbgorICAgICAgICAvLyBhY3F1aXJpbmcgdGhlIHF1ZXVl
IGxvY2suCisgICAgICAgIGlmICgoY3VycmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KQor
ICAgICAgICAgICAgfHwgIShjdXJyZW50V29yZFZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAg
ICAgfHwgIW1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFsdWUsIGN1cnJl
bnRXb3JkVmFsdWUgfCBsb2NrZWRRdWV1ZUJpdCkpIHsKKyAgICAgICAgICAgIHN0ZDo6dGhpc190
aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1lLT5zaG91bGRQYXJrID0gdHJ1ZTsKKworICAgICAgICAvLyBXZSBvd24gdGhlIHF1ZXVl
LiBOb2JvZHkgY2FuIGVucXVldWUgb3IgZGVxdWV1ZSB1bnRpbCB3ZSdyZSBkb25lLiBBbHNvLCBp
dCdzIG5vdCBwb3NzaWJsZQorICAgICAgICAvLyB0byByZWxlYXNlIHRoZSBMb2NrIHdoaWxlIHdl
IGhvbGQgdGhlIHF1ZXVlIGxvY2suCisgICAgICAgIFRocmVhZERhdGEqIHF1ZXVlSGVhZCA9IGJp
dHdpc2VfY2FzdDxUaHJlYWREYXRhKj4oY3VycmVudFdvcmRWYWx1ZSAmIH5tYXNrKTsKKyAgICAg
ICAgaWYgKHF1ZXVlSGVhZCkgeworICAgICAgICAgICAgLy8gUHV0IHRoaXMgdGhyZWFkIGF0IHRo
ZSBlbmQgb2YgdGhlIHF1ZXVlLgorICAgICAgICAgICAgcXVldWVIZWFkLT5xdWV1ZVRhaWwtPm5l
eHRJblF1ZXVlID0gbWU7CisgICAgICAgICAgICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbCA9IG1lOwor
CisgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBxdWV1ZSBsb2NrLgorICAgICAgICAgICAgY3Vy
cmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVu
dFdvcmRWYWx1ZSAmIH5tYXNrKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVl
ICYgbG9ja2VkUXVldWVCaXQpOworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUg
JiBpc0hlbGRCaXQpOworICAgICAgICAgICAgbV93b3JkLnN0b3JlKGN1cnJlbnRXb3JkVmFsdWUg
JiB+bG9ja2VkUXVldWVCaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTWFr
ZSB0aGlzIHRocmVhZCBiZSB0aGUgcXVldWUtaGVhZC4KKyAgICAgICAgICAgIHF1ZXVlSGVhZCA9
IG1lOworICAgICAgICAgICAgbWUtPnF1ZXVlVGFpbCA9IG1lOworCisgICAgICAgICAgICAvLyBS
ZWxlYXNlIHRoZSBxdWV1ZSBsb2NrIGFuZCBpbnN0YWxsIG91cnNlbHZlcyBhcyB0aGUgaGVhZC4g
Tm8gbmVlZCBmb3IgYSBDQVMgbG9vcCwgc2luY2UKKyAgICAgICAgICAgIC8vIHdlIG93biB0aGUg
cXVldWUgbG9jay4KKyAgICAgICAgICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgp
OworICAgICAgICAgICAgQVNTRVJUKH4oY3VycmVudFdvcmRWYWx1ZSAmIH5tYXNrKSk7CisgICAg
ICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KTsKKyAgICAg
ICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNIZWxkQml0KTsKKyAgICAgICAgICAg
IHVpbnRwdHJfdCBuZXdXb3JkVmFsdWUgPSBjdXJyZW50V29yZFZhbHVlOworICAgICAgICAgICAg
bmV3V29yZFZhbHVlIHw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHF1ZXVlSGVhZCk7CisgICAg
ICAgICAgICBuZXdXb3JkVmFsdWUgJj0gfmxvY2tlZFF1ZXVlQml0OworICAgICAgICAgICAgbV93
b3JkLnN0b3JlKG5ld1dvcmRWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBdCB0aGlz
IHBvaW50IGV2ZXJ5b25lIHdobyBhY3F1aXJlcyB0aGUgcXVldWUgbG9jayB3aWxsIHNlZSBtZSBv
biB0aGUgcXVldWUsIGFuZCBhbnlvbmUgd2hvCisgICAgICAgIC8vIGFjcXVpcmVzIG1lJ3MgbG9j
ayB3aWxsIHNlZSB0aGF0IG1lIHdhbnRzIHRvIHBhcmsuIE5vdGUgdGhhdCBzaG91bGRQYXJrIG1h
eSBoYXZlIGJlZW4KKyAgICAgICAgLy8gY2xlYXJlZCBhcyBzb29uIGFzIHRoZSBxdWV1ZSBsb2Nr
IHdhcyByZWxlYXNlZCBhYm92ZSwgYnV0IGl0IHdpbGwgaGFwcGVuIHdoaWxlIHRoZQorICAgICAg
ICAvLyByZWxlYXNpbmcgdGhyZWFkIGhvbGRzIG1lJ3MgcGFya2luZ0xvY2suCisKKyAgICAgICAg
eworICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBh
cmtpbmdMb2NrKTsKKyAgICAgICAgICAgIHdoaWxlIChtZS0+c2hvdWxkUGFyaykKKyAgICAgICAg
ICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0KGxvY2tlcik7CisgICAgICAgIH0KKwor
ICAgICAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+bmV4
dEluUXVldWUpOworICAgICAgICBBU1NFUlQoIW1lLT5xdWV1ZVRhaWwpOworICAgICAgICAKKyAg
ICAgICAgLy8gTm93IHdlIGNhbiBsb29wIGFyb3VuZCBhbmQgdHJ5IHRvIGFjcXVpcmUgdGhlIGxv
Y2sgYWdhaW4uCisgICAgfQorfQorCit2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93KCkKK3sKKyAg
ICAvLyBJZiB0aGUgZmFzdCBwYXRoIGZhaWxlZCwgaXQgY2FuIG9ubHkgYmUgYmVjYXVzZSBzb21l
b25lIHB1dCBhIHRocmVhZCBvbiB0aGUgcXVldWUgb3IgdGhlIHF1ZXVlCisgICAgLy8gbG9jayBp
cyBoZWxkLiBJZiB0aGUgcXVldWUgbG9jayBpcyBoZWxkLCBpdCBjYW4gb25seSBiZSBiZWNhdXNl
IHNvbWVvbmUgKndpbGwqIGVucXVldWUgYSB0aHJlYWQKKyAgICAvLyBvbnRvIHRoZSBxdWV1ZS4K
KworICAgIC8vIEFjcXVpcmUgdGhlIHF1ZXVlIGxvY2suCisgICAgZm9yICg7OykgeworICAgICAg
ICB1aW50cHRyX3QgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisKKyAgICAgICAg
QVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0hlbGRCaXQpOworICAgICAgICAKKyAgICAgICAg
aWYgKGN1cnJlbnRXb3JkVmFsdWUgJiBsb2NrZWRRdWV1ZUJpdCkgeworICAgICAgICAgICAgc3Rk
Ojp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgLy8gSWYgdGhlIHF1ZXVlIGxvY2sgaXMgbm90IGhlbGQsIHRoZW4gdGhlcmUg
bXVzdCBiZSBhbiBlbnRyeSBvbiB0aGUgcXVldWUuCisgICAgICAgIEFTU0VSVChjdXJyZW50V29y
ZFZhbHVlICYgfm1hc2spOworCisgICAgICAgIGlmIChtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2Vh
ayhjdXJyZW50V29yZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlIHwgbG9ja2VkUXVldWVCaXQpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFs
dWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAKKyAgICAvLyBBZnRlciB3ZSBhY3F1aXJlIHRo
ZSBxdWV1ZSBsb2NrLCB0aGUgTG9jayBtdXN0IHN0aWxsIGJlIGhlbGQgYW5kIHRoZSBxdWV1ZSBt
dXN0IGJlCisgICAgLy8gbm9uLWVtcHR5LiBUaGUgcXVldWUgbXVzdCBiZSBub24tZW1wdHkgc2lu
Y2Ugb25seSB0aGUgbG9ja1Nsb3coKSBtZXRob2QgY291bGQgaGF2ZSBoZWxkIHRoZQorICAgIC8v
IHF1ZXVlIGxvY2sgYW5kIGlmIGl0IGRpZCB0aGVuIGl0IG9ubHkgcmVsZWFzZXMgaXQgYWZ0ZXIg
cHV0dGluZyBzb21ldGhpbmcgb24gdGhlIHF1ZXVlLgorICAgIEFTU0VSVChjdXJyZW50V29yZFZh
bHVlICYgaXNIZWxkQml0KTsKKyAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGxvY2tlZFF1
ZXVlQml0KTsKKyAgICBUaHJlYWREYXRhKiBxdWV1ZUhlYWQgPSBiaXR3aXNlX2Nhc3Q8VGhyZWFk
RGF0YSo+KGN1cnJlbnRXb3JkVmFsdWUgJiB+bWFzayk7CisgICAgQVNTRVJUKHF1ZXVlSGVhZCk7
CisKKyAgICBUaHJlYWREYXRhKiBuZXdRdWV1ZUhlYWQgPSBxdWV1ZUhlYWQtPm5leHRJblF1ZXVl
OworICAgIC8vIEVpdGhlciB0aGlzIHdhcyB0aGUgb25seSB0aHJlYWQgb24gdGhlIHF1ZXVlLCBp
biB3aGljaCBjYXNlIHdlIGRlbGV0ZSB0aGUgcXVldWUsIG9yIHRoZXJlCisgICAgLy8gYXJlIHN0
aWxsIG1vcmUgdGhyZWFkcyBvbiB0aGUgcXVldWUsIGluIHdoaWNoIGNhc2Ugd2UgY3JlYXRlIGEg
bmV3IHF1ZXVlIGhlYWQuCisgICAgaWYgKG5ld1F1ZXVlSGVhZCkKKyAgICAgICAgbmV3UXVldWVI
ZWFkLT5xdWV1ZVRhaWwgPSBxdWV1ZUhlYWQtPnF1ZXVlVGFpbDsKKworICAgIC8vIENoYW5nZSB0
aGUgcXVldWUgaGVhZCwgcG9zc2libHkgcmVtb3ZpbmcgaXQgaWYgbmV3UXVldWVIZWFkIGlzIG51
bGwuIE5vIG5lZWQgZm9yIGEgQ0FTIGxvb3AsCisgICAgLy8gc2luY2Ugd2UgaG9sZCB0aGUgcXVl
dWUgbG9jayBhbmQgdGhlIGxvY2sgaXRzZWxmIHNvIG5vdGhpbmcgYWJvdXQgdGhlIGxvY2sgY2Fu
IGNoYW5nZSByaWdodAorICAgIC8vIG5vdy4KKyAgICBjdXJyZW50V29yZFZhbHVlID0gbV93b3Jk
LmxvYWQoKTsKKyAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzSGVsZEJpdCk7CisgICAg
QVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBsb2NrZWRRdWV1ZUJpdCk7CisgICAgQVNTRVJUKChj
dXJyZW50V29yZFZhbHVlICYgfm1hc2spID09IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHF1ZXVl
SGVhZCkpOworICAgIHVpbnRwdHJfdCBuZXdXb3JkVmFsdWUgPSBjdXJyZW50V29yZFZhbHVlOwor
ICAgIG5ld1dvcmRWYWx1ZSAmPSB+aXNIZWxkQml0OyAvLyBSZWxlYXNlIHRoZSBMb2NrLgorICAg
IG5ld1dvcmRWYWx1ZSAmPSB+bG9ja2VkUXVldWVCaXQ7IC8vIFJlbGVhc2UgdGhlIHF1ZXVlIGxv
Y2suCisgICAgbmV3V29yZFZhbHVlICY9IG1hc2s7IC8vIENsZWFyIG91dCB0aGUgb2xkIHF1ZXVl
IGhlYWQuCisgICAgbmV3V29yZFZhbHVlIHw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld1F1
ZXVlSGVhZCk7IC8vIEluc3RhbGwgbmV3IHF1ZXVlIGhlYWQuCisgICAgbV93b3JkLnN0b3JlKG5l
d1dvcmRWYWx1ZSk7CisKKyAgICAvLyBOb3cgdGhlIGxvY2sgaXMgYXZhaWxhYmxlIGZvciBhY3F1
aXNpdGlvbi4gQnV0IHdlIGp1c3QgaGF2ZSB0byB3YWtlIHVwIHRoZSBvbGQgcXVldWUgaGVhZC4K
KyAgICAvLyBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIQorCisgICAgcXVldWVIZWFkLT5uZXh0SW5R
dWV1ZSA9IG51bGxwdHI7CisgICAgcXVldWVIZWFkLT5xdWV1ZVRhaWwgPSBudWxscHRyOworCisg
ICAgLy8gV2UgZG8gdGhpcyBjYXJlZnVsbHkgYmVjYXVzZSB0aGlzIG1heSBydW4gZWl0aGVyIGJl
Zm9yZSBvciBkdXJpbmcgdGhlIHBhcmtpbmdMb2NrIGNyaXRpY2FsCisgICAgLy8gc2VjdGlvbiBp
biBsb2NrU2xvdygpLgorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4
PiBsb2NrZXIocXVldWVIZWFkLT5wYXJraW5nTG9jayk7CisgICAgICAgIHF1ZXVlSGVhZC0+c2hv
dWxkUGFyayA9IGZhbHNlOworICAgIH0KKyAgICAvLyBEb2Vzbid0IG1hdHRlciBpZiB3ZSBub3Rp
ZnlfYWxsKCkgb3Igbm90aWZ5X29uZSgpIGhlcmUgc2luY2UgdGhlIG9ubHkgdGhyZWFkIHRoYXQg
Y291bGQgYmUKKyAgICAvLyB3YWl0aW5nIGlzIHF1ZXVlSGVhZC4KKyAgICBxdWV1ZUhlYWQtPnBh
cmtpbmdDb25kaXRpb24ubm90aWZ5X29uZSgpOworCisgICAgLy8gVGhlIG9sZCBxdWV1ZSBoZWFk
IGNhbiBub3cgY29udGVuZCBmb3IgdGhlIGxvY2sgYWdhaW4uIFdlJ3JlIGRvbmUhCit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93
dGYvTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX0xvY2tfaAorI2Rl
ZmluZSBXVEZfTG9ja19oCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0
Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgTG9jayBpcyBhIGZ1bGx5IGFk
YXB0aXZlIG11dGV4IHRoYXQgZ2l2ZXMgeW91IHRoZSBiZXN0IG9mIFNwaW5Mb2NrIGFuZCBNdXRl
eC4gRm9yIHNtYWxsIGNyaXRpY2FsCisvLyBzZWN0aW9ucyAodGhhdCB0YWtlIG5hbm9zZWNvbmRz
KSwgaXQgd2lsbCB1c3VhbGx5IHBlcmZvcm0gd2l0aGluIDJ4IG9mIGEgU3BpbkxvY2sgaW4gYm90
aCB0aGUKKy8vIGNvbnRlbmRlZCBhbmQgdW5jb250ZW5kZWQgY2FzZS4gV2hlbiB1c2luZyBhIE11
dGV4LCBzdWNoIGNyaXRpY2FsIHNlY3Rpb25zIHRha2UgdXAgdG8gMTAweCBsb25nZXIKKy8vIHRo
YW4gTG9jayBpbiB0aGUgY29udGVuZGVkIGNhc2UsIG9yIDN4IGxvbmdlciB0aGFuIExvY2sgaW4g
dGhlIHVuY29udGVuZGVkIGNhc2UuIEZvciBsb25nZXIKKy8vIGNyaXRpY2FsIHNlY3Rpb25zICh0
aGF0IHRha2UgdGVucyBvZiBtaWNyb3NlY29uZHMpLCBpdCB3aWxsIHBlcmZvcm0gYXMgd2VsbCBh
cyBhIE11dGV4IGFuZCBzbGlnaHRseQorLy8gYmV0dGVyIHRoYW4gYSBTcGluTG9jay4gQnV0LCBj
cnVjaWFsbHksIGEgU3BpbkxvY2sgd2lsbCBidXJuIHVwIHRvIDkweCBtb3JlIHRpbWUgaW4gdGhl
IGtlcm5lbCBmb3IKKy8vIHN1Y2ggY3JpdGljYWwgc2VjdGlvbnMgdGhhbiBlaXRoZXIgTG9jayBv
ciBNdXRleC4gSGVuY2UsIHVzaW5nIExvY2sgd2lsbCBtYWtlIHRoZSBjb21tb24gY2FzZSBvZgor
Ly8gbG9ja2luZyBwZXJmb3JtIGNsb3NlIHRvIFNwaW5Mb2NrIGZvciBhbnkgY3JpdGljYWwgc2Vj
dGlvbiB0aGF0IGRvZXMgbW9yZSB0aGFuIGEgZmV3IG5hbm9zZWNvbmRzIG9mCisvLyB3b3JrIHdo
aWxlIGJlaW5nIGFzIGtpbmQgdG8gdGhlIHNjaGVkdWxlciBmb3IgbG9uZ2VyIGNyaXRpY2FsIHNl
Y3Rpb25zIGFzIGEgTXV0ZXguCisvLworLy8gTGlrZSBTcGluTG9jaywgTG9jayB0YWtlcyB2ZXJ5
IGxpdHRsZSBtZW1vcnkgLSBqdXN0IHNpemVvZih2b2lkKiksIHRob3VnaCBzZWUgYSBkZXRhaWxl
ZCBjYXZlYXQKKy8vIGJlbG93LgorLy8KKy8vIEdlbmVyYWxseSwgeW91IHNob3VsZCB1c2UgTG9j
ayBpbnN0ZWFkIG9mIFNwaW5Mb2NrIGJlY2F1c2Ugd2hpbGUgaXQgcGVuYWxpemVzIHlvdSBzbGln
aHRseSwgeW91CisvLyBtYWtlIHVwIGZvciBpdCBieSBub3Qgd2FzdGluZyBDUFUgY3ljbGVzIGlu
IGNhc2Ugb2YgY29udGVudGlvbi4KKy8vCisvLyBUaGUgTG9jayBoYXMgdGhlIGZvbGxvd2luZyBu
aWNlIHByb3BlcnRpZXM6CisvLworLy8gLSBVbmNvbnRlbmRlZCBmYXN0IHBhdGhzIGZvciBsb2Nr
IGFjcXVpc2l0aW9uIGFuZCBsb2NrIHJlbGVhc2UgdGhhdCBhcmUgYWxtb3N0IGFzIGZhc3QgYXMg
dGhlCisvLyAgIHVuY29udGVuZGVkIGZhc3QgcGF0aHMgb2YgYSBzcGlubG9jay4gVGhlIG9ubHkg
b3ZlcmhlYWQgaXMgdGhhdCB0aGUgc3BpbmxvY2sgd2lsbCBub3QgQ0FTIG9uCisvLyAgIHJlbGVh
c2UsIHdoaWxlIExvY2sgd2lsbCBDQVMuIFRoaXMgb3ZlcmhlYWQgKmNhbiogc2xvdyB0aGluZ3Mg
ZG93biBmb3IgZXh0cmVtZWx5IHNtYWxsIGNyaXRpY2FsCisvLyAgIHNlY3Rpb25zIHRoYXQgZG8g
bGl0dGxlIG9yIG5vdGhpbmcgLSBpdCBtYWtlcyB0aGVtIDJ4IHNsb3dlciBzaW5jZSBpbiB0aGF0
IGNhc2UsIENBUyBpcyB0aGUgbW9zdAorLy8gICBleHBlbnNpdmUgaW5zdHJ1Y3Rpb24gYW5kIGhh
dmluZyB0d28gb2YgdGhlbSBpcyB0d2ljZSBhcyBiYWQgYXMganVzdCBoYXZpbmcgb25lLiBIb3dl
dmVyLCB0aGlzCisvLyAgIGxvY2sgaW1wbGVtZW50YXRpb24gaXMgc3RpbGwgYWxtb3N0IDN4IGZh
c3RlciB0aGFuIGEgcGxhdGZvcm0gbXV0ZXggaW4gdGhvc2UgY2FzZXMuIEl0J3MgdW5saWtlbHkK
Ky8vICAgdGhhdCB5b3UnbGwgZW5jb3VudGVyIG5vLW9wIGNyaXRpY2FsIHNlY3Rpb25zLCBzbyB1
c3VhbGx5LCB0aGlzIGxvY2sgaXMgYmV0dGVyIHRoYW4gYSBzcGlubG9jay4KKy8vCisvLyAtIENv
bnRlbmRlZCBmYXN0IHBhdGggdGhhdCBhdHRlbXB0cyB0byBzcGluIGFuZCB5aWVsZCBmb3Igc29t
ZSBudW1iZXIgb2YgdGltZXMuIEZvciBjcml0aWNhbAorLy8gICBzZWN0aW9ucyB0aGF0IGFyZSBo
ZWxkIG9ubHkgYnJpZWZseSwgdGhpcyBhbGxvd3MgTG9jayB0byBwZXJmb3JtIGFsbW9zdCBhcyB3
ZWxsIGFzIGEgU3BpbkxvY2suCisvLyAgIFNwaW5Mb2NrIGNhbiBzdGlsbCBiZSBhbG1vc3QgMngg
ZmFzdGVyIHRoYW4gTG9jayBpZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBhIG5vLW9wLCBidXQg
dGhpcworLy8gICBhZHZhbnRhZ2UgZGltaW5pc2hlcyBhcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBn
cm93cy4KKy8vCisvLyAtIENvbnRlbmRlZCBzbG93IHBhdGggdGhhdCBlbnF1ZXVlcyB0aGUgY29u
dGVuZGluZyB0aHJlYWQgYW5kIGNhdXNlcyBpdCB0byB3YWl0IG9uIGEgY29uZGl0aW9uCisvLyAg
IHZhcmlhYmxlIHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBUaGlzIGlzIHRoZSBvbmx5IGNh
c2UgaW4gd2hpY2ggc3lzdGVtIG11dGV4ZXMgYW5kIGNvbmRpdGlvbgorLy8gICB2YXJpYWJsZXMg
YXJlIHVzZWQuIFRoaXMgY2FzZSBpcyByYXJlIGFuZCBzZWxmLWxpbWl0aW5nOiBpdCB3aWxsIG9u
bHkgaGFwcGVuIHdoZW4gYSBsb2NrIGlzIGhlbGQKKy8vICAgZm9yIGxvbmcgZW5vdWdoIHRoYXQg
c3Bpbm5pbmcgc29tZSBudW1iZXIgb2YgdGltZXMgZG9lc24ndCBhY3F1aXJlIGl0LiBUaGUgZmFj
dCB0aGF0IExvY2sgZG9lcworLy8gICB0aGlzIGFzIGEgZmFsbGJhY2sgd2hlbiBzcGlubmluZyBm
b3Igc29tZSBudW1iZXIgb2YgdGltZXMgZmFpbHMgbWVhbnMgdGhhdCBpdCB3aWxsIGJ1cm4KKy8v
ICAgZHJhbWF0aWNhbGx5IGZld2VyIENQVSBjeWNsZXMgLSBmb3IgZXhhbXBsZSB3aXRoIDEwIHRo
cmVhZHMgb24gYW4gOCBsb2dpY2FsIENQVSBtYWNoaW5lIGFjcXVpcmluZworLy8gICBhIGNyaXRp
Y2FsIHNlY3Rpb24gdGhhdCB0YWtlcyA1MCBtaWNyb3NlY29uZHMsIHRoZSBXVEYgU3BpbkxvY2sg
d2lsbCBjYXVzZSA5MHggbW9yZSB0aW1lIHRvIGJlCisvLyAgIHNwZW50IGluIHRoZSBrZXJuZWwg
dGhhbiBMb2NrLgorLy8KKy8vIC0gVmVyeSBsb3cgbWVtb3J5IHVzYWdlLiBFYWNoIExvY2sgcmVx
dWlyZXMgb25seSBzaXplb2Yodm9pZCopIG1lbW9yeS4gV2hlbiB0aGUgY29udGVuZGVkIHNsb3cK
Ky8vICAgcGF0aCBpcyBhY3RpdmF0ZWQsIExvY2sgb25seSByZWxpZXMgb24gZWFjaCB0aHJlYWQg
aGF2aW5nIGEgcHJlYWxsb2NhdGVkIHRocmVhZC1zcGVjaWZpYyBkYXRhCisvLyAgIHN0cnVjdHVy
ZSBjYWxsZWQgVGhyZWFkRGF0YSB0aGF0LCB0b2dldGhlciB3aXRoIHRoZSBMb2NrIGl0c2VsZiwg
aXMgdXNlZCB0byBidWlsZCB1cCBhIHRocmVhZAorLy8gICBxdWV1ZS4gU28sIHRoZSB0b3RhbCBt
ZW1vcnkgdXNhZ2Ugb2YgYWxsIExvY2tzIGlzIHN0aWxsIGJvdW5kZWQgYnk6CisvLworLy8gICAg
ICAgbnVtYmVyT2ZMb2NrcyAqIHNpemVvZih2b2lkKikgKyBudW1iZXJPZlRocmVhZHMgKiBzaXpl
b2YoVGhyZWFkRGF0YSkKKy8vCisvLyAgIFdoZXJlIFRocmVhZERhdGEgaXMgYSBkZWNlbnRseSBs
YXJnZSBkYXRhIHN0cnVjdHVyZSwgYnV0IHdlIHdpbGwgb25seSBldmVyIGhhdmUgb25lIHBlciB0
aHJlYWQsCisvLyAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBMb2NrcyBpbiBtZW1vcnku
IEFub3RoZXIgd2F5IHRvIHZpZXcgdGhpcyBpcyB0aGF0IHRoZSB3b3JzdCBjYXNlCisvLyAgIG1l
bW9yeSB1c2FnZSBwZXIgTG9jayBpczoKKy8vCisvLyAgICAgICBzaXplb2Yodm9pZCopICsgbnVt
YmVyT2ZUaHJlYWRzIC8gbnVtYmVyT2ZMb2NrcyAqIHNpemVvZihUaHJlYWREYXRhKQorLy8KKy8v
ICAgU28sIHVubGVzcyB5b3UgaGF2ZSBhIHNtYWxsIG51bWJlciBvZiBMb2NrcyAob3IsIGEgbGFy
Z2UgbnVtYmVyIG9mIHRocmVhZHMsIHdoaWNoIGlzIGZhciBsZXNzCisvLyAgIGxpa2VseSksIHRo
ZSBtZW1vcnkgdXNhZ2UgcGVyLUxvY2sgaXMgc3RpbGwgZ29pbmcgdG8gYmUgc29tZXdoZXJlIGFy
b3VuZCBzaXplb2Yodm9pZCopLgorLy8KKy8vIC0gQmFyZ2luZyBmYXN0IHBhdGhzLiBUaGUgTG9j
ayBpcyB0dW5lZCBmb3IgbWF4aW11bSB0aHJvdWdocHV0IHJhdGhlciB0aGFuIG1heGltdW0gZmFp
cm5lc3MuIElmCisvLyAgIGEgdGhyZWFkIHJlbGVhc2VzIGEgTG9jayB0aGF0IHdhcyBjb250ZW5k
ZWQgYW5kIGhhZCBhIHF1ZXVlIG9mIHdhaXRpbmcgdGhyZWFkcywgdGhlbiBpdCB3aWxsCisvLyAg
IHdha2UgdXAgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLCBidXQgaXQgd2lsbCBhbHNvIG1hcmsgdGhl
IGxvY2sgYXMgYmVpbmcgYXZhaWxhYmxlLiBUaGlzIG1lYW5zIHRoYXQKKy8vICAgc29tZSBvdGhl
ciB0aHJlYWQgdGhhdCBpcyBqdXN0IG5vdyBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdGhlIGxvY2sg
bWF5IGdldCBpdCBiZWZvcmUgdGhlIHRocmVhZAorLy8gICB0aGF0IGdvdCB3b2tlbiB1cC4gV2hl
biBhIHRocmVhZCBiYXJnZXMgaW50byB0aGUgbG9jaywgdGhlIHRocmVhZCB0aGF0IGdvdCB3b2tl
biB1cCB3aWxsIHNpbXBseQorLy8gICBnbyBiYWNrIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLiBU
aGUgYmFyZ2luZyBiZWhhdmlvciBlbmRzIHVwIGJlaW5nIHByb2JhYmlsaXN0aWMgb24gbW9zdAor
Ly8gICBwbGF0Zm9ybXMgYW5kIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSB1bmZhaXIgdG8gc29tZSB0
aHJlYWQgYXQgc29tZSBtb21lbnQgaW4gdGltZSwgaXQgd2lsbCByYXJlbHkKKy8vICAgaGF2ZSBh
IGxvbmcgc3RyZWFrIG9mIHVuZmFpcm5lc3MgdG93YXJkcyBhbnkgcGFydGljdWxhciB0aHJlYWQ6
IGV2ZW50dWFsbHkgZWFjaCB0aHJlYWQgd2FpdGluZyBvbgorLy8gICB0aGUgbG9jayB3aWxsIGdl
dCB0byBoYXZlIGEgdHVybiBzbyBsb25nIGFzIG5vIHRocmVhZCBqdXN0IGhvbGRzIHRoZSBsb2Nr
IGZvcmV2ZXIuIFRoYXQgc2FpZCwKKy8vICAgdGhlcmUgKmlzKiBhIGNoYW5jZSBvZiBwYXRob2xv
Z2llcyAtIHVzZXJzIG9mIExvY2sgc2hvdWxkIG5vdCBkZXBlbmQgb24gZmlyc3QtaW4sIGZpcnN0
LW91dCBsb2NrCisvLyAgIGFjcXVpc2l0aW9uIG9yZGVyIHVuZGVyIGNvbnRlbnRpb24uIFRoZSBz
YW1lIGNhdmVhdCBpcyBnZW5lcmFsbHkgdHJ1ZSBvZiBTcGluTG9jayBhbmQgcGxhdGZvcm0KKy8v
ICAgbXV0ZXhlcyBvbiBzb21lIHBsYXRmb3Jtcy4KKworLy8gVGhpcyBpcyBhIHN0cnVjdCB3aXRo
b3V0IGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3RvciBzbyB0aGF0IGl0IGNhbiBiZSBzdGF0aWNh
bGx5IGluaXRpYWxpemVkLgorLy8gVXNlIExvY2sgaW4gaW5zdGFuY2UgdmFyaWFibGVzLgorc3Ry
dWN0IExvY2tCYXNlIHsKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VM
WShtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcXVpcmUpKSkgeworICAgICAgICAgICAgLy8gTG9jayBhY3F1aXJlZCEKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGxvY2tTbG93KCk7CisgICAgfQorCisg
ICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX3dvcmQuY29tcGFy
ZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkg
eworICAgICAgICAgICAgLy8gTG9jayByZWxlYXNlZCwgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHVubG9ja1Nsb3coKTsK
KyAgICB9CisKKyAgICBib29sIGlzSGVsZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV93b3JkLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7CisgICAg
fQorCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNI
ZWxkKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBp
c0hlbGRCaXQgPSAxOworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgbG9ja2VkUXVldWVCaXQg
PSAyOworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgbWFzayA9IDM7CisKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHVubG9ja1Nsb3coKTsKKworICAgIEF0b21pYzx1aW50cHRyX3Q+IG1fd29yZDsKK307CisKK2Ns
YXNzIExvY2sgOiBwdWJsaWMgTG9ja0Jhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExv
Y2spOworcHVibGljOgorICAgIExvY2soKQorICAgIHsKKyAgICAgICAgbV93b3JkLnN0b3JlKDAs
IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIH0KK307CisKK3R5cGVkZWYgTG9ja0Jh
c2UgU3RhdGljTG9jazsKK3R5cGVkZWYgTG9ja2VyPExvY2tCYXNlPiBMb2NrSG9sZGVyOworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTdGF0aWNMb2NrOwordXNpbmcgV1RGOjpM
b2NrOwordXNpbmcgV1RGOjpMb2NrSG9sZGVyOworCisjZW5kaWYgLy8gV1RGX0xvY2tfaAorCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcg
QEAgdm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVsZWFzZShNZXRhQQogCiBBTFdBWVNfSU5M
SU5FIHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5k
bGUpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIExvY2tIb2xk
ZXIgbG9ja2VyKCZtX2xvY2spOwogICAgIGlmIChoYW5kbGUtPnNpemVJbkJ5dGVzKCkpIHsKICAg
ICAgICAgZGVjcmVtZW50UGFnZU9jY3VwYW5jeShoYW5kbGUtPnN0YXJ0KCksIGhhbmRsZS0+c2l6
ZUluQnl0ZXMoKSk7CiAgICAgICAgIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShoYW5k
bGUtPnN0YXJ0KCksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSk7CkBAIC05MSw3ICs5MSw3IEBAIHZv
aWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCAKIHsKICAgICBBU1NFUlQobmV3
U2l6ZUluQnl0ZXMgPD0gbV9zaXplSW5CeXRlcyk7CiAgICAgCi0gICAgU3BpbkxvY2tIb2xkZXIg
bG9ja2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9h
bGxvY2F0b3ItPm1fbG9jayk7CiAKICAgICBuZXdTaXplSW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5y
b3VuZFVwKG5ld1NpemVJbkJ5dGVzKTsKICAgICAKQEAgLTE1MCw3ICsxNTAsNyBAQCBNZXRhQWxs
b2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvCiAKIFBhc3NSZWZQdHI8TWV0YUFsbG9j
YXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2
b2lkKiBvd25lclVJRCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7Cisg
ICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAKICAgICBpZiAoIXNpemVJbkJ5dGVzKQog
ICAgICAgICByZXR1cm4gMDsKQEAgLTE5Niw3ICsxOTYsNyBAQCBQYXNzUmVmUHRyPE1ldGFBbGxv
Y2F0b3JIYW5kbGU+IE1ldGFBbGxvCiAKIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgTWV0YUFs
bG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3MoKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tl
cigmbV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBTdGF0aXN0
aWNzIHJlc3VsdDsKICAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQgPSBtX2J5dGVzQWxsb2NhdGVk
OwogICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkID0gbV9ieXRlc1Jlc2VydmVkOwpAQCAtMjgxLDcg
KzI4MSw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlRnJvbVJlbGUKIAogdm9p
ZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNp
emVJbkJ5dGVzKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBtX2J5dGVzUmVzZXJ2ZWQgKz0gc2l6ZUlu
Qnl0ZXM7CiAgICAgYWRkRnJlZVNwYWNlKHN0YXJ0LCBzaXplSW5CeXRlcyk7CiB9CkBAIC0yODks
NyArMjg5LDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSh2bwogc2l6
ZV90IE1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSgpCiB7CiAjaWZuZGVmIE5ERUJV
RwotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxv
Y2tlcigmbV9sb2NrKTsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKICAgICBmb3IgKEZyZWVTcGFj
ZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmlyc3QoKTsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnN1Y2Nlc3NvcigpKQogICAgICAgICByZXN1bHQgKz0gbm9kZS0+bV9zaXplSW5CeXRlczsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAog
I2luY2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KKyNp
bmNsdWRlIDx3dGYvTG9jay5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMTgzLDcgKzE4Myw3
IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKICAgICBzaXplX3QgbV9i
eXRlc0NvbW1pdHRlZDsKICAgICAKLSAgICBTcGluTG9jayBtX2xvY2s7CisgICAgTG9jayBtX2xv
Y2s7CiAKICAgICBNZXRhQWxsb2NhdG9yVHJhY2tlciogbV90cmFja2VyOwogCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9TcGluTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NwaW5M
b2NrLmgJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XVEYvd3RmL1NwaW5Mb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDE2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCisvLyBT
cGluTG9jayBpcyBhIHZlcnkgc2ltcGxlIGxvY2sgaW1wbGVtZW50YXRpb24gdGhhdCBoYXMgZXh0
cmVtZWx5IGZhc3QgbG9jay91bmxvY2sgZm9yIHZlcnkgc21hbGwKKy8vIHVuY29udGVuZGVkIGNy
aXRpY2FsIHNlY3Rpb25zLiBIb3dldmVyLCBpdCB3aWxsIGV4aGliaXQgYmFkIHBlcmZvcm1hbmNl
IGRlZ3JhZGF0aW9uIHdoZW4gdGhlIGxvY2sKKy8vIGJlY29tZXMgY29udGVuZGVkOiB0aGUgdGhy
ZWFkIHRyeWluZyB0byBhY3F1aXJlIHRoZSBsb2NrIHdpbGwgc2ltcGx5IHdhc3RlIENQVSBjeWNs
ZXMuCisvLworLy8gRm9yIG1vc3QgKGFsbD8pIGxvY2tpbmcgdXNlIGNhc2VzLCBpdCdzIGJldHRl
ciB0byB1c2UgTG9jayAoc2VlIHd0Zi9Mb2NrLmgpLiBUaGF0IHVzZXMgb25seSBhIGJpdAorLy8g
bW9yZSBtZW1vcnkgKDggYnl0ZXMgaW5zdGVhZCBvZiA0IG9uIDY0LWJpdCksIGFuZCBpcyBvbmx5
IGEgYml0IHNsb3dlciBpbiB0aGUgdW5jb250ZW5kZWQgY2FzZQorLy8gKExvY2sgbmVlZHMgQ0FT
IHRvIHVubG9jaywgd2hpbGUgU3BpbkxvY2sgZG9lc24ndCksIGJ1dCB3aWxsIGJ1cm4gYSBsb3Qg
bGVzcyBDUFUgdGltZSAtIGZvciAxMAorLy8gdGhyZWFkcyBhY3F1aXJpbmcgYSA1MCBtaWNyb3Nl
Y29uZCBjcml0aWNhbCBzZWN0aW9uLCBMb2NrIHdpbGwgdXNlIHVwIHRvIDEwMHggbGVzcyBrZXJu
ZWwgQ1BVIHRpbWUKKy8vIHRoYW4gU3BpbkxvY2suCisKIC8vIFNwaW5Mb2NrQmFzZSBpcyBhIHN0
cnVjdCB3aXRob3V0IGFuIGV4cGxpY2l0bHkgZGVmaW5lZCBjb25zdHJ1Y3RvcnMgc28gdGhhdAog
Ly8gaXQgY2FuIGJlIGluaXRpYWxpemVkIGF0IGNvbXBpbGUgdGltZS4gU2VlIFN0YXRpY1NwaW5M
b2NrIGJlbG93Lgogc3RydWN0IFNwaW5Mb2NrQmFzZSB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmdQdGhyZWFkcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFk
aW5nUHRocmVhZHMuY3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmdQdGhyZWFkcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29k
QHJlYWt0aXguY29tKQogICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Ro
cmVhZGluZ1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2lu
LmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHJldmlzaW9uIDE4ODAx
OCkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImR0b2EuaCIKIAogI2lmIFVTRShXRUJfVEhS
RUFEKQotI2luY2x1ZGUgIlNwaW5Mb2NrLmgiCisjaW5jbHVkZSAiTG9jay5oIgogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0lt
cGwuY3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0
cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvVVRGOC5oPgogCiAjaWYgVVNFKFdFQl9USFJFQUQpCi0jaW5jbHVkZSAiU3Bp
bkxvY2suaCIKKyNpbmNsdWRlICJMb2NrLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CkBA
IC00MiwxOCArNDIsMTggQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKICNpZiBVU0UoV0VC
X1RIUkVBRCkKIAotY2xhc3MgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgOiBwdWJsaWMgU3Bpbkxv
Y2tIb2xkZXIgeworY2xhc3MgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgOiBwdWJsaWMgTG9ja0hv
bGRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXRvbWljU3RyaW5nVGFibGVMb2NrZXIp
OwogCi0gICAgc3RhdGljIFN0YXRpY1NwaW5Mb2NrIHNfc3RyaW5nVGFibGVMb2NrOworICAgIHN0
YXRpYyBTdGF0aWNMb2NrIHNfc3RyaW5nVGFibGVMb2NrOwogcHVibGljOgogICAgIEF0b21pY1N0
cmluZ1RhYmxlTG9ja2VyKCkKLSAgICAgICAgOiBTcGluTG9ja0hvbGRlcigmc19zdHJpbmdUYWJs
ZUxvY2spCisgICAgICAgIDogTG9ja0hvbGRlcigmc19zdHJpbmdUYWJsZUxvY2spCiAgICAgewog
ICAgIH0KIH07CiAKLVN0YXRpY1NwaW5Mb2NrIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyOjpzX3N0
cmluZ1RhYmxlTG9jazsKK1N0YXRpY0xvY2sgQXRvbWljU3RyaW5nVGFibGVMb2NrZXI6OnNfc3Ry
aW5nVGFibGVMb2NrOwogCiAjZWxzZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODgwMTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MSBAQAorMjAxNS0wOC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIExpZ2h0d2VpZ2h0IGxvY2tzIHNob3VsZCBiZSBhZGFwdGl2ZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTQ1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8g
bmV3IGJlaGF2aW9yLgorCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3Qu
bW06CisgICAgICAgIChXZWJDb3JlOjpnZXRKU1dyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
YWRkSlNXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUpTV3JhcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjpyZW1vdmVKU1dyYXBwZXJJZlJldGFpbkNvdW50T25lKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9pb3Mvd2FrL1dBS1dpbmRvdy5tbToKKyAgICAgICAgKC1bV0FLV2luZG93IHNl
dEV4cG9zZWRTY3JvbGxWaWV3UmVjdDpdKToKKyAgICAgICAgKC1bV0FLV2luZG93IGV4cG9zZWRT
Y3JvbGxWaWV3UmVjdF0pOgorCiAyMDE1LTA4LTA1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggd2hlbiByZW1vdmluZyBjaGlsZHJlbiBvZiBhIE1hdGhN
TFNlbGVjdEVsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2Ny
aXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMv
V2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsNyAr
NDgsNyBAQAogI2ltcG9ydCA8cnVudGltZS9KU0xvY2suaD4KICNpbXBvcnQgPHJ1bnRpbWUvQ29t
cGxldGlvbi5oPgogI2ltcG9ydCA8cnVudGltZS9Db21wbGV0aW9uLmg+Ci0jaW1wb3J0IDx3dGYv
U3BpbkxvY2suaD4KKyNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1wb3J0IDx3dGYvVGhyZWFkaW5n
Lmg+CiAjaW1wb3J0IDx3dGYvc3BpL2NvY29hL05TTWFwVGFibGVTUEkuaD4KICNpbXBvcnQgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNzIsMTIgKzcyLDEyIEBAIHVzaW5nIEpTQzo6bWFrZVNv
dXJjZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIE5TTWFwVGFibGUqIEpTV3JhcHBl
ckNhY2hlOwotc3RhdGljIFN0YXRpY1NwaW5Mb2NrIHNwaW5Mb2NrOworc3RhdGljIFN0YXRpY0xv
Y2sgc3BpbkxvY2s7CiAKIE5TT2JqZWN0KiBnZXRKU1dyYXBwZXIoSlNPYmplY3QqIGltcGwpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIo
JnNwaW5Mb2NrKTsKKyAgICBMb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOwogCiAgICAgaWYg
KCFKU1dyYXBwZXJDYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTg4LDcgKzg4LDcgQEAg
TlNPYmplY3QqIGdldEpTV3JhcHBlcihKU09iamVjdCogaW1wbCkKIHZvaWQgYWRkSlNXcmFwcGVy
KE5TT2JqZWN0KiB3cmFwcGVyLCBKU09iamVjdCogaW1wbCkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOworICAgIExv
Y2tIb2xkZXIgaG9sZGVyKCZzcGluTG9jayk7CiAKICAgICBpZiAoIUpTV3JhcHBlckNhY2hlKQog
ICAgICAgICBKU1dyYXBwZXJDYWNoZSA9IGNyZWF0ZVdyYXBwZXJDYWNoZSgpOwpAQCAtOTcsNyAr
OTcsNyBAQCB2b2lkIGFkZEpTV3JhcHBlcihOU09iamVjdCogd3JhcHBlciwgSlNPCiAKIHZvaWQg
cmVtb3ZlSlNXcmFwcGVyKEpTT2JqZWN0KiBpbXBsKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGhv
bGRlcigmc3BpbkxvY2spOworICAgIExvY2tIb2xkZXIgaG9sZGVyKCZzcGluTG9jayk7CiAKICAg
ICBpZiAoIUpTV3JhcHBlckNhY2hlKQogICAgICAgICByZXR1cm47CkBAIC0xMDYsNyArMTA2LDcg
QEAgdm9pZCByZW1vdmVKU1dyYXBwZXIoSlNPYmplY3QqIGltcGwpCiAKIHN0YXRpYyB2b2lkIHJl
bW92ZUpTV3JhcHBlcklmUmV0YWluQ291bnRPbmUoTlNPYmplY3QqIHdyYXBwZXIsIEpTT2JqZWN0
KiBpbXBsKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOworICAgIExv
Y2tIb2xkZXIgaG9sZGVyKCZzcGluTG9jayk7CiAKICAgICBpZiAoIUpTV3JhcHBlckNhY2hlKQog
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMv
Q0FSaW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwMCw3ICsyMDAsNyBAQCBDQVJpbmdCdWZmZXI6OkVycm9yIENBUmluZ0J1ZmZlcjo6c3Rv
cmUoCiAKIHZvaWQgQ0FSaW5nQnVmZmVyOjpzZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3Qg
c3RhcnRUaW1lLCB1aW50NjRfdCBlbmRUaW1lKQogewotICAgIEJ5dGVTcGluTG9ja2VyIGxvY2tl
cihtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY3Vy
cmVudEZyYW1lQm91bmRzTG9jayk7CiAgICAgdWludDMyX3QgbmV4dFB0ciA9IG1fdGltZUJvdW5k
c1F1ZXVlUHRyICsgMTsKICAgICB1aW50MzJfdCBpbmRleCA9IG5leHRQdHIgJiBrR2VuZXJhbFJp
bmdUaW1lQm91bmRzUXVldWVNYXNrOwogCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBDQVJpbmdC
dWZmZXI6OnNldEN1cnJlbnRGcmFtZUJvdW5kcwogCiB2b2lkIENBUmluZ0J1ZmZlcjo6Z2V0Q3Vy
cmVudEZyYW1lQm91bmRzKHVpbnQ2NF90ICZzdGFydFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1lKQog
ewotICAgIEJ5dGVTcGluTG9ja2VyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOwor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY3VycmVudEZyYW1lQm91bmRzTG9jayk7CiAgICAgdWlu
dDMyX3QgY3VyUHRyID0gbV90aW1lQm91bmRzUXVldWVQdHI7CiAgICAgdWludDMyX3QgaW5kZXgg
PSBjdXJQdHIgJiBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVNYXNrOwogICAgIENBUmluZ0J1
ZmZlcjo6VGltZUJvdW5kcyYgYm91bmRzID0gbV90aW1lQm91bmRzUXVldWVbaW5kZXhdOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIu
aAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFj
L0NBUmluZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5B
QkxFKFdFQl9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJPWCkKIAogI2luY2x1ZGUgPHJ1bnRpbWUv
QXJyYXlCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8
d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHR5cGVkZWYgc3RydWN0IEF1
ZGlvQnVmZmVyTGlzdCBBdWRpb0J1ZmZlckxpc3Q7CkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6
CiAgICAgfTsKICAgICAKICAgICBWZWN0b3I8VGltZUJvdW5kcz4gbV90aW1lQm91bmRzUXVldWU7
Ci0gICAgQnl0ZVNwaW5Mb2NrIG1fY3VycmVudEZyYW1lQm91bmRzTG9jazsKKyAgICBMb2NrIG1f
Y3VycmVudEZyYW1lQm91bmRzTG9jazsKICAgICBpbnQzMl90IG1fdGltZUJvdW5kc1F1ZXVlUHRy
OwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5k
b3cubW0JKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93
YWsvV0FLV2luZG93Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW1wb3J0
ICJXS0NvbnRlbnRPYnNlcnZhdGlvbi5oIgogI2ltcG9ydCAiV0tWaWV3UHJpdmF0ZS5oIgogI2lt
cG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDx3dGYvU3BpbkxvY2suaD4K
KyNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAKIFdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICogY29uc3Qg
V0FLV2luZG93U2NyZWVuU2NhbGVEaWRDaGFuZ2VOb3RpZmljYXRpb24gPSBAIldBS1dpbmRvd1Nj
cmVlblNjYWxlRGlkQ2hhbmdlTm90aWZpY2F0aW9uIjsKIFdFQkNPUkVfRVhQT1JUIE5TU3RyaW5n
ICogY29uc3QgV0FLV2luZG93VmlzaWJpbGl0eURpZENoYW5nZU5vdGlmaWNhdGlvbiA9IEAiV0FL
V2luZG93VmlzaWJpbGl0eURpZENoYW5nZU5vdGlmaWNhdGlvbiI7CkBAIC01Niw3ICs1Niw3IEBA
IHN0YXRpYyBXZWJFdmVudCAqY3VycmVudEV2ZW50ID0gbmlsOwogc3RhdGljIGlkPE9yaWVudGF0
aW9uUHJvdmlkZXI+IGdPcmllbnRhdGlvblByb3ZpZGVyOwogCiBAaW1wbGVtZW50YXRpb24gV0FL
V2luZG93IHsKLSAgICBTcGluTG9jayBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0TG9jazsKKyAgICBM
b2NrIF9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrOwogICAgIENHUmVjdCBfZXhwb3NlZFNjcm9s
bFZpZXdSZWN0OwogfQogCkBAIC0zNTgsMTQgKzM1OCwxNCBAQCAtICh2b2lkKXNlbmRNb3VzZU1v
dmVFdmVudDooV2ViRXZlbnQgKilhCiAKIC0gKHZvaWQpc2V0RXhwb3NlZFNjcm9sbFZpZXdSZWN0
OihDR1JlY3QpZXhwb3NlZFNjcm9sbFZpZXdSZWN0CiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9j
a2VyKCZfZXhwb3NlZFNjcm9sbFZpZXdSZWN0TG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIo
Jl9leHBvc2VkU2Nyb2xsVmlld1JlY3RMb2NrKTsKICAgICBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0
ID0gZXhwb3NlZFNjcm9sbFZpZXdSZWN0OwogfQogCiAtIChDR1JlY3QpZXhwb3NlZFNjcm9sbFZp
ZXdSZWN0CiB7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJl9leHBvc2Vk
U2Nyb2xsVmlld1JlY3RMb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoJl9leHBvc2Vk
U2Nyb2xsVmlld1JlY3RMb2NrKTsKICAgICAgICAgaWYgKCFDR1JlY3RJc051bGwoX2V4cG9zZWRT
Y3JvbGxWaWV3UmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gX2V4cG9zZWRTY3JvbGxWaWV3UmVj
dDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxNS0wOC0w
NSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIExpZ2h0d2VpZ2h0
IGxvY2tzIHNob3VsZCBiZSBhZGFwdGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjpjbGVhclF1ZXVlZFRvdWNoRXZl
bnRzRm9yUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OkV2ZW50RGlzcGF0Y2hlcjo6Z2V0UXVldWVk
VG91Y2hFdmVudHNGb3JQYWdlKToKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjp0
b3VjaEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFRv
dWNoRXZlbnRzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVy
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6Vmlld1VwZGF0ZURpc3BhdGNoZXI6OnZpc2libGVDb250ZW50
UmVjdFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdVcGRhdGVEaXNwYXRjaGVyOjpkaXNw
YXRjaFZpc2libGVDb250ZW50UmVjdFVwZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmg6CisKIDIwMTUtMDgtMDUgIFRpbSBIb3J0b24gIDx0
aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUERGUGx1Z2lucyBhcmUgY2xpcHBl
ZCBpbiBsaW5rIHByZXZpZXdzIChhbmQgcmVtYWluIHNvIHdoZW4gb3BlbmVkKQpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hl
ci5jcHAJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsMTMgKzE3Miwx
MyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6d2hlZWxFdmVudCh1aW50NjRfCiAjaWYgRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCiB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6Y2xlYXJRdWV1ZWRUb3Vj
aEV2ZW50c0ZvclBhZ2UoY29uc3QgV2ViUGFnZSYgd2ViUGFnZSkKIHsKLSAgICBTcGluTG9ja0hv
bGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigm
bV90b3VjaEV2ZW50c0xvY2spOwogICAgIG1fdG91Y2hFdmVudHMucmVtb3ZlKHdlYlBhZ2UucGFn
ZUlEKCkpOwogfQogCiB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6Z2V0UXVldWVkVG91Y2hFdmVudHNG
b3JQYWdlKGNvbnN0IFdlYlBhZ2UmIHdlYlBhZ2UsIFRvdWNoRXZlbnRRdWV1ZSYgZGVzdGluYXRp
b25RdWV1ZSkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2Nr
KTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xvY2spOwogICAgIGRlc3Rp
bmF0aW9uUXVldWUgPSBtX3RvdWNoRXZlbnRzLnRha2Uod2ViUGFnZS5wYWdlSUQoKSk7CiB9CiAK
QEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6dG91Y2hFdmVudCh1aW50
NjRfCiB7CiAgICAgYm9vbCB1cGRhdGVMaXN0V2FzRW1wdHk7CiAgICAgewotICAgICAgICBTcGlu
TG9ja0hvbGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKKyAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKICAgICAgICAgdXBkYXRlTGlzdFdhc0VtcHR5
ID0gbV90b3VjaEV2ZW50cy5pc0VtcHR5KCk7CiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90
b3VjaEV2ZW50cy5hZGQocGFnZUlELCBUb3VjaEV2ZW50UXVldWUoKSk7CiAgICAgICAgIGlmIChh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hUb3VjaEV2ZW50CiB7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgVG91Y2hF
dmVudFF1ZXVlPiBsb2NhbENvcHk7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fdG91
Y2hFdmVudHNMb2NrKTsKICAgICAgICAgbG9jYWxDb3B5LnN3YXAobV90b3VjaEV2ZW50cyk7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNw
YXRjaGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0V2ZW50RGlzcGF0Y2hlci5oCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3Bpbkxv
Y2suaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmlt
aXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk3LDcgKzk3LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpXaGVlbEV2ZW50RGVsdGFU
cmFja2VyPiBtX3JlY2VudFdoZWVsRXZlbnREZWx0YVRyYWNrZXI7CiAjaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCi0gICAgU3BpbkxvY2sgbV90b3VjaEV2ZW50c0xvY2s7CisgICAgTG9jayBt
X3RvdWNoRXZlbnRzTG9jazsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBUb3VjaEV2ZW50UXVldWU+
IG1fdG91Y2hFdmVudHM7CiAjZW5kaWYKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5jcHAJKHJl
dmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3
VXBkYXRlRGlzcGF0Y2hlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9p
ZCBWaWV3VXBkYXRlRGlzcGF0Y2hlcjo6dmlzaWJsZUNvbnRlbgogewogICAgIGJvb2wgdXBkYXRl
TGlzdFdhc0VtcHR5OwogICAgIHsKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2Rh
dGFNdXRleCk7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2RhdGFNdXRleCk7CiAgICAg
ICAgIHVwZGF0ZUxpc3RXYXNFbXB0eSA9IG1fbGF0ZXN0VXBkYXRlLmlzRW1wdHkoKTsKICAgICAg
ICAgYXV0byBpdGVyYXRvciA9IG1fbGF0ZXN0VXBkYXRlLmZpbmQocGFnZUlEKTsKICAgICAgICAg
aWYgKGl0ZXJhdG9yID09IG1fbGF0ZXN0VXBkYXRlLmVuZCgpKQpAQCAtNzgsNyArNzgsNyBAQCB2
b2lkIFZpZXdVcGRhdGVEaXNwYXRjaGVyOjpkaXNwYXRjaFZpc2liCiB7CiAgICAgSGFzaE1hcDx1
aW50NjRfdCwgVXBkYXRlRGF0YT4gdXBkYXRlOwogICAgIHsKLSAgICAgICAgU3BpbkxvY2tIb2xk
ZXIgbG9ja2VyKCZtX2RhdGFNdXRleCk7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2Rh
dGFNdXRleCk7CiAgICAgICAgIHVwZGF0ZSA9IFdURjo6bW92ZShtX2xhdGVzdFVwZGF0ZSk7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0
ZURpc3BhdGNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuaAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJWaXNpYmxlQ29udGVudFJlY3RV
cGRhdGVJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Lmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAgICB9Owog
CiAgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKLSAgICBTcGluTG9jayBtX2RhdGFNdXRleDsK
KyAgICBMb2NrIG1fZGF0YU11dGV4OwogICAgIEhhc2hNYXA8dWludDY0X3QsIFVwZGF0ZURhdGE+
IG1fbGF0ZXN0VXBkYXRlOwogfTsKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MDUxKQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDgtMDYgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBMaWdodHdlaWdodCBsb2NrcyBzaG91bGQg
YmUgYWRhcHRpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NzU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0V2ViS2l0QVBJLnZjeHByb2o6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHA6IEFkZGVkLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6cnVuTG9ja1Rlc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVCk6CisKIDIwMTUtMDgtMDYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CiAKICAgICAgICAgUGFzcy10aHJvdWdoIHRoZSB1bmRlZmluZWQgb3B0aW9ucyBpbiBy
dW4tanNjCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4ODAx
OCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDYgKzc1LDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9IYXNoU2V0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dURi9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNwcAogICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9MaXN0SGFzaFNldC5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XVEYvTG9jay5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYv
TUQ1LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NYXRoRXh0cmFzLmNw
cAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NZWRpYVRpbWUuY3BwCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0V2ViS2l0QVBJ
LnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
LnZjeHByb2ovVGVzdFdlYktpdEFQSS52Y3hwcm9qCShyZXZpc2lvbiAxODgwMTgpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0V2ViS2l0QVBJLnZjeHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAi
IGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgi
Pz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHht
bG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMi
PgogICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgogICAgIDxQcm9q
ZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z1N1ZmZpeHxXaW4zMiI+CkBAIC0zMTksNiAr
MzE5LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxIYXNoU2V0LmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxJbnRlZ2VyVG9TdHJp
bmdDb252ZXJzaW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdU
RlxMaXN0SGFzaFNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xX
VEZcTG9jay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xXVEZcTUQ1
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxNYXRoRXh0cmFz
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxNZWRpYVRpbWUu
Y3BwIiAvPgpAQCAtMzY1LDQgKzM2Niw0IEBACiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1Rhcmdl
dHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0i
RXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE4ODAxOCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3
IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29h
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlF
NzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJ
CTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQy
M0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJCTBGM0I5
NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCOTRBNTFBNzcy
NjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovOyB9OworCQkw
RkZDNDVBNjFCNzNFQkVCMDA4NUJENjIgLyogTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDNDVBNDFCNzNFQkUyMDA4NUJENjIgLyogTG9j
ay5jcHAgKi87IH07CiAJCTFBMDJDODcwMTI1RDRDRkQwMEUzRjRCRCAvKiBmaW5kLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwMkM4
NEIxMjVENEE1RTAwRTNGNEJEIC8qIGZpbmQuaHRtbCAqLzsgfTsKIAkJMUE1MEFBMjAxQTJBNTFG
QzAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNyZWF0ZS1wYWdlLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1MEFBMUYxQTJB
NEVBNTAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNyZWF0ZS1wYWdlLmh0bWwgKi87IH07
CiAJCTFBNjM0NzlGMTgzRDcyQTQwMDVCMTcwNyAvKiBhbGwtY29udGVudC1pbi1vbmUtaWZyYW1l
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNEM0QxOUIxN0IxQTdCMDAwQzdDNDE1IC8qIGFsbC1jb250ZW50LWluLW9uZS1pZnJhbWUu
aHRtbCAqLzsgfTsKQEAgLTQyOCw2ICs0MjksNyBAQAogCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMy
NzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM2QzRDQjE0MTAyN0UwMDA1QjdGMEMgLyogUmVk
QmxhY2tUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZEJs
YWNrVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzZDNENFMTQxMDM0
QUQwMDVCN0YwQyAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkZDNDVBNDFCNzNFQkUyMDA4NUJENjIgLyogTG9jay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQ0NjQwMTIxNjdBODMwNTAwMEJEMjE4IC8qIExheW91dFVuaXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0VW5pdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0RjNCMTEyMTVFNDVFQUIwMDIxMDA2OSAvKiBTYXR1cmF0ZWRB
cml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBMDJDODRCMTI1RDRBNUUwMEUzRjRCRCAvKiBmaW5kLmh0bWwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBmaW5kLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMDk2LDYgKzEwOTgsNyBAQAogCQkJCTI2QjJERkY4MTVCREU1OTkwMDRGNjkxRCAv
KiBIYXNoU2V0LmNwcCAqLywKIAkJCQkyNjZGQUZEMjE1RTU3NzUyMDBGNjFENUIgLyogSW50ZWdl
clRvU3RyaW5nQ29udmVyc2lvbi5jcHAgKi8sCiAJCQkJMjYzMDBCMTcxNjc1NUNEOTAwNjY4ODZE
IC8qIExpc3RIYXNoU2V0LmNwcCAqLywKKwkJCQkwRkZDNDVBNDFCNzNFQkUyMDA4NUJENjIgLyog
TG9jay5jcHAgKi8sCiAJCQkJQjQwMzlGOUMxNUU2RDhCMzAwNzI1NUQ2IC8qIE1hdGhFeHRyYXMu
Y3BwICovLAogCQkJCUNENTM5M0M3MTc1N0JBOTcwMEMwNzEyMyAvKiBNRDUuY3BwICovLAogCQkJ
CUNENTQ5N0IzMTU4NTdGMEMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuY3BwICovLApAQCAtMTU2Nyw2
ICsxNTcwLDcgQEAKIAkJCQk3Q0NFN0VDOTFBNDExQTdFMDA0NDdDNEMgLyogUmVuZGVyZWRJbWFn
ZUZyb21ET01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQ0ExQTQxMUE3RTAwNDQ3
QzRDIC8qIFJlbmRlcmVkSW1hZ2VGcm9tRE9NUmFuZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk1
MUNEMUM2QzFCMzhDRTQzMDAxNDJDQTUgLyogTW9kYWxBbGVydHMubW0gaW4gU291cmNlcyAqLywK
KwkJCQkwRkZDNDVBNjFCNzNFQkVCMDA4NUJENjIgLyogTG9jay5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3Q0NFN0YwRTFBNDExQUU2MDA0NDdDNEMgLyogUmVzaXplUmV2ZXJzZVBhZ2luYXRlZFdl
YlZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEYxQTQxMUFFNjAwNDQ3QzRDIC8q
IFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMTAx
QTQxMUFFNjAwNDQ3QzRDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHkuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNw
cAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXVEY7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgTG9ja1R5cGU+Cit2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVkIG51bVRocmVhZEdyb3Vwcywg
dW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNpZ25lZCB3b3JrUGVyQ3JpdGljYWxTZWN0
aW9uLCB1bnNpZ25lZCBudW1JdGVyYXRpb25zKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2Nr
VHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8TG9ja1R5cGVbXT4obnVtVGhyZWFkR3Jv
dXBzKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8ZG91YmxlW10+IHdvcmRzID0gc3RkOjptYWtlX3Vu
aXF1ZTxkb3VibGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhy
ZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlm
aWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIHRocmVhZEdyb3VwSW5kZXggPSBudW1UaHJlYWRHcm91cHM7IHRocmVhZEdyb3Vw
SW5kZXgtLTspIHsKKyAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0gPSAwOworCisgICAg
ICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVh
ZEluZGV4LS07KSB7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1U
aHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAg
ICAgICAgIkJlbmNobWFyayB0aHJlYWQiLAorICAgICAgICAgICAgICAgIFt0aHJlYWRHcm91cElu
ZGV4LCAmbG9ja3MsICZ3b3JkcywgbnVtSXRlcmF0aW9ucywgd29ya1BlckNyaXRpY2FsU2VjdGlv
bl0gKCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JdGVyYXRp
b25zOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2Nrc1t0aHJlYWRHcm91cElu
ZGV4XS5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB3
b3JrUGVyQ3JpdGljYWxTZWN0aW9uOyBqLS07KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdKys7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2Nr
c1t0aHJlYWRHcm91cEluZGV4XS51bmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCB0
aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFk
SW5kZXgtLTspCisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNbdGhyZWFk
SW5kZXhdKTsKKworICAgIGRvdWJsZSBleHBlY3RlZCA9IDA7CisgICAgZm9yICh1aW50NjRfdCBp
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bUl0ZXJhdGlvbnMpICogd29ya1BlckNyaXRpY2Fs
U2VjdGlvbiAqIG51bVRocmVhZHNQZXJHcm91cDsgaS0tOykKKyAgICAgICAgZXhwZWN0ZWQrKzsK
KworICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRleCA9IG51bVRocmVhZEdyb3Vwczsg
dGhyZWFkR3JvdXBJbmRleC0tOykKKyAgICAgICAgRVhQRUNUX0VRKGV4cGVjdGVkLCB3b3Jkc1t0
aHJlYWRHcm91cEluZGV4XSk7Cit9CisKK1RFU1QoV1RGX0xvY2ssIFVuY29udGVudGVkU2hvcnRT
ZWN0aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEsIDEsIDEwMDAwMDAwKTsKK30K
KworVEVTVChXVEZfTG9jaywgVW5jb250ZW50ZWRMb25nU2VjdGlvbikKK3sKKyAgICBydW5Mb2Nr
VGVzdDxMb2NrPigxLCAxLCAxMDAwMCwgMTAwMCk7Cit9CisKK1RFU1QoV1RGX0xvY2ssIENvbnRl
bnRlZFNob3J0U2VjdGlvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxMCwgMSwgMTAw
MDAwMDApOworfQorCitURVNUKFdURl9Mb2NrLCBDb250ZW50ZWRMb25nU2VjdGlvbikKK3sKKyAg
ICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKK30KKworVEVTVChXVEZf
TG9jaywgTWFueUNvbnRlbnRlZFNob3J0U2VjdGlvbnMpCit7CisgICAgcnVuTG9ja1Rlc3Q8TG9j
az4oMTAsIDEwLCAxLCA1MDAwMDApOworfQorCitURVNUKFdURl9Mb2NrLCBNYW55Q29udGVudGVk
TG9uZ1NlY3Rpb25zKQoreworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwgMTAwMDAsIDIw
MDApOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="283582"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258405</attachid>
            <date>2015-08-06 15:04:06 -0700</date>
            <delta_ts>2015-08-07 13:10:45 -0700</delta_ts>
            <desc>fix most style</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>75976</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDE1LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TGlnaHR3ZWlnaHQgbG9ja3Mgc2hvdWxkIGJlIGFkYXB0aXZlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1NDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBHZW9mZnJleSBHYXJlbi4KKworICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2suaDoKKyAgICAg
ICAgKEpTQzo6Q29waWVkQmxvY2s6OndvcmtMaXN0TG9jayk6CisgICAgICAgICogaGVhcC9Db3Bp
ZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnNob3VsZFJlcG9y
dExpdmVCeXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMp
OgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3Bh
Y2U6OkNvcGllZEdlbmVyYXRpb246OkNvcGllZEdlbmVyYXRpb24pOgorICAgICAgICAqIGhlYXAv
Q29waWVkU3BhY2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xl
RXZhY3VhdGVkQmxvY2spOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmg6Cisg
ICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6Z2V0TmV4dEJsb2Nrc1RvQ29weSk6Cisg
ICAgICAgICogaGVhcC9MaXN0YWJsZUhhbmRsZXIuaDoKKyAgICAgICAgKEpTQzo6TGlzdGFibGVI
YW5kbGVyOjpMaXN0OjphZGRUaHJlYWRTYWZlKToKKyAgICAgICAgKEpTQzo6TGlzdGFibGVIYW5k
bGVyOjpMaXN0OjphZGROb3RUaHJlYWRTYWZlKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9y
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29weUxhdGVyKToKKyAgICAg
ICAgKiBydW50aW1lL1R5cGVQcm9maWxlckxvZy5oOgorCiAyMDE1LTA4LTA1ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtFUzZdIENsYXNzIHBhcnNlciBkb2Vz
IG5vdCBhbGxvdyBtZXRob2RzIG5hbWVkIHNldCBhbmQgZ2V0LgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotc3RhdGljIFN0YXRp
Y1NwaW5Mb2NrIGNyYXNoTG9jazsKK3N0YXRpYyBTdGF0aWNMb2NrIGNyYXNoTG9jazsKIAogdm9p
ZCBzdGFydENyYXNoaW5nKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2suaAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1
ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9E
b3VibHlMaW5rZWRMaXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5jbHVkZSA8
d3RmL0xvY2suaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU0LDggKzU0LDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGlkUHJvbW90ZSgpOwogCiAgICAgdW5zaWduZWQgbGl2ZUJ5dGVzKCk7Ci0g
ICAgYm9vbCBzaG91bGRSZXBvcnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBKU0NlbGwqIG93
bmVyKTsKLSAgICB2b2lkIHJlcG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpTQ2VsbCos
IENvcHlUb2tlbiwgdW5zaWduZWQpOworICAgIGJvb2wgc2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKExv
Y2tIb2xkZXImLCBKU0NlbGwqIG93bmVyKTsKKyAgICB2b2lkIHJlcG9ydExpdmVCeXRlcyhMb2Nr
SG9sZGVyJiwgSlNDZWxsKiwgQ29weVRva2VuLCB1bnNpZ25lZCk7CiAgICAgdm9pZCByZXBvcnRM
aXZlQnl0ZXNEdXJpbmdDb3B5aW5nKHVuc2lnbmVkKTsKICAgICB2b2lkIGRpZFN1cnZpdmVHQygp
OwogICAgIHZvaWQgZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCk7CkBAIC04NSw3ICs4NSw3IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaGFzV29ya0xpc3QoKTsKICAgICBDb3B5V29ya0xpc3QmIHdv
cmtMaXN0KCk7Ci0gICAgU3BpbkxvY2smIHdvcmtMaXN0TG9jaygpIHsgcmV0dXJuIG1fd29ya0xp
c3RMb2NrOyB9CisgICAgTG9jayYgd29ya0xpc3RMb2NrKCkgeyByZXR1cm4gbV93b3JrTGlzdExv
Y2s7IH0KIAogcHJpdmF0ZToKICAgICBDb3BpZWRCbG9jayhzaXplX3QpOwpAQCAtOTgsNyArOTgs
NyBAQCBwcml2YXRlOgogCiAgICAgc2l6ZV90IG1fY2FwYWNpdHk7CiAKLSAgICBTcGluTG9jayBt
X3dvcmtMaXN0TG9jazsKKyAgICBMb2NrIG1fd29ya0xpc3RMb2NrOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxDb3B5V29ya0xpc3Q+IG1fd29ya0xpc3Q7CiAKICAgICBzaXplX3QgbV9yZW1haW5pbmc7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGlu
ZXMuaAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAgICAgCi1pbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6c2hvdWxkUmVwb3J0
TGl2ZUJ5dGVzKFNwaW5Mb2NrSG9sZGVyJiwgSlNDZWxsKiBvd25lcikKK2lubGluZSBib29sIENv
cGllZEJsb2NrOjpzaG91bGRSZXBvcnRMaXZlQnl0ZXMoTG9ja0hvbGRlciYsIEpTQ2VsbCogb3du
ZXIpCiB7CiAgICAgLy8gV2Ugd2FudCB0byBhZGQgdG8gbGl2ZSBieXRlcyBpZiB0aGUgb3duZXIg
aXNuJ3QgcGFydCBvZiB0aGUgcmVtZW1iZXJlZCBzZXQgb3IKICAgICAvLyBpZiB0aGlzIGJsb2Nr
IHdhcyBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBsYXN0IGN5Y2xlLiAKQEAgLTQzLDcgKzQzLDcgQEAg
aW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OnNob3VsZFJlcG9ydExpdgogICAgIHJldHVybiAhSGVh
cDo6aXNSZW1lbWJlcmVkKG93bmVyKSB8fCAhbV9pc09sZDsKIH0KIAotaW5saW5lIHZvaWQgQ29w
aWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpTQ2VsbCogb3duZXIs
IENvcHlUb2tlbiB0b2tlbiwgdW5zaWduZWQgYnl0ZXMpCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9j
azo6cmVwb3J0TGl2ZUJ5dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyLCBDb3B5VG9rZW4g
dG9rZW4sIHVuc2lnbmVkIGJ5dGVzKQogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICNpZm5k
ZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIENvcGll
ZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKENvcGllCiAKICAgICB7CiAgICAgICAgIC8vIEFsd2F5
cyBwdXQgdGhlIGJsb2NrIGludG8gdGhlIG9sZCBnZW4gYmVjYXVzZSBpdCdzIGJlaW5nIHByb21v
dGVkIQotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b1NwYWNlTG9jayk7CiAgICAgICAgIG1fb2xkR2Vu
LnRvU3BhY2UtPnB1c2goYmxvY2spOwogICAgICAgICBtX2Jsb2NrU2V0LmFkZChibG9jayk7CiAg
ICAgICAgIG1fb2xkR2VuLmJsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJs
b2NrKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJl
dmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDkgQEAKICNpbmNsdWRlIDx3dGYvQ2hlY2tl
ZEJvb2xlYW4uaD4KICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvT1NB
bGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZUJsb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1Nw
aW5Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKQEAgLTExMyw3ICsxMTMsNyBAQCBwcml2YXRlOgogCiAg
ICAgSGFzaFNldDxDb3BpZWRCbG9jayo+IG1fYmxvY2tTZXQ7CiAKLSAgICBTcGluTG9jayBtX3Rv
U3BhY2VMb2NrOworICAgIExvY2sgbV90b1NwYWNlTG9jazsKIAogICAgIHN0cnVjdCBDb3BpZWRH
ZW5lcmF0aW9uIHsKICAgICAgICAgQ29waWVkR2VuZXJhdGlvbigpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaAkocmV2aXNpb24gMTg4
MDE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6
OnJlY3ljbGVFdmFjdWF0ZQogICAgIEFTU0VSVChibG9jay0+Y2FuQmVSZWN5Y2xlZCgpKTsKICAg
ICBBU1NFUlQoIWJsb2NrLT5tX2lzUGlubmVkKTsKICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9s
ZGVyIGxvY2tlcigmbV90b1NwYWNlTG9jayk7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCZt
X3RvU3BhY2VMb2NrKTsKICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2spOwogICAgICAg
ICBpZiAoY29sbGVjdGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rpb24pCiAgICAgICAgICAgICBtX25l
d0dlbi5mcm9tU3BhY2UtPnJlbW92ZShibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJldmlzaW9uIDE4ODAxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6
ZGlkRmluaXNoTWFya2luCiB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRDb3B5aW5n
KCkKIHsKICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7
CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2NvcHlMb2NrKTsKICAgICAgICAgaWYgKG1f
dm0tPmhlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEVkZW5Db2xsZWN0aW9uKSB7CiAgICAg
ICAgICAgICAvLyBSZXNldCB0aGUgdmVjdG9yIHRvIGJlIGVtcHR5LCBidXQgZG9uJ3QgdGhyb3cg
YXdheSB0aGUgYmFja2luZyBzdG9yZS4KICAgICAgICAgICAgIG1fYmxvY2tzVG9Db3B5LnNocmlu
aygwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hh
cmVkRGF0YS5oCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ1RocmVhZFNoYXJlZERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAog
I2luY2x1ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIKICNpbmNsdWRlIDxjb25kaXRpb25f
dmFyaWFibGU+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvU3Bpbkxv
Y2suaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC05Nyw3ICs5Nyw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjptdXRl
eCBtX29wYXF1ZVJvb3RzTXV0ZXg7CiAgICAgSGFzaFNldDx2b2lkKj4gbV9vcGFxdWVSb290czsK
IAotICAgIFNwaW5Mb2NrIG1fY29weUxvY2s7CisgICAgTG9jayBtX2NvcHlMb2NrOwogICAgIFZl
Y3RvcjxDb3BpZWRCbG9jayo+IG1fYmxvY2tzVG9Db3B5OwogICAgIHNpemVfdCBtX2NvcHlJbmRl
eDsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOwpA
QCAtMTE1LDcgKzExNSw3IEBAIHByaXZhdGU6CiAKIGlubGluZSB2b2lkIEdDVGhyZWFkU2hhcmVk
RGF0YTo6Z2V0TmV4dEJsb2Nrc1RvQ29weShzaXplX3QmIHN0YXJ0LCBzaXplX3QmIGVuZCkKIHsK
LSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fY29weUxvY2spOworICAgIExvY2tIb2xkZXIg
bG9ja2VyKCZtX2NvcHlMb2NrKTsKICAgICBzdGFydCA9IG1fY29weUluZGV4OwogICAgIGVuZCA9
IHN0ZDo6bWluKG1fYmxvY2tzVG9Db3B5LnNpemUoKSwgbV9jb3B5SW5kZXggKyBzX2Jsb2NrRnJh
Z21lbnRMZW5ndGgpOwogICAgIG1fY29weUluZGV4ID0gZW5kOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTGlzdGFibGVIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTGlzdGFibGVIYW5kbGVyLmgJKHJldmlzaW9uIDE4ODAxOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xpc3RhYmxlSGFuZGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSw5ICsyMSw5IEBACiAjZGVmaW5lIExpc3RhYmxlSGFuZGxlcl9oCiAKICNpbmNs
dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Mb2Nr
ZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvU3Bpbkxv
Y2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHZvaWQg
YWRkVGhyZWFkU2FmZShUKiBoYW5kbGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBTcGluTG9j
a0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigm
bV9sb2NrKTsKICAgICAgICAgICAgIGFkZE5vdFRocmVhZFNhZmUoaGFuZGxlcik7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1f
Zmlyc3QgPSBoYW5kbGVyOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBTcGluTG9jayBt
X2xvY2s7CisgICAgICAgIExvY2sgbV9sb2NrOwogICAgICAgICBUKiBtX2ZpcnN0OwogICAgIH07
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJr
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVT
dGFja01hcmtlci5jcHAJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2OCw4ICs1
NjgsOCBAQCBib29sIE1hY2hpbmVUaHJlYWRzOjp0cnlDb3B5T3RoZXJUaHJlYWRTCiB7CiAgICAg
Ly8gUHJldmVudCB0d28gVk1zIGZyb20gc3VzcGVuZGluZyBlYWNoIG90aGVyJ3MgdGhyZWFkcyBh
dCB0aGUgc2FtZSB0aW1lLAogICAgIC8vIHdoaWNoIGNhbiBjYXVzZSBkZWFkbG9jazogPHJkYXI6
Ly9wcm9ibGVtLzIwMzAwODQyPi4KLSAgICBzdGF0aWMgU3RhdGljU3BpbkxvY2sgbXV0ZXg7Ci0g
ICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY1NwaW5Mb2NrPiBsb2NrKG11dGV4KTsKKyAgICBzdGF0
aWMgU3RhdGljTG9jayBtdXRleDsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9j
ayhtdXRleCk7CiAKICAgICAqc2l6ZSA9IDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAxODgwMTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUwLDcgKzI1MCw3IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5TGF0
ZXIoSlNDZWwKIAogICAgIEFTU0VSVChoZWFwKCktPm1fc3RvcmFnZVNwYWNlLmNvbnRhaW5zKGJs
b2NrKSk7CiAKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJmJsb2NrLT53b3JrTGlzdExvY2so
KSk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoJmJsb2NrLT53b3JrTGlzdExvY2soKSk7CiAgICAg
aWYgKGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xsZWN0aW9uIHx8IGJs
b2NrLT5zaG91bGRSZXBvcnRMaXZlQnl0ZXMobG9ja2VyLCBvd25lcikpIHsKICAgICAgICAgbV9i
eXRlc0NvcGllZCArPSBieXRlczsKICAgICAgICAgYmxvY2stPnJlcG9ydExpdmVCeXRlcyhsb2Nr
ZXIsIG93bmVyLCB0b2tlbiwgYnl0ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Tb3VyY2VQcm92aWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5jcHAJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIKIAogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3
dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC00NCwxMSArNDQsMTEgQEAgU291cmNlUHJvdmlkZXI6On5Tb3VyY2VQcm92aWRlcigp
CiB7CiB9CiAKLXN0YXRpYyBTdGF0aWNTcGluTG9jayBwcm92aWRlcklkTG9jazsKK3N0YXRpYyBT
dGF0aWNMb2NrIHByb3ZpZGVySWRMb2NrOwogCiB2b2lkIFNvdXJjZVByb3ZpZGVyOjpnZXRJRCgp
CiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9jaygmcHJvdmlkZXJJZExvY2spOworICAgIExvY2tI
b2xkZXIgbG9jaygmcHJvdmlkZXJJZExvY2spOwogICAgIGlmICghbV9pZCkgewogICAgICAgICBz
dGF0aWMgaW50cHRyX3QgbmV4dFByb3ZpZGVySUQgPSAwOwogICAgICAgICBtX2lkID0gKytuZXh0
UHJvdmlkZXJJRDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ckRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFByb2ZpbGVyIHsKIAog
c3RhdGljIHN0ZDo6YXRvbWljPGludD4gZGF0YWJhc2VDb3VudGVyOwogCi1zdGF0aWMgU3RhdGlj
U3BpbkxvY2sgcmVnaXN0cmF0aW9uTG9jazsKK3N0YXRpYyBTdGF0aWNMb2NrIHJlZ2lzdHJhdGlv
bkxvY2s7CiBzdGF0aWMgc3RkOjphdG9taWM8aW50PiBkaWRSZWdpc3RlckF0RXhpdDsKIHN0YXRp
YyBEYXRhYmFzZSogZmlyc3REYXRhYmFzZTsKIApAQCAtMTM4LDE0ICsxMzgsMTQgQEAgdm9pZCBE
YXRhYmFzZTo6YWRkRGF0YWJhc2VUb0F0RXhpdCgpCiAgICAgaWYgKCsrZGlkUmVnaXN0ZXJBdEV4
aXQgPT0gMSkKICAgICAgICAgYXRleGl0KGF0RXhpdENhbGxiYWNrKTsKICAgICAKLSAgICBTcGlu
TG9ja0hvbGRlciBob2xkZXIocmVnaXN0cmF0aW9uTG9jayk7CisgICAgTG9ja0hvbGRlciBob2xk
ZXIocmVnaXN0cmF0aW9uTG9jayk7CiAgICAgbV9uZXh0UmVnaXN0ZXJlZERhdGFiYXNlID0gZmly
c3REYXRhYmFzZTsKICAgICBmaXJzdERhdGFiYXNlID0gdGhpczsKIH0KIAogdm9pZCBEYXRhYmFz
ZTo6cmVtb3ZlRGF0YWJhc2VGcm9tQXRFeGl0KCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBob2xk
ZXIocmVnaXN0cmF0aW9uTG9jayk7CisgICAgTG9ja0hvbGRlciBob2xkZXIocmVnaXN0cmF0aW9u
TG9jayk7CiAgICAgZm9yIChEYXRhYmFzZSoqIGN1cnJlbnQgPSAmZmlyc3REYXRhYmFzZTsgKmN1
cnJlbnQ7IGN1cnJlbnQgPSAmKCpjdXJyZW50KS0+bV9uZXh0UmVnaXN0ZXJlZERhdGFiYXNlKSB7
CiAgICAgICAgIGlmICgqY3VycmVudCAhPSB0aGlzKQogICAgICAgICAgICAgY29udGludWU7CkBA
IC0xNjMsNyArMTYzLDcgQEAgdm9pZCBEYXRhYmFzZTo6cGVyZm9ybUF0RXhpdFNhdmUoKSBjb25z
dAogCiBEYXRhYmFzZSogRGF0YWJhc2U6OnJlbW92ZUZpcnN0QXRFeGl0RGF0YWJhc2UoKQogewot
ICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKKyAgICBMb2NrSG9s
ZGVyIGhvbGRlcihyZWdpc3RyYXRpb25Mb2NrKTsKICAgICBEYXRhYmFzZSogcmVzdWx0ID0gZmly
c3REYXRhYmFzZTsKICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgIGZpcnN0RGF0YWJhc2UgPSBy
ZXN1bHQtPm1fbmV4dFJlZ2lzdGVyZWREYXRhYmFzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5oCShyZXZpc2lvbiAxODgwMTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKLSNpbmNsdWRlIDx3
dGYvQnl0ZVNwaW5Mb2NrLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvV1RG
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24g
MTg4MDE4KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw5NyBAQAorMjAxNS0wOC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIExpZ2h0d2VpZ2h0IGxvY2tzIHNob3VsZCBiZSBhZGFwdGl2ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTQ1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgQSBjb21tb24gaWRpb20gaW4gV2Vi
S2l0IGlzIHRvIHVzZSBzcGlubG9ja3MuIFdlIHVzZSB0aGVtIGJlY2F1c2UgdGhlIGxvY2sgYWNx
dWlzaXRpb24KKyAgICAgICAgb3ZlcmhlYWQgaXMgbG93ZXIgdGhhbiBzeXN0ZW0gbG9ja3MgYW5k
IGJlY2F1c2UgdGhleSB0YWtlIGRyYW1hdGljYWxseSBsZXNzIHNwYWNlIHRoYW4gc3lzdGVtCisg
ICAgICAgIGxvY2tzLiBUaGUgc3BlZWQgYW5kIHNwYWNlIGFkdmFudGFnZXMgb2Ygc3BpbmxvY2tz
IGNhbiBiZSBhc3RvbmlzaGluZzogYW4gdW5jb250ZW5kZWQgc3BpbmxvY2sKKyAgICAgICAgYWNx
dWlyZSBpcyB1cCB0byAxMHggZmFzdGVyIGFuZCB1bmRlciBtaWNyb2NvbnRlbnRpb24gLSBzaG9y
dCBjcml0aWNhbCBzZWN0aW9uIHdpdGggdHdvIG9yCisgICAgICAgIG1vcmUgdGhyZWFkcyB0YWtp
bmcgdHVybnMgLSBzcGlubG9ja3MgYXJlIHVwIHRvIDEwMHggZmFzdGVyLiBTcGlubG9ja3MgdGFr
ZSBvbmx5IDEgYnl0ZSBvciA0CisgICAgICAgIGJ5dGVzIGRlcGVuZGluZyBvbiB0aGUgZmxhdm9y
LCB3aGlsZSBzeXN0ZW0gbG9ja3MgdGFrZSA2NCBieXRlcyBvciBtb3JlLiBDbGVhcmx5LCBXZWJL
aXQKKyAgICAgICAgc2hvdWxkIGNvbnRpbnVlIHRvIGF2b2lkIHN5c3RlbSBsb2NrcyAtIHRoZXkg
YXJlIGp1c3QgZmFyIHRvbyBzbG93IGFuZCBmYXIgdG9vIGJpZy4KKworICAgICAgICBCdXQgdGhl
cmUgaXMgYSBwcm9ibGVtIHdpdGggdGhpcyBpZGlvbS4gU3lzdGVtIGxvY2sgaW1wbGVtZW50YXRp
b25zIHdpbGwgc2xlZXAgYSB0aHJlYWQgd2hlbgorICAgICAgICBpdCBhdHRlbXB0cyB0byBhY3F1
aXJlIGEgbG9jayB0aGF0IGlzIGhlbGQsIHdoaWxlIHNwaW5sb2NrcyB3aWxsIGNhdXNlIHRoZSB0
aHJlYWQgdG8gYnVybiBDUFUuCisgICAgICAgIEluIFdlYktpdCBzcGlubG9ja3MsIHRoZSB0aHJl
YWQgd2lsbCByZXBlYXRlZGx5IGNhbGwgc2NoZWRfeWllbGQoKS4gVGhpcyBpcyBhd2Vzb21lIGZv
cgorICAgICAgICBtaWNyb2NvbnRlbnRpb24sIGJ1dCBhd2Z1bCB3aGVuIHRoZSBsb2NrIHdpbGwg
bm90IGJlIHJlbGVhc2VkIGZvciBhIHdoaWxlLiBJbiBmYWN0LCB3aGVuCisgICAgICAgIGNyaXRp
Y2FsIHNlY3Rpb25zIHRha2UgdGVucyBvZiBtaWNyb3NlY29uZHMgb3IgbW9yZSwgdGhlIENQVSB0
aW1lIGNvc3Qgb2Ygb3VyIHNwaW5sb2NrcyBpcworICAgICAgICBhbG1vc3QgMTAweCBtb3JlIHRo
YW4gdGhlIENQVSB0aW1lIGNvc3Qgb2YgYSBzeXN0ZW0gbG9jay4gVGhpcyBjYXNlIGRvZXNuJ3Qg
YXJpc2UgdG9vCisgICAgICAgIGZyZXF1ZW50bHkgaW4gb3VyIGN1cnJlbnQgdXNlcyBvZiBzcGlu
bG9ja3MsIGJ1dCB0aGF0J3MgcHJvYmFibHkgYmVjYXVzZSByaWdodCBub3cgdGhlcmUgYXJlCisg
ICAgICAgIHBsYWNlcyB3aGVyZSB3ZSBtYWtlIGEgY29uc2Npb3VzIGRlY2lzaW9uIHRvIHVzZSBz
eXN0ZW0gbG9ja3MgLSBldmVuIHRob3VnaCB0aGV5IHVzZSBtb3JlCisgICAgICAgIG1lbW9yeSBh
bmQgYXJlIHNsb3dlciAtIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byB3YXN0ZSBDUFUgY3ljbGVz
IHdoZW4gYSB0aHJlYWQgaGFzIHRvIHdhaXQgYQorICAgICAgICB3aGlsZSB0byBhY3F1aXJlIHRo
ZSBsb2NrLgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byBqdXN0IGltcGxlbWVudCBhIG1v
ZGVybiBhZGFwdGl2ZSBtdXRleCBpbiBXVEYuIEx1Y2tpbHksIHRoaXMgaXNuJ3QgYSBuZXcKKyAg
ICAgICAgY29uY2VwdC4gVGhpcyBwYXRjaCBpbXBsZW1lbnRzIGEgbXV0ZXggdGhhdCBpcyByZW1p
bmlzY2VudCBvZiB0aGUga2luZHMgb2YgbG93LW92ZXJoZWFkIGxvY2tzCisgICAgICAgIHRoYXQg
SlZNcyB1c2UuIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gaGVyZSBpcyBpbnNwaXJlZCBieSBz
b21lIG9mIHRoZSBpZGVhcyBmcm9tIFsxXS4gVGhlCisgICAgICAgIGlkZWEgaXMgc2ltcGxlOiB0
aGUgZmFzdCBwYXRoIGlzIGFuIGlubGluZWQgQ0FTIHRvIGltbWVkaWF0ZWx5IGFjcXVpcmUgYSBs
b2NrIHRoYXQgaXNuJ3QgaGVsZCwKKyAgICAgICAgdGhlIHNsb3cgcGF0aCB0cmllcyBzb21lIG51
bWJlciBvZiBzcGlucyB0byBhY3F1aXJlIHRoZSBsb2NrLCBhbmQgaWYgdGhhdCBmYWlscywgdGhl
IHRocmVhZCBpcworICAgICAgICBwdXQgb24gYSBxdWV1ZSBhbmQgcHV0IHRvIHNsZWVwLiBUaGUg
cXVldWUgaXMgbWFkZSB1cCBvZiBzdGF0aWNhbGx5IGFsbG9jYXRlZCB0aHJlYWQgbm9kZXMgYW5k
CisgICAgICAgIHRoZSBsb2NrIGl0c2VsZiBpcyBhIHRhZ2dlZCBwb2ludGVyOiBlaXRoZXIgaXQg
aXMganVzdCBiaXRzIHRlbGxpbmcgdXMgdGhlIGNvbXBsZXRlIGxvY2sgc3RhdGUKKyAgICAgICAg
KG5vdCBoZWxkIG9yIGhlbGQpIG9yIGl0IGlzIGEgcG9pbnRlciB0byB0aGUgaGVhZCBvZiBhIHF1
ZXVlIG9mIHRocmVhZHMgd2FpdGluZyB0byBhY3F1aXJlIHRoZQorICAgICAgICBsb2NrLiBUaGlz
IGFwcHJvYWNoIGdpdmVzIFdURjo6TG9jayB0aHJlZSBkaWZmZXJlbnQgbGV2ZWxzIG9mIGFkYXB0
YXRpb246IGFuIGlubGluZWQgZmFzdCBwYXRoCisgICAgICAgIGlmIHRoZSBsb2NrIGlzIG5vdCBj
b250ZW5kZWQsIGEgc2hvcnQgYnVyc3Qgb2Ygc3Bpbm5pbmcgZm9yIG1pY3JvY29udGVudGlvbiwg
YW5kIGEgZnVsbC1ibG93bgorICAgICAgICBxdWV1ZSBmb3IgY3JpdGljYWwgc2VjdGlvbnMgdGhh
dCBhcmUgaGVsZCBmb3IgYSBsb25nIHRpbWUuCisKKyAgICAgICAgT24gYSBsb2NraW5nIG1pY3Jv
YmVuY2htYXJrLCB0aGlzIG5ldyBMb2NrIGV4aGliaXRzIHRoZSBmb2xsb3dpbmcgcGVyZm9ybWFu
Y2UKKyAgICAgICAgY2hhcmFjdGVyaXN0aWNzOgorCisgICAgICAgIC0gTG9jayt1bmxvY2sgb24g
YW4gdW5jb250ZW5kZWQgbm8tb3AgY3JpdGljYWwgc2VjdGlvbjogMnggc2xvd2VyIHRoYW4gU3Bp
bkxvY2sgYW5kIDN4IGZhc3RlcgorICAgICAgICAgIHRoYW4gYSBzeXN0ZW0gbXV0ZXguCisKKyAg
ICAgICAgLSBMb2NrK3VubG9jayBvbiBhIGNvbnRlbmRlZCBuby1vcCBjcml0aWNhbCBzZWN0aW9u
OiAyeCBzbG93ZXIgdGhhbiBTcGluTG9jayBhbmQgMTAweCBmYXN0ZXIKKyAgICAgICAgICB0aGFu
IGEgc3lzdGVtIG11dGV4LgorCisgICAgICAgIC0gQ1BVIHRpbWUgc3BlbnQgaW4gbG9jaygpIG9u
IGEgbG9jayBoZWxkIGZvciBhIHdoaWxlOiBzYW1lIGFzIHN5c3RlbSBtdXRleCwgOTB4IGxlc3Mg
dGhhbiBhCisgICAgICAgICAgU3BpbkxvY2suCisKKyAgICAgICAgLSBNZW1vcnkgdXNhZ2U6IHNp
emVvZih2b2lkKiksIHNvIG9uIDY0LWJpdCBpdCdzIDh4IGxlc3MgdGhhbiBhIHN5c3RlbSBtdXRl
eCBidXQgMnggd29yc2UgdGhhbgorICAgICAgICAgIGEgU3BpbkxvY2suCisKKyAgICAgICAgVGhp
cyBwYXRjaCByZXBsYWNlcyBhbGwgdXNlcyBvZiBTcGluTG9jayB3aXRoIExvY2ssIHNpbmNlIG91
ciBjcml0aWNhbCBzZWN0aW9ucyBhcmUgbm90CisgICAgICAgIG5vLW9wcyBzbyBpZiB5b3UgZG8g
YmFzaWNhbGx5IGFueXRoaW5nIGluIHlvdXIgY3JpdGljYWwgc2VjdGlvbiwgdGhlIExvY2sgb3Zl
cmhlYWQgd2lsbCBiZQorICAgICAgICBpbnZpc2libGUuIEFsc28sIGluIGFsbCBwbGFjZXMgd2hl
cmUgd2UgdXNlZCBTcGluTG9jaywgd2UgY291bGQgdG9sZXJhdGUgOCBieXRlcyBvZiBvdmVyaGVh
ZAorICAgICAgICBpbnN0ZWFkIG9mIDQuIFBlcmZvcm1hbmNlIGJlbmNobWFya2luZyB1c2luZyBK
U0MgbWFjcm9iZW5jaG1hcmtzIHNob3dzIG5vIGRpZmZlcmVuY2UsIHdoaWNoIGlzCisgICAgICAg
IGFzIGl0IHNob3VsZCBiZTogdGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2UgaXMgdG8gcmVkdWNl
IENQVSB0aW1lIHdhc3RlZCwgbm90IHdhbGxjbG9jayB0aW1lLgorICAgICAgICBUaGlzIHBhdGNo
IGRvZXNuJ3QgcmVwbGFjZSBhbnkgdXNlcyBvZiBCeXRlU3BpbkxvY2ssIHNpbmNlIHdlIGV4cGVj
dCB0aGF0IHRoZSBzcGFjZSBiZW5lZml0cworICAgICAgICBvZiBoYXZpbmcgYSBsb2NrIHRoYXQg
anVzdCB1c2VzIGEgYnl0ZSBhcmUgc3RpbGwgYmV0dGVyIHRoYW4gdGhlIENQVSB3YXN0YWdlIGJl
bmVmaXRzIG9mCisgICAgICAgIExvY2suIEJ1dCwgdGhpcyB3b3JrIHdpbGwgZW5hYmxlIHNvbWUg
ZnV0dXJlIHdvcmsgdG8gY3JlYXRlIGxvY2tzIHRoYXQgd2lsbCBmaXQgaW4ganVzdCAxLjYKKyAg
ICAgICAgYml0czogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzY2
NS4KKworICAgICAgICBbMV0gaHR0cDovL3d3dy5maWxwaXpsby5jb20vcGFwZXJzL3BpemxvLXBw
cGoyMDExLWZhYmxlLnBkZgorCisgICAgICAgICogV1RGLnZjeHByb2ovV1RGLnZjeHByb2o6Cisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmVuY2ht
YXJrczogQWRkZWQuCisgICAgICAgICogYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogd3RmL0xvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OmxvY2tT
bG93KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja1Nsb3cpOgorICAgICAgICAqIHd0
Zi9Mb2NrLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6bG9jayk6CisgICAgICAg
IChXVEY6OkxvY2tCYXNlOjp1bmxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6aXNIZWxk
KToKKyAgICAgICAgKFdURjo6TG9jazo6TG9jayk6CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0
b3IuY3BwOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAgICAg
KFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6TWV0YUFs
bG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpjdXJyZW50
U3RhdGlzdGljcyk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNw
YWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKToK
KyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAqIHd0Zi9TcGluTG9jay5o
OgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6CisgICAgICAgICogd3RmL1Ro
cmVhZGluZ1dpbi5jcHA6CisgICAgICAgICogd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcDoKKyAg
ICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdURjo6QXRv
bWljU3RyaW5nVGFibGVMb2NrZXI6OkF0b21pY1N0cmluZ1RhYmxlTG9ja2VyKToKKwogMjAxNS0w
OC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGwgb3V0IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE4Nzk3Mi4KSW5k
ZXg6IFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24gMTg4MDE4KQorKysgU291
cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsx
LDQgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgRGVmYXVsdFRhcmdldHM9
IkJ1aWxkIiBUb29sc1ZlcnNpb249IjEyLjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3Nv
ZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVsPSJQcm9q
ZWN0Q29uZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJE
ZWJ1Z1N1ZmZpeHxXaW4zMiI+CkBAIC0xMDYsNiArMTA2LDcgQEAKICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHd0ZlxnbGliXEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEdyZWdvcmlhbkRhdGVUaW1lLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVGFibGUuY3BwIiAvPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cd3RmXExvY2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cd3RmXE1haW5UaHJlYWQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
d3RmXE1ENS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcTWVkaWFUaW1l
LmNwcCIgLz4KQEAgLTIyMyw2ICsyMjQsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
d3RmXEl0ZXJhdG9yQWRhcHRvcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0
ZlxJdGVyYXRvclJhbmdlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTGlz
dEhhc2hTZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxMb2NrLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTG9ja2VyLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlx3dGZcTWFpblRocmVhZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cd3RmXE1hbGxvY1B0ci5oIiAvPgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBA
CiAJCTBGRDgxQUM1MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDNDE1NEZCMjJFMDA5
ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7
IH07IH07CiAJCTBGRERCRkE3MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZB
NTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRkRE
QkZBODE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE2MTY2NkRGQTMwMEM1NUZF
RiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovOyB9OworCQkwRkUxNjQ2QTFCNkZGQzk2MDA0MDBF
N0MgLyogTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi87IH07CisJCTBGRTE2
NDZCMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUxNjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oICov
OyB9OwogCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjUxQjIyRDREODAw
NjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLzsgfTsKIAkJMTQwMjJGNDExOEY1QzNGQzAwN0ZGMEVC
IC8qIGxpYmJtYWxsb2MuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0MDIyRjQwMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9jLmEgKi87IH07
CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0
QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsKQEAgLTMyMSw2ICszMjMsOCBAQAogCQkwRkQ4MUFDNDE1
NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBT
dHJpbmdQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJp
bmdQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkUxNjQ2ODFC
NkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMTY0Njkx
QjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDM0VFNDE3MUI4MzQ3
MDBGREFDOEQgLyogQnl0ZVNwaW5Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVTcGluTG9jay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUg
LyogVGlueVB0clNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55UHRy
U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDIyRjQwMThGNUMzRkMwMDdG
RjBFQiAvKiBsaWJibWFsbG9jLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBwYXRoID0gbGliYm1hbGxvYy5hOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNzcwLDYgKzc3NCw4IEBACiAJCQkJN0NERDdG
RjkxODZEMkE1NDAwNzQzM0NEIC8qIEl0ZXJhdG9yUmFuZ2UuaCAqLywKIAkJCQlBNzBEQTA4MzE3
OTlGMDREMDA1MjlBOUIgLyogTGlzdER1bXAuaCAqLywKIAkJCQlBOEE0NzJDMTE1MUE4MjVBMDA0
MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLywKKwkJCQkwRkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0Mg
LyogTG9jay5jcHAgKi8sCisJCQkJMEZFMTY0NjkxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAq
LywKIAkJCQlBOEE0NzJDMzE1MUE4MjVBMDA0MTIzRkYgLyogTG9ja2VyLmggKi8sCiAJCQkJMTQ0
N0FFQzgxOEZDRTU5NDAwQjNEN0ZGIC8qIG1ibWFsbG9jLmNwcCAqLywKIAkJCQlBOEE0NzJDQTE1
MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmNwcCAqLywKQEAgLTEyMDYsNiArMTIxMiw3IEBACiAJCQkJ
QThBNDc0NkExNTFBODI1QjAwNDEyM0ZGIC8qIFVURjguaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3M0I5MTUxQTgyNUIwMDQxMjNGRiAvKiB1dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0N0QxNTFBODI1QjAwNDEyM0ZGIC8qIFZhbHVlQ2hlY2suaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRTE2NDZCMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzQ3RTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzQ3RjE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMzM3LDYgKzEzNDQsNyBAQAogCQkJCUE4QTQ3MzlFMTUxQTgyNUIwMDQxMjNGRiAv
KiBEYXRhTG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0EwMTUxQTgyNUIwMDQxMjNG
RiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNBMjE1MUE4MjVCMDA0
MTIzRkYgLyogRGVjaW1hbE51bWJlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkUxNjQ2QTFC
NkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNBRTE1
MUE4MjVCMDA0MTIzRkYgLyogZGl5LWZwLmNjIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQjAx
NTFBODI1QjAwNDEyM0ZGIC8qIGRvdWJsZS1jb252ZXJzaW9uLmNjIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThBNDczQkExNTFBODI1QjAwNDEyM0ZGIC8qIGR0b2EuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVk
ZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5o
PgorCituYW1lc3BhY2UgeworCit1bnNpZ25lZCBudW1UaHJlYWRHcm91cHM7Cit1bnNpZ25lZCBu
dW1UaHJlYWRzUGVyR3JvdXA7Cit1bnNpZ25lZCB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uOwordW5z
aWduZWQgbnVtTm9pc2VUaHJlYWRzOwordW5zaWduZWQgbnVtSXRlcmF0aW9uczsKKyAgICAKK3Zv
aWQgdXNhZ2UoKQoreworICAgIHByaW50ZigiVXNhZ2U6IExvY2tTcGVlZFRlc3Qgc3BpbmxvY2t8
bG9ja3xtdXRleHxhbGwgPG51bSB0aHJlYWQgZ3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3Vw
PiA8d29yayBwZXIgY3JpdGljYWwgc2VjdGlvbj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0
ZXJhdGlvbnM+XG4iKTsKKyAgICBleGl0KDEpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2Nr
VHlwZT4KK3ZvaWQgcnVuQmVuY2htYXJrKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgc3RkOjp1
bmlxdWVfcHRyPExvY2tUeXBlW10+IGxvY2tzID0gc3RkOjptYWtlX3VuaXF1ZTxMb2NrVHlwZVtd
PihudW1UaHJlYWRHcm91cHMpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxkb3VibGVbXT4gd29yZHMg
PSBzdGQ6Om1ha2VfdW5pcXVlPGRvdWJsZVtdPihudW1UaHJlYWRHcm91cHMpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxUaHJlYWRJZGVudGlmaWVyW10+IHRocmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVl
PFRocmVhZElkZW50aWZpZXJbXT4obnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3Vw
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiBub2lzZVRocmVhZHMg
PSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZElkZW50aWZpZXJbXT4obnVtTm9pc2VUaHJlYWRzKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8ZG91YmxlW10+IG5vaXNlQ291bnRzID0gc3RkOjptYWtlX3Vu
aXF1ZTxkb3VibGVbXT4obnVtTm9pc2VUaHJlYWRzKTsKKworICAgIHZvbGF0aWxlIGJvb2wgc2hv
dWxkU3RvcCA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1Ob2lz
ZVRocmVhZHM7IHRocmVhZEluZGV4LS07KSB7CisgICAgICAgIG5vaXNlQ291bnRzW3RocmVhZElu
ZGV4XSA9IDA7CisgICAgICAgIG5vaXNlVGhyZWFkc1t0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJl
YWQoCisgICAgICAgICAgICAiTm9pc2UgVGhyZWFkIiwKKyAgICAgICAgICAgIFsmc2hvdWxkU3Rv
cCwgJm5vaXNlQ291bnRzLCB0aHJlYWRJbmRleF0gKCkgeworICAgICAgICAgICAgICAgIHdoaWxl
ICghc2hvdWxkU3RvcCkKKyAgICAgICAgICAgICAgICAgICAgbm9pc2VDb3VudHNbdGhyZWFkSW5k
ZXhdKys7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICBkb3VibGUgYmVmb3JlID0gbW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIHRo
cmVhZEdyb3VwSW5kZXggPSBudW1UaHJlYWRHcm91cHM7IHRocmVhZEdyb3VwSW5kZXgtLTspIHsK
KyAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0gPSAwOworCisgICAgICAgIGZvciAodW5z
aWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KSB7
CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXggKiBudW1UaHJlYWRzUGVyR3Jv
dXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICAgICAgIkJlbmNo
bWFyayB0aHJlYWQiLAorICAgICAgICAgICAgICAgIFt0aHJlYWRHcm91cEluZGV4LCAmbG9ja3Ms
ICZ3b3Jkc10gKCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1J
dGVyYXRpb25zOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2Nrc1t0aHJlYWRH
cm91cEluZGV4XS5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uOyBqLS07KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0rKzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSAqPSAxLjAxOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbG9ja3NbdGhyZWFkR3JvdXBJbmRl
eF0udW5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1U
aHJlYWRHcm91cHMgKiBudW1UaHJlYWRzUGVyR3JvdXA7IHRocmVhZEluZGV4LS07KQorICAgICAg
ICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW3RocmVhZEluZGV4XSk7CisgICAgc2hv
dWxkU3RvcCA9IHRydWU7CisgICAgZG91YmxlIG5vaXNlQ291bnQgPSAwOworICAgIGZvciAodW5z
aWduZWQgdGhyZWFkSW5kZXggPSBudW1Ob2lzZVRocmVhZHM7IHRocmVhZEluZGV4LS07KSB7Cisg
ICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG5vaXNlVGhyZWFkc1t0aHJlYWRJbmRleF0p
OworICAgICAgICBub2lzZUNvdW50ICs9IG5vaXNlQ291bnRzW3RocmVhZEluZGV4XTsKKyAgICB9
CisKKyAgICBkb3VibGUgYWZ0ZXIgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOwor
CisgICAgcHJpbnRmKCIlczogJS4zbGYgbXMsICUuMGxmIG5vaXNlLlxuIiwgbmFtZSwgYWZ0ZXIg
LSBiZWZvcmUsIG5vaXNlQ291bnQpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwor
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIFdURjo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOworICAgIAorICAgIGlmIChhcmdjICE9IDcKKyAgICAgICAgfHwgc3NjYW5mKGFy
Z3ZbMl0sICIldSIsICZudW1UaHJlYWRHcm91cHMpICE9IDEKKyAgICAgICAgfHwgc3NjYW5mKGFy
Z3ZbM10sICIldSIsICZudW1UaHJlYWRzUGVyR3JvdXApICE9IDEKKyAgICAgICAgfHwgc3NjYW5m
KGFyZ3ZbNF0sICIldSIsICZ3b3JrUGVyQ3JpdGljYWxTZWN0aW9uKSAhPSAxCisgICAgICAgIHx8
IHNzY2FuZihhcmd2WzVdLCAiJXUiLCAmbnVtTm9pc2VUaHJlYWRzKSAhPSAxCisgICAgICAgIHx8
IHNzY2FuZihhcmd2WzZdLCAiJXUiLCAmbnVtSXRlcmF0aW9ucykgIT0gMSkKKyAgICAgICAgdXNh
Z2UoKTsKKworICAgIGJvb2wgZGlkUnVuID0gZmFsc2U7CisgICAgaWYgKCFzdHJjbXAoYXJndlsx
XSwgInNwaW5sb2NrIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKKyAgICAgICAgcnVu
QmVuY2htYXJrPFNwaW5Mb2NrPigiU3BpbkxvY2siKTsKKyAgICAgICAgZGlkUnVuID0gdHJ1ZTsK
KyAgICB9CisgICAgaWYgKCFzdHJjbXAoYXJndlsxXSwgImxvY2siKSB8fCAhc3RyY21wKGFyZ3Zb
MV0sICJhbGwiKSkgeworICAgICAgICBydW5CZW5jaG1hcms8TG9jaz4oIldURiBMb2NrIik7Cisg
ICAgICAgIGRpZFJ1biA9IHRydWU7CisgICAgfQorICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJt
dXRleCIpIHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CisgICAgICAgIHJ1bkJlbmNobWFy
azxNdXRleD4oIlBsYXRmb3JtIE11dGV4Iik7CisgICAgICAgIGRpZFJ1biA9IHRydWU7CisgICAg
fQorCisgICAgaWYgKCFkaWRSdW4pCisgICAgICAgIHVzYWdlKCk7CisKKyAgICByZXR1cm4gMDsK
K30KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBz
ZXQoV1RGX0hFQURFUlMKICAgICBJdGVyYXRvckFkYXB0b3JzLmgKICAgICBJdGVyYXRvclJhbmdl
LmgKICAgICBMaXN0SGFzaFNldC5oCisgICAgTG9jay5oCiAgICAgTG9ja2VyLmgKICAgICBNRDUu
aAogICAgIE1haW5UaHJlYWQuaApAQCAtMTU2LDYgKzE1Nyw3IEBAIHNldChXVEZfU09VUkNFUwog
ICAgIEZ1bmN0aW9uRGlzcGF0Y2hlci5jcHAKICAgICBHcmVnb3JpYW5EYXRlVGltZS5jcHAKICAg
ICBIYXNoVGFibGUuY3BwCisgICAgTG9jay5jcHAKICAgICBNRDUuY3BwCiAgICAgTWFpblRocmVh
ZC5jcHAKICAgICBNZWRpYVRpbWUuY3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJMb2NrLmgiCisKKyNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5o
IgorI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKKyNpbmNsdWRlIDxjb25kaXRpb25f
dmFyaWFibGU+CisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8dGhyZWFkPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworbmFtZXNwYWNlIHsKKworLy8gVGhpcyBkYXRhIHN0cnVjdHVyZSBzZXJ2ZXMg
dGhyZWUgcHVycG9zZXM6CisvLworLy8gMSkgQSBwYXJraW5nIG1lY2hhbmlzbSBmb3IgdGhyZWFk
cyB0aGF0IGdvIHRvIHNsZWVwLiBUaGF0IGludm9sdmVzIGp1c3QgYSBzeXN0ZW0gbXV0ZXggYW5k
CisvLyAgICBjb25kaXRpb24gdmFyaWFibGUuCisvLworLy8gMikgQSBxdWV1ZSBub2RlIGZvciB3
aGVuIGEgdGhyZWFkIGlzIG9uIHNvbWUgTG9jaydzIHF1ZXVlLgorLy8KKy8vIDMpIFRoZSBxdWV1
ZSBoZWFkLiBUaGlzIGlzIGtpbmQgb2YgZnVua3kuIFdoZW4gYSB0aHJlYWQgaXMgdGhlIGhlYWQg
b2YgYSBxdWV1ZSwgaXQgYWxzbyBzZXJ2ZXMgYXMKKy8vICAgIHRoZSBiYXNpYyBxdWV1ZSBib29r
a2VlcGluZyBkYXRhIHN0cnVjdHVyZS4gV2hlbiBhIHRocmVhZCBpcyBkZXF1ZXVlZCwgdGhlIG5l
eHQgdGhyZWFkIGluIHRoZQorLy8gICAgcXVldWUgdGFrZXMgb24gdGhlIHF1ZXVlIGhlYWQgZHV0
aWVzLgorc3RydWN0IFRocmVhZERhdGEgeworICAgIC8vIFRoZSBwYXJraW5nIG1lY2hhbmlzbS4K
KyAgICBib29sIHNob3VsZFBhcmsgeyBmYWxzZSB9OworICAgIHN0ZDo6bXV0ZXggcGFya2luZ0xv
Y2s7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlvbjsKKworICAg
IC8vIFRoZSBxdWV1ZSBub2RlLgorICAgIFRocmVhZERhdGEqIG5leHRJblF1ZXVlIHsgbnVsbHB0
ciB9OworCisgICAgLy8gVGhlIHF1ZXVlIGl0c2VsZi4KKyAgICBUaHJlYWREYXRhKiBxdWV1ZVRh
aWwgeyBudWxscHRyIH07Cit9OworCitUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPiogdGhyZWFk
RGF0YTsKKworVGhyZWFkRGF0YSogbXlUaHJlYWREYXRhKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIGlu
aXRpYWxpemVPbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICB0aHJlYWREYXRhID0gbmV3
IFRocmVhZFNwZWNpZmljPFRocmVhZERhdGE+KCk7CisgICAgICAgIH0pOworCisgICAgcmV0dXJu
ICp0aHJlYWREYXRhOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBMb2Nr
QmFzZTo6bG9ja1Nsb3coKQoreworICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisKKyAgICAv
LyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBwYXN0
IEppa2VzUlZNIGV4cGVyaW1lbnRzLgorICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQw
OworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdWludHB0cl90IGN1cnJlbnRXb3JkVmFs
dWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCEoY3VycmVudFdvcmRW
YWx1ZSAmIGlzSGVsZEJpdCkpIHsKKyAgICAgICAgICAgIC8vIEl0J3Mgbm90IHBvc3NpYmxlIGZv
ciBzb21lb25lIHRvIGhvbGQgdGhlIHF1ZXVlIGxvY2sgd2hpbGUgdGhlIGxvY2sgaXRzZWxmIGlz
IG5vIGxvbmdlcgorICAgICAgICAgICAgLy8gaGVsZCwgc2luY2Ugd2Ugd2lsbCBvbmx5IGF0dGVt
cHQgdG8gYWNxdWlyZSB0aGUgcXVldWUgbG9jayB3aGVuIHRoZSBsb2NrIGlzIGhlbGQgYW5kCisg
ICAgICAgICAgICAvLyB0aGUgcXVldWUgbG9jayBwcmV2ZW50cyB1bmxvY2suCisgICAgICAgICAg
ICBBU1NFUlQoIShjdXJyZW50V29yZFZhbHVlICYgbG9ja2VkUXVldWVCaXQpKTsKKyAgICAgICAg
ICAgIGlmIChtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50V29yZFZhbHVlLCBjdXJy
ZW50V29yZFZhbHVlIHwgaXNIZWxkQml0KSkgeworICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3Mh
IFdlIGFjcXVpcmVkIHRoZSBsb2NrLgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHF1ZXVlIGFuZCB3
ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZCBh
Z2Fpbi4KKyAgICAgICAgaWYgKCEoY3VycmVudFdvcmRWYWx1ZSAmIH5tYXNrKSAmJiBzcGluQ291
bnQgPCBzcGluTGltaXQpIHsKKyAgICAgICAgICAgIHNwaW5Db3VudCsrOworICAgICAgICAgICAg
c3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gTmVlZCB0byBwdXQgb3Vyc2VsdmVzIG9uIHRoZSBxdWV1ZS4gQ3Jl
YXRlIHRoZSBxdWV1ZSBpZiBvbmUgZG9lcyBub3QgZXhpc3QuIFRoaXMgcmVxdXJpZXMKKyAgICAg
ICAgLy8gb3duaW5nIHRoZSBxdWV1ZSBmb3IgYSBsaXR0bGUgYml0LiBUaGUgbG9jayB0aGF0IGNv
bnRyb2xzIHRoZSBxdWV1ZSBpcyBpdHNlbGYgYSBzcGlubG9jay4KKyAgICAgICAgLy8gQnV0IGJl
Zm9yZSB3ZSBhY3F1aXJlIHRoZSBxdWV1ZSBzcGlubG9jaywgd2UgbWFrZSBzdXJlIHRoYXQgd2Ug
aGF2ZSBhIFRocmVhZERhdGEgZm9yIHRoaXMKKyAgICAgICAgLy8gdGhyZWFkLgorICAgICAgICBU
aHJlYWREYXRhKiBtZSA9IG15VGhyZWFkRGF0YSgpOworICAgICAgICBBU1NFUlQoIW1lLT5zaG91
bGRQYXJrKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+bmV4dEluUXVldWUpOworICAgICAgICBBU1NF
UlQoIW1lLT5xdWV1ZVRhaWwpOworCisgICAgICAgIC8vIFJlbG9hZCB0aGUgY3VycmVudCB3b3Jk
IHZhbHVlLCBzaW5jZSBzb21lIHRpbWUgbWF5IGhhdmUgcGFzc2VkLgorICAgICAgICBjdXJyZW50
V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKworICAgICAgICAvLyBXZSBwcm9jZWVkIG9ubHkg
aWYgdGhlIHF1ZXVlIGxvY2sgaXMgbm90IGhlbGQsIHRoZSBMb2NrIGlzIGhlbGQsIGFuZCB3ZSBz
dWNjZWVkIGluCisgICAgICAgIC8vIGFjcXVpcmluZyB0aGUgcXVldWUgbG9jay4KKyAgICAgICAg
aWYgKChjdXJyZW50V29yZFZhbHVlICYgbG9ja2VkUXVldWVCaXQpCisgICAgICAgICAgICB8fCAh
KGN1cnJlbnRXb3JkVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICB8fCAhbV93b3JkLmNv
bXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwgY3VycmVudFdvcmRWYWx1ZSB8IGxv
Y2tlZFF1ZXVlQml0KSkgeworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbWUtPnNob3VsZFBh
cmsgPSB0cnVlOworCisgICAgICAgIC8vIFdlIG93biB0aGUgcXVldWUuIE5vYm9keSBjYW4gZW5x
dWV1ZSBvciBkZXF1ZXVlIHVudGlsIHdlJ3JlIGRvbmUuIEFsc28sIGl0J3Mgbm90IHBvc3NpYmxl
CisgICAgICAgIC8vIHRvIHJlbGVhc2UgdGhlIExvY2sgd2hpbGUgd2UgaG9sZCB0aGUgcXVldWUg
bG9jay4KKyAgICAgICAgVGhyZWFkRGF0YSogcXVldWVIZWFkID0gYml0d2lzZV9jYXN0PFRocmVh
ZERhdGEqPihjdXJyZW50V29yZFZhbHVlICYgfm1hc2spOworICAgICAgICBpZiAocXVldWVIZWFk
KSB7CisgICAgICAgICAgICAvLyBQdXQgdGhpcyB0aHJlYWQgYXQgdGhlIGVuZCBvZiB0aGUgcXVl
dWUuCisgICAgICAgICAgICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbC0+bmV4dEluUXVldWUgPSBtZTsK
KyAgICAgICAgICAgIHF1ZXVlSGVhZC0+cXVldWVUYWlsID0gbWU7CisKKyAgICAgICAgICAgIC8v
IFJlbGVhc2UgdGhlIHF1ZXVlIGxvY2suCisgICAgICAgICAgICBjdXJyZW50V29yZFZhbHVlID0g
bV93b3JkLmxvYWQoKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgfm1h
c2spOworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBsb2NrZWRRdWV1ZUJp
dCk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzSGVsZEJpdCk7Cisg
ICAgICAgICAgICBtX3dvcmQuc3RvcmUoY3VycmVudFdvcmRWYWx1ZSAmIH5sb2NrZWRRdWV1ZUJp
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBNYWtlIHRoaXMgdGhyZWFkIGJl
IHRoZSBxdWV1ZS1oZWFkLgorICAgICAgICAgICAgcXVldWVIZWFkID0gbWU7CisgICAgICAgICAg
ICBtZS0+cXVldWVUYWlsID0gbWU7CisKKyAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIHF1ZXVl
IGxvY2sgYW5kIGluc3RhbGwgb3Vyc2VsdmVzIGFzIHRoZSBoZWFkLiBObyBuZWVkIGZvciBhIENB
UyBsb29wLCBzaW5jZQorICAgICAgICAgICAgLy8gd2Ugb3duIHRoZSBxdWV1ZSBsb2NrLgorICAg
ICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgICAgICAgICBB
U1NFUlQofihjdXJyZW50V29yZFZhbHVlICYgfm1hc2spKTsKKyAgICAgICAgICAgIEFTU0VSVChj
dXJyZW50V29yZFZhbHVlICYgbG9ja2VkUXVldWVCaXQpOworICAgICAgICAgICAgQVNTRVJUKGN1
cnJlbnRXb3JkVmFsdWUgJiBpc0hlbGRCaXQpOworICAgICAgICAgICAgdWludHB0cl90IG5ld1dv
cmRWYWx1ZSA9IGN1cnJlbnRXb3JkVmFsdWU7CisgICAgICAgICAgICBuZXdXb3JkVmFsdWUgfD0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocXVldWVIZWFkKTsKKyAgICAgICAgICAgIG5ld1dvcmRW
YWx1ZSAmPSB+bG9ja2VkUXVldWVCaXQ7CisgICAgICAgICAgICBtX3dvcmQuc3RvcmUobmV3V29y
ZFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgZXZlcnlvbmUg
d2hvIGFjcXVpcmVzIHRoZSBxdWV1ZSBsb2NrIHdpbGwgc2VlIG1lIG9uIHRoZSBxdWV1ZSwgYW5k
IGFueW9uZSB3aG8KKyAgICAgICAgLy8gYWNxdWlyZXMgbWUncyBsb2NrIHdpbGwgc2VlIHRoYXQg
bWUgd2FudHMgdG8gcGFyay4gTm90ZSB0aGF0IHNob3VsZFBhcmsgbWF5IGhhdmUgYmVlbgorICAg
ICAgICAvLyBjbGVhcmVkIGFzIHNvb24gYXMgdGhlIHF1ZXVlIGxvY2sgd2FzIHJlbGVhc2VkIGFi
b3ZlLCBidXQgaXQgd2lsbCBoYXBwZW4gd2hpbGUgdGhlCisgICAgICAgIC8vIHJlbGVhc2luZyB0
aHJlYWQgaG9sZHMgbWUncyBwYXJraW5nTG9jay4KKworICAgICAgICB7CisgICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtZS0+cGFya2luZ0xvY2spOworICAg
ICAgICAgICAgd2hpbGUgKG1lLT5zaG91bGRQYXJrKQorICAgICAgICAgICAgICAgIG1lLT5wYXJr
aW5nQ29uZGl0aW9uLndhaXQobG9ja2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCgh
bWUtPnNob3VsZFBhcmspOworICAgICAgICBBU1NFUlQoIW1lLT5uZXh0SW5RdWV1ZSk7CisgICAg
ICAgIEFTU0VSVCghbWUtPnF1ZXVlVGFpbCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgd2Ug
Y2FuIGxvb3AgYXJvdW5kIGFuZCB0cnkgdG8gYWNxdWlyZSB0aGUgbG9jayBhZ2Fpbi4KKyAgICB9
Cit9CisKK3ZvaWQgTG9ja0Jhc2U6OnVubG9ja1Nsb3coKQoreworICAgIC8vIElmIHRoZSBmYXN0
IHBhdGggZmFpbGVkLCBpdCBjYW4gb25seSBiZSBiZWNhdXNlIHNvbWVvbmUgcHV0IGEgdGhyZWFk
IG9uIHRoZSBxdWV1ZSBvciB0aGUgcXVldWUKKyAgICAvLyBsb2NrIGlzIGhlbGQuIElmIHRoZSBx
dWV1ZSBsb2NrIGlzIGhlbGQsIGl0IGNhbiBvbmx5IGJlIGJlY2F1c2Ugc29tZW9uZSAqd2lsbCog
ZW5xdWV1ZSBhIHRocmVhZAorICAgIC8vIG9udG8gdGhlIHF1ZXVlLgorCisgICAgLy8gQWNxdWly
ZSB0aGUgcXVldWUgbG9jay4KKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHVpbnRwdHJfdCBjdXJy
ZW50V29yZFZhbHVlID0gbV93b3JkLmxvYWQoKTsKKworICAgICAgICBBU1NFUlQoY3VycmVudFdv
cmRWYWx1ZSAmIGlzSGVsZEJpdCk7CisgICAgICAgIAorICAgICAgICBpZiAoY3VycmVudFdvcmRW
YWx1ZSAmIGxvY2tlZFF1ZXVlQml0KSB7CisgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5
aWVsZCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBJ
ZiB0aGUgcXVldWUgbG9jayBpcyBub3QgaGVsZCwgdGhlbiB0aGVyZSBtdXN0IGJlIGFuIGVudHJ5
IG9uIHRoZSBxdWV1ZS4KKyAgICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiB+bWFzayk7
CisKKyAgICAgICAgaWYgKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRXb3JkVmFs
dWUsIGN1cnJlbnRXb3JkVmFsdWUgfCBsb2NrZWRRdWV1ZUJpdCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICB1aW50cHRyX3QgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2Fk
KCk7CisgICAgICAgIAorICAgIC8vIEFmdGVyIHdlIGFjcXVpcmUgdGhlIHF1ZXVlIGxvY2ssIHRo
ZSBMb2NrIG11c3Qgc3RpbGwgYmUgaGVsZCBhbmQgdGhlIHF1ZXVlIG11c3QgYmUKKyAgICAvLyBu
b24tZW1wdHkuIFRoZSBxdWV1ZSBtdXN0IGJlIG5vbi1lbXB0eSBzaW5jZSBvbmx5IHRoZSBsb2Nr
U2xvdygpIG1ldGhvZCBjb3VsZCBoYXZlIGhlbGQgdGhlCisgICAgLy8gcXVldWUgbG9jayBhbmQg
aWYgaXQgZGlkIHRoZW4gaXQgb25seSByZWxlYXNlcyBpdCBhZnRlciBwdXR0aW5nIHNvbWV0aGlu
ZyBvbiB0aGUgcXVldWUuCisgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0hlbGRCaXQp
OworICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgbG9ja2VkUXVldWVCaXQpOworICAgIFRo
cmVhZERhdGEqIHF1ZXVlSGVhZCA9IGJpdHdpc2VfY2FzdDxUaHJlYWREYXRhKj4oY3VycmVudFdv
cmRWYWx1ZSAmIH5tYXNrKTsKKyAgICBBU1NFUlQocXVldWVIZWFkKTsKKworICAgIFRocmVhZERh
dGEqIG5ld1F1ZXVlSGVhZCA9IHF1ZXVlSGVhZC0+bmV4dEluUXVldWU7CisgICAgLy8gRWl0aGVy
IHRoaXMgd2FzIHRoZSBvbmx5IHRocmVhZCBvbiB0aGUgcXVldWUsIGluIHdoaWNoIGNhc2Ugd2Ug
ZGVsZXRlIHRoZSBxdWV1ZSwgb3IgdGhlcmUKKyAgICAvLyBhcmUgc3RpbGwgbW9yZSB0aHJlYWRz
IG9uIHRoZSBxdWV1ZSwgaW4gd2hpY2ggY2FzZSB3ZSBjcmVhdGUgYSBuZXcgcXVldWUgaGVhZC4K
KyAgICBpZiAobmV3UXVldWVIZWFkKQorICAgICAgICBuZXdRdWV1ZUhlYWQtPnF1ZXVlVGFpbCA9
IHF1ZXVlSGVhZC0+cXVldWVUYWlsOworCisgICAgLy8gQ2hhbmdlIHRoZSBxdWV1ZSBoZWFkLCBw
b3NzaWJseSByZW1vdmluZyBpdCBpZiBuZXdRdWV1ZUhlYWQgaXMgbnVsbC4gTm8gbmVlZCBmb3Ig
YSBDQVMgbG9vcCwKKyAgICAvLyBzaW5jZSB3ZSBob2xkIHRoZSBxdWV1ZSBsb2NrIGFuZCB0aGUg
bG9jayBpdHNlbGYgc28gbm90aGluZyBhYm91dCB0aGUgbG9jayBjYW4gY2hhbmdlIHJpZ2h0Cisg
ICAgLy8gbm93LgorICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOworICAgIEFT
U0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNIZWxkQml0KTsKKyAgICBBU1NFUlQoY3VycmVudFdv
cmRWYWx1ZSAmIGxvY2tlZFF1ZXVlQml0KTsKKyAgICBBU1NFUlQoKGN1cnJlbnRXb3JkVmFsdWUg
JiB+bWFzaykgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocXVldWVIZWFkKSk7CisgICAgdWlu
dHB0cl90IG5ld1dvcmRWYWx1ZSA9IGN1cnJlbnRXb3JkVmFsdWU7CisgICAgbmV3V29yZFZhbHVl
ICY9IH5pc0hlbGRCaXQ7IC8vIFJlbGVhc2UgdGhlIExvY2suCisgICAgbmV3V29yZFZhbHVlICY9
IH5sb2NrZWRRdWV1ZUJpdDsgLy8gUmVsZWFzZSB0aGUgcXVldWUgbG9jay4KKyAgICBuZXdXb3Jk
VmFsdWUgJj0gbWFzazsgLy8gQ2xlYXIgb3V0IHRoZSBvbGQgcXVldWUgaGVhZC4KKyAgICBuZXdX
b3JkVmFsdWUgfD0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3UXVldWVIZWFkKTsgLy8gSW5z
dGFsbCBuZXcgcXVldWUgaGVhZC4KKyAgICBtX3dvcmQuc3RvcmUobmV3V29yZFZhbHVlKTsKKwor
ICAgIC8vIE5vdyB0aGUgbG9jayBpcyBhdmFpbGFibGUgZm9yIGFjcXVpc2l0aW9uLiBCdXQgd2Ug
anVzdCBoYXZlIHRvIHdha2UgdXAgdGhlIG9sZCBxdWV1ZSBoZWFkLgorICAgIC8vIEFmdGVyIHRo
YXQsIHdlJ3JlIGRvbmUhCisKKyAgICBxdWV1ZUhlYWQtPm5leHRJblF1ZXVlID0gbnVsbHB0cjsK
KyAgICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbCA9IG51bGxwdHI7CisKKyAgICAvLyBXZSBkbyB0aGlz
IGNhcmVmdWxseSBiZWNhdXNlIHRoaXMgbWF5IHJ1biBlaXRoZXIgYmVmb3JlIG9yIGR1cmluZyB0
aGUgcGFya2luZ0xvY2sgY3JpdGljYWwKKyAgICAvLyBzZWN0aW9uIGluIGxvY2tTbG93KCkuCisg
ICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihxdWV1ZUhl
YWQtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgcXVldWVIZWFkLT5zaG91bGRQYXJrID0gZmFsc2U7
CisgICAgfQorICAgIC8vIERvZXNuJ3QgbWF0dGVyIGlmIHdlIG5vdGlmeV9hbGwoKSBvciBub3Rp
Znlfb25lKCkgaGVyZSBzaW5jZSB0aGUgb25seSB0aHJlYWQgdGhhdCBjb3VsZCBiZQorICAgIC8v
IHdhaXRpbmcgaXMgcXVldWVIZWFkLgorICAgIHF1ZXVlSGVhZC0+cGFya2luZ0NvbmRpdGlvbi5u
b3RpZnlfb25lKCk7CisKKyAgICAvLyBUaGUgb2xkIHF1ZXVlIGhlYWQgY2FuIG5vdyBjb250ZW5k
IGZvciB0aGUgbG9jayBhZ2Fpbi4gV2UncmUgZG9uZSEKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9Mb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfTG9ja19oCisjZGVmaW5lIFdURl9Mb2NrX2gK
KworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+Cisj
aW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworLy8gQSBMb2NrIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0ZXggdGhh
dCBnaXZlcyB5b3UgdGhlIGJlc3Qgb2YgU3BpbkxvY2sgYW5kIE11dGV4LiBGb3Igc21hbGwgY3Jp
dGljYWwKKy8vIHNlY3Rpb25zICh0aGF0IHRha2UgbmFub3NlY29uZHMpLCBpdCB3aWxsIHVzdWFs
bHkgcGVyZm9ybSB3aXRoaW4gMnggb2YgYSBTcGluTG9jayBpbiBib3RoIHRoZQorLy8gY29udGVu
ZGVkIGFuZCB1bmNvbnRlbmRlZCBjYXNlLiBXaGVuIHVzaW5nIGEgTXV0ZXgsIHN1Y2ggY3JpdGlj
YWwgc2VjdGlvbnMgdGFrZSB1cCB0byAxMDB4IGxvbmdlcgorLy8gdGhhbiBMb2NrIGluIHRoZSBj
b250ZW5kZWQgY2FzZSwgb3IgM3ggbG9uZ2VyIHRoYW4gTG9jayBpbiB0aGUgdW5jb250ZW5kZWQg
Y2FzZS4gRm9yIGxvbmdlcgorLy8gY3JpdGljYWwgc2VjdGlvbnMgKHRoYXQgdGFrZSB0ZW5zIG9m
IG1pY3Jvc2Vjb25kcyksIGl0IHdpbGwgcGVyZm9ybSBhcyB3ZWxsIGFzIGEgTXV0ZXggYW5kIHNs
aWdodGx5CisvLyBiZXR0ZXIgdGhhbiBhIFNwaW5Mb2NrLiBCdXQsIGNydWNpYWxseSwgYSBTcGlu
TG9jayB3aWxsIGJ1cm4gdXAgdG8gOTB4IG1vcmUgdGltZSBpbiB0aGUga2VybmVsIGZvcgorLy8g
c3VjaCBjcml0aWNhbCBzZWN0aW9ucyB0aGFuIGVpdGhlciBMb2NrIG9yIE11dGV4LiBIZW5jZSwg
dXNpbmcgTG9jayB3aWxsIG1ha2UgdGhlIGNvbW1vbiBjYXNlIG9mCisvLyBsb2NraW5nIHBlcmZv
cm0gY2xvc2UgdG8gU3BpbkxvY2sgZm9yIGFueSBjcml0aWNhbCBzZWN0aW9uIHRoYXQgZG9lcyBt
b3JlIHRoYW4gYSBmZXcgbmFub3NlY29uZHMgb2YKKy8vIHdvcmsgd2hpbGUgYmVpbmcgYXMga2lu
ZCB0byB0aGUgc2NoZWR1bGVyIGZvciBsb25nZXIgY3JpdGljYWwgc2VjdGlvbnMgYXMgYSBNdXRl
eC4KKy8vCisvLyBMaWtlIFNwaW5Mb2NrLCBMb2NrIHRha2VzIHZlcnkgbGl0dGxlIG1lbW9yeSAt
IGp1c3Qgc2l6ZW9mKHZvaWQqKSwgdGhvdWdoIHNlZSBhIGRldGFpbGVkIGNhdmVhdAorLy8gYmVs
b3cuCisvLworLy8gR2VuZXJhbGx5LCB5b3Ugc2hvdWxkIHVzZSBMb2NrIGluc3RlYWQgb2YgU3Bp
bkxvY2sgYmVjYXVzZSB3aGlsZSBpdCBwZW5hbGl6ZXMgeW91IHNsaWdodGx5LCB5b3UKKy8vIG1h
a2UgdXAgZm9yIGl0IGJ5IG5vdCB3YXN0aW5nIENQVSBjeWNsZXMgaW4gY2FzZSBvZiBjb250ZW50
aW9uLgorLy8KKy8vIFRoZSBMb2NrIGhhcyB0aGUgZm9sbG93aW5nIG5pY2UgcHJvcGVydGllczoK
Ky8vCisvLyAtIFVuY29udGVuZGVkIGZhc3QgcGF0aHMgZm9yIGxvY2sgYWNxdWlzaXRpb24gYW5k
IGxvY2sgcmVsZWFzZSB0aGF0IGFyZSBhbG1vc3QgYXMgZmFzdCBhcyB0aGUKKy8vICAgdW5jb250
ZW5kZWQgZmFzdCBwYXRocyBvZiBhIHNwaW5sb2NrLiBUaGUgb25seSBvdmVyaGVhZCBpcyB0aGF0
IHRoZSBzcGlubG9jayB3aWxsIG5vdCBDQVMgb24KKy8vICAgcmVsZWFzZSwgd2hpbGUgTG9jayB3
aWxsIENBUy4gVGhpcyBvdmVyaGVhZCAqY2FuKiBzbG93IHRoaW5ncyBkb3duIGZvciBleHRyZW1l
bHkgc21hbGwgY3JpdGljYWwKKy8vICAgc2VjdGlvbnMgdGhhdCBkbyBsaXR0bGUgb3Igbm90aGlu
ZyAtIGl0IG1ha2VzIHRoZW0gMnggc2xvd2VyIHNpbmNlIGluIHRoYXQgY2FzZSwgQ0FTIGlzIHRo
ZSBtb3N0CisvLyAgIGV4cGVuc2l2ZSBpbnN0cnVjdGlvbiBhbmQgaGF2aW5nIHR3byBvZiB0aGVt
IGlzIHR3aWNlIGFzIGJhZCBhcyBqdXN0IGhhdmluZyBvbmUuIEhvd2V2ZXIsIHRoaXMKKy8vICAg
bG9jayBpbXBsZW1lbnRhdGlvbiBpcyBzdGlsbCBhbG1vc3QgM3ggZmFzdGVyIHRoYW4gYSBwbGF0
Zm9ybSBtdXRleCBpbiB0aG9zZSBjYXNlcy4gSXQncyB1bmxpa2VseQorLy8gICB0aGF0IHlvdSds
bCBlbmNvdW50ZXIgbm8tb3AgY3JpdGljYWwgc2VjdGlvbnMsIHNvIHVzdWFsbHksIHRoaXMgbG9j
ayBpcyBiZXR0ZXIgdGhhbiBhIHNwaW5sb2NrLgorLy8KKy8vIC0gQ29udGVuZGVkIGZhc3QgcGF0
aCB0aGF0IGF0dGVtcHRzIHRvIHNwaW4gYW5kIHlpZWxkIGZvciBzb21lIG51bWJlciBvZiB0aW1l
cy4gRm9yIGNyaXRpY2FsCisvLyAgIHNlY3Rpb25zIHRoYXQgYXJlIGhlbGQgb25seSBicmllZmx5
LCB0aGlzIGFsbG93cyBMb2NrIHRvIHBlcmZvcm0gYWxtb3N0IGFzIHdlbGwgYXMgYSBTcGluTG9j
ay4KKy8vICAgU3BpbkxvY2sgY2FuIHN0aWxsIGJlIGFsbW9zdCAyeCBmYXN0ZXIgdGhhbiBMb2Nr
IGlmIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIGEgbm8tb3AsIGJ1dCB0aGlzCisvLyAgIGFkdmFu
dGFnZSBkaW1pbmlzaGVzIGFzIHRoZSBjcml0aWNhbCBzZWN0aW9uIGdyb3dzLgorLy8KKy8vIC0g
Q29udGVuZGVkIHNsb3cgcGF0aCB0aGF0IGVucXVldWVzIHRoZSBjb250ZW5kaW5nIHRocmVhZCBh
bmQgY2F1c2VzIGl0IHRvIHdhaXQgb24gYSBjb25kaXRpb24KKy8vICAgdmFyaWFibGUgdW50aWwg
dGhlIGxvY2sgaXMgcmVsZWFzZWQuIFRoaXMgaXMgdGhlIG9ubHkgY2FzZSBpbiB3aGljaCBzeXN0
ZW0gbXV0ZXhlcyBhbmQgY29uZGl0aW9uCisvLyAgIHZhcmlhYmxlcyBhcmUgdXNlZC4gVGhpcyBj
YXNlIGlzIHJhcmUgYW5kIHNlbGYtbGltaXRpbmc6IGl0IHdpbGwgb25seSBoYXBwZW4gd2hlbiBh
IGxvY2sgaXMgaGVsZAorLy8gICBmb3IgbG9uZyBlbm91Z2ggdGhhdCBzcGlubmluZyBzb21lIG51
bWJlciBvZiB0aW1lcyBkb2Vzbid0IGFjcXVpcmUgaXQuIFRoZSBmYWN0IHRoYXQgTG9jayBkb2Vz
CisvLyAgIHRoaXMgYXMgYSBmYWxsYmFjayB3aGVuIHNwaW5uaW5nIGZvciBzb21lIG51bWJlciBv
ZiB0aW1lcyBmYWlscyBtZWFucyB0aGF0IGl0IHdpbGwgYnVybgorLy8gICBkcmFtYXRpY2FsbHkg
ZmV3ZXIgQ1BVIGN5Y2xlcyAtIGZvciBleGFtcGxlIHdpdGggMTAgdGhyZWFkcyBvbiBhbiA4IGxv
Z2ljYWwgQ1BVIG1hY2hpbmUgYWNxdWlyaW5nCisvLyAgIGEgY3JpdGljYWwgc2VjdGlvbiB0aGF0
IHRha2VzIDUwIG1pY3Jvc2Vjb25kcywgdGhlIFdURiBTcGluTG9jayB3aWxsIGNhdXNlIDkweCBt
b3JlIHRpbWUgdG8gYmUKKy8vICAgc3BlbnQgaW4gdGhlIGtlcm5lbCB0aGFuIExvY2suCisvLwor
Ly8gLSBWZXJ5IGxvdyBtZW1vcnkgdXNhZ2UuIEVhY2ggTG9jayByZXF1aXJlcyBvbmx5IHNpemVv
Zih2b2lkKikgbWVtb3J5LiBXaGVuIHRoZSBjb250ZW5kZWQgc2xvdworLy8gICBwYXRoIGlzIGFj
dGl2YXRlZCwgTG9jayBvbmx5IHJlbGllcyBvbiBlYWNoIHRocmVhZCBoYXZpbmcgYSBwcmVhbGxv
Y2F0ZWQgdGhyZWFkLXNwZWNpZmljIGRhdGEKKy8vICAgc3RydWN0dXJlIGNhbGxlZCBUaHJlYWRE
YXRhIHRoYXQsIHRvZ2V0aGVyIHdpdGggdGhlIExvY2sgaXRzZWxmLCBpcyB1c2VkIHRvIGJ1aWxk
IHVwIGEgdGhyZWFkCisvLyAgIHF1ZXVlLiBTbywgdGhlIHRvdGFsIG1lbW9yeSB1c2FnZSBvZiBh
bGwgTG9ja3MgaXMgc3RpbGwgYm91bmRlZCBieToKKy8vCisvLyAgICAgICBudW1iZXJPZkxvY2tz
ICogc2l6ZW9mKHZvaWQqKSArIG51bWJlck9mVGhyZWFkcyAqIHNpemVvZihUaHJlYWREYXRhKQor
Ly8KKy8vICAgV2hlcmUgVGhyZWFkRGF0YSBpcyBhIGRlY2VudGx5IGxhcmdlIGRhdGEgc3RydWN0
dXJlLCBidXQgd2Ugd2lsbCBvbmx5IGV2ZXIgaGF2ZSBvbmUgcGVyIHRocmVhZCwKKy8vICAgcmVn
YXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIExvY2tzIGluIG1lbW9yeS4gQW5vdGhlciB3YXkgdG8g
dmlldyB0aGlzIGlzIHRoYXQgdGhlIHdvcnN0IGNhc2UKKy8vICAgbWVtb3J5IHVzYWdlIHBlciBM
b2NrIGlzOgorLy8KKy8vICAgICAgIHNpemVvZih2b2lkKikgKyBudW1iZXJPZlRocmVhZHMgLyBu
dW1iZXJPZkxvY2tzICogc2l6ZW9mKFRocmVhZERhdGEpCisvLworLy8gICBTbywgdW5sZXNzIHlv
dSBoYXZlIGEgc21hbGwgbnVtYmVyIG9mIExvY2tzIChvciwgYSBsYXJnZSBudW1iZXIgb2YgdGhy
ZWFkcywgd2hpY2ggaXMgZmFyIGxlc3MKKy8vICAgbGlrZWx5KSwgdGhlIG1lbW9yeSB1c2FnZSBw
ZXItTG9jayBpcyBzdGlsbCBnb2luZyB0byBiZSBzb21ld2hlcmUgYXJvdW5kIHNpemVvZih2b2lk
KikuCisvLworLy8gLSBCYXJnaW5nIGZhc3QgcGF0aHMuIFRoZSBMb2NrIGlzIHR1bmVkIGZvciBt
YXhpbXVtIHRocm91Z2hwdXQgcmF0aGVyIHRoYW4gbWF4aW11bSBmYWlybmVzcy4gSWYKKy8vICAg
YSB0aHJlYWQgcmVsZWFzZXMgYSBMb2NrIHRoYXQgd2FzIGNvbnRlbmRlZCBhbmQgaGFkIGEgcXVl
dWUgb2Ygd2FpdGluZyB0aHJlYWRzLCB0aGVuIGl0IHdpbGwKKy8vICAgd2FrZSB1cCB0aGUgaGVh
ZCBvZiB0aGUgcXVldWUsIGJ1dCBpdCB3aWxsIGFsc28gbWFyayB0aGUgbG9jayBhcyBiZWluZyBh
dmFpbGFibGUuIFRoaXMgbWVhbnMgdGhhdAorLy8gICBzb21lIG90aGVyIHRocmVhZCB0aGF0IGlz
IGp1c3Qgbm93IGF0dGVtcHRpbmcgdG8gYWNxdWlyZSB0aGUgbG9jayBtYXkgZ2V0IGl0IGJlZm9y
ZSB0aGUgdGhyZWFkCisvLyAgIHRoYXQgZ290IHdva2VuIHVwLiBXaGVuIGEgdGhyZWFkIGJhcmdl
cyBpbnRvIHRoZSBsb2NrLCB0aGUgdGhyZWFkIHRoYXQgZ290IHdva2VuIHVwIHdpbGwgc2ltcGx5
CisvLyAgIGdvIGJhY2sgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuIFRoZSBiYXJnaW5nIGJlaGF2
aW9yIGVuZHMgdXAgYmVpbmcgcHJvYmFiaWxpc3RpYyBvbiBtb3N0CisvLyAgIHBsYXRmb3JtcyBh
bmQgZXZlbiB0aG91Z2ggaXQgbWF5IGJlIHVuZmFpciB0byBzb21lIHRocmVhZCBhdCBzb21lIG1v
bWVudCBpbiB0aW1lLCBpdCB3aWxsIHJhcmVseQorLy8gICBoYXZlIGEgbG9uZyBzdHJlYWsgb2Yg
dW5mYWlybmVzcyB0b3dhcmRzIGFueSBwYXJ0aWN1bGFyIHRocmVhZDogZXZlbnR1YWxseSBlYWNo
IHRocmVhZCB3YWl0aW5nIG9uCisvLyAgIHRoZSBsb2NrIHdpbGwgZ2V0IHRvIGhhdmUgYSB0dXJu
IHNvIGxvbmcgYXMgbm8gdGhyZWFkIGp1c3QgaG9sZHMgdGhlIGxvY2sgZm9yZXZlci4gVGhhdCBz
YWlkLAorLy8gICB0aGVyZSAqaXMqIGEgY2hhbmNlIG9mIHBhdGhvbG9naWVzIC0gdXNlcnMgb2Yg
TG9jayBzaG91bGQgbm90IGRlcGVuZCBvbiBmaXJzdC1pbiwgZmlyc3Qtb3V0IGxvY2sKKy8vICAg
YWNxdWlzaXRpb24gb3JkZXIgdW5kZXIgY29udGVudGlvbi4gVGhlIHNhbWUgY2F2ZWF0IGlzIGdl
bmVyYWxseSB0cnVlIG9mIFNwaW5Mb2NrIGFuZCBwbGF0Zm9ybQorLy8gICBtdXRleGVzIG9uIHNv
bWUgcGxhdGZvcm1zLgorCisvLyBUaGlzIGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3Rv
ciBvciBkZXN0cnVjdG9yIHNvIHRoYXQgaXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQu
CisvLyBVc2UgTG9jayBpbiBpbnN0YW5jZSB2YXJpYWJsZXMuCitzdHJ1Y3QgTG9ja0Jhc2Ugewor
ICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fd29yZC5jb21wYXJl
RXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7
CisgICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgbG9ja1Nsb3coKTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9jaygp
CisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGlz
SGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7CisgICAgICAgICAgICAv
LyBMb2NrIHJlbGVhc2VkLCBhbmQgbm9ib2R5IHdhcyB3YWl0aW5nIQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgdW5sb2NrU2xvdygpOworICAgIH0KKworICAgIGJv
b2wgaXNIZWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dvcmQubG9hZChzdGQ6
Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzSGVsZEJpdDsKKyAgICB9CisKKyAgICBib29sIGlz
TG9ja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0hlbGQoKTsKKyAgICB9CisK
K3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGlzSGVsZEJpdCA9IDE7Cisg
ICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBsb2NrZWRRdWV1ZUJpdCA9IDI7CisgICAgc3RhdGlj
IGNvbnN0IHVpbnRwdHJfdCBtYXNrID0gMzsKKworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGxvY2tTbG93KCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrU2xvdygpOwor
CisgICAgQXRvbWljPHVpbnRwdHJfdD4gbV93b3JkOworfTsKKworY2xhc3MgTG9jayA6IHB1Ymxp
YyBMb2NrQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9jayk7CitwdWJsaWM6Cisg
ICAgTG9jaygpCisgICAgeworICAgICAgICBtX3dvcmQuc3RvcmUoMCwgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsYXhlZCk7CisgICAgfQorfTsKKwordHlwZWRlZiBMb2NrQmFzZSBTdGF0aWNMb2NrOwor
dHlwZWRlZiBMb2NrZXI8TG9ja0Jhc2U+IExvY2tIb2xkZXI7CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCit1c2luZyBXVEY6OlN0YXRpY0xvY2s7Cit1c2luZyBXVEY6OkxvY2s7Cit1c2luZyBXVEY6
OkxvY2tIb2xkZXI7CisKKyNlbmRpZiAvLyBXVEZfTG9ja19oCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL01ldGFBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01ldGFB
bGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxs
b2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIE1ldGFBbGxv
Y2F0b3JUcmFja2VyOjpyZWxlYXNlKE1ldGFBCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBNZXRhQWxs
b2NhdG9yOjpyZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKIHsKLSAgICBTcGlu
TG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9j
ayk7CiAgICAgaWYgKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSkgewogICAgICAgICBkZWNyZW1lbnRQ
YWdlT2NjdXBhbmN5KGhhbmRsZS0+c3RhcnQoKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpKTsKICAg
ICAgICAgYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKGhhbmRsZS0+c3RhcnQoKSwgaGFu
ZGxlLT5zaXplSW5CeXRlcygpKTsKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBNZXRhQWxsb2NhdG9y
SGFuZGxlOjpzaHJpbmsoc2l6ZV90IAogewogICAgIEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBt
X3NpemVJbkJ5dGVzKTsKICAgICAKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2Nh
dG9yLT5tX2xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2FsbG9jYXRvci0+bV9sb2Nr
KTsKIAogICAgIG5ld1NpemVJbkJ5dGVzID0gbV9hbGxvY2F0b3ItPnJvdW5kVXAobmV3U2l6ZUlu
Qnl0ZXMpOwogICAgIApAQCAtMTUwLDcgKzE1MCw3IEBAIE1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxv
Y2F0b3Ioc2l6ZV90IGFsbG8KIAogUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRh
QWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQog
ewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxv
Y2tlcigmbV9sb2NrKTsKIAogICAgIGlmICghc2l6ZUluQnl0ZXMpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtMTk2LDcgKzE5Niw3IEBAIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0
YUFsbG8KIAogTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2NhdG9yOjpjdXJyZW50
U3RhdGlzdGljcygpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAg
IExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogICAgIFN0YXRpc3RpY3MgcmVzdWx0OwogICAg
IHJlc3VsdC5ieXRlc0FsbG9jYXRlZCA9IG1fYnl0ZXNBbGxvY2F0ZWQ7CiAgICAgcmVzdWx0LmJ5
dGVzUmVzZXJ2ZWQgPSBtX2J5dGVzUmVzZXJ2ZWQ7CkBAIC0yODEsNyArMjgxLDcgQEAgdm9pZCBN
ZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2VGcm9tUmVsZQogCiB2b2lkIE1ldGFBbGxvY2F0b3I6
OmFkZEZyZXNoRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiB7Ci0g
ICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2Vy
KCZtX2xvY2spOwogICAgIG1fYnl0ZXNSZXNlcnZlZCArPSBzaXplSW5CeXRlczsKICAgICBhZGRG
cmVlU3BhY2Uoc3RhcnQsIHNpemVJbkJ5dGVzKTsKIH0KQEAgLTI4OSw3ICsyODksNyBAQCB2b2lk
IE1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNwYWNlKHZvCiBzaXplX3QgTWV0YUFsbG9jYXRv
cjo6ZGVidWdGcmVlU3BhY2VTaXplKCkKIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgU3BpbkxvY2tI
b2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwog
ICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgIGZvciAoRnJlZVNwYWNlTm9kZSogbm9kZSA9IG1f
ZnJlZVNwYWNlU2l6ZU1hcC5maXJzdCgpOyBub2RlOyBub2RlID0gbm9kZS0+c3VjY2Vzc29yKCkp
CiAgICAgICAgIHJlc3VsdCArPSBub2RlLT5tX3NpemVJbkJ5dGVzOwpJbmRleDogU291cmNlL1dU
Ri93dGYvTWV0YUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01ldGFB
bGxvY2F0b3IuaAkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEsMTMgQEAKIAogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg+CiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VCbG9jay5oPgogI2luY2x1ZGUg
PHd0Zi9SZWRCbGFja1RyZWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKQEAgLTE4Myw3ICsxODMsNyBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX2J5dGVz
UmVzZXJ2ZWQ7CiAgICAgc2l6ZV90IG1fYnl0ZXNDb21taXR0ZWQ7CiAgICAgCi0gICAgU3Bpbkxv
Y2sgbV9sb2NrOworICAgIExvY2sgbV9sb2NrOwogCiAgICAgTWV0YUFsbG9jYXRvclRyYWNrZXIq
IG1fdHJhY2tlcjsKIApJbmRleDogU291cmNlL1dURi93dGYvU3BpbkxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TcGluTG9jay5oCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9TcGluTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiwxNiBAQAog
CiBuYW1lc3BhY2UgV1RGIHsKIAorLy8gU3BpbkxvY2sgaXMgYSB2ZXJ5IHNpbXBsZSBsb2NrIGlt
cGxlbWVudGF0aW9uIHRoYXQgaGFzIGV4dHJlbWVseSBmYXN0IGxvY2svdW5sb2NrIGZvciB2ZXJ5
IHNtYWxsCisvLyB1bmNvbnRlbmRlZCBjcml0aWNhbCBzZWN0aW9ucy4gSG93ZXZlciwgaXQgd2ls
bCBleGhpYml0IGJhZCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiB3aGVuIHRoZSBsb2NrCisvLyBi
ZWNvbWVzIGNvbnRlbmRlZDogdGhlIHRocmVhZCB0cnlpbmcgdG8gYWNxdWlyZSB0aGUgbG9jayB3
aWxsIHNpbXBseSB3YXN0ZSBDUFUgY3ljbGVzLgorLy8KKy8vIEZvciBtb3N0IChhbGw/KSBsb2Nr
aW5nIHVzZSBjYXNlcywgaXQncyBiZXR0ZXIgdG8gdXNlIExvY2sgKHNlZSB3dGYvTG9jay5oKS4g
VGhhdCB1c2VzIG9ubHkgYSBiaXQKKy8vIG1vcmUgbWVtb3J5ICg4IGJ5dGVzIGluc3RlYWQgb2Yg
NCBvbiA2NC1iaXQpLCBhbmQgaXMgb25seSBhIGJpdCBzbG93ZXIgaW4gdGhlIHVuY29udGVuZGVk
IGNhc2UKKy8vIChMb2NrIG5lZWRzIENBUyB0byB1bmxvY2ssIHdoaWxlIFNwaW5Mb2NrIGRvZXNu
J3QpLCBidXQgd2lsbCBidXJuIGEgbG90IGxlc3MgQ1BVIHRpbWUgLSBmb3IgMTAKKy8vIHRocmVh
ZHMgYWNxdWlyaW5nIGEgNTAgbWljcm9zZWNvbmQgY3JpdGljYWwgc2VjdGlvbiwgTG9jayB3aWxs
IHVzZSB1cCB0byAxMDB4IGxlc3Mga2VybmVsIENQVSB0aW1lCisvLyB0aGFuIFNwaW5Mb2NrLgor
CiAvLyBTcGluTG9ja0Jhc2UgaXMgYSBzdHJ1Y3Qgd2l0aG91dCBhbiBleHBsaWNpdGx5IGRlZmlu
ZWQgY29uc3RydWN0b3JzIHNvIHRoYXQKIC8vIGl0IGNhbiBiZSBpbml0aWFsaXplZCBhdCBjb21w
aWxlIHRpbWUuIFNlZSBTdGF0aWNTcGluTG9jayBiZWxvdy4KIHN0cnVjdCBTcGluTG9ja0Jhc2Ug
ewpJbmRleDogU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAkocmV2aXNpb24gMTg4MDE4
KQorKysgU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDksIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3
IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4LmNvbSkKICAqIENvcHlyaWdodCAoQykg
MjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0
b21pY1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNT
dHJpbmcuY3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21p
Y1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJk
dG9hLmgiCiAKICNpZiBVU0UoV0VCX1RIUkVBRCkKLSNpbmNsdWRlICJTcGluTG9jay5oIgorI2lu
Y2x1ZGUgIkxvY2suaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMTg4MDE4KQorKysgU291
cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KIAogI2lmIFVTRShX
RUJfVEhSRUFEKQotI2luY2x1ZGUgIlNwaW5Mb2NrLmgiCisjaW5jbHVkZSAiTG9jay5oIgogI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNDIsMTggKzQyLDE4IEBAIHVzaW5nIG5hbWVzcGFj
ZSBVbmljb2RlOwogCiAjaWYgVVNFKFdFQl9USFJFQUQpCiAKLWNsYXNzIEF0b21pY1N0cmluZ1Rh
YmxlTG9ja2VyIDogcHVibGljIFNwaW5Mb2NrSG9sZGVyIHsKK2NsYXNzIEF0b21pY1N0cmluZ1Rh
YmxlTG9ja2VyIDogcHVibGljIExvY2tIb2xkZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyKTsKIAotICAgIHN0YXRpYyBTdGF0aWNTcGluTG9jayBz
X3N0cmluZ1RhYmxlTG9jazsKKyAgICBzdGF0aWMgU3RhdGljTG9jayBzX3N0cmluZ1RhYmxlTG9j
azsKIHB1YmxpYzoKICAgICBBdG9taWNTdHJpbmdUYWJsZUxvY2tlcigpCi0gICAgICAgIDogU3Bp
bkxvY2tIb2xkZXIoJnNfc3RyaW5nVGFibGVMb2NrKQorICAgICAgICA6IExvY2tIb2xkZXIoJnNf
c3RyaW5nVGFibGVMb2NrKQogICAgIHsKICAgICB9CiB9OwogCi1TdGF0aWNTcGluTG9jayBBdG9t
aWNTdHJpbmdUYWJsZUxvY2tlcjo6c19zdHJpbmdUYWJsZUxvY2s7CitTdGF0aWNMb2NrIEF0b21p
Y1N0cmluZ1RhYmxlTG9ja2VyOjpzX3N0cmluZ1RhYmxlTG9jazsKIAogI2Vsc2UKIApJbmRleDog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMTg4MDE4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTUtMDgtMDUgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBMaWdodHdlaWdodCBsb2NrcyBzaG91bGQgYmUg
YWRhcHRpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NzU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBiZWhhdmlvci4KKworICAgICAgICAqIGJpbmRp
bmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNXcmFw
cGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmFkZEpTV3JhcHBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpyZW1vdmVKU1dyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlSlNXcmFwcGVySWZS
ZXRhaW5Db3VudE9uZSk6CisgICAgICAgICogcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cubW06
CisgICAgICAgICgtW1dBS1dpbmRvdyBzZXRFeHBvc2VkU2Nyb2xsVmlld1JlY3Q6XSk6CisgICAg
ICAgICgtW1dBS1dpbmRvdyBleHBvc2VkU2Nyb2xsVmlld1JlY3RdKToKKwogMjAxNS0wOC0wNSAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIHdoZW4gcmVt
b3ZpbmcgY2hpbGRyZW4gb2YgYSBNYXRoTUxTZWxlY3RFbGVtZW50CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTg4
MDE4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0J
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbXBvcnQgPHJ1bnRpbWUvSlNMb2Nr
Lmg+CiAjaW1wb3J0IDxydW50aW1lL0NvbXBsZXRpb24uaD4KICNpbXBvcnQgPHJ1bnRpbWUvQ29t
cGxldGlvbi5oPgotI2ltcG9ydCA8d3RmL1NwaW5Mb2NrLmg+CisjaW1wb3J0IDx3dGYvTG9jay5o
PgogI2ltcG9ydCA8d3RmL1RocmVhZGluZy5oPgogI2ltcG9ydCA8d3RmL3NwaS9jb2NvYS9OU01h
cFRhYmxlU1BJLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTcyLDEyICs3
MiwxMiBAQCB1c2luZyBKU0M6Om1ha2VTb3VyY2U7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyBOU01hcFRhYmxlKiBKU1dyYXBwZXJDYWNoZTsKLXN0YXRpYyBTdGF0aWNTcGluTG9jayBz
cGluTG9jazsKK3N0YXRpYyBTdGF0aWNMb2NrIHNwaW5Mb2NrOwogCiBOU09iamVjdCogZ2V0SlNX
cmFwcGVyKEpTT2JqZWN0KiBpbXBsKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVyKCZzcGluTG9jayk7CisgICAgTG9ja0hvbGRlciBob2xk
ZXIoJnNwaW5Mb2NrKTsKIAogICAgIGlmICghSlNXcmFwcGVyQ2FjaGUpCiAgICAgICAgIHJldHVy
biBuaWw7CkBAIC04OCw3ICs4OCw3IEBAIE5TT2JqZWN0KiBnZXRKU1dyYXBwZXIoSlNPYmplY3Qq
IGltcGwpCiB2b2lkIGFkZEpTV3JhcHBlcihOU09iamVjdCogd3JhcHBlciwgSlNPYmplY3QqIGlt
cGwpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBTcGluTG9ja0hvbGRlciBo
b2xkZXIoJnNwaW5Mb2NrKTsKKyAgICBMb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOwogCiAg
ICAgaWYgKCFKU1dyYXBwZXJDYWNoZSkKICAgICAgICAgSlNXcmFwcGVyQ2FjaGUgPSBjcmVhdGVX
cmFwcGVyQ2FjaGUoKTsKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBhZGRKU1dyYXBwZXIoTlNPYmpl
Y3QqIHdyYXBwZXIsIEpTTwogCiB2b2lkIHJlbW92ZUpTV3JhcHBlcihKU09iamVjdCogaW1wbCkK
IHsKLSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJnNwaW5Mb2NrKTsKKyAgICBMb2NrSG9sZGVy
IGhvbGRlcigmc3BpbkxvY2spOwogCiAgICAgaWYgKCFKU1dyYXBwZXJDYWNoZSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgcmVtb3ZlSlNXcmFwcGVyKEpTT2JqZWN0
KiBpbXBsKQogCiBzdGF0aWMgdm9pZCByZW1vdmVKU1dyYXBwZXJJZlJldGFpbkNvdW50T25lKE5T
T2JqZWN0KiB3cmFwcGVyLCBKU09iamVjdCogaW1wbCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBo
b2xkZXIoJnNwaW5Mb2NrKTsKKyAgICBMb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOwogCiAg
ICAgaWYgKCFKU1dyYXBwZXJDYWNoZSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAJKHJldmlz
aW9uIDE4ODAxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdC
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNyArMjAwLDcgQEAgQ0FSaW5nQnVmZmVy
OjpFcnJvciBDQVJpbmdCdWZmZXI6OnN0b3JlKAogCiB2b2lkIENBUmluZ0J1ZmZlcjo6c2V0Q3Vy
cmVudEZyYW1lQm91bmRzKHVpbnQ2NF90IHN0YXJ0VGltZSwgdWludDY0X3QgZW5kVGltZSkKIHsK
LSAgICBCeXRlU3BpbkxvY2tlciBsb2NrZXIobV9jdXJyZW50RnJhbWVCb3VuZHNMb2NrKTsKKyAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOwogICAgIHVpbnQz
Ml90IG5leHRQdHIgPSBtX3RpbWVCb3VuZHNRdWV1ZVB0ciArIDE7CiAgICAgdWludDMyX3QgaW5k
ZXggPSBuZXh0UHRyICYga0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlTWFzazsKIApAQCAtMjEy
LDcgKzIxMiw3IEBAIHZvaWQgQ0FSaW5nQnVmZmVyOjpzZXRDdXJyZW50RnJhbWVCb3VuZHMKIAog
dm9pZCBDQVJpbmdCdWZmZXI6OmdldEN1cnJlbnRGcmFtZUJvdW5kcyh1aW50NjRfdCAmc3RhcnRU
aW1lLCB1aW50NjRfdCAmZW5kVGltZSkKIHsKLSAgICBCeXRlU3BpbkxvY2tlciBsb2NrZXIobV9j
dXJyZW50RnJhbWVCb3VuZHNMb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2N1cnJlbnRG
cmFtZUJvdW5kc0xvY2spOwogICAgIHVpbnQzMl90IGN1clB0ciA9IG1fdGltZUJvdW5kc1F1ZXVl
UHRyOwogICAgIHVpbnQzMl90IGluZGV4ID0gY3VyUHRyICYga0dlbmVyYWxSaW5nVGltZUJvdW5k
c1F1ZXVlTWFzazsKICAgICBDQVJpbmdCdWZmZXI6OlRpbWVCb3VuZHMmIGJvdW5kcyA9IG1fdGlt
ZUJvdW5kc1F1ZXVlW2luZGV4XTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9DQVJpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmgJKHJldmlzaW9uIDE4ODAxOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFVTRShNRURJQVRPT0xC
T1gpCiAKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+Ci0jaW5jbHVkZSA8d3RmL0J5
dGVTcGluTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiB0eXBlZGVmIHN0cnVjdCBBdWRpb0J1ZmZlckxpc3QgQXVkaW9CdWZmZXJMaXN0OwpA
QCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgCiAgICAgVmVjdG9yPFRpbWVC
b3VuZHM+IG1fdGltZUJvdW5kc1F1ZXVlOwotICAgIEJ5dGVTcGluTG9jayBtX2N1cnJlbnRGcmFt
ZUJvdW5kc0xvY2s7CisgICAgTG9jayBtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2s7CiAgICAgaW50
MzJfdCBtX3RpbWVCb3VuZHNRdWV1ZVB0cjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy93YWsvV0FLV2luZG93Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy93YWsvV0FLV2luZG93Lm1tCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dBS1dpbmRvdy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQAogI2ltcG9ydCAiV0tDb250ZW50T2JzZXJ2YXRpb24uaCIKICNpbXBv
cnQgIldLVmlld1ByaXZhdGUuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgot
I2ltcG9ydCA8d3RmL1NwaW5Mb2NrLmg+CisjaW1wb3J0IDx3dGYvTG9jay5oPgogCiBXRUJDT1JF
X0VYUE9SVCBOU1N0cmluZyAqIGNvbnN0IFdBS1dpbmRvd1NjcmVlblNjYWxlRGlkQ2hhbmdlTm90
aWZpY2F0aW9uID0gQCJXQUtXaW5kb3dTY3JlZW5TY2FsZURpZENoYW5nZU5vdGlmaWNhdGlvbiI7
CiBXRUJDT1JFX0VYUE9SVCBOU1N0cmluZyAqIGNvbnN0IFdBS1dpbmRvd1Zpc2liaWxpdHlEaWRD
aGFuZ2VOb3RpZmljYXRpb24gPSBAIldBS1dpbmRvd1Zpc2liaWxpdHlEaWRDaGFuZ2VOb3RpZmlj
YXRpb24iOwpAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgV2ViRXZlbnQgKmN1cnJlbnRFdmVudCA9
IG5pbDsKIHN0YXRpYyBpZDxPcmllbnRhdGlvblByb3ZpZGVyPiBnT3JpZW50YXRpb25Qcm92aWRl
cjsKIAogQGltcGxlbWVudGF0aW9uIFdBS1dpbmRvdyB7Ci0gICAgU3BpbkxvY2sgX2V4cG9zZWRT
Y3JvbGxWaWV3UmVjdExvY2s7CisgICAgTG9jayBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0TG9jazsK
ICAgICBDR1JlY3QgX2V4cG9zZWRTY3JvbGxWaWV3UmVjdDsKIH0KIApAQCAtMzU4LDE0ICszNTgs
MTQgQEAgLSAodm9pZClzZW5kTW91c2VNb3ZlRXZlbnQ6KFdlYkV2ZW50ICopYQogCiAtICh2b2lk
KXNldEV4cG9zZWRTY3JvbGxWaWV3UmVjdDooQ0dSZWN0KWV4cG9zZWRTY3JvbGxWaWV3UmVjdAog
ewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmX2V4cG9zZWRTY3JvbGxWaWV3UmVjdExvY2sp
OworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZfZXhwb3NlZFNjcm9sbFZpZXdSZWN0TG9jayk7CiAg
ICAgX2V4cG9zZWRTY3JvbGxWaWV3UmVjdCA9IGV4cG9zZWRTY3JvbGxWaWV3UmVjdDsKIH0KIAog
LSAoQ0dSZWN0KWV4cG9zZWRTY3JvbGxWaWV3UmVjdAogewogICAgIHsKLSAgICAgICAgU3Bpbkxv
Y2tIb2xkZXIgbG9ja2VyKCZfZXhwb3NlZFNjcm9sbFZpZXdSZWN0TG9jayk7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCZfZXhwb3NlZFNjcm9sbFZpZXdSZWN0TG9jayk7CiAgICAgICAgIGlm
ICghQ0dSZWN0SXNOdWxsKF9leHBvc2VkU2Nyb2xsVmlld1JlY3QpKQogICAgICAgICAgICAgcmV0
dXJuIF9leHBvc2VkU2Nyb2xsVmlld1JlY3Q7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNp
b24gMTg4MDE4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTUtMDgtMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KKworICAgICAgICBMaWdodHdlaWdodCBsb2NrcyBzaG91bGQgYmUgYWRhcHRpdmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzU0NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkV2ZW50RGlzcGF0
Y2hlcjo6Y2xlYXJRdWV1ZWRUb3VjaEV2ZW50c0ZvclBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpF
dmVudERpc3BhdGNoZXI6OmdldFF1ZXVlZFRvdWNoRXZlbnRzRm9yUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OkV2ZW50RGlzcGF0Y2hlcjo6dG91Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OkV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hUb3VjaEV2ZW50cyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlZpZXdVcGRhdGVE
aXNwYXRjaGVyOjp2aXNpYmxlQ29udGVudFJlY3RVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpW
aWV3VXBkYXRlRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5oOgorCiAy
MDE1LTA4LTA1ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAg
ICAgIFBERlBsdWdpbnMgYXJlIGNsaXBwZWQgaW4gbGluayBwcmV2aWV3cyAoYW5kIHJlbWFpbiBz
byB3aGVuIG9wZW5lZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9F
dmVudERpc3BhdGNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcyLDEzICsxNzIsMTMgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OndoZWVs
RXZlbnQodWludDY0XwogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQogdm9pZCBFdmVudERp
c3BhdGNoZXI6OmNsZWFyUXVldWVkVG91Y2hFdmVudHNGb3JQYWdlKGNvbnN0IFdlYlBhZ2UmIHdl
YlBhZ2UpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7
CisgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fdG91Y2hFdmVudHNMb2NrKTsKICAgICBtX3RvdWNo
RXZlbnRzLnJlbW92ZSh3ZWJQYWdlLnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBFdmVudERpc3BhdGNo
ZXI6OmdldFF1ZXVlZFRvdWNoRXZlbnRzRm9yUGFnZShjb25zdCBXZWJQYWdlJiB3ZWJQYWdlLCBU
b3VjaEV2ZW50UXVldWUmIGRlc3RpbmF0aW9uUXVldWUpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIg
bG9ja2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fdG91
Y2hFdmVudHNMb2NrKTsKICAgICBkZXN0aW5hdGlvblF1ZXVlID0gbV90b3VjaEV2ZW50cy50YWtl
KHdlYlBhZ2UucGFnZUlEKCkpOwogfQogCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBFdmVudERp
c3BhdGNoZXI6OnRvdWNoRXZlbnQodWludDY0XwogewogICAgIGJvb2wgdXBkYXRlTGlzdFdhc0Vt
cHR5OwogICAgIHsKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvdWNoRXZlbnRz
TG9jayk7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7CiAg
ICAgICAgIHVwZGF0ZUxpc3RXYXNFbXB0eSA9IG1fdG91Y2hFdmVudHMuaXNFbXB0eSgpOwogICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdG91Y2hFdmVudHMuYWRkKHBhZ2VJRCwgVG91Y2hFdmVu
dFF1ZXVlKCkpOwogICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCkBAIC0yMTcsNyAr
MjE3LDcgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoVG91Y2hFdmVudAogewogICAg
IEhhc2hNYXA8dWludDY0X3QsIFRvdWNoRXZlbnRRdWV1ZT4gbG9jYWxDb3B5OwogICAgIHsKLSAg
ICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7CisgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7CiAgICAgICAgIGxvY2FsQ29w
eS5zd2FwKG1fdG91Y2hFdmVudHMpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaAkocmV2aXNpb24gMTg4
MDE4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBACiAjaW5jbHVkZSA8V2ViRXZlbnQu
aD4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nUHJpbWl0aXZlcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05Nyw3ICs5Nyw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6V2hlZWxF
dmVudERlbHRhVHJhY2tlcj4gbV9yZWNlbnRXaGVlbEV2ZW50RGVsdGFUcmFja2VyOwogI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIFNwaW5Mb2NrIG1fdG91Y2hFdmVudHNMb2NrOwor
ICAgIExvY2sgbV90b3VjaEV2ZW50c0xvY2s7CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgVG91Y2hF
dmVudFF1ZXVlPiBtX3RvdWNoRXZlbnRzOwogI2VuZGlmCiB9OwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNo
ZXIuY3BwCShyZXZpc2lvbiAxODgwMTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1
OCw3IEBAIHZvaWQgVmlld1VwZGF0ZURpc3BhdGNoZXI6OnZpc2libGVDb250ZW4KIHsKICAgICBi
b29sIHVwZGF0ZUxpc3RXYXNFbXB0eTsKICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxv
Y2tlcigmbV9kYXRhTXV0ZXgpOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9kYXRhTXV0
ZXgpOwogICAgICAgICB1cGRhdGVMaXN0V2FzRW1wdHkgPSBtX2xhdGVzdFVwZGF0ZS5pc0VtcHR5
KCk7CiAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2xhdGVzdFVwZGF0ZS5maW5kKHBhZ2VJRCk7
CiAgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX2xhdGVzdFVwZGF0ZS5lbmQoKSkKQEAgLTc4LDcg
Kzc4LDcgQEAgdm9pZCBWaWV3VXBkYXRlRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hWaXNpYgogewogICAg
IEhhc2hNYXA8dWludDY0X3QsIFVwZGF0ZURhdGE+IHVwZGF0ZTsKICAgICB7Ci0gICAgICAgIFNw
aW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9kYXRhTXV0ZXgpOworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcigmbV9kYXRhTXV0ZXgpOwogICAgICAgICB1cGRhdGUgPSBXVEY6Om1vdmUobV9sYXRlc3RV
cGRhdGUpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmgJKHJldmlzaW9uIDE4ODAxOCkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAKICNpbmNsdWRlICJWaXNpYmxl
Q29udGVudFJlY3RVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvU3Bp
bkxvY2suaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0
ZToKICAgICB9OwogCiAgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKLSAgICBTcGluTG9jayBt
X2RhdGFNdXRleDsKKyAgICBMb2NrIG1fZGF0YU11dGV4OwogICAgIEhhc2hNYXA8dWludDY0X3Qs
IFVwZGF0ZURhdGE+IG1fbGF0ZXN0VXBkYXRlOwogfTsKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MDUxKQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDgtMDYg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBMaWdodHdlaWdodCBs
b2NrcyBzaG91bGQgYmUgYWRhcHRpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NzU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdh
cmVuLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0V2ViS2l0QVBJLnZjeHBy
b2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHA6
IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6cnVuTG9ja1Rlc3QpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTUtMDgtMDYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgUGFzcy10aHJvdWdoIHRoZSB1bmRlZmluZWQg
b3B0aW9ucyBpbiBydW4tanNjCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDE4ODAxOCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNoU2V0LmNwcAogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dURi9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNwcAogICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9MaXN0SGFzaFNldC5jcHAKKyAgICAke1RFU1RX
RUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTG9jay5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XVEYvTUQ1LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9N
YXRoRXh0cmFzLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NZWRpYVRp
bWUuY3BwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9U
ZXN0V2ViS2l0QVBJLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnZjeHByb2ovVGVzdFdlYktpdEFQSS52Y3hwcm9qCShyZXZpc2lvbiAxODgw
MTgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0V2Vi
S2l0QVBJLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJz
aW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9t
c2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMi
PgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z1N1ZmZpeHxXaW4zMiI+
CkBAIC0zMTksNiArMzE5LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdU
RlxIYXNoU2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxJ
bnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXFRlc3RzXFdURlxMaXN0SGFzaFNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxUZXN0c1xXVEZcTG9jay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxU
ZXN0c1xXVEZcTUQ1LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdU
RlxNYXRoRXh0cmFzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdU
RlxNZWRpYVRpbWUuY3BwIiAvPgpAQCAtMzY1LDQgKzM2Niw0IEBACiAgIDxJbXBvcnQgUHJvamVj
dD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRH
cm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2pl
Y3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4ODAxOCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMSw2ICsxMSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0
aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2Eu
bW0gKi87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGll
c0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87
IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFT
Y3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1t
ICovOyB9OworCQkwRkZDNDVBNjFCNzNFQkVCMDA4NUJENjIgLyogTG9jay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDNDVBNDFCNzNFQkUyMDA4
NUJENjIgLyogTG9jay5jcHAgKi87IH07CiAJCTFBMDJDODcwMTI1RDRDRkQwMEUzRjRCRCAvKiBm
aW5kLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUEwMkM4NEIxMjVENEE1RTAwRTNGNEJEIC8qIGZpbmQuaHRtbCAqLzsgfTsKIAkJMUE1
MEFBMjAxQTJBNTFGQzAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNyZWF0ZS1wYWdlLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE1MEFBMUYxQTJBNEVBNTAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNyZWF0ZS1wYWdl
Lmh0bWwgKi87IH07CiAJCTFBNjM0NzlGMTgzRDcyQTQwMDVCMTcwNyAvKiBhbGwtY29udGVudC1p
bi1vbmUtaWZyYW1lLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNEM0QxOUIxN0IxQTdCMDAwQzdDNDE1IC8qIGFsbC1jb250ZW50LWlu
LW9uZS1pZnJhbWUuaHRtbCAqLzsgfTsKQEAgLTQyOCw2ICs0MjksNyBAQAogCQkwRjNCOTRBNTFB
NzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2Ny
aXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM2QzRDQjE0MTAyN0UwMDA1
QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlZEJsYWNrVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QzZDNENFMTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkZDNDVBNDFCNzNFQkUyMDA4NUJENjIgLyogTG9jay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0NjQwMTIxNjdBODMwNTAwMEJEMjE4IC8qIExheW91dFVuaXQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0VW5pdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjNCMTEyMTVFNDVFQUIwMDIxMDA2OSAv
KiBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRCMTI1RDRBNUUwMEUzRjRCRCAvKiBmaW5k
Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBmaW5kLmh0bWw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMDk2LDYgKzEwOTgsNyBAQAogCQkJCTI2QjJERkY4MTVCREU1
OTkwMDRGNjkxRCAvKiBIYXNoU2V0LmNwcCAqLywKIAkJCQkyNjZGQUZEMjE1RTU3NzUyMDBGNjFE
NUIgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgKi8sCiAJCQkJMjYzMDBCMTcxNjc1
NUNEOTAwNjY4ODZEIC8qIExpc3RIYXNoU2V0LmNwcCAqLywKKwkJCQkwRkZDNDVBNDFCNzNFQkUy
MDA4NUJENjIgLyogTG9jay5jcHAgKi8sCiAJCQkJQjQwMzlGOUMxNUU2RDhCMzAwNzI1NUQ2IC8q
IE1hdGhFeHRyYXMuY3BwICovLAogCQkJCUNENTM5M0M3MTc1N0JBOTcwMEMwNzEyMyAvKiBNRDUu
Y3BwICovLAogCQkJCUNENTQ5N0IzMTU4NTdGMEMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuY3BwICov
LApAQCAtMTU2Nyw2ICsxNTcwLDcgQEAKIAkJCQk3Q0NFN0VDOTFBNDExQTdFMDA0NDdDNEMgLyog
UmVuZGVyZWRJbWFnZUZyb21ET01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQ0Ex
QTQxMUE3RTAwNDQ3QzRDIC8qIFJlbmRlcmVkSW1hZ2VGcm9tRE9NUmFuZ2UubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1MUNEMUM2QzFCMzhDRTQzMDAxNDJDQTUgLyogTW9kYWxBbGVydHMubW0gaW4g
U291cmNlcyAqLywKKwkJCQkwRkZDNDVBNjFCNzNFQkVCMDA4NUJENjIgLyogTG9jay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3Q0NFN0YwRTFBNDExQUU2MDA0NDdDNEMgLyogUmVzaXplUmV2ZXJz
ZVBhZ2luYXRlZFdlYlZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEYxQTQxMUFF
NjAwNDQ3QzRDIC8qIFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0NDRTdGMTAxQTQxMUFFNjAwNDQ3QzRDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRG
aXJlRWFybHkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9Mb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9Mb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgTG9ja1R5cGU+Cit2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVkIG51bVRo
cmVhZEdyb3VwcywgdW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNpZ25lZCB3b3JrUGVy
Q3JpdGljYWxTZWN0aW9uLCB1bnNpZ25lZCBudW1JdGVyYXRpb25zKQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxMb2NrVHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8TG9ja1R5cGVbXT4o
bnVtVGhyZWFkR3JvdXBzKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8ZG91YmxlW10+IHdvcmRzID0g
c3RkOjptYWtlX3VuaXF1ZTxkb3VibGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxU
aHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEdyb3VwSW5kZXggPSBudW1UaHJlYWRHcm91cHM7
IHRocmVhZEdyb3VwSW5kZXgtLTspIHsKKyAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0g
PSAwOworCisgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzUGVy
R3JvdXA7IHRocmVhZEluZGV4LS07KSB7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3Vw
SW5kZXggKiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQo
CisgICAgICAgICAgICAgICAgIkJlbmNobWFyayB0aHJlYWQiLAorICAgICAgICAgICAgICAgIFt0
aHJlYWRHcm91cEluZGV4LCAmbG9ja3MsICZ3b3JkcywgbnVtSXRlcmF0aW9ucywgd29ya1BlckNy
aXRpY2FsU2VjdGlvbl0gKCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1JdGVyYXRpb25zOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2Nrc1t0
aHJlYWRHcm91cEluZGV4XS5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uOyBqLS07KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdKys7CisgICAgICAgICAgICAgICAg
ICAgICAgICBsb2Nrc1t0aHJlYWRHcm91cEluZGV4XS51bmxvY2soKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJH
cm91cDsgdGhyZWFkSW5kZXgtLTspCisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRo
cmVhZHNbdGhyZWFkSW5kZXhdKTsKKworICAgIGRvdWJsZSBleHBlY3RlZCA9IDA7CisgICAgZm9y
ICh1aW50NjRfdCBpID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bUl0ZXJhdGlvbnMpICogd29y
a1BlckNyaXRpY2FsU2VjdGlvbiAqIG51bVRocmVhZHNQZXJHcm91cDsgaS0tOykKKyAgICAgICAg
ZXhwZWN0ZWQrKzsKKworICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRleCA9IG51bVRo
cmVhZEdyb3VwczsgdGhyZWFkR3JvdXBJbmRleC0tOykKKyAgICAgICAgRVhQRUNUX0VRKGV4cGVj
dGVkLCB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSk7Cit9CisKK1RFU1QoV1RGX0xvY2ssIFVuY29u
dGVudGVkU2hvcnRTZWN0aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEsIDEsIDEw
MDAwMDAwKTsKK30KKworVEVTVChXVEZfTG9jaywgVW5jb250ZW50ZWRMb25nU2VjdGlvbikKK3sK
KyAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxLCAxMDAwMCwgMTAwMCk7Cit9CisKK1RFU1QoV1RG
X0xvY2ssIENvbnRlbnRlZFNob3J0U2VjdGlvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigx
LCAxMCwgMSwgMTAwMDAwMDApOworfQorCitURVNUKFdURl9Mb2NrLCBDb250ZW50ZWRMb25nU2Vj
dGlvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKK30K
KworVEVTVChXVEZfTG9jaywgTWFueUNvbnRlbnRlZFNob3J0U2VjdGlvbnMpCit7CisgICAgcnVu
TG9ja1Rlc3Q8TG9jaz4oMTAsIDEwLCAxLCA1MDAwMDApOworfQorCitURVNUKFdURl9Mb2NrLCBN
YW55Q29udGVudGVkTG9uZ1NlY3Rpb25zKQoreworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAx
MCwgMTAwMDAsIDIwMDApOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="283586"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258522</attachid>
            <date>2015-08-07 13:10:45 -0700</date>
            <delta_ts>2015-08-07 13:10:45 -0700</delta_ts>
            <desc>patch for relanding</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79333</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MTQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDE1LTA4LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TGlnaHR3ZWlnaHQgbG9ja3Mgc2hvdWxkIGJlIGFkYXB0aXZlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1NDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBHZW9mZnJleSBHYXJlbi4KKworICAgICAgICAqIGRmZy9ERkdDb21tb24uY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OnN0YXJ0Q3Jhc2hpbmcpOgorICAgICAgICAqIGhlYXAvQ29waWVkQmxvY2su
aDoKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OndvcmtMaXN0TG9jayk6CisgICAgICAgICog
aGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OnNo
b3VsZFJlcG9ydExpdmVCeXRlcyk6CisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpyZXBvcnRM
aXZlQnl0ZXMpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlND
OjpDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayk6CisgICAgICAgICogaGVhcC9Db3BpZWRT
cGFjZS5oOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6Q29waWVkR2VuZXJhdGlvbjo6Q29w
aWVkR2VuZXJhdGlvbik6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnJlY3ljbGVFdmFjdWF0ZWRCbG9jayk6CisgICAgICAg
ICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwOgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNo
YXJlZERhdGE6OmRpZFN0YXJ0Q29weWluZyk6CisgICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJl
ZERhdGEuaDoKKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWREYXRhOjpnZXROZXh0QmxvY2tz
VG9Db3B5KToKKyAgICAgICAgKiBoZWFwL0xpc3RhYmxlSGFuZGxlci5oOgorICAgICAgICAoSlND
OjpMaXN0YWJsZUhhbmRsZXI6Okxpc3Q6OmFkZFRocmVhZFNhZmUpOgorICAgICAgICAoSlNDOjpM
aXN0YWJsZUhhbmRsZXI6Okxpc3Q6OmFkZE5vdFRocmVhZFNhZmUpOgorICAgICAgICAqIGhlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6OnRy
eUNvcHlPdGhlclRocmVhZFN0YWNrcyk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvcHlMYXRlcik6CisgICAgICAgICog
cGFyc2VyL1NvdXJjZVByb3ZpZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXI6
On5Tb3VyY2VQcm92aWRlcik6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyOjpnZXRJRCk6
CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHA6CisgICAgICAgIChKU0M6
OlByb2ZpbGVyOjpEYXRhYmFzZTo6YWRkRGF0YWJhc2VUb0F0RXhpdCk6CisgICAgICAgIChKU0M6
OlByb2ZpbGVyOjpEYXRhYmFzZTo6cmVtb3ZlRGF0YWJhc2VGcm9tQXRFeGl0KToKKyAgICAgICAg
KEpTQzo6UHJvZmlsZXI6OkRhdGFiYXNlOjpyZW1vdmVGaXJzdEF0RXhpdERhdGFiYXNlKToKKyAg
ICAgICAgKiBydW50aW1lL1R5cGVQcm9maWxlckxvZy5oOgorCiAyMDE1LTA4LTA3ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgc29tZSB2YXJpYWJsZXMg
aW4gdGhlIEpTQyB3YXRjaGRvZyBpbXBsZW1lbnRhdGlvbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDE4ODE0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXN0YXRpYyBTdGF0aWNT
cGluTG9jayBjcmFzaExvY2s7CitzdGF0aWMgU3RhdGljTG9jayBjcmFzaExvY2s7CiAKIHZvaWQg
c3RhcnRDcmFzaGluZygpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3Bp
ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZEJsb2NrLmgJKHJldmlzaW9uIDE4ODE0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRl
ICJPcHRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvRG91
Ymx5TGlua2VkTGlzdC5oPgotI2luY2x1ZGUgPHd0Zi9TcGluTG9jay5oPgorI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01NCw4ICs1NCw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRpZFByb21vdGUoKTsKIAogICAgIHVuc2lnbmVkIGxpdmVCeXRlcygpOwotICAg
IGJvb2wgc2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKFNwaW5Mb2NrSG9sZGVyJiwgSlNDZWxsKiBvd25l
cik7Ci0gICAgdm9pZCByZXBvcnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBKU0NlbGwqLCBD
b3B5VG9rZW4sIHVuc2lnbmVkKTsKKyAgICBib29sIHNob3VsZFJlcG9ydExpdmVCeXRlcyhMb2Nr
SG9sZGVyJiwgSlNDZWxsKiBvd25lcik7CisgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXMoTG9ja0hv
bGRlciYsIEpTQ2VsbCosIENvcHlUb2tlbiwgdW5zaWduZWQpOwogICAgIHZvaWQgcmVwb3J0TGl2
ZUJ5dGVzRHVyaW5nQ29weWluZyh1bnNpZ25lZCk7CiAgICAgdm9pZCBkaWRTdXJ2aXZlR0MoKTsK
ICAgICB2b2lkIGRpZEV2YWN1YXRlQnl0ZXModW5zaWduZWQpOwpAQCAtODUsNyArODUsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhc1dvcmtMaXN0KCk7CiAgICAgQ29weVdvcmtMaXN0JiB3b3Jr
TGlzdCgpOwotICAgIFNwaW5Mb2NrJiB3b3JrTGlzdExvY2soKSB7IHJldHVybiBtX3dvcmtMaXN0
TG9jazsgfQorICAgIExvY2smIHdvcmtMaXN0TG9jaygpIHsgcmV0dXJuIG1fd29ya0xpc3RMb2Nr
OyB9CiAKIHByaXZhdGU6CiAgICAgQ29waWVkQmxvY2soc2l6ZV90KTsKQEAgLTk4LDcgKzk4LDcg
QEAgcHJpdmF0ZToKIAogICAgIHNpemVfdCBtX2NhcGFjaXR5OwogCi0gICAgU3BpbkxvY2sgbV93
b3JrTGlzdExvY2s7CisgICAgTG9jayBtX3dvcmtMaXN0TG9jazsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q29weVdvcmtMaXN0PiBtX3dvcmtMaXN0OwogCiAgICAgc2l6ZV90IG1fcmVtYWluaW5nOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVz
LmgJKHJldmlzaW9uIDE4ODE0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogICAgIAotaW5saW5lIGJvb2wgQ29waWVkQmxvY2s6OnNob3VsZFJlcG9ydExp
dmVCeXRlcyhTcGluTG9ja0hvbGRlciYsIEpTQ2VsbCogb3duZXIpCitpbmxpbmUgYm9vbCBDb3Bp
ZWRCbG9jazo6c2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKExvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVy
KQogewogICAgIC8vIFdlIHdhbnQgdG8gYWRkIHRvIGxpdmUgYnl0ZXMgaWYgdGhlIG93bmVyIGlz
bid0IHBhcnQgb2YgdGhlIHJlbWVtYmVyZWQgc2V0IG9yCiAgICAgLy8gaWYgdGhpcyBibG9jayB3
YXMgYWxsb2NhdGVkIGR1cmluZyB0aGUgbGFzdCBjeWNsZS4gCkBAIC00Myw3ICs0Myw3IEBAIGlu
bGluZSBib29sIENvcGllZEJsb2NrOjpzaG91bGRSZXBvcnRMaXYKICAgICByZXR1cm4gIUhlYXA6
OmlzUmVtZW1iZXJlZChvd25lcikgfHwgIW1faXNPbGQ7CiB9CiAKLWlubGluZSB2b2lkIENvcGll
ZEJsb2NrOjpyZXBvcnRMaXZlQnl0ZXMoU3BpbkxvY2tIb2xkZXImLCBKU0NlbGwqIG93bmVyLCBD
b3B5VG9rZW4gdG9rZW4sIHVuc2lnbmVkIGJ5dGVzKQoraW5saW5lIHZvaWQgQ29waWVkQmxvY2s6
OnJlcG9ydExpdmVCeXRlcyhMb2NrSG9sZGVyJiwgSlNDZWxsKiBvd25lciwgQ29weVRva2VuIHRv
a2VuLCB1bnNpZ25lZCBieXRlcykKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAjaWZuZGVm
IE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNw
cAkocmV2aXNpb24gMTg4MTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVk
U3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBDb3BpZWRT
cGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogCiAgICAgewogICAgICAgICAvLyBBbHdheXMg
cHV0IHRoZSBibG9jayBpbnRvIHRoZSBvbGQgZ2VuIGJlY2F1c2UgaXQncyBiZWluZyBwcm9tb3Rl
ZCEKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKKyAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOwogICAgICAgICBtX29sZEdlbi50
b1NwYWNlLT5wdXNoKGJsb2NrKTsKICAgICAgICAgbV9ibG9ja1NldC5hZGQoYmxvY2spOwogICAg
ICAgICBtX29sZEdlbi5ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9j
aykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCShyZXZp
c2lvbiAxODgxNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw5IEBACiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRC
b29sZWFuLmg+CiAjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL09TQWxs
b2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VCbG9jay5oPgotI2luY2x1ZGUgPHd0Zi9TcGlu
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nUHJpbWl0aXZlcy5oPgogCkBAIC0xMTMsNyArMTEzLDcgQEAgcHJpdmF0ZToKIAogICAg
IEhhc2hTZXQ8Q29waWVkQmxvY2sqPiBtX2Jsb2NrU2V0OwogCi0gICAgU3BpbkxvY2sgbV90b1Nw
YWNlTG9jazsKKyAgICBMb2NrIG1fdG9TcGFjZUxvY2s7CiAKICAgICBzdHJ1Y3QgQ29waWVkR2Vu
ZXJhdGlvbiB7CiAgICAgICAgIENvcGllZEdlbmVyYXRpb24oKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmgJKHJldmlzaW9uIDE4ODE0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpy
ZWN5Y2xlRXZhY3VhdGUKICAgICBBU1NFUlQoYmxvY2stPmNhbkJlUmVjeWNsZWQoKSk7CiAgICAg
QVNTRVJUKCFibG9jay0+bV9pc1Bpbm5lZCk7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRl
ciBsb2NrZXIoJm1fdG9TcGFjZUxvY2spOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90
b1NwYWNlTG9jayk7CiAgICAgICAgIG1fYmxvY2tTZXQucmVtb3ZlKGJsb2NrKTsKICAgICAgICAg
aWYgKGNvbGxlY3Rpb25UeXBlID09IEVkZW5Db2xsZWN0aW9uKQogICAgICAgICAgICAgbV9uZXdH
ZW4uZnJvbVNwYWNlLT5yZW1vdmUoYmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCShyZXZpc2lvbiAxODgxNDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRp
ZEZpbmlzaE1hcmtpbgogdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0Q29weWluZygp
CiB7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fY29weUxvY2spOwor
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CiAgICAgICAgIGlmIChtX3Zt
LT5oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBFZGVuQ29sbGVjdGlvbikgewogICAgICAg
ICAgICAgLy8gUmVzZXQgdGhlIHZlY3RvciB0byBiZSBlbXB0eSwgYnV0IGRvbid0IHRocm93IGF3
YXkgdGhlIGJhY2tpbmcgc3RvcmUuCiAgICAgICAgICAgICBtX2Jsb2Nrc1RvQ29weS5zaHJpbmso
MCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJl
ZERhdGEuaAkocmV2aXNpb24gMTg4MTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NUaHJlYWRTaGFyZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNp
bmNsdWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCiAjaW5jbHVkZSA8Y29uZGl0aW9uX3Zh
cmlhYmxlPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2Nr
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6bXV0ZXgg
bV9vcGFxdWVSb290c011dGV4OwogICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3BhcXVlUm9vdHM7CiAK
LSAgICBTcGluTG9jayBtX2NvcHlMb2NrOworICAgIExvY2sgbV9jb3B5TG9jazsKICAgICBWZWN0
b3I8Q29waWVkQmxvY2sqPiBtX2Jsb2Nrc1RvQ29weTsKICAgICBzaXplX3QgbV9jb3B5SW5kZXg7
CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKQEAg
LTExNSw3ICsxMTUsNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgdm9pZCBHQ1RocmVhZFNoYXJlZERh
dGE6OmdldE5leHRCbG9ja3NUb0NvcHkoc2l6ZV90JiBzdGFydCwgc2l6ZV90JiBlbmQpCiB7Ci0g
ICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2NvcHlMb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxv
Y2tlcigmbV9jb3B5TG9jayk7CiAgICAgc3RhcnQgPSBtX2NvcHlJbmRleDsKICAgICBlbmQgPSBz
dGQ6Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXplKCksIG1fY29weUluZGV4ICsgc19ibG9ja0ZyYWdt
ZW50TGVuZ3RoKTsKICAgICBtX2NvcHlJbmRleCA9IGVuZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0xpc3RhYmxlSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xpc3RhYmxlSGFuZGxlci5oCShyZXZpc2lvbiAxODgxNDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MaXN0YWJsZUhhbmRsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjEsOSArMjEsOSBAQAogI2RlZmluZSBMaXN0YWJsZUhhbmRsZXJfaAogCiAjaW5jbHVk
ZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9ja2Vy
Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2Nr
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC02NSw3ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICB2b2lkIGFk
ZFRocmVhZFNhZmUoVCogaGFuZGxlcikKICAgICAgICAgewotICAgICAgICAgICAgU3BpbkxvY2tI
b2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1f
bG9jayk7CiAgICAgICAgICAgICBhZGROb3RUaHJlYWRTYWZlKGhhbmRsZXIpOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2Zp
cnN0ID0gaGFuZGxlcjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BpbkxvY2sgbV9s
b2NrOworICAgICAgICBMb2NrIG1fbG9jazsKICAgICAgICAgVCogbV9maXJzdDsKICAgICB9Owog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuY3BwCShyZXZpc2lvbiAxODgxNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjgsOCArNTY4
LDggQEAgYm9vbCBNYWNoaW5lVGhyZWFkczo6dHJ5Q29weU90aGVyVGhyZWFkUwogewogICAgIC8v
IFByZXZlbnQgdHdvIFZNcyBmcm9tIHN1c3BlbmRpbmcgZWFjaCBvdGhlcidzIHRocmVhZHMgYXQg
dGhlIHNhbWUgdGltZSwKICAgICAvLyB3aGljaCBjYW4gY2F1c2UgZGVhZGxvY2s6IDxyZGFyOi8v
cHJvYmxlbS8yMDMwMDg0Mj4uCi0gICAgc3RhdGljIFN0YXRpY1NwaW5Mb2NrIG11dGV4OwotICAg
IHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNTcGluTG9jaz4gbG9jayhtdXRleCk7CisgICAgc3RhdGlj
IFN0YXRpY0xvY2sgbXV0ZXg7CisgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2so
bXV0ZXgpOwogCiAgICAgKnNpemUgPSAwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTg4MTQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1MCw3ICsyNTAsNyBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVy
KEpTQ2VsCiAKICAgICBBU1NFUlQoaGVhcCgpLT5tX3N0b3JhZ2VTcGFjZS5jb250YWlucyhibG9j
aykpOwogCi0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZibG9jay0+d29ya0xpc3RMb2NrKCkp
OworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZibG9jay0+d29ya0xpc3RMb2NrKCkpOwogICAgIGlm
IChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbiB8fCBibG9j
ay0+c2hvdWxkUmVwb3J0TGl2ZUJ5dGVzKGxvY2tlciwgb3duZXIpKSB7CiAgICAgICAgIG1fYnl0
ZXNDb3BpZWQgKz0gYnl0ZXM7CiAgICAgICAgIGJsb2NrLT5yZXBvcnRMaXZlQnl0ZXMobG9ja2Vy
LCBvd25lciwgdG9rZW4sIGJ5dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU291cmNlUHJvdmlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuY3BwCShyZXZpc2lvbiAxODgxNDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCiAKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtNDQsMTEgKzQ0LDExIEBAIFNvdXJjZVByb3ZpZGVyOjp+U291cmNlUHJvdmlkZXIoKQog
ewogfQogCi1zdGF0aWMgU3RhdGljU3BpbkxvY2sgcHJvdmlkZXJJZExvY2s7CitzdGF0aWMgU3Rh
dGljTG9jayBwcm92aWRlcklkTG9jazsKIAogdm9pZCBTb3VyY2VQcm92aWRlcjo6Z2V0SUQoKQog
ewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2soJnByb3ZpZGVySWRMb2NrKTsKKyAgICBMb2NrSG9s
ZGVyIGxvY2soJnByb3ZpZGVySWRMb2NrKTsKICAgICBpZiAoIW1faWQpIHsKICAgICAgICAgc3Rh
dGljIGludHB0cl90IG5leHRQcm92aWRlcklEID0gMDsKICAgICAgICAgbV9pZCA9ICsrbmV4dFBy
b3ZpZGVySUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJE
YXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVyRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAxODgxNDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiAKIHN0
YXRpYyBzdGQ6OmF0b21pYzxpbnQ+IGRhdGFiYXNlQ291bnRlcjsKIAotc3RhdGljIFN0YXRpY1Nw
aW5Mb2NrIHJlZ2lzdHJhdGlvbkxvY2s7CitzdGF0aWMgU3RhdGljTG9jayByZWdpc3RyYXRpb25M
b2NrOwogc3RhdGljIHN0ZDo6YXRvbWljPGludD4gZGlkUmVnaXN0ZXJBdEV4aXQ7CiBzdGF0aWMg
RGF0YWJhc2UqIGZpcnN0RGF0YWJhc2U7CiAKQEAgLTEzOCwxNCArMTM4LDE0IEBAIHZvaWQgRGF0
YWJhc2U6OmFkZERhdGFiYXNlVG9BdEV4aXQoKQogICAgIGlmICgrK2RpZFJlZ2lzdGVyQXRFeGl0
ID09IDEpCiAgICAgICAgIGF0ZXhpdChhdEV4aXRDYWxsYmFjayk7CiAgICAgCi0gICAgU3Bpbkxv
Y2tIb2xkZXIgaG9sZGVyKHJlZ2lzdHJhdGlvbkxvY2spOworICAgIExvY2tIb2xkZXIgaG9sZGVy
KHJlZ2lzdHJhdGlvbkxvY2spOwogICAgIG1fbmV4dFJlZ2lzdGVyZWREYXRhYmFzZSA9IGZpcnN0
RGF0YWJhc2U7CiAgICAgZmlyc3REYXRhYmFzZSA9IHRoaXM7CiB9CiAKIHZvaWQgRGF0YWJhc2U6
OnJlbW92ZURhdGFiYXNlRnJvbUF0RXhpdCgpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVy
KHJlZ2lzdHJhdGlvbkxvY2spOworICAgIExvY2tIb2xkZXIgaG9sZGVyKHJlZ2lzdHJhdGlvbkxv
Y2spOwogICAgIGZvciAoRGF0YWJhc2UqKiBjdXJyZW50ID0gJmZpcnN0RGF0YWJhc2U7ICpjdXJy
ZW50OyBjdXJyZW50ID0gJigqY3VycmVudCktPm1fbmV4dFJlZ2lzdGVyZWREYXRhYmFzZSkgewog
ICAgICAgICBpZiAoKmN1cnJlbnQgIT0gdGhpcykKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MTYzLDcgKzE2Myw3IEBAIHZvaWQgRGF0YWJhc2U6OnBlcmZvcm1BdEV4aXRTYXZlKCkgY29uc3QK
IAogRGF0YWJhc2UqIERhdGFiYXNlOjpyZW1vdmVGaXJzdEF0RXhpdERhdGFiYXNlKCkKIHsKLSAg
ICBTcGluTG9ja0hvbGRlciBob2xkZXIocmVnaXN0cmF0aW9uTG9jayk7CisgICAgTG9ja0hvbGRl
ciBob2xkZXIocmVnaXN0cmF0aW9uTG9jayk7CiAgICAgRGF0YWJhc2UqIHJlc3VsdCA9IGZpcnN0
RGF0YWJhc2U7CiAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICBmaXJzdERhdGFiYXNlID0gcmVz
dWx0LT5tX25leHRSZWdpc3RlcmVkRGF0YWJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkocmV2aXNpb24gMTg4MTQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCi0jaW5jbHVkZSA8d3Rm
L0J5dGVTcGluTG9jay5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL1dURi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4
ODE0OCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTA2IEBACisyMDE1LTA4LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgTGlnaHR3ZWlnaHQgbG9ja3Mgc2hvdWxkIGJlIGFkYXB0aXZlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1NDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKworICAgICAgICBBIGNvbW1vbiBpZGlvbSBpbiBXZWJL
aXQgaXMgdG8gdXNlIHNwaW5sb2Nrcy4gV2UgdXNlIHRoZW0gYmVjYXVzZSB0aGUgbG9jayBhY3F1
aXNpdGlvbgorICAgICAgICBvdmVyaGVhZCBpcyBsb3dlciB0aGFuIHN5c3RlbSBsb2NrcyBhbmQg
YmVjYXVzZSB0aGV5IHRha2UgZHJhbWF0aWNhbGx5IGxlc3Mgc3BhY2UgdGhhbiBzeXN0ZW0KKyAg
ICAgICAgbG9ja3MuIFRoZSBzcGVlZCBhbmQgc3BhY2UgYWR2YW50YWdlcyBvZiBzcGlubG9ja3Mg
Y2FuIGJlIGFzdG9uaXNoaW5nOiBhbiB1bmNvbnRlbmRlZCBzcGlubG9jaworICAgICAgICBhY3F1
aXJlIGlzIHVwIHRvIDEweCBmYXN0ZXIgYW5kIHVuZGVyIG1pY3JvY29udGVudGlvbiAtIHNob3J0
IGNyaXRpY2FsIHNlY3Rpb24gd2l0aCB0d28gb3IKKyAgICAgICAgbW9yZSB0aHJlYWRzIHRha2lu
ZyB0dXJucyAtIHNwaW5sb2NrcyBhcmUgdXAgdG8gMTAweCBmYXN0ZXIuIFNwaW5sb2NrcyB0YWtl
IG9ubHkgMSBieXRlIG9yIDQKKyAgICAgICAgYnl0ZXMgZGVwZW5kaW5nIG9uIHRoZSBmbGF2b3Is
IHdoaWxlIHN5c3RlbSBsb2NrcyB0YWtlIDY0IGJ5dGVzIG9yIG1vcmUuIENsZWFybHksIFdlYktp
dAorICAgICAgICBzaG91bGQgY29udGludWUgdG8gYXZvaWQgc3lzdGVtIGxvY2tzIC0gdGhleSBh
cmUganVzdCBmYXIgdG9vIHNsb3cgYW5kIGZhciB0b28gYmlnLgorCisgICAgICAgIEJ1dCB0aGVy
ZSBpcyBhIHByb2JsZW0gd2l0aCB0aGlzIGlkaW9tLiBTeXN0ZW0gbG9jayBpbXBsZW1lbnRhdGlv
bnMgd2lsbCBzbGVlcCBhIHRocmVhZCB3aGVuCisgICAgICAgIGl0IGF0dGVtcHRzIHRvIGFjcXVp
cmUgYSBsb2NrIHRoYXQgaXMgaGVsZCwgd2hpbGUgc3BpbmxvY2tzIHdpbGwgY2F1c2UgdGhlIHRo
cmVhZCB0byBidXJuIENQVS4KKyAgICAgICAgSW4gV2ViS2l0IHNwaW5sb2NrcywgdGhlIHRocmVh
ZCB3aWxsIHJlcGVhdGVkbHkgY2FsbCBzY2hlZF95aWVsZCgpLiBUaGlzIGlzIGF3ZXNvbWUgZm9y
CisgICAgICAgIG1pY3JvY29udGVudGlvbiwgYnV0IGF3ZnVsIHdoZW4gdGhlIGxvY2sgd2lsbCBu
b3QgYmUgcmVsZWFzZWQgZm9yIGEgd2hpbGUuIEluIGZhY3QsIHdoZW4KKyAgICAgICAgY3JpdGlj
YWwgc2VjdGlvbnMgdGFrZSB0ZW5zIG9mIG1pY3Jvc2Vjb25kcyBvciBtb3JlLCB0aGUgQ1BVIHRp
bWUgY29zdCBvZiBvdXIgc3BpbmxvY2tzIGlzCisgICAgICAgIGFsbW9zdCAxMDB4IG1vcmUgdGhh
biB0aGUgQ1BVIHRpbWUgY29zdCBvZiBhIHN5c3RlbSBsb2NrLiBUaGlzIGNhc2UgZG9lc24ndCBh
cmlzZSB0b28KKyAgICAgICAgZnJlcXVlbnRseSBpbiBvdXIgY3VycmVudCB1c2VzIG9mIHNwaW5s
b2NrcywgYnV0IHRoYXQncyBwcm9iYWJseSBiZWNhdXNlIHJpZ2h0IG5vdyB0aGVyZSBhcmUKKyAg
ICAgICAgcGxhY2VzIHdoZXJlIHdlIG1ha2UgYSBjb25zY2lvdXMgZGVjaXNpb24gdG8gdXNlIHN5
c3RlbSBsb2NrcyAtIGV2ZW4gdGhvdWdoIHRoZXkgdXNlIG1vcmUKKyAgICAgICAgbWVtb3J5IGFu
ZCBhcmUgc2xvd2VyIC0gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHdhc3RlIENQVSBjeWNsZXMg
d2hlbiBhIHRocmVhZCBoYXMgdG8gd2FpdCBhCisgICAgICAgIHdoaWxlIHRvIGFjcXVpcmUgdGhl
IGxvY2suCisKKyAgICAgICAgVGhlIHNvbHV0aW9uIGlzIHRvIGp1c3QgaW1wbGVtZW50IGEgbW9k
ZXJuIGFkYXB0aXZlIG11dGV4IGluIFdURi4gTHVja2lseSwgdGhpcyBpc24ndCBhIG5ldworICAg
ICAgICBjb25jZXB0LiBUaGlzIHBhdGNoIGltcGxlbWVudHMgYSBtdXRleCB0aGF0IGlzIHJlbWlu
aXNjZW50IG9mIHRoZSBraW5kcyBvZiBsb3ctb3ZlcmhlYWQgbG9ja3MKKyAgICAgICAgdGhhdCBK
Vk1zIHVzZS4gVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBoZXJlIGlzIGluc3BpcmVkIGJ5IHNv
bWUgb2YgdGhlIGlkZWFzIGZyb20gWzFdLiBUaGUKKyAgICAgICAgaWRlYSBpcyBzaW1wbGU6IHRo
ZSBmYXN0IHBhdGggaXMgYW4gaW5saW5lZCBDQVMgdG8gaW1tZWRpYXRlbHkgYWNxdWlyZSBhIGxv
Y2sgdGhhdCBpc24ndCBoZWxkLAorICAgICAgICB0aGUgc2xvdyBwYXRoIHRyaWVzIHNvbWUgbnVt
YmVyIG9mIHNwaW5zIHRvIGFjcXVpcmUgdGhlIGxvY2ssIGFuZCBpZiB0aGF0IGZhaWxzLCB0aGUg
dGhyZWFkIGlzCisgICAgICAgIHB1dCBvbiBhIHF1ZXVlIGFuZCBwdXQgdG8gc2xlZXAuIFRoZSBx
dWV1ZSBpcyBtYWRlIHVwIG9mIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHRocmVhZCBub2RlcyBhbmQK
KyAgICAgICAgdGhlIGxvY2sgaXRzZWxmIGlzIGEgdGFnZ2VkIHBvaW50ZXI6IGVpdGhlciBpdCBp
cyBqdXN0IGJpdHMgdGVsbGluZyB1cyB0aGUgY29tcGxldGUgbG9jayBzdGF0ZQorICAgICAgICAo
bm90IGhlbGQgb3IgaGVsZCkgb3IgaXQgaXMgYSBwb2ludGVyIHRvIHRoZSBoZWFkIG9mIGEgcXVl
dWUgb2YgdGhyZWFkcyB3YWl0aW5nIHRvIGFjcXVpcmUgdGhlCisgICAgICAgIGxvY2suIFRoaXMg
YXBwcm9hY2ggZ2l2ZXMgV1RGOjpMb2NrIHRocmVlIGRpZmZlcmVudCBsZXZlbHMgb2YgYWRhcHRh
dGlvbjogYW4gaW5saW5lZCBmYXN0IHBhdGgKKyAgICAgICAgaWYgdGhlIGxvY2sgaXMgbm90IGNv
bnRlbmRlZCwgYSBzaG9ydCBidXJzdCBvZiBzcGlubmluZyBmb3IgbWljcm9jb250ZW50aW9uLCBh
bmQgYSBmdWxsLWJsb3duCisgICAgICAgIHF1ZXVlIGZvciBjcml0aWNhbCBzZWN0aW9ucyB0aGF0
IGFyZSBoZWxkIGZvciBhIGxvbmcgdGltZS4KKworICAgICAgICBPbiBhIGxvY2tpbmcgbWljcm9i
ZW5jaG1hcmssIHRoaXMgbmV3IExvY2sgZXhoaWJpdHMgdGhlIGZvbGxvd2luZyBwZXJmb3JtYW5j
ZQorICAgICAgICBjaGFyYWN0ZXJpc3RpY3M6CisKKyAgICAgICAgLSBMb2NrK3VubG9jayBvbiBh
biB1bmNvbnRlbmRlZCBuby1vcCBjcml0aWNhbCBzZWN0aW9uOiAyeCBzbG93ZXIgdGhhbiBTcGlu
TG9jayBhbmQgM3ggZmFzdGVyCisgICAgICAgICAgdGhhbiBhIHN5c3RlbSBtdXRleC4KKworICAg
ICAgICAtIExvY2srdW5sb2NrIG9uIGEgY29udGVuZGVkIG5vLW9wIGNyaXRpY2FsIHNlY3Rpb246
IDJ4IHNsb3dlciB0aGFuIFNwaW5Mb2NrIGFuZCAxMDB4IGZhc3RlcgorICAgICAgICAgIHRoYW4g
YSBzeXN0ZW0gbXV0ZXguCisKKyAgICAgICAgLSBDUFUgdGltZSBzcGVudCBpbiBsb2NrKCkgb24g
YSBsb2NrIGhlbGQgZm9yIGEgd2hpbGU6IHNhbWUgYXMgc3lzdGVtIG11dGV4LCA5MHggbGVzcyB0
aGFuIGEKKyAgICAgICAgICBTcGluTG9jay4KKworICAgICAgICAtIE1lbW9yeSB1c2FnZTogc2l6
ZW9mKHZvaWQqKSwgc28gb24gNjQtYml0IGl0J3MgOHggbGVzcyB0aGFuIGEgc3lzdGVtIG11dGV4
IGJ1dCAyeCB3b3JzZSB0aGFuCisgICAgICAgICAgYSBTcGluTG9jay4KKworICAgICAgICBUaGlz
IHBhdGNoIHJlcGxhY2VzIGFsbCB1c2VzIG9mIFNwaW5Mb2NrIHdpdGggTG9jaywgc2luY2Ugb3Vy
IGNyaXRpY2FsIHNlY3Rpb25zIGFyZSBub3QKKyAgICAgICAgbm8tb3BzIHNvIGlmIHlvdSBkbyBi
YXNpY2FsbHkgYW55dGhpbmcgaW4geW91ciBjcml0aWNhbCBzZWN0aW9uLCB0aGUgTG9jayBvdmVy
aGVhZCB3aWxsIGJlCisgICAgICAgIGludmlzaWJsZS4gQWxzbywgaW4gYWxsIHBsYWNlcyB3aGVy
ZSB3ZSB1c2VkIFNwaW5Mb2NrLCB3ZSBjb3VsZCB0b2xlcmF0ZSA4IGJ5dGVzIG9mIG92ZXJoZWFk
CisgICAgICAgIGluc3RlYWQgb2YgNC4gUGVyZm9ybWFuY2UgYmVuY2htYXJraW5nIHVzaW5nIEpT
QyBtYWNyb2JlbmNobWFya3Mgc2hvd3Mgbm8gZGlmZmVyZW5jZSwgd2hpY2ggaXMKKyAgICAgICAg
YXMgaXQgc2hvdWxkIGJlOiB0aGUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZSBpcyB0byByZWR1Y2Ug
Q1BVIHRpbWUgd2FzdGVkLCBub3Qgd2FsbGNsb2NrIHRpbWUuCisgICAgICAgIFRoaXMgcGF0Y2gg
ZG9lc24ndCByZXBsYWNlIGFueSB1c2VzIG9mIEJ5dGVTcGluTG9jaywgc2luY2Ugd2UgZXhwZWN0
IHRoYXQgdGhlIHNwYWNlIGJlbmVmaXRzCisgICAgICAgIG9mIGhhdmluZyBhIGxvY2sgdGhhdCBq
dXN0IHVzZXMgYSBieXRlIGFyZSBzdGlsbCBiZXR0ZXIgdGhhbiB0aGUgQ1BVIHdhc3RhZ2UgYmVu
ZWZpdHMgb2YKKyAgICAgICAgTG9jay4gQnV0LCB0aGlzIHdvcmsgd2lsbCBlbmFibGUgc29tZSBm
dXR1cmUgd29yayB0byBjcmVhdGUgbG9ja3MgdGhhdCB3aWxsIGZpdCBpbiBqdXN0IDEuNgorICAg
ICAgICBiaXRzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NjY1
LgorICAgICAgICAKKyAgICAgICAgUm9sbGluZyB0aGlzIGJhY2sgaW4gYWZ0ZXIgZml4aW5nIExv
Y2s6OnVubG9ja1Nsb3coKSBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgYSB0cnVseSB3ZWFr
CisgICAgICAgIENBUy4gU2luY2UgdGhlIExvY2s6OnVubG9jaygpIGZhc3QgcGF0aCBjYW4gZ28g
dG8gc2xvdyBwYXRoIHNwdXJpb3VzbHksIGl0IG1heSBnbyB0aGVyZSBldmVuIGlmCisgICAgICAg
IHRoZXJlIGFyZW4ndCBhbnkgdGhyZWFkcyBvbiB0aGUgTG9jaydzIHF1ZXVlLiBTbywgdW5sb2Nr
U2xvdygpIG11c3QgYmUgYWJsZSB0byBkZWFsIHdpdGggdGhlCisgICAgICAgIHBvc3NpYmlsaXR5
IG9mIGEgbnVsbCBxdWV1ZSBoZWFkLgorCisgICAgICAgIFsxXSBodHRwOi8vd3d3LmZpbHBpemxv
LmNvbS9wYXBlcnMvcGl6bG8tcHBwajIwMTEtZmFibGUucGRmCisKKyAgICAgICAgKiBXVEYudmN4
cHJvai9XVEYudmN4cHJvajoKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBiZW5jaG1hcmtzOiBBZGRlZC4KKyAgICAgICAgKiBiZW5jaG1hcmtzL0xv
Y2tTcGVlZFRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHd0Zi9B
dG9taWNzLmg6CisgICAgICAgIChXVEY6OkF0b21pYzo6Y29tcGFyZUV4Y2hhbmdlV2Vhayk6Cisg
ICAgICAgIChXVEY6OkF0b21pYzo6Y29tcGFyZUV4Y2hhbmdlU3Ryb25nKToKKyAgICAgICAgKiB3
dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0xvY2suY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6TG9ja0Jhc2U6OmxvY2tTbG93KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVu
bG9ja1Nsb3cpOgorICAgICAgICAqIHd0Zi9Mb2NrLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpM
b2NrQmFzZTo6bG9jayk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1bmxvY2spOgorICAgICAg
ICAoV1RGOjpMb2NrQmFzZTo6aXNIZWxkKToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OmlzTG9j
a2VkKToKKyAgICAgICAgKFdURjo6TG9jazo6TG9jayk6CisgICAgICAgICogd3RmL01ldGFBbGxv
Y2F0b3IuY3BwOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6TWV0
YUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpjdXJy
ZW50U3RhdGlzdGljcyk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJl
ZVNwYWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXpl
KToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAqIHd0Zi9TcGluTG9j
ay5oOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6CisgICAgICAgICogd3Rm
L1RocmVhZGluZ1dpbi5jcHA6CisgICAgICAgICogd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcDoK
KyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdURjo6
QXRvbWljU3RyaW5nVGFibGVMb2NrZXI6OkF0b21pY1N0cmluZ1RhYmxlTG9ja2VyKToKKwogMjAx
NS0wOC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGwgb3V0IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE4Nzk3Mi4K
SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24gMTg4MTQ0KQorKysg
U291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMSw0
ICsxLDQgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3ht
bCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgRGVmYXVsdFRhcmdl
dHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjEyLjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNy
b3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVsPSJQ
cm9qZWN0Q29uZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRl
PSJEZWJ1Z1N1ZmZpeHxXaW4zMiI+CkBAIC0xMDYsNiArMTA2LDcgQEAKICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHd0ZlxnbGliXEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEdyZWdvcmlhbkRhdGVUaW1lLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxIYXNoVGFibGUuY3BwIiAvPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXExvY2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cd3RmXE1haW5UaHJlYWQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cd3RmXE1ENS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcTWVkaWFU
aW1lLmNwcCIgLz4KQEAgLTIyMyw2ICsyMjQsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cd3RmXEl0ZXJhdG9yQWRhcHRvcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHd0ZlxJdGVyYXRvclJhbmdlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZc
TGlzdEhhc2hTZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxMb2NrLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTG9ja2VyLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTWFpblRocmVhZC5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cd3RmXE1hbGxvY1B0ci5oIiAvPgpJbmRleDogU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODgxNDQpCisrKyBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4
IEBACiAJCTBGRDgxQUM1MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDNDE1NEZCMjJF
MDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KCk7IH07IH07CiAJCTBGRERCRkE3MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVh
bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRE
QkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkw
RkREQkZBODE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkE2MTY2NkRGQTMwMEM1
NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovOyB9OworCQkwRkUxNjQ2QTFCNkZGQzk2MDA0
MDBFN0MgLyogTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi87IH07CisJCTBG
RTE2NDZCMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUxNjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5o
ICovOyB9OwogCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjUxQjIyRDRE
ODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLzsgfTsKIAkJMTQwMjJGNDExOEY1QzNGQzAwN0ZG
MEVCIC8qIGxpYmJtYWxsb2MuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0MDIyRjQwMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9jLmEgKi87
IH07CiAJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0Y2MTFEMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmNwcCAqLzsgfTsKQEAgLTMyMSw2ICszMjMsOCBAQAogCQkwRkQ4MUFD
NDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJpdFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAv
KiBTdHJpbmdQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJpbmdQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkUxNjQ2
ODFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFMTY0
NjkxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDM0VFNDE3MUI4
MzQ3MDBGREFDOEQgLyogQnl0ZVNwaW5Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVTcGluTG9j
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNF
MTUgLyogVGlueVB0clNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55
UHRyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDIyRjQwMThGNUMzRkMw
MDdGRjBFQiAvKiBsaWJibWFsbG9jLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBwYXRoID0gbGliYm1hbGxvYy5hOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNzcwLDYgKzc3NCw4IEBACiAJCQkJN0NE
RDdGRjkxODZEMkE1NDAwNzQzM0NEIC8qIEl0ZXJhdG9yUmFuZ2UuaCAqLywKIAkJCQlBNzBEQTA4
MzE3OTlGMDREMDA1MjlBOUIgLyogTGlzdER1bXAuaCAqLywKIAkJCQlBOEE0NzJDMTE1MUE4MjVB
MDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLywKKwkJCQkwRkUxNjQ2ODFCNkZGQzk2MDA0MDBF
N0MgLyogTG9jay5jcHAgKi8sCisJCQkJMEZFMTY0NjkxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2su
aCAqLywKIAkJCQlBOEE0NzJDMzE1MUE4MjVBMDA0MTIzRkYgLyogTG9ja2VyLmggKi8sCiAJCQkJ
MTQ0N0FFQzgxOEZDRTU5NDAwQjNEN0ZGIC8qIG1ibWFsbG9jLmNwcCAqLywKIAkJCQlBOEE0NzJD
QTE1MUE4MjVCMDA0MTIzRkYgLyogTUQ1LmNwcCAqLywKQEAgLTEyMDYsNiArMTIxMiw3IEBACiAJ
CQkJQThBNDc0NkExNTFBODI1QjAwNDEyM0ZGIC8qIFVURjguaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3M0I5MTUxQTgyNUIwMDQxMjNGRiAvKiB1dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDc0N0QxNTFBODI1QjAwNDEyM0ZGIC8qIFZhbHVlQ2hlY2suaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRTE2NDZCMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQ3RTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQ3RjE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xMzM3LDYgKzEzNDQsNyBAQAogCQkJCUE4QTQ3MzlFMTUxQTgyNUIwMDQxMjNG
RiAvKiBEYXRhTG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0EwMTUxQTgyNUIwMDQx
MjNGRiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNBMjE1MUE4MjVC
MDA0MTIzRkYgLyogRGVjaW1hbE51bWJlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkUxNjQ2
QTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNB
RTE1MUE4MjVCMDA0MTIzRkYgLyogZGl5LWZwLmNjIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDcz
QjAxNTFBODI1QjAwNDEyM0ZGIC8qIGRvdWJsZS1jb252ZXJzaW9uLmNjIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDczQkExNTFBODI1QjAwNDEyM0ZGIC8qIGR0b2EuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tTcGVlZFRlc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgor
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5j
bHVkZSA8d3RmL1NwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZl
cy5oPgorCituYW1lc3BhY2UgeworCit1bnNpZ25lZCBudW1UaHJlYWRHcm91cHM7Cit1bnNpZ25l
ZCBudW1UaHJlYWRzUGVyR3JvdXA7Cit1bnNpZ25lZCB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uOwor
dW5zaWduZWQgbnVtTm9pc2VUaHJlYWRzOwordW5zaWduZWQgbnVtSXRlcmF0aW9uczsKKyAgICAK
K05PX1JFVFVSTiB2b2lkIHVzYWdlKCkKK3sKKyAgICBwcmludGYoIlVzYWdlOiBMb2NrU3BlZWRU
ZXN0IHNwaW5sb2NrfGxvY2t8bXV0ZXh8YWxsIDxudW0gdGhyZWFkIGdyb3Vwcz4gPG51bSB0aHJl
YWRzIHBlciBncm91cD4gPHdvcmsgcGVyIGNyaXRpY2FsIHNlY3Rpb24+IDxudW0gbm9pc2UgdGhy
ZWFkcz4gPG51bSBpdGVyYXRpb25zPlxuIik7CisgICAgZXhpdCgxKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgTG9ja1R5cGU+Cit2b2lkIHJ1bkJlbmNobWFyayhjb25zdCBjaGFyKiBuYW1lKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2NrVHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlx
dWU8TG9ja1R5cGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8ZG91
YmxlW10+IHdvcmRzID0gc3RkOjptYWtlX3VuaXF1ZTxkb3VibGVbXT4obnVtVGhyZWFkR3JvdXBz
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3Rk
OjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRo
cmVhZHNQZXJHcm91cCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZElkZW50aWZpZXJbXT4g
bm9pc2VUaHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJZGVudGlmaWVyW10+KG51bU5v
aXNlVGhyZWFkcyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPGRvdWJsZVtdPiBub2lzZUNvdW50cyA9
IHN0ZDo6bWFrZV91bmlxdWU8ZG91YmxlW10+KG51bU5vaXNlVGhyZWFkcyk7CisKKyAgICB2b2xh
dGlsZSBib29sIHNob3VsZFN0b3AgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIHRocmVhZElu
ZGV4ID0gbnVtTm9pc2VUaHJlYWRzOyB0aHJlYWRJbmRleC0tOykgeworICAgICAgICBub2lzZUNv
dW50c1t0aHJlYWRJbmRleF0gPSAwOworICAgICAgICBub2lzZVRocmVhZHNbdGhyZWFkSW5kZXhd
ID0gY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgIk5vaXNlIFRocmVhZCIsCisgICAgICAgICAg
ICBbJnNob3VsZFN0b3AsICZub2lzZUNvdW50cywgdGhyZWFkSW5kZXhdICgpIHsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoIXNob3VsZFN0b3ApCisgICAgICAgICAgICAgICAgICAgIG5vaXNlQ291
bnRzW3RocmVhZEluZGV4XSsrOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgZG91Ymxl
IGJlZm9yZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisgICAgCisgICAgZm9y
ICh1bnNpZ25lZCB0aHJlYWRHcm91cEluZGV4ID0gbnVtVGhyZWFkR3JvdXBzOyB0aHJlYWRHcm91
cEluZGV4LS07KSB7CisgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdID0gMDsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJl
YWRJbmRleC0tOykgeworICAgICAgICAgICAgdGhyZWFkc1t0aHJlYWRHcm91cEluZGV4ICogbnVt
VGhyZWFkc1Blckdyb3VwICsgdGhyZWFkSW5kZXhdID0gY3JlYXRlVGhyZWFkKAorICAgICAgICAg
ICAgICAgICJCZW5jaG1hcmsgdGhyZWFkIiwKKyAgICAgICAgICAgICAgICBbdGhyZWFkR3JvdXBJ
bmRleCwgJmxvY2tzLCAmd29yZHNdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtSXRlcmF0aW9uczsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAg
bG9ja3NbdGhyZWFkR3JvdXBJbmRleF0ubG9jaygpOworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gd29ya1BlckNyaXRpY2FsU2VjdGlvbjsgai0tOykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdKys7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0gKj0gMS4wMTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tzW3Ro
cmVhZEdyb3VwSW5kZXhdLnVubG9jaygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIHRocmVh
ZEluZGV4ID0gbnVtVGhyZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRl
eC0tOykKKyAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRl
eF0pOworICAgIHNob3VsZFN0b3AgPSB0cnVlOworICAgIGRvdWJsZSBub2lzZUNvdW50ID0gMDsK
KyAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtTm9pc2VUaHJlYWRzOyB0aHJlYWRJ
bmRleC0tOykgeworICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihub2lzZVRocmVhZHNb
dGhyZWFkSW5kZXhdKTsKKyAgICAgICAgbm9pc2VDb3VudCArPSBub2lzZUNvdW50c1t0aHJlYWRJ
bmRleF07CisgICAgfQorCisgICAgZG91YmxlIGFmdGVyID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lTVMoKTsKKworICAgIHByaW50ZigiJXM6ICUuM2xmIG1zLCAlLjBsZiBub2lzZS5cbiIs
IG5hbWUsIGFmdGVyIC0gYmVmb3JlLCBub2lzZUNvdW50KTsKK30KKworfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBXVEY6
OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICAKKyAgICBpZiAoYXJnYyAhPSA3CisgICAgICAg
IHx8IHNzY2FuZihhcmd2WzJdLCAiJXUiLCAmbnVtVGhyZWFkR3JvdXBzKSAhPSAxCisgICAgICAg
IHx8IHNzY2FuZihhcmd2WzNdLCAiJXUiLCAmbnVtVGhyZWFkc1Blckdyb3VwKSAhPSAxCisgICAg
ICAgIHx8IHNzY2FuZihhcmd2WzRdLCAiJXUiLCAmd29ya1BlckNyaXRpY2FsU2VjdGlvbikgIT0g
MQorICAgICAgICB8fCBzc2NhbmYoYXJndls1XSwgIiV1IiwgJm51bU5vaXNlVGhyZWFkcykgIT0g
MQorICAgICAgICB8fCBzc2NhbmYoYXJndls2XSwgIiV1IiwgJm51bUl0ZXJhdGlvbnMpICE9IDEp
CisgICAgICAgIHVzYWdlKCk7CisKKyAgICBib29sIGRpZFJ1biA9IGZhbHNlOworICAgIGlmICgh
c3RyY21wKGFyZ3ZbMV0sICJzcGlubG9jayIpIHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7
CisgICAgICAgIHJ1bkJlbmNobWFyazxTcGluTG9jaz4oIlNwaW5Mb2NrIik7CisgICAgICAgIGRp
ZFJ1biA9IHRydWU7CisgICAgfQorICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJsb2NrIikgfHwg
IXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKKyAgICAgICAgcnVuQmVuY2htYXJrPExvY2s+KCJX
VEYgTG9jayIpOworICAgICAgICBkaWRSdW4gPSB0cnVlOworICAgIH0KKyAgICBpZiAoIXN0cmNt
cChhcmd2WzFdLCAibXV0ZXgiKSB8fCAhc3RyY21wKGFyZ3ZbMV0sICJhbGwiKSkgeworICAgICAg
ICBydW5CZW5jaG1hcms8TXV0ZXg+KCJQbGF0Zm9ybSBNdXRleCIpOworICAgICAgICBkaWRSdW4g
PSB0cnVlOworICAgIH0KKworICAgIGlmICghZGlkUnVuKQorICAgICAgICB1c2FnZSgpOworCisg
ICAgcmV0dXJuIDA7Cit9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lvbiAxODgxNDQpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDEyICs5MSwyMSBAQCBz
dHJ1Y3QgQXRvbWljIHsKIAogICAgIGJvb2wgY29tcGFyZUV4Y2hhbmdlV2VhayhUIGV4cGVjdGVk
LCBUIGRlc2lyZWQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJf
c2VxX2NzdCkKICAgICB7CisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgLy8gV2luZG93cyBtYWtl
cyBzdHJhbmdlIGFzc2VydGlvbnMgYWJvdXQgdGhlIGFyZ3VtZW50IHRvIGNvbXBhcmVfZXhjaGFu
Z2Vfd2VhaywgYW5kIGFueXdheSwKKyAgICAgICAgLy8gV2luZG93cyBpcyBYODYgc28gc2VxX2Nz
dCBpcyBjaGVhcC4KKyAgICAgICAgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0Owor
I2VuZGlmCiAgICAgICAgIFQgZXhwZWN0ZWRPckFjdHVhbCA9IGV4cGVjdGVkOwogICAgICAgICBy
ZXR1cm4gdmFsdWUuY29tcGFyZV9leGNoYW5nZV93ZWFrKGV4cGVjdGVkT3JBY3R1YWwsIGRlc2ly
ZWQsIG9yZGVyKTsKICAgICB9CiAKICAgICBib29sIGNvbXBhcmVFeGNoYW5nZVN0cm9uZyhUIGV4
cGVjdGVkLCBUIGRlc2lyZWQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlf
b3JkZXJfc2VxX2NzdCkKICAgICB7CisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgLy8gU2VlIGFi
b3ZlLgorICAgICAgICBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3Q7CisjZW5kaWYK
ICAgICAgICAgVCBleHBlY3RlZE9yQWN0dWFsID0gZXhwZWN0ZWQ7CiAgICAgICAgIHJldHVybiB2
YWx1ZS5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhleHBlY3RlZE9yQWN0dWFsLCBkZXNpcmVkLCBv
cmRlcik7CiAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4ODE0NCkK
KysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00MSw2
ICs0MSw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIEl0ZXJhdG9yQWRhcHRvcnMuaAogICAgIEl0
ZXJhdG9yUmFuZ2UuaAogICAgIExpc3RIYXNoU2V0LmgKKyAgICBMb2NrLmgKICAgICBMb2NrZXIu
aAogICAgIE1ENS5oCiAgICAgTWFpblRocmVhZC5oCkBAIC0xNTYsNiArMTU3LDcgQEAgc2V0KFdU
Rl9TT1VSQ0VTCiAgICAgRnVuY3Rpb25EaXNwYXRjaGVyLmNwcAogICAgIEdyZWdvcmlhbkRhdGVU
aW1lLmNwcAogICAgIEhhc2hUYWJsZS5jcHAKKyAgICBMb2NrLmNwcAogICAgIE1ENS5jcHAKICAg
ICBNYWluVGhyZWFkLmNwcAogICAgIE1lZGlhVGltZS5jcHAKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dURi93dGYvTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvY2suaCIKKworI2luY2x1ZGUgIkRhdGFM
b2cuaCIKKyNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5oIgorI2luY2x1ZGUgIlRocmVhZFNw
ZWNpZmljLmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0aXZlcy5oIgorI2luY2x1ZGUgPGNv
bmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx0aHJlYWQ+CisK
K25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgeworCisvLyBUaGlzIGRhdGEgc3RydWN0dXJl
IHNlcnZlcyB0aHJlZSBwdXJwb3NlczoKKy8vCisvLyAxKSBBIHBhcmtpbmcgbWVjaGFuaXNtIGZv
ciB0aHJlYWRzIHRoYXQgZ28gdG8gc2xlZXAuIFRoYXQgaW52b2x2ZXMganVzdCBhIHN5c3RlbSBt
dXRleCBhbmQKKy8vICAgIGNvbmRpdGlvbiB2YXJpYWJsZS4KKy8vCisvLyAyKSBBIHF1ZXVlIG5v
ZGUgZm9yIHdoZW4gYSB0aHJlYWQgaXMgb24gc29tZSBMb2NrJ3MgcXVldWUuCisvLworLy8gMykg
VGhlIHF1ZXVlIGhlYWQuIFRoaXMgaXMga2luZCBvZiBmdW5reS4gV2hlbiBhIHRocmVhZCBpcyB0
aGUgaGVhZCBvZiBhIHF1ZXVlLCBpdCBhbHNvIHNlcnZlcyBhcworLy8gICAgdGhlIGJhc2ljIHF1
ZXVlIGJvb2trZWVwaW5nIGRhdGEgc3RydWN0dXJlLiBXaGVuIGEgdGhyZWFkIGlzIGRlcXVldWVk
LCB0aGUgbmV4dCB0aHJlYWQgaW4gdGhlCisvLyAgICBxdWV1ZSB0YWtlcyBvbiB0aGUgcXVldWUg
aGVhZCBkdXRpZXMuCitzdHJ1Y3QgVGhyZWFkRGF0YSB7CisgICAgLy8gVGhlIHBhcmtpbmcgbWVj
aGFuaXNtLgorICAgIGJvb2wgc2hvdWxkUGFyayB7IGZhbHNlIH07CisgICAgc3RkOjptdXRleCBw
YXJraW5nTG9jazsKKyAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBwYXJraW5nQ29uZGl0aW9u
OworCisgICAgLy8gVGhlIHF1ZXVlIG5vZGUuCisgICAgVGhyZWFkRGF0YSogbmV4dEluUXVldWUg
eyBudWxscHRyIH07CisKKyAgICAvLyBUaGUgcXVldWUgaXRzZWxmLgorICAgIFRocmVhZERhdGEq
IHF1ZXVlVGFpbCB7IG51bGxwdHIgfTsKK307CisKK1RocmVhZFNwZWNpZmljPFRocmVhZERhdGE+
KiB0aHJlYWREYXRhOworCitUaHJlYWREYXRhKiBteVRocmVhZERhdGEoKQoreworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAg
ICAgICAgaW5pdGlhbGl6ZU9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHRocmVhZERh
dGEgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFkRGF0YT4oKTsKKyAgICAgICAgfSk7CisKKyAg
ICByZXR1cm4gKnRocmVhZERhdGE7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2
b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCit7CisgICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsK
KworICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2Vk
IG9uIHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVudHMuCisgICAgY29uc3QgdW5zaWduZWQgc3Bpbkxp
bWl0ID0gNDA7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICB1aW50cHRyX3QgY3VycmVu
dFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIShjdXJy
ZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpKSB7CisgICAgICAgICAgICAvLyBJdCdzIG5vdCBw
b3NzaWJsZSBmb3Igc29tZW9uZSB0byBob2xkIHRoZSBxdWV1ZSBsb2NrIHdoaWxlIHRoZSBsb2Nr
IGl0c2VsZiBpcyBubyBsb25nZXIKKyAgICAgICAgICAgIC8vIGhlbGQsIHNpbmNlIHdlIHdpbGwg
b25seSBhdHRlbXB0IHRvIGFjcXVpcmUgdGhlIHF1ZXVlIGxvY2sgd2hlbiB0aGUgbG9jayBpcyBo
ZWxkIGFuZAorICAgICAgICAgICAgLy8gdGhlIHF1ZXVlIGxvY2sgcHJldmVudHMgdW5sb2NrLgor
ICAgICAgICAgICAgQVNTRVJUKCEoY3VycmVudFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRCaXQp
KTsKKyAgICAgICAgICAgIGlmIChtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50V29y
ZFZhbHVlLCBjdXJyZW50V29yZFZhbHVlIHwgaXNMb2NrZWRCaXQpKSB7CisgICAgICAgICAgICAg
ICAgLy8gU3VjY2VzcyEgV2UgYWNxdWlyZWQgdGhlIGxvY2suCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMg
bm8gcXVldWUgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRv
IHNwaW4gYXJvdW5kIGFnYWluLgorICAgICAgICBpZiAoIShjdXJyZW50V29yZFZhbHVlICYgfnF1
ZXVlSGVhZE1hc2spICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgeworICAgICAgICAgICAgc3Bp
bkNvdW50Kys7CisgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBOZWVkIHRvIHB1dCBvdXJz
ZWx2ZXMgb24gdGhlIHF1ZXVlLiBDcmVhdGUgdGhlIHF1ZXVlIGlmIG9uZSBkb2VzIG5vdCBleGlz
dC4gVGhpcyByZXF1cmllcworICAgICAgICAvLyBvd25pbmcgdGhlIHF1ZXVlIGZvciBhIGxpdHRs
ZSBiaXQuIFRoZSBsb2NrIHRoYXQgY29udHJvbHMgdGhlIHF1ZXVlIGlzIGl0c2VsZiBhIHNwaW5s
b2NrLgorICAgICAgICAvLyBCdXQgYmVmb3JlIHdlIGFjcXVpcmUgdGhlIHF1ZXVlIHNwaW5sb2Nr
LCB3ZSBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgVGhyZWFkRGF0YSBmb3IgdGhpcworICAgICAg
ICAvLyB0aHJlYWQuCisgICAgICAgIFRocmVhZERhdGEqIG1lID0gbXlUaHJlYWREYXRhKCk7Cisg
ICAgICAgIEFTU0VSVCghbWUtPnNob3VsZFBhcmspOworICAgICAgICBBU1NFUlQoIW1lLT5uZXh0
SW5RdWV1ZSk7CisgICAgICAgIEFTU0VSVCghbWUtPnF1ZXVlVGFpbCk7CisKKyAgICAgICAgLy8g
UmVsb2FkIHRoZSBjdXJyZW50IHdvcmQgdmFsdWUsIHNpbmNlIHNvbWUgdGltZSBtYXkgaGF2ZSBw
YXNzZWQuCisgICAgICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOworCisgICAg
ICAgIC8vIFdlIHByb2NlZWQgb25seSBpZiB0aGUgcXVldWUgbG9jayBpcyBub3QgaGVsZCwgdGhl
IExvY2sgaXMgaGVsZCwgYW5kIHdlIHN1Y2NlZWQgaW4KKyAgICAgICAgLy8gYWNxdWlyaW5nIHRo
ZSBxdWV1ZSBsb2NrLgorICAgICAgICBpZiAoKGN1cnJlbnRXb3JkVmFsdWUgJiBpc1F1ZXVlTG9j
a2VkQml0KQorICAgICAgICAgICAgfHwgIShjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQp
CisgICAgICAgICAgICB8fCAhbV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudFdvcmRW
YWx1ZSwgY3VycmVudFdvcmRWYWx1ZSB8IGlzUXVldWVMb2NrZWRCaXQpKSB7CisgICAgICAgICAg
ICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1lLT5zaG91bGRQYXJrID0gdHJ1ZTsKKworICAgICAg
ICAvLyBXZSBvd24gdGhlIHF1ZXVlLiBOb2JvZHkgY2FuIGVucXVldWUgb3IgZGVxdWV1ZSB1bnRp
bCB3ZSdyZSBkb25lLiBBbHNvLCBpdCdzIG5vdCBwb3NzaWJsZQorICAgICAgICAvLyB0byByZWxl
YXNlIHRoZSBMb2NrIHdoaWxlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2suCisgICAgICAgIFRocmVh
ZERhdGEqIHF1ZXVlSGVhZCA9IGJpdHdpc2VfY2FzdDxUaHJlYWREYXRhKj4oY3VycmVudFdvcmRW
YWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKTsKKyAgICAgICAgaWYgKHF1ZXVlSGVhZCkgeworICAgICAg
ICAgICAgLy8gUHV0IHRoaXMgdGhyZWFkIGF0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlLgorICAgICAg
ICAgICAgcXVldWVIZWFkLT5xdWV1ZVRhaWwtPm5leHRJblF1ZXVlID0gbWU7CisgICAgICAgICAg
ICBxdWV1ZUhlYWQtPnF1ZXVlVGFpbCA9IG1lOworCisgICAgICAgICAgICAvLyBSZWxlYXNlIHRo
ZSBxdWV1ZSBsb2NrLgorICAgICAgICAgICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2Fk
KCk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNr
KTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50V29yZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJp
dCk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9ja2VkQml0KTsK
KyAgICAgICAgICAgIG1fd29yZC5zdG9yZShjdXJyZW50V29yZFZhbHVlICYgfmlzUXVldWVMb2Nr
ZWRCaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTWFrZSB0aGlzIHRocmVh
ZCBiZSB0aGUgcXVldWUtaGVhZC4KKyAgICAgICAgICAgIHF1ZXVlSGVhZCA9IG1lOworICAgICAg
ICAgICAgbWUtPnF1ZXVlVGFpbCA9IG1lOworCisgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBx
dWV1ZSBsb2NrIGFuZCBpbnN0YWxsIG91cnNlbHZlcyBhcyB0aGUgaGVhZC4gTm8gbmVlZCBmb3Ig
YSBDQVMgbG9vcCwgc2luY2UKKyAgICAgICAgICAgIC8vIHdlIG93biB0aGUgcXVldWUgbG9jay4K
KyAgICAgICAgICAgIGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAg
ICAgQVNTRVJUKH4oY3VycmVudFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKSk7CisgICAgICAg
ICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzUXVldWVMb2NrZWRCaXQpOworICAgICAg
ICAgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7CisgICAgICAgICAg
ICB1aW50cHRyX3QgbmV3V29yZFZhbHVlID0gY3VycmVudFdvcmRWYWx1ZTsKKyAgICAgICAgICAg
IG5ld1dvcmRWYWx1ZSB8PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihxdWV1ZUhlYWQpOworICAg
ICAgICAgICAgbmV3V29yZFZhbHVlICY9IH5pc1F1ZXVlTG9ja2VkQml0OworICAgICAgICAgICAg
bV93b3JkLnN0b3JlKG5ld1dvcmRWYWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBdCB0
aGlzIHBvaW50IGV2ZXJ5b25lIHdobyBhY3F1aXJlcyB0aGUgcXVldWUgbG9jayB3aWxsIHNlZSBt
ZSBvbiB0aGUgcXVldWUsIGFuZCBhbnlvbmUgd2hvCisgICAgICAgIC8vIGFjcXVpcmVzIG1lJ3Mg
bG9jayB3aWxsIHNlZSB0aGF0IG1lIHdhbnRzIHRvIHBhcmsuIE5vdGUgdGhhdCBzaG91bGRQYXJr
IG1heSBoYXZlIGJlZW4KKyAgICAgICAgLy8gY2xlYXJlZCBhcyBzb29uIGFzIHRoZSBxdWV1ZSBs
b2NrIHdhcyByZWxlYXNlZCBhYm92ZSwgYnV0IGl0IHdpbGwgaGFwcGVuIHdoaWxlIHRoZQorICAg
ICAgICAvLyByZWxlYXNpbmcgdGhyZWFkIGhvbGRzIG1lJ3MgcGFya2luZ0xvY2suCisKKyAgICAg
ICAgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUt
PnBhcmtpbmdMb2NrKTsKKyAgICAgICAgICAgIHdoaWxlIChtZS0+c2hvdWxkUGFyaykKKyAgICAg
ICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0KGxvY2tlcik7CisgICAgICAgIH0K
KworICAgICAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKKyAgICAgICAgQVNTRVJUKCFtZS0+
bmV4dEluUXVldWUpOworICAgICAgICBBU1NFUlQoIW1lLT5xdWV1ZVRhaWwpOworICAgICAgICAK
KyAgICAgICAgLy8gTm93IHdlIGNhbiBsb29wIGFyb3VuZCBhbmQgdHJ5IHRvIGFjcXVpcmUgdGhl
IGxvY2sgYWdhaW4uCisgICAgfQorfQorCit2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93KCkKK3sK
KyAgICAvLyBUaGUgZmFzdCBwYXRoIGNhbiBmYWlsIGVpdGhlciBiZWNhdXNlIG9mIHNwdXJpb3Vz
IHdlYWsgQ0FTIGZhaWx1cmUsIG9yIGJlY2F1c2Ugc29tZW9uZSBwdXQgYQorICAgIC8vIHRocmVh
ZCBvbiB0aGUgcXVldWUsIG9yIHRoZSBxdWV1ZSBsb2NrIGlzIGhlbGQuIElmIHRoZSBxdWV1ZSBs
b2NrIGlzIGhlbGQsIGl0IGNhbiBvbmx5IGJlCisgICAgLy8gYmVjYXVzZSBzb21lb25lICp3aWxs
KiBlbnF1ZXVlIGEgdGhyZWFkIG9udG8gdGhlIHF1ZXVlLgorCisgICAgLy8gQWNxdWlyZSB0aGUg
cXVldWUgbG9jaywgb3IgcmVsZWFzZSB0aGUgbG9jay4gVGhpcyBsb29wIGhhbmRsZXMgYm90aCBs
b2NrIHJlbGVhc2UgaW4gY2FzZSB0aGUKKyAgICAvLyBmYXN0IHBhdGgncyB3ZWFrIENBUyBzcHVy
aW91c2x5IGZhaWxlZCBhbmQgaXQgaGFuZGxlcyBxdWV1ZSBsb2NrIGFjcXVpc2l0aW9uIGlmIHRo
ZXJlIGlzCisgICAgLy8gYWN0dWFsbHkgc29tZXRoaW5nIGludGVyZXN0aW5nIG9uIHRoZSBxdWV1
ZS4KKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHVpbnRwdHJfdCBjdXJyZW50V29yZFZhbHVlID0g
bV93b3JkLmxvYWQoKTsKKworICAgICAgICBBU1NFUlQoY3VycmVudFdvcmRWYWx1ZSAmIGlzTG9j
a2VkQml0KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjdXJyZW50V29yZFZhbHVlID09IGlzTG9j
a2VkQml0KSB7CisgICAgICAgICAgICBpZiAobV93b3JkLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNM
b2NrZWRCaXQsIDApKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGZhc3QgcGF0aCdzIHdlYWsg
Q0FTIGhhZCBzcHVyaW91c2x5IGZhaWxlZCwgYW5kIG5vdyB3ZSBzdWNjZWVkZWQuIFRoZSBsb2Nr
IGlzCisgICAgICAgICAgICAgICAgLy8gdW5sb2NrZWQgYW5kIHdlJ3JlIGRvbmUhCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gTG9vcCBhcm91
bmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KGN1cnJlbnRXb3JkVmFsdWUgJiBpc1F1ZXVlTG9ja2VkQml0KSB7CisgICAgICAgICAgICBzdGQ6
OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBJZiBpdCB3YXNuJ3QganVzdCBhIHNwdXJpb3VzIHdlYWsgQ0FTIGZhaWx1
cmUgYW5kIGlmIHRoZSBxdWV1ZSBsb2NrIGlzIG5vdCBoZWxkLCB0aGVuIHRoZXJlCisgICAgICAg
IC8vIG11c3QgYmUgYW4gZW50cnkgb24gdGhlIHF1ZXVlLgorICAgICAgICBBU1NFUlQoY3VycmVu
dFdvcmRWYWx1ZSAmIH5xdWV1ZUhlYWRNYXNrKTsKKworICAgICAgICBpZiAobV93b3JkLmNvbXBh
cmVFeGNoYW5nZVdlYWsoY3VycmVudFdvcmRWYWx1ZSwgY3VycmVudFdvcmRWYWx1ZSB8IGlzUXVl
dWVMb2NrZWRCaXQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgdWludHB0cl90
IGN1cnJlbnRXb3JkVmFsdWUgPSBtX3dvcmQubG9hZCgpOworICAgICAgICAKKyAgICAvLyBBZnRl
ciB3ZSBhY3F1aXJlIHRoZSBxdWV1ZSBsb2NrLCB0aGUgTG9jayBtdXN0IHN0aWxsIGJlIGhlbGQg
YW5kIHRoZSBxdWV1ZSBtdXN0IGJlCisgICAgLy8gbm9uLWVtcHR5LiBUaGUgcXVldWUgbXVzdCBi
ZSBub24tZW1wdHkgc2luY2Ugb25seSB0aGUgbG9ja1Nsb3coKSBtZXRob2QgY291bGQgaGF2ZSBo
ZWxkIHRoZQorICAgIC8vIHF1ZXVlIGxvY2sgYW5kIGlmIGl0IGRpZCB0aGVuIGl0IG9ubHkgcmVs
ZWFzZXMgaXQgYWZ0ZXIgcHV0dGluZyBzb21ldGhpbmcgb24gdGhlIHF1ZXVlLgorICAgIEFTU0VS
VChjdXJyZW50V29yZFZhbHVlICYgaXNMb2NrZWRCaXQpOworICAgIEFTU0VSVChjdXJyZW50V29y
ZFZhbHVlICYgaXNRdWV1ZUxvY2tlZEJpdCk7CisgICAgVGhyZWFkRGF0YSogcXVldWVIZWFkID0g
Yml0d2lzZV9jYXN0PFRocmVhZERhdGEqPihjdXJyZW50V29yZFZhbHVlICYgfnF1ZXVlSGVhZE1h
c2spOworICAgIEFTU0VSVChxdWV1ZUhlYWQpOworCisgICAgVGhyZWFkRGF0YSogbmV3UXVldWVI
ZWFkID0gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZTsKKyAgICAvLyBFaXRoZXIgdGhpcyB3YXMgdGhl
IG9ubHkgdGhyZWFkIG9uIHRoZSBxdWV1ZSwgaW4gd2hpY2ggY2FzZSB3ZSBkZWxldGUgdGhlIHF1
ZXVlLCBvciB0aGVyZQorICAgIC8vIGFyZSBzdGlsbCBtb3JlIHRocmVhZHMgb24gdGhlIHF1ZXVl
LCBpbiB3aGljaCBjYXNlIHdlIGNyZWF0ZSBhIG5ldyBxdWV1ZSBoZWFkLgorICAgIGlmIChuZXdR
dWV1ZUhlYWQpCisgICAgICAgIG5ld1F1ZXVlSGVhZC0+cXVldWVUYWlsID0gcXVldWVIZWFkLT5x
dWV1ZVRhaWw7CisKKyAgICAvLyBDaGFuZ2UgdGhlIHF1ZXVlIGhlYWQsIHBvc3NpYmx5IHJlbW92
aW5nIGl0IGlmIG5ld1F1ZXVlSGVhZCBpcyBudWxsLiBObyBuZWVkIGZvciBhIENBUyBsb29wLAor
ICAgIC8vIHNpbmNlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2sgYW5kIHRoZSBsb2NrIGl0c2VsZiBz
byBub3RoaW5nIGFib3V0IHRoZSBsb2NrIGNhbiBjaGFuZ2UgcmlnaHQKKyAgICAvLyBub3cuCisg
ICAgY3VycmVudFdvcmRWYWx1ZSA9IG1fd29yZC5sb2FkKCk7CisgICAgQVNTRVJUKGN1cnJlbnRX
b3JkVmFsdWUgJiBpc0xvY2tlZEJpdCk7CisgICAgQVNTRVJUKGN1cnJlbnRXb3JkVmFsdWUgJiBp
c1F1ZXVlTG9ja2VkQml0KTsKKyAgICBBU1NFUlQoKGN1cnJlbnRXb3JkVmFsdWUgJiB+cXVldWVI
ZWFkTWFzaykgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocXVldWVIZWFkKSk7CisgICAgdWlu
dHB0cl90IG5ld1dvcmRWYWx1ZSA9IGN1cnJlbnRXb3JkVmFsdWU7CisgICAgbmV3V29yZFZhbHVl
ICY9IH5pc0xvY2tlZEJpdDsgLy8gUmVsZWFzZSB0aGUgTG9jay4KKyAgICBuZXdXb3JkVmFsdWUg
Jj0gfmlzUXVldWVMb2NrZWRCaXQ7IC8vIFJlbGVhc2UgdGhlIHF1ZXVlIGxvY2suCisgICAgbmV3
V29yZFZhbHVlICY9IHF1ZXVlSGVhZE1hc2s7IC8vIENsZWFyIG91dCB0aGUgb2xkIHF1ZXVlIGhl
YWQuCisgICAgbmV3V29yZFZhbHVlIHw9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld1F1ZXVl
SGVhZCk7IC8vIEluc3RhbGwgbmV3IHF1ZXVlIGhlYWQuCisgICAgbV93b3JkLnN0b3JlKG5ld1dv
cmRWYWx1ZSk7CisKKyAgICAvLyBOb3cgdGhlIGxvY2sgaXMgYXZhaWxhYmxlIGZvciBhY3F1aXNp
dGlvbi4gQnV0IHdlIGp1c3QgaGF2ZSB0byB3YWtlIHVwIHRoZSBvbGQgcXVldWUgaGVhZC4KKyAg
ICAvLyBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIQorCisgICAgcXVldWVIZWFkLT5uZXh0SW5RdWV1
ZSA9IG51bGxwdHI7CisgICAgcXVldWVIZWFkLT5xdWV1ZVRhaWwgPSBudWxscHRyOworCisgICAg
Ly8gV2UgZG8gdGhpcyBjYXJlZnVsbHkgYmVjYXVzZSB0aGlzIG1heSBydW4gZWl0aGVyIGJlZm9y
ZSBvciBkdXJpbmcgdGhlIHBhcmtpbmdMb2NrIGNyaXRpY2FsCisgICAgLy8gc2VjdGlvbiBpbiBs
b2NrU2xvdygpLgorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBs
b2NrZXIocXVldWVIZWFkLT5wYXJraW5nTG9jayk7CisgICAgICAgIHF1ZXVlSGVhZC0+c2hvdWxk
UGFyayA9IGZhbHNlOworICAgIH0KKyAgICAvLyBEb2Vzbid0IG1hdHRlciBpZiB3ZSBub3RpZnlf
YWxsKCkgb3Igbm90aWZ5X29uZSgpIGhlcmUgc2luY2UgdGhlIG9ubHkgdGhyZWFkIHRoYXQgY291
bGQgYmUKKyAgICAvLyB3YWl0aW5nIGlzIHF1ZXVlSGVhZC4KKyAgICBxdWV1ZUhlYWQtPnBhcmtp
bmdDb25kaXRpb24ubm90aWZ5X29uZSgpOworCisgICAgLy8gVGhlIG9sZCBxdWV1ZSBoZWFkIGNh
biBub3cgY29udGVuZCBmb3IgdGhlIGxvY2sgYWdhaW4uIFdlJ3JlIGRvbmUhCit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYv
TG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX0xvY2tfaAorI2RlZmlu
ZSBXVEZfTG9ja19oCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9D
b21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgTG9jayBpcyBhIGZ1bGx5IGFkYXB0
aXZlIG11dGV4IHRoYXQgZ2l2ZXMgeW91IHRoZSBiZXN0IG9mIFNwaW5Mb2NrIGFuZCBNdXRleC4g
Rm9yIHNtYWxsIGNyaXRpY2FsCisvLyBzZWN0aW9ucyAodGhhdCB0YWtlIG5hbm9zZWNvbmRzKSwg
aXQgd2lsbCB1c3VhbGx5IHBlcmZvcm0gd2l0aGluIDJ4IG9mIGEgU3BpbkxvY2sgaW4gYm90aCB0
aGUKKy8vIGNvbnRlbmRlZCBhbmQgdW5jb250ZW5kZWQgY2FzZS4gV2hlbiB1c2luZyBhIE11dGV4
LCBzdWNoIGNyaXRpY2FsIHNlY3Rpb25zIHRha2UgdXAgdG8gMTAweCBsb25nZXIKKy8vIHRoYW4g
TG9jayBpbiB0aGUgY29udGVuZGVkIGNhc2UsIG9yIDN4IGxvbmdlciB0aGFuIExvY2sgaW4gdGhl
IHVuY29udGVuZGVkIGNhc2UuIEZvciBsb25nZXIKKy8vIGNyaXRpY2FsIHNlY3Rpb25zICh0aGF0
IHRha2UgdGVucyBvZiBtaWNyb3NlY29uZHMpLCBpdCB3aWxsIHBlcmZvcm0gYXMgd2VsbCBhcyBh
IE11dGV4IGFuZCBzbGlnaHRseQorLy8gYmV0dGVyIHRoYW4gYSBTcGluTG9jay4gQnV0LCBjcnVj
aWFsbHksIGEgU3BpbkxvY2sgd2lsbCBidXJuIHVwIHRvIDkweCBtb3JlIHRpbWUgaW4gdGhlIGtl
cm5lbCBmb3IKKy8vIHN1Y2ggY3JpdGljYWwgc2VjdGlvbnMgdGhhbiBlaXRoZXIgTG9jayBvciBN
dXRleC4gSGVuY2UsIHVzaW5nIExvY2sgd2lsbCBtYWtlIHRoZSBjb21tb24gY2FzZSBvZgorLy8g
bG9ja2luZyBwZXJmb3JtIGNsb3NlIHRvIFNwaW5Mb2NrIGZvciBhbnkgY3JpdGljYWwgc2VjdGlv
biB0aGF0IGRvZXMgbW9yZSB0aGFuIGEgZmV3IG5hbm9zZWNvbmRzIG9mCisvLyB3b3JrIHdoaWxl
IGJlaW5nIGFzIGtpbmQgdG8gdGhlIHNjaGVkdWxlciBmb3IgbG9uZ2VyIGNyaXRpY2FsIHNlY3Rp
b25zIGFzIGEgTXV0ZXguCisvLworLy8gTGlrZSBTcGluTG9jaywgTG9jayB0YWtlcyB2ZXJ5IGxp
dHRsZSBtZW1vcnkgLSBqdXN0IHNpemVvZih2b2lkKiksIHRob3VnaCBzZWUgYSBkZXRhaWxlZCBj
YXZlYXQKKy8vIGJlbG93LgorLy8KKy8vIEdlbmVyYWxseSwgeW91IHNob3VsZCB1c2UgTG9jayBp
bnN0ZWFkIG9mIFNwaW5Mb2NrIGJlY2F1c2Ugd2hpbGUgaXQgcGVuYWxpemVzIHlvdSBzbGlnaHRs
eSwgeW91CisvLyBtYWtlIHVwIGZvciBpdCBieSBub3Qgd2FzdGluZyBDUFUgY3ljbGVzIGluIGNh
c2Ugb2YgY29udGVudGlvbi4KKy8vCisvLyBUaGUgTG9jayBoYXMgdGhlIGZvbGxvd2luZyBuaWNl
IHByb3BlcnRpZXM6CisvLworLy8gLSBVbmNvbnRlbmRlZCBmYXN0IHBhdGhzIGZvciBsb2NrIGFj
cXVpc2l0aW9uIGFuZCBsb2NrIHJlbGVhc2UgdGhhdCBhcmUgYWxtb3N0IGFzIGZhc3QgYXMgdGhl
CisvLyAgIHVuY29udGVuZGVkIGZhc3QgcGF0aHMgb2YgYSBzcGlubG9jay4gVGhlIG9ubHkgb3Zl
cmhlYWQgaXMgdGhhdCB0aGUgc3BpbmxvY2sgd2lsbCBub3QgQ0FTIG9uCisvLyAgIHJlbGVhc2Us
IHdoaWxlIExvY2sgd2lsbCBDQVMuIFRoaXMgb3ZlcmhlYWQgKmNhbiogc2xvdyB0aGluZ3MgZG93
biBmb3IgZXh0cmVtZWx5IHNtYWxsIGNyaXRpY2FsCisvLyAgIHNlY3Rpb25zIHRoYXQgZG8gbGl0
dGxlIG9yIG5vdGhpbmcgLSBpdCBtYWtlcyB0aGVtIDJ4IHNsb3dlciBzaW5jZSBpbiB0aGF0IGNh
c2UsIENBUyBpcyB0aGUgbW9zdAorLy8gICBleHBlbnNpdmUgaW5zdHJ1Y3Rpb24gYW5kIGhhdmlu
ZyB0d28gb2YgdGhlbSBpcyB0d2ljZSBhcyBiYWQgYXMganVzdCBoYXZpbmcgb25lLiBIb3dldmVy
LCB0aGlzCisvLyAgIGxvY2sgaW1wbGVtZW50YXRpb24gaXMgc3RpbGwgYWxtb3N0IDN4IGZhc3Rl
ciB0aGFuIGEgcGxhdGZvcm0gbXV0ZXggaW4gdGhvc2UgY2FzZXMuIEl0J3MgdW5saWtlbHkKKy8v
ICAgdGhhdCB5b3UnbGwgZW5jb3VudGVyIG5vLW9wIGNyaXRpY2FsIHNlY3Rpb25zLCBzbyB1c3Vh
bGx5LCB0aGlzIGxvY2sgaXMgYmV0dGVyIHRoYW4gYSBzcGlubG9jay4KKy8vCisvLyAtIENvbnRl
bmRlZCBmYXN0IHBhdGggdGhhdCBhdHRlbXB0cyB0byBzcGluIGFuZCB5aWVsZCBmb3Igc29tZSBu
dW1iZXIgb2YgdGltZXMuIEZvciBjcml0aWNhbAorLy8gICBzZWN0aW9ucyB0aGF0IGFyZSBoZWxk
IG9ubHkgYnJpZWZseSwgdGhpcyBhbGxvd3MgTG9jayB0byBwZXJmb3JtIGFsbW9zdCBhcyB3ZWxs
IGFzIGEgU3BpbkxvY2suCisvLyAgIFNwaW5Mb2NrIGNhbiBzdGlsbCBiZSBhbG1vc3QgMnggZmFz
dGVyIHRoYW4gTG9jayBpZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBhIG5vLW9wLCBidXQgdGhp
cworLy8gICBhZHZhbnRhZ2UgZGltaW5pc2hlcyBhcyB0aGUgY3JpdGljYWwgc2VjdGlvbiBncm93
cy4KKy8vCisvLyAtIENvbnRlbmRlZCBzbG93IHBhdGggdGhhdCBlbnF1ZXVlcyB0aGUgY29udGVu
ZGluZyB0aHJlYWQgYW5kIGNhdXNlcyBpdCB0byB3YWl0IG9uIGEgY29uZGl0aW9uCisvLyAgIHZh
cmlhYmxlIHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBUaGlzIGlzIHRoZSBvbmx5IGNhc2Ug
aW4gd2hpY2ggc3lzdGVtIG11dGV4ZXMgYW5kIGNvbmRpdGlvbgorLy8gICB2YXJpYWJsZXMgYXJl
IHVzZWQuIFRoaXMgY2FzZSBpcyByYXJlIGFuZCBzZWxmLWxpbWl0aW5nOiBpdCB3aWxsIG9ubHkg
aGFwcGVuIHdoZW4gYSBsb2NrIGlzIGhlbGQKKy8vICAgZm9yIGxvbmcgZW5vdWdoIHRoYXQgc3Bp
bm5pbmcgc29tZSBudW1iZXIgb2YgdGltZXMgZG9lc24ndCBhY3F1aXJlIGl0LiBUaGUgZmFjdCB0
aGF0IExvY2sgZG9lcworLy8gICB0aGlzIGFzIGEgZmFsbGJhY2sgd2hlbiBzcGlubmluZyBmb3Ig
c29tZSBudW1iZXIgb2YgdGltZXMgZmFpbHMgbWVhbnMgdGhhdCBpdCB3aWxsIGJ1cm4KKy8vICAg
ZHJhbWF0aWNhbGx5IGZld2VyIENQVSBjeWNsZXMgLSBmb3IgZXhhbXBsZSB3aXRoIDEwIHRocmVh
ZHMgb24gYW4gOCBsb2dpY2FsIENQVSBtYWNoaW5lIGFjcXVpcmluZworLy8gICBhIGNyaXRpY2Fs
IHNlY3Rpb24gdGhhdCB0YWtlcyA1MCBtaWNyb3NlY29uZHMsIHRoZSBXVEYgU3BpbkxvY2sgd2ls
bCBjYXVzZSA5MHggbW9yZSB0aW1lIHRvIGJlCisvLyAgIHNwZW50IGluIHRoZSBrZXJuZWwgdGhh
biBMb2NrLgorLy8KKy8vIC0gVmVyeSBsb3cgbWVtb3J5IHVzYWdlLiBFYWNoIExvY2sgcmVxdWly
ZXMgb25seSBzaXplb2Yodm9pZCopIG1lbW9yeS4gV2hlbiB0aGUgY29udGVuZGVkIHNsb3cKKy8v
ICAgcGF0aCBpcyBhY3RpdmF0ZWQsIExvY2sgb25seSByZWxpZXMgb24gZWFjaCB0aHJlYWQgaGF2
aW5nIGEgcHJlYWxsb2NhdGVkIHRocmVhZC1zcGVjaWZpYyBkYXRhCisvLyAgIHN0cnVjdHVyZSBj
YWxsZWQgVGhyZWFkRGF0YSB0aGF0LCB0b2dldGhlciB3aXRoIHRoZSBMb2NrIGl0c2VsZiwgaXMg
dXNlZCB0byBidWlsZCB1cCBhIHRocmVhZAorLy8gICBxdWV1ZS4gU28sIHRoZSB0b3RhbCBtZW1v
cnkgdXNhZ2Ugb2YgYWxsIExvY2tzIGlzIHN0aWxsIGJvdW5kZWQgYnk6CisvLworLy8gICAgICAg
bnVtYmVyT2ZMb2NrcyAqIHNpemVvZih2b2lkKikgKyBudW1iZXJPZlRocmVhZHMgKiBzaXplb2Yo
VGhyZWFkRGF0YSkKKy8vCisvLyAgIFdoZXJlIFRocmVhZERhdGEgaXMgYSBkZWNlbnRseSBsYXJn
ZSBkYXRhIHN0cnVjdHVyZSwgYnV0IHdlIHdpbGwgb25seSBldmVyIGhhdmUgb25lIHBlciB0aHJl
YWQsCisvLyAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBMb2NrcyBpbiBtZW1vcnkuIEFu
b3RoZXIgd2F5IHRvIHZpZXcgdGhpcyBpcyB0aGF0IHRoZSB3b3JzdCBjYXNlCisvLyAgIG1lbW9y
eSB1c2FnZSBwZXIgTG9jayBpczoKKy8vCisvLyAgICAgICBzaXplb2Yodm9pZCopICsgbnVtYmVy
T2ZUaHJlYWRzIC8gbnVtYmVyT2ZMb2NrcyAqIHNpemVvZihUaHJlYWREYXRhKQorLy8KKy8vICAg
U28sIHVubGVzcyB5b3UgaGF2ZSBhIHNtYWxsIG51bWJlciBvZiBMb2NrcyAob3IsIGEgbGFyZ2Ug
bnVtYmVyIG9mIHRocmVhZHMsIHdoaWNoIGlzIGZhciBsZXNzCisvLyAgIGxpa2VseSksIHRoZSBt
ZW1vcnkgdXNhZ2UgcGVyLUxvY2sgaXMgc3RpbGwgZ29pbmcgdG8gYmUgc29tZXdoZXJlIGFyb3Vu
ZCBzaXplb2Yodm9pZCopLgorLy8KKy8vIC0gQmFyZ2luZyBmYXN0IHBhdGhzLiBUaGUgTG9jayBp
cyB0dW5lZCBmb3IgbWF4aW11bSB0aHJvdWdocHV0IHJhdGhlciB0aGFuIG1heGltdW0gZmFpcm5l
c3MuIElmCisvLyAgIGEgdGhyZWFkIHJlbGVhc2VzIGEgTG9jayB0aGF0IHdhcyBjb250ZW5kZWQg
YW5kIGhhZCBhIHF1ZXVlIG9mIHdhaXRpbmcgdGhyZWFkcywgdGhlbiBpdCB3aWxsCisvLyAgIHdh
a2UgdXAgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLCBidXQgaXQgd2lsbCBhbHNvIG1hcmsgdGhlIGxv
Y2sgYXMgYmVpbmcgYXZhaWxhYmxlLiBUaGlzIG1lYW5zIHRoYXQKKy8vICAgc29tZSBvdGhlciB0
aHJlYWQgdGhhdCBpcyBqdXN0IG5vdyBhdHRlbXB0aW5nIHRvIGFjcXVpcmUgdGhlIGxvY2sgbWF5
IGdldCBpdCBiZWZvcmUgdGhlIHRocmVhZAorLy8gICB0aGF0IGdvdCB3b2tlbiB1cC4gV2hlbiBh
IHRocmVhZCBiYXJnZXMgaW50byB0aGUgbG9jaywgdGhlIHRocmVhZCB0aGF0IGdvdCB3b2tlbiB1
cCB3aWxsIHNpbXBseQorLy8gICBnbyBiYWNrIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLiBUaGUg
YmFyZ2luZyBiZWhhdmlvciBlbmRzIHVwIGJlaW5nIHByb2JhYmlsaXN0aWMgb24gbW9zdAorLy8g
ICBwbGF0Zm9ybXMgYW5kIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSB1bmZhaXIgdG8gc29tZSB0aHJl
YWQgYXQgc29tZSBtb21lbnQgaW4gdGltZSwgaXQgd2lsbCByYXJlbHkKKy8vICAgaGF2ZSBhIGxv
bmcgc3RyZWFrIG9mIHVuZmFpcm5lc3MgdG93YXJkcyBhbnkgcGFydGljdWxhciB0aHJlYWQ6IGV2
ZW50dWFsbHkgZWFjaCB0aHJlYWQgd2FpdGluZyBvbgorLy8gICB0aGUgbG9jayB3aWxsIGdldCB0
byBoYXZlIGEgdHVybiBzbyBsb25nIGFzIG5vIHRocmVhZCBqdXN0IGhvbGRzIHRoZSBsb2NrIGZv
cmV2ZXIuIFRoYXQgc2FpZCwKKy8vICAgdGhlcmUgKmlzKiBhIGNoYW5jZSBvZiBwYXRob2xvZ2ll
cyAtIHVzZXJzIG9mIExvY2sgc2hvdWxkIG5vdCBkZXBlbmQgb24gZmlyc3QtaW4sIGZpcnN0LW91
dCBsb2NrCisvLyAgIGFjcXVpc2l0aW9uIG9yZGVyIHVuZGVyIGNvbnRlbnRpb24uIFRoZSBzYW1l
IGNhdmVhdCBpcyBnZW5lcmFsbHkgdHJ1ZSBvZiBTcGluTG9jayBhbmQgcGxhdGZvcm0KKy8vICAg
bXV0ZXhlcyBvbiBzb21lIHBsYXRmb3Jtcy4KKworLy8gVGhpcyBpcyBhIHN0cnVjdCB3aXRob3V0
IGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3RvciBzbyB0aGF0IGl0IGNhbiBiZSBzdGF0aWNhbGx5
IGluaXRpYWxpemVkLgorLy8gVXNlIExvY2sgaW4gaW5zdGFuY2UgdmFyaWFibGVzLgorc3RydWN0
IExvY2tCYXNlIHsKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWSht
X3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0xvY2tlZEJpdCwgc3RkOjptZW1vcnlfb3Jk
ZXJfYWNxdWlyZSkpKSB7CisgICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbG9ja1Nsb3coKTsKKyAgICB9CisKKyAg
ICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fd29yZC5jb21wYXJl
RXhjaGFuZ2VXZWFrKGlzTG9ja2VkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkp
IHsKKyAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQsIGFuZCBub2JvZHkgd2FzIHdhaXRpbmch
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1bmxvY2tTbG93KCk7
CisgICAgfQorCisgICAgYm9vbCBpc0hlbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fd29yZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNMb2NrZWRCaXQ7Cisg
ICAgfQorCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aXNIZWxkKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJf
dCBpc0xvY2tlZEJpdCA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBpc1F1ZXVlTG9j
a2VkQml0ID0gMjsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHF1ZXVlSGVhZE1hc2sgPSAz
OworCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Nsb3coKTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CisKKyAgICBBdG9taWM8dWludHB0cl90PiBt
X3dvcmQ7Cit9OworCitjbGFzcyBMb2NrIDogcHVibGljIExvY2tCYXNlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShMb2NrKTsKK3B1YmxpYzoKKyAgICBMb2NrKCkKKyAgICB7CisgICAgICAg
IG1fd29yZC5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICB9Cit9Owor
Cit0eXBlZGVmIExvY2tCYXNlIFN0YXRpY0xvY2s7Cit0eXBlZGVmIExvY2tlcjxMb2NrQmFzZT4g
TG9ja0hvbGRlcjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U3RhdGljTG9j
azsKK3VzaW5nIFdURjo6TG9jazsKK3VzaW5nIFdURjo6TG9ja0hvbGRlcjsKKworI2VuZGlmIC8v
IFdURl9Mb2NrX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE4
ODE0NCkKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6OnJlbGVhc2UoTWV0
YUEKIAogQUxXQVlTX0lOTElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhc2UoTWV0YUFsbG9j
YXRvckhhbmRsZSogaGFuZGxlKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2Nr
KTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBpZiAoaGFuZGxlLT5zaXpl
SW5CeXRlcygpKSB7CiAgICAgICAgIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3koaGFuZGxlLT5zdGFy
dCgpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCkpOwogICAgICAgICBhZGRGcmVlU3BhY2VGcm9tUmVs
ZWFzZWRIYW5kbGUoaGFuZGxlLT5zdGFydCgpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCkpOwpAQCAt
OTEsNyArOTEsNyBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgCiB7
CiAgICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVzIDw9IG1fc2l6ZUluQnl0ZXMpOwogICAgIAotICAg
IFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CisgICAgTG9ja0hv
bGRlciBsb2NrZXIoJm1fYWxsb2NhdG9yLT5tX2xvY2spOwogCiAgICAgbmV3U2l6ZUluQnl0ZXMg
PSBtX2FsbG9jYXRvci0+cm91bmRVcChuZXdTaXplSW5CeXRlcyk7CiAgICAgCkBAIC0xNTAsNyAr
MTUwLDcgQEAgTWV0YUFsbG9jYXRvcjo6TWV0YUFsbG9jYXRvcihzaXplX3QgYWxsbwogCiBQYXNz
UmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVf
dCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9j
a2VyKCZtX2xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogCiAgICAgaWYg
KCFzaXplSW5CeXRlcykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTYsNyArMTk2LDcgQEAgUGFz
c1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsbwogCiBNZXRhQWxsb2NhdG9yOjpT
dGF0aXN0aWNzIE1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKCkKIHsKLSAgICBTcGlu
TG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9j
ayk7CiAgICAgU3RhdGlzdGljcyByZXN1bHQ7CiAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkID0g
bV9ieXRlc0FsbG9jYXRlZDsKICAgICByZXN1bHQuYnl0ZXNSZXNlcnZlZCA9IG1fYnl0ZXNSZXNl
cnZlZDsKQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFj
ZUZyb21SZWxlCiAKIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlc2hGcmVlU3BhY2Uodm9pZCog
c3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIo
Jm1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAgICAgbV9ieXRlc1Jl
c2VydmVkICs9IHNpemVJbkJ5dGVzOwogICAgIGFkZEZyZWVTcGFjZShzdGFydCwgc2l6ZUluQnl0
ZXMpOwogfQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlc2hG
cmVlU3BhY2Uodm8KIHNpemVfdCBNZXRhQWxsb2NhdG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUoKQog
ewogI2lmbmRlZiBOREVCVUcKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7Cisg
ICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CiAg
ICAgZm9yIChGcmVlU3BhY2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpcnN0KCk7
IG5vZGU7IG5vZGUgPSBub2RlLT5zdWNjZXNzb3IoKSkKICAgICAgICAgcmVzdWx0ICs9IG5vZGUt
Pm1fc2l6ZUluQnl0ZXM7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZpc2lvbiAxODgx
NDQpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDEzICszMSwxMyBAQAogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01l
dGFBbGxvY2F0b3JIYW5kbGUuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNs
dWRlIDx3dGYvUGFnZUJsb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9TcGluTG9jay5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMTgzLDcgKzE4Myw3
IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKICAgICBzaXplX3QgbV9i
eXRlc0NvbW1pdHRlZDsKICAgICAKLSAgICBTcGluTG9jayBtX2xvY2s7CisgICAgTG9jayBtX2xv
Y2s7CiAKICAgICBNZXRhQWxsb2NhdG9yVHJhY2tlciogbV90cmFja2VyOwogCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9TcGluTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NwaW5M
b2NrLmgJKHJldmlzaW9uIDE4ODE0NCkKKysrIFNvdXJjZS9XVEYvd3RmL1NwaW5Mb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDE2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCisvLyBT
cGluTG9jayBpcyBhIHZlcnkgc2ltcGxlIGxvY2sgaW1wbGVtZW50YXRpb24gdGhhdCBoYXMgZXh0
cmVtZWx5IGZhc3QgbG9jay91bmxvY2sgZm9yIHZlcnkgc21hbGwKKy8vIHVuY29udGVuZGVkIGNy
aXRpY2FsIHNlY3Rpb25zLiBIb3dldmVyLCBpdCB3aWxsIGV4aGliaXQgYmFkIHBlcmZvcm1hbmNl
IGRlZ3JhZGF0aW9uIHdoZW4gdGhlIGxvY2sKKy8vIGJlY29tZXMgY29udGVuZGVkOiB0aGUgdGhy
ZWFkIHRyeWluZyB0byBhY3F1aXJlIHRoZSBsb2NrIHdpbGwgc2ltcGx5IHdhc3RlIENQVSBjeWNs
ZXMuCisvLworLy8gRm9yIG1vc3QgKGFsbD8pIGxvY2tpbmcgdXNlIGNhc2VzLCBpdCdzIGJldHRl
ciB0byB1c2UgTG9jayAoc2VlIHd0Zi9Mb2NrLmgpLiBUaGF0IHVzZXMgb25seSBhIGJpdAorLy8g
bW9yZSBtZW1vcnkgKDggYnl0ZXMgaW5zdGVhZCBvZiA0IG9uIDY0LWJpdCksIGFuZCBpcyBvbmx5
IGEgYml0IHNsb3dlciBpbiB0aGUgdW5jb250ZW5kZWQgY2FzZQorLy8gKExvY2sgbmVlZHMgQ0FT
IHRvIHVubG9jaywgd2hpbGUgU3BpbkxvY2sgZG9lc24ndCksIGJ1dCB3aWxsIGJ1cm4gYSBsb3Qg
bGVzcyBDUFUgdGltZSAtIGZvciAxMAorLy8gdGhyZWFkcyBhY3F1aXJpbmcgYSA1MCBtaWNyb3Nl
Y29uZCBjcml0aWNhbCBzZWN0aW9uLCBMb2NrIHdpbGwgdXNlIHVwIHRvIDEwMHggbGVzcyBrZXJu
ZWwgQ1BVIHRpbWUKKy8vIHRoYW4gU3BpbkxvY2suCisKIC8vIFNwaW5Mb2NrQmFzZSBpcyBhIHN0
cnVjdCB3aXRob3V0IGFuIGV4cGxpY2l0bHkgZGVmaW5lZCBjb25zdHJ1Y3RvcnMgc28gdGhhdAog
Ly8gaXQgY2FuIGJlIGluaXRpYWxpemVkIGF0IGNvbXBpbGUgdGltZS4gU2VlIFN0YXRpY1NwaW5M
b2NrIGJlbG93Lgogc3RydWN0IFNwaW5Mb2NrQmFzZSB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmdQdGhyZWFkcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFk
aW5nUHRocmVhZHMuY3BwCShyZXZpc2lvbiAxODgxNDQpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmdQdGhyZWFkcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29k
QHJlYWt0aXguY29tKQogICogQ29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Ro
cmVhZGluZ1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2lu
LmNwcAkocmV2aXNpb24gMTg4MTQ0KQorKysgU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHJldmlzaW9uIDE4ODE0
NCkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImR0b2EuaCIKIAogI2lmIFVTRShXRUJfVEhS
RUFEKQotI2luY2x1ZGUgIlNwaW5Mb2NrLmgiCisjaW5jbHVkZSAiTG9jay5oIgogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmdJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZ0lt
cGwuY3BwCShyZXZpc2lvbiAxODgxNDQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0
cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvVVRGOC5oPgogCiAjaWYgVVNFKFdFQl9USFJFQUQpCi0jaW5jbHVkZSAiU3Bp
bkxvY2suaCIKKyNpbmNsdWRlICJMb2NrLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CkBA
IC00MiwxOCArNDIsMTggQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKICNpZiBVU0UoV0VC
X1RIUkVBRCkKIAotY2xhc3MgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgOiBwdWJsaWMgU3Bpbkxv
Y2tIb2xkZXIgeworY2xhc3MgQXRvbWljU3RyaW5nVGFibGVMb2NrZXIgOiBwdWJsaWMgTG9ja0hv
bGRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXRvbWljU3RyaW5nVGFibGVMb2NrZXIp
OwogCi0gICAgc3RhdGljIFN0YXRpY1NwaW5Mb2NrIHNfc3RyaW5nVGFibGVMb2NrOworICAgIHN0
YXRpYyBTdGF0aWNMb2NrIHNfc3RyaW5nVGFibGVMb2NrOwogcHVibGljOgogICAgIEF0b21pY1N0
cmluZ1RhYmxlTG9ja2VyKCkKLSAgICAgICAgOiBTcGluTG9ja0hvbGRlcigmc19zdHJpbmdUYWJs
ZUxvY2spCisgICAgICAgIDogTG9ja0hvbGRlcigmc19zdHJpbmdUYWJsZUxvY2spCiAgICAgewog
ICAgIH0KIH07CiAKLVN0YXRpY1NwaW5Mb2NrIEF0b21pY1N0cmluZ1RhYmxlTG9ja2VyOjpzX3N0
cmluZ1RhYmxlTG9jazsKK1N0YXRpY0xvY2sgQXRvbWljU3RyaW5nVGFibGVMb2NrZXI6OnNfc3Ry
aW5nVGFibGVMb2NrOwogCiAjZWxzZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODgxNDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MyBAQAorMjAxNS0wOC0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIExpZ2h0d2VpZ2h0IGxvY2tzIHNob3VsZCBiZSBhZGFwdGl2ZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTQ1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlw
dE9iamVjdC5tbToKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTV3JhcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjphZGRKU1dyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlSlNXcmFwcGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUpTV3JhcHBlcklmUmV0YWluQ291bnRPbmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpzZXRDdXJyZW50RnJhbWVCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpnZXRDdXJyZW50RnJhbWVCb3VuZHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3Mvd2FrL1dBS1dpbmRvdy5tbToKKyAgICAgICAgKC1bV0FLV2luZG93IHNldEV4cG9zZWRTY3Jv
bGxWaWV3UmVjdDpdKToKKyAgICAgICAgKC1bV0FLV2luZG93IGV4cG9zZWRTY3JvbGxWaWV3UmVj
dF0pOgorCiAyMDE1LTA4LTA2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAg
ICAgICBTaGFkb3dzIGRvbid0IGRyYXcgb24gZmlsbFRleHQgd2hlbiB1c2luZyBhIGdyYWRpZW50
IGZpbGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0
T2JqZWN0Lm1tCShyZXZpc2lvbiAxODgxNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQAog
I2ltcG9ydCA8cnVudGltZS9KU0xvY2suaD4KICNpbXBvcnQgPHJ1bnRpbWUvQ29tcGxldGlvbi5o
PgogI2ltcG9ydCA8cnVudGltZS9Db21wbGV0aW9uLmg+Ci0jaW1wb3J0IDx3dGYvU3BpbkxvY2su
aD4KKyNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CiAjaW1w
b3J0IDx3dGYvc3BpL2NvY29hL05TTWFwVGFibGVTUEkuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgpAQCAtNzIsMTIgKzcyLDEyIEBAIHVzaW5nIEpTQzo6bWFrZVNvdXJjZTsKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIE5TTWFwVGFibGUqIEpTV3JhcHBlckNhY2hlOwot
c3RhdGljIFN0YXRpY1NwaW5Mb2NrIHNwaW5Mb2NrOworc3RhdGljIFN0YXRpY0xvY2sgc3Bpbkxv
Y2s7CiAKIE5TT2JqZWN0KiBnZXRKU1dyYXBwZXIoSlNPYmplY3QqIGltcGwpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJnNwaW5Mb2Nr
KTsKKyAgICBMb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOwogCiAgICAgaWYgKCFKU1dyYXBw
ZXJDYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTg4LDcgKzg4LDcgQEAgTlNPYmplY3Qq
IGdldEpTV3JhcHBlcihKU09iamVjdCogaW1wbCkKIHZvaWQgYWRkSlNXcmFwcGVyKE5TT2JqZWN0
KiB3cmFwcGVyLCBKU09iamVjdCogaW1wbCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOworICAgIExvY2tIb2xkZXIg
aG9sZGVyKCZzcGluTG9jayk7CiAKICAgICBpZiAoIUpTV3JhcHBlckNhY2hlKQogICAgICAgICBK
U1dyYXBwZXJDYWNoZSA9IGNyZWF0ZVdyYXBwZXJDYWNoZSgpOwpAQCAtOTcsNyArOTcsNyBAQCB2
b2lkIGFkZEpTV3JhcHBlcihOU09iamVjdCogd3JhcHBlciwgSlNPCiAKIHZvaWQgcmVtb3ZlSlNX
cmFwcGVyKEpTT2JqZWN0KiBpbXBsKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmc3Bp
bkxvY2spOworICAgIExvY2tIb2xkZXIgaG9sZGVyKCZzcGluTG9jayk7CiAKICAgICBpZiAoIUpT
V3JhcHBlckNhY2hlKQogICAgICAgICByZXR1cm47CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBy
ZW1vdmVKU1dyYXBwZXIoSlNPYmplY3QqIGltcGwpCiAKIHN0YXRpYyB2b2lkIHJlbW92ZUpTV3Jh
cHBlcklmUmV0YWluQ291bnRPbmUoTlNPYmplY3QqIHdyYXBwZXIsIEpTT2JqZWN0KiBpbXBsKQog
ewotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOworICAgIExvY2tIb2xkZXIg
aG9sZGVyKCZzcGluTG9jayk7CiAKICAgICBpZiAoIUpTV3JhcHBlckNhY2hlKQogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMv
Q0FSaW5nQnVmZmVyLmNwcAkocmV2aXNpb24gMTg4MTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw3
ICsyMDAsNyBAQCBDQVJpbmdCdWZmZXI6OkVycm9yIENBUmluZ0J1ZmZlcjo6c3RvcmUoCiAKIHZv
aWQgQ0FSaW5nQnVmZmVyOjpzZXRDdXJyZW50RnJhbWVCb3VuZHModWludDY0X3Qgc3RhcnRUaW1l
LCB1aW50NjRfdCBlbmRUaW1lKQogewotICAgIEJ5dGVTcGluTG9ja2VyIGxvY2tlcihtX2N1cnJl
bnRGcmFtZUJvdW5kc0xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY3VycmVudEZyYW1l
Qm91bmRzTG9jayk7CiAgICAgdWludDMyX3QgbmV4dFB0ciA9IG1fdGltZUJvdW5kc1F1ZXVlUHRy
ICsgMTsKICAgICB1aW50MzJfdCBpbmRleCA9IG5leHRQdHIgJiBrR2VuZXJhbFJpbmdUaW1lQm91
bmRzUXVldWVNYXNrOwogCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBDQVJpbmdCdWZmZXI6OnNl
dEN1cnJlbnRGcmFtZUJvdW5kcwogCiB2b2lkIENBUmluZ0J1ZmZlcjo6Z2V0Q3VycmVudEZyYW1l
Qm91bmRzKHVpbnQ2NF90ICZzdGFydFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1lKQogewotICAgIEJ5
dGVTcGluTG9ja2VyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOworICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fY3VycmVudEZyYW1lQm91bmRzTG9jayk7CiAgICAgdWludDMyX3QgY3Vy
UHRyID0gbV90aW1lQm91bmRzUXVldWVQdHI7CiAgICAgdWludDMyX3QgaW5kZXggPSBjdXJQdHIg
JiBrR2VuZXJhbFJpbmdUaW1lQm91bmRzUXVldWVNYXNrOwogICAgIENBUmluZ0J1ZmZlcjo6VGlt
ZUJvdW5kcyYgYm91bmRzID0gbV90aW1lQm91bmRzUXVldWVbaW5kZXhdOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaAkocmV2aXNp
b24gMTg4MTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5BQkxFKFdFQl9B
VURJTykgJiYgVVNFKE1FRElBVE9PTEJPWCkKIAogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHR5cGVkZWYgc3RydWN0IEF1ZGlvQnVmZmVy
TGlzdCBBdWRpb0J1ZmZlckxpc3Q7CkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgfTsK
ICAgICAKICAgICBWZWN0b3I8VGltZUJvdW5kcz4gbV90aW1lQm91bmRzUXVldWU7Ci0gICAgQnl0
ZVNwaW5Mb2NrIG1fY3VycmVudEZyYW1lQm91bmRzTG9jazsKKyAgICBMb2NrIG1fY3VycmVudEZy
YW1lQm91bmRzTG9jazsKICAgICBpbnQzMl90IG1fdGltZUJvdW5kc1F1ZXVlUHRyOwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cubW0JKHJl
dmlzaW9uIDE4ODE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV0FLV2lu
ZG93Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW1wb3J0ICJXS0NvbnRl
bnRPYnNlcnZhdGlvbi5oIgogI2ltcG9ydCAiV0tWaWV3UHJpdmF0ZS5oIgogI2ltcG9ydCA8UXVh
cnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDx3dGYvU3BpbkxvY2suaD4KKyNpbXBvcnQg
PHd0Zi9Mb2NrLmg+CiAKIFdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICogY29uc3QgV0FLV2luZG93
U2NyZWVuU2NhbGVEaWRDaGFuZ2VOb3RpZmljYXRpb24gPSBAIldBS1dpbmRvd1NjcmVlblNjYWxl
RGlkQ2hhbmdlTm90aWZpY2F0aW9uIjsKIFdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICogY29uc3Qg
V0FLV2luZG93VmlzaWJpbGl0eURpZENoYW5nZU5vdGlmaWNhdGlvbiA9IEAiV0FLV2luZG93Vmlz
aWJpbGl0eURpZENoYW5nZU5vdGlmaWNhdGlvbiI7CkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyBX
ZWJFdmVudCAqY3VycmVudEV2ZW50ID0gbmlsOwogc3RhdGljIGlkPE9yaWVudGF0aW9uUHJvdmlk
ZXI+IGdPcmllbnRhdGlvblByb3ZpZGVyOwogCiBAaW1wbGVtZW50YXRpb24gV0FLV2luZG93IHsK
LSAgICBTcGluTG9jayBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0TG9jazsKKyAgICBMb2NrIF9leHBv
c2VkU2Nyb2xsVmlld1JlY3RMb2NrOwogICAgIENHUmVjdCBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0
OwogfQogCkBAIC0zNTgsMTQgKzM1OCwxNCBAQCAtICh2b2lkKXNlbmRNb3VzZU1vdmVFdmVudDoo
V2ViRXZlbnQgKilhCiAKIC0gKHZvaWQpc2V0RXhwb3NlZFNjcm9sbFZpZXdSZWN0OihDR1JlY3Qp
ZXhwb3NlZFNjcm9sbFZpZXdSZWN0CiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZfZXhw
b3NlZFNjcm9sbFZpZXdSZWN0TG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoJl9leHBvc2Vk
U2Nyb2xsVmlld1JlY3RMb2NrKTsKICAgICBfZXhwb3NlZFNjcm9sbFZpZXdSZWN0ID0gZXhwb3Nl
ZFNjcm9sbFZpZXdSZWN0OwogfQogCiAtIChDR1JlY3QpZXhwb3NlZFNjcm9sbFZpZXdSZWN0CiB7
CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJl9leHBvc2VkU2Nyb2xsVmll
d1JlY3RMb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoJl9leHBvc2VkU2Nyb2xsVmll
d1JlY3RMb2NrKTsKICAgICAgICAgaWYgKCFDR1JlY3RJc051bGwoX2V4cG9zZWRTY3JvbGxWaWV3
UmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gX2V4cG9zZWRTY3JvbGxWaWV3UmVjdDsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODgxNDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxNS0wOC0wNyAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIExpZ2h0d2VpZ2h0IGxvY2tzIHNo
b3VsZCBiZSBhZGFwdGl2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ3NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjpjbGVhclF1ZXVlZFRvdWNoRXZlbnRzRm9yUGFn
ZSk6CisgICAgICAgIChXZWJLaXQ6OkV2ZW50RGlzcGF0Y2hlcjo6Z2V0UXVldWVkVG91Y2hFdmVu
dHNGb3JQYWdlKToKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjp0b3VjaEV2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFRvdWNoRXZlbnRz
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Vmlld1VwZGF0ZURpc3BhdGNoZXI6OnZpc2libGVDb250ZW50UmVjdFVwZGF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdVcGRhdGVEaXNwYXRjaGVyOjpkaXNwYXRjaFZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdV
cGRhdGVEaXNwYXRjaGVyLmg6CisKIDIwMTUtMDgtMDcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgY29uY3JldGUgS2V5ZWREZWNvZGVyL0VuY29kZXIg
aW1wbGVtZW50YXRpb25zIHRvIFdlYkNvcmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAkocmV2aXNpb24gMTg4
MTQ0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MiwxMyArMTcyLDEzIEBAIHZvaWQgRXZlbnREaXNw
YXRjaGVyOjp3aGVlbEV2ZW50KHVpbnQ2NF8KICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
IHZvaWQgRXZlbnREaXNwYXRjaGVyOjpjbGVhclF1ZXVlZFRvdWNoRXZlbnRzRm9yUGFnZShjb25z
dCBXZWJQYWdlJiB3ZWJQYWdlKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90b3Vj
aEV2ZW50c0xvY2spOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7
CiAgICAgbV90b3VjaEV2ZW50cy5yZW1vdmUod2ViUGFnZS5wYWdlSUQoKSk7CiB9CiAKIHZvaWQg
RXZlbnREaXNwYXRjaGVyOjpnZXRRdWV1ZWRUb3VjaEV2ZW50c0ZvclBhZ2UoY29uc3QgV2ViUGFn
ZSYgd2ViUGFnZSwgVG91Y2hFdmVudFF1ZXVlJiBkZXN0aW5hdGlvblF1ZXVlKQogewotICAgIFNw
aW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xvY2spOworICAgIExvY2tIb2xkZXIg
bG9ja2VyKCZtX3RvdWNoRXZlbnRzTG9jayk7CiAgICAgZGVzdGluYXRpb25RdWV1ZSA9IG1fdG91
Y2hFdmVudHMudGFrZSh3ZWJQYWdlLnBhZ2VJRCgpKTsKIH0KIApAQCAtMTg2LDcgKzE4Niw3IEBA
IHZvaWQgRXZlbnREaXNwYXRjaGVyOjp0b3VjaEV2ZW50KHVpbnQ2NF8KIHsKICAgICBib29sIHVw
ZGF0ZUxpc3RXYXNFbXB0eTsKICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigm
bV90b3VjaEV2ZW50c0xvY2spOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2
ZW50c0xvY2spOwogICAgICAgICB1cGRhdGVMaXN0V2FzRW1wdHkgPSBtX3RvdWNoRXZlbnRzLmlz
RW1wdHkoKTsKICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3RvdWNoRXZlbnRzLmFkZChwYWdl
SUQsIFRvdWNoRXZlbnRRdWV1ZSgpKTsKICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5
KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFRvdWNo
RXZlbnQKIHsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBUb3VjaEV2ZW50UXVldWU+IGxvY2FsQ29w
eTsKICAgICB7Ci0gICAgICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xv
Y2spOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV90b3VjaEV2ZW50c0xvY2spOwogICAg
ICAgICBsb2NhbENvcHkuc3dhcChtX3RvdWNoRXZlbnRzKTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmgJ
KHJldmlzaW9uIDE4ODE0NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9F
dmVudERpc3BhdGNoZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQAogI2luY2x1
ZGUgPFdlYkV2ZW50Lmg+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1NwaW5Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OldoZWVsRXZlbnREZWx0YVRyYWNrZXI+IG1fcmVjZW50V2hlZWxFdmVudERlbHRhVHJh
Y2tlcjsKICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBTcGluTG9jayBtX3RvdWNo
RXZlbnRzTG9jazsKKyAgICBMb2NrIG1fdG91Y2hFdmVudHNMb2NrOwogICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFRvdWNoRXZlbnRRdWV1ZT4gbV90b3VjaEV2ZW50czsKICNlbmRpZgogfTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdV
cGRhdGVEaXNwYXRjaGVyLmNwcAkocmV2aXNpb24gMTg4MTQ0KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNyArNTgsNyBAQCB2b2lkIFZpZXdVcGRhdGVEaXNwYXRjaGVyOjp2aXNpYmxlQ29u
dGVuCiB7CiAgICAgYm9vbCB1cGRhdGVMaXN0V2FzRW1wdHk7CiAgICAgewotICAgICAgICBTcGlu
TG9ja0hvbGRlciBsb2NrZXIoJm1fZGF0YU11dGV4KTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fZGF0YU11dGV4KTsKICAgICAgICAgdXBkYXRlTGlzdFdhc0VtcHR5ID0gbV9sYXRlc3RV
cGRhdGUuaXNFbXB0eSgpOwogICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9sYXRlc3RVcGRhdGUu
ZmluZChwYWdlSUQpOwogICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV9sYXRlc3RVcGRhdGUuZW5k
KCkpCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgVmlld1VwZGF0ZURpc3BhdGNoZXI6OmRpc3BhdGNo
VmlzaWIKIHsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBVcGRhdGVEYXRhPiB1cGRhdGU7CiAgICAg
ewotICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fZGF0YU11dGV4KTsKKyAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIoJm1fZGF0YU11dGV4KTsKICAgICAgICAgdXBkYXRlID0gV1RGOjpt
b3ZlKG1fbGF0ZXN0VXBkYXRlKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5oCShyZXZp
c2lvbiAxODgxNDQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1Vw
ZGF0ZURpc3BhdGNoZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQAogCiAjaW5j
bHVkZSAiVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mby5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5j
bHVkZSA8d3RmL1NwaW5Mb2NrLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC01Nyw3ICs1
Nyw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7Ci0g
ICAgU3BpbkxvY2sgbV9kYXRhTXV0ZXg7CisgICAgTG9jayBtX2RhdGFNdXRleDsKICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBVcGRhdGVEYXRhPiBtX2xhdGVzdFVwZGF0ZTsKIH07CiAKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4
ODE0OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBA
CisyMDE1LTA4LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TGlnaHR3ZWlnaHQgbG9ja3Mgc2hvdWxkIGJlIGFkYXB0aXZlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1NDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBHZW9mZnJleSBHYXJlbi4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnZjeHByb2ovVGVzdFdl
YktpdEFQSS52Y3hwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0xvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnJ1bkxvY2tUZXN0
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE1LTA4LTA3ICBKb3NlcGgg
UGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgUnVubmluZyB0ZXN0cyBm
b3IgYSBsb25nIHRpbWUgcmVzdWx0cyBpbiBzb21lIHRlc3RzIHJ1bm5pbmcgdmVyeSBzbG93bHkg
KHRocm90dGxpbmcpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDE4ODE0NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDYgKzc1LDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdF
QktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNoU2V0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9E
SVJ9L1Rlc3RzL1dURi9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNwcAogICAgICR7VEVTVFdF
QktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9MaXN0SGFzaFNldC5jcHAKKyAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XVEYvTG9jay5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XVEYvTUQ1LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NYXRoRXh0
cmFzLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9NZWRpYVRpbWUuY3Bw
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0V2Vi
S2l0QVBJLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnZjeHByb2ovVGVzdFdlYktpdEFQSS52Y3hwcm9qCShyZXZpc2lvbiAxODgxNDQpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0V2ViS2l0QVBJ
LnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
dXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0
LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxk
LzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgogICAg
IDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z1N1ZmZpeHxXaW4zMiI+CkBAIC0z
MTksNiArMzE5LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxIYXNo
U2V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxJbnRlZ2Vy
VG9TdHJpbmdDb252ZXJzaW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRl
c3RzXFdURlxMaXN0SGFzaFNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxU
ZXN0c1xXVEZcTG9jay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xX
VEZcTUQ1LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxNYXRo
RXh0cmFzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxNZWRp
YVRpbWUuY3BwIiAvPgpAQCAtMzY1LDQgKzM2Niw0IEBACiAgIDxJbXBvcnQgUHJvamVjdD0iJChW
Q1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBM
YWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE4ODE0NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2
ICsxMSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGll
c0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87
IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29h
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlF
NzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gKi87IH07CiAJ
CTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCOTRB
NTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovOyB9
OworCQkwRkZDNDVBNjFCNzNFQkVCMDA4NUJENjIgLyogTG9jay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDNDVBNDFCNzNFQkUyMDA4NUJENjIg
LyogTG9jay5jcHAgKi87IH07CiAJCTFBMDJDODcwMTI1RDRDRkQwMEUzRjRCRCAvKiBmaW5kLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUEwMkM4NEIxMjVENEE1RTAwRTNGNEJEIC8qIGZpbmQuaHRtbCAqLzsgfTsKIAkJMUE1MEFBMjAx
QTJBNTFGQzAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNyZWF0ZS1wYWdlLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1MEFB
MUYxQTJBNEVBNTAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNyZWF0ZS1wYWdlLmh0bWwg
Ki87IH07CiAJCTFBNjM0NzlGMTgzRDcyQTQwMDVCMTcwNyAvKiBhbGwtY29udGVudC1pbi1vbmUt
aWZyYW1lLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNEM0QxOUIxN0IxQTdCMDAwQzdDNDE1IC8qIGFsbC1jb250ZW50LWluLW9uZS1p
ZnJhbWUuaHRtbCAqLzsgfTsKQEAgLTQyOCw2ICs0MjksNyBAQAogCQkwRjNCOTRBNTFBNzcyNjZD
MDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM2QzRDQjE0MTAyN0UwMDA1QjdGMEMg
LyogUmVkQmxhY2tUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlZEJsYWNrVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzZDNENF
MTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkZDNDVBNDFCNzNFQkUyMDA4NUJENjIgLyogTG9jay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQ0NjQwMTIxNjdBODMwNTAwMEJEMjE4IC8qIExheW91dFVuaXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0VW5pdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjNCMTEyMTVFNDVFQUIwMDIxMDA2OSAvKiBTYXR1
cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRCMTI1RDRBNUUwMEUzRjRCRCAvKiBmaW5kLmh0bWwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBmaW5kLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMDk2LDYgKzEwOTgsNyBAQAogCQkJCTI2QjJERkY4MTVCREU1OTkwMDRG
NjkxRCAvKiBIYXNoU2V0LmNwcCAqLywKIAkJCQkyNjZGQUZEMjE1RTU3NzUyMDBGNjFENUIgLyog
SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgKi8sCiAJCQkJMjYzMDBCMTcxNjc1NUNEOTAw
NjY4ODZEIC8qIExpc3RIYXNoU2V0LmNwcCAqLywKKwkJCQkwRkZDNDVBNDFCNzNFQkUyMDA4NUJE
NjIgLyogTG9jay5jcHAgKi8sCiAJCQkJQjQwMzlGOUMxNUU2RDhCMzAwNzI1NUQ2IC8qIE1hdGhF
eHRyYXMuY3BwICovLAogCQkJCUNENTM5M0M3MTc1N0JBOTcwMEMwNzEyMyAvKiBNRDUuY3BwICov
LAogCQkJCUNENTQ5N0IzMTU4NTdGMEMwMEI1QkMzMCAvKiBNZWRpYVRpbWUuY3BwICovLApAQCAt
MTU2Nyw2ICsxNTcwLDcgQEAKIAkJCQk3Q0NFN0VDOTFBNDExQTdFMDA0NDdDNEMgLyogUmVuZGVy
ZWRJbWFnZUZyb21ET01Ob2RlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQ0ExQTQxMUE3
RTAwNDQ3QzRDIC8qIFJlbmRlcmVkSW1hZ2VGcm9tRE9NUmFuZ2UubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1MUNEMUM2QzFCMzhDRTQzMDAxNDJDQTUgLyogTW9kYWxBbGVydHMubW0gaW4gU291cmNl
cyAqLywKKwkJCQkwRkZDNDVBNjFCNzNFQkVCMDA4NUJENjIgLyogTG9jay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3Q0NFN0YwRTFBNDExQUU2MDA0NDdDNEMgLyogUmVzaXplUmV2ZXJzZVBhZ2lu
YXRlZFdlYlZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEYxQTQxMUFFNjAwNDQ3
QzRDIC8qIFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0ND
RTdGMTAxQTQxMUFFNjAwNDQ3QzRDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFy
bHkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Mb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9M
b2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgTG9ja1R5cGU+Cit2b2lkIHJ1bkxvY2tUZXN0KHVuc2lnbmVkIG51bVRocmVhZEdy
b3VwcywgdW5zaWduZWQgbnVtVGhyZWFkc1Blckdyb3VwLCB1bnNpZ25lZCB3b3JrUGVyQ3JpdGlj
YWxTZWN0aW9uLCB1bnNpZ25lZCBudW1JdGVyYXRpb25zKQoreworICAgIHN0ZDo6dW5pcXVlX3B0
cjxMb2NrVHlwZVtdPiBsb2NrcyA9IHN0ZDo6bWFrZV91bmlxdWU8TG9ja1R5cGVbXT4obnVtVGhy
ZWFkR3JvdXBzKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8ZG91YmxlW10+IHdvcmRzID0gc3RkOjpt
YWtlX3VuaXF1ZTxkb3VibGVbXT4obnVtVGhyZWFkR3JvdXBzKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8VGhyZWFkSWRlbnRpZmllcltdPiB0aHJlYWRzID0gc3RkOjptYWtlX3VuaXF1ZTxUaHJlYWRJ
ZGVudGlmaWVyW10+KG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIHRocmVhZEdyb3VwSW5kZXggPSBudW1UaHJlYWRHcm91cHM7IHRocmVh
ZEdyb3VwSW5kZXgtLTspIHsKKyAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJbmRleF0gPSAwOwor
CisgICAgICAgIGZvciAodW5zaWduZWQgdGhyZWFkSW5kZXggPSBudW1UaHJlYWRzUGVyR3JvdXA7
IHRocmVhZEluZGV4LS07KSB7CisgICAgICAgICAgICB0aHJlYWRzW3RocmVhZEdyb3VwSW5kZXgg
KiBudW1UaHJlYWRzUGVyR3JvdXAgKyB0aHJlYWRJbmRleF0gPSBjcmVhdGVUaHJlYWQoCisgICAg
ICAgICAgICAgICAgIkJlbmNobWFyayB0aHJlYWQiLAorICAgICAgICAgICAgICAgIFt0aHJlYWRH
cm91cEluZGV4LCAmbG9ja3MsICZ3b3JkcywgbnVtSXRlcmF0aW9ucywgd29ya1BlckNyaXRpY2Fs
U2VjdGlvbl0gKCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1J
dGVyYXRpb25zOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2Nrc1t0aHJlYWRH
cm91cEluZGV4XS5sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uOyBqLS07KQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdKys7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsb2Nrc1t0aHJlYWRHcm91cEluZGV4XS51bmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNp
Z25lZCB0aHJlYWRJbmRleCA9IG51bVRocmVhZEdyb3VwcyAqIG51bVRocmVhZHNQZXJHcm91cDsg
dGhyZWFkSW5kZXgtLTspCisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZHNb
dGhyZWFkSW5kZXhdKTsKKworICAgIGRvdWJsZSBleHBlY3RlZCA9IDA7CisgICAgZm9yICh1aW50
NjRfdCBpID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bUl0ZXJhdGlvbnMpICogd29ya1BlckNy
aXRpY2FsU2VjdGlvbiAqIG51bVRocmVhZHNQZXJHcm91cDsgaS0tOykKKyAgICAgICAgZXhwZWN0
ZWQrKzsKKworICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3JvdXBJbmRleCA9IG51bVRocmVhZEdy
b3VwczsgdGhyZWFkR3JvdXBJbmRleC0tOykKKyAgICAgICAgRVhQRUNUX0VRKGV4cGVjdGVkLCB3
b3Jkc1t0aHJlYWRHcm91cEluZGV4XSk7Cit9CisKK1RFU1QoV1RGX0xvY2ssIFVuY29udGVudGVk
U2hvcnRTZWN0aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEsIDEsIDEwMDAwMDAw
KTsKK30KKworVEVTVChXVEZfTG9jaywgVW5jb250ZW50ZWRMb25nU2VjdGlvbikKK3sKKyAgICBy
dW5Mb2NrVGVzdDxMb2NrPigxLCAxLCAxMDAwMCwgMTAwMCk7Cit9CisKK1RFU1QoV1RGX0xvY2ss
IENvbnRlbnRlZFNob3J0U2VjdGlvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxMCwg
MSwgMTAwMDAwMDApOworfQorCitURVNUKFdURl9Mb2NrLCBDb250ZW50ZWRMb25nU2VjdGlvbikK
K3sKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKK30KKworVEVT
VChXVEZfTG9jaywgTWFueUNvbnRlbnRlZFNob3J0U2VjdGlvbnMpCit7CisgICAgcnVuTG9ja1Rl
c3Q8TG9jaz4oMTAsIDEwLCAxLCA1MDAwMDApOworfQorCitURVNUKFdURl9Mb2NrLCBNYW55Q29u
dGVudGVkTG9uZ1NlY3Rpb25zKQoreworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwgMTAw
MDAsIDEwMDApOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="283684"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>