<?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>22700</bug_id>
          
          <creation_ts>2008-12-05 16:40:29 -0800</creation_ts>
          <short_desc>ApplicationCache should have size limit</short_desc>
          <delta_ts>2009-07-24 02:12:38 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Aaron Golden">aegolden</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>agolden</cc>
    
    <cc>andersca</cc>
    
    <cc>andreip</cc>
    
    <cc>ap</cc>
    
    <cc>benm</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>michaeln</cc>
    
    <cc>mike</cc>
    
    <cc>pknight</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>101599</commentid>
    <comment_count>0</comment_count>
    <who name="Aaron Golden">aegolden</who>
    <bug_when>2008-12-05 16:40:29 -0800</bug_when>
    <thetext>Right now the offline application cache could grow arbitrarily large.  I think we need a mechanism to limit the size of the application cache to something reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101603</commentid>
    <comment_count>1</comment_count>
      <attachid>25801</attachid>
    <who name="Aaron Golden">aegolden</who>
    <bug_when>2008-12-05 16:56:08 -0800</bug_when>
    <thetext>Created attachment 25801
Patch to enforce size limit on app cache

This patch enforces a size limit on the application cache.  The limit will be either 1 / 32 times the size of the file system or 25% of the size of the remaining space available in the file system, whichever is smaller.  This will allow machines with larger hard drives to store larger application caches, but will prevent machines with large hard drives that happen to be almost out of space anyway from having unreasonably large application caches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102161</commentid>
    <comment_count>2</comment_count>
      <attachid>25801</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-10 14:56:25 -0800</bug_when>
    <thetext>Comment on attachment 25801
Patch to enforce size limit on app cache

&gt; +#include &lt;sys/statvfs.h&gt;

I don&apos;t believe that statvfs exists on all the platforms that WebKit supports, so the function to get this information needs to go into FileSystem.h in the platform directory.

&gt; +static long long _maximumCacheDatabaseSize(void)
&gt; +{
&gt; +    static long long maximumCacheDatabaseSize = -1LL;
&gt; +    if (maximumCacheDatabaseSize == -1LL) {
&gt; +    	struct statvfs statistics;
&gt; +    	if (!statvfs(&quot;/&quot;, &amp;statistics)) {
&gt; +            // Just for readability, pull the relevant bits out of the struct.
&gt; +            long long blocksOnFileSystem = statistics.f_blocks;
&gt; +            long long blocksAvailable = statistics.f_bavail;
&gt; +            long long blockSize = statistics.f_frsize;
&gt; +            
&gt; +            // We limit the cache size to the size of the file system divided by 32 or the size of the remaining
&gt; +            // free space in the file system divided by four, whichever is smaller.
&gt; +            maximumCacheDatabaseSize = MIN(blocksOnFileSystem * blockSize / 32LL, blocksAvailable * blockSize / 4LL);
&gt; +    	} else {
&gt; +            // Fallback strategy:  If for any reason statvfs fails then we will simply use an extremely
&gt; +            // conservative limit for the cache size, 256MB.
&gt; +            maximumCacheDatabaseSize = 256 * 1024 * 1024;
&gt; +        }
&gt; +    }
&gt; +    return maximumCacheDatabaseSize;
&gt; +}

We don&apos;t use underscores in our private function names.

There&apos;s a cleaner way to write this, which is:

    static long long calculateMaximumCacheDatabaseSize()
    {
        // code goes here; no need to use -1LL as a magic value
    }

    static long long maximumCacheDatabaseSize()
    {
        static long long size = calculateMaximumCacheDatabaseSize();
        return size;
    }

&gt; +        // If the cache has grown too large, wipe it out and start rebuilding.
&gt; +        long long fileSize = 0;
&gt; +        getFileSize(applicationCachePath, fileSize);
&gt; +        if (fileSize &gt; _maximumCacheDatabaseSize())
&gt; +            deleteFile(applicationCachePath);

Is wiping out the entire cache the policy we want? This could be really inconvenient if you&apos;re starting up the web browser and the application you expect to be present is entirely gone.

Can we do better?

review- because this needs to be written in a way that will not break compilation on platforms that don&apos;t have a &lt;sys/statvfs.h&gt; header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119094</commentid>
    <comment_count>3</comment_count>
      <attachid>29847</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-04-28 08:32:25 -0700</bug_when>
    <thetext>Created attachment 29847
New proposal to limit the maximum size of the application cache.

In this proposal, the maximum size of the application cache is decided by each ChromeClient implementation and is enforced using SQLiteDatabase::setMaximumSize();

When adding new caches or new resources to existing caches, and the database insertion fails due to reaching the maximum size, the old caches are removed from the database in LRU fashion. The number of caches to remove is determined based on an approximation of the space required to be freed in order to accommodate the new cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119095</commentid>
    <comment_count>4</comment_count>
      <attachid>29848</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-04-28 08:46:03 -0700</bug_when>
    <thetext>Created attachment 29848
New proposal to limit the maximum size of the application cache (take 2).

The previous patch (29847) had the wrong column name on the &quot;CREATE INDEX ON Caches&quot; statement in ApplicationCacheStorage.cpp:423. This new patch fixes that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119190</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-04-28 15:40:01 -0700</bug_when>
    <thetext>Some drive-by comments and questions...

* What happens if a cacheGroup that is in the act of being updated gets evicted? Maybe those not be subject to eviction?

* What precautions prevent the particular cache group that is being updated (or added to) and causing the need to evict something from being evicted itself?

* The eviction logic examines &apos;caches&apos; and decides which to boot, maybe this should look at &apos;cacheGroups&apos; instead.

* I&apos;m not sure if a partially updated caches are left around (after the network connection drops midway thru) and the update picks up where it left off upon the next attempt. If so, these partial updates could be the first to go without having to blow away the associated group altogether.

* Maybe the decision making about which cacheGroups to evict should be left to a delegate api provided by the embedding browser? The system currently has no way of determining which groups are more or less important (outside of LRU). I could see that being value added by host browsers.



</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119299</commentid>
    <comment_count>6</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-04-29 11:33:59 -0700</bug_when>
    <thetext>Thanks Michael,

(In reply to comment #5)
&gt; Some drive-by comments and questions...
&gt; 
&gt; * What happens if a cacheGroup that is in the act of being updated gets
&gt; evicted? Maybe those not be subject to eviction?
&gt; 

It seems that an update will simply create a new cache and set it as the &quot;newest cache&quot; for the group, while the old cache is obsoleted. If the update fails due to maximum size being reached, the insertion of this newest cache is rolled back. It could happen that, while trying to make some room for this new cache, the relevant group is wiped out. However, in such a case, it will simply be re-added once the insertion of the new cache is retried after the cache eviction is completed.

&gt; * What precautions prevent the particular cache group that is being updated (or
&gt; added to) and causing the need to evict something from being evicted itself?
&gt; 

If I understand the existing code right, adding a new cache group is an atomic operation. If it turns out that there isn&apos;t enough room for it, then all operations will be rolled back. When the eviction routine kicks in, it will not find this new cache group. As for updating and existing cache group, please see my answer above. I could be missing some edge case, though...

&gt; * The eviction logic examines &apos;caches&apos; and decides which to boot, maybe this
&gt; should look at &apos;cacheGroups&apos; instead.
&gt; 

Erm, why would that be better than looking at the caches?

&gt; * I&apos;m not sure if a partially updated caches are left around (after the network
&gt; connection drops midway thru) and the update picks up where it left off upon
&gt; the next attempt. If so, these partial updates could be the first to go without
&gt; having to blow away the associated group altogether.
&gt; 

As said above I don&apos;t think this is possible (unless I am missing something). The entire cache seems to be downloaded first and then saved, so you&apos;ll never have a partially updated cache in the database.

&gt; * Maybe the decision making about which cacheGroups to evict should be left to
&gt; a delegate api provided by the embedding browser? The system currently has no
&gt; way of determining which groups are more or less important (outside of LRU). I
&gt; could see that being value added by host browsers.
&gt; 

It could. However, the chromeclient (i.e. embedding browser) currently doesn&apos;t know when an application is being cached. I therefore don&apos;t know if it makes sense to ask it about which applications should be evicted either.

I&apos;ve also uploaded a new patch as I found a couple of problems with my last one:
- I wasn&apos;t updating EmptyClients.h so the build would break if SVG is enabled.
- the &quot;PRAGMA page_count&quot; was added only in SQLite 3.6.0 so in older versions getting the current size of the database that way will fail.

I&apos;d be grateful if you could have another look.

Thanks,
Andrei
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119300</commentid>
    <comment_count>7</comment_count>
      <attachid>29883</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-04-29 11:34:57 -0700</bug_when>
    <thetext>Created attachment 29883
New proposal to limit the maximum size of the application cache (take 3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119452</commentid>
    <comment_count>8</comment_count>
      <attachid>29909</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-04-30 05:12:54 -0700</bug_when>
    <thetext>Created attachment 29909
New proposal to limit the maximum size of the application cache (take 4).

While poking around the existing code, I found a bug that can cause a crash:

- in ApplicationCacheGroup.cpp:736 we have:

(...)
cacheStorage().storeNewestCache(this, maxAppCacheSize());
if (oldNewestCache)
    cacheStorage().remove(oldNewestCache.get());
postListenerTask(someSuccessCallback);
(...)

The problem with this is that the return value of cacheStorage().storeNewestCache() is never checked. If it fails (e.g. the user&apos;s data partition if full), the code should fire an error event and bail out. Instead, the existing newest cache is wiped out, thereby leaving an orphan cache group in the CachedGroups table. This orphan cache group now points to a non-existing &quot;newest cache&quot; so next time this group will be loaded, there will be no associated manifest resource and an assertion will fire in applicationcachegroup.cpp:597:

ApplicationCacheResource* newestManifest = m_newestCache-&gt;manifestResource();
ASSERT(newestManifest);

Rather than creating a separate bug for this, I thought I&apos;d fix it in the same patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119867</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-04 12:46:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/6283425&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119938</commentid>
    <comment_count>10</comment_count>
      <attachid>29909</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-05 01:58:55 -0700</bug_when>
    <thetext>Comment on attachment 29909
New proposal to limit the maximum size of the application cache (take 4).

Based IRC discussion, clearing the review flag for now. David Levin has provided a lot of style comments, and I have some concerns about whether LRU is an appropriate policy for the application cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119946</commentid>
    <comment_count>11</comment_count>
      <attachid>30016</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-05-05 04:09:56 -0700</bug_when>
    <thetext>Created attachment 30016
29909: New proposal to limit the maximum size of the application cache (take 5)

Fixes the style problems pointed out by David Levin. Will only set the review flag after the discussion on webkit-dev, which will hopefully clarify whether LRU is an appropriate behavior when the app cache is full.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120136</commentid>
    <comment_count>12</comment_count>
      <attachid>30016</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-05-06 13:37:22 -0700</bug_when>
    <thetext>Comment on attachment 30016
29909: New proposal to limit the maximum size of the application cache (take 5)

        
&gt; -    bool storeNewestCache(ApplicationCacheGroup*); // Updates the cache group, but doesn&apos;t remove old cache.
&gt; -    void store(ApplicationCacheResource*, ApplicationCache*);
&gt; +    bool storeNewestCache(ApplicationCacheGroup*, int64_t maxAppCacheSize); // Updates the cache group, but doesn&apos;t remove old cache.
&gt; +    void store(ApplicationCacheResource*, ApplicationCache*, int64_t maxAppCacheSize);
&gt;      bool storeUpdatedType(ApplicationCacheResource*, ApplicationCache*);

Can we avoid adding the maxAppCacheSize arguments here? Cache size should be reachable through the group or cache pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126451</commentid>
    <comment_count>13</comment_count>
      <attachid>31413</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-06-17 07:37:42 -0700</bug_when>
    <thetext>Created attachment 31413
New proposal to limit the maximum size of the application cache (take 6)

Based on the discussion at 

https://lists.webkit.org/pipermail/webkit-dev/2009-May/007560.html

I have removed the LRU mechanism. Instead, a ChromeClient callback is invoked
when the application cache max size is reached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127620</commentid>
    <comment_count>14</comment_count>
      <attachid>31413</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-06-23 04:19:11 -0700</bug_when>
    <thetext>Comment on attachment 31413
New proposal to limit the maximum size of the application cache (take 6)

&gt; +ChromeClient* ApplicationCacheGroup::client()
&gt; +{
&gt; +    ASSERT(m_frame);
&gt; +    return m_frame-&gt;page()-&gt;chrome()-&gt;client();
&gt; +}

Because m_frame can be null, it might make more sense to return null if !m_frame.  That at least warns consumers of this API that the client might not be there.

&gt; +int64_t ApplicationCacheResource::size()
&gt; +{
&gt; +    if (!m_size) {

WebKit prefers early exit to increasing nesting depth.  So, we&apos;d prefer:

if (m_size)
    return m_size;

&gt; +            m_size += (it-&gt;first.length() + it-&gt;second.length() + 2) * sizeof(UChar);

It would be good to name this magic constant 2.  I presume this is strlen(&quot;: &quot;)?

&gt; +        m_size += url().string().length() * sizeof(UChar);
&gt; +        m_size += sizeof(int); // response().m_httpStatusCode
&gt; +        m_size += response().url().string().length() * sizeof(UChar);
&gt; +        m_size += sizeof(unsigned); // dataId
&gt; +        m_size += response().mimeType().length() * sizeof(UChar);
&gt; +        m_size += response().textEncodingName().length() * sizeof(UChar);

This code is kind of ridiculous.  There must be a cleaner way to do this.  Do we really need to track the four bytes from the HTTP status code?

&gt; +        // Returns the maximum size (in bytes) of the application caches file.
&gt; +        virtual int64_t maxAppCacheSize() = 0;

Why is this a method on ChromeClient?  This seems more appropriate as a value on the Settings object.  ChromeClient is able showing UI elements that WebCore can&apos;t show itself (e.g., a JavaScript alert).

&gt; +        // Callback invoked when the application cache gets hits the maximum size.
&gt; +        // The chrome client would need to take some action such as evicting some
&gt; +        // old caches.
&gt; +        // spaceNeeded denotes the amount of space that would need to be freed
&gt; +        // in order for the operation that caused the out-of-space condition to
&gt; +        // succeed.
&gt; +        virtual void reachedMaxAppCacheSize(int64_t spaceNeeded) = 0;

Again, I don&apos;t think ChromeClient is the right place for this.  I suspect the FrameLoaderClient is more correct here.  Something like didReachMaxAppCacheSize.  You should check with Maciej to make sure you put this on the right client.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127621</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-06-23 04:20:36 -0700</bug_when>
    <thetext>In the next iteration, you might want to include some tests to exercise the new functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129417</commentid>
    <comment_count>16</comment_count>
      <attachid>32160</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-07-01 17:00:37 -0700</bug_when>
    <thetext>Created attachment 32160
New proposal to limit the maximum size of the application cache (take 7)

- Moved the setMaximumSize() method out of the ChromeClient interface
- The reachedMaximumSize() ChrimeClient callback is now invoked asynchronously
- After the callback is invoked, we retry to save the new (failed) cache.
- Added unit test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129421</commentid>
    <comment_count>17</comment_count>
      <attachid>32162</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-07-01 17:08:10 -0700</bug_when>
    <thetext>Created attachment 32162
New proposal to limit the maximum size of the application cache (take 7)

- Moved the setMaximumSize() method out of the ChromeClient interface
- The reachedMaximumSize() ChrimeClient callback is now invoked asynchronously
- After the callback is invoked, we retry to save the new (failed) cache.
- Added unit test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129423</commentid>
    <comment_count>18</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-07-01 17:13:26 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 31413 [review])
&gt; &gt; +ChromeClient* ApplicationCacheGroup::client()
&gt; &gt; +{
&gt; &gt; +    ASSERT(m_frame);
&gt; &gt; +    return m_frame-&gt;page()-&gt;chrome()-&gt;client();
&gt; &gt; +}
&gt; 
&gt; Because m_frame can be null, it might make more sense to return null if
&gt; !m_frame.  That at least warns consumers of this API that the client might not
&gt; be there.
&gt;

This method is no longer needed.
 
&gt; &gt; +int64_t ApplicationCacheResource::size()
&gt; &gt; +{
&gt; &gt; +    if (!m_size) {
&gt; 
&gt; WebKit prefers early exit to increasing nesting depth.  So, we&apos;d prefer:
&gt; 
&gt; if (m_size)
&gt;     return m_size;
&gt; 

Done.

&gt; &gt; +            m_size += (it-&gt;first.length() + it-&gt;second.length() + 2) * sizeof(UChar);
&gt; 
&gt; It would be good to name this magic constant 2.  I presume this is strlen(&quot;:
&gt; &quot;)?
&gt; 
&gt; &gt; +        m_size += url().string().length() * sizeof(UChar);
&gt; &gt; +        m_size += sizeof(int); // response().m_httpStatusCode
&gt; &gt; +        m_size += response().url().string().length() * sizeof(UChar);
&gt; &gt; +        m_size += sizeof(unsigned); // dataId
&gt; &gt; +        m_size += response().mimeType().length() * sizeof(UChar);
&gt; &gt; +        m_size += response().textEncodingName().length() * sizeof(UChar);
&gt; 
&gt; This code is kind of ridiculous.  There must be a cleaner way to do this.  Do
&gt; we really need to track the four bytes from the HTTP status code?
&gt;

This is the code that is used to save a resource to the app cache db. It therefore seems reasonable to also use it
for approximating the size of a resource. As discussed with Alexey on IRC, I added a comment in ApplicationCacheStorage.cpp to make sure that anyone who changes the code for saving a resource into the
database also changes this code.

 
&gt; &gt; +        // Returns the maximum size (in bytes) of the application caches file.
&gt; &gt; +        virtual int64_t maxAppCacheSize() = 0;
&gt; 
&gt; Why is this a method on ChromeClient?  This seems more appropriate as a value
&gt; on the Settings object.  ChromeClient is able showing UI elements that WebCore
&gt; can&apos;t show itself (e.g., a JavaScript alert).
&gt; 

Removed.

&gt; &gt; +        // Callback invoked when the application cache gets hits the maximum size.
&gt; &gt; +        // The chrome client would need to take some action such as evicting some
&gt; &gt; +        // old caches.
&gt; &gt; +        // spaceNeeded denotes the amount of space that would need to be freed
&gt; &gt; +        // in order for the operation that caused the out-of-space condition to
&gt; &gt; +        // succeed.
&gt; &gt; +        virtual void reachedMaxAppCacheSize(int64_t spaceNeeded) = 0;
&gt; 
&gt; Again, I don&apos;t think ChromeClient is the right place for this.  I suspect the
&gt; FrameLoaderClient is more correct here.  Something like
&gt; didReachMaxAppCacheSize.  You should check with Maciej to make sure you put
&gt; this on the right client.
&gt;

I disagree. I think this is the right place for this callback, just as the Storage module has defined a similar callback for the situation when an origin hits its quota. A ChromeClient implementation may wish to display some UI that allows
the user to free some space, so having this callback here seems correct.
 
Thanks,
Andrei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129424</commentid>
    <comment_count>19</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-07-01 17:14:43 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; In the next iteration, you might want to include some tests to exercise the new
&gt; functionality.
&gt; 

Done. Unfortunately, this required quite a few extra changes to the LayoutTestController and WebKit/mac/WebCoreSupport, which made this patch even bigger...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130778</commentid>
    <comment_count>20</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-07-09 17:36:25 -0700</bug_when>
    <thetext>Ping</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130842</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-09 23:20:25 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Ping

Since the previous round of reviews, I&apos;ve decided that I should be more conservative in what patches I review.  My experience with this area of the code is such that the project would benefit from my deferring to other reviewers.

I realize you might find this a bit frustrating.  You&apos;ve certainly put a lot of effort into this patch, and it&apos;s clearly functionality we should support.  Ultimately, it&apos;s important to consider the bigger picture and respect the processes that have made WebKit successful.

ap or andersca, would you be willing to review this patch?

Thanks,
Adam</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130885</commentid>
    <comment_count>22</comment_count>
      <attachid>32162</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-10 09:38:13 -0700</bug_when>
    <thetext>Comment on attachment 32162
New proposal to limit the maximum size of the application cache (take 7)

&gt; +        * loader/appcache/ApplicationCache.cpp:
&gt; +        * loader/appcache/ApplicationCache.h:
&gt; +        Adds the ability to calculate the approximate size of an ApplicationCache object.

I think that the data member and accessor naming should make it clear how the data relates to reality (size() is not a great name for approximate/estimated size).

&gt; +    , m_calledChromeClient(false)

This is a super confusing name. What method was called? Why was it called? Was it at any point in the past, or in some time range we care about?

&gt; +    m_frame-&gt;page()-&gt;chrome()-&gt;client()-&gt;reachedMaxAppCacheSize(cacheStorage().spaceNeeded(m_cacheBeingUpdated-&gt;size()));
&gt; +    m_calledChromeClient = true;
&gt; +    checkIfLoadIsComplete();

The synchronous call to client matches how it is done for database quotas, but in the grand scheme of things, I&apos;m not sure if WebCore should be blocked while waiting for the UI here.

&gt; +            // the maximum size. In such a case, m_manifestResource may be NULL, as

We do not use NULL in code, so using it in comments isn&apos;t appropriate either. I suggest lower case &quot;null&quot; or 0.

&gt; +class ChromeClientCallbackTimer: public TimerBase {
...
&gt; +    ApplicationCacheGroup* m_cacheGroup;

A comment explaining why m_cacheGroup won&apos;t be deleted before the timer fires would help.

&gt; +void ApplicationCacheGroup::scheduleReachedMaxAppCacheSize()

Looks like a noun is missing in this name (&quot;callback&quot;?).

&gt; +class ChromeClientCallbackTimer;

I don&apos;t think you need a forward declaration here - a friend declaration should be sufficient.

&gt; +#include &lt;sqlite3.h&gt;

ApplicationCacheStorage shouldn&apos;t be talking to SQLite directly.
&gt;          unsigned newestCacheID = static_cast&lt;unsigned&gt;(statement.getColumnInt64(2));
&gt;          RefPtr&lt;ApplicationCache&gt; cache = loadCache(newestCacheID);
&gt; +        if (!cache)
&gt; +            continue;

When can this fail? Wouldn&apos;t it mean that we left the disk database in inconsistent state?

&gt; +        // Callback invoked when the application cache gets hits the maximum size.

s/gets//. But also, is this comment 100% correct? I&apos;d expect it to be called when something doesn&apos;t fit.

&gt; +        // spaceNeeded denotes the amount of space that would need to be freed
&gt; +        // in order for the operation that caused the out-of-space condition to
&gt; +        // succeed.

That part seems obvious from argument name, I&apos;d just drop it.

This looks pretty close to being ready to me. It would be great if Anders took a look, too - especially at ApplicationCacheStorage.cpp changes, which I didn&apos;t study very closely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131545</commentid>
    <comment_count>23</comment_count>
      <attachid>32709</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-07-14 06:41:18 -0700</bug_when>
    <thetext>Created attachment 32709
New proposal to limit the maximum size of the application cache (take 8)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131548</commentid>
    <comment_count>24</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-07-14 06:50:11 -0700</bug_when>
    <thetext>Hi Alexey,

Thanks for the comments!

(In reply to comment #22)
&gt; (From update of attachment 32162 [details])
&gt; &gt; +        * loader/appcache/ApplicationCache.cpp:
&gt; &gt; +        * loader/appcache/ApplicationCache.h:
&gt; &gt; +        Adds the ability to calculate the approximate size of an ApplicationCache object.
&gt; 
&gt; I think that the data member and accessor naming should make it clear how the
&gt; data relates to reality (size() is not a great name for approximate/estimated
&gt; size).
&gt;

Done.
 
&gt; &gt; +    , m_calledChromeClient(false)
&gt; 
&gt; This is a super confusing name. What method was called? Why was it called? Was
&gt; it at any point in the past, or in some time range we care about?
&gt;

Changed the name and added a comment that explains when this flag is set, used and reset.
 
&gt; &gt; +    m_frame-&gt;page()-&gt;chrome()-&gt;client()-&gt;reachedMaxAppCacheSize(cacheStorage().spaceNeeded(m_cacheBeingUpdated-&gt;size()));
&gt; &gt; +    m_calledChromeClient = true;
&gt; &gt; +    checkIfLoadIsComplete();
&gt; 
&gt; The synchronous call to client matches how it is done for database quotas, but
&gt; in the grand scheme of things, I&apos;m not sure if WebCore should be blocked while
&gt; waiting for the UI here.
&gt; 

I agree with you. Given the size of this patch, would it be ok with you to land it &apos;as is&apos; and then fix this issue in a separate patch?


&gt; &gt; +            // the maximum size. In such a case, m_manifestResource may be NULL, as
&gt; 
&gt; We do not use NULL in code, so using it in comments isn&apos;t appropriate either. I
&gt; suggest lower case &quot;null&quot; or 0.
&gt; 

Fixed.

&gt; &gt; +class ChromeClientCallbackTimer: public TimerBase {
&gt; ...
&gt; &gt; +    ApplicationCacheGroup* m_cacheGroup;
&gt; 
&gt; A comment explaining why m_cacheGroup won&apos;t be deleted before the timer fires
&gt; would help.
&gt;

Added.
 
&gt; &gt; +void ApplicationCacheGroup::scheduleReachedMaxAppCacheSize()
&gt; 
&gt; Looks like a noun is missing in this name (&quot;callback&quot;?).
&gt;

Yep, added.
 
&gt; &gt; +class ChromeClientCallbackTimer;
&gt; 
&gt; I don&apos;t think you need a forward declaration here - a friend declaration should
&gt; be sufficient.
&gt;

True, removed fwd declaration.
 
&gt; &gt; +#include &lt;sqlite3.h&gt;
&gt; 
&gt; ApplicationCacheStorage shouldn&apos;t be talking to SQLite directly.

Fixed.

&gt; &gt;          unsigned newestCacheID = static_cast&lt;unsigned&gt;(statement.getColumnInt64(2));
&gt; &gt;          RefPtr&lt;ApplicationCache&gt; cache = loadCache(newestCacheID);
&gt; &gt; +        if (!cache)
&gt; &gt; +            continue;
&gt; 
&gt; When can this fail? Wouldn&apos;t it mean that we left the disk database in
&gt; inconsistent state?
&gt; 

It can fail if SQLite fails for whatever reason. It cannot leave the disk database in an inconsistent state since loadCache doesn&apos;t write anything to the database. The pattern of checking the result of loadCache() was the same everywhere else: check the result and bail out if null. Here, the check was missing and I think this was a simple omission so I merely fixed it to match the existing pattern. 

Also, I think that &apos;continue;&apos; is the right thing to do. We are in the cache selection algorithm so if we cannot load a cache, we simply ignore it and move to the next group.

&gt; &gt; +        // Callback invoked when the application cache gets hits the maximum size.
&gt; 
&gt; s/gets//. But also, is this comment 100% correct? I&apos;d expect it to be called
&gt; when something doesn&apos;t fit.
&gt; 

Right. Changed the comment.

&gt; &gt; +        // spaceNeeded denotes the amount of space that would need to be freed
&gt; &gt; +        // in order for the operation that caused the out-of-space condition to
&gt; &gt; +        // succeed.
&gt; 
&gt; That part seems obvious from argument name, I&apos;d just drop it.
&gt;

Dropped.
 
&gt; This looks pretty close to being ready to me. It would be great if Anders took
&gt; a look, too - especially at ApplicationCacheStorage.cpp changes, which I didn&apos;t
&gt; study very closely.

Thanks again. I have uploaded a new patch.

Andrei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132320</commentid>
    <comment_count>25</comment_count>
      <attachid>32709</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-16 12:40:38 -0700</bug_when>
    <thetext>Comment on attachment 32709
New proposal to limit the maximum size of the application cache (take 8)

&gt; +        https://bugs.webkit.org/show_bug.cgi?id=22700
&gt; +
&gt; +        https://lists.webkit.org/pipermail/webkit-dev/2009-May/007560.html

We usually put bug title after its URL in ChangeLogs.

&gt; +    , m_estimatedSizeInDatabase(0)

I don&apos;t think that Database is the right word here - do we use it elsewhere in appcache interface? I&apos;d prefer &quot;OnDisk&quot; or &quot;InStorage&quot;.
&gt; +    // Note that there is no need to use a RefPtr here.
&gt; +    // The ApplicationCacheGroup instance is guaranteed
&gt; +    // to be alive when the timer fires since invoking
&gt; +    // the ChromeClient callback is part of its normal
&gt; +    // update machinery and nothing can yet cause it to
&gt; +    // get deleted.
&gt; +    ApplicationCacheGroup* m_cacheGroup;

You could make lines longer (I&apos;m not sure if there&apos;s an official recommendation, but we certainly don&apos;t wrap at 80 characters). Due to its vertical size, this comment looks more important than it is - I usually expect that six-line comments describe architecture.

&gt; +    // This flag is set immediately after the ChromeClient::reachedMaxAppCacheSize()
&gt; +    // callback is invoked as a result of the storage layer failing to save a cache
&gt; +    // due to reaching the maximum size of the application cache database file.
&gt; +    // This flag is used by ApplicationCacheGroup::checkIfLoadIsComplete() to decide
&gt; +    // the course of action in case of this failure (i.e. call the ChromeClient
&gt; +    // callback or run the failure steps).
&gt; +    // This flag is reset in ApplicationCacheGroup::checkIfLoadIsComplete().
&gt; +    bool m_calledReachedMaxAppCacheSize;

Ditto. I&apos;m not sure if this even needs a comment in header.

&gt; @@ -35,6 +35,7 @@ ApplicationCacheResource::ApplicationCac
&gt;      : SubstituteResource(url, response, data)
&gt;      , m_type(type)
&gt;      , m_storageID(0)
&gt; +    , m_size(0)
&gt;  {
&gt;  }

Is resource size exact, or also an estimate?
&gt; +     while (selectURLs.step() == SQLResultRow)
&gt; +        urls-&gt;append(selectURLs.getColumnText(0));

Too much indent before &quot;while&quot;.

&gt; +    if (!m_database.isOpen())
&gt; +       return false;

Too little before &quot;return&quot;.


Anders may have more comments about the SQL part of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132321</commentid>
    <comment_count>26</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-16 12:41:32 -0700</bug_when>
    <thetext>(in case it wasn&apos;t obvious from the comments, I&apos;m fine with the patch as is).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132337</commentid>
    <comment_count>27</comment_count>
      <attachid>32891</attachid>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-07-16 14:10:33 -0700</bug_when>
    <thetext>Created attachment 32891
New proposal to limit the maximum size of the application cache (take 9)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132338</commentid>
    <comment_count>28</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-07-16 14:14:33 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 32709 [details])
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=22700
&gt; &gt; +
&gt; &gt; +        https://lists.webkit.org/pipermail/webkit-dev/2009-May/007560.html
&gt; 
&gt; We usually put bug title after its URL in ChangeLogs.
&gt; 

Added.

&gt; &gt; +    , m_estimatedSizeInDatabase(0)
&gt; 
&gt; I don&apos;t think that Database is the right word here - do we use it elsewhere in
&gt; appcache interface? I&apos;d prefer &quot;OnDisk&quot; or &quot;InStorage&quot;.

True, we don&apos;t use it elsewhere. For consistency, I used &apos;InStorage&quot;.

&gt; &gt; +    // Note that there is no need to use a RefPtr here.
&gt; &gt; +    // The ApplicationCacheGroup instance is guaranteed
&gt; &gt; +    // to be alive when the timer fires since invoking
&gt; &gt; +    // the ChromeClient callback is part of its normal
&gt; &gt; +    // update machinery and nothing can yet cause it to
&gt; &gt; +    // get deleted.
&gt; &gt; +    ApplicationCacheGroup* m_cacheGroup;
&gt; 
&gt; You could make lines longer (I&apos;m not sure if there&apos;s an official
&gt; recommendation, but we certainly don&apos;t wrap at 80 characters). Due to its
&gt; vertical size, this comment looks more important than it is - I usually expect
&gt; that six-line comments describe architecture.
&gt; 

Made longer.

&gt; &gt; +    // This flag is set immediately after the ChromeClient::reachedMaxAppCacheSize()
&gt; &gt; +    // callback is invoked as a result of the storage layer failing to save a cache
&gt; &gt; +    // due to reaching the maximum size of the application cache database file.
&gt; &gt; +    // This flag is used by ApplicationCacheGroup::checkIfLoadIsComplete() to decide
&gt; &gt; +    // the course of action in case of this failure (i.e. call the ChromeClient
&gt; &gt; +    // callback or run the failure steps).
&gt; &gt; +    // This flag is reset in ApplicationCacheGroup::checkIfLoadIsComplete().
&gt; &gt; +    bool m_calledReachedMaxAppCacheSize;
&gt; 
&gt; Ditto. I&apos;m not sure if this even needs a comment in header.
&gt;

Made longer (and a bit shorter, too) so I left it in.

&gt; &gt; @@ -35,6 +35,7 @@ ApplicationCacheResource::ApplicationCac
&gt; &gt;      : SubstituteResource(url, response, data)
&gt; &gt;      , m_type(type)
&gt; &gt;      , m_storageID(0)
&gt; &gt; +    , m_size(0)
&gt; &gt;  {
&gt; &gt;  }
&gt; 
&gt; Is resource size exact, or also an estimate?

Oh, it&apos;s an estimate as well. Renamed.

&gt; &gt; +     while (selectURLs.step() == SQLResultRow)
&gt; &gt; +        urls-&gt;append(selectURLs.getColumnText(0));
&gt; 
&gt; Too much indent before &quot;while&quot;.
&gt; 

Fixed.

&gt; &gt; +    if (!m_database.isOpen())
&gt; &gt; +       return false;
&gt; 
&gt; Too little before &quot;return&quot;.
&gt;

Fixed.
 
&gt; 
&gt; Anders may have more comments about the SQL part of this patch.

I also tried pinging Anders a while ago but without success...

Many thanks,
Andrei</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132341</commentid>
    <comment_count>29</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2009-07-16 14:17:44 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #25)
&gt;
&gt; Made longer (and a bit shorter, too) so I left it in.
&gt; 

Heh, what I mean is that I made the lines longer but I also made the comment more concise :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132714</commentid>
    <comment_count>30</comment_count>
      <attachid>32891</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2009-07-17 14:41:02 -0700</bug_when>
    <thetext>Comment on attachment 32891
New proposal to limit the maximum size of the application cache (take 9)

SQL/storage parts look fine by me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134456</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-24 01:34:30 -0700</bug_when>
    <thetext>Will land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134467</commentid>
    <comment_count>32</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-24 02:12:38 -0700</bug_when>
    <thetext>Sending        LayoutTests/ChangeLog
Adding         LayoutTests/http/tests/appcache/max-size-expected.txt
Adding         LayoutTests/http/tests/appcache/max-size.html
Adding         LayoutTests/http/tests/appcache/resources/maxsize.manifest
Sending        WebCore/ChangeLog
Sending        WebCore/WebCore.base.exp
Sending        WebCore/loader/EmptyClients.h
Sending        WebCore/loader/appcache/ApplicationCache.cpp
Sending        WebCore/loader/appcache/ApplicationCache.h
Sending        WebCore/loader/appcache/ApplicationCacheGroup.cpp
Sending        WebCore/loader/appcache/ApplicationCacheGroup.h
Sending        WebCore/loader/appcache/ApplicationCacheResource.cpp
Sending        WebCore/loader/appcache/ApplicationCacheResource.h
Sending        WebCore/loader/appcache/ApplicationCacheStorage.cpp
Sending        WebCore/loader/appcache/ApplicationCacheStorage.h
Sending        WebCore/page/ChromeClient.h
Sending        WebCore/platform/sql/SQLiteDatabase.cpp
Sending        WebCore/platform/sql/SQLiteDatabase.h
Sending        WebKit/ChangeLog
Sending        WebKit/WebKit.xcodeproj/project.pbxproj
Sending        WebKit/gtk/ChangeLog
Sending        WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
Sending        WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
Sending        WebKit/mac/ChangeLog
Adding         WebKit/mac/WebCoreSupport/WebApplicationCache.h
Adding         WebKit/mac/WebCoreSupport/WebApplicationCache.mm
Sending        WebKit/mac/WebCoreSupport/WebChromeClient.h
Sending        WebKit/mac/WebCoreSupport/WebChromeClient.mm
Sending        WebKit/mac/WebKit.exp
Sending        WebKit/qt/ChangeLog
Sending        WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
Sending        WebKit/qt/WebCoreSupport/ChromeClientQt.h
Sending        WebKit/win/ChangeLog
Sending        WebKit/win/WebCoreSupport/WebChromeClient.cpp
Sending        WebKit/win/WebCoreSupport/WebChromeClient.h
Sending        WebKit/wx/ChangeLog
Sending        WebKit/wx/WebKitSupport/ChromeClientWx.cpp
Sending        WebKit/wx/WebKitSupport/ChromeClientWx.h
Sending        WebKitTools/ChangeLog
Sending        WebKitTools/DumpRenderTree/LayoutTestController.cpp
Sending        WebKitTools/DumpRenderTree/LayoutTestController.h
Sending        WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
Sending        WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm
Sending        WebKitTools/DumpRenderTree/win/LayoutTestControllerWin.cpp
Sending        WebKitTools/DumpRenderTree/wx/LayoutTestControllerWx.cpp
Transmitting file data .............................................
Committed revision 46344.
http://trac.webkit.org/changeset/46344</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25801</attachid>
            <date>2008-12-05 16:56:08 -0800</date>
            <delta_ts>2008-12-10 14:56:25 -0800</delta_ts>
            <desc>Patch to enforce size limit on app cache</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>2452</size>
            <attacher name="Aaron Golden">aegolden</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZS5jcHAJKHJldmlzaW9uIDM5MDU0KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3
IEBACiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMaXRlVHJhbnNh
Y3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8c3lzL3N0
YXR2ZnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yNTcsNiArMjU4LDI5IEBACiAg
ICAgY3JlYXRlU2NoZW1hVmVyc2lvblRhYmxlLmNvbW1pdCgpOwogfQogICAgIAorc3RhdGljIGxv
bmcgbG9uZyBfbWF4aW11bUNhY2hlRGF0YWJhc2VTaXplKHZvaWQpCit7CisgICAgc3RhdGljIGxv
bmcgbG9uZyBtYXhpbXVtQ2FjaGVEYXRhYmFzZVNpemUgPSAtMUxMOworICAgIGlmIChtYXhpbXVt
Q2FjaGVEYXRhYmFzZVNpemUgPT0gLTFMTCkgeworICAgIAlzdHJ1Y3Qgc3RhdHZmcyBzdGF0aXN0
aWNzOworICAgIAlpZiAoIXN0YXR2ZnMoIi8iLCAmc3RhdGlzdGljcykpIHsKKyAgICAgICAgICAg
IC8vIEp1c3QgZm9yIHJlYWRhYmlsaXR5LCBwdWxsIHRoZSByZWxldmFudCBiaXRzIG91dCBvZiB0
aGUgc3RydWN0LgorICAgICAgICAgICAgbG9uZyBsb25nIGJsb2Nrc09uRmlsZVN5c3RlbSA9IHN0
YXRpc3RpY3MuZl9ibG9ja3M7CisgICAgICAgICAgICBsb25nIGxvbmcgYmxvY2tzQXZhaWxhYmxl
ID0gc3RhdGlzdGljcy5mX2JhdmFpbDsKKyAgICAgICAgICAgIGxvbmcgbG9uZyBibG9ja1NpemUg
PSBzdGF0aXN0aWNzLmZfZnJzaXplOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBs
aW1pdCB0aGUgY2FjaGUgc2l6ZSB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBzeXN0ZW0gZGl2aWRl
ZCBieSAzMiBvciB0aGUgc2l6ZSBvZiB0aGUgcmVtYWluaW5nCisgICAgICAgICAgICAvLyBmcmVl
IHNwYWNlIGluIHRoZSBmaWxlIHN5c3RlbSBkaXZpZGVkIGJ5IGZvdXIsIHdoaWNoZXZlciBpcyBz
bWFsbGVyLgorICAgICAgICAgICAgbWF4aW11bUNhY2hlRGF0YWJhc2VTaXplID0gTUlOKGJsb2Nr
c09uRmlsZVN5c3RlbSAqIGJsb2NrU2l6ZSAvIDMyTEwsIGJsb2Nrc0F2YWlsYWJsZSAqIGJsb2Nr
U2l6ZSAvIDRMTCk7CisgICAgCX0gZWxzZSB7CisgICAgICAgICAgICAvLyBGYWxsYmFjayBzdHJh
dGVneTogIElmIGZvciBhbnkgcmVhc29uIHN0YXR2ZnMgZmFpbHMgdGhlbiB3ZSB3aWxsIHNpbXBs
eSB1c2UgYW4gZXh0cmVtZWx5CisgICAgICAgICAgICAvLyBjb25zZXJ2YXRpdmUgbGltaXQgZm9y
IHRoZSBjYWNoZSBzaXplLCAyNTZNQi4KKyAgICAgICAgICAgIG1heGltdW1DYWNoZURhdGFiYXNl
U2l6ZSA9IDI1NiAqIDEwMjQgKiAxMDI0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBt
YXhpbXVtQ2FjaGVEYXRhYmFzZVNpemU7Cit9CisKIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6Om9wZW5EYXRhYmFzZShib29sIGNyZWF0ZUlmRG9lc05vdEV4aXN0KQogewogICAgIGlmICht
X2RhdGFiYXNlLmlzT3BlbigpKQpAQCAtMjY3LDkgKzI5MSwxOCBAQAogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgU3RyaW5nIGFwcGxpY2F0aW9uQ2FjaGVQYXRoID0gcGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KG1fY2FjaGVEaXJlY3RvcnksICJBcHBsaWNhdGlvbkNhY2hlLmRiIik7Ci0gICAg
aWYgKCFjcmVhdGVJZkRvZXNOb3RFeGlzdCAmJiAhZmlsZUV4aXN0cyhhcHBsaWNhdGlvbkNhY2hl
UGF0aCkpCisgICAgYm9vbCBleGlzdHMgPSBmaWxlRXhpc3RzKGFwcGxpY2F0aW9uQ2FjaGVQYXRo
KTsKKyAgICBpZiAoIWNyZWF0ZUlmRG9lc05vdEV4aXN0ICYmICFleGlzdHMpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGlmIChleGlzdHMpIHsKKyAgICAgICAgLy8gSWYgdGhlIGNhY2hlIGhhcyBn
cm93biB0b28gbGFyZ2UsIHdpcGUgaXQgb3V0IGFuZCBzdGFydCByZWJ1aWxkaW5nLgorICAgICAg
ICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAgICAgICBnZXRGaWxlU2l6ZShhcHBsaWNhdGlv
bkNhY2hlUGF0aCwgZmlsZVNpemUpOworICAgICAgICBpZiAoZmlsZVNpemUgPiBfbWF4aW11bUNh
Y2hlRGF0YWJhc2VTaXplKCkpCisgICAgICAgICAgICBkZWxldGVGaWxlKGFwcGxpY2F0aW9uQ2Fj
aGVQYXRoKTsKKyAgICB9CisgICAgCiAgICAgbWFrZUFsbERpcmVjdG9yaWVzKG1fY2FjaGVEaXJl
Y3RvcnkpOwogICAgIG1fZGF0YWJhc2Uub3BlbihhcHBsaWNhdGlvbkNhY2hlUGF0aCk7CiAgICAg
Cg==
</data>
<flag name="review"
          id="12086"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29847</attachid>
            <date>2009-04-28 08:32:25 -0700</date>
            <delta_ts>2009-04-28 08:46:03 -0700</delta_ts>
            <desc>New proposal to limit the maximum size of the application cache.</desc>
            <filename>appcache.patch</filename>
            <type>text/plain</type>
            <size>33651</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjkzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDktMDQtMjggIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IExpbWl0cyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBhbmQKKwll
eHBpcmVzIG9sZCBjYWNoZXMgaW4gTFJVIGZhc2hpb24gd2hlbiB0aGUgbWF4aW11bQorCXNpemUg
aXMgcmVhY2hlZC4KKwkKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmFkZFJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmNlKToKKyAg
ICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZTo6c2l6ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSXNDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6Om1heEFwcENhY2hlU2l6ZSk6CisgICAgICAgICogbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5oOgorICAgICAgICAqIGxvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVJlc291cmNlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKToKKyAgICAgICAgKiBs
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmg6CisgICAgICAgICogbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVOZXdlc3RDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bGFzdEV4ZWN1
dGlvbkZhaWxlZER1ZU1heFNpemVSZWFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpldmljdExSVUFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnVwZGF0ZUNhY2hlVGltZXN0YW1wKToKKyAg
ICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaDoKKyAgICAg
ICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVE
YXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6ZnJlZVNwYWNl
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6Y3VycmVudFNpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgorCiAyMDA5LTA0LTI4ICBK
b2huIFN1bGxpdmFuICA8c3VsbGl2YW5AYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82ODIwMjIxPiBSRUdSRVNTSU9OOiAyLWJ5dGUgY2hhcmFjdGVyIG5hbWVzIG9mIGltYWdl
cyBhcmUgZGlzcGxheWVkIGFzICUtZW5jb2RlZCBBU0NJSQpJbmRleDogV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDQyMDI2KQorKysgV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDcgQEAgQXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZSgpCiAg
ICAgOiBtX2dyb3VwKDApCiAgICAgLCBtX21hbmlmZXN0KDApCiAgICAgLCBtX3N0b3JhZ2VJRCgw
KQorICAgICwgbV9zaXplKDApCiB7CiB9CiAKQEAgLTg0LDkgKzg1LDEzIEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZTo6YWRkUmVzb3VyY2UoUGFzc1IKICAgICAgICAgQVNTRVJUKHJlc291cmNlLT50
eXBlKCkgJiAoQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpEeW5hbWljIHwgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlOjpNYXN0ZXIpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFkZCB0aGUgcmVz
b3VyY2UgdG8gdGhlIHN0b3JhZ2UuCi0gICAgICAgIGNhY2hlU3RvcmFnZSgpLnN0b3JlKHJlc291
cmNlLmdldCgpLCB0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JvdXApOworICAgICAgICBjYWNo
ZVN0b3JhZ2UoKS5zdG9yZShyZXNvdXJjZS5nZXQoKSwgdGhpcywgbV9ncm91cC0+bWF4QXBwQ2Fj
aGVTaXplKCkpOwogICAgIH0KLSAgICAKKworICAgIG1fc2l6ZSArPSByZXNvdXJjZS0+c2l6ZSgp
OworCisgICAgLy8gRmluYWxseSBhZGQgdGhlIHJlc291cmNlIHRvIG91ciBtYXAuCiAgICAgbV9y
ZXNvdXJjZXMuc2V0KHVybCwgcmVzb3VyY2UpOwogfQogCkBAIC05OSw2ICsxMDQsOCBAQCB1bnNp
Z25lZCBBcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVSZXNvdXJjCiAgICAgLy8gVGhlIHJlc291cmNl
IGV4aXN0cywgZ2V0IGl0cyB0eXBlIHNvIHdlIGNhbiByZXR1cm4gaXQuCiAgICAgdW5zaWduZWQg
dHlwZSA9IGl0LT5zZWNvbmQtPnR5cGUoKTsKIAorICAgIG1fc2l6ZSAtPSBpdC0+c2Vjb25kLT5z
aXplKCk7CisKICAgICBtX3Jlc291cmNlcy5yZW1vdmUoaXQpOwogICAgIAogICAgIHJldHVybiB0
eXBlOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaAko
cmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDggQEAgcHVibGljOgogICAgIAogICAg
IHN0YXRpYyBib29sIHJlcXVlc3RJc0hUVFBPckhUVFBTR2V0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOwogCisgICAgaW50NjRfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKIHBy
aXZhdGU6CiAgICAgQXBwbGljYXRpb25DYWNoZSgpOwogICAgIApAQCAtMTA2LDYgKzEwOCw5IEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxLVVJMLCBib29sPiA+IG1fcGVuZGluZ0R5
bmFtaWNFbnRyeUFjdGlvbnM7CiAKICAgICB1bnNpZ25lZCBtX3N0b3JhZ2VJRDsKKworICAgIC8v
IFRoZSB0b3RhbCBzaXplIG9mIHRoZSByZXNvdXJjZXMgYmVsb25naW5nIHRvIHRoaXMgQXBwbGlj
YXRpb24gQ2FjaGUgaW5zdGFuY2UuCisgICAgaW50NjRfdCBtX3NpemU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRE9NQXBwbGljYXRpb25DYWNoZS5oIgogI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgpAQCAtNzEwLDcgKzcxMSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpj
aGVja0lmTG9hZEkKIAogICAgICAgICAvLyBUaGUgc3RvcmFnZSBjb3VsZCBoYXZlIGJlZW4gbWFu
dWFsbHkgZW1wdGllZCBieSB0aGUgdXNlci4KICAgICAgICAgaWYgKCFtX3N0b3JhZ2VJRCkKLSAg
ICAgICAgICAgIGNhY2hlU3RvcmFnZSgpLnN0b3JlTmV3ZXN0Q2FjaGUodGhpcyk7CisgICAgICAg
ICAgICBjYWNoZVN0b3JhZ2UoKS5zdG9yZU5ld2VzdENhY2hlKHRoaXMsIG1heEFwcENhY2hlU2l6
ZSgpKTsKIAogICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpj
YWxsTm9VcGRhdGVMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKICAgICAg
ICAgYnJlYWs7CkBAIC03MzIsNyArNzMzLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6
OmNoZWNrSWZMb2FkSQogICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gb2xkTmV3ZXN0
Q2FjaGUgPSAobV9uZXdlc3RDYWNoZSA9PSBtX2NhY2hlQmVpbmdVcGRhdGVkKSA/IDAgOiBtX25l
d2VzdENhY2hlOwogCiAgICAgICAgIHNldE5ld2VzdENhY2hlKG1fY2FjaGVCZWluZ1VwZGF0ZWQu
cmVsZWFzZSgpKTsKLSAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmVOZXdlc3RDYWNoZSh0aGlz
KTsKKyAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmVOZXdlc3RDYWNoZSh0aGlzLCBtYXhBcHBD
YWNoZVNpemUoKSk7CiAKICAgICAgICAgaWYgKG9sZE5ld2VzdENhY2hlKQogICAgICAgICAgICAg
Y2FjaGVTdG9yYWdlKCkucmVtb3ZlKG9sZE5ld2VzdENhY2hlLmdldCgpKTsKQEAgLTg4MSw2ICs4
ODIsMTAgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNsZWFyU3RvcmFnZQogICAgICAg
ICAoKml0KS0+Y2xlYXJTdG9yYWdlSUQoKTsKIH0KICAgICAKK2ludDY0X3QgQXBwbGljYXRpb25D
YWNoZUdyb3VwOjptYXhBcHBDYWNoZVNpemUoKSB7CisgICAgQVNTRVJUKG1fZnJhbWUpOworICAg
IHJldHVybiBtX2ZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+bWF4QXBwQ2FjaGVT
aXplKCk7Cit9CiAKIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZUdyb3VwLmgJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYg
KzkwLDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0NvcHkoKSBjb25zdCB7IHJldHVybiBtX2lz
Q29weTsgfQogCisgICAgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKTsKKwogcHJpdmF0ZToKICAg
ICB0eXBlZGVmIHZvaWQgKERPTUFwcGxpY2F0aW9uQ2FjaGU6OipMaXN0ZW5lckZ1bmN0aW9uKSgp
OwogICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2soTGlzdGVuZXJGdW5jdGlvbiwgY29u
c3QgSGFzaFNldDxEb2N1bWVudExvYWRlcio+Jik7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDQy
MDI2KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U6OkFwcGxpY2F0aW9uQ2FjCiAgICAgOiBTdWJzdGl0dXRlUmVzb3VyY2UodXJsLCByZXNw
b25zZSwgZGF0YSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9zdG9yYWdlSUQoMCkKKyAg
ICAsIG1fc2l6ZSgwKQogewogfQogCkBAIC00NCw2ICs0NSwyOSBAQCB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZTo6YWRkVHlwZSh1CiAgICAgbV90eXBlIHw9IHR5cGU7IAogfQogCitpbnQ2
NF90IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6c2l6ZSgpCit7CisgICAgaWYgKCFtX3NpemUp
IHsKKyAgICAgICAgaWYgKGRhdGEoKSkKKyAgICAgICAgICAgIG1fc2l6ZSArPSBkYXRhKCktPnNp
emUoKTsKKyAgICAKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMo
KS5iZWdpbigpOyBpdCE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgbV9zaXplICs9IChpdC0+
Zmlyc3QubGVuZ3RoKCkgKyBpdC0+c2Vjb25kLmxlbmd0aCgpICsgMikgKiBzaXplb2YoVUNoYXIp
OworICAgICAgICB9CisgICAgCisgICAgICAgIG1fc2l6ZSArPSB1cmwoKS5zdHJpbmcoKS5sZW5n
dGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIG1fc2l6ZSArPSBzaXplb2YoaW50KTsgIC8v
IHJlc291cmNlLm1faHR0cFN0YXR1c0NvZGUKKyAgICAgICAgbV9zaXplICs9IHJlc3BvbnNlKCku
dXJsKCkuc3RyaW5nKCkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgICAgICBtX3NpemUg
Kz0gc2l6ZW9mKHVuc2lnbmVkKTsgIC8vIGRhdGFJZAorICAgICAgICBtX3NpemUgKz0gcmVzcG9u
c2UoKS5taW1lVHlwZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgbV9zaXpl
ICs9IHJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFy
KTsKKyAKKyAgICB9CisKKyAgICByZXR1cm4gbV9zaXplOworfQorCiAjaWZuZGVmIE5ERUJVRwog
dm9pZCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmR1bXBUeXBlKHVuc2lnbmVkIHR5cGUpCiB7
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UuaAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgc3RvcmFnZUlEKCkgY29uc3QgeyByZXR1cm4gbV9zdG9y
YWdlSUQ7IH0KICAgICB2b2lkIGNsZWFyU3RvcmFnZUlEKCkgeyBtX3N0b3JhZ2VJRCA9IDA7IH0K
IAorICAgIGludDY0X3Qgc2l6ZSgpOworCiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyB2b2lk
IGR1bXBUeXBlKHVuc2lnbmVkIHR5cGUpOwogI2VuZGlmCkBAIC02NCw2ICs2Niw3IEBAIHByaXZh
dGU6CiAKICAgICB1bnNpZ25lZCBtX3R5cGU7CiAgICAgdW5zaWduZWQgbV9zdG9yYWdlSUQ7Cisg
ICAgaW50NjRfdCBtX3NpemU7CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlLmNwcAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlR3JvdXAuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ3VycmVu
dFRpbWUuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgpAQCAtMzksNiArNDAsOCBAQAogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKKyNpbmNs
dWRlIDxzcWxpdGUzLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTgzLDYgKzg2LDkgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlv
bkNhY2hlUwogICAgIGdyb3VwLT5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgIGdyb3VwLT5zZXROZXdlc3RDYWNoZShj
YWNoZS5yZWxlYXNlKCkpOwogCisgICAgLy8gV2UgYXJlIHVzaW5nIHRoZSBjYWNoZS4gVXBkYXRl
IGl0cyB0aW1lc3RhbXAuCisgICAgdXBkYXRlQ2FjaGVUaW1lc3RhbXAobmV3ZXN0Q2FjaGVTdG9y
YWdlSUQpOworCiAgICAgcmV0dXJuIGdyb3VwOwogfSAgICAKIApAQCAtMTg1LDYgKzE5MSw5IEBA
IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVMKICAgICAgICAgLy8gYSBt
YXRjaGluZyBVUkwuCiAgICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKICAgICAgICAgUmVmUHRy
PEFwcGxpY2F0aW9uQ2FjaGU+IGNhY2hlID0gbG9hZENhY2hlKG5ld2VzdENhY2hlSUQpOworICAg
ICAgICAvLyBGb3IgdmFyaW91cyByZWFzb25zLCBsb2FkQ2FjaGUgY2FuIHJldHVybiAwOworICAg
ICAgICBpZiAoIWNhY2hlKQorICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGNhY2hlLT5yZXNvdXJjZUZvclVSTCh1cmwp
OwogICAgICAgICBpZiAoIXJlc291cmNlKQpAQCAtMTk5LDYgKzIwOCw5IEBAIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVMKICAgICAgICAgCiAgICAgICAgIG1fY2FjaGVz
SW5NZW1vcnkuc2V0KGdyb3VwLT5tYW5pZmVzdFVSTCgpLCBncm91cCk7CiAgICAgICAgIAorICAg
ICAgICAvLyBXZSBhcmUgdXNpbmcgdGhlIGNhY2hlLiBVcGRhdGUgaXRzIHRpbWVzdGFtcC4KKyAg
ICAgICAgdXBkYXRlQ2FjaGVUaW1lc3RhbXAobmV3ZXN0Q2FjaGVJRCk7CisKICAgICAgICAgcmV0
dXJuIGdyb3VwOwogICAgIH0KIApAQCAtMzI4LDcgKzM0MCw3IEBAIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmV4ZWN1dGVTUUwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
Y29uc3QgaW50IHNjaGVtYVZlcnNpb24gPSAzOworc3RhdGljIGNvbnN0IGludCBzY2hlbWFWZXJz
aW9uID0gNDsKICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVt
YVZlcnNpb24oKQogewpAQCAtMzc4LDcgKzM5MCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6Om9wZW5EYXRhYmEKICAgICAvLyBDcmVhdGUgdGFibGVzCiAgICAgZXhlY3V0ZVNRTENv
bW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlR3JvdXBzIChpZCBJTlRFR0VS
IFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsICIKICAgICAgICAgICAgICAgICAgICAgICAibWFu
aWZlc3RIb3N0SGFzaCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG1hbmlmZXN0
VVJMIFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIG5ld2VzdENhY2hlIElOVEVHRVIpIik7
Ci0gICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hl
cyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBjYWNoZUdyb3VwIElOVEVH
RVIpIik7CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT
IENhY2hlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBjYWNoZUdyb3Vw
IElOVEVHRVIsIHNpemUgSU5URUdFUiwgdGltZXN0YW1wIElOVEVHRVIpIik7CiAgICAgZXhlY3V0
ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlV2hpdGVsaXN0VVJM
cyAodXJsIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgY2FjaGUgSU5URUdFUiBOT1Qg
TlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOwogICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUg
VEFCTEUgSUYgTk9UIEVYSVNUUyBGYWxsYmFja1VSTHMgKG5hbWVzcGFjZSBURVhUIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwsIGZhbGxiYWNrVVJMIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1Qg
RkFJTCwgIgogICAgICAgICAgICAgICAgICAgICAgICJjYWNoZSBJTlRFR0VSIE5PVCBOVUxMIE9O
IENPTkZMSUNUIEZBSUwpIik7CkBAIC00MDYsNiArNDE4LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6b3BlbkRhdGFiYQogICAgICAgICAgICAgICAgICAgICAgICIgRk9SIEVBQ0gg
Uk9XIEJFR0lOIgogICAgICAgICAgICAgICAgICAgICAgICIgIERFTEVURSBGUk9NIENhY2hlUmVz
b3VyY2VEYXRhIFdIRVJFIGlkID0gT0xELmRhdGE7IgogICAgICAgICAgICAgICAgICAgICAgICIg
RU5EIik7CisKKyAgICAvLyBUbyBiZSBhYmxlIHRvIHF1aWNrbHkgZXZpY3QgY2FjaGVzIGluIExS
VSBvcmRlciwgd2UgaW5kZXggdGhlIENhY2hlcyB0YWJsZSBvbiB0aGUgdGltZXN0YW1wIGF0dHJp
YnV0ZS4KKyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIElOREVYIGxydUluZGV4IE9OIENh
Y2hlcyh0cykgQVNDOyIpOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVj
dXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYgc3RhdGVtZW50KQpAQCAtNDQxLDExICs0NTYs
MTMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbAogICAgIEFTU0VS
VChjYWNoZS0+c3RvcmFnZUlEKCkgPT0gMCk7CiAgICAgQVNTRVJUKGNhY2hlLT5ncm91cCgpLT5z
dG9yYWdlSUQoKSAhPSAwKTsKICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZXMgKGNhY2hlR3JvdXApIFZBTFVFUyAoPykiKTsK
KyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBD
YWNoZXMgKGNhY2hlR3JvdXAsIHNpemUsIHRpbWVzdGFtcCkgVkFMVUVTICg/LCA/LCA/KSIpOwog
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hlLT5ncm91cCgpLT5z
dG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c2l6ZSgpKTsK
KyAgICBzdGF0ZW1lbnQuYmluZEludDY0KDMsIGN1cnJlbnRUaW1lKCkpOwogCiAgICAgaWYgKCFl
eGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU4
NSw0MyArNjAyLDEwMSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZVVwZGF0
CiAgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1lbnQpOwogfQogCi12b2lk
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uq
IHJlc291cmNlLCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKK3ZvaWQgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxp
Y2F0aW9uQ2FjaGUqIGNhY2hlLCBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSkKIHsKICAgICBBU1NF
UlQoY2FjaGUtPnN0b3JhZ2VJRCgpKTsKICAgICAKICAgICBvcGVuRGF0YWJhc2UodHJ1ZSk7CiAg
CisgICAgbV9kYXRhYmFzZS5zZXRNYXhpbXVtU2l6ZShtYXhBcHBDYWNoZVNpemUpOwogICAgIFNR
TGl0ZVRyYW5zYWN0aW9uIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAg
ICBzdG9yZVJlc291cmNlVHJhbnNhY3Rpb24uYmVnaW4oKTsKLSAgICAKLSAgICBpZiAoIXN0b3Jl
KHJlc291cmNlLCBjYWNoZS0+c3RvcmFnZUlEKCkpKQorCisgICAgaWYgKCFzdG9yZShyZXNvdXJj
ZSwgY2FjaGUtPnN0b3JhZ2VJRCgpKSkgeworICAgICAgICBpZiAoIWxhc3RFeGVjdXRpb25GYWls
ZWREdWVNYXhTaXplUmVhY2hlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBU
aGUgZmFpbHVyZSB3YXMgZHVlIHRvIG1heGltdW0gc2l6ZSBiZWluZyByZWFjaGVkLiBSb2xsYmFj
ay4KKyAgICAgICAgc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7CisgICAgICAg
IC8vIEF0dGVtcHQgdG8gZXZpY3Qgc29tZSBvbGQgY2FjaGVzLgorICAgICAgICBpZiAoIWV2aWN0
TFJVQXBwbGljYXRpb25DYWNoZShyZXNvdXJjZS0+ZGF0YSgpLT5zaXplKCksIG1heEFwcENhY2hl
U2l6ZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIFRoZSBldmljdGlvbiB3YXMg
c3VjY2Vzc2Z1bC4gUmV0cnkgdG8gc3RvcmUgdGhlIHJlc291cmNlLgorICAgICAgICBzdG9yZVJl
c291cmNlVHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICAgICAgaWYgKCFzdG9yZShyZXNvdXJjZSwg
Y2FjaGUtPnN0b3JhZ2VJRCgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBBIHJlc291cmNlIHdhcyBhZGRlZCB0byB0aGUgY2FjaGUuIFVwZGF0ZSB0aGUgdG90YWwgZGF0
YSBzaXplIGZvciB0aGUgY2FjaGUuCisgICAgU1FMaXRlU3RhdGVtZW50IHNpemVVcGRhdGVTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZXMgU0VUIHNpemU9c2l6ZSs/IFdIRVJFIGlk
PT8iKTsKKyAgICBpZiAoc2l6ZVVwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0
T2spCiAgICAgICAgIHJldHVybjsKLSAgICAKKworICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQuYmlu
ZEludDY0KDEsIHJlc291cmNlLT5zaXplKCkpOworICAgIHNpemVVcGRhdGVTdGF0ZW1lbnQuYmlu
ZEludDY0KDIsIGNhY2hlLT5zdG9yYWdlSUQoKSk7CisKKyAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoc2l6ZVVwZGF0ZVN0YXRlbWVudCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHN0b3JlUmVz
b3VyY2VUcmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAotYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmVOZXdlc3RDYWNoZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwKQorYm9v
bCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVOZXdlc3RDYWNoZShBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAqIGdyb3VwLCBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSkKIHsKICAgICBvcGVuRGF0
YWJhc2UodHJ1ZSk7CiAgICAgCisgICAgbV9kYXRhYmFzZS5zZXRNYXhpbXVtU2l6ZShtYXhBcHBD
YWNoZVNpemUpOwogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHN0b3JlQ2FjaGVUcmFuc2FjdGlvbiht
X2RhdGFiYXNlKTsKICAgICAKICAgICBzdG9yZUNhY2hlVHJhbnNhY3Rpb24uYmVnaW4oKTsKICAg
ICAKKyAgICAvLyBXZSB0cnkgdG8gc3RvcmUgdGhlIGdyb3VwIGFuZCB0aGUgbmV3ZXN0IGNhY2hl
LiBJZiB0aGUgZGF0YWJhc2UKKyAgICAvLyByZXBvcnRzIHRoYXQgd2UgaGF2ZSBoaXQgdGhlIG1h
eEFwcENhY2hlU2l6ZSBsaW1pdCwgd2UgYXR0ZW1wdCB0bworICAgIC8vIHJlbW92ZSBlbm91Z2gg
ZW50cmllcyAoaW4gTFJVIG9yZGVyKSBmcm9tIHRoZSBjYWNoZSBzbyB0aGF0IHRoZSBuZXdlc3QK
KyAgICAvLyBjYWNoZSBmaXRzIGluLiBJZiB0aGUgbmV3ZXN0IGNhY2hlIGlzIHN0aWxsIHRvbyBi
aWcsIHdlIGJhaWwgb3V0LgorCisgICAgLy8gRmlyc3QgZG8gYSBzYW5pdHkgY2hlY2sgb24gdGhl
IHNpemUgb2YgdGhlIGNhY2hlLgorICAgIGlmIChncm91cC0+bmV3ZXN0Q2FjaGUoKS0+c2l6ZSgp
ID49IG1heEFwcENhY2hlU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFn
cm91cC0+c3RvcmFnZUlEKCkpIHsKICAgICAgICAgLy8gU3RvcmUgdGhlIGdyb3VwCi0gICAgICAg
IGlmICghc3RvcmUoZ3JvdXApKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoIXN0b3JlKGdyb3VwKSkgeworICAgICAgICAgICAgaWYgKCFsYXN0RXhlY3V0aW9uRmFpbGVk
RHVlTWF4U2l6ZVJlYWNoZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAvLyBUaGUgZmFpbHVyZSB3YXMgZHVlIHRvIG1heGltdW0gc2l6ZSBiZWluZyByZWFj
aGVkLiBSb2xsYmFjay4KKyAgICAgICAgICAgIGdyb3VwLT5zZXRTdG9yYWdlSUQoMCk7CisgICAg
ICAgICAgICBzdG9yZUNhY2hlVHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKKyAgICAgICAgICAgIC8v
IEF0dGVtcHQgdG8gZXZpY3Qgc29tZSBvbGQgY2FjaGVzLgorICAgICAgICAgICAgaWYgKCFldmlj
dExSVUFwcGxpY2F0aW9uQ2FjaGUoZ3JvdXAtPm5ld2VzdENhY2hlKCktPnNpemUoKSwgbWF4QXBw
Q2FjaGVTaXplKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAv
LyBUaGUgZXZpY3Rpb24gd2FzIHN1Y2Nlc3NmdWwuIFJldHJ5IHRvIHN0b3JlIHRoZSBncm91cC4K
KyAgICAgICAgICAgIHN0b3JlQ2FjaGVUcmFuc2FjdGlvbi5iZWdpbigpOworICAgICAgICAgICAg
aWYgKCFzdG9yZShncm91cCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CiAgICAgfQotICAgIAorCiAgICAgQVNTRVJUKGdyb3VwLT5uZXdlc3RDYWNoZSgpKTsKICAg
ICBBU1NFUlQoIWdyb3VwLT5pc09ic29sZXRlKCkpOwogICAgIEFTU0VSVCghZ3JvdXAtPm5ld2Vz
dENhY2hlKCktPnN0b3JhZ2VJRCgpKTsKLSAgICAKKwogICAgIC8vIFN0b3JlIHRoZSBuZXdlc3Qg
Y2FjaGUKLSAgICBpZiAoIXN0b3JlKGdyb3VwLT5uZXdlc3RDYWNoZSgpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAorICAgIGlmICghc3RvcmUoZ3JvdXAtPm5ld2VzdENhY2hlKCkpKSB7
CisgICAgICAgIGlmICghbGFzdEV4ZWN1dGlvbkZhaWxlZER1ZU1heFNpemVSZWFjaGVkKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFRoZSBmYWlsdXJlIHdhcyBkdWUg
dG8gbWF4aW11bSBzaXplIGJlaW5nIHJlYWNoZWQuIFJvbGxiYWNrLgorICAgICAgICBncm91cC0+
c2V0U3RvcmFnZUlEKDApOworICAgICAgICBncm91cC0+bmV3ZXN0Q2FjaGUoKS0+c2V0U3RvcmFn
ZUlEKDApOworICAgICAgICBzdG9yZUNhY2hlVHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKKyAgICAg
ICAgLy8gQXR0ZW1wdCB0byBldmljdCBzb21lIG9sZCBjYWNoZXMuCisgICAgICAgIGlmICghZXZp
Y3RMUlVBcHBsaWNhdGlvbkNhY2hlKGdyb3VwLT5uZXdlc3RDYWNoZSgpLT5zaXplKCksIG1heEFw
cENhY2hlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFRoZSBl
dmljdGlvbiB3YXMgc3VjY2Vzc2Z1bC4gUmV0cnkgdG8gc3RvcmUgdGhlIGdyb3VwIGFuZCB0aGUg
Y2FjaGUuCisgICAgICAgIHN0b3JlQ2FjaGVUcmFuc2FjdGlvbi5iZWdpbigpOworICAgICAgICBp
ZiAoIXN0b3JlKGdyb3VwKSB8fCAhc3RvcmUoZ3JvdXAtPm5ld2VzdENhY2hlKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIC8vIFVwZGF0ZSB0aGUgbmV3ZXN0IGNh
Y2hlIGluIHRoZSBncm91cC4KICAgICAKICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVHcm91cHMgU0VUIG5ld2VzdENhY2hlPT8gV0hFUkUgaWQ9
PyIpOwpAQCAtODI3LDcgKzkwMiwxMDkgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmVDb3B5TwogICAgIC8vIEVtcHR5IHRoZSBjYWNoZSBpbiBjYXNlIHNvbWV0aGluZyB3YXMg
dGhlcmUgYmVmb3JlLgogICAgIGNvcHlTdG9yYWdlLmVtcHR5KCk7CiAgICAgCi0gICAgcmV0dXJu
IGNvcHlTdG9yYWdlLnN0b3JlTmV3ZXN0Q2FjaGUoZ3JvdXBDb3B5LmdldCgpKTsKKyAgICByZXR1
cm4gY29weVN0b3JhZ2Uuc3RvcmVOZXdlc3RDYWNoZShncm91cENvcHkuZ2V0KCksIGdyb3VwQ29w
eS0+bWF4QXBwQ2FjaGVTaXplKCkpOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpsYXN0RXhlY3V0aW9uRmFpbGVkRHVlTWF4U2l6ZVJlYWNoZWQoKSB7CisgICAgcmV0dXJuIG1f
ZGF0YWJhc2UubGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEw7Cit9CisKK2Jvb2wgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmV2aWN0TFJVQXBwbGljYXRpb25DYWNoZShpbnQ2NF90IGluY29taW5n
U2l6ZSwgaW50NjRfdCBtYXhpbXVtQXBwQ2FjaGVTaXplKSB7CisgICAgb3BlbkRhdGFiYXNlKGZh
bHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCB0byBiZSBm
cmVlZC4KKyAgICBpbnQ2NF90IHNpemVUb0ZyZWUgPSAwOworICAgIC8vIEZpcnN0IGNoZWNrIGlm
IG1heGltdW1BcHBDYWNoZVNpemUgaXNuJ3Qgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IGRhdGFi
YXNlIHNpemUuCisgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSB2YWx1ZSBpcyBnZW5lcmF0
ZWQgZHluYW1pY2FsbHkgKGUuZy4gYnkgdGhlIHVzZXIpLgorICAgIGlmIChtYXhpbXVtQXBwQ2Fj
aGVTaXplIDwgbV9kYXRhYmFzZS5jdXJyZW50U2l6ZSgpKSB7CisgICAgICAgIC8vIENoZWNrIGlm
IHRoZSBpbmNvbWluZ1NpemUgc3RpbGwgZml0cyBpbnNpZGUgbWF4aW11bUFwcENhY2hlU2l6ZS4K
KyAgICAgICAgLy8gSXQgbmVlZHMgdG8gYmUgc3RyaWN0bHkgc21hbGxlciB0byBmaXQgc2luY2Ug
U1FMaXRlIGFkZHMgc29tZQorICAgICAgICAvLyBzcGFjZSBvdmVyaGVhZCBmb3Igc3RvcmluZyBt
ZXRhZGF0YS4gU2luY2Ugd2UgY2Fubm90IHRlbGwgaG93IGJpZworICAgICAgICAvLyB0aGlzIG1l
dGFkYXRhIGlzLCB3ZSBydW4gdGhlIHJpc2sgb2YgYmxvd2luZyB1cCB0aGUgZW50aXJlIGNhY2hl
IGFuZAorICAgICAgICAvLyBmaW5kaW5nIHRoYXQgdGhlIG5ldyBjYWNoZSBzdGlsbCBkb2VzIG5v
dCBmaXQgd2hlbiBpbmNvbWluZ1NpemUgfj0gbWF4aW11bUFwcENhY2hlU2l6ZQorICAgICAgICAv
LyBidXQgbWV0YWRhdGFTaXplID4gKG1heGltdW1BcHBDYWNoZVNpemUgLSBpbmNvbWluZ1NpemUp
LiBTaW5jZSB0aGlzCisgICAgICAgIC8vIGlzIGxpa2VseSBhIHJhcmUgY2FzZSwgd2UgY2FuIGxp
dmUgd2l0aCBpdC4KKyAgICAgICAgaWYgKGluY29taW5nU2l6ZSA8IG1heGltdW1BcHBDYWNoZVNp
emUpIHsKKyAgICAgICAgICAgIHNpemVUb0ZyZWUgPSBpbmNvbWluZ1NpemU7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBpbmNvbWluZ1NpemUgZG9lc24ndCBmaXQsIGJhaWwgb3V0
LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gbWF4aW11bUFwcENhY2hlU2l6ZSBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIGN1
cnJlbnQgZGF0YWJhc2Ugc2l6ZS4KKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0b3RhbCBhdmFp
bGFibGUgc3BhY2Ugc2l6ZS4gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGZyZWUKKyAgICAgICAgLy8g
Ynl0ZXMgaW4gdGhlIGN1cnJlbnQgZGF0YWJhc2UgZmlsZSArIHRoZSBzcGFjZSB3ZSBhcmUgYWxs
b3dlZCB0byBncm93CisgICAgICAgIC8vICh3aGljaCBpcyBib3VuZGVkIGJ5IG1heGltdW1BcHBD
YWNoZVNpemUpLgorICAgICAgICBpbnQ2NF90IHRvdGFsQXZhaWxhYmxlU2l6ZSA9IChtYXhpbXVt
QXBwQ2FjaGVTaXplIC0gbV9kYXRhYmFzZS5jdXJyZW50U2l6ZSgpKSArIG1fZGF0YWJhc2UuZnJl
ZVNwYWNlU2l6ZSgpOworICAgICAgICBBU1NFUlQodG90YWxBdmFpbGFibGVTaXplKTsKKyAgICAg
ICAgLy8gQ2FsY3VsYXRlIHRoZSBzcGFjZSB3ZSBuZWVkIHRvIGZyZWUgaW5zaWRlIHRoZSBkYXRh
YmFzZSBmaWxlLgorICAgICAgICBpbnQ2NF90IHNpemVUb0ZyZWUgPSBpbmNvbWluZ1NpemUgLSB0
b3RhbEF2YWlsYWJsZVNpemU7CisgICAgfQorCisgICAgQVNTRVJUKHNpemVUb0ZyZWUpOworCisg
ICAgaW50NjRfdCBjdW1tdWxhdGl2ZVNpemUgPSAwOworICAgIFZlY3RvcjxpbnQ2NF90PiBpZHM7
CisKKyAgICAvL1N0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uOworICAgIFNRTGl0ZVRyYW5zYWN0aW9u
IHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIC8vIEZpbmQgb3V0IHdoYXQgY2FjaGVzIHRv
IGRlbGV0ZS4KKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxlY3RWaWN0aW1zKG1f
ZGF0YWJhc2UsICJTRUxFQ1QgaWQsIHNpemUgRlJPTSBDYWNoZXMgT1JERVIgQlkgdGltZXN0YW1w
OyIpOworCisgICAgICAgIGlmIChzZWxlY3RWaWN0aW1zLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRP
aykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB3aGlsZSAoc2VsZWN0Vmlj
dGltcy5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgICAgICBpZHMuYXBwZW5kKHNl
bGVjdFZpY3RpbXMuZ2V0Q29sdW1uSW50NjQoMCkpOworICAgICAgICAgICAgY3VtbXVsYXRpdmVT
aXplICs9IHNlbGVjdFZpY3RpbXMuZ2V0Q29sdW1uSW50NjQoMSk7CisgICAgICAgICAgICBpZiAo
Y3VtbXVsYXRpdmVTaXplID4gc2l6ZVRvRnJlZSkgeworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGN1bW11bGF0aXZlU2l6
ZSA8PSBzaXplVG9GcmVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBEZWxldGUg
dGhlIGNhY2hlcy4KKyAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlVmljdGltKG1fZGF0YWJhc2Us
ICJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgaWQ9PzsiKTsKKyAgICBpZiAoZGVsZXRlVmljdGlt
LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gVXBkYXRlIHRoZSBDYWNoZUdyb3VwcyB0YWJsZS4KKyAgICBTUUxpdGVTdGF0ZW1lbnQgdXBk
YXRlQ2FjaGVHcm91cHMobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENhY2hlR3JvdXBzIFdIRVJF
IG5ld2VzdENhY2hlPT87Iik7CisgICAgaWYgKHVwZGF0ZUNhY2hlR3JvdXBzLnByZXBhcmUoKSAh
PSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChWZWN0b3I8
aW50NjRfdD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaWRzLmJlZ2luKCk7IGl0ICE9IGlkcy5lbmQo
KTsgKytpdCkgeworICAgICAgICBkZWxldGVWaWN0aW0uYmluZEludDY0KDEsICppdCk7CisgICAg
ICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChkZWxldGVWaWN0aW0pKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIHVwZGF0ZUNhY2hlR3JvdXBzLmJpbmRJbnQ2NCgxLCAqaXQp
OworICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlQ2FjaGVHcm91cHMpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgp
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp1
cGRhdGVDYWNoZVRpbWVzdGFtcChpbnQ2NF90IGlkKQoreworICAgIG9wZW5EYXRhYmFzZShmYWxz
ZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlVGltZXN0YW1wU3RhdGVtZW50KG1fZGF0YWJhc2UsICJV
UERBVEUgQ2FjaGVzIFNFVCB0aW1lc3RhbXA9PyBXSEVSRSBpZD0/Iik7CisgICAgaWYgKHVwZGF0
ZVRpbWVzdGFtcFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAg
dXBkYXRlVGltZXN0YW1wU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBjdXJyZW50VGltZSgpKTsKKyAg
ICAgICAgdXBkYXRlVGltZXN0YW1wU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBpZCk7CisgICAgICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodXBkYXRlVGltZXN0YW1wU3RhdGVtZW50KTsKKyAgICB9CiB9CiAg
ICAgCiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSYgY2FjaGVTdG9yYWdlKCkKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaAkocmV2
aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNhY2hlR3JvdXBEZXN0cm95ZWQoQXBwbGljYXRpb25DYWNoZUdyb3VwKik7CiAgICAgdm9p
ZCBjYWNoZUdyb3VwTWFkZU9ic29sZXRlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCopOwogICAgICAg
ICAKLSAgICBib29sIHN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGljYXRpb25DYWNoZUdyb3VwKik7IC8v
IFVwZGF0ZXMgdGhlIGNhY2hlIGdyb3VwLCBidXQgZG9lc24ndCByZW1vdmUgb2xkIGNhY2hlLgot
ICAgIHZvaWQgc3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiwgQXBwbGljYXRpb25DYWNo
ZSopOworICAgIGJvb2wgc3RvcmVOZXdlc3RDYWNoZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqLCBp
bnQ2NF90KTsgLy8gVXBkYXRlcyB0aGUgY2FjaGUgZ3JvdXAsIGJ1dCBkb2Vzbid0IHJlbW92ZSBv
bGQgY2FjaGUuCisgICAgdm9pZCBzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqLCBBcHBs
aWNhdGlvbkNhY2hlKiwgaW50NjRfdCk7CiAgICAgYm9vbCBzdG9yZVVwZGF0ZWRUeXBlKEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZSosIEFwcGxpY2F0aW9uQ2FjaGUqKTsKIAogICAgIC8vIFJlbW92
ZXMgdGhlIGdyb3VwIGlmIHRoZSBjYWNoZSB0byBiZSByZW1vdmVkIGlzIHRoZSBuZXdlc3Qgb25l
IChzbywgc3RvcmVOZXdlc3RDYWNoZSgpIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmVoYW5kIHdo
ZW4gdXBkYXRpbmcpLgpAQCAtODEsNiArODEsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIGV4ZWN1
dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50Jik7CiAgICAgYm9vbCBleGVjdXRlU1FMQ29tbWFu
ZChjb25zdCBTdHJpbmcmKTsKICAgICAKKyAgICBib29sIGxhc3RFeGVjdXRpb25GYWlsZWREdWVN
YXhTaXplUmVhY2hlZCgpOworICAgIGJvb2wgZXZpY3RMUlVBcHBsaWNhdGlvbkNhY2hlKGludDY0
X3QsIGludDY0X3QpOworICAgIHZvaWQgdXBkYXRlQ2FjaGVUaW1lc3RhbXAoaW50NjRfdCk7CisK
ICAgICBTdHJpbmcgbV9jYWNoZURpcmVjdG9yeTsKIAogICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0
YWJhc2U7CkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiwxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJh
c2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKSA9IDA7CiAKKyNpZiBF
TkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICAvLyBSZXR1cm5zIHRoZSBt
YXhpbXVtIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgYXBwbGljYXRpb24gY2FjaGVzIGZpbGUuCisg
ICAgICAgIHZpcnR1YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKSA9IDA7CisjZW5kaWYKKwog
I2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICAgICAgdmlydHVhbCB2b2lkIGRhc2hi
b2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNiArMTUxLDMwIEBA
IGludCBTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUoKQogICAgIHJldHVybiBtX3BhZ2VTaXplOwog
fQogCitpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjpmcmVlU3BhY2VTaXplKCkKK3sKKyAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CisgICAgZW5hYmxlQXV0aG9yaXplcihm
YWxzZSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIGZy
ZWVsaXN0X2NvdW50Iik7CisgICAgaW50NjRfdCBzaXplID0gc3RhdGVtZW50LmdldENvbHVtbklu
dDY0KDApICogcGFnZVNpemUoKTsKKworICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CisgICAg
cmV0dXJuIHNpemU7Cit9CisKK2ludDY0X3QgU1FMaXRlRGF0YWJhc2U6OmN1cnJlbnRTaXplKCkK
K3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CisgICAgZW5hYmxl
QXV0aG9yaXplcihmYWxzZSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlz
LCAiUFJBR01BIHBhZ2VfY291bnQiKTsKKyAgICBpbnQ2NF90IHNpemUgPSBzdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50NjQoMCkgKiBwYWdlU2l6ZSgpOworCisgICAgZW5hYmxlQXV0aG9yaXplcih0cnVl
KTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKwogdm9pZCBTUUxpdGVEYXRhYmFzZTo6c2V0U3luY2hy
b25vdXMoU3luY2hyb25vdXNQcmFnbWEgc3luYykKIHsKICAgICBleGVjdXRlQ29tbWFuZChTdHJp
bmc6OmZvcm1hdCgiUFJBR01BIHN5bmNocm9ub3VzID0gJWkiLCBzeW5jKSk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiAr
ODMsMTEgQEAgcHVibGljOgogICAgIGludDY0X3QgbWF4aW11bVNpemUoKTsKICAgICB2b2lkIHNl
dE1heGltdW1TaXplKGludDY0X3QpOwogICAgIAorICAgIC8vIEdldHMgdGhlIG51bWJlciBvZiB1
bnVzZWQgYnl0ZXMgaW4gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgaW50NjRfdCBmcmVlU3BhY2VT
aXplKCk7CisgICAgLy8gR2V0cyB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBkYXRhYmFzZSBmaWxl
IGluIGJ5dGVzLgorICAgIGludDY0X3QgY3VycmVudFNpemUoKTsKKwogICAgIC8vIFRoZSBTUUxp
dGUgU1lOQ0hST05PVVMgcHJhZ21hIGNhbiBiZSBlaXRoZXIgRlVMTCwgTk9STUFMLCBvciBPRkYK
ICAgICAvLyBGVUxMIC0gQW55IHdyaXRpbmcgY2FsbHMgdG8gdGhlIERCIGJsb2NrIHVudGlsIHRo
ZSBkYXRhIGlzIGFjdHVhbGx5IG9uIHRoZSBkaXNrIHN1cmZhY2UKICAgICAvLyBOT1JNQUwgLSBT
UUxpdGUgcGF1c2VzIGF0IHNvbWUgY3JpdGljYWwgbW9tZW50cyB3aGVuIHdyaXRpbmcsIGJ1dCBt
dWNoIGxlc3MgdGhhbiBGVUxMCkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNDI5MzApCisrKyBXZWJLaXQvZ3Rr
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA5LTA0LTI4ICBB
bmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworCUxpbWl0cyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBBcHBs
aWNhdGlvbiBDYWNoZSBhbmQKKwlleHBpcmVzIG9sZCBjYWNoZXMgaW4gTFJVIGZhc2hpb24gd2hl
biB0aGUgbWF4aW11bQorCXNpemUgaXMgcmVhY2hlZC4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6
bWF4QXBwQ2FjaGVTaXplKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuaDoKKwogMjAwOS0wNC0yOCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZDogY29tbWl0dGVkIGEgZmV3IGJpdHMgYnkgbWlzdGFrZSwgcmVtb3Zl
IHRoZW0uCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuY3BwCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUzLDQgKzQ1MywxMyBAQCB2b2lk
IENocm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKEZyYW1lKiwgCiAgICAgZ3RrX3dpZGdldF9kZXN0
cm95KGRpYWxvZyk7CiB9CiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQor
aW50NjRfdCBDaHJvbWVDbGllbnQ6Om1heEFwcENhY2hlU2l6ZSgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBwcm9wZXJseS4KKyAgIHJldHVy
biA1ICogMTAyNCAqIDEwMjQ7Cit9CisjZW5kaWYKKwogfQpJbmRleDogV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwMyw2ICsxMDMsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpOb2RlKikgeyB9CiAKKyNpZiBF
TkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICB2aXJ0dWFsIGludDY0X3Qg
bWF4QXBwQ2FjaGVTaXplKCk7CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYktp
dFdlYlZpZXcqIG1fd2ViVmlldzsKICAgICAgICAgV2ViQ29yZTo6S1VSTCBtX2hvdmVyZWRMaW5r
VVJMOwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQyOTMwKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0wNC0yOCAgQW5kcmVpIFBvcGVzY3Ug
IDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKwlMaW1pdHMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgQXBwbGljYXRpb24gQ2FjaGUg
YW5kCisJZXhwaXJlcyBvbGQgY2FjaGVzIGluIExSVSBmYXNoaW9uIHdoZW4gdGhlIG1heGltdW0K
KwlzaXplIGlzIHJlYWNoZWQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06Cisg
ICAgICAgIChXZWJDaHJvbWVDbGllbnQ6Om1heEFwcENhY2hlU2l6ZSk6CisKIDIwMDktMDQtMjcg
IERvdWdsYXMgUi4gRGF2aWRzb24gIDxkZGF2aWRzb0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRk
IHRoZSB2YXJpb3VzIHN3aXRjaGVzIGFuZCBjb250ZXh0IG1lbnUgaXRlbXMgbmVlZGVkIGZvcgpJ
bmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZp
c2lvbiA0MjAyNikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsxNDIsMTAgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShXZWJDb3JlOjpG
cmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQorICAgIHZpcnR1YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKTsKKyNl
bmRpZgorCiBwcml2YXRlOgogICAgIFdlYlZpZXcgKm1fd2ViVmlldzsKIH07CkluZGV4OiBXZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNpb24gNDIw
MjYpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkod29y
a2luZyBjb3B5KQpAQCAtNjc5LDYgKzY3OSwxNCBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVx
dWVzdEdlb2xvY2F0aW9uCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAorI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCitpbnQ2NF90IFdlYkNocm9tZUNsaWVu
dDo6bWF4QXBwQ2FjaGVTaXplKCkKK3sKKyAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBwcm9w
ZXJseS4KKyAgIHJldHVybiA1ICogMTAyNCAqIDEwMjQ7Cit9CisjZW5kaWYKKwogQGltcGxlbWVu
dGF0aW9uIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyCiAKIC0gKGlkKWluaXRXaXRoQ2hvb3Nl
cjooUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pY2hvb3NlcgpJbmRleDogV2ViS2l0L3F0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MjkzMCkK
KysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAwOS0wNC0yOCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwlMaW1pdHMgdGhlIG1heGltdW0gc2l6
ZSBvZiB0aGUgQXBwbGljYXRpb24gQ2FjaGUgYW5kCisJZXhwaXJlcyBvbGQgY2FjaGVzIGluIExS
VSBmYXNoaW9uIHdoZW4gdGhlIG1heGltdW0KKwlzaXplIGlzIHJlYWNoZWQuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnRRdDo6bWF4QXBwQ2FjaGVTaXplKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5oOgorCiAyMDA5LTA0LTI4ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9u
LmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0
YsO4LgpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3Bw
CShyZXZpc2lvbiA0MjAyNikKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOSw0ICs0MjksMTMgQEAgdm9pZCBDaHJvbWVD
bGllbnRRdDo6cnVuT3BlblBhbmVsKEZyYW1lKgogICAgIH0KIH0KIAorI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCitpbnQ2NF90IENocm9tZUNsaWVudFF0OjptYXhBcHBDYWNo
ZVNpemUoKQoreworICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgIC8vIEZJWE1FOiBpbXBsZW1lbnQg
dGhpcyBwcm9wZXJseS4KKyAgIHJldHVybiA1ICogMTAyNCAqIDEwMjQ7Cit9CisjZW5kaWYKKwog
fQpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHJldmlz
aW9uIDQyMDI2KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopIHsg
fQogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgdmlydHVh
bCBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpOworI2VuZGlmCisKICAgICAgICAgUVdlYlBhZ2Uq
IG1fd2ViUGFnZTsKICAgICAgICAgV2ViQ29yZTo6S1VSTCBsYXN0SG92ZXJVUkw7CiAgICAgICAg
IFdlYkNvcmU6OlN0cmluZyBsYXN0SG92ZXJUaXRsZTsKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA0MjkzMCkK
KysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMDktMDQtMjggIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisJTGltaXRzIHRoZSBtYXhpbXVtIHNp
emUgb2YgdGhlIEFwcGxpY2F0aW9uIENhY2hlIGFuZAorCWV4cGlyZXMgb2xkIGNhY2hlcyBpbiBM
UlUgZmFzaGlvbiB3aGVuIHRoZSBtYXhpbXVtCisJc2l6ZSBpcyByZWFjaGVkLgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNocm9t
ZUNsaWVudDo6bWF4QXBwQ2FjaGVTaXplKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaDoKKwogMjAwOS0wNC0yMiAgQWRhIENoYW4gIDxhZGFjaGFuQGFwcGxlLmNv
bT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTExNTI5OD4gRG9uJ3QgZ2V0IGVycm9yIG1z
ZyB3aGVuIGRvd25sb2FkIGlzIGludGVycnVwdGVkIGFuZCBjYW5ub3QgcmVzdW1lIGR1ZSB0byBz
ZXJ2ZXIgdW5hdmFpbGFiaWxpdHkKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViS2l0L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTIsNiAr
NjkyLDE0IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpydW5PcGVuUGFuZWwoRnJhbWUKICAgICAv
LyBGSVhNRTogU2hvdyBzb21lIHNvcnQgb2YgZXJyb3IgaWYgdG9vIG1hbnkgZmlsZXMgYXJlIHNl
bGVjdGVkIGFuZCB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbC4gIEZvciBub3csIHRoaXMgd2lsbCBm
YWlsIHNpbGVudGx5LgogfQogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykK
K2ludDY0X3QgV2ViQ2hyb21lQ2xpZW50OjptYXhBcHBDYWNoZVNpemUoKQoreworICAgLy8gRklY
TUU6IGltcGxlbWVudCB0aGlzIHByb3Blcmx5LgorICAgcmV0dXJuIDUgKiAxMDI0ICogMTAyNDsK
K30KKyNlbmRpZgorCiBDT01QdHI8SVdlYlVJRGVsZWdhdGU+IFdlYkNocm9tZUNsaWVudDo6dWlE
ZWxlZ2F0ZSgpCiB7CiAgICAgQ09NUHRyPElXZWJVSURlbGVnYXRlPiBkZWxlZ2F0ZTsKSW5kZXg6
IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24g
NDIwMjYpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6Tm9kZSopIHsgfQogCisjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICB2aXJ0dWFsIGludDY0X3QgbWF4
QXBwQ2FjaGVTaXplKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBDT01QdHI8SVdlYlVJRGVs
ZWdhdGU+IHVpRGVsZWdhdGUoKTsKICAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGUyPiB1aURlbGVn
YXRlMigpOwpJbmRleDogV2ViS2l0L3d4L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
d3gvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MjkzMCkKKysrIFdlYktpdC93eC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0wNC0yOCAgQW5kcmVpIFBvcGVzY3Ug
IDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKwlMaW1pdHMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgQXBwbGljYXRpb24gQ2FjaGUg
YW5kCisJZXhwaXJlcyBvbGQgY2FjaGVzIGluIExSVSBmYXNoaW9uIHdoZW4gdGhlIG1heGltdW0K
KwlzaXplIGlzIHJlYWNoZWQuCisKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVu
dFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFd4OjptYXhBcHBDYWNoZVNp
emUpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guaDoKKwogMjAwOS0w
NC0yNCAgS2V2aW4gT2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAgICAg
ICB3eCBidWlsZCBmaXguIFN3aXRjaGluZyBKU0NvcmUgZnJvbSBhIHN0YXRpYyBsaWIgdG8gYSBk
eW5hbWljIGxpYgpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4
LmNwcAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVD
bGllbnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw0ICszNjMsMTQgQEAgdm9pZCBDaHJv
bWVDbGllbnRXeDo6cnVuT3BlblBhbmVsKEZyYW1lKgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQoraW50NjRfdCBDaHJvbWVD
bGllbnRXeDo6bWF4QXBwQ2FjaGVTaXplKCkKK3sKKyAgIG5vdEltcGxlbWVudGVkKCk7CisgICAv
LyBGSVhNRTogaW1wbGVtZW50IHRoaXMgcHJvcGVybHkuCisgICByZXR1cm4gNSAqIDEwMjQgKiAx
MDI0OwogfQorI2VuZGlmCisKK30KKwpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hy
b21lQ2xpZW50V3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJv
bWVDbGllbnRXeC5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0
L0Nocm9tZUNsaWVudFd4LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsMTAgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBOb2RlKikg
eyB9CiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIHZpcnR1YWwg
aW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHd4V2Vi
VmlldyogbV93ZWJWaWV3OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29848</attachid>
            <date>2009-04-28 08:46:03 -0700</date>
            <delta_ts>2009-04-29 11:34:57 -0700</delta_ts>
            <desc>New proposal to limit the maximum size of the application cache (take 2).</desc>
            <filename>appcache.patch</filename>
            <type>text/plain</type>
            <size>33658</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjkzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDktMDQtMjggIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IExpbWl0cyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBhbmQKKwll
eHBpcmVzIG9sZCBjYWNoZXMgaW4gTFJVIGZhc2hpb24gd2hlbiB0aGUgbWF4aW11bQorCXNpemUg
aXMgcmVhY2hlZC4KKwkKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmFkZFJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmNlKToKKyAg
ICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZTo6c2l6ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSXNDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6Om1heEFwcENhY2hlU2l6ZSk6CisgICAgICAgICogbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5oOgorICAgICAgICAqIGxvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVJlc291cmNlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKToKKyAgICAgICAgKiBs
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmg6CisgICAgICAgICogbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVOZXdlc3RDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bGFzdEV4ZWN1
dGlvbkZhaWxlZER1ZU1heFNpemVSZWFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpldmljdExSVUFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnVwZGF0ZUNhY2hlVGltZXN0YW1wKToKKyAg
ICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaDoKKyAgICAg
ICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVE
YXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6ZnJlZVNwYWNl
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6Y3VycmVudFNpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgorCiAyMDA5LTA0LTI4ICBK
b2huIFN1bGxpdmFuICA8c3VsbGl2YW5AYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82ODIwMjIxPiBSRUdSRVNTSU9OOiAyLWJ5dGUgY2hhcmFjdGVyIG5hbWVzIG9mIGltYWdl
cyBhcmUgZGlzcGxheWVkIGFzICUtZW5jb2RlZCBBU0NJSQpJbmRleDogV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDQyMDI2KQorKysgV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDcgQEAgQXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZSgpCiAg
ICAgOiBtX2dyb3VwKDApCiAgICAgLCBtX21hbmlmZXN0KDApCiAgICAgLCBtX3N0b3JhZ2VJRCgw
KQorICAgICwgbV9zaXplKDApCiB7CiB9CiAKQEAgLTg0LDkgKzg1LDEzIEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZTo6YWRkUmVzb3VyY2UoUGFzc1IKICAgICAgICAgQVNTRVJUKHJlc291cmNlLT50
eXBlKCkgJiAoQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpEeW5hbWljIHwgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlOjpNYXN0ZXIpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFkZCB0aGUgcmVz
b3VyY2UgdG8gdGhlIHN0b3JhZ2UuCi0gICAgICAgIGNhY2hlU3RvcmFnZSgpLnN0b3JlKHJlc291
cmNlLmdldCgpLCB0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JvdXApOworICAgICAgICBjYWNo
ZVN0b3JhZ2UoKS5zdG9yZShyZXNvdXJjZS5nZXQoKSwgdGhpcywgbV9ncm91cC0+bWF4QXBwQ2Fj
aGVTaXplKCkpOwogICAgIH0KLSAgICAKKworICAgIG1fc2l6ZSArPSByZXNvdXJjZS0+c2l6ZSgp
OworCisgICAgLy8gRmluYWxseSBhZGQgdGhlIHJlc291cmNlIHRvIG91ciBtYXAuCiAgICAgbV9y
ZXNvdXJjZXMuc2V0KHVybCwgcmVzb3VyY2UpOwogfQogCkBAIC05OSw2ICsxMDQsOCBAQCB1bnNp
Z25lZCBBcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVSZXNvdXJjCiAgICAgLy8gVGhlIHJlc291cmNl
IGV4aXN0cywgZ2V0IGl0cyB0eXBlIHNvIHdlIGNhbiByZXR1cm4gaXQuCiAgICAgdW5zaWduZWQg
dHlwZSA9IGl0LT5zZWNvbmQtPnR5cGUoKTsKIAorICAgIG1fc2l6ZSAtPSBpdC0+c2Vjb25kLT5z
aXplKCk7CisKICAgICBtX3Jlc291cmNlcy5yZW1vdmUoaXQpOwogICAgIAogICAgIHJldHVybiB0
eXBlOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaAko
cmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDggQEAgcHVibGljOgogICAgIAogICAg
IHN0YXRpYyBib29sIHJlcXVlc3RJc0hUVFBPckhUVFBTR2V0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOwogCisgICAgaW50NjRfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKIHBy
aXZhdGU6CiAgICAgQXBwbGljYXRpb25DYWNoZSgpOwogICAgIApAQCAtMTA2LDYgKzEwOCw5IEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxLVVJMLCBib29sPiA+IG1fcGVuZGluZ0R5
bmFtaWNFbnRyeUFjdGlvbnM7CiAKICAgICB1bnNpZ25lZCBtX3N0b3JhZ2VJRDsKKworICAgIC8v
IFRoZSB0b3RhbCBzaXplIG9mIHRoZSByZXNvdXJjZXMgYmVsb25naW5nIHRvIHRoaXMgQXBwbGlj
YXRpb24gQ2FjaGUgaW5zdGFuY2UuCisgICAgaW50NjRfdCBtX3NpemU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRE9NQXBwbGljYXRpb25DYWNoZS5oIgogI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgpAQCAtNzEwLDcgKzcxMSw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpj
aGVja0lmTG9hZEkKIAogICAgICAgICAvLyBUaGUgc3RvcmFnZSBjb3VsZCBoYXZlIGJlZW4gbWFu
dWFsbHkgZW1wdGllZCBieSB0aGUgdXNlci4KICAgICAgICAgaWYgKCFtX3N0b3JhZ2VJRCkKLSAg
ICAgICAgICAgIGNhY2hlU3RvcmFnZSgpLnN0b3JlTmV3ZXN0Q2FjaGUodGhpcyk7CisgICAgICAg
ICAgICBjYWNoZVN0b3JhZ2UoKS5zdG9yZU5ld2VzdENhY2hlKHRoaXMsIG1heEFwcENhY2hlU2l6
ZSgpKTsKIAogICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01BcHBsaWNhdGlvbkNhY2hlOjpj
YWxsTm9VcGRhdGVMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKICAgICAg
ICAgYnJlYWs7CkBAIC03MzIsNyArNzMzLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6
OmNoZWNrSWZMb2FkSQogICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gb2xkTmV3ZXN0
Q2FjaGUgPSAobV9uZXdlc3RDYWNoZSA9PSBtX2NhY2hlQmVpbmdVcGRhdGVkKSA/IDAgOiBtX25l
d2VzdENhY2hlOwogCiAgICAgICAgIHNldE5ld2VzdENhY2hlKG1fY2FjaGVCZWluZ1VwZGF0ZWQu
cmVsZWFzZSgpKTsKLSAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmVOZXdlc3RDYWNoZSh0aGlz
KTsKKyAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmVOZXdlc3RDYWNoZSh0aGlzLCBtYXhBcHBD
YWNoZVNpemUoKSk7CiAKICAgICAgICAgaWYgKG9sZE5ld2VzdENhY2hlKQogICAgICAgICAgICAg
Y2FjaGVTdG9yYWdlKCkucmVtb3ZlKG9sZE5ld2VzdENhY2hlLmdldCgpKTsKQEAgLTg4MSw2ICs4
ODIsMTAgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNsZWFyU3RvcmFnZQogICAgICAg
ICAoKml0KS0+Y2xlYXJTdG9yYWdlSUQoKTsKIH0KICAgICAKK2ludDY0X3QgQXBwbGljYXRpb25D
YWNoZUdyb3VwOjptYXhBcHBDYWNoZVNpemUoKSB7CisgICAgQVNTRVJUKG1fZnJhbWUpOworICAg
IHJldHVybiBtX2ZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+bWF4QXBwQ2FjaGVT
aXplKCk7Cit9CiAKIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZUdyb3VwLmgJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYg
KzkwLDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0NvcHkoKSBjb25zdCB7IHJldHVybiBtX2lz
Q29weTsgfQogCisgICAgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKTsKKwogcHJpdmF0ZToKICAg
ICB0eXBlZGVmIHZvaWQgKERPTUFwcGxpY2F0aW9uQ2FjaGU6OipMaXN0ZW5lckZ1bmN0aW9uKSgp
OwogICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2soTGlzdGVuZXJGdW5jdGlvbiwgY29u
c3QgSGFzaFNldDxEb2N1bWVudExvYWRlcio+Jik7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDQy
MDI2KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U6OkFwcGxpY2F0aW9uQ2FjCiAgICAgOiBTdWJzdGl0dXRlUmVzb3VyY2UodXJsLCByZXNw
b25zZSwgZGF0YSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9zdG9yYWdlSUQoMCkKKyAg
ICAsIG1fc2l6ZSgwKQogewogfQogCkBAIC00NCw2ICs0NSwyOSBAQCB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZTo6YWRkVHlwZSh1CiAgICAgbV90eXBlIHw9IHR5cGU7IAogfQogCitpbnQ2
NF90IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6c2l6ZSgpCit7CisgICAgaWYgKCFtX3NpemUp
IHsKKyAgICAgICAgaWYgKGRhdGEoKSkKKyAgICAgICAgICAgIG1fc2l6ZSArPSBkYXRhKCktPnNp
emUoKTsKKyAgICAKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMo
KS5iZWdpbigpOyBpdCE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgbV9zaXplICs9IChpdC0+
Zmlyc3QubGVuZ3RoKCkgKyBpdC0+c2Vjb25kLmxlbmd0aCgpICsgMikgKiBzaXplb2YoVUNoYXIp
OworICAgICAgICB9CisgICAgCisgICAgICAgIG1fc2l6ZSArPSB1cmwoKS5zdHJpbmcoKS5sZW5n
dGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIG1fc2l6ZSArPSBzaXplb2YoaW50KTsgIC8v
IHJlc291cmNlLm1faHR0cFN0YXR1c0NvZGUKKyAgICAgICAgbV9zaXplICs9IHJlc3BvbnNlKCku
dXJsKCkuc3RyaW5nKCkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgICAgICBtX3NpemUg
Kz0gc2l6ZW9mKHVuc2lnbmVkKTsgIC8vIGRhdGFJZAorICAgICAgICBtX3NpemUgKz0gcmVzcG9u
c2UoKS5taW1lVHlwZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgbV9zaXpl
ICs9IHJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFy
KTsKKyAKKyAgICB9CisKKyAgICByZXR1cm4gbV9zaXplOworfQorCiAjaWZuZGVmIE5ERUJVRwog
dm9pZCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmR1bXBUeXBlKHVuc2lnbmVkIHR5cGUpCiB7
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UuaAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgc3RvcmFnZUlEKCkgY29uc3QgeyByZXR1cm4gbV9zdG9y
YWdlSUQ7IH0KICAgICB2b2lkIGNsZWFyU3RvcmFnZUlEKCkgeyBtX3N0b3JhZ2VJRCA9IDA7IH0K
IAorICAgIGludDY0X3Qgc2l6ZSgpOworCiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyB2b2lk
IGR1bXBUeXBlKHVuc2lnbmVkIHR5cGUpOwogI2VuZGlmCkBAIC02NCw2ICs2Niw3IEBAIHByaXZh
dGU6CiAKICAgICB1bnNpZ25lZCBtX3R5cGU7CiAgICAgdW5zaWduZWQgbV9zdG9yYWdlSUQ7Cisg
ICAgaW50NjRfdCBtX3NpemU7CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlLmNwcAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlR3JvdXAuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ3VycmVu
dFRpbWUuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgpAQCAtMzksNiArNDAsOCBAQAogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKKyNpbmNs
dWRlIDxzcWxpdGUzLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTgzLDYgKzg2LDkgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlv
bkNhY2hlUwogICAgIGdyb3VwLT5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSkpOwogICAgIGdyb3VwLT5zZXROZXdlc3RDYWNoZShj
YWNoZS5yZWxlYXNlKCkpOwogCisgICAgLy8gV2UgYXJlIHVzaW5nIHRoZSBjYWNoZS4gVXBkYXRl
IGl0cyB0aW1lc3RhbXAuCisgICAgdXBkYXRlQ2FjaGVUaW1lc3RhbXAobmV3ZXN0Q2FjaGVTdG9y
YWdlSUQpOworCiAgICAgcmV0dXJuIGdyb3VwOwogfSAgICAKIApAQCAtMTg1LDYgKzE5MSw5IEBA
IEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVMKICAgICAgICAgLy8gYSBt
YXRjaGluZyBVUkwuCiAgICAgICAgIHVuc2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDIpKTsKICAgICAgICAgUmVmUHRy
PEFwcGxpY2F0aW9uQ2FjaGU+IGNhY2hlID0gbG9hZENhY2hlKG5ld2VzdENhY2hlSUQpOworICAg
ICAgICAvLyBGb3IgdmFyaW91cyByZWFzb25zLCBsb2FkQ2FjaGUgY2FuIHJldHVybiAwOworICAg
ICAgICBpZiAoIWNhY2hlKQorICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGNhY2hlLT5yZXNvdXJjZUZvclVSTCh1cmwp
OwogICAgICAgICBpZiAoIXJlc291cmNlKQpAQCAtMTk5LDYgKzIwOCw5IEBAIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVMKICAgICAgICAgCiAgICAgICAgIG1fY2FjaGVz
SW5NZW1vcnkuc2V0KGdyb3VwLT5tYW5pZmVzdFVSTCgpLCBncm91cCk7CiAgICAgICAgIAorICAg
ICAgICAvLyBXZSBhcmUgdXNpbmcgdGhlIGNhY2hlLiBVcGRhdGUgaXRzIHRpbWVzdGFtcC4KKyAg
ICAgICAgdXBkYXRlQ2FjaGVUaW1lc3RhbXAobmV3ZXN0Q2FjaGVJRCk7CisKICAgICAgICAgcmV0
dXJuIGdyb3VwOwogICAgIH0KIApAQCAtMzI4LDcgKzM0MCw3IEBAIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmV4ZWN1dGVTUUwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
Y29uc3QgaW50IHNjaGVtYVZlcnNpb24gPSAzOworc3RhdGljIGNvbnN0IGludCBzY2hlbWFWZXJz
aW9uID0gNDsKICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNjaGVt
YVZlcnNpb24oKQogewpAQCAtMzc4LDcgKzM5MCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6Om9wZW5EYXRhYmEKICAgICAvLyBDcmVhdGUgdGFibGVzCiAgICAgZXhlY3V0ZVNRTENv
bW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlR3JvdXBzIChpZCBJTlRFR0VS
IFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsICIKICAgICAgICAgICAgICAgICAgICAgICAibWFu
aWZlc3RIb3N0SGFzaCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG1hbmlmZXN0
VVJMIFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIG5ld2VzdENhY2hlIElOVEVHRVIpIik7
Ci0gICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hl
cyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBjYWNoZUdyb3VwIElOVEVH
RVIpIik7CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT
IENhY2hlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBjYWNoZUdyb3Vw
IElOVEVHRVIsIHNpemUgSU5URUdFUiwgdGltZXN0YW1wIElOVEVHRVIpIik7CiAgICAgZXhlY3V0
ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlV2hpdGVsaXN0VVJM
cyAodXJsIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgY2FjaGUgSU5URUdFUiBOT1Qg
TlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOwogICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUg
VEFCTEUgSUYgTk9UIEVYSVNUUyBGYWxsYmFja1VSTHMgKG5hbWVzcGFjZSBURVhUIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwsIGZhbGxiYWNrVVJMIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1Qg
RkFJTCwgIgogICAgICAgICAgICAgICAgICAgICAgICJjYWNoZSBJTlRFR0VSIE5PVCBOVUxMIE9O
IENPTkZMSUNUIEZBSUwpIik7CkBAIC00MDYsNiArNDE4LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6b3BlbkRhdGFiYQogICAgICAgICAgICAgICAgICAgICAgICIgRk9SIEVBQ0gg
Uk9XIEJFR0lOIgogICAgICAgICAgICAgICAgICAgICAgICIgIERFTEVURSBGUk9NIENhY2hlUmVz
b3VyY2VEYXRhIFdIRVJFIGlkID0gT0xELmRhdGE7IgogICAgICAgICAgICAgICAgICAgICAgICIg
RU5EIik7CisKKyAgICAvLyBUbyBiZSBhYmxlIHRvIHF1aWNrbHkgZXZpY3QgY2FjaGVzIGluIExS
VSBvcmRlciwgd2UgaW5kZXggdGhlIENhY2hlcyB0YWJsZSBvbiB0aGUgdGltZXN0YW1wIGF0dHJp
YnV0ZS4KKyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIElOREVYIGxydUluZGV4IE9OIENh
Y2hlcyh0aW1lc3RhbXApIEFTQzsiKTsKIH0KIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6ZXhlY3V0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmIHN0YXRlbWVudCkKQEAgLTQ0MSwx
MSArNDU2LDEzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGwKICAg
ICBBU1NFUlQoY2FjaGUtPnN0b3JhZ2VJRCgpID09IDApOwogICAgIEFTU0VSVChjYWNoZS0+Z3Jv
dXAoKS0+c3RvcmFnZUlEKCkgIT0gMCk7CiAgICAgCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVzIChjYWNoZUdyb3VwKSBWQUxVRVMg
KD8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJU
IElOVE8gQ2FjaGVzIChjYWNoZUdyb3VwLCBzaXplLCB0aW1lc3RhbXApIFZBTFVFUyAoPywgPywg
PykiKTsKICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBjYWNoZS0+Z3Jv
dXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGUtPnNp
emUoKSk7CisgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgzLCBjdXJyZW50VGltZSgpKTsKIAogICAg
IGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC01ODUsNDMgKzYwMiwxMDEgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3Rv
cmVVcGRhdAogICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50KGVudHJ5U3RhdGVtZW50KTsKIH0K
IAotdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJl
c291cmNlKiByZXNvdXJjZSwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCit2b2lkIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNl
LCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUpCiB7CiAg
ICAgQVNTRVJUKGNhY2hlLT5zdG9yYWdlSUQoKSk7CiAgICAgCiAgICAgb3BlbkRhdGFiYXNlKHRy
dWUpOwogIAorICAgIG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobWF4QXBwQ2FjaGVTaXplKTsK
ICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9yZVJlc291cmNlVHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7CiAgICAgc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0gICAgCi0gICAgaWYg
KCFzdG9yZShyZXNvdXJjZSwgY2FjaGUtPnN0b3JhZ2VJRCgpKSkKKworICAgIGlmICghc3RvcmUo
cmVzb3VyY2UsIGNhY2hlLT5zdG9yYWdlSUQoKSkpIHsKKyAgICAgICAgaWYgKCFsYXN0RXhlY3V0
aW9uRmFpbGVkRHVlTWF4U2l6ZVJlYWNoZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgLy8gVGhlIGZhaWx1cmUgd2FzIGR1ZSB0byBtYXhpbXVtIHNpemUgYmVpbmcgcmVhY2hlZC4g
Um9sbGJhY2suCisgICAgICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5yb2xsYmFjaygpOwor
ICAgICAgICAvLyBBdHRlbXB0IHRvIGV2aWN0IHNvbWUgb2xkIGNhY2hlcy4KKyAgICAgICAgaWYg
KCFldmljdExSVUFwcGxpY2F0aW9uQ2FjaGUocmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpLCBtYXhB
cHBDYWNoZVNpemUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBUaGUgZXZpY3Rp
b24gd2FzIHN1Y2Nlc3NmdWwuIFJldHJ5IHRvIHN0b3JlIHRoZSByZXNvdXJjZS4KKyAgICAgICAg
c3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgICAgIGlmICghc3RvcmUocmVz
b3VyY2UsIGNhY2hlLT5zdG9yYWdlSUQoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gQSByZXNvdXJjZSB3YXMgYWRkZWQgdG8gdGhlIGNhY2hlLiBVcGRhdGUgdGhlIHRv
dGFsIGRhdGEgc2l6ZSBmb3IgdGhlIGNhY2hlLgorICAgIFNRTGl0ZVN0YXRlbWVudCBzaXplVXBk
YXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVzIFNFVCBzaXplPXNpemUrPyBX
SEVSRSBpZD0/Iik7CisgICAgaWYgKHNpemVVcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TFJlc3VsdE9rKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBzaXplVXBkYXRlU3RhdGVt
ZW50LmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+c2l6ZSgpKTsKKyAgICBzaXplVXBkYXRlU3RhdGVt
ZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3RvcmFnZUlEKCkpOworCisgICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHNpemVVcGRhdGVTdGF0ZW1lbnQpKQorICAgICAgICByZXR1cm47CisKICAgICBz
dG9yZVJlc291cmNlVHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKLWJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91
cCkKK2Jvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGlj
YXRpb25DYWNoZUdyb3VwKiBncm91cCwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUpCiB7CiAgICAg
b3BlbkRhdGFiYXNlKHRydWUpOwogICAgIAorICAgIG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUo
bWF4QXBwQ2FjaGVTaXplKTsKICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9yZUNhY2hlVHJhbnNh
Y3Rpb24obV9kYXRhYmFzZSk7CiAgICAgCiAgICAgc3RvcmVDYWNoZVRyYW5zYWN0aW9uLmJlZ2lu
KCk7CiAgICAgCisgICAgLy8gV2UgdHJ5IHRvIHN0b3JlIHRoZSBncm91cCBhbmQgdGhlIG5ld2Vz
dCBjYWNoZS4gSWYgdGhlIGRhdGFiYXNlCisgICAgLy8gcmVwb3J0cyB0aGF0IHdlIGhhdmUgaGl0
IHRoZSBtYXhBcHBDYWNoZVNpemUgbGltaXQsIHdlIGF0dGVtcHQgdG8KKyAgICAvLyByZW1vdmUg
ZW5vdWdoIGVudHJpZXMgKGluIExSVSBvcmRlcikgZnJvbSB0aGUgY2FjaGUgc28gdGhhdCB0aGUg
bmV3ZXN0CisgICAgLy8gY2FjaGUgZml0cyBpbi4gSWYgdGhlIG5ld2VzdCBjYWNoZSBpcyBzdGls
bCB0b28gYmlnLCB3ZSBiYWlsIG91dC4KKworICAgIC8vIEZpcnN0IGRvIGEgc2FuaXR5IGNoZWNr
IG9uIHRoZSBzaXplIG9mIHRoZSBjYWNoZS4KKyAgICBpZiAoZ3JvdXAtPm5ld2VzdENhY2hlKCkt
PnNpemUoKSA+PSBtYXhBcHBDYWNoZVNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAg
IGlmICghZ3JvdXAtPnN0b3JhZ2VJRCgpKSB7CiAgICAgICAgIC8vIFN0b3JlIHRoZSBncm91cAot
ICAgICAgICBpZiAoIXN0b3JlKGdyb3VwKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKCFzdG9yZShncm91cCkpIHsKKyAgICAgICAgICAgIGlmICghbGFzdEV4ZWN1dGlv
bkZhaWxlZER1ZU1heFNpemVSZWFjaGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgLy8gVGhlIGZhaWx1cmUgd2FzIGR1ZSB0byBtYXhpbXVtIHNpemUgYmVp
bmcgcmVhY2hlZC4gUm9sbGJhY2suCisgICAgICAgICAgICBncm91cC0+c2V0U3RvcmFnZUlEKDAp
OworICAgICAgICAgICAgc3RvcmVDYWNoZVRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7CisgICAgICAg
ICAgICAvLyBBdHRlbXB0IHRvIGV2aWN0IHNvbWUgb2xkIGNhY2hlcy4KKyAgICAgICAgICAgIGlm
ICghZXZpY3RMUlVBcHBsaWNhdGlvbkNhY2hlKGdyb3VwLT5uZXdlc3RDYWNoZSgpLT5zaXplKCks
IG1heEFwcENhY2hlU2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgLy8gVGhlIGV2aWN0aW9uIHdhcyBzdWNjZXNzZnVsLiBSZXRyeSB0byBzdG9yZSB0aGUg
Z3JvdXAuCisgICAgICAgICAgICBzdG9yZUNhY2hlVHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICAg
ICAgICAgIGlmICghc3RvcmUoZ3JvdXApKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIEFTU0VSVChncm91cC0+bmV3ZXN0Q2FjaGUo
KSk7CiAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNvbGV0ZSgpKTsKICAgICBBU1NFUlQoIWdyb3Vw
LT5uZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgCisKICAgICAvLyBTdG9yZSB0aGUg
bmV3ZXN0IGNhY2hlCi0gICAgaWYgKCFzdG9yZShncm91cC0+bmV3ZXN0Q2FjaGUoKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKKyAgICBpZiAoIXN0b3JlKGdyb3VwLT5uZXdlc3RDYWNo
ZSgpKSkgeworICAgICAgICBpZiAoIWxhc3RFeGVjdXRpb25GYWlsZWREdWVNYXhTaXplUmVhY2hl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBUaGUgZmFpbHVyZSB3
YXMgZHVlIHRvIG1heGltdW0gc2l6ZSBiZWluZyByZWFjaGVkLiBSb2xsYmFjay4KKyAgICAgICAg
Z3JvdXAtPnNldFN0b3JhZ2VJRCgwKTsKKyAgICAgICAgZ3JvdXAtPm5ld2VzdENhY2hlKCktPnNl
dFN0b3JhZ2VJRCgwKTsKKyAgICAgICAgc3RvcmVDYWNoZVRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7
CisgICAgICAgIC8vIEF0dGVtcHQgdG8gZXZpY3Qgc29tZSBvbGQgY2FjaGVzLgorICAgICAgICBp
ZiAoIWV2aWN0TFJVQXBwbGljYXRpb25DYWNoZShncm91cC0+bmV3ZXN0Q2FjaGUoKS0+c2l6ZSgp
LCBtYXhBcHBDYWNoZVNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAv
LyBUaGUgZXZpY3Rpb24gd2FzIHN1Y2Nlc3NmdWwuIFJldHJ5IHRvIHN0b3JlIHRoZSBncm91cCBh
bmQgdGhlIGNhY2hlLgorICAgICAgICBzdG9yZUNhY2hlVHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAg
ICAgICAgaWYgKCFzdG9yZShncm91cCkgfHwgIXN0b3JlKGdyb3VwLT5uZXdlc3RDYWNoZSgpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICAvLyBVcGRhdGUgdGhlIG5l
d2VzdCBjYWNoZSBpbiB0aGUgZ3JvdXAuCiAgICAgCiAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIENhY2hlR3JvdXBzIFNFVCBuZXdlc3RDYWNoZT0/IFdI
RVJFIGlkPT8iKTsKQEAgLTgyNyw3ICs5MDIsMTA5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnN0b3JlQ29weU8KICAgICAvLyBFbXB0eSB0aGUgY2FjaGUgaW4gY2FzZSBzb21ldGhp
bmcgd2FzIHRoZXJlIGJlZm9yZS4KICAgICBjb3B5U3RvcmFnZS5lbXB0eSgpOwogICAgIAotICAg
IHJldHVybiBjb3B5U3RvcmFnZS5zdG9yZU5ld2VzdENhY2hlKGdyb3VwQ29weS5nZXQoKSk7Cisg
ICAgcmV0dXJuIGNvcHlTdG9yYWdlLnN0b3JlTmV3ZXN0Q2FjaGUoZ3JvdXBDb3B5LmdldCgpLCBn
cm91cENvcHktPm1heEFwcENhY2hlU2l6ZSgpKTsKK30KKworYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZU1heFNpemVSZWFjaGVkKCkgeworICAgIHJl
dHVybiBtX2RhdGFiYXNlLmxhc3RFcnJvcigpID09IFNRTElURV9GVUxMOworfQorCitib29sIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpldmljdExSVUFwcGxpY2F0aW9uQ2FjaGUoaW50NjRfdCBp
bmNvbWluZ1NpemUsIGludDY0X3QgbWF4aW11bUFwcENhY2hlU2l6ZSkgeworICAgIG9wZW5EYXRh
YmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBzcGFjZSBuZWVkZWQg
dG8gYmUgZnJlZWQuCisgICAgaW50NjRfdCBzaXplVG9GcmVlID0gMDsKKyAgICAvLyBGaXJzdCBj
aGVjayBpZiBtYXhpbXVtQXBwQ2FjaGVTaXplIGlzbid0IHNtYWxsZXIgdGhhbiB0aGUgY3VycmVu
dCBkYXRhYmFzZSBzaXplLgorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdmFsdWUgaXMg
Z2VuZXJhdGVkIGR5bmFtaWNhbGx5IChlLmcuIGJ5IHRoZSB1c2VyKS4KKyAgICBpZiAobWF4aW11
bUFwcENhY2hlU2l6ZSA8IG1fZGF0YWJhc2UuY3VycmVudFNpemUoKSkgeworICAgICAgICAvLyBD
aGVjayBpZiB0aGUgaW5jb21pbmdTaXplIHN0aWxsIGZpdHMgaW5zaWRlIG1heGltdW1BcHBDYWNo
ZVNpemUuCisgICAgICAgIC8vIEl0IG5lZWRzIHRvIGJlIHN0cmljdGx5IHNtYWxsZXIgdG8gZml0
IHNpbmNlIFNRTGl0ZSBhZGRzIHNvbWUKKyAgICAgICAgLy8gc3BhY2Ugb3ZlcmhlYWQgZm9yIHN0
b3JpbmcgbWV0YWRhdGEuIFNpbmNlIHdlIGNhbm5vdCB0ZWxsIGhvdyBiaWcKKyAgICAgICAgLy8g
dGhpcyBtZXRhZGF0YSBpcywgd2UgcnVuIHRoZSByaXNrIG9mIGJsb3dpbmcgdXAgdGhlIGVudGly
ZSBjYWNoZSBhbmQKKyAgICAgICAgLy8gZmluZGluZyB0aGF0IHRoZSBuZXcgY2FjaGUgc3RpbGwg
ZG9lcyBub3QgZml0IHdoZW4gaW5jb21pbmdTaXplIH49IG1heGltdW1BcHBDYWNoZVNpemUKKyAg
ICAgICAgLy8gYnV0IG1ldGFkYXRhU2l6ZSA+IChtYXhpbXVtQXBwQ2FjaGVTaXplIC0gaW5jb21p
bmdTaXplKS4gU2luY2UgdGhpcworICAgICAgICAvLyBpcyBsaWtlbHkgYSByYXJlIGNhc2UsIHdl
IGNhbiBsaXZlIHdpdGggaXQuCisgICAgICAgIGlmIChpbmNvbWluZ1NpemUgPCBtYXhpbXVtQXBw
Q2FjaGVTaXplKSB7CisgICAgICAgICAgICBzaXplVG9GcmVlID0gaW5jb21pbmdTaXplOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gaW5jb21pbmdTaXplIGRvZXNuJ3QgZml0LCBi
YWlsIG91dC4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIG1heGltdW1BcHBDYWNoZVNpemUgaXMgYXQgbGVhc3QgYXMgYmlnIGFz
IHRoZSBjdXJyZW50IGRhdGFiYXNlIHNpemUuCisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgdG90
YWwgYXZhaWxhYmxlIHNwYWNlIHNpemUuIFRoaXMgaXMgdGhlIG51bWJlciBvZiBmcmVlCisgICAg
ICAgIC8vIGJ5dGVzIGluIHRoZSBjdXJyZW50IGRhdGFiYXNlIGZpbGUgKyB0aGUgc3BhY2Ugd2Ug
YXJlIGFsbG93ZWQgdG8gZ3JvdworICAgICAgICAvLyAod2hpY2ggaXMgYm91bmRlZCBieSBtYXhp
bXVtQXBwQ2FjaGVTaXplKS4KKyAgICAgICAgaW50NjRfdCB0b3RhbEF2YWlsYWJsZVNpemUgPSAo
bWF4aW11bUFwcENhY2hlU2l6ZSAtIG1fZGF0YWJhc2UuY3VycmVudFNpemUoKSkgKyBtX2RhdGFi
YXNlLmZyZWVTcGFjZVNpemUoKTsKKyAgICAgICAgQVNTRVJUKHRvdGFsQXZhaWxhYmxlU2l6ZSk7
CisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc3BhY2Ugd2UgbmVlZCB0byBmcmVlIGluc2lkZSB0
aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAgICAgaW50NjRfdCBzaXplVG9GcmVlID0gaW5jb21pbmdT
aXplIC0gdG90YWxBdmFpbGFibGVTaXplOworICAgIH0KKworICAgIEFTU0VSVChzaXplVG9GcmVl
KTsKKworICAgIGludDY0X3QgY3VtbXVsYXRpdmVTaXplID0gMDsKKyAgICBWZWN0b3I8aW50NjRf
dD4gaWRzOworCisgICAgLy9TdGFydCBhIG5ldyB0cmFuc2FjdGlvbjsKKyAgICBTUUxpdGVUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICAvLyBGaW5kIG91dCB3aGF0IGNh
Y2hlcyB0byBkZWxldGUuCisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc2VsZWN0Vmlj
dGltcyhtX2RhdGFiYXNlLCAiU0VMRUNUIGlkLCBzaXplIEZST00gQ2FjaGVzIE9SREVSIEJZIHRp
bWVzdGFtcDsiKTsKKworICAgICAgICBpZiAoc2VsZWN0VmljdGltcy5wcmVwYXJlKCkgIT0gU1FM
UmVzdWx0T2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgd2hpbGUgKHNl
bGVjdFZpY3RpbXMuc3RlcCgpID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICAgICAgaWRzLmFw
cGVuZChzZWxlY3RWaWN0aW1zLmdldENvbHVtbkludDY0KDApKTsKKyAgICAgICAgICAgIGN1bW11
bGF0aXZlU2l6ZSArPSBzZWxlY3RWaWN0aW1zLmdldENvbHVtbkludDY0KDEpOworICAgICAgICAg
ICAgaWYgKGN1bW11bGF0aXZlU2l6ZSA+IHNpemVUb0ZyZWUpIHsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjdW1tdWxh
dGl2ZVNpemUgPD0gc2l6ZVRvRnJlZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
RGVsZXRlIHRoZSBjYWNoZXMuCisgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVZpY3RpbShtX2Rh
dGFiYXNlLCAiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT87Iik7CisgICAgaWYgKGRlbGV0
ZVZpY3RpbS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIFVwZGF0ZSB0aGUgQ2FjaGVHcm91cHMgdGFibGUuCisgICAgU1FMaXRlU3RhdGVt
ZW50IHVwZGF0ZUNhY2hlR3JvdXBzKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZUdyb3Vw
cyBXSEVSRSBuZXdlc3RDYWNoZT0/OyIpOworICAgIGlmICh1cGRhdGVDYWNoZUdyb3Vwcy5wcmVw
YXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAo
VmVjdG9yPGludDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGlkcy5iZWdpbigpOyBpdCAhPSBp
ZHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgZGVsZXRlVmljdGltLmJpbmRJbnQ2NCgxLCAqaXQp
OworICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoZGVsZXRlVmljdGltKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB1cGRhdGVDYWNoZUdyb3Vwcy5iaW5kSW50NjQo
MSwgKml0KTsKKyAgICAgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHVwZGF0ZUNhY2hlR3JvdXBz
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5j
b21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6dXBkYXRlQ2FjaGVUaW1lc3RhbXAoaW50NjRfdCBpZCkKK3sKKyAgICBvcGVuRGF0YWJh
c2UoZmFsc2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgU1FMaXRlU3RhdGVtZW50IHVwZGF0ZVRpbWVzdGFtcFN0YXRlbWVudChtX2RhdGFi
YXNlLCAiVVBEQVRFIENhY2hlcyBTRVQgdGltZXN0YW1wPT8gV0hFUkUgaWQ9PyIpOworICAgIGlm
ICh1cGRhdGVUaW1lc3RhbXBTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rKSB7Cisg
ICAgICAgIHVwZGF0ZVRpbWVzdGFtcFN0YXRlbWVudC5iaW5kSW50NjQoMSwgY3VycmVudFRpbWUo
KSk7CisgICAgICAgIHVwZGF0ZVRpbWVzdGFtcFN0YXRlbWVudC5iaW5kSW50NjQoMiwgaWQpOwor
ICAgICAgICBleGVjdXRlU3RhdGVtZW50KHVwZGF0ZVRpbWVzdGFtcFN0YXRlbWVudCk7CisgICAg
fQogfQogICAgIAogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UmIGNhY2hlU3RvcmFnZSgpCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
LmgJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjYWNoZUdyb3VwRGVzdHJveWVkKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCopOwog
ICAgIHZvaWQgY2FjaGVHcm91cE1hZGVPYnNvbGV0ZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqKTsK
ICAgICAgICAgCi0gICAgYm9vbCBzdG9yZU5ld2VzdENhY2hlKEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCopOyAvLyBVcGRhdGVzIHRoZSBjYWNoZSBncm91cCwgYnV0IGRvZXNuJ3QgcmVtb3ZlIG9sZCBj
YWNoZS4KLSAgICB2b2lkIHN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSosIEFwcGxpY2F0
aW9uQ2FjaGUqKTsKKyAgICBib29sIHN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGljYXRpb25DYWNoZUdy
b3VwKiwgaW50NjRfdCk7IC8vIFVwZGF0ZXMgdGhlIGNhY2hlIGdyb3VwLCBidXQgZG9lc24ndCBy
ZW1vdmUgb2xkIGNhY2hlLgorICAgIHZvaWQgc3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNl
KiwgQXBwbGljYXRpb25DYWNoZSosIGludDY0X3QpOwogICAgIGJvb2wgc3RvcmVVcGRhdGVkVHlw
ZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqLCBBcHBsaWNhdGlvbkNhY2hlKik7CiAKICAgICAv
LyBSZW1vdmVzIHRoZSBncm91cCBpZiB0aGUgY2FjaGUgdG8gYmUgcmVtb3ZlZCBpcyB0aGUgbmV3
ZXN0IG9uZSAoc28sIHN0b3JlTmV3ZXN0Q2FjaGUoKSBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3Jl
aGFuZCB3aGVuIHVwZGF0aW5nKS4KQEAgLTgxLDYgKzgxLDEwIEBAIHByaXZhdGU6CiAgICAgYm9v
bCBleGVjdXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYpOwogICAgIGJvb2wgZXhlY3V0ZVNR
TENvbW1hbmQoY29uc3QgU3RyaW5nJik7CiAgICAgCisgICAgYm9vbCBsYXN0RXhlY3V0aW9uRmFp
bGVkRHVlTWF4U2l6ZVJlYWNoZWQoKTsKKyAgICBib29sIGV2aWN0TFJVQXBwbGljYXRpb25DYWNo
ZShpbnQ2NF90LCBpbnQ2NF90KTsKKyAgICB2b2lkIHVwZGF0ZUNhY2hlVGltZXN0YW1wKGludDY0
X3QpOworCiAgICAgU3RyaW5nIG1fY2FjaGVEaXJlY3Rvcnk7CiAKICAgICBTUUxpdGVEYXRhYmFz
ZSBtX2RhdGFiYXNlOwpJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNDIwMjYpCisrKyBX
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRl
ZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkgPSAwOwog
CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgLy8gUmV0dXJu
cyB0aGUgbWF4aW11bSBzaXplIChpbiBieXRlcykgb2YgdGhlIGFwcGxpY2F0aW9uIGNhY2hlcyBm
aWxlLgorICAgICAgICB2aXJ0dWFsIGludDY0X3QgbWF4QXBwQ2FjaGVTaXplKCkgPSAwOworI2Vu
ZGlmCisKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDYgKzE1
MSwzMCBAQCBpbnQgU1FMaXRlRGF0YWJhc2U6OnBhZ2VTaXplKCkKICAgICByZXR1cm4gbV9wYWdl
U2l6ZTsKIH0KIAoraW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6ZnJlZVNwYWNlU2l6ZSgpCit7Cisg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOworICAgIGVuYWJsZUF1dGhv
cml6ZXIoZmFsc2UpOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBS
QUdNQSBmcmVlbGlzdF9jb3VudCIpOworICAgIGludDY0X3Qgc2l6ZSA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKSAqIHBhZ2VTaXplKCk7CisKKyAgICBlbmFibGVBdXRob3JpemVyKHRydWUp
OworICAgIHJldHVybiBzaXplOworfQorCitpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjpjdXJyZW50
U2l6ZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOworICAg
IGVuYWJsZUF1dGhvcml6ZXIoZmFsc2UpOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dCgqdGhpcywgIlBSQUdNQSBwYWdlX2NvdW50Iik7CisgICAgaW50NjRfdCBzaXplID0gc3RhdGVt
ZW50LmdldENvbHVtbkludDY0KDApICogcGFnZVNpemUoKTsKKworICAgIGVuYWJsZUF1dGhvcml6
ZXIodHJ1ZSk7CisgICAgcmV0dXJuIHNpemU7Cit9CisKIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNl
dFN5bmNocm9ub3VzKFN5bmNocm9ub3VzUHJhZ21hIHN5bmMpCiB7CiAgICAgZXhlY3V0ZUNvbW1h
bmQoU3RyaW5nOjpmb3JtYXQoIlBSQUdNQSBzeW5jaHJvbm91cyA9ICVpIiwgc3luYykpOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCShyZXZpc2lvbiA0MjAyNikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgzLDYgKzgzLDExIEBAIHB1YmxpYzoKICAgICBpbnQ2NF90IG1heGltdW1TaXplKCk7CiAgICAg
dm9pZCBzZXRNYXhpbXVtU2l6ZShpbnQ2NF90KTsKICAgICAKKyAgICAvLyBHZXRzIHRoZSBudW1i
ZXIgb2YgdW51c2VkIGJ5dGVzIGluIHRoZSBkYXRhYmFzZSBmaWxlLgorICAgIGludDY0X3QgZnJl
ZVNwYWNlU2l6ZSgpOworICAgIC8vIEdldHMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgZGF0YWJh
c2UgZmlsZSBpbiBieXRlcy4KKyAgICBpbnQ2NF90IGN1cnJlbnRTaXplKCk7CisKICAgICAvLyBU
aGUgU1FMaXRlIFNZTkNIUk9OT1VTIHByYWdtYSBjYW4gYmUgZWl0aGVyIEZVTEwsIE5PUk1BTCwg
b3IgT0ZGCiAgICAgLy8gRlVMTCAtIEFueSB3cml0aW5nIGNhbGxzIHRvIHRoZSBEQiBibG9jayB1
bnRpbCB0aGUgZGF0YSBpcyBhY3R1YWxseSBvbiB0aGUgZGlzayBzdXJmYWNlCiAgICAgLy8gTk9S
TUFMIC0gU1FMaXRlIHBhdXNlcyBhdCBzb21lIGNyaXRpY2FsIG1vbWVudHMgd2hlbiB3cml0aW5n
LCBidXQgbXVjaCBsZXNzIHRoYW4gRlVMTApJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDQyOTMwKQorKysgV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0w
NC0yOCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwlMaW1pdHMgdGhlIG1heGltdW0gc2l6ZSBvZiB0
aGUgQXBwbGljYXRpb24gQ2FjaGUgYW5kCisJZXhwaXJlcyBvbGQgY2FjaGVzIGluIExSVSBmYXNo
aW9uIHdoZW4gdGhlIG1heGltdW0KKwlzaXplIGlzIHJlYWNoZWQuCisKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVD
bGllbnQ6Om1heEFwcENhY2hlU2l6ZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50R3RrLmg6CisKIDIwMDktMDQtMjggIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQ6IGNvbW1pdHRlZCBhIGZldyBiaXRzIGJ5IG1pc3Rha2Us
IHJlbW92ZSB0aGVtLgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50R3RrLmNwcAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Myw0ICs0NTMsMTMg
QEAgdm9pZCBDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbChGcmFtZSosIAogICAgIGd0a193aWRn
ZXRfZGVzdHJveShkaWFsb2cpOwogfQogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykKK2ludDY0X3QgQ2hyb21lQ2xpZW50OjptYXhBcHBDYWNoZVNpemUoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgcHJvcGVybHkuCisg
ICByZXR1cm4gNSAqIDEwMjQgKiAxMDI0OworfQorI2VuZGlmCisKIH0KSW5kZXg6IFdlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAkocmV2aXNpb24gNDIwMjYpCisr
KyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsNiArMTAzLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6Tm9kZSopIHsgfQog
CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgdmlydHVhbCBp
bnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpOworI2VuZGlmCisKICAgICBwcml2YXRlOgogICAgICAg
ICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7CiAgICAgICAgIFdlYkNvcmU6OktVUkwgbV9ob3Zl
cmVkTGlua1VSTDsKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MjkzMCkKKysrIFdlYktpdC9tYWMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDQtMjggIEFuZHJlaSBQ
b3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisJTGltaXRzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIEFwcGxpY2F0aW9u
IENhY2hlIGFuZAorCWV4cGlyZXMgb2xkIGNhY2hlcyBpbiBMUlUgZmFzaGlvbiB3aGVuIHRoZSBt
YXhpbXVtCisJc2l6ZSBpcyByZWFjaGVkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjptYXhBcHBDYWNoZVNpemUpOgorCiAyMDA5
LTA0LTI3ICBEb3VnbGFzIFIuIERhdmlkc29uICA8ZGRhdmlkc29AYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCB0aGUgdmFyaW91cyBzd2l0Y2hlcyBhbmQgY29udGV4dCBtZW51IGl0ZW1zIG5lZWRl
ZCBmb3IKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDEwIEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoV2Vi
Q29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHZW9sb2NhdGlvbiopOwogCisjaWYgRU5BQkxFKE9GRkxJ
TkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICB2aXJ0dWFsIGludDY0X3QgbWF4QXBwQ2FjaGVTaXpl
KCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBXZWJWaWV3ICptX3dlYlZpZXc7CiB9OwpJbmRl
eDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlz
aW9uIDQyMDI2KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTY3OSw2ICs2NzksMTQgQEAgdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OnJlcXVlc3RHZW9sb2NhdGlvbgogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9
CiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQoraW50NjRfdCBXZWJDaHJv
bWVDbGllbnQ6Om1heEFwcENhY2hlU2l6ZSgpCit7CisgICAvLyBGSVhNRTogaW1wbGVtZW50IHRo
aXMgcHJvcGVybHkuCisgICByZXR1cm4gNSAqIDEwMjQgKiAxMDI0OworfQorI2VuZGlmCisKIEBp
bXBsZW1lbnRhdGlvbiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcgogCiAtIChpZClpbml0V2l0
aENob29zZXI6KFBhc3NSZWZQdHI8RmlsZUNob29zZXI+KWNob29zZXIKSW5kZXg6IFdlYktpdC9x
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24g
NDI5MzApCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMDktMDQtMjggIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisJTGltaXRzIHRoZSBtYXhp
bXVtIHNpemUgb2YgdGhlIEFwcGxpY2F0aW9uIENhY2hlIGFuZAorCWV4cGlyZXMgb2xkIGNhY2hl
cyBpbiBMUlUgZmFzaGlvbiB3aGVuIHRoZSBtYXhpbXVtCisJc2l6ZSBpcyByZWFjaGVkLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21lQ2xpZW50UXQ6Om1heEFwcENhY2hlU2l6ZSk6CisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoKKwogMjAwOS0wNC0yOCAgU2ltb24gSGF1c21hbm4g
IDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9yIEFy
bmUgVmVzdGLDuC4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFF0LmNwcAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjksNCArNDI5LDEzIEBAIHZvaWQg
Q2hyb21lQ2xpZW50UXQ6OnJ1bk9wZW5QYW5lbChGcmFtZSoKICAgICB9CiB9CiAKKyNpZiBFTkFC
TEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQoraW50NjRfdCBDaHJvbWVDbGllbnRRdDo6bWF4
QXBwQ2FjaGVTaXplKCkKK3sKKyAgIG5vdEltcGxlbWVudGVkKCk7CisgICAvLyBGSVhNRTogaW1w
bGVtZW50IHRoaXMgcHJvcGVybHkuCisgICByZXR1cm4gNSAqIDEwMjQgKiAxMDI0OworfQorI2Vu
ZGlmCisKIH0KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5o
CShyZXZpc2lvbiA0MjAyNikKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5v
ZGUqKSB7IH0KIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgICAg
IHZpcnR1YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKTsKKyNlbmRpZgorCiAgICAgICAgIFFX
ZWJQYWdlKiBtX3dlYlBhZ2U7CiAgICAgICAgIFdlYkNvcmU6OktVUkwgbGFzdEhvdmVyVVJMOwog
ICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbGFzdEhvdmVyVGl0bGU7CkluZGV4OiBXZWJLaXQvd2lu
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24g
NDI5MzApCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE1IEBACisyMDA5LTA0LTI4ICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCUxpbWl0cyB0aGUgbWF4
aW11bSBzaXplIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBhbmQKKwlleHBpcmVzIG9sZCBjYWNo
ZXMgaW4gTFJVIGZhc2hpb24gd2hlbiB0aGUgbWF4aW11bQorCXNpemUgaXMgcmVhY2hlZC4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJDaHJvbWVDbGllbnQ6Om1heEFwcENhY2hlU2l6ZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisKIDIwMDktMDQtMjIgIEFkYSBDaGFuICA8YWRhY2hhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxMTUyOTg+IERvbid0IGdldCBl
cnJvciBtc2cgd2hlbiBkb3dubG9hZCBpcyBpbnRlcnJ1cHRlZCBhbmQgY2Fubm90IHJlc3VtZSBk
dWUgdG8gc2VydmVyIHVuYXZhaWxhYmlsaXR5CkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjkyLDYgKzY5MiwxNCBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKEZyYW1l
CiAgICAgLy8gRklYTUU6IFNob3cgc29tZSBzb3J0IG9mIGVycm9yIGlmIHRvbyBtYW55IGZpbGVz
IGFyZSBzZWxlY3RlZCBhbmQgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwuICBGb3Igbm93LCB0aGlz
IHdpbGwgZmFpbCBzaWxlbnRseS4KIH0KIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCitpbnQ2NF90IFdlYkNocm9tZUNsaWVudDo6bWF4QXBwQ2FjaGVTaXplKCkKK3sKKyAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBwcm9wZXJseS4KKyAgIHJldHVybiA1ICogMTAyNCAq
IDEwMjQ7Cit9CisjZW5kaWYKKwogQ09NUHRyPElXZWJVSURlbGVnYXRlPiBXZWJDaHJvbWVDbGll
bnQ6OnVpRGVsZWdhdGUoKQogewogICAgIENPTVB0cjxJV2ViVUlEZWxlZ2F0ZT4gZGVsZWdhdGU7
CkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJl
dmlzaW9uIDQyMDI2KQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCwxMCBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKSB7IH0K
IAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgdmlydHVhbCBpbnQ2
NF90IG1heEFwcENhY2hlU2l6ZSgpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgQ09NUHRyPElX
ZWJVSURlbGVnYXRlPiB1aURlbGVnYXRlKCk7CiAgICAgQ09NUHRyPElXZWJVSURlbGVnYXRlMj4g
dWlEZWxlZ2F0ZTIoKTsKSW5kZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2aXNpb24gNDI5MzApCisrKyBXZWJLaXQvd3gvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDQtMjggIEFuZHJlaSBQ
b3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisJTGltaXRzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIEFwcGxpY2F0aW9u
IENhY2hlIGFuZAorCWV4cGlyZXMgb2xkIGNhY2hlcyBpbiBMUlUgZmFzaGlvbiB3aGVuIHRoZSBt
YXhpbXVtCisJc2l6ZSBpcyByZWFjaGVkLgorCisgICAgICAgICogV2ViS2l0U3VwcG9ydC9DaHJv
bWVDbGllbnRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRXeDo6bWF4QXBw
Q2FjaGVTaXplKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4Lmg6CisK
IDIwMDktMDQtMjQgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAK
ICAgICAgICAgd3ggYnVpbGQgZml4LiBTd2l0Y2hpbmcgSlNDb3JlIGZyb20gYSBzdGF0aWMgbGli
IHRvIGEgZHluYW1pYyBsaWIKSW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNs
aWVudFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVD
bGllbnRXeC5jcHAJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQv
Q2hyb21lQ2xpZW50V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsNCArMzYzLDE0IEBAIHZv
aWQgQ2hyb21lQ2xpZW50V3g6OnJ1bk9wZW5QYW5lbChGcmFtZSoKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKK2ludDY0X3Qg
Q2hyb21lQ2xpZW50V3g6Om1heEFwcENhY2hlU2l6ZSgpCit7CisgICBub3RJbXBsZW1lbnRlZCgp
OworICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIHByb3Blcmx5LgorICAgcmV0dXJuIDUgKiAx
MDI0ICogMTAyNDsKIH0KKyNlbmRpZgorCit9CisKSW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBw
b3J0L0Nocm9tZUNsaWVudFd4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBv
cnQvQ2hyb21lQ2xpZW50V3guaAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJLaXQvd3gvV2ViS2l0
U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDEw
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3Qg
Tm9kZSopIHsgfQogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICB2
aXJ0dWFsIGludDY0X3QgbWF4QXBwQ2FjaGVTaXplKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICB3eFdlYlZpZXcqIG1fd2ViVmlldzsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29883</attachid>
            <date>2009-04-29 11:34:57 -0700</date>
            <delta_ts>2009-04-30 05:12:54 -0700</delta_ts>
            <desc>New proposal to limit the maximum size of the application cache (take 3).</desc>
            <filename>appcache.patch</filename>
            <type>text/plain</type>
            <size>35166</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjkzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDktMDQtMjggIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IExpbWl0cyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBhbmQKKwll
eHBpcmVzIG9sZCBjYWNoZXMgaW4gTFJVIGZhc2hpb24gd2hlbiB0aGUgbWF4aW11bQorCXNpemUg
aXMgcmVhY2hlZC4KKwkKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmFkZFJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmNlKToKKyAg
ICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZTo6c2l6ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSXNDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6Om1heEFwcENhY2hlU2l6ZSk6CisgICAgICAgICogbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5oOgorICAgICAgICAqIGxvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVJlc291cmNlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKToKKyAgICAgICAgKiBs
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmg6CisgICAgICAgICogbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVOZXdlc3RDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bGFzdEV4ZWN1
dGlvbkZhaWxlZER1ZU1heFNpemVSZWFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpldmljdExSVUFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnVwZGF0ZUNhY2hlVGltZXN0YW1wKToKKyAg
ICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaDoKKyAgICAg
ICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVE
YXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6ZnJlZVNwYWNl
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6Y3VycmVudFNpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgorCiAyMDA5LTA0LTI4ICBK
b2huIFN1bGxpdmFuICA8c3VsbGl2YW5AYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82ODIwMjIxPiBSRUdSRVNTSU9OOiAyLWJ5dGUgY2hhcmFjdGVyIG5hbWVzIG9mIGltYWdl
cyBhcmUgZGlzcGxheWVkIGFzICUtZW5jb2RlZCBBU0NJSQpJbmRleDogV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRz
LmgJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPikgeyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUqKSB7IH0KKworI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgdmlydHVhbCBpbnQ2NF90IG1h
eEFwcENhY2hlU2l6ZSgpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogfTsKIAogY2xhc3MgRW1wdHlG
cmFtZUxvYWRlckNsaWVudCA6IHB1YmxpYyBGcmFtZUxvYWRlckNsaWVudCB7CkBAIC0yNDYsNiAr
MjUwLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeSgp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygp
IHsgfQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0q
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2lmZGVmIEFORFJPSURfSElTVE9SWV9DTElFTlQK
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRBZGRIaXN0b3J5SXRlbShIaXN0b3J5SXRlbSop
IGNvbnN0IHt9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVtb3ZlSGlzdG9yeUl0ZW0o
SGlzdG9yeUl0ZW0qLCBpbnQpIGNvbnN0IHt9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
Q2hhbmdlSGlzdG9yeUluZGV4KEJhY2tGb3J3YXJkTGlzdCopIGNvbnN0IHt9CisjZW5kaWYKICAg
ICB2aXJ0dWFsIHZvaWQgc2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRlbSopIHsgfQogICAg
IHZpcnR1YWwgYm9vbCBjYW5DYWNoZVBhZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAkocmV2
aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBBcHBsaWNhdGlvbkNhY2hlOjpB
cHBsaWNhdGlvbkNhY2hlKCkKICAgICA6IG1fZ3JvdXAoMCkKICAgICAsIG1fbWFuaWZlc3QoMCkK
ICAgICAsIG1fc3RvcmFnZUlEKDApCisgICAgLCBtX3NpemUoMCkKIHsKIH0KIApAQCAtODQsOSAr
ODUsMTMgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlOjphZGRSZXNvdXJjZShQYXNzUgogICAgICAg
ICBBU1NFUlQocmVzb3VyY2UtPnR5cGUoKSAmIChBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkR5
bmFtaWMgfCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hc3RlcikpOwogICAgICAgICAKICAg
ICAgICAgLy8gQWRkIHRoZSByZXNvdXJjZSB0byB0aGUgc3RvcmFnZS4KLSAgICAgICAgY2FjaGVT
dG9yYWdlKCkuc3RvcmUocmVzb3VyY2UuZ2V0KCksIHRoaXMpOworICAgICAgICBBU1NFUlQobV9n
cm91cCk7CisgICAgICAgIGNhY2hlU3RvcmFnZSgpLnN0b3JlKHJlc291cmNlLmdldCgpLCB0aGlz
LCBtX2dyb3VwLT5tYXhBcHBDYWNoZVNpemUoKSk7CiAgICAgfQotICAgIAorCisgICAgbV9zaXpl
ICs9IHJlc291cmNlLT5zaXplKCk7CisKKyAgICAvLyBGaW5hbGx5IGFkZCB0aGUgcmVzb3VyY2Ug
dG8gb3VyIG1hcC4KICAgICBtX3Jlc291cmNlcy5zZXQodXJsLCByZXNvdXJjZSk7CiB9CiAKQEAg
LTk5LDYgKzEwNCw4IEBAIHVuc2lnbmVkIEFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmMK
ICAgICAvLyBUaGUgcmVzb3VyY2UgZXhpc3RzLCBnZXQgaXRzIHR5cGUgc28gd2UgY2FuIHJldHVy
biBpdC4KICAgICB1bnNpZ25lZCB0eXBlID0gaXQtPnNlY29uZC0+dHlwZSgpOwogCisgICAgbV9z
aXplIC09IGl0LT5zZWNvbmQtPnNpemUoKTsKKwogICAgIG1fcmVzb3VyY2VzLnJlbW92ZShpdCk7
CiAgICAgCiAgICAgcmV0dXJuIHR5cGU7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZS5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgcmVxdWVzdElzSFRUUE9ySFRUUFNHZXQo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKKyAgICBpbnQ2NF90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKwogcHJpdmF0ZToKICAgICBBcHBsaWNhdGlvbkNhY2hlKCk7CiAgICAg
CkBAIC0xMDYsNiArMTA4LDkgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjpwYWlyPEtVUkws
IGJvb2w+ID4gbV9wZW5kaW5nRHluYW1pY0VudHJ5QWN0aW9uczsKIAogICAgIHVuc2lnbmVkIG1f
c3RvcmFnZUlEOworCisgICAgLy8gVGhlIHRvdGFsIHNpemUgb2YgdGhlIHJlc291cmNlcyBiZWxv
bmdpbmcgdG8gdGhpcyBBcHBsaWNhdGlvbiBDYWNoZSBpbnN0YW5jZS4KKyAgICBpbnQ2NF90IG1f
c2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkocmV2aXNpb24gNDIw
MjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXBwbGljYXRpb25D
YWNoZS5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIgogI2luY2x1ZGUg
IkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hl
LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC03MTAsNyArNzExLDcgQEAgdm9pZCBBcHBs
aWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSQogCiAgICAgICAgIC8vIFRoZSBzdG9yYWdl
IGNvdWxkIGhhdmUgYmVlbiBtYW51YWxseSBlbXB0aWVkIGJ5IHRoZSB1c2VyLgogICAgICAgICBp
ZiAoIW1fc3RvcmFnZUlEKQotICAgICAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmVOZXdlc3RD
YWNoZSh0aGlzKTsKKyAgICAgICAgICAgIGNhY2hlU3RvcmFnZSgpLnN0b3JlTmV3ZXN0Q2FjaGUo
dGhpcywgbWF4QXBwQ2FjaGVTaXplKCkpOwogCiAgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRP
TUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxOb1VwZGF0ZUxpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1
bWVudExvYWRlcnMpOwogICAgICAgICBicmVhazsKQEAgLTczMiw3ICs3MzMsNyBAQCB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2hlY2tJZkxvYWRJCiAgICAgICAgIFJlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlPiBvbGROZXdlc3RDYWNoZSA9IChtX25ld2VzdENhY2hlID09IG1fY2FjaGVCZWlu
Z1VwZGF0ZWQpID8gMCA6IG1fbmV3ZXN0Q2FjaGU7CiAKICAgICAgICAgc2V0TmV3ZXN0Q2FjaGUo
bV9jYWNoZUJlaW5nVXBkYXRlZC5yZWxlYXNlKCkpOwotICAgICAgICBjYWNoZVN0b3JhZ2UoKS5z
dG9yZU5ld2VzdENhY2hlKHRoaXMpOworICAgICAgICBjYWNoZVN0b3JhZ2UoKS5zdG9yZU5ld2Vz
dENhY2hlKHRoaXMsIG1heEFwcENhY2hlU2l6ZSgpKTsKIAogICAgICAgICBpZiAob2xkTmV3ZXN0
Q2FjaGUpCiAgICAgICAgICAgICBjYWNoZVN0b3JhZ2UoKS5yZW1vdmUob2xkTmV3ZXN0Q2FjaGUu
Z2V0KCkpOwpAQCAtODgxLDYgKzg4MiwxMCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6
Y2xlYXJTdG9yYWdlCiAgICAgICAgICgqaXQpLT5jbGVhclN0b3JhZ2VJRCgpOwogfQogICAgIAor
aW50NjRfdCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6Om1heEFwcENhY2hlU2l6ZSgpIHsKKyAgICBB
U1NFUlQobV9mcmFtZSk7CisgICAgcmV0dXJuIG1fZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNs
aWVudCgpLT5tYXhBcHBDYWNoZVNpemUoKTsKK30KIAogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkocmV2aXNpb24gNDIwMjYp
CisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkod29y
a2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzQ29weSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNDb3B5OyB9CiAKKyAgICBpbnQ2NF90IG1heEFwcENhY2hlU2l6
ZSgpOworCiBwcml2YXRlOgogICAgIHR5cGVkZWYgdm9pZCAoRE9NQXBwbGljYXRpb25DYWNoZTo6
Kkxpc3RlbmVyRnVuY3Rpb24pKCk7CiAgICAgc3RhdGljIHZvaWQgcG9zdExpc3RlbmVyVGFzayhM
aXN0ZW5lckZ1bmN0aW9uLCBjb25zdCBIYXNoU2V0PERvY3VtZW50TG9hZGVyKj4mKTsKSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmNwcAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6QXBwbGljYXRpb25DYWMKICAgICA6IFN1YnN0aXR1
dGVSZXNvdXJjZSh1cmwsIHJlc3BvbnNlLCBkYXRhKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAg
LCBtX3N0b3JhZ2VJRCgwKQorICAgICwgbV9zaXplKDApCiB7CiB9CiAKQEAgLTQ0LDYgKzQ1LDI5
IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjphZGRUeXBlKHUKICAgICBtX3R5cGUg
fD0gdHlwZTsgCiB9CiAKK2ludDY0X3QgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkK
K3sKKyAgICBpZiAoIW1fc2l6ZSkgeworICAgICAgICBpZiAoZGF0YSgpKQorICAgICAgICAgICAg
bV9zaXplICs9IGRhdGEoKS0+c2l6ZSgpOworICAgIAorICAgICAgICBIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSByZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsK
KyAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNl
KCkuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0IT0gZW5kOyArK2l0KSB7CisgICAgICAg
ICAgICBtX3NpemUgKz0gKGl0LT5maXJzdC5sZW5ndGgoKSArIGl0LT5zZWNvbmQubGVuZ3RoKCkg
KyAyKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgbV9zaXplICs9
IHVybCgpLnN0cmluZygpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgbV9zaXpl
ICs9IHNpemVvZihpbnQpOyAgLy8gcmVzb3VyY2UubV9odHRwU3RhdHVzQ29kZQorICAgICAgICBt
X3NpemUgKz0gcmVzcG9uc2UoKS51cmwoKS5zdHJpbmcoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hh
cik7CisgICAgICAgIG1fc2l6ZSArPSBzaXplb2YodW5zaWduZWQpOyAgLy8gZGF0YUlkCisgICAg
ICAgIG1fc2l6ZSArPSByZXNwb25zZSgpLm1pbWVUeXBlKCkubGVuZ3RoKCkgKiBzaXplb2YoVUNo
YXIpOworICAgICAgICBtX3NpemUgKz0gcmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCkubGVu
Z3RoKCkgKiBzaXplb2YoVUNoYXIpOworIAorICAgIH0KKworICAgIHJldHVybiBtX3NpemU7Cit9
CisKICNpZm5kZWYgTkRFQlVHCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5
cGUodW5zaWduZWQgdHlwZSkKIHsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw2ICs1NSw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzdG9yYWdlSUQoKSBj
b25zdCB7IHJldHVybiBtX3N0b3JhZ2VJRDsgfQogICAgIHZvaWQgY2xlYXJTdG9yYWdlSUQoKSB7
IG1fc3RvcmFnZUlEID0gMDsgfQogCisgICAgaW50NjRfdCBzaXplKCk7CisKICNpZm5kZWYgTkRF
QlVHCiAgICAgc3RhdGljIHZvaWQgZHVtcFR5cGUodW5zaWduZWQgdHlwZSk7CiAjZW5kaWYKQEAg
LTY0LDYgKzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fdHlwZTsKICAgICB1bnNp
Z25lZCBtX3N0b3JhZ2VJRDsKKyAgICBpbnQ2NF90IG1fc2l6ZTsKIH07CiAgICAgCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgog
I2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcu
aCIKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCkBAIC0zOSw2ICs0
MCw4IEBACiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJp
bmdFeHRyYXMuaD4KIAorI2luY2x1ZGUgPHNxbGl0ZTMuaD4KKwogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODMsNiArODYsOSBAQCBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTCiAgICAgZ3JvdXAtPnNldFN0b3JhZ2VJRChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApKSk7CiAgICAgZ3Jv
dXAtPnNldE5ld2VzdENhY2hlKGNhY2hlLnJlbGVhc2UoKSk7CiAKKyAgICAvLyBXZSBhcmUgdXNp
bmcgdGhlIGNhY2hlLiBVcGRhdGUgaXRzIHRpbWVzdGFtcC4KKyAgICB1cGRhdGVDYWNoZVRpbWVz
dGFtcChuZXdlc3RDYWNoZVN0b3JhZ2VJRCk7CisKICAgICByZXR1cm4gZ3JvdXA7CiB9ICAgIAog
CkBAIC0xODUsNiArMTkxLDkgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNh
Y2hlUwogICAgICAgICAvLyBhIG1hdGNoaW5nIFVSTC4KICAgICAgICAgdW5zaWduZWQgbmV3ZXN0
Q2FjaGVJRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQo
MikpOwogICAgICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gY2FjaGUgPSBsb2FkQ2FjaGUo
bmV3ZXN0Q2FjaGVJRCk7CisgICAgICAgIC8vIEZvciB2YXJpb3VzIHJlYXNvbnMsIGxvYWRDYWNo
ZSBjYW4gcmV0dXJuIDA7CisgICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gY2FjaGUt
PnJlc291cmNlRm9yVVJMKHVybCk7CiAgICAgICAgIGlmICghcmVzb3VyY2UpCkBAIC0xOTksNiAr
MjA4LDkgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlUwogICAgICAg
ICAKICAgICAgICAgbV9jYWNoZXNJbk1lbW9yeS5zZXQoZ3JvdXAtPm1hbmlmZXN0VVJMKCksIGdy
b3VwKTsKICAgICAgICAgCisgICAgICAgIC8vIFdlIGFyZSB1c2luZyB0aGUgY2FjaGUuIFVwZGF0
ZSBpdHMgdGltZXN0YW1wLgorICAgICAgICB1cGRhdGVDYWNoZVRpbWVzdGFtcChuZXdlc3RDYWNo
ZUlEKTsKKwogICAgICAgICByZXR1cm4gZ3JvdXA7CiAgICAgfQogCkBAIC0zMjgsNyArMzQwLDcg
QEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVNRTAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBjb25zdCBpbnQgc2NoZW1hVmVyc2lvbiA9IDM7CitzdGF0aWMg
Y29uc3QgaW50IHNjaGVtYVZlcnNpb24gPSA0OwogICAgIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6dmVyaWZ5U2NoZW1hVmVyc2lvbigpCiB7CkBAIC0zNjMsMTIgKzM3NSwxMiBAQCB2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhCiAgICAgaWYgKG1fY2FjaGVE
aXJlY3RvcnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBTdHJpbmcgYXBw
bGljYXRpb25DYWNoZVBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVj
dG9yeSwgIkFwcGxpY2F0aW9uQ2FjaGUuZGIiKTsKLSAgICBpZiAoIWNyZWF0ZUlmRG9lc05vdEV4
aXN0ICYmICFmaWxlRXhpc3RzKGFwcGxpY2F0aW9uQ2FjaGVQYXRoKSkKKyAgICBtX2NhY2hlRmls
ZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCAiQXBwbGljYXRp
b25DYWNoZS5kYiIpOworICAgIGlmICghY3JlYXRlSWZEb2VzTm90RXhpc3QgJiYgIWZpbGVFeGlz
dHMobV9jYWNoZUZpbGUpKQogICAgICAgICByZXR1cm47CiAKICAgICBtYWtlQWxsRGlyZWN0b3Jp
ZXMobV9jYWNoZURpcmVjdG9yeSk7Ci0gICAgbV9kYXRhYmFzZS5vcGVuKGFwcGxpY2F0aW9uQ2Fj
aGVQYXRoKTsKKyAgICBtX2RhdGFiYXNlLm9wZW4obV9jYWNoZUZpbGUpOwogICAgIAogICAgIGlm
ICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc4LDcgKzM5MCw3
IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmEKICAgICAvLyBDcmVh
dGUgdGFibGVzCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJ
U1RTIENhY2hlR3JvdXBzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsICIK
ICAgICAgICAgICAgICAgICAgICAgICAibWFuaWZlc3RIb3N0SGFzaCBJTlRFR0VSIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwsIG1hbmlmZXN0VVJMIFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIEZB
SUwsIG5ld2VzdENhY2hlIElOVEVHRVIpIik7Ci0gICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFU
RSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRP
SU5DUkVNRU5ULCBjYWNoZUdyb3VwIElOVEVHRVIpIik7CisgICAgZXhlY3V0ZVNRTENvbW1hbmQo
IkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtF
WSBBVVRPSU5DUkVNRU5ULCBjYWNoZUdyb3VwIElOVEVHRVIsIHNpemUgSU5URUdFUiwgdGltZXN0
YW1wIElOVEVHRVIpIik7CiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBO
T1QgRVhJU1RTIENhY2hlV2hpdGVsaXN0VVJMcyAodXJsIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJ
Q1QgRkFJTCwgY2FjaGUgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOwogICAg
IGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBGYWxsYmFja1VS
THMgKG5hbWVzcGFjZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIGZhbGxiYWNrVVJM
IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgIgogICAgICAgICAgICAgICAgICAgICAg
ICJjYWNoZSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7CkBAIC00MDYsNiAr
NDE4LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYQogICAgICAg
ICAgICAgICAgICAgICAgICIgRk9SIEVBQ0ggUk9XIEJFR0lOIgogICAgICAgICAgICAgICAgICAg
ICAgICIgIERFTEVURSBGUk9NIENhY2hlUmVzb3VyY2VEYXRhIFdIRVJFIGlkID0gT0xELmRhdGE7
IgogICAgICAgICAgICAgICAgICAgICAgICIgRU5EIik7CisKKyAgICAvLyBUbyBiZSBhYmxlIHRv
IHF1aWNrbHkgZXZpY3QgY2FjaGVzIGluIExSVSBvcmRlciwgd2UgaW5kZXggdGhlIENhY2hlcyB0
YWJsZSBvbiB0aGUgdGltZXN0YW1wIGF0dHJpYnV0ZS4KKyAgICBleGVjdXRlU1FMQ29tbWFuZCgi
Q1JFQVRFIElOREVYIGxydUluZGV4IE9OIENhY2hlcyh0aW1lc3RhbXApIEFTQzsiKTsKIH0KIAog
Ym9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVN0YXRlbWVudChTUUxpdGVTdGF0
ZW1lbnQmIHN0YXRlbWVudCkKQEAgLTQ0MSwxMSArNDU2LDEzIEBAIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGwKICAgICBBU1NFUlQoY2FjaGUtPnN0b3JhZ2VJRCgpID09
IDApOwogICAgIEFTU0VSVChjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkgIT0gMCk7CiAgICAg
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8g
Q2FjaGVzIChjYWNoZUdyb3VwKSBWQUxVRVMgKD8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVzIChjYWNoZUdyb3VwLCBzaXpl
LCB0aW1lc3RhbXApIFZBTFVFUyAoPywgPywgPykiKTsKICAgICBpZiAoc3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3RhdGVt
ZW50LmJpbmRJbnQ2NCgxLCBjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRl
bWVudC5iaW5kSW50NjQoMiwgY2FjaGUtPnNpemUoKSk7CisgICAgc3RhdGVtZW50LmJpbmRJbnQ2
NCgzLCBjdXJyZW50VGltZSgpKTsKIAogICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1l
bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01ODUsNDMgKzYwMiwxMDEgQEAgYm9vbCBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVVcGRhdAogICAgIHJldHVybiBleGVjdXRlU3Rh
dGVtZW50KGVudHJ5U3RhdGVtZW50KTsKIH0KIAotdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXRpb25D
YWNoZSogY2FjaGUpCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSwgaW50
NjRfdCBtYXhBcHBDYWNoZVNpemUpCiB7CiAgICAgQVNTRVJUKGNhY2hlLT5zdG9yYWdlSUQoKSk7
CiAgICAgCiAgICAgb3BlbkRhdGFiYXNlKHRydWUpOwogIAorICAgIG1fZGF0YWJhc2Uuc2V0TWF4
aW11bVNpemUobWF4QXBwQ2FjaGVTaXplKTsKICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9yZVJl
c291cmNlVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CiAgICAgc3RvcmVSZXNvdXJjZVRyYW5zYWN0
aW9uLmJlZ2luKCk7Ci0gICAgCi0gICAgaWYgKCFzdG9yZShyZXNvdXJjZSwgY2FjaGUtPnN0b3Jh
Z2VJRCgpKSkKKworICAgIGlmICghc3RvcmUocmVzb3VyY2UsIGNhY2hlLT5zdG9yYWdlSUQoKSkp
IHsKKyAgICAgICAgaWYgKCFsYXN0RXhlY3V0aW9uRmFpbGVkRHVlTWF4U2l6ZVJlYWNoZWQoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gVGhlIGZhaWx1cmUgd2FzIGR1ZSB0byBt
YXhpbXVtIHNpemUgYmVpbmcgcmVhY2hlZC4gUm9sbGJhY2suCisgICAgICAgIHN0b3JlUmVzb3Vy
Y2VUcmFuc2FjdGlvbi5yb2xsYmFjaygpOworICAgICAgICAvLyBBdHRlbXB0IHRvIGV2aWN0IHNv
bWUgb2xkIGNhY2hlcy4KKyAgICAgICAgaWYgKCFldmljdExSVUFwcGxpY2F0aW9uQ2FjaGUocmVz
b3VyY2UtPnNpemUoKSwgbWF4QXBwQ2FjaGVTaXplKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgLy8gVGhlIGV2aWN0aW9uIHdhcyBzdWNjZXNzZnVsLiBSZXRyeSB0byBzdG9yZSB0aGUg
cmVzb3VyY2UuCisgICAgICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5iZWdpbigpOworICAg
ICAgICBpZiAoIXN0b3JlKHJlc291cmNlLCBjYWNoZS0+c3RvcmFnZUlEKCkpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEEgcmVzb3VyY2Ugd2FzIGFkZGVkIHRvIHRoZSBj
YWNoZS4gVXBkYXRlIHRoZSB0b3RhbCBkYXRhIHNpemUgZm9yIHRoZSBjYWNoZS4KKyAgICBTUUxp
dGVTdGF0ZW1lbnQgc2l6ZVVwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIENhY2hl
cyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyIpOworICAgIGlmIChzaXplVXBkYXRlU3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuOwotICAgIAorCisg
ICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMSwgcmVzb3VyY2UtPnNpemUoKSk7Cisg
ICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsK
KworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQog
Ci1ib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzdENhY2hlKEFwcGxpY2F0
aW9uQ2FjaGVHcm91cCogZ3JvdXApCitib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9y
ZU5ld2VzdENhY2hlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAsIGludDY0X3QgbWF4QXBw
Q2FjaGVTaXplKQogewogICAgIG9wZW5EYXRhYmFzZSh0cnVlKTsKICAgICAKKyAgICBtX2RhdGFi
YXNlLnNldE1heGltdW1TaXplKG1heEFwcENhY2hlU2l6ZSk7CiAgICAgU1FMaXRlVHJhbnNhY3Rp
b24gc3RvcmVDYWNoZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIAogICAgIHN0b3JlQ2Fj
aGVUcmFuc2FjdGlvbi5iZWdpbigpOwogICAgIAorICAgIC8vIFdlIHRyeSB0byBzdG9yZSB0aGUg
Z3JvdXAgYW5kIHRoZSBuZXdlc3QgY2FjaGUuIElmIHRoZSBkYXRhYmFzZQorICAgIC8vIHJlcG9y
dHMgdGhhdCB3ZSBoYXZlIGhpdCB0aGUgbWF4QXBwQ2FjaGVTaXplIGxpbWl0LCB3ZSBhdHRlbXB0
IHRvCisgICAgLy8gcmVtb3ZlIGVub3VnaCBlbnRyaWVzIChpbiBMUlUgb3JkZXIpIGZyb20gdGhl
IGNhY2hlIHNvIHRoYXQgdGhlIG5ld2VzdAorICAgIC8vIGNhY2hlIGZpdHMgaW4uIElmIHRoZSBu
ZXdlc3QgY2FjaGUgaXMgc3RpbGwgdG9vIGJpZywgd2UgYmFpbCBvdXQuCisKKyAgICAvLyBGaXJz
dCBkbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUuCisgICAgaWYgKGdy
b3VwLT5uZXdlc3RDYWNoZSgpLT5zaXplKCkgPj0gbWF4QXBwQ2FjaGVTaXplKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWdyb3VwLT5zdG9yYWdlSUQoKSkgewogICAgICAgICAv
LyBTdG9yZSB0aGUgZ3JvdXAKLSAgICAgICAgaWYgKCFzdG9yZShncm91cCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghc3RvcmUoZ3JvdXApKSB7CisgICAgICAgICAg
ICBpZiAoIWxhc3RFeGVjdXRpb25GYWlsZWREdWVNYXhTaXplUmVhY2hlZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIFRoZSBmYWlsdXJlIHdhcyBkdWUg
dG8gbWF4aW11bSBzaXplIGJlaW5nIHJlYWNoZWQuIFJvbGxiYWNrLgorICAgICAgICAgICAgZ3Jv
dXAtPnNldFN0b3JhZ2VJRCgwKTsKKyAgICAgICAgICAgIHN0b3JlQ2FjaGVUcmFuc2FjdGlvbi5y
b2xsYmFjaygpOworICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBldmljdCBzb21lIG9sZCBjYWNo
ZXMuCisgICAgICAgICAgICBpZiAoIWV2aWN0TFJVQXBwbGljYXRpb25DYWNoZShncm91cC0+bmV3
ZXN0Q2FjaGUoKS0+c2l6ZSgpLCBtYXhBcHBDYWNoZVNpemUpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIFRoZSBldmljdGlvbiB3YXMgc3VjY2Vzc2Z1bC4g
UmV0cnkgdG8gc3RvcmUgdGhlIGdyb3VwLgorICAgICAgICAgICAgc3RvcmVDYWNoZVRyYW5zYWN0
aW9uLmJlZ2luKCk7CisgICAgICAgICAgICBpZiAoIXN0b3JlKGdyb3VwKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBBU1NFUlQo
Z3JvdXAtPm5ld2VzdENhY2hlKCkpOwogICAgIEFTU0VSVCghZ3JvdXAtPmlzT2Jzb2xldGUoKSk7
CiAgICAgQVNTRVJUKCFncm91cC0+bmV3ZXN0Q2FjaGUoKS0+c3RvcmFnZUlEKCkpOwotICAgIAor
CiAgICAgLy8gU3RvcmUgdGhlIG5ld2VzdCBjYWNoZQotICAgIGlmICghc3RvcmUoZ3JvdXAtPm5l
d2VzdENhY2hlKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisgICAgaWYgKCFzdG9y
ZShncm91cC0+bmV3ZXN0Q2FjaGUoKSkpIHsKKyAgICAgICAgaWYgKCFsYXN0RXhlY3V0aW9uRmFp
bGVkRHVlTWF4U2l6ZVJlYWNoZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgLy8gVGhlIGZhaWx1cmUgd2FzIGR1ZSB0byBtYXhpbXVtIHNpemUgYmVpbmcgcmVhY2hlZC4g
Um9sbGJhY2suCisgICAgICAgIGdyb3VwLT5zZXRTdG9yYWdlSUQoMCk7CisgICAgICAgIGdyb3Vw
LT5uZXdlc3RDYWNoZSgpLT5zZXRTdG9yYWdlSUQoMCk7CisgICAgICAgIHN0b3JlQ2FjaGVUcmFu
c2FjdGlvbi5yb2xsYmFjaygpOworICAgICAgICAvLyBBdHRlbXB0IHRvIGV2aWN0IHNvbWUgb2xk
IGNhY2hlcy4KKyAgICAgICAgaWYgKCFldmljdExSVUFwcGxpY2F0aW9uQ2FjaGUoZ3JvdXAtPm5l
d2VzdENhY2hlKCktPnNpemUoKSwgbWF4QXBwQ2FjaGVTaXplKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgLy8gVGhlIGV2aWN0aW9uIHdhcyBzdWNjZXNzZnVsLiBSZXRyeSB0
byBzdG9yZSB0aGUgZ3JvdXAgYW5kIHRoZSBjYWNoZS4KKyAgICAgICAgc3RvcmVDYWNoZVRyYW5z
YWN0aW9uLmJlZ2luKCk7CisgICAgICAgIGlmICghc3RvcmUoZ3JvdXApIHx8ICFzdG9yZShncm91
cC0+bmV3ZXN0Q2FjaGUoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAg
ICAgLy8gVXBkYXRlIHRoZSBuZXdlc3QgY2FjaGUgaW4gdGhlIGdyb3VwLgogICAgIAogICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZUdyb3VwcyBT
RVQgbmV3ZXN0Q2FjaGU9PyBXSEVSRSBpZD0/Iik7CkBAIC04MjcsNyArOTAyLDExMiBAQCBib29s
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPCiAgICAgLy8gRW1wdHkgdGhlIGNh
Y2hlIGluIGNhc2Ugc29tZXRoaW5nIHdhcyB0aGVyZSBiZWZvcmUuCiAgICAgY29weVN0b3JhZ2Uu
ZW1wdHkoKTsKICAgICAKLSAgICByZXR1cm4gY29weVN0b3JhZ2Uuc3RvcmVOZXdlc3RDYWNoZShn
cm91cENvcHkuZ2V0KCkpOworICAgIHJldHVybiBjb3B5U3RvcmFnZS5zdG9yZU5ld2VzdENhY2hl
KGdyb3VwQ29weS5nZXQoKSwgZ3JvdXBDb3B5LT5tYXhBcHBDYWNoZVNpemUoKSk7Cit9CisKK2Jv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Omxhc3RFeGVjdXRpb25GYWlsZWREdWVNYXhTaXpl
UmVhY2hlZCgpIHsKKyAgICByZXR1cm4gbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSA9PSBTUUxJVEVf
RlVMTDsKK30KKworYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXZpY3RMUlVBcHBsaWNh
dGlvbkNhY2hlKGludDY0X3QgaW5jb21pbmdTaXplLCBpbnQ2NF90IG1heGltdW1BcHBDYWNoZVNp
emUpIHsKKyAgICBvcGVuRGF0YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09w
ZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBhbW91
bnQgb2Ygc3BhY2UgbmVlZGVkIHRvIGJlIGZyZWVkLgorICAgIGludDY0X3Qgc2l6ZVRvRnJlZSA9
IDA7CisgICAgLy8gRmlyc3QgY2hlY2sgaWYgbWF4aW11bUFwcENhY2hlU2l6ZSBpc24ndCBzbWFs
bGVyIHRoYW4gdGhlIGN1cnJlbnQgZGF0YWJhc2Ugc2l6ZS4KKyAgICAvLyBUaGlzIGNhbiBoYXBw
ZW4gaWYgdGhlIHZhbHVlIGlzIGdlbmVyYXRlZCBkeW5hbWljYWxseSAoZS5nLiBieSB0aGUgdXNl
cikuCisgICAgaW50NjRfdCBjdXJyZW50U2l6ZSA9IDA7CisgICAgaWYgKCFnZXRGaWxlU2l6ZSht
X2NhY2hlRmlsZSwgY3VycmVudFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KG1heGltdW1BcHBDYWNoZVNpemUgPCBjdXJyZW50U2l6ZSkgeworICAgICAgICAvLyBDaGVjayBp
ZiB0aGUgaW5jb21pbmdTaXplIHN0aWxsIGZpdHMgaW5zaWRlIG1heGltdW1BcHBDYWNoZVNpemUu
CisgICAgICAgIC8vIEl0IG5lZWRzIHRvIGJlIHN0cmljdGx5IHNtYWxsZXIgdG8gZml0IHNpbmNl
IFNRTGl0ZSBhZGRzIHNvbWUKKyAgICAgICAgLy8gc3BhY2Ugb3ZlcmhlYWQgZm9yIHN0b3Jpbmcg
bWV0YWRhdGEuIFNpbmNlIHdlIGNhbm5vdCB0ZWxsIGhvdyBiaWcKKyAgICAgICAgLy8gdGhpcyBt
ZXRhZGF0YSBpcywgd2UgcnVuIHRoZSByaXNrIG9mIGJsb3dpbmcgdXAgdGhlIGVudGlyZSBjYWNo
ZSBhbmQKKyAgICAgICAgLy8gZmluZGluZyB0aGF0IHRoZSBuZXcgY2FjaGUgc3RpbGwgZG9lcyBu
b3QgZml0IHdoZW4gaW5jb21pbmdTaXplIH49IG1heGltdW1BcHBDYWNoZVNpemUKKyAgICAgICAg
Ly8gYnV0IG1ldGFkYXRhU2l6ZSA+IChtYXhpbXVtQXBwQ2FjaGVTaXplIC0gaW5jb21pbmdTaXpl
KS4gU2luY2UgdGhpcworICAgICAgICAvLyBpcyBsaWtlbHkgYSByYXJlIGNhc2UsIHdlIGNhbiBs
aXZlIHdpdGggaXQuCisgICAgICAgIGlmIChpbmNvbWluZ1NpemUgPCBtYXhpbXVtQXBwQ2FjaGVT
aXplKSB7CisgICAgICAgICAgICBzaXplVG9GcmVlID0gaW5jb21pbmdTaXplOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gaW5jb21pbmdTaXplIGRvZXNuJ3QgZml0LCBiYWlsIG91
dC4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIG1heGltdW1BcHBDYWNoZVNpemUgaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZSBj
dXJyZW50IGRhdGFiYXNlIHNpemUuCisgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgYXZh
aWxhYmxlIHNwYWNlIHNpemUuIFRoaXMgaXMgdGhlIG51bWJlciBvZiBmcmVlCisgICAgICAgIC8v
IGJ5dGVzIGluIHRoZSBjdXJyZW50IGRhdGFiYXNlIGZpbGUgKyB0aGUgc3BhY2Ugd2UgYXJlIGFs
bG93ZWQgdG8gZ3JvdworICAgICAgICAvLyAod2hpY2ggaXMgYm91bmRlZCBieSBtYXhpbXVtQXBw
Q2FjaGVTaXplKS4KKyAgICAgICAgaW50NjRfdCB0b3RhbEF2YWlsYWJsZVNpemUgPSAobWF4aW11
bUFwcENhY2hlU2l6ZSAtIGN1cnJlbnRTaXplKSArIG1fZGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgp
OworICAgICAgICBBU1NFUlQodG90YWxBdmFpbGFibGVTaXplKTsKKyAgICAgICAgLy8gQ2FsY3Vs
YXRlIHRoZSBzcGFjZSB3ZSBuZWVkIHRvIGZyZWUgaW5zaWRlIHRoZSBkYXRhYmFzZSBmaWxlLgor
ICAgICAgICBzaXplVG9GcmVlID0gaW5jb21pbmdTaXplIC0gdG90YWxBdmFpbGFibGVTaXplOwor
ICAgIH0KKworICAgIEFTU0VSVChzaXplVG9GcmVlKTsKKworICAgIGludDY0X3QgY3VtbXVsYXRp
dmVTaXplID0gMDsKKyAgICBWZWN0b3I8aW50NjRfdD4gaWRzOworCisgICAgLy9TdGFydCBhIG5l
dyB0cmFuc2FjdGlvbjsKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFi
YXNlKTsKKyAgICAvLyBGaW5kIG91dCB3aGF0IGNhY2hlcyB0byBkZWxldGUuCisgICAgeworICAg
ICAgICBTUUxpdGVTdGF0ZW1lbnQgc2VsZWN0VmljdGltcyhtX2RhdGFiYXNlLCAiU0VMRUNUIGlk
LCBzaXplIEZST00gQ2FjaGVzIE9SREVSIEJZIHRpbWVzdGFtcDsiKTsKKworICAgICAgICBpZiAo
c2VsZWN0VmljdGltcy5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgd2hpbGUgKHNlbGVjdFZpY3RpbXMuc3RlcCgpID09IFNRTFJl
c3VsdFJvdykgeworICAgICAgICAgICAgaWRzLmFwcGVuZChzZWxlY3RWaWN0aW1zLmdldENvbHVt
bkludDY0KDApKTsKKyAgICAgICAgICAgIGN1bW11bGF0aXZlU2l6ZSArPSBzZWxlY3RWaWN0aW1z
LmdldENvbHVtbkludDY0KDEpOworICAgICAgICAgICAgaWYgKGN1bW11bGF0aXZlU2l6ZSA+IHNp
emVUb0ZyZWUpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChjdW1tdWxhdGl2ZVNpemUgPD0gc2l6ZVRvRnJlZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChWZWN0b3I8aW50NjRfdD46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gaWRzLmJlZ2luKCk7IGl0ICE9IGlkcy5lbmQoKTsgKytpdCkgeworICAgICAg
ICAvLyBEZWxldGUgdGhlIGNhY2hlcy4KKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IGRlbGV0ZVZp
Y3RpbShtX2RhdGFiYXNlLCAiREVMRVRFIEZST00gQ2FjaGVzIFdIRVJFIGlkPT87Iik7CisgICAg
ICAgIGlmIChkZWxldGVWaWN0aW0ucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFVwZGF0ZSB0aGUgQ2FjaGVHcm91cHMgdGFi
bGUuCisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCB1cGRhdGVDYWNoZUdyb3VwcyhtX2RhdGFiYXNl
LCAiREVMRVRFIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbmV3ZXN0Q2FjaGU9PzsiKTsKKyAgICAg
ICAgaWYgKHVwZGF0ZUNhY2hlR3JvdXBzLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0ZVZpY3RpbS5iaW5k
SW50NjQoMSwgKml0KTsKKyAgICAgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KGRlbGV0ZVZpY3Rp
bSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdXBkYXRlQ2FjaGVHcm91
cHMuYmluZEludDY0KDEsICppdCk7CisgICAgICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudCh1cGRh
dGVDYWNoZUdyb3VwcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
dHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6OnVwZGF0ZUNhY2hlVGltZXN0YW1wKGludDY0X3QgaWQpCit7Cisg
ICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFNRTGl0ZVN0YXRlbWVudCB1cGRhdGVUaW1lc3RhbXBTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZXMgU0VUIHRpbWVzdGFtcD0/IFdIRVJFIGlk
PT8iKTsKKyAgICBpZiAodXBkYXRlVGltZXN0YW1wU3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxS
ZXN1bHRPaykgeworICAgICAgICB1cGRhdGVUaW1lc3RhbXBTdGF0ZW1lbnQuYmluZEludDY0KDEs
IGN1cnJlbnRUaW1lKCkpOworICAgICAgICB1cGRhdGVUaW1lc3RhbXBTdGF0ZW1lbnQuYmluZElu
dDY0KDIsIGlkKTsKKyAgICAgICAgZXhlY3V0ZVN0YXRlbWVudCh1cGRhdGVUaW1lc3RhbXBTdGF0
ZW1lbnQpOworICAgIH0KIH0KICAgICAKIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlJiBjYWNoZVN0
b3JhZ2UoKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUz
LDggQEAgcHVibGljOgogICAgIHZvaWQgY2FjaGVHcm91cERlc3Ryb3llZChBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAqKTsKICAgICB2b2lkIGNhY2hlR3JvdXBNYWRlT2Jzb2xldGUoQXBwbGljYXRpb25D
YWNoZUdyb3VwKik7CiAgICAgICAgIAotICAgIGJvb2wgc3RvcmVOZXdlc3RDYWNoZShBcHBsaWNh
dGlvbkNhY2hlR3JvdXAqKTsgLy8gVXBkYXRlcyB0aGUgY2FjaGUgZ3JvdXAsIGJ1dCBkb2Vzbid0
IHJlbW92ZSBvbGQgY2FjaGUuCi0gICAgdm9pZCBzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2UqLCBBcHBsaWNhdGlvbkNhY2hlKik7CisgICAgYm9vbCBzdG9yZU5ld2VzdENhY2hlKEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCosIGludDY0X3QpOyAvLyBVcGRhdGVzIHRoZSBjYWNoZSBncm91cCwg
YnV0IGRvZXNuJ3QgcmVtb3ZlIG9sZCBjYWNoZS4KKyAgICB2b2lkIHN0b3JlKEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSosIEFwcGxpY2F0aW9uQ2FjaGUqLCBpbnQ2NF90KTsKICAgICBib29sIHN0
b3JlVXBkYXRlZFR5cGUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiwgQXBwbGljYXRpb25DYWNo
ZSopOwogCiAgICAgLy8gUmVtb3ZlcyB0aGUgZ3JvdXAgaWYgdGhlIGNhY2hlIHRvIGJlIHJlbW92
ZWQgaXMgdGhlIG5ld2VzdCBvbmUgKHNvLCBzdG9yZU5ld2VzdENhY2hlKCkgbmVlZHMgdG8gYmUg
Y2FsbGVkIGJlZm9yZWhhbmQgd2hlbiB1cGRhdGluZykuCkBAIC04MSw2ICs4MSwxMCBAQCBwcml2
YXRlOgogICAgIGJvb2wgZXhlY3V0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmKTsKICAgICBi
b29sIGV4ZWN1dGVTUUxDb21tYW5kKGNvbnN0IFN0cmluZyYpOwogICAgIAorICAgIGJvb2wgbGFz
dEV4ZWN1dGlvbkZhaWxlZER1ZU1heFNpemVSZWFjaGVkKCk7CisgICAgYm9vbCBldmljdExSVUFw
cGxpY2F0aW9uQ2FjaGUoaW50NjRfdCwgaW50NjRfdCk7CisgICAgdm9pZCB1cGRhdGVDYWNoZVRp
bWVzdGFtcChpbnQ2NF90KTsKKwogICAgIFN0cmluZyBtX2NhY2hlRGlyZWN0b3J5OwogCiAgICAg
U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9u
IDQyMDI2KQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzIsNiArMTMyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFs
IHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZU5hbWUpID0gMDsKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAg
ICAgIC8vIFJldHVybnMgdGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBhcHBsaWNh
dGlvbiBjYWNoZXMgZmlsZS4KKyAgICAgICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENhY2hlU2l6
ZSgpID0gMDsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKTsKICNlbmRpZgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAkocmV2aXNpb24gNDIwMjYpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MSw2ICsxNTEsMTggQEAgaW50IFNRTGl0ZURhdGFiYXNlOjpwYWdlU2l6ZSgpCiAgICAg
cmV0dXJuIG1fcGFnZVNpemU7CiB9CiAKK2ludDY0X3QgU1FMaXRlRGF0YWJhc2U6OmZyZWVTcGFj
ZVNpemUoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKKyAg
ICBlbmFibGVBdXRob3JpemVyKGZhbHNlKTsKKyAgICAvLyBOb3RlOiBmcmVlbGlzdF9jb3VudCB3
YXMgYWRkZWQgaW4gU1FMaXRlIDMuNC4xLgorICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
KnRoaXMsICJQUkFHTUEgZnJlZWxpc3RfY291bnQiKTsKKyAgICBpbnQ2NF90IHNpemUgPSBzdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkgKiBwYWdlU2l6ZSgpOworCisgICAgZW5hYmxlQXV0aG9y
aXplcih0cnVlKTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKwogdm9pZCBTUUxpdGVEYXRhYmFzZTo6
c2V0U3luY2hyb25vdXMoU3luY2hyb25vdXNQcmFnbWEgc3luYykKIHsKICAgICBleGVjdXRlQ29t
bWFuZChTdHJpbmc6OmZvcm1hdCgiUFJBR01BIHN5bmNocm9ub3VzID0gJWkiLCBzeW5jKSk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgJKHJldmlzaW9uIDQyMDI2KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtODMsNiArODMsOSBAQCBwdWJsaWM6CiAgICAgaW50NjRfdCBtYXhpbXVtU2l6ZSgpOwogICAg
IHZvaWQgc2V0TWF4aW11bVNpemUoaW50NjRfdCk7CiAgICAgCisgICAgLy8gR2V0cyB0aGUgbnVt
YmVyIG9mIHVudXNlZCBieXRlcyBpbiB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICBpbnQ2NF90IGZy
ZWVTcGFjZVNpemUoKTsKKwogICAgIC8vIFRoZSBTUUxpdGUgU1lOQ0hST05PVVMgcHJhZ21hIGNh
biBiZSBlaXRoZXIgRlVMTCwgTk9STUFMLCBvciBPRkYKICAgICAvLyBGVUxMIC0gQW55IHdyaXRp
bmcgY2FsbHMgdG8gdGhlIERCIGJsb2NrIHVudGlsIHRoZSBkYXRhIGlzIGFjdHVhbGx5IG9uIHRo
ZSBkaXNrIHN1cmZhY2UKICAgICAvLyBOT1JNQUwgLSBTUUxpdGUgcGF1c2VzIGF0IHNvbWUgY3Jp
dGljYWwgbW9tZW50cyB3aGVuIHdyaXRpbmcsIGJ1dCBtdWNoIGxlc3MgdGhhbiBGVUxMCkluZGV4
OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxv
ZwkocmV2aXNpb24gNDI5MzApCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDA5LTA0LTI4ICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBA
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCUxp
bWl0cyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBhbmQKKwlleHBp
cmVzIG9sZCBjYWNoZXMgaW4gTFJVIGZhc2hpb24gd2hlbiB0aGUgbWF4aW11bQorCXNpemUgaXMg
cmVhY2hlZC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6bWF4QXBwQ2FjaGVTaXplKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaDoKKwogMjAwOS0wNC0yOCAgWGFu
IExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZDogY29tbWl0
dGVkIGEgZmV3IGJpdHMgYnkgbWlzdGFrZSwgcmVtb3ZlIHRoZW0uCkluZGV4OiBXZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCShyZXZpc2lvbiA0MjAyNikK
KysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUzLDQgKzQ1MywxMyBAQCB2b2lkIENocm9tZUNsaWVudDo6cnVuT3BlblBh
bmVsKEZyYW1lKiwgCiAgICAgZ3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7CiB9CiAKKyNpZiBF
TkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQoraW50NjRfdCBDaHJvbWVDbGllbnQ6Om1h
eEFwcENhY2hlU2l6ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQgdGhpcyBwcm9wZXJseS4KKyAgIHJldHVybiA1ICogMTAyNCAqIDEwMjQ7Cit9Cisj
ZW5kaWYKKwogfQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsMTAgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShj
b25zdCBXZWJDb3JlOjpOb2RlKikgeyB9CiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKQorICAgICAgICB2aXJ0dWFsIGludDY0X3QgbWF4QXBwQ2FjaGVTaXplKCk7CisjZW5k
aWYKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKICAg
ICAgICAgV2ViQ29yZTo6S1VSTCBtX2hvdmVyZWRMaW5rVVJMOwpJbmRleDogV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQy
OTMwKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NSBAQAorMjAwOS0wNC0yOCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwlMaW1pdHMgdGhlIG1heGlt
dW0gc2l6ZSBvZiB0aGUgQXBwbGljYXRpb24gQ2FjaGUgYW5kCisJZXhwaXJlcyBvbGQgY2FjaGVz
IGluIExSVSBmYXNoaW9uIHdoZW4gdGhlIG1heGltdW0KKwlzaXplIGlzIHJlYWNoZWQuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6
Om1heEFwcENhY2hlU2l6ZSk6CisKIDIwMDktMDQtMjcgIERvdWdsYXMgUi4gRGF2aWRzb24gIDxk
ZGF2aWRzb0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHRoZSB2YXJpb3VzIHN3aXRjaGVzIGFu
ZCBjb250ZXh0IG1lbnUgaXRlbXMgbmVlZGVkIGZvcgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
Miw2ICsxNDIsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9sb2Nh
dGlvblBlcm1pc3Npb25Gb3JGcmFtZShXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0
aW9uKik7CiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIHZpcnR1
YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdl
YlZpZXcgKm1fd2ViVmlldzsKIH07CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjc5LDYgKzY3
OSwxNCBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVxdWVzdEdlb2xvY2F0aW9uCiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlMpCitpbnQ2NF90IFdlYkNocm9tZUNsaWVudDo6bWF4QXBwQ2FjaGVTaXplKCkKK3sK
KyAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBwcm9wZXJseS4KKyAgIHJldHVybiA1ICogMTAy
NCAqIDEwMjQ7Cit9CisjZW5kaWYKKwogQGltcGxlbWVudGF0aW9uIFdlYk9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyCiAKIC0gKGlkKWluaXRXaXRoQ2hvb3NlcjooUGFzc1JlZlB0cjxGaWxlQ2hvb3Nl
cj4pY2hvb3NlcgpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MjkzMCkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0wNC0yOCAgQW5kcmVpIFBvcGVz
Y3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKwlMaW1pdHMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgQXBwbGljYXRpb24gQ2Fj
aGUgYW5kCisJZXhwaXJlcyBvbGQgY2FjaGVzIGluIExSVSBmYXNoaW9uIHdoZW4gdGhlIG1heGlt
dW0KKwlzaXplIGlzIHJlYWNoZWQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6bWF4QXBwQ2Fj
aGVTaXplKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oOgorCiAy
MDA5LTA0LTI4ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA0MjAyNikKKysrIFdl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyOSw0ICs0MjksMTMgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6cnVuT3BlblBhbmVsKEZy
YW1lKgogICAgIH0KIH0KIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCitp
bnQ2NF90IENocm9tZUNsaWVudFF0OjptYXhBcHBDYWNoZVNpemUoKQoreworICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBwcm9wZXJseS4KKyAgIHJldHVy
biA1ICogMTAyNCAqIDEwMjQ7Cit9CisjZW5kaWYKKwogfQpJbmRleDogV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2
ICsxMjAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBm
b3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopIHsgfQogCisjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENhY2hlU2l6
ZSgpOworI2VuZGlmCisKICAgICAgICAgUVdlYlBhZ2UqIG1fd2ViUGFnZTsKICAgICAgICAgV2Vi
Q29yZTo6S1VSTCBsYXN0SG92ZXJVUkw7CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyBsYXN0SG92
ZXJUaXRsZTsKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA0MjkzMCkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDQtMjggIEFuZHJlaSBQb3Bl
c2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisJTGltaXRzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIEFwcGxpY2F0aW9uIENh
Y2hlIGFuZAorCWV4cGlyZXMgb2xkIGNhY2hlcyBpbiBMUlUgZmFzaGlvbiB3aGVuIHRoZSBtYXhp
bXVtCisJc2l6ZSBpcyByZWFjaGVkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6bWF4QXBwQ2FjaGVTaXpl
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKwogMjAwOS0w
NC0yMiAgQWRhIENoYW4gIDxhZGFjaGFuQGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3By
b2JsZW0vNTExNTI5OD4gRG9uJ3QgZ2V0IGVycm9yIG1zZyB3aGVuIGRvd25sb2FkIGlzIGludGVy
cnVwdGVkIGFuZCBjYW5ub3QgcmVzdW1lIGR1ZSB0byBzZXJ2ZXIgdW5hdmFpbGFiaWxpdHkKSW5k
ZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJl
dmlzaW9uIDQyMDI2KQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTIsNiArNjkyLDE0IEBAIHZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpydW5PcGVuUGFuZWwoRnJhbWUKICAgICAvLyBGSVhNRTogU2hvdyBzb21lIHNvcnQg
b2YgZXJyb3IgaWYgdG9vIG1hbnkgZmlsZXMgYXJlIHNlbGVjdGVkIGFuZCB0aGUgYnVmZmVyIGlz
IHRvbyBzbWFsbC4gIEZvciBub3csIHRoaXMgd2lsbCBmYWlsIHNpbGVudGx5LgogfQogCisjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKK2ludDY0X3QgV2ViQ2hyb21lQ2xpZW50
OjptYXhBcHBDYWNoZVNpemUoKQoreworICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIHByb3Bl
cmx5LgorICAgcmV0dXJuIDUgKiAxMDI0ICogMTAyNDsKK30KKyNlbmRpZgorCiBDT01QdHI8SVdl
YlVJRGVsZWdhdGU+IFdlYkNocm9tZUNsaWVudDo6dWlEZWxlZ2F0ZSgpCiB7CiAgICAgQ09NUHRy
PElXZWJVSURlbGVnYXRlPiBkZWxlZ2F0ZTsKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJLaXQvd2luL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiAr
MTIwLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2Uo
Y29uc3QgV2ViQ29yZTo6Tm9kZSopIHsgfQogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKKyAgICB2aXJ0dWFsIGludDY0X3QgbWF4QXBwQ2FjaGVTaXplKCk7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGU+IHVpRGVsZWdhdGUoKTsKICAg
ICBDT01QdHI8SVdlYlVJRGVsZWdhdGUyPiB1aURlbGVnYXRlMigpOwpJbmRleDogV2ViS2l0L3d4
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lvbiA0
MjkzMCkKKysrIFdlYktpdC93eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NSBAQAorMjAwOS0wNC0yOCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwlMaW1pdHMgdGhlIG1heGlt
dW0gc2l6ZSBvZiB0aGUgQXBwbGljYXRpb24gQ2FjaGUgYW5kCisJZXhwaXJlcyBvbGQgY2FjaGVz
IGluIExSVSBmYXNoaW9uIHdoZW4gdGhlIG1heGltdW0KKwlzaXplIGlzIHJlYWNoZWQuCisKKyAg
ICAgICAgKiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudFd4OjptYXhBcHBDYWNoZVNpemUpOgorICAgICAgICAqIFdlYktpdFN1
cHBvcnQvQ2hyb21lQ2xpZW50V3guaDoKKwogMjAwOS0wNC0yNCAgS2V2aW4gT2xsaXZpZXIgIDxr
ZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAgICAgICB3eCBidWlsZCBmaXguIFN3aXRjaGlu
ZyBKU0NvcmUgZnJvbSBhIHN0YXRpYyBsaWIgdG8gYSBkeW5hbWljIGxpYgpJbmRleDogV2ViS2l0
L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcAkocmV2aXNpb24gNDIwMjYpCisr
KyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2Myw0ICszNjMsMTQgQEAgdm9pZCBDaHJvbWVDbGllbnRXeDo6cnVuT3BlblBhbmVs
KEZyYW1lKgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKKyNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQoraW50NjRfdCBDaHJvbWVDbGllbnRXeDo6bWF4QXBwQ2FjaGVTaXpl
KCkKK3sKKyAgIG5vdEltcGxlbWVudGVkKCk7CisgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMg
cHJvcGVybHkuCisgICByZXR1cm4gNSAqIDEwMjQgKiAxMDI0OwogfQorI2VuZGlmCisKK30KKwpJ
bmRleDogV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5oCShyZXZpc2lvbiA0
MjAyNikKKysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmgJKHdvcmtp
bmcgY29weSkKQEAgLTExNiw2ICsxMTYsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBOb2RlKikgeyB9CiAKKyNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKQorICAgIHZpcnR1YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUo
KTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHd4V2ViVmlldyogbV93ZWJWaWV3OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29909</attachid>
            <date>2009-04-30 05:12:54 -0700</date>
            <delta_ts>2009-05-05 04:09:56 -0700</delta_ts>
            <desc>New proposal to limit the maximum size of the application cache (take 4).</desc>
            <filename>appcache.patch</filename>
            <type>text/plain</type>
            <size>35915</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjkzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDktMDQtMjggIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IExpbWl0cyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBhbmQKKwll
eHBpcmVzIG9sZCBjYWNoZXMgaW4gTFJVIGZhc2hpb24gd2hlbiB0aGUgbWF4aW11bQorCXNpemUg
aXMgcmVhY2hlZC4KKwkKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OmFkZFJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmNlKToKKyAg
ICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZTo6c2l6ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSXNDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6Om1heEFwcENhY2hlU2l6ZSk6CisgICAgICAgICogbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5oOgorICAgICAgICAqIGxvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bGljYXRpb25DYWNoZVJlc291cmNlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKToKKyAgICAgICAgKiBs
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmg6CisgICAgICAgICogbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpsb2FkQ2FjaGVHcm91cCk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVOZXdlc3RDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVDb3B5T2ZDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bGFzdEV4ZWN1
dGlvbkZhaWxlZER1ZU1heFNpemVSZWFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpldmljdExSVUFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnVwZGF0ZUNhY2hlVGltZXN0YW1wKToKKyAg
ICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaDoKKyAgICAg
ICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVE
YXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6ZnJlZVNwYWNl
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6Y3VycmVudFNpemUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgorCiAyMDA5LTA0LTI4ICBK
b2huIFN1bGxpdmFuICA8c3VsbGl2YW5AYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82ODIwMjIxPiBSRUdSRVNTSU9OOiAyLWJ5dGUgY2hhcmFjdGVyIG5hbWVzIG9mIGltYWdl
cyBhcmUgZGlzcGxheWVkIGFzICUtZW5jb2RlZCBBU0NJSQpJbmRleDogV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRz
LmgJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPikgeyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUqKSB7IH0KKworI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgdmlydHVhbCBpbnQ2NF90IG1h
eEFwcENhY2hlU2l6ZSgpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogfTsKIAogY2xhc3MgRW1wdHlG
cmFtZUxvYWRlckNsaWVudCA6IHB1YmxpYyBGcmFtZUxvYWRlckNsaWVudCB7CkBAIC0yNDYsNiAr
MjUwLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2xvYmFsSGlzdG9yeSgp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygp
IHsgfQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0q
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2lmZGVmIEFORFJPSURfSElTVE9SWV9DTElFTlQK
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRBZGRIaXN0b3J5SXRlbShIaXN0b3J5SXRlbSop
IGNvbnN0IHt9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVtb3ZlSGlzdG9yeUl0ZW0o
SGlzdG9yeUl0ZW0qLCBpbnQpIGNvbnN0IHt9CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
Q2hhbmdlSGlzdG9yeUluZGV4KEJhY2tGb3J3YXJkTGlzdCopIGNvbnN0IHt9CisjZW5kaWYKICAg
ICB2aXJ0dWFsIHZvaWQgc2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRlbSopIHsgfQogICAg
IHZpcnR1YWwgYm9vbCBjYW5DYWNoZVBhZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAkocmV2
aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBBcHBsaWNhdGlvbkNhY2hlOjpB
cHBsaWNhdGlvbkNhY2hlKCkKICAgICA6IG1fZ3JvdXAoMCkKICAgICAsIG1fbWFuaWZlc3QoMCkK
ICAgICAsIG1fc3RvcmFnZUlEKDApCisgICAgLCBtX3NpemUoMCkKIHsKIH0KIApAQCAtODQsOSAr
ODUsMTMgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlOjphZGRSZXNvdXJjZShQYXNzUgogICAgICAg
ICBBU1NFUlQocmVzb3VyY2UtPnR5cGUoKSAmIChBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkR5
bmFtaWMgfCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6Ok1hc3RlcikpOwogICAgICAgICAKICAg
ICAgICAgLy8gQWRkIHRoZSByZXNvdXJjZSB0byB0aGUgc3RvcmFnZS4KLSAgICAgICAgY2FjaGVT
dG9yYWdlKCkuc3RvcmUocmVzb3VyY2UuZ2V0KCksIHRoaXMpOworICAgICAgICBBU1NFUlQobV9n
cm91cCk7CisgICAgICAgIGNhY2hlU3RvcmFnZSgpLnN0b3JlKHJlc291cmNlLmdldCgpLCB0aGlz
LCBtX2dyb3VwLT5tYXhBcHBDYWNoZVNpemUoKSk7CiAgICAgfQotICAgIAorCisgICAgbV9zaXpl
ICs9IHJlc291cmNlLT5zaXplKCk7CisKKyAgICAvLyBGaW5hbGx5IGFkZCB0aGUgcmVzb3VyY2Ug
dG8gb3VyIG1hcC4KICAgICBtX3Jlc291cmNlcy5zZXQodXJsLCByZXNvdXJjZSk7CiB9CiAKQEAg
LTk5LDYgKzEwNCw4IEBAIHVuc2lnbmVkIEFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJlc291cmMK
ICAgICAvLyBUaGUgcmVzb3VyY2UgZXhpc3RzLCBnZXQgaXRzIHR5cGUgc28gd2UgY2FuIHJldHVy
biBpdC4KICAgICB1bnNpZ25lZCB0eXBlID0gaXQtPnNlY29uZC0+dHlwZSgpOwogCisgICAgbV9z
aXplIC09IGl0LT5zZWNvbmQtPnNpemUoKTsKKwogICAgIG1fcmVzb3VyY2VzLnJlbW92ZShpdCk7
CiAgICAgCiAgICAgcmV0dXJuIHR5cGU7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZS5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgcmVxdWVzdElzSFRUUE9ySFRUUFNHZXQo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKKyAgICBpbnQ2NF90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKwogcHJpdmF0ZToKICAgICBBcHBsaWNhdGlvbkNhY2hlKCk7CiAgICAg
CkBAIC0xMDYsNiArMTA4LDkgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjpwYWlyPEtVUkws
IGJvb2w+ID4gbV9wZW5kaW5nRHluYW1pY0VudHJ5QWN0aW9uczsKIAogICAgIHVuc2lnbmVkIG1f
c3RvcmFnZUlEOworCisgICAgLy8gVGhlIHRvdGFsIHNpemUgb2YgdGhlIHJlc291cmNlcyBiZWxv
bmdpbmcgdG8gdGhpcyBBcHBsaWNhdGlvbiBDYWNoZSBpbnN0YW5jZS4KKyAgICBpbnQ2NF90IG1f
c2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkocmV2aXNpb24gNDIw
MjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXBwbGljYXRpb25D
YWNoZS5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIgogI2luY2x1ZGUg
IkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hl
LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC03MTAsNyArNzExLDcgQEAgdm9pZCBBcHBs
aWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSQogCiAgICAgICAgIC8vIFRoZSBzdG9yYWdl
IGNvdWxkIGhhdmUgYmVlbiBtYW51YWxseSBlbXB0aWVkIGJ5IHRoZSB1c2VyLgogICAgICAgICBp
ZiAoIW1fc3RvcmFnZUlEKQotICAgICAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmVOZXdlc3RD
YWNoZSh0aGlzKTsKKyAgICAgICAgICAgIGNhY2hlU3RvcmFnZSgpLnN0b3JlTmV3ZXN0Q2FjaGUo
dGhpcywgbWF4QXBwQ2FjaGVTaXplKCkpOwogCiAgICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRP
TUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxOb1VwZGF0ZUxpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1
bWVudExvYWRlcnMpOwogICAgICAgICBicmVhazsKQEAgLTczMiwxMiArNzMzLDE2IEBAIHZvaWQg
QXBwbGljYXRpb25DYWNoZUdyb3VwOjpjaGVja0lmTG9hZEkKICAgICAgICAgUmVmUHRyPEFwcGxp
Y2F0aW9uQ2FjaGU+IG9sZE5ld2VzdENhY2hlID0gKG1fbmV3ZXN0Q2FjaGUgPT0gbV9jYWNoZUJl
aW5nVXBkYXRlZCkgPyAwIDogbV9uZXdlc3RDYWNoZTsKIAogICAgICAgICBzZXROZXdlc3RDYWNo
ZShtX2NhY2hlQmVpbmdVcGRhdGVkLnJlbGVhc2UoKSk7Ci0gICAgICAgIGNhY2hlU3RvcmFnZSgp
LnN0b3JlTmV3ZXN0Q2FjaGUodGhpcyk7CisgICAgICAgIGlmIChjYWNoZVN0b3JhZ2UoKS5zdG9y
ZU5ld2VzdENhY2hlKHRoaXMsIG1heEFwcENhY2hlU2l6ZSgpKSkgeworICAgICAgICAgICAgLy8g
TmV3IGNhY2hlIHN0b3JlZCwgbm93IHJlbW92ZSB0aGUgb2xkIGNhY2hlLgorICAgICAgICAgICAg
aWYgKG9sZE5ld2VzdENhY2hlKQorICAgICAgICAgICAgICAgIGNhY2hlU3RvcmFnZSgpLnJlbW92
ZShvbGROZXdlc3RDYWNoZS5nZXQoKSk7CiAKLSAgICAgICAgaWYgKG9sZE5ld2VzdENhY2hlKQot
ICAgICAgICAgICAgY2FjaGVTdG9yYWdlKCkucmVtb3ZlKG9sZE5ld2VzdENhY2hlLmdldCgpKTsK
LQotICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKGlzVXBncmFkZUF0dGVtcHQgPyAmRE9NQXBwbGlj
YXRpb25DYWNoZTo6Y2FsbFVwZGF0ZVJlYWR5TGlzdGVuZXIgOiAmRE9NQXBwbGljYXRpb25DYWNo
ZTo6Y2FsbENhY2hlZExpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOworICAg
ICAgICAgICAgcG9zdExpc3RlbmVyVGFzayhpc1VwZ3JhZGVBdHRlbXB0ID8gJkRPTUFwcGxpY2F0
aW9uQ2FjaGU6OmNhbGxVcGRhdGVSZWFkeUxpc3RlbmVyIDogJkRPTUFwcGxpY2F0aW9uQ2FjaGU6
OmNhbGxDYWNoZWRMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGZhaWxlZCB0byBzdG9yZSB0aGUgbmV3IGNh
Y2hlLiBSZXBvcnQgYW4gZXJyb3IuCisgICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKCZET01B
cHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRM
b2FkZXJzKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpAQCAtODgx
LDYgKzg4NiwxMCBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2xlYXJTdG9yYWdlCiAg
ICAgICAgICgqaXQpLT5jbGVhclN0b3JhZ2VJRCgpOwogfQogICAgIAoraW50NjRfdCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXA6Om1heEFwcENhY2hlU2l6ZSgpIHsKKyAgICBBU1NFUlQobV9mcmFtZSk7
CisgICAgcmV0dXJuIG1fZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5tYXhBcHBD
YWNoZVNpemUoKTsKK30KIAogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkod29ya2luZyBjb3B5KQpAQCAt
OTAsNiArOTAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzQ29weSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNDb3B5OyB9CiAKKyAgICBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpOworCiBwcml2YXRl
OgogICAgIHR5cGVkZWYgdm9pZCAoRE9NQXBwbGljYXRpb25DYWNoZTo6Kkxpc3RlbmVyRnVuY3Rp
b24pKCk7CiAgICAgc3RhdGljIHZvaWQgcG9zdExpc3RlbmVyVGFzayhMaXN0ZW5lckZ1bmN0aW9u
LCBjb25zdCBIYXNoU2V0PERvY3VtZW50TG9hZGVyKj4mKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcAkocmV2aXNp
b24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6QXBwbGljYXRpb25DYWMKICAgICA6IFN1YnN0aXR1dGVSZXNvdXJjZSh1cmws
IHJlc3BvbnNlLCBkYXRhKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3N0b3JhZ2VJRCgw
KQorICAgICwgbV9zaXplKDApCiB7CiB9CiAKQEAgLTQ0LDYgKzQ1LDI5IEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlOjphZGRUeXBlKHUKICAgICBtX3R5cGUgfD0gdHlwZTsgCiB9CiAK
K2ludDY0X3QgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkKK3sKKyAgICBpZiAoIW1f
c2l6ZSkgeworICAgICAgICBpZiAoZGF0YSgpKQorICAgICAgICAgICAgbV9zaXplICs9IGRhdGEo
KS0+c2l6ZSgpOworICAgIAorICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSByZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICAgICAgZm9yIChI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlKCkuaHR0cEhlYWRlckZp
ZWxkcygpLmJlZ2luKCk7IGl0IT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBtX3NpemUgKz0g
KGl0LT5maXJzdC5sZW5ndGgoKSArIGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihV
Q2hhcik7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgbV9zaXplICs9IHVybCgpLnN0cmluZygp
Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgbV9zaXplICs9IHNpemVvZihpbnQp
OyAgLy8gcmVzb3VyY2UubV9odHRwU3RhdHVzQ29kZQorICAgICAgICBtX3NpemUgKz0gcmVzcG9u
c2UoKS51cmwoKS5zdHJpbmcoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIG1f
c2l6ZSArPSBzaXplb2YodW5zaWduZWQpOyAgLy8gZGF0YUlkCisgICAgICAgIG1fc2l6ZSArPSBy
ZXNwb25zZSgpLm1pbWVUeXBlKCkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgICAgICBt
X3NpemUgKz0gcmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCkubGVuZ3RoKCkgKiBzaXplb2Yo
VUNoYXIpOworIAorICAgIH0KKworICAgIHJldHVybiBtX3NpemU7Cit9CisKICNpZm5kZWYgTkRF
QlVHCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5cGUodW5zaWduZWQgdHlw
ZSkKIHsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZS5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1
NSw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzdG9yYWdlSUQoKSBjb25zdCB7IHJldHVybiBt
X3N0b3JhZ2VJRDsgfQogICAgIHZvaWQgY2xlYXJTdG9yYWdlSUQoKSB7IG1fc3RvcmFnZUlEID0g
MDsgfQogCisgICAgaW50NjRfdCBzaXplKCk7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGlj
IHZvaWQgZHVtcFR5cGUodW5zaWduZWQgdHlwZSk7CiAjZW5kaWYKQEAgLTY0LDYgKzY2LDcgQEAg
cHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fdHlwZTsKICAgICB1bnNpZ25lZCBtX3N0b3JhZ2VJ
RDsKKyAgICBpbnQ2NF90IG1fc2l6ZTsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgogI2luY2x1ZGUgIkFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJD
dXJyZW50VGltZS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCkBAIC0zOSw2ICs0MCw4IEBACiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAor
I2luY2x1ZGUgPHNxbGl0ZTMuaD4KKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtODMsNiArODYsOSBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxp
Y2F0aW9uQ2FjaGVTCiAgICAgZ3JvdXAtPnNldFN0b3JhZ2VJRChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApKSk7CiAgICAgZ3JvdXAtPnNldE5ld2VzdENh
Y2hlKGNhY2hlLnJlbGVhc2UoKSk7CiAKKyAgICAvLyBXZSBhcmUgdXNpbmcgdGhlIGNhY2hlLiBV
cGRhdGUgaXRzIHRpbWVzdGFtcC4KKyAgICB1cGRhdGVDYWNoZVRpbWVzdGFtcChuZXdlc3RDYWNo
ZVN0b3JhZ2VJRCk7CisKICAgICByZXR1cm4gZ3JvdXA7CiB9ICAgIAogCkBAIC0xODUsNiArMTkx
LDkgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlUwogICAgICAgICAv
LyBhIG1hdGNoaW5nIFVSTC4KICAgICAgICAgdW5zaWduZWQgbmV3ZXN0Q2FjaGVJRCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMikpOwogICAgICAgICBS
ZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2FjaGVJRCk7
CisgICAgICAgIC8vIEZvciB2YXJpb3VzIHJlYXNvbnMsIGxvYWRDYWNoZSBjYW4gcmV0dXJuIDA7
CisgICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gY2FjaGUtPnJlc291cmNlRm9yVVJM
KHVybCk7CiAgICAgICAgIGlmICghcmVzb3VyY2UpCkBAIC0xOTksNiArMjA4LDkgQEAgQXBwbGlj
YXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlUwogICAgICAgICAKICAgICAgICAgbV9j
YWNoZXNJbk1lbW9yeS5zZXQoZ3JvdXAtPm1hbmlmZXN0VVJMKCksIGdyb3VwKTsKICAgICAgICAg
CisgICAgICAgIC8vIFdlIGFyZSB1c2luZyB0aGUgY2FjaGUuIFVwZGF0ZSBpdHMgdGltZXN0YW1w
LgorICAgICAgICB1cGRhdGVDYWNoZVRpbWVzdGFtcChuZXdlc3RDYWNoZUlEKTsKKwogICAgICAg
ICByZXR1cm4gZ3JvdXA7CiAgICAgfQogCkBAIC0zMjgsNyArMzQwLDcgQEAgYm9vbCBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVNRTAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBjb25zdCBpbnQgc2NoZW1hVmVyc2lvbiA9IDM7CitzdGF0aWMgY29uc3QgaW50IHNjaGVt
YVZlcnNpb24gPSA0OwogICAgIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dmVyaWZ5
U2NoZW1hVmVyc2lvbigpCiB7CkBAIC0zNjMsMTIgKzM3NSwxMiBAQCB2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJhCiAgICAgaWYgKG1fY2FjaGVEaXJlY3RvcnkuaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBTdHJpbmcgYXBwbGljYXRpb25DYWNoZVBh
dGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVjdG9yeSwgIkFwcGxpY2F0
aW9uQ2FjaGUuZGIiKTsKLSAgICBpZiAoIWNyZWF0ZUlmRG9lc05vdEV4aXN0ICYmICFmaWxlRXhp
c3RzKGFwcGxpY2F0aW9uQ2FjaGVQYXRoKSkKKyAgICBtX2NhY2hlRmlsZSA9IHBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChtX2NhY2hlRGlyZWN0b3J5LCAiQXBwbGljYXRpb25DYWNoZS5kYiIpOwor
ICAgIGlmICghY3JlYXRlSWZEb2VzTm90RXhpc3QgJiYgIWZpbGVFeGlzdHMobV9jYWNoZUZpbGUp
KQogICAgICAgICByZXR1cm47CiAKICAgICBtYWtlQWxsRGlyZWN0b3JpZXMobV9jYWNoZURpcmVj
dG9yeSk7Ci0gICAgbV9kYXRhYmFzZS5vcGVuKGFwcGxpY2F0aW9uQ2FjaGVQYXRoKTsKKyAgICBt
X2RhdGFiYXNlLm9wZW4obV9jYWNoZUZpbGUpOwogICAgIAogICAgIGlmICghbV9kYXRhYmFzZS5p
c09wZW4oKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc4LDcgKzM5MCw3IEBAIHZvaWQgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmEKICAgICAvLyBDcmVhdGUgdGFibGVzCiAgICAg
ZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlR3JvdXBz
IChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsICIKICAgICAgICAgICAgICAg
ICAgICAgICAibWFuaWZlc3RIb3N0SGFzaCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwsIG1hbmlmZXN0VVJMIFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIG5ld2VzdENhY2hl
IElOVEVHRVIpIik7Ci0gICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIENhY2hlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBjYWNo
ZUdyb3VwIElOVEVHRVIpIik7CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJ
RiBOT1QgRVhJU1RTIENhY2hlcyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5U
LCBjYWNoZUdyb3VwIElOVEVHRVIsIHNpemUgSU5URUdFUiwgdGltZXN0YW1wIElOVEVHRVIpIik7
CiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hl
V2hpdGVsaXN0VVJMcyAodXJsIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgY2FjaGUg
SU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOwogICAgIGV4ZWN1dGVTUUxDb21t
YW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBGYWxsYmFja1VSTHMgKG5hbWVzcGFjZSBU
RVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIGZhbGxiYWNrVVJMIFRFWFQgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCwgIgogICAgICAgICAgICAgICAgICAgICAgICJjYWNoZSBJTlRFR0VS
IE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7CkBAIC00MDYsNiArNDE4LDkgQEAgdm9pZCBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYQogICAgICAgICAgICAgICAgICAgICAg
ICIgRk9SIEVBQ0ggUk9XIEJFR0lOIgogICAgICAgICAgICAgICAgICAgICAgICIgIERFTEVURSBG
Uk9NIENhY2hlUmVzb3VyY2VEYXRhIFdIRVJFIGlkID0gT0xELmRhdGE7IgogICAgICAgICAgICAg
ICAgICAgICAgICIgRU5EIik7CisKKyAgICAvLyBUbyBiZSBhYmxlIHRvIHF1aWNrbHkgZXZpY3Qg
Y2FjaGVzIGluIExSVSBvcmRlciwgd2UgaW5kZXggdGhlIENhY2hlcyB0YWJsZSBvbiB0aGUgdGlt
ZXN0YW1wIGF0dHJpYnV0ZS4KKyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIElOREVYIGxy
dUluZGV4IE9OIENhY2hlcyh0aW1lc3RhbXApOyIpOwogfQogCiBib29sIEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpleGVjdXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYgc3RhdGVtZW50KQpA
QCAtNDQxLDExICs0NTYsMTMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUo
QXBwbAogICAgIEFTU0VSVChjYWNoZS0+c3RvcmFnZUlEKCkgPT0gMCk7CiAgICAgQVNTRVJUKGNh
Y2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSAhPSAwKTsKICAgICAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZXMgKGNhY2hlR3JvdXAp
IFZBTFVFUyAoPykiKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2Us
ICJJTlNFUlQgSU5UTyBDYWNoZXMgKGNhY2hlR3JvdXAsIHNpemUsIHRpbWVzdGFtcCkgVkFMVUVT
ICg/LCA/LCA/KSIpOwogICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9r
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNh
Y2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBj
YWNoZS0+c2l6ZSgpKTsKKyAgICBzdGF0ZW1lbnQuYmluZEludDY0KDMsIGN1cnJlbnRUaW1lKCkp
OwogCiAgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHN0YXRlbWVudCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTU4NSw0MyArNjAyLDEwMSBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpzdG9yZVVwZGF0CiAgICAgcmV0dXJuIGV4ZWN1dGVTdGF0ZW1lbnQoZW50cnlTdGF0ZW1l
bnQpOwogfQogCi12b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKK3ZvaWQg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSog
cmVzb3VyY2UsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlLCBpbnQ2NF90IG1heEFwcENhY2hlU2l6
ZSkKIHsKICAgICBBU1NFUlQoY2FjaGUtPnN0b3JhZ2VJRCgpKTsKICAgICAKICAgICBvcGVuRGF0
YWJhc2UodHJ1ZSk7CiAgCisgICAgbV9kYXRhYmFzZS5zZXRNYXhpbXVtU2l6ZShtYXhBcHBDYWNo
ZVNpemUpOwogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbiht
X2RhdGFiYXNlKTsKICAgICBzdG9yZVJlc291cmNlVHJhbnNhY3Rpb24uYmVnaW4oKTsKLSAgICAK
LSAgICBpZiAoIXN0b3JlKHJlc291cmNlLCBjYWNoZS0+c3RvcmFnZUlEKCkpKQorCisgICAgaWYg
KCFzdG9yZShyZXNvdXJjZSwgY2FjaGUtPnN0b3JhZ2VJRCgpKSkgeworICAgICAgICBpZiAoIWxh
c3RFeGVjdXRpb25GYWlsZWREdWVNYXhTaXplUmVhY2hlZCgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAvLyBUaGUgZmFpbHVyZSB3YXMgZHVlIHRvIG1heGltdW0gc2l6ZSBiZWluZyBy
ZWFjaGVkLiBSb2xsYmFjay4KKyAgICAgICAgc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uLnJvbGxi
YWNrKCk7CisgICAgICAgIC8vIEF0dGVtcHQgdG8gZXZpY3Qgc29tZSBvbGQgY2FjaGVzLgorICAg
ICAgICBpZiAoIWV2aWN0TFJVQXBwbGljYXRpb25DYWNoZShyZXNvdXJjZS0+c2l6ZSgpLCBtYXhB
cHBDYWNoZVNpemUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBUaGUgZXZpY3Rp
b24gd2FzIHN1Y2Nlc3NmdWwuIFJldHJ5IHRvIHN0b3JlIHRoZSByZXNvdXJjZS4KKyAgICAgICAg
c3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgICAgIGlmICghc3RvcmUocmVz
b3VyY2UsIGNhY2hlLT5zdG9yYWdlSUQoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gQSByZXNvdXJjZSB3YXMgYWRkZWQgdG8gdGhlIGNhY2hlLiBVcGRhdGUgdGhlIHRv
dGFsIGRhdGEgc2l6ZSBmb3IgdGhlIGNhY2hlLgorICAgIFNRTGl0ZVN0YXRlbWVudCBzaXplVXBk
YXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVzIFNFVCBzaXplPXNpemUrPyBX
SEVSRSBpZD0/Iik7CisgICAgaWYgKHNpemVVcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TFJlc3VsdE9rKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBzaXplVXBkYXRlU3RhdGVt
ZW50LmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+c2l6ZSgpKTsKKyAgICBzaXplVXBkYXRlU3RhdGVt
ZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+c3RvcmFnZUlEKCkpOworCisgICAgaWYgKCFleGVjdXRl
U3RhdGVtZW50KHNpemVVcGRhdGVTdGF0ZW1lbnQpKQorICAgICAgICByZXR1cm47CisKICAgICBz
dG9yZVJlc291cmNlVHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKLWJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91
cCkKK2Jvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGlj
YXRpb25DYWNoZUdyb3VwKiBncm91cCwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUpCiB7CiAgICAg
b3BlbkRhdGFiYXNlKHRydWUpOwogICAgIAorICAgIG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUo
bWF4QXBwQ2FjaGVTaXplKTsKICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9yZUNhY2hlVHJhbnNh
Y3Rpb24obV9kYXRhYmFzZSk7CiAgICAgCiAgICAgc3RvcmVDYWNoZVRyYW5zYWN0aW9uLmJlZ2lu
KCk7CiAgICAgCisgICAgLy8gV2UgdHJ5IHRvIHN0b3JlIHRoZSBncm91cCBhbmQgdGhlIG5ld2Vz
dCBjYWNoZS4gSWYgdGhlIGRhdGFiYXNlCisgICAgLy8gcmVwb3J0cyB0aGF0IHdlIGhhdmUgaGl0
IHRoZSBtYXhBcHBDYWNoZVNpemUgbGltaXQsIHdlIGF0dGVtcHQgdG8KKyAgICAvLyByZW1vdmUg
ZW5vdWdoIGVudHJpZXMgKGluIExSVSBvcmRlcikgZnJvbSB0aGUgY2FjaGUgc28gdGhhdCB0aGUg
bmV3ZXN0CisgICAgLy8gY2FjaGUgZml0cyBpbi4gSWYgdGhlIG5ld2VzdCBjYWNoZSBpcyBzdGls
bCB0b28gYmlnLCB3ZSBiYWlsIG91dC4KKworICAgIC8vIEZpcnN0IGRvIGEgc2FuaXR5IGNoZWNr
IG9uIHRoZSBzaXplIG9mIHRoZSBjYWNoZS4KKyAgICBpZiAoZ3JvdXAtPm5ld2VzdENhY2hlKCkt
PnNpemUoKSA+PSBtYXhBcHBDYWNoZVNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAg
IGlmICghZ3JvdXAtPnN0b3JhZ2VJRCgpKSB7CiAgICAgICAgIC8vIFN0b3JlIHRoZSBncm91cAot
ICAgICAgICBpZiAoIXN0b3JlKGdyb3VwKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKCFzdG9yZShncm91cCkpIHsKKyAgICAgICAgICAgIGlmICghbGFzdEV4ZWN1dGlv
bkZhaWxlZER1ZU1heFNpemVSZWFjaGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgLy8gVGhlIGZhaWx1cmUgd2FzIGR1ZSB0byBtYXhpbXVtIHNpemUgYmVp
bmcgcmVhY2hlZC4gUm9sbGJhY2suCisgICAgICAgICAgICBncm91cC0+c2V0U3RvcmFnZUlEKDAp
OworICAgICAgICAgICAgc3RvcmVDYWNoZVRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7CisgICAgICAg
ICAgICAvLyBBdHRlbXB0IHRvIGV2aWN0IHNvbWUgb2xkIGNhY2hlcy4KKyAgICAgICAgICAgIGlm
ICghZXZpY3RMUlVBcHBsaWNhdGlvbkNhY2hlKGdyb3VwLT5uZXdlc3RDYWNoZSgpLT5zaXplKCks
IG1heEFwcENhY2hlU2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgLy8gVGhlIGV2aWN0aW9uIHdhcyBzdWNjZXNzZnVsLiBSZXRyeSB0byBzdG9yZSB0aGUg
Z3JvdXAuCisgICAgICAgICAgICBzdG9yZUNhY2hlVHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICAg
ICAgICAgIGlmICghc3RvcmUoZ3JvdXApKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIEFTU0VSVChncm91cC0+bmV3ZXN0Q2FjaGUo
KSk7CiAgICAgQVNTRVJUKCFncm91cC0+aXNPYnNvbGV0ZSgpKTsKICAgICBBU1NFUlQoIWdyb3Vw
LT5uZXdlc3RDYWNoZSgpLT5zdG9yYWdlSUQoKSk7Ci0gICAgCisKICAgICAvLyBTdG9yZSB0aGUg
bmV3ZXN0IGNhY2hlCi0gICAgaWYgKCFzdG9yZShncm91cC0+bmV3ZXN0Q2FjaGUoKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKKyAgICBpZiAoIXN0b3JlKGdyb3VwLT5uZXdlc3RDYWNo
ZSgpKSkgeworICAgICAgICBpZiAoIWxhc3RFeGVjdXRpb25GYWlsZWREdWVNYXhTaXplUmVhY2hl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBUaGUgZmFpbHVyZSB3
YXMgZHVlIHRvIG1heGltdW0gc2l6ZSBiZWluZyByZWFjaGVkLiBSb2xsYmFjay4KKyAgICAgICAg
Z3JvdXAtPnNldFN0b3JhZ2VJRCgwKTsKKyAgICAgICAgZ3JvdXAtPm5ld2VzdENhY2hlKCktPnNl
dFN0b3JhZ2VJRCgwKTsKKyAgICAgICAgc3RvcmVDYWNoZVRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7
CisgICAgICAgIC8vIEF0dGVtcHQgdG8gZXZpY3Qgc29tZSBvbGQgY2FjaGVzLgorICAgICAgICBp
ZiAoIWV2aWN0TFJVQXBwbGljYXRpb25DYWNoZShncm91cC0+bmV3ZXN0Q2FjaGUoKS0+c2l6ZSgp
LCBtYXhBcHBDYWNoZVNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAv
LyBUaGUgZXZpY3Rpb24gd2FzIHN1Y2Nlc3NmdWwuIFJldHJ5IHRvIHN0b3JlIHRoZSBncm91cCBh
bmQgdGhlIGNhY2hlLgorICAgICAgICBzdG9yZUNhY2hlVHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAg
ICAgICAgaWYgKCFzdG9yZShncm91cCkgfHwgIXN0b3JlKGdyb3VwLT5uZXdlc3RDYWNoZSgpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICAvLyBVcGRhdGUgdGhlIG5l
d2VzdCBjYWNoZSBpbiB0aGUgZ3JvdXAuCiAgICAgCiAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIENhY2hlR3JvdXBzIFNFVCBuZXdlc3RDYWNoZT0/IFdI
RVJFIGlkPT8iKTsKQEAgLTgyNyw3ICs5MDIsMTEyIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnN0b3JlQ29weU8KICAgICAvLyBFbXB0eSB0aGUgY2FjaGUgaW4gY2FzZSBzb21ldGhp
bmcgd2FzIHRoZXJlIGJlZm9yZS4KICAgICBjb3B5U3RvcmFnZS5lbXB0eSgpOwogICAgIAotICAg
IHJldHVybiBjb3B5U3RvcmFnZS5zdG9yZU5ld2VzdENhY2hlKGdyb3VwQ29weS5nZXQoKSk7Cisg
ICAgcmV0dXJuIGNvcHlTdG9yYWdlLnN0b3JlTmV3ZXN0Q2FjaGUoZ3JvdXBDb3B5LmdldCgpLCBn
cm91cENvcHktPm1heEFwcENhY2hlU2l6ZSgpKTsKK30KKworYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZU1heFNpemVSZWFjaGVkKCkgeworICAgIHJl
dHVybiBtX2RhdGFiYXNlLmxhc3RFcnJvcigpID09IFNRTElURV9GVUxMOworfQorCitib29sIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpldmljdExSVUFwcGxpY2F0aW9uQ2FjaGUoaW50NjRfdCBp
bmNvbWluZ1NpemUsIGludDY0X3QgbWF4aW11bUFwcENhY2hlU2l6ZSkgeworICAgIG9wZW5EYXRh
YmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBzcGFjZSBuZWVkZWQg
dG8gYmUgZnJlZWQuCisgICAgaW50NjRfdCBzaXplVG9GcmVlID0gMDsKKyAgICAvLyBGaXJzdCBj
aGVjayBpZiBtYXhpbXVtQXBwQ2FjaGVTaXplIGlzbid0IHNtYWxsZXIgdGhhbiB0aGUgY3VycmVu
dCBkYXRhYmFzZSBzaXplLgorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdmFsdWUgaXMg
Z2VuZXJhdGVkIGR5bmFtaWNhbGx5IChlLmcuIGJ5IHRoZSB1c2VyKS4KKyAgICBpbnQ2NF90IGN1
cnJlbnRTaXplID0gMDsKKyAgICBpZiAoIWdldEZpbGVTaXplKG1fY2FjaGVGaWxlLCBjdXJyZW50
U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobWF4aW11bUFwcENhY2hlU2l6
ZSA8IGN1cnJlbnRTaXplKSB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBpbmNvbWluZ1NpemUg
c3RpbGwgZml0cyBpbnNpZGUgbWF4aW11bUFwcENhY2hlU2l6ZS4KKyAgICAgICAgLy8gSXQgbmVl
ZHMgdG8gYmUgc3RyaWN0bHkgc21hbGxlciB0byBmaXQgc2luY2UgU1FMaXRlIGFkZHMgc29tZQor
ICAgICAgICAvLyBzcGFjZSBvdmVyaGVhZCBmb3Igc3RvcmluZyBtZXRhZGF0YS4gU2luY2Ugd2Ug
Y2Fubm90IHRlbGwgaG93IGJpZworICAgICAgICAvLyB0aGlzIG1ldGFkYXRhIGlzLCB3ZSBydW4g
dGhlIHJpc2sgb2YgYmxvd2luZyB1cCB0aGUgZW50aXJlIGNhY2hlIGFuZAorICAgICAgICAvLyBm
aW5kaW5nIHRoYXQgdGhlIG5ldyBjYWNoZSBzdGlsbCBkb2VzIG5vdCBmaXQgd2hlbiBpbmNvbWlu
Z1NpemUgfj0gbWF4aW11bUFwcENhY2hlU2l6ZQorICAgICAgICAvLyBidXQgbWV0YWRhdGFTaXpl
ID4gKG1heGltdW1BcHBDYWNoZVNpemUgLSBpbmNvbWluZ1NpemUpLiBTaW5jZSB0aGlzCisgICAg
ICAgIC8vIGlzIGxpa2VseSBhIHJhcmUgY2FzZSwgd2UgY2FuIGxpdmUgd2l0aCBpdC4KKyAgICAg
ICAgaWYgKGluY29taW5nU2l6ZSA8IG1heGltdW1BcHBDYWNoZVNpemUpIHsKKyAgICAgICAgICAg
IHNpemVUb0ZyZWUgPSBpbmNvbWluZ1NpemU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBpbmNvbWluZ1NpemUgZG9lc24ndCBmaXQsIGJhaWwgb3V0LgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gbWF4aW11bUFw
cENhY2hlU2l6ZSBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIGN1cnJlbnQgZGF0YWJhc2Ugc2l6
ZS4KKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0b3RhbCBhdmFpbGFibGUgc3BhY2Ugc2l6ZS4g
VGhpcyBpcyB0aGUgbnVtYmVyIG9mIGZyZWUKKyAgICAgICAgLy8gYnl0ZXMgaW4gdGhlIGN1cnJl
bnQgZGF0YWJhc2UgZmlsZSArIHRoZSBzcGFjZSB3ZSBhcmUgYWxsb3dlZCB0byBncm93CisgICAg
ICAgIC8vICh3aGljaCBpcyBib3VuZGVkIGJ5IG1heGltdW1BcHBDYWNoZVNpemUpLgorICAgICAg
ICBpbnQ2NF90IHRvdGFsQXZhaWxhYmxlU2l6ZSA9IChtYXhpbXVtQXBwQ2FjaGVTaXplIC0gY3Vy
cmVudFNpemUpICsgbV9kYXRhYmFzZS5mcmVlU3BhY2VTaXplKCk7CisgICAgICAgIEFTU0VSVCh0
b3RhbEF2YWlsYWJsZVNpemUpOworICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHNwYWNlIHdlIG5l
ZWQgdG8gZnJlZSBpbnNpZGUgdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgICAgIHNpemVUb0ZyZWUg
PSBpbmNvbWluZ1NpemUgLSB0b3RhbEF2YWlsYWJsZVNpemU7CisgICAgfQorCisgICAgQVNTRVJU
KHNpemVUb0ZyZWUpOworCisgICAgaW50NjRfdCBjdW1tdWxhdGl2ZVNpemUgPSAwOworICAgIFZl
Y3RvcjxpbnQ2NF90PiBpZHM7CisKKyAgICAvL1N0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uOworICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIC8vIEZpbmQg
b3V0IHdoYXQgY2FjaGVzIHRvIGRlbGV0ZS4KKyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzZWxlY3RWaWN0aW1zKG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQsIHNpemUgRlJPTSBDYWNoZXMg
T1JERVIgQlkgdGltZXN0YW1wOyIpOworCisgICAgICAgIGlmIChzZWxlY3RWaWN0aW1zLnByZXBh
cmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICB3aGlsZSAoc2VsZWN0VmljdGltcy5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAg
ICAgICBpZHMuYXBwZW5kKHNlbGVjdFZpY3RpbXMuZ2V0Q29sdW1uSW50NjQoMCkpOworICAgICAg
ICAgICAgY3VtbXVsYXRpdmVTaXplICs9IHNlbGVjdFZpY3RpbXMuZ2V0Q29sdW1uSW50NjQoMSk7
CisgICAgICAgICAgICBpZiAoY3VtbXVsYXRpdmVTaXplID4gc2l6ZVRvRnJlZSkgeworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKGN1bW11bGF0aXZlU2l6ZSA8PSBzaXplVG9GcmVlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBmb3IgKFZlY3RvcjxpbnQ2NF90Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpZHMuYmVn
aW4oKTsgaXQgIT0gaWRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIC8vIERlbGV0ZSB0aGUgY2Fj
aGVzLgorICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlVmljdGltKG1fZGF0YWJhc2UsICJE
RUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgaWQ9PzsiKTsKKyAgICAgICAgaWYgKGRlbGV0ZVZpY3Rp
bS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgLy8gVXBkYXRlIHRoZSBDYWNoZUdyb3VwcyB0YWJsZS4KKyAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHVwZGF0ZUNhY2hlR3JvdXBzKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBDYWNo
ZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZT0/OyIpOworICAgICAgICBpZiAodXBkYXRlQ2FjaGVH
cm91cHMucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgZGVsZXRlVmljdGltLmJpbmRJbnQ2NCgxLCAqaXQpOworICAg
ICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoZGVsZXRlVmljdGltKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICB1cGRhdGVDYWNoZUdyb3Vwcy5iaW5kSW50NjQoMSwgKml0
KTsKKyAgICAgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHVwZGF0ZUNhY2hlR3JvdXBzKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQo
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
dXBkYXRlQ2FjaGVUaW1lc3RhbXAoaW50NjRfdCBpZCkKK3sKKyAgICBvcGVuRGF0YWJhc2UoZmFs
c2UpOworICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgU1FMaXRlU3RhdGVtZW50IHVwZGF0ZVRpbWVzdGFtcFN0YXRlbWVudChtX2RhdGFiYXNlLCAi
VVBEQVRFIENhY2hlcyBTRVQgdGltZXN0YW1wPT8gV0hFUkUgaWQ9PyIpOworICAgIGlmICh1cGRh
dGVUaW1lc3RhbXBTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rKSB7CisgICAgICAg
IHVwZGF0ZVRpbWVzdGFtcFN0YXRlbWVudC5iaW5kSW50NjQoMSwgY3VycmVudFRpbWUoKSk7Cisg
ICAgICAgIHVwZGF0ZVRpbWVzdGFtcFN0YXRlbWVudC5iaW5kSW50NjQoMiwgaWQpOworICAgICAg
ICBleGVjdXRlU3RhdGVtZW50KHVwZGF0ZVRpbWVzdGFtcFN0YXRlbWVudCk7CisgICAgfQogfQog
ICAgIAogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UmIGNhY2hlU3RvcmFnZSgpCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgJKHJl
dmlzaW9uIDQyMDI2KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjYWNoZUdyb3VwRGVzdHJveWVkKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCopOwogICAgIHZv
aWQgY2FjaGVHcm91cE1hZGVPYnNvbGV0ZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqKTsKICAgICAg
ICAgCi0gICAgYm9vbCBzdG9yZU5ld2VzdENhY2hlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCopOyAv
LyBVcGRhdGVzIHRoZSBjYWNoZSBncm91cCwgYnV0IGRvZXNuJ3QgcmVtb3ZlIG9sZCBjYWNoZS4K
LSAgICB2b2lkIHN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSosIEFwcGxpY2F0aW9uQ2Fj
aGUqKTsKKyAgICBib29sIHN0b3JlTmV3ZXN0Q2FjaGUoQXBwbGljYXRpb25DYWNoZUdyb3VwKiwg
aW50NjRfdCk7IC8vIFVwZGF0ZXMgdGhlIGNhY2hlIGdyb3VwLCBidXQgZG9lc24ndCByZW1vdmUg
b2xkIGNhY2hlLgorICAgIHZvaWQgc3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiwgQXBw
bGljYXRpb25DYWNoZSosIGludDY0X3QpOwogICAgIGJvb2wgc3RvcmVVcGRhdGVkVHlwZShBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2UqLCBBcHBsaWNhdGlvbkNhY2hlKik7CiAKICAgICAvLyBSZW1v
dmVzIHRoZSBncm91cCBpZiB0aGUgY2FjaGUgdG8gYmUgcmVtb3ZlZCBpcyB0aGUgbmV3ZXN0IG9u
ZSAoc28sIHN0b3JlTmV3ZXN0Q2FjaGUoKSBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlaGFuZCB3
aGVuIHVwZGF0aW5nKS4KQEAgLTgxLDcgKzgxLDEyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBleGVj
dXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRlbWVudCYpOwogICAgIGJvb2wgZXhlY3V0ZVNRTENvbW1h
bmQoY29uc3QgU3RyaW5nJik7CiAgICAgCisgICAgYm9vbCBsYXN0RXhlY3V0aW9uRmFpbGVkRHVl
TWF4U2l6ZVJlYWNoZWQoKTsKKyAgICBib29sIGV2aWN0TFJVQXBwbGljYXRpb25DYWNoZShpbnQ2
NF90LCBpbnQ2NF90KTsKKyAgICB2b2lkIHVwZGF0ZUNhY2hlVGltZXN0YW1wKGludDY0X3QpOwor
CiAgICAgU3RyaW5nIG1fY2FjaGVEaXJlY3Rvcnk7CisgICAgU3RyaW5nIG1fY2FjaGVGaWxlOwog
CiAgICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKIApJbmRleDogV2ViQ29yZS9wYWdlL0No
cm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAko
cmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMiw2ICsxMzIsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlTmFtZSkgPSAwOwogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgbWF4aW11bSBzaXplIChpbiBieXRlcykgb2YgdGhl
IGFwcGxpY2F0aW9uIGNhY2hlcyBmaWxlLgorICAgICAgICB2aXJ0dWFsIGludDY0X3QgbWF4QXBw
Q2FjaGVTaXplKCkgPSAwOworI2VuZGlmCisKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpOwogI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA0
MjAyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUxLDYgKzE1MSwxOCBAQCBpbnQgU1FMaXRlRGF0YWJhc2U6OnBhZ2VTaXpl
KCkKICAgICByZXR1cm4gbV9wYWdlU2l6ZTsKIH0KIAoraW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6
ZnJlZVNwYWNlU2l6ZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXV0aG9yaXplckxv
Y2spOworICAgIGVuYWJsZUF1dGhvcml6ZXIoZmFsc2UpOworICAgIC8vIE5vdGU6IGZyZWVsaXN0
X2NvdW50IHdhcyBhZGRlZCBpbiBTUUxpdGUgMy40LjEuCisgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudCgqdGhpcywgIlBSQUdNQSBmcmVlbGlzdF9jb3VudCIpOworICAgIGludDY0X3Qgc2l6
ZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKSAqIHBhZ2VTaXplKCk7CisKKyAgICBlbmFi
bGVBdXRob3JpemVyKHRydWUpOworICAgIHJldHVybiBzaXplOworfQorCiB2b2lkIFNRTGl0ZURh
dGFiYXNlOjpzZXRTeW5jaHJvbm91cyhTeW5jaHJvbm91c1ByYWdtYSBzeW5jKQogewogICAgIGV4
ZWN1dGVDb21tYW5kKFN0cmluZzo6Zm9ybWF0KCJQUkFHTUEgc3luY2hyb25vdXMgPSAlaSIsIHN5
bmMpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAkocmV2aXNpb24g
NDIwMjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Myw2ICs4Myw5IEBAIHB1YmxpYzoKICAgICBpbnQ2NF90IG1heGltdW1TaXpl
KCk7CiAgICAgdm9pZCBzZXRNYXhpbXVtU2l6ZShpbnQ2NF90KTsKICAgICAKKyAgICAvLyBHZXRz
IHRoZSBudW1iZXIgb2YgdW51c2VkIGJ5dGVzIGluIHRoZSBkYXRhYmFzZSBmaWxlLgorICAgIGlu
dDY0X3QgZnJlZVNwYWNlU2l6ZSgpOworCiAgICAgLy8gVGhlIFNRTGl0ZSBTWU5DSFJPTk9VUyBw
cmFnbWEgY2FuIGJlIGVpdGhlciBGVUxMLCBOT1JNQUwsIG9yIE9GRgogICAgIC8vIEZVTEwgLSBB
bnkgd3JpdGluZyBjYWxscyB0byB0aGUgREIgYmxvY2sgdW50aWwgdGhlIGRhdGEgaXMgYWN0dWFs
bHkgb24gdGhlIGRpc2sgc3VyZmFjZQogICAgIC8vIE5PUk1BTCAtIFNRTGl0ZSBwYXVzZXMgYXQg
c29tZSBjcml0aWNhbCBtb21lbnRzIHdoZW4gd3JpdGluZywgYnV0IG11Y2ggbGVzcyB0aGFuIEZV
TEwKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsv
Q2hhbmdlTG9nCShyZXZpc2lvbiA0MjkzMCkKKysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDQtMjggIEFuZHJlaSBQb3Blc2N1ICA8
YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisJTGltaXRzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIEFwcGxpY2F0aW9uIENhY2hlIGFu
ZAorCWV4cGlyZXMgb2xkIGNhY2hlcyBpbiBMUlUgZmFzaGlvbiB3aGVuIHRoZSBtYXhpbXVtCisJ
c2l6ZSBpcyByZWFjaGVkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjptYXhBcHBDYWNoZVNpemUp
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oOgorCiAyMDA5LTA0
LTI4ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
OiBjb21taXR0ZWQgYSBmZXcgYml0cyBieSBtaXN0YWtlLCByZW1vdmUgdGhlbS4KSW5kZXg6IFdl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHJldmlzaW9u
IDQyMDI2KQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NTMsNCArNDUzLDEzIEBAIHZvaWQgQ2hyb21lQ2xpZW50Ojpy
dW5PcGVuUGFuZWwoRnJhbWUqLCAKICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKIH0K
IAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCitpbnQ2NF90IENocm9tZUNs
aWVudDo6bWF4QXBwQ2FjaGVTaXplKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgLy8g
RklYTUU6IGltcGxlbWVudCB0aGlzIHByb3Blcmx5LgorICAgcmV0dXJuIDUgKiAxMDI0ICogMTAy
NDsKK30KKyNlbmRpZgorCiB9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmgJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMywxMCBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlk
Q2hhbmdlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKSB7IH0KIAorI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCisgICAgICAgIHZpcnR1YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUo
KTsKKyNlbmRpZgorCiAgICAgcHJpdmF0ZToKICAgICAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJW
aWV3OwogICAgICAgICBXZWJDb3JlOjpLVVJMIG1faG92ZXJlZExpbmtVUkw7CkluZGV4OiBXZWJL
aXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2
aXNpb24gNDI5MzApCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE1IEBACisyMDA5LTA0LTI4ICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCUxpbWl0cyB0
aGUgbWF4aW11bSBzaXplIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBhbmQKKwlleHBpcmVzIG9s
ZCBjYWNoZXMgaW4gTFJVIGZhc2hpb24gd2hlbiB0aGUgbWF4aW11bQorCXNpemUgaXMgcmVhY2hl
ZC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9t
ZUNsaWVudDo6bWF4QXBwQ2FjaGVTaXplKToKKwogMjAwOS0wNC0yNyAgRG91Z2xhcyBSLiBEYXZp
ZHNvbiAgPGRkYXZpZHNvQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgdGhlIHZhcmlvdXMgc3dp
dGNoZXMgYW5kIGNvbnRleHQgbWVudSBpdGVtcyBuZWVkZWQgZm9yCkluZGV4OiBXZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDQyMDI2KQorKysg
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTQyLDYgKzE0MiwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVz
dEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6
R2VvbG9jYXRpb24qKTsKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisg
ICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpOworI2VuZGlmCisKIHByaXZhdGU6
CiAgICAgV2ViVmlldyAqbV93ZWJWaWV3OwogfTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02
NzksNiArNjc5LDE0IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZXF1ZXN0R2VvbG9jYXRpb24K
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCisjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKK2ludDY0X3QgV2ViQ2hyb21lQ2xpZW50OjptYXhBcHBDYWNoZVNp
emUoKQoreworICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIHByb3Blcmx5LgorICAgcmV0dXJu
IDUgKiAxMDI0ICogMTAyNDsKK30KKyNlbmRpZgorCiBAaW1wbGVtZW50YXRpb24gV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXIKIAogLSAoaWQpaW5pdFdpdGhDaG9vc2VyOihQYXNzUmVmUHRyPEZp
bGVDaG9vc2VyPiljaG9vc2VyCkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDQyOTMwKQorKysgV2ViS2l0L3F0L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA5LTA0LTI4ICBBbmRy
ZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworCUxpbWl0cyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBBcHBsaWNh
dGlvbiBDYWNoZSBhbmQKKwlleHBpcmVzIG9sZCBjYWNoZXMgaW4gTFJVIGZhc2hpb24gd2hlbiB0
aGUgbWF4aW11bQorCXNpemUgaXMgcmVhY2hlZC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0Ojpt
YXhBcHBDYWNoZVNpemUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0
Lmg6CisKIDIwMDktMDQtMjggIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw7guCkluZGV4OiBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDQyMDI2
KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDI5LDQgKzQyOSwxMyBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpydW5PcGVu
UGFuZWwoRnJhbWUqCiAgICAgfQogfQogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykKK2ludDY0X3QgQ2hyb21lQ2xpZW50UXQ6Om1heEFwcENhY2hlU2l6ZSgpCit7CisgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIHByb3Blcmx5Lgor
ICAgcmV0dXJuIDUgKiAxMDI0ICogMTAyNDsKK30KKyNlbmRpZgorCiB9CkluZGV4OiBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkocmV2aXNpb24gNDIwMjYpCisrKyBX
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTIwLDYgKzEyMCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBOb2RlKikgeyB9CiAKKyNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICB2aXJ0dWFsIGludDY0X3QgbWF4QXBw
Q2FjaGVTaXplKCk7CisjZW5kaWYKKwogICAgICAgICBRV2ViUGFnZSogbV93ZWJQYWdlOwogICAg
ICAgICBXZWJDb3JlOjpLVVJMIGxhc3RIb3ZlclVSTDsKICAgICAgICAgV2ViQ29yZTo6U3RyaW5n
IGxhc3RIb3ZlclRpdGxlOwpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDQyOTMwKQorKysgV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0wNC0yOCAgQW5k
cmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKwlMaW1pdHMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgQXBwbGlj
YXRpb24gQ2FjaGUgYW5kCisJZXhwaXJlcyBvbGQgY2FjaGVzIGluIExSVSBmYXNoaW9uIHdoZW4g
dGhlIG1heGltdW0KKwlzaXplIGlzIHJlYWNoZWQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjptYXhBcHBD
YWNoZVNpemUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgor
CiAyMDA5LTA0LTIyICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUuY29tPgogCiAgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81MTE1Mjk4PiBEb24ndCBnZXQgZXJyb3IgbXNnIHdoZW4gZG93bmxvYWQg
aXMgaW50ZXJydXB0ZWQgYW5kIGNhbm5vdCByZXN1bWUgZHVlIHRvIHNlcnZlciB1bmF2YWlsYWJp
bGl0eQpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Miw2ICs2OTIsMTQgQEAgdm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbChGcmFtZQogICAgIC8vIEZJWE1FOiBTaG93IHNv
bWUgc29ydCBvZiBlcnJvciBpZiB0b28gbWFueSBmaWxlcyBhcmUgc2VsZWN0ZWQgYW5kIHRoZSBi
dWZmZXIgaXMgdG9vIHNtYWxsLiAgRm9yIG5vdywgdGhpcyB3aWxsIGZhaWwgc2lsZW50bHkuCiB9
CiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQoraW50NjRfdCBXZWJDaHJv
bWVDbGllbnQ6Om1heEFwcENhY2hlU2l6ZSgpCit7CisgICAvLyBGSVhNRTogaW1wbGVtZW50IHRo
aXMgcHJvcGVybHkuCisgICByZXR1cm4gNSAqIDEwMjQgKiAxMDI0OworfQorI2VuZGlmCisKIENP
TVB0cjxJV2ViVUlEZWxlZ2F0ZT4gV2ViQ2hyb21lQ2xpZW50Ojp1aURlbGVnYXRlKCkKIHsKICAg
ICBDT01QdHI8SVdlYlVJRGVsZWdhdGU+IGRlbGVnYXRlOwpJbmRleDogV2ViS2l0L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYktp
dC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyMCw2ICsxMjAsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGZvcm1TdGF0ZURp
ZENoYW5nZShjb25zdCBXZWJDb3JlOjpOb2RlKikgeyB9CiAKKyNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQorICAgIHZpcnR1YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKTsK
KyNlbmRpZgorCiBwcml2YXRlOgogICAgIENPTVB0cjxJV2ViVUlEZWxlZ2F0ZT4gdWlEZWxlZ2F0
ZSgpOwogICAgIENPTVB0cjxJV2ViVUlEZWxlZ2F0ZTI+IHVpRGVsZWdhdGUyKCk7CkluZGV4OiBX
ZWJLaXQvd3gvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDQyOTMwKQorKysgV2ViS2l0L3d4L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE1IEBACisyMDA5LTA0LTI4ICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCUxpbWl0cyB0
aGUgbWF4aW11bSBzaXplIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBhbmQKKwlleHBpcmVzIG9s
ZCBjYWNoZXMgaW4gTFJVIGZhc2hpb24gd2hlbiB0aGUgbWF4aW11bQorCXNpemUgaXMgcmVhY2hl
ZC4KKworICAgICAgICAqIFdlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50V3g6Om1heEFwcENhY2hlU2l6ZSk6CisgICAgICAgICog
V2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5oOgorCiAyMDA5LTA0LTI0ICBLZXZpbiBPbGxp
dmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIHd4IGJ1aWxkIGZpeC4g
U3dpdGNoaW5nIEpTQ29yZSBmcm9tIGEgc3RhdGljIGxpYiB0byBhIGR5bmFtaWMgbGliCkluZGV4
OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3BwCShyZXZpc2lvbiA0
MjAyNikKKysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYzLDQgKzM2MywxNCBAQCB2b2lkIENocm9tZUNsaWVudFd4OjpydW5P
cGVuUGFuZWwoRnJhbWUqCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAorI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCitpbnQ2NF90IENocm9tZUNsaWVudFd4OjptYXhBcHBD
YWNoZVNpemUoKQoreworICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQgdGhpcyBwcm9wZXJseS4KKyAgIHJldHVybiA1ICogMTAyNCAqIDEwMjQ7CiB9CisjZW5kaWYK
KworfQorCkluZGV4OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmgJKHJl
dmlzaW9uIDQyMDI2KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3gu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUqKSB7IH0KIAorI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENh
Y2hlU2l6ZSgpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgd3hXZWJWaWV3KiBtX3dlYlZpZXc7
CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30016</attachid>
            <date>2009-05-05 04:09:56 -0700</date>
            <delta_ts>2009-06-17 07:37:42 -0700</delta_ts>
            <desc>29909: New proposal to limit the maximum size of the application cache (take 5)</desc>
            <filename>appcache.patch</filename>
            <type>text/plain</type>
            <size>35536</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjkzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDktMDQtMjggIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IExpbWl0cyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBhbmQKKyAg
ICAgICAgZXhwaXJlcyBvbGQgY2FjaGVzIGluIExSVSBmYXNoaW9uIHdoZW4gdGhlIG1heGltdW0K
KyAgICAgICAgc2l6ZSBpcyByZWFjaGVkLgorCQorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGU6
OkFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZTo6
YWRkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZTo6cmVtb3Zl
UmVzb3VyY2UpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmg6
CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlOjpzaXplKToKKyAgICAgICAgKiBs
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2hlY2tJZkxvYWRJc0NvbXBsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6bWF4QXBwQ2FjaGVTaXplKToKKyAg
ICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmg6CisgICAgICAg
ICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OkFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OnNpemUp
OgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaDoK
KyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRDYWNoZUdyb3Vw
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjYWNoZUdyb3Vw
Rm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpvcGVu
RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5l
d2VzdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpz
dG9yZUNvcHlPZkNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpsYXN0RXhlY3V0aW9uRmFpbGVkRHVlTWF4U2l6ZVJlYWNoZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV2aWN0TFJVQXBwbGljYXRpb25DYWNoZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dXBkYXRlQ2FjaGVU
aW1lc3RhbXApOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogcGxhdGZv
cm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFi
YXNlOjpmcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjpj
dXJyZW50U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmg6CisK
IDIwMDktMDQtMjggIEpvaG4gU3VsbGl2YW4gIDxzdWxsaXZhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzY4MjAyMjE+IFJFR1JFU1NJT046IDItYnl0ZSBjaGFyYWN0ZXIg
bmFtZXMgb2YgaW1hZ2VzIGFyZSBkaXNwbGF5ZWQgYXMgJS1lbmNvZGVkIEFTQ0lJCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9FbXB0
eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSwxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNob29z
ZXI+KSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9k
ZSopIHsgfQorCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICB2aXJ0
dWFsIGludDY0X3QgbWF4QXBwQ2FjaGVTaXplKCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCiB9Owog
CiBjbGFzcyBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50IDogcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50
IHsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3Bw
CShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIEFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGUoKQogICAgIDogbV9ncm91cCgwKQogICAgICwgbV9tYW5pZmVz
dCgwKQogICAgICwgbV9zdG9yYWdlSUQoMCkKKyAgICAsIG1fc2l6ZSgwKQogewogfQogCkBAIC04
NCw5ICs4NSwxMyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmFkZFJlc291cmNlKFBhc3NSCiAg
ICAgICAgIEFTU0VSVChyZXNvdXJjZS0+dHlwZSgpICYgKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZTo6RHluYW1pYyB8IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6TWFzdGVyKSk7CiAgICAgICAg
IAogICAgICAgICAvLyBBZGQgdGhlIHJlc291cmNlIHRvIHRoZSBzdG9yYWdlLgotICAgICAgICBj
YWNoZVN0b3JhZ2UoKS5zdG9yZShyZXNvdXJjZS5nZXQoKSwgdGhpcyk7CisgICAgICAgIEFTU0VS
VChtX2dyb3VwKTsKKyAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmUocmVzb3VyY2UuZ2V0KCks
IHRoaXMsIG1fZ3JvdXAtPm1heEFwcENhY2hlU2l6ZSgpKTsKICAgICB9Ci0gICAgCisKKyAgICBt
X3NpemUgKz0gcmVzb3VyY2UtPnNpemUoKTsKKworICAgIC8vIEZpbmFsbHkgYWRkIHRoZSByZXNv
dXJjZSB0byBvdXIgbWFwLgogICAgIG1fcmVzb3VyY2VzLnNldCh1cmwsIHJlc291cmNlKTsKIH0K
IApAQCAtOTksNiArMTA0LDggQEAgdW5zaWduZWQgQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlUmVz
b3VyYwogICAgIC8vIFRoZSByZXNvdXJjZSBleGlzdHMsIGdldCBpdHMgdHlwZSBzbyB3ZSBjYW4g
cmV0dXJuIGl0LgogICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+c2Vjb25kLT50eXBlKCk7CiAKKyAg
ICBtX3NpemUgLT0gaXQtPnNlY29uZC0+c2l6ZSgpOworCiAgICAgbV9yZXNvdXJjZXMucmVtb3Zl
KGl0KTsKICAgICAKICAgICByZXR1cm4gdHlwZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlLmgJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5
Miw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgYm9vbCByZXF1ZXN0SXNIVFRQT3JIVFRQ
U0dldChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAorICAgIGludDY0X3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQorCiBwcml2YXRlOgogICAgIEFwcGxpY2F0aW9uQ2FjaGUoKTsK
ICAgICAKQEAgLTEwNiw2ICsxMDgsOSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxzdGQ6OnBhaXI8
S1VSTCwgYm9vbD4gPiBtX3BlbmRpbmdEeW5hbWljRW50cnlBY3Rpb25zOwogCiAgICAgdW5zaWdu
ZWQgbV9zdG9yYWdlSUQ7CisKKyAgICAvLyBUaGUgdG90YWwgc2l6ZSBvZiB0aGUgcmVzb3VyY2Vz
IGJlbG9uZ2luZyB0byB0aGlzIEFwcGxpY2F0aW9uIENhY2hlIGluc3RhbmNlLgorICAgIGludDY0
X3QgbV9zaXplOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCShyZXZpc2lv
biA0MjAyNikKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcHBsaWNh
dGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgiCiAjaW5j
bHVkZSAiQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQu
aCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRPTUFwcGxpY2F0aW9u
Q2FjaGUuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKQEAgLTcxMCw3ICs3MTEsNyBAQCB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2hlY2tJZkxvYWRJCiAKICAgICAgICAgLy8gVGhlIHN0
b3JhZ2UgY291bGQgaGF2ZSBiZWVuIG1hbnVhbGx5IGVtcHRpZWQgYnkgdGhlIHVzZXIuCiAgICAg
ICAgIGlmICghbV9zdG9yYWdlSUQpCi0gICAgICAgICAgICBjYWNoZVN0b3JhZ2UoKS5zdG9yZU5l
d2VzdENhY2hlKHRoaXMpOworICAgICAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmVOZXdlc3RD
YWNoZSh0aGlzLCBtYXhBcHBDYWNoZVNpemUoKSk7CiAKICAgICAgICAgcG9zdExpc3RlbmVyVGFz
aygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbE5vVXBkYXRlTGlzdGVuZXIsIG1fYXNzb2NpYXRl
ZERvY3VtZW50TG9hZGVycyk7CiAgICAgICAgIGJyZWFrOwpAQCAtNzMyLDEyICs3MzMsMTYgQEAg
dm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSQogICAgICAgICBSZWZQdHI8
QXBwbGljYXRpb25DYWNoZT4gb2xkTmV3ZXN0Q2FjaGUgPSAobV9uZXdlc3RDYWNoZSA9PSBtX2Nh
Y2hlQmVpbmdVcGRhdGVkKSA/IDAgOiBtX25ld2VzdENhY2hlOwogCiAgICAgICAgIHNldE5ld2Vz
dENhY2hlKG1fY2FjaGVCZWluZ1VwZGF0ZWQucmVsZWFzZSgpKTsKLSAgICAgICAgY2FjaGVTdG9y
YWdlKCkuc3RvcmVOZXdlc3RDYWNoZSh0aGlzKTsKKyAgICAgICAgaWYgKGNhY2hlU3RvcmFnZSgp
LnN0b3JlTmV3ZXN0Q2FjaGUodGhpcywgbWF4QXBwQ2FjaGVTaXplKCkpKSB7CisgICAgICAgICAg
ICAvLyBOZXcgY2FjaGUgc3RvcmVkLCBub3cgcmVtb3ZlIHRoZSBvbGQgY2FjaGUuCisgICAgICAg
ICAgICBpZiAob2xkTmV3ZXN0Q2FjaGUpCisgICAgICAgICAgICAgICAgY2FjaGVTdG9yYWdlKCku
cmVtb3ZlKG9sZE5ld2VzdENhY2hlLmdldCgpKTsKIAotICAgICAgICBpZiAob2xkTmV3ZXN0Q2Fj
aGUpCi0gICAgICAgICAgICBjYWNoZVN0b3JhZ2UoKS5yZW1vdmUob2xkTmV3ZXN0Q2FjaGUuZ2V0
KCkpOwotCi0gICAgICAgIHBvc3RMaXN0ZW5lclRhc2soaXNVcGdyYWRlQXR0ZW1wdCA/ICZET01B
cHBsaWNhdGlvbkNhY2hlOjpjYWxsVXBkYXRlUmVhZHlMaXN0ZW5lciA6ICZET01BcHBsaWNhdGlv
bkNhY2hlOjpjYWxsQ2FjaGVkTGlzdGVuZXIsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7
CisgICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKGlzVXBncmFkZUF0dGVtcHQgPyAmRE9NQXBw
bGljYXRpb25DYWNoZTo6Y2FsbFVwZGF0ZVJlYWR5TGlzdGVuZXIgOiAmRE9NQXBwbGljYXRpb25D
YWNoZTo6Y2FsbENhY2hlZExpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UgZmFpbGVkIHRvIHN0b3JlIHRoZSBu
ZXcgY2FjaGUuIFJlcG9ydCBhbiBlcnJvci4KKyAgICAgICAgICAgIHBvc3RMaXN0ZW5lclRhc2so
JkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvckxpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1
bWVudExvYWRlcnMpOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CkBA
IC04ODEsNiArODg2LDExIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjbGVhclN0b3Jh
Z2UKICAgICAgICAgKCppdCktPmNsZWFyU3RvcmFnZUlEKCk7CiB9CiAgICAgCitpbnQ2NF90IEFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6bWF4QXBwQ2FjaGVTaXplKCkKK3sKKyAgICBBU1NFUlQobV9m
cmFtZSk7CisgICAgcmV0dXJuIG1fZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5t
YXhBcHBDYWNoZVNpemUoKTsKK30KIAogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkod29ya2luZyBjb3B5
KQpAQCAtOTAsNiArOTAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzQ29weSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNDb3B5OyB9CiAKKyAgICBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpOworCiBw
cml2YXRlOgogICAgIHR5cGVkZWYgdm9pZCAoRE9NQXBwbGljYXRpb25DYWNoZTo6Kkxpc3RlbmVy
RnVuY3Rpb24pKCk7CiAgICAgc3RhdGljIHZvaWQgcG9zdExpc3RlbmVyVGFzayhMaXN0ZW5lckZ1
bmN0aW9uLCBjb25zdCBIYXNoU2V0PERvY3VtZW50TG9hZGVyKj4mKTsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcAko
cmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZTo6QXBwbGljYXRpb25DYWMKICAgICA6IFN1YnN0aXR1dGVSZXNvdXJj
ZSh1cmwsIHJlc3BvbnNlLCBkYXRhKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3N0b3Jh
Z2VJRCgwKQorICAgICwgbV9zaXplKDApCiB7CiB9CiAKQEAgLTQ0LDYgKzQ1LDI5IEBAIHZvaWQg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjphZGRUeXBlKHUKICAgICBtX3R5cGUgfD0gdHlwZTsg
CiB9CiAKK2ludDY0X3QgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkKK3sKKyAgICBp
ZiAoIW1fc2l6ZSkgeworICAgICAgICBpZiAoZGF0YSgpKQorICAgICAgICAgICAgbV9zaXplICs9
IGRhdGEoKS0+c2l6ZSgpOworICAgIAorICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSByZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICAgICAg
Zm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlKCkuaHR0cEhl
YWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgbV9z
aXplICs9IChpdC0+Zmlyc3QubGVuZ3RoKCkgKyBpdC0+c2Vjb25kLmxlbmd0aCgpICsgMikgKiBz
aXplb2YoVUNoYXIpOworICAgICAgICB9CisgICAgCisgICAgICAgIG1fc2l6ZSArPSB1cmwoKS5z
dHJpbmcoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIG1fc2l6ZSArPSBzaXpl
b2YoaW50KTsgLy8gcmVzcG9uc2UoKS5tX2h0dHBTdGF0dXNDb2RlCisgICAgICAgIG1fc2l6ZSAr
PSByZXNwb25zZSgpLnVybCgpLnN0cmluZygpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAg
ICAgICAgbV9zaXplICs9IHNpemVvZih1bnNpZ25lZCk7IC8vIGRhdGFJZAorICAgICAgICBtX3Np
emUgKz0gcmVzcG9uc2UoKS5taW1lVHlwZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAg
ICAgICAgbV9zaXplICs9IHJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpLmxlbmd0aCgpICog
c2l6ZW9mKFVDaGFyKTsKKyAKKyAgICB9CisKKyAgICByZXR1cm4gbV9zaXplOworfQorCiAjaWZu
ZGVmIE5ERUJVRwogdm9pZCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmR1bXBUeXBlKHVuc2ln
bmVkIHR5cGUpCiB7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2UuaAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRl
ci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNiArNTUsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgc3RvcmFnZUlEKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdG9yYWdlSUQ7IH0KICAgICB2b2lkIGNsZWFyU3RvcmFnZUlEKCkgeyBtX3N0b3Jh
Z2VJRCA9IDA7IH0KIAorICAgIGludDY0X3Qgc2l6ZSgpOworCiAjaWZuZGVmIE5ERUJVRwogICAg
IHN0YXRpYyB2b2lkIGR1bXBUeXBlKHVuc2lnbmVkIHR5cGUpOwogI2VuZGlmCkBAIC02NCw2ICs2
Niw3IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX3R5cGU7CiAgICAgdW5zaWduZWQgbV9z
dG9yYWdlSUQ7CisgICAgaW50NjRfdCBtX3NpemU7CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDEzICszMiwxNiBAQAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgogI2luY2x1
ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNp
bmNsdWRlICJDdXJyZW50VGltZS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRl
ICJLVVJMLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMaXRl
VHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDxzcWxpdGUzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAorCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04Myw2ICs4Niw5IEBAIEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVMKICAgICBncm91cC0+c2V0U3RvcmFn
ZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkpKTsK
ICAgICBncm91cC0+c2V0TmV3ZXN0Q2FjaGUoY2FjaGUucmVsZWFzZSgpKTsKIAorICAgIC8vIFdl
IGFyZSB1c2luZyB0aGUgY2FjaGUuIFVwZGF0ZSBpdHMgdGltZXN0YW1wLgorICAgIHVwZGF0ZUNh
Y2hlVGltZXN0YW1wKG5ld2VzdENhY2hlU3RvcmFnZUlEKTsKKwogICAgIHJldHVybiBncm91cDsK
IH0gICAgCiAKQEAgLTE4NSw2ICsxOTEsOSBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxp
Y2F0aW9uQ2FjaGVTCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgVVJMLgogICAgICAgICB1bnNpZ25l
ZCBuZXdlc3RDYWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1
bW5JbnQ2NCgyKSk7CiAgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBjYWNoZSA9IGxv
YWRDYWNoZShuZXdlc3RDYWNoZUlEKTsKKyAgICAgICAgLy8gRm9yIHZhcmlvdXMgcmVhc29ucywg
bG9hZENhY2hlIGNhbiByZXR1cm4gMDsKKyAgICAgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2Ug
PSBjYWNoZS0+cmVzb3VyY2VGb3JVUkwodXJsKTsKICAgICAgICAgaWYgKCFyZXNvdXJjZSkKQEAg
LTE5OSw2ICsyMDgsOSBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVT
CiAgICAgICAgIAogICAgICAgICBtX2NhY2hlc0luTWVtb3J5LnNldChncm91cC0+bWFuaWZlc3RV
UkwoKSwgZ3JvdXApOwogICAgICAgICAKKyAgICAgICAgLy8gV2UgYXJlIHVzaW5nIHRoZSBjYWNo
ZS4gVXBkYXRlIGl0cyB0aW1lc3RhbXAuCisgICAgICAgIHVwZGF0ZUNhY2hlVGltZXN0YW1wKG5l
d2VzdENhY2hlSUQpOworCiAgICAgICAgIHJldHVybiBncm91cDsKICAgICB9CiAKQEAgLTMyOCw3
ICszNDAsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGNvbnN0IGludCBzY2hlbWFWZXJzaW9uID0gMzsK
K3N0YXRpYyBjb25zdCBpbnQgc2NoZW1hVmVyc2lvbiA9IDQ7CiAgICAgCiB2b2lkIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKQEAgLTM2MywxMiArMzc1
LDEyIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmEKICAgICBpZiAo
bV9jYWNoZURpcmVjdG9yeS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFN0
cmluZyBhcHBsaWNhdGlvbkNhY2hlUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2Nh
Y2hlRGlyZWN0b3J5LCAiQXBwbGljYXRpb25DYWNoZS5kYiIpOwotICAgIGlmICghY3JlYXRlSWZE
b2VzTm90RXhpc3QgJiYgIWZpbGVFeGlzdHMoYXBwbGljYXRpb25DYWNoZVBhdGgpKQorICAgIG1f
Y2FjaGVGaWxlID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fY2FjaGVEaXJlY3RvcnksICJB
cHBsaWNhdGlvbkNhY2hlLmRiIik7CisgICAgaWYgKCFjcmVhdGVJZkRvZXNOb3RFeGlzdCAmJiAh
ZmlsZUV4aXN0cyhtX2NhY2hlRmlsZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1ha2VBbGxE
aXJlY3RvcmllcyhtX2NhY2hlRGlyZWN0b3J5KTsKLSAgICBtX2RhdGFiYXNlLm9wZW4oYXBwbGlj
YXRpb25DYWNoZVBhdGgpOworICAgIG1fZGF0YWJhc2Uub3BlbihtX2NhY2hlRmlsZSk7CiAgICAg
CiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAgICByZXR1cm47CkBAIC0zNzgs
NyArMzkwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYQogICAg
IC8vIENyZWF0ZSB0YWJsZXMKICAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElG
IE5PVCBFWElTVFMgQ2FjaGVHcm91cHMgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JF
TUVOVCwgIgogICAgICAgICAgICAgICAgICAgICAgICJtYW5pZmVzdEhvc3RIYXNoIElOVEVHRVIg
Tk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgbWFuaWZlc3RVUkwgVEVYVCBVTklRVUUgT04gQ09O
RkxJQ1QgRkFJTCwgbmV3ZXN0Q2FjaGUgSU5URUdFUikiKTsKLSAgICBleGVjdXRlU1FMQ29tbWFu
ZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQ2FjaGVzIChpZCBJTlRFR0VSIFBSSU1BUlkg
S0VZIEFVVE9JTkNSRU1FTlQsIGNhY2hlR3JvdXAgSU5URUdFUikiKTsKKyAgICBleGVjdXRlU1FM
Q29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQ2FjaGVzIChpZCBJTlRFR0VSIFBS
SU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIGNhY2hlR3JvdXAgSU5URUdFUiwgc2l6ZSBJTlRFR0VS
LCB0aW1lc3RhbXAgSU5URUdFUikiKTsKICAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRB
QkxFIElGIE5PVCBFWElTVFMgQ2FjaGVXaGl0ZWxpc3RVUkxzICh1cmwgVEVYVCBOT1QgTlVMTCBP
TiBDT05GTElDVCBGQUlMLCBjYWNoZSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwp
Iik7CiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEZh
bGxiYWNrVVJMcyAobmFtZXNwYWNlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgZmFs
bGJhY2tVUkwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCAiCiAgICAgICAgICAgICAg
ICAgICAgICAgImNhY2hlIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKQEAg
LTQwNiw2ICs0MTgsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpvcGVuRGF0YWJh
CiAgICAgICAgICAgICAgICAgICAgICAgIiBGT1IgRUFDSCBST1cgQkVHSU4iCiAgICAgICAgICAg
ICAgICAgICAgICAgIiAgREVMRVRFIEZST00gQ2FjaGVSZXNvdXJjZURhdGEgV0hFUkUgaWQgPSBP
TEQuZGF0YTsiCiAgICAgICAgICAgICAgICAgICAgICAgIiBFTkQiKTsKKworICAgIC8vIFRvIGJl
IGFibGUgdG8gcXVpY2tseSBldmljdCBjYWNoZXMgaW4gTFJVIG9yZGVyLCB3ZSBpbmRleCB0aGUg
Q2FjaGVzIHRhYmxlIG9uIHRoZSB0aW1lc3RhbXAgYXR0cmlidXRlLgorICAgIGV4ZWN1dGVTUUxD
b21tYW5kKCJDUkVBVEUgSU5ERVggbHJ1SW5kZXggT04gQ2FjaGVzKHRpbWVzdGFtcCk7Iik7CiB9
CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTdGF0ZW1lbnQoU1FMaXRl
U3RhdGVtZW50JiBzdGF0ZW1lbnQpCkBAIC00NDEsMTEgKzQ1NiwxMyBAQCBib29sIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsCiAgICAgQVNTRVJUKGNhY2hlLT5zdG9yYWdlSUQo
KSA9PSAwKTsKICAgICBBU1NFUlQoY2FjaGUtPmdyb3VwKCktPnN0b3JhZ2VJRCgpICE9IDApOwog
ICAgIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJ
TlRPIENhY2hlcyAoY2FjaGVHcm91cCkgVkFMVUVTICg/KSIpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlcyAoY2FjaGVHcm91cCwg
c2l6ZSwgdGltZXN0YW1wKSBWQUxVRVMgKD8sID8sID8pIik7CiAgICAgaWYgKHN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN0
YXRlbWVudC5iaW5kSW50NjQoMSwgY2FjaGUtPmdyb3VwKCktPnN0b3JhZ2VJRCgpKTsKKyAgICBz
dGF0ZW1lbnQuYmluZEludDY0KDIsIGNhY2hlLT5zaXplKCkpOworICAgIHN0YXRlbWVudC5iaW5k
SW50NjQoMywgY3VycmVudFRpbWUoKSk7CiAKICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3Rh
dGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTg1LDQzICs2MDIsMTAxIEBAIGJv
b2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlVXBkYXQKICAgICByZXR1cm4gZXhlY3V0
ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudCk7CiB9CiAKLXZvaWQgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0
aW9uQ2FjaGUqIGNhY2hlKQordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBw
bGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUs
IGludDY0X3QgbWF4QXBwQ2FjaGVTaXplKQogewogICAgIEFTU0VSVChjYWNoZS0+c3RvcmFnZUlE
KCkpOwogICAgIAogICAgIG9wZW5EYXRhYmFzZSh0cnVlKTsKICAKKyAgICBtX2RhdGFiYXNlLnNl
dE1heGltdW1TaXplKG1heEFwcENhY2hlU2l6ZSk7CiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gc3Rv
cmVSZXNvdXJjZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIHN0b3JlUmVzb3VyY2VUcmFu
c2FjdGlvbi5iZWdpbigpOwotICAgIAotICAgIGlmICghc3RvcmUocmVzb3VyY2UsIGNhY2hlLT5z
dG9yYWdlSUQoKSkpCisKKyAgICBpZiAoIXN0b3JlKHJlc291cmNlLCBjYWNoZS0+c3RvcmFnZUlE
KCkpKSB7CisgICAgICAgIGlmICghbGFzdEV4ZWN1dGlvbkZhaWxlZER1ZU1heFNpemVSZWFjaGVk
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIFRoZSBmYWlsdXJlIHdhcyBkdWUg
dG8gbWF4aW11bSBzaXplIGJlaW5nIHJlYWNoZWQuIFJvbGxiYWNrLgorICAgICAgICBzdG9yZVJl
c291cmNlVHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKKyAgICAgICAgLy8gQXR0ZW1wdCB0byBldmlj
dCBzb21lIG9sZCBjYWNoZXMuCisgICAgICAgIGlmICghZXZpY3RMUlVBcHBsaWNhdGlvbkNhY2hl
KHJlc291cmNlLT5zaXplKCksIG1heEFwcENhY2hlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIC8vIFRoZSBldmljdGlvbiB3YXMgc3VjY2Vzc2Z1bC4gUmV0cnkgc3RvcmluZyB0
aGUgcmVzb3VyY2UuCisgICAgICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5iZWdpbigpOwor
ICAgICAgICBpZiAoIXN0b3JlKHJlc291cmNlLCBjYWNoZS0+c3RvcmFnZUlEKCkpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEEgcmVzb3VyY2Ugd2FzIGFkZGVkIHRvIHRo
ZSBjYWNoZS4gVXBkYXRlIHRoZSB0b3RhbCBkYXRhIHNpemUgZm9yIHRoZSBjYWNoZS4KKyAgICBT
UUxpdGVTdGF0ZW1lbnQgc2l6ZVVwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIENh
Y2hlcyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyIpOworICAgIGlmIChzaXplVXBkYXRlU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuOwotICAgIAor
CisgICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMSwgcmVzb3VyY2UtPnNpemUoKSk7
CisgICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgp
KTsKKworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uLmNvbW1pdCgpOwog
fQogCi1ib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzdENhY2hlKEFwcGxp
Y2F0aW9uQ2FjaGVHcm91cCogZ3JvdXApCitib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpz
dG9yZU5ld2VzdENhY2hlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAsIGludDY0X3QgbWF4
QXBwQ2FjaGVTaXplKQogewogICAgIG9wZW5EYXRhYmFzZSh0cnVlKTsKICAgICAKKyAgICBtX2Rh
dGFiYXNlLnNldE1heGltdW1TaXplKG1heEFwcENhY2hlU2l6ZSk7CiAgICAgU1FMaXRlVHJhbnNh
Y3Rpb24gc3RvcmVDYWNoZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIAogICAgIHN0b3Jl
Q2FjaGVUcmFuc2FjdGlvbi5iZWdpbigpOwogICAgIAorICAgIC8vIFdlIHRyeSB0byBzdG9yZSB0
aGUgZ3JvdXAgYW5kIHRoZSBuZXdlc3QgY2FjaGUuIElmIHRoZSBkYXRhYmFzZQorICAgIC8vIHJl
cG9ydHMgdGhhdCB3ZSBoYXZlIGhpdCB0aGUgbWF4QXBwQ2FjaGVTaXplIGxpbWl0LCB3ZSBhdHRl
bXB0IHRvCisgICAgLy8gcmVtb3ZlIGVub3VnaCBlbnRyaWVzIChpbiBMUlUgb3JkZXIpIGZyb20g
dGhlIGNhY2hlIHNvIHRoYXQgdGhlIG5ld2VzdAorICAgIC8vIGNhY2hlIGZpdHMgaW4uIElmIHRo
ZSBuZXdlc3QgY2FjaGUgaXMgc3RpbGwgdG9vIGJpZywgd2UgYmFpbCBvdXQuCisKKyAgICAvLyBG
aXJzdCBkbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUuCisgICAgaWYg
KGdyb3VwLT5uZXdlc3RDYWNoZSgpLT5zaXplKCkgPj0gbWF4QXBwQ2FjaGVTaXplKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoIWdyb3VwLT5zdG9yYWdlSUQoKSkgewogICAgICAg
ICAvLyBTdG9yZSB0aGUgZ3JvdXAKLSAgICAgICAgaWYgKCFzdG9yZShncm91cCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghc3RvcmUoZ3JvdXApKSB7CisgICAgICAg
ICAgICBpZiAoIWxhc3RFeGVjdXRpb25GYWlsZWREdWVNYXhTaXplUmVhY2hlZCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIFRoZSBmYWlsdXJlIHdhcyBk
dWUgdG8gbWF4aW11bSBzaXplIGJlaW5nIHJlYWNoZWQuIFJvbGxiYWNrLgorICAgICAgICAgICAg
Z3JvdXAtPnNldFN0b3JhZ2VJRCgwKTsKKyAgICAgICAgICAgIHN0b3JlQ2FjaGVUcmFuc2FjdGlv
bi5yb2xsYmFjaygpOworICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBldmljdCBzb21lIG9sZCBj
YWNoZXMuCisgICAgICAgICAgICBpZiAoIWV2aWN0TFJVQXBwbGljYXRpb25DYWNoZShncm91cC0+
bmV3ZXN0Q2FjaGUoKS0+c2l6ZSgpLCBtYXhBcHBDYWNoZVNpemUpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIFRoZSBldmljdGlvbiB3YXMgc3VjY2Vzc2Z1
bC4gUmV0cnkgdG8gc3RvcmUgdGhlIGdyb3VwLgorICAgICAgICAgICAgc3RvcmVDYWNoZVRyYW5z
YWN0aW9uLmJlZ2luKCk7CisgICAgICAgICAgICBpZiAoIXN0b3JlKGdyb3VwKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBBU1NF
UlQoZ3JvdXAtPm5ld2VzdENhY2hlKCkpOwogICAgIEFTU0VSVCghZ3JvdXAtPmlzT2Jzb2xldGUo
KSk7CiAgICAgQVNTRVJUKCFncm91cC0+bmV3ZXN0Q2FjaGUoKS0+c3RvcmFnZUlEKCkpOwotICAg
IAorCiAgICAgLy8gU3RvcmUgdGhlIG5ld2VzdCBjYWNoZQotICAgIGlmICghc3RvcmUoZ3JvdXAt
Pm5ld2VzdENhY2hlKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisgICAgaWYgKCFz
dG9yZShncm91cC0+bmV3ZXN0Q2FjaGUoKSkpIHsKKyAgICAgICAgaWYgKCFsYXN0RXhlY3V0aW9u
RmFpbGVkRHVlTWF4U2l6ZVJlYWNoZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgLy8gVGhlIGZhaWx1cmUgd2FzIGR1ZSB0byBtYXhpbXVtIHNpemUgYmVpbmcgcmVhY2hl
ZC4gUm9sbGJhY2suCisgICAgICAgIGdyb3VwLT5zZXRTdG9yYWdlSUQoMCk7CisgICAgICAgIGdy
b3VwLT5uZXdlc3RDYWNoZSgpLT5zZXRTdG9yYWdlSUQoMCk7CisgICAgICAgIHN0b3JlQ2FjaGVU
cmFuc2FjdGlvbi5yb2xsYmFjaygpOworICAgICAgICAvLyBBdHRlbXB0IHRvIGV2aWN0IHNvbWUg
b2xkIGNhY2hlcy4KKyAgICAgICAgaWYgKCFldmljdExSVUFwcGxpY2F0aW9uQ2FjaGUoZ3JvdXAt
Pm5ld2VzdENhY2hlKCktPnNpemUoKSwgbWF4QXBwQ2FjaGVTaXplKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgLy8gVGhlIGV2aWN0aW9uIHdhcyBzdWNjZXNzZnVsLiBSZXRy
eSB0byBzdG9yZSB0aGUgZ3JvdXAgYW5kIHRoZSBjYWNoZS4KKyAgICAgICAgc3RvcmVDYWNoZVRy
YW5zYWN0aW9uLmJlZ2luKCk7CisgICAgICAgIGlmICghc3RvcmUoZ3JvdXApIHx8ICFzdG9yZShn
cm91cC0+bmV3ZXN0Q2FjaGUoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CiAgICAgLy8gVXBkYXRlIHRoZSBuZXdlc3QgY2FjaGUgaW4gdGhlIGdyb3VwLgogICAgIAogICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlVQREFURSBDYWNoZUdyb3Vw
cyBTRVQgbmV3ZXN0Q2FjaGU9PyBXSEVSRSBpZD0/Iik7CkBAIC04MjcsNyArOTAyLDExMyBAQCBi
b29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPCiAgICAgLy8gRW1wdHkgdGhl
IGNhY2hlIGluIGNhc2Ugc29tZXRoaW5nIHdhcyB0aGVyZSBiZWZvcmUuCiAgICAgY29weVN0b3Jh
Z2UuZW1wdHkoKTsKICAgICAKLSAgICByZXR1cm4gY29weVN0b3JhZ2Uuc3RvcmVOZXdlc3RDYWNo
ZShncm91cENvcHkuZ2V0KCkpOworICAgIHJldHVybiBjb3B5U3RvcmFnZS5zdG9yZU5ld2VzdENh
Y2hlKGdyb3VwQ29weS5nZXQoKSwgZ3JvdXBDb3B5LT5tYXhBcHBDYWNoZVNpemUoKSk7Cit9CisK
K2Jvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Omxhc3RFeGVjdXRpb25GYWlsZWREdWVNYXhT
aXplUmVhY2hlZCgpCit7CisgICAgcmV0dXJuIG1fZGF0YWJhc2UubGFzdEVycm9yKCkgPT0gU1FM
SVRFX0ZVTEw7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV2aWN0TFJVQXBw
bGljYXRpb25DYWNoZShpbnQ2NF90IGluY29taW5nU2l6ZSwgaW50NjRfdCBtYXhpbXVtQXBwQ2Fj
aGVTaXplKQoreworICAgIG9wZW5EYXRhYmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNl
LmlzT3BlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhl
IGFtb3VudCBvZiBzcGFjZSBuZWVkZWQgdG8gYmUgZnJlZWQuCisgICAgaW50NjRfdCBzaXplVG9G
cmVlID0gMDsKKyAgICAvLyBGaXJzdCBjaGVjayBpZiBtYXhpbXVtQXBwQ2FjaGVTaXplIGlzbid0
IHNtYWxsZXIgdGhhbiB0aGUgY3VycmVudCBkYXRhYmFzZSBzaXplLgorICAgIC8vIFRoaXMgY2Fu
IGhhcHBlbiBpZiB0aGUgdmFsdWUgaXMgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IChlLmcuIGJ5IHRo
ZSB1c2VyKS4KKyAgICBpbnQ2NF90IGN1cnJlbnRTaXplID0gMDsKKyAgICBpZiAoIWdldEZpbGVT
aXplKG1fY2FjaGVGaWxlLCBjdXJyZW50U2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobWF4aW11bUFwcENhY2hlU2l6ZSA8IGN1cnJlbnRTaXplKSB7CisgICAgICAgIC8vIENo
ZWNrIGlmIHRoZSBpbmNvbWluZ1NpemUgc3RpbGwgZml0cyBpbnNpZGUgbWF4aW11bUFwcENhY2hl
U2l6ZS4KKyAgICAgICAgLy8gSXQgbmVlZHMgdG8gYmUgc3RyaWN0bHkgc21hbGxlciB0byBmaXQg
c2luY2UgU1FMaXRlIGFkZHMgc29tZQorICAgICAgICAvLyBzcGFjZSBvdmVyaGVhZCBmb3Igc3Rv
cmluZyBtZXRhZGF0YS4gU2luY2Ugd2UgY2Fubm90IHRlbGwgaG93IGJpZworICAgICAgICAvLyB0
aGlzIG1ldGFkYXRhIGlzLCB3ZSBydW4gdGhlIHJpc2sgb2YgYmxvd2luZyB1cCB0aGUgZW50aXJl
IGNhY2hlIGFuZAorICAgICAgICAvLyBmaW5kaW5nIHRoYXQgdGhlIG5ldyBjYWNoZSBzdGlsbCBk
b2VzIG5vdCBmaXQgd2hlbiBpbmNvbWluZ1NpemUgfj0gbWF4aW11bUFwcENhY2hlU2l6ZQorICAg
ICAgICAvLyBidXQgbWV0YWRhdGFTaXplID4gKG1heGltdW1BcHBDYWNoZVNpemUgLSBpbmNvbWlu
Z1NpemUpLiBTaW5jZSB0aGlzCisgICAgICAgIC8vIGlzIGxpa2VseSBhIHJhcmUgY2FzZSwgd2Ug
Y2FuIGxpdmUgd2l0aCBpdC4KKyAgICAgICAgaWYgKGluY29taW5nU2l6ZSA8IG1heGltdW1BcHBD
YWNoZVNpemUpCisgICAgICAgICAgICBzaXplVG9GcmVlID0gaW5jb21pbmdTaXplOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIC8vIGluY29taW5nU2l6ZSBkb2Vzbid0IGZpdCwgYmFpbCBv
dXQuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBtYXhpbXVtQXBwQ2FjaGVTaXplIGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUg
Y3VycmVudCBkYXRhYmFzZSBzaXplLgorICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIGF2
YWlsYWJsZSBzcGFjZSBzaXplLiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgZnJlZQorICAgICAgICAv
LyBieXRlcyBpbiB0aGUgY3VycmVudCBkYXRhYmFzZSBmaWxlICsgdGhlIHNwYWNlIHdlIGFyZSBh
bGxvd2VkIHRvIGdyb3cKKyAgICAgICAgLy8gKHdoaWNoIGlzIGJvdW5kZWQgYnkgbWF4aW11bUFw
cENhY2hlU2l6ZSkuCisgICAgICAgIGludDY0X3QgdG90YWxBdmFpbGFibGVTaXplID0gKG1heGlt
dW1BcHBDYWNoZVNpemUgLSBjdXJyZW50U2l6ZSkgKyBtX2RhdGFiYXNlLmZyZWVTcGFjZVNpemUo
KTsKKyAgICAgICAgQVNTRVJUKHRvdGFsQXZhaWxhYmxlU2l6ZSk7CisgICAgICAgIC8vIENhbGN1
bGF0ZSB0aGUgc3BhY2Ugd2UgbmVlZCB0byBmcmVlIGluc2lkZSB0aGUgZGF0YWJhc2UgZmlsZS4K
KyAgICAgICAgc2l6ZVRvRnJlZSA9IGluY29taW5nU2l6ZSAtIHRvdGFsQXZhaWxhYmxlU2l6ZTsK
KyAgICB9CisKKyAgICBBU1NFUlQoc2l6ZVRvRnJlZSk7CisKKyAgICBpbnQ2NF90IGN1bW11bGF0
aXZlU2l6ZSA9IDA7CisgICAgVmVjdG9yPGludDY0X3Q+IGlkczsKKworICAgIC8vU3RhcnQgYSBu
ZXcgdHJhbnNhY3Rpb247CisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRh
YmFzZSk7CisgICAgLy8gRmluZCBvdXQgd2hhdCBjYWNoZXMgdG8gZGVsZXRlLgorICAgIHsKKyAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IHNlbGVjdFZpY3RpbXMobV9kYXRhYmFzZSwgIlNFTEVDVCBp
ZCwgc2l6ZSBGUk9NIENhY2hlcyBPUkRFUiBCWSB0aW1lc3RhbXA7Iik7CisKKyAgICAgICAgaWYg
KHNlbGVjdFZpY3RpbXMucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIHdoaWxlIChzZWxlY3RWaWN0aW1zLnN0ZXAoKSA9PSBTUUxS
ZXN1bHRSb3cpIHsKKyAgICAgICAgICAgIGlkcy5hcHBlbmQoc2VsZWN0VmljdGltcy5nZXRDb2x1
bW5JbnQ2NCgwKSk7CisgICAgICAgICAgICBjdW1tdWxhdGl2ZVNpemUgKz0gc2VsZWN0VmljdGlt
cy5nZXRDb2x1bW5JbnQ2NCgxKTsKKyAgICAgICAgICAgIGlmIChjdW1tdWxhdGl2ZVNpemUgPiBz
aXplVG9GcmVlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKGN1bW11bGF0aXZlU2l6ZSA8PSBzaXplVG9GcmVlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBmb3IgKFZlY3RvcjxpbnQ2NF90Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpZHMu
YmVnaW4oKTsgaXQgIT0gaWRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIC8vIERlbGV0ZSB0aGUg
Y2FjaGVzLgorICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgZGVsZXRlVmljdGltKG1fZGF0YWJhc2Us
ICJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgaWQ9PzsiKTsKKyAgICAgICAgaWYgKGRlbGV0ZVZp
Y3RpbS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBDYWNoZUdyb3VwcyB0YWJsZS4KKyAgICAgICAgU1FM
aXRlU3RhdGVtZW50IHVwZGF0ZUNhY2hlR3JvdXBzKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBD
YWNoZUdyb3VwcyBXSEVSRSBuZXdlc3RDYWNoZT0/OyIpOworICAgICAgICBpZiAodXBkYXRlQ2Fj
aGVHcm91cHMucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAKKyAgICAgICAgZGVsZXRlVmljdGltLmJpbmRJbnQ2NCgxLCAqaXQpOwor
ICAgICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoZGVsZXRlVmljdGltKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICB1cGRhdGVDYWNoZUdyb3Vwcy5iaW5kSW50NjQoMSwg
Kml0KTsKKyAgICAgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHVwZGF0ZUNhY2hlR3JvdXBzKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5jb21t
aXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6dXBkYXRlQ2FjaGVUaW1lc3RhbXAoaW50NjRfdCBjYWNoZUlkKQoreworICAgIG9wZW5EYXRh
YmFzZShmYWxzZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1
cm47CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgdXBkYXRlVGltZXN0YW1wU3RhdGVtZW50KG1fZGF0
YWJhc2UsICJVUERBVEUgQ2FjaGVzIFNFVCB0aW1lc3RhbXA9PyBXSEVSRSBpZD0/Iik7CisgICAg
aWYgKHVwZGF0ZVRpbWVzdGFtcFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2spIHsK
KyAgICAgICAgdXBkYXRlVGltZXN0YW1wU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBjdXJyZW50VGlt
ZSgpKTsKKyAgICAgICAgdXBkYXRlVGltZXN0YW1wU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNo
ZUlkKTsKKyAgICAgICAgZXhlY3V0ZVN0YXRlbWVudCh1cGRhdGVUaW1lc3RhbXBTdGF0ZW1lbnQp
OworICAgIH0KIH0KICAgICAKIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlJiBjYWNoZVN0b3JhZ2Uo
KQpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZS5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDggQEAg
cHVibGljOgogICAgIHZvaWQgY2FjaGVHcm91cERlc3Ryb3llZChBcHBsaWNhdGlvbkNhY2hlR3Jv
dXAqKTsKICAgICB2b2lkIGNhY2hlR3JvdXBNYWRlT2Jzb2xldGUoQXBwbGljYXRpb25DYWNoZUdy
b3VwKik7CiAgICAgICAgIAotICAgIGJvb2wgc3RvcmVOZXdlc3RDYWNoZShBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAqKTsgLy8gVXBkYXRlcyB0aGUgY2FjaGUgZ3JvdXAsIGJ1dCBkb2Vzbid0IHJlbW92
ZSBvbGQgY2FjaGUuCi0gICAgdm9pZCBzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqLCBB
cHBsaWNhdGlvbkNhY2hlKik7CisgICAgYm9vbCBzdG9yZU5ld2VzdENhY2hlKEFwcGxpY2F0aW9u
Q2FjaGVHcm91cCosIGludDY0X3QgbWF4QXBwQ2FjaGVTaXplKTsgLy8gVXBkYXRlcyB0aGUgY2Fj
aGUgZ3JvdXAsIGJ1dCBkb2Vzbid0IHJlbW92ZSBvbGQgY2FjaGUuCisgICAgdm9pZCBzdG9yZShB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqLCBBcHBsaWNhdGlvbkNhY2hlKiwgaW50NjRfdCBtYXhB
cHBDYWNoZVNpemUpOwogICAgIGJvb2wgc3RvcmVVcGRhdGVkVHlwZShBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UqLCBBcHBsaWNhdGlvbkNhY2hlKik7CiAKICAgICAvLyBSZW1vdmVzIHRoZSBncm91
cCBpZiB0aGUgY2FjaGUgdG8gYmUgcmVtb3ZlZCBpcyB0aGUgbmV3ZXN0IG9uZSAoc28sIHN0b3Jl
TmV3ZXN0Q2FjaGUoKSBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlaGFuZCB3aGVuIHVwZGF0aW5n
KS4KQEAgLTgxLDcgKzgxLDEyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBleGVjdXRlU3RhdGVtZW50
KFNRTGl0ZVN0YXRlbWVudCYpOwogICAgIGJvb2wgZXhlY3V0ZVNRTENvbW1hbmQoY29uc3QgU3Ry
aW5nJik7CiAgICAgCisgICAgYm9vbCBsYXN0RXhlY3V0aW9uRmFpbGVkRHVlTWF4U2l6ZVJlYWNo
ZWQoKTsKKyAgICBib29sIGV2aWN0TFJVQXBwbGljYXRpb25DYWNoZShpbnQ2NF90IGluY29taW5n
U2l6ZSwgaW50NjRfdCBtYXhpbXVtQXBwQ2FjaGVTaXplKTsKKyAgICB2b2lkIHVwZGF0ZUNhY2hl
VGltZXN0YW1wKGludDY0X3QgY2FjaGVJZCk7CisKICAgICBTdHJpbmcgbV9jYWNoZURpcmVjdG9y
eTsKKyAgICBTdHJpbmcgbV9jYWNoZUZpbGU7CiAKICAgICBTUUxpdGVEYXRhYmFzZSBtX2RhdGFi
YXNlOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiwxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJh
c2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKSA9IDA7CiAKKyNpZiBF
TkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICAvLyBSZXR1cm5zIHRoZSBt
YXhpbXVtIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgYXBwbGljYXRpb24gY2FjaGVzIGZpbGUuCisg
ICAgICAgIHZpcnR1YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKSA9IDA7CisjZW5kaWYKKwog
I2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICAgICAgdmlydHVhbCB2b2lkIGRhc2hi
b2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNiArMTUxLDE4IEBA
IGludCBTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUoKQogICAgIHJldHVybiBtX3BhZ2VTaXplOwog
fQogCitpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjpmcmVlU3BhY2VTaXplKCkKK3sKKyAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CisgICAgZW5hYmxlQXV0aG9yaXplcihm
YWxzZSk7CisgICAgLy8gTm90ZTogZnJlZWxpc3RfY291bnQgd2FzIGFkZGVkIGluIFNRTGl0ZSAz
LjQuMS4KKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIGZyZWVs
aXN0X2NvdW50Iik7CisgICAgaW50NjRfdCBzaXplID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0
KDApICogcGFnZVNpemUoKTsKKworICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CisgICAgcmV0
dXJuIHNpemU7Cit9CisKIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldFN5bmNocm9ub3VzKFN5bmNo
cm9ub3VzUHJhZ21hIHN5bmMpCiB7CiAgICAgZXhlY3V0ZUNvbW1hbmQoU3RyaW5nOjpmb3JtYXQo
IlBSQUdNQSBzeW5jaHJvbm91cyA9ICVpIiwgc3luYykpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVEYXRhYmFzZS5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZURhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDkgQEAgcHVi
bGljOgogICAgIGludDY0X3QgbWF4aW11bVNpemUoKTsKICAgICB2b2lkIHNldE1heGltdW1TaXpl
KGludDY0X3QpOwogICAgIAorICAgIC8vIEdldHMgdGhlIG51bWJlciBvZiB1bnVzZWQgYnl0ZXMg
aW4gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgaW50NjRfdCBmcmVlU3BhY2VTaXplKCk7CisKICAg
ICAvLyBUaGUgU1FMaXRlIFNZTkNIUk9OT1VTIHByYWdtYSBjYW4gYmUgZWl0aGVyIEZVTEwsIE5P
Uk1BTCwgb3IgT0ZGCiAgICAgLy8gRlVMTCAtIEFueSB3cml0aW5nIGNhbGxzIHRvIHRoZSBEQiBi
bG9jayB1bnRpbCB0aGUgZGF0YSBpcyBhY3R1YWxseSBvbiB0aGUgZGlzayBzdXJmYWNlCiAgICAg
Ly8gTk9STUFMIC0gU1FMaXRlIHBhdXNlcyBhdCBzb21lIGNyaXRpY2FsIG1vbWVudHMgd2hlbiB3
cml0aW5nLCBidXQgbXVjaCBsZXNzIHRoYW4gRlVMTApJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDQyOTMwKQor
KysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAwOS0wNC0yOCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGltaXRzIHRoZSBtYXhp
bXVtIHNpemUgb2YgdGhlIEFwcGxpY2F0aW9uIENhY2hlIGFuZAorICAgICAgICBleHBpcmVzIG9s
ZCBjYWNoZXMgaW4gTFJVIGZhc2hpb24gd2hlbiB0aGUgbWF4aW11bQorICAgICAgICBzaXplIGlz
IHJlYWNoZWQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6Om1heEFwcENhY2hlU2l6ZSk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmg6CisKIDIwMDktMDQtMjggIFhh
biBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQ6IGNvbW1p
dHRlZCBhIGZldyBiaXRzIGJ5IG1pc3Rha2UsIHJlbW92ZSB0aGVtLgpJbmRleDogV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gNDIwMjYp
CisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1Myw0ICs0NTMsMTMgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnJ1bk9wZW5Q
YW5lbChGcmFtZSosIAogICAgIGd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpOwogfQogCisjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKK2ludDY0X3QgQ2hyb21lQ2xpZW50Ojpt
YXhBcHBDYWNoZVNpemUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAvLyBGSVhNRTog
aW1wbGVtZW50IHRoaXMgcHJvcGVybHkuCisgICByZXR1cm4gNSAqIDEwMjQgKiAxMDI0OworfQor
I2VuZGlmCisKIH0KSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRHdGsuaAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDEwIEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2Uo
Y29uc3QgV2ViQ29yZTo6Tm9kZSopIHsgfQogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKKyAgICAgICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpOworI2Vu
ZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7CiAg
ICAgICAgIFdlYkNvcmU6OktVUkwgbV9ob3ZlcmVkTGlua1VSTDsKSW5kZXg6IFdlYktpdC9tYWMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0
MjkzMCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMDktMDQtMjggIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExpbWl0cyB0
aGUgbWF4aW11bSBzaXplIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBhbmQKKyAgICAgICAgZXhw
aXJlcyBvbGQgY2FjaGVzIGluIExSVSBmYXNoaW9uIHdoZW4gdGhlIG1heGltdW0KKyAgICAgICAg
c2l6ZSBpcyByZWFjaGVkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAg
ICAgICAoV2ViQ2hyb21lQ2xpZW50OjptYXhBcHBDYWNoZVNpemUpOgorCiAyMDA5LTA0LTI3ICBE
b3VnbGFzIFIuIERhdmlkc29uICA8ZGRhdmlkc29AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB0
aGUgdmFyaW91cyBzd2l0Y2hlcyBhbmQgY29udGV4dCBtZW51IGl0ZW1zIG5lZWRlZCBmb3IKSW5k
ZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNp
b24gNDIwMjYpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoV2ViQ29yZTo6RnJh
bWUqLCBXZWJDb3JlOjpHZW9sb2NhdGlvbiopOwogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykKKyAgICB2aXJ0dWFsIGludDY0X3QgbWF4QXBwQ2FjaGVTaXplKCk7CisjZW5k
aWYKKwogcHJpdmF0ZToKICAgICBXZWJWaWV3ICptX3dlYlZpZXc7CiB9OwpJbmRleDogV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDQyMDI2
KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHdvcmtp
bmcgY29weSkKQEAgLTY3OSw2ICs2NzksMTQgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlcXVl
c3RHZW9sb2NhdGlvbgogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKKyNpZiBF
TkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQoraW50NjRfdCBXZWJDaHJvbWVDbGllbnQ6
Om1heEFwcENhY2hlU2l6ZSgpCit7CisgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgcHJvcGVy
bHkuCisgICByZXR1cm4gNSAqIDEwMjQgKiAxMDI0OworfQorI2VuZGlmCisKIEBpbXBsZW1lbnRh
dGlvbiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcgogCiAtIChpZClpbml0V2l0aENob29zZXI6
KFBhc3NSZWZQdHI8RmlsZUNob29zZXI+KWNob29zZXIKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNDI5MzApCisr
KyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MDktMDQtMjggIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExpbWl0cyB0aGUgbWF4aW11
bSBzaXplIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBhbmQKKyAgICAgICAgZXhwaXJlcyBvbGQg
Y2FjaGVzIGluIExSVSBmYXNoaW9uIHdoZW4gdGhlIG1heGltdW0KKyAgICAgICAgc2l6ZSBpcyBy
ZWFjaGVkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6Om1heEFwcENhY2hlU2l6ZSk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoKKwogMjAwOS0wNC0yOCAgU2lt
b24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgVG9yIEFybmUgVmVzdGLDuC4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudFF0LmNwcAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjksNCArNDI5
LDEzIEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJ1bk9wZW5QYW5lbChGcmFtZSoKICAgICB9CiB9
CiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQoraW50NjRfdCBDaHJvbWVD
bGllbnRRdDo6bWF4QXBwQ2FjaGVTaXplKCkKK3sKKyAgIG5vdEltcGxlbWVudGVkKCk7CisgICAv
LyBGSVhNRTogaW1wbGVtZW50IHRoaXMgcHJvcGVybHkuCisgICByZXR1cm4gNSAqIDEwMjQgKiAx
MDI0OworfQorI2VuZGlmCisKIH0KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRRdC5oCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hh
bmdlKGNvbnN0IE5vZGUqKSB7IH0KIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElP
TlMpCisgICAgICAgIHZpcnR1YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKTsKKyNlbmRpZgor
CiAgICAgICAgIFFXZWJQYWdlKiBtX3dlYlBhZ2U7CiAgICAgICAgIFdlYkNvcmU6OktVUkwgbGFz
dEhvdmVyVVJMOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbGFzdEhvdmVyVGl0bGU7CkluZGV4
OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxv
ZwkocmV2aXNpb24gNDI5MzApCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDA5LTA0LTI4ICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBA
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBMaW1pdHMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgQXBwbGljYXRpb24gQ2FjaGUgYW5k
CisgICAgICAgIGV4cGlyZXMgb2xkIGNhY2hlcyBpbiBMUlUgZmFzaGlvbiB3aGVuIHRoZSBtYXhp
bXVtCisgICAgICAgIHNpemUgaXMgcmVhY2hlZC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6Om1heEFwcENh
Y2hlU2l6ZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisK
IDIwMDktMDQtMjIgIEFkYSBDaGFuICA8YWRhY2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzUxMTUyOTg+IERvbid0IGdldCBlcnJvciBtc2cgd2hlbiBkb3dubG9hZCBp
cyBpbnRlcnJ1cHRlZCBhbmQgY2Fubm90IHJlc3VtZSBkdWUgdG8gc2VydmVyIHVuYXZhaWxhYmls
aXR5CkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCShyZXZpc2lvbiA0MjAyNikKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkyLDYgKzY5MiwxNCBAQCB2b2lkIFdl
YkNocm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKEZyYW1lCiAgICAgLy8gRklYTUU6IFNob3cgc29t
ZSBzb3J0IG9mIGVycm9yIGlmIHRvbyBtYW55IGZpbGVzIGFyZSBzZWxlY3RlZCBhbmQgdGhlIGJ1
ZmZlciBpcyB0b28gc21hbGwuICBGb3Igbm93LCB0aGlzIHdpbGwgZmFpbCBzaWxlbnRseS4KIH0K
IAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCitpbnQ2NF90IFdlYkNocm9t
ZUNsaWVudDo6bWF4QXBwQ2FjaGVTaXplKCkKK3sKKyAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhp
cyBwcm9wZXJseS4KKyAgIHJldHVybiA1ICogMTAyNCAqIDEwMjQ7Cit9CisjZW5kaWYKKwogQ09N
UHRyPElXZWJVSURlbGVnYXRlPiBXZWJDaHJvbWVDbGllbnQ6OnVpRGVsZWdhdGUoKQogewogICAg
IENPTVB0cjxJV2ViVUlEZWxlZ2F0ZT4gZGVsZWdhdGU7CkluZGV4OiBXZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTIwLDYgKzEyMCwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlk
Q2hhbmdlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKSB7IH0KIAorI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCisgICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpOwor
I2VuZGlmCisKIHByaXZhdGU6CiAgICAgQ09NUHRyPElXZWJVSURlbGVnYXRlPiB1aURlbGVnYXRl
KCk7CiAgICAgQ09NUHRyPElXZWJVSURlbGVnYXRlMj4gdWlEZWxlZ2F0ZTIoKTsKSW5kZXg6IFdl
YktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2
aXNpb24gNDI5MzApCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMDktMDQtMjggIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExp
bWl0cyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZSBhbmQKKyAgICAg
ICAgZXhwaXJlcyBvbGQgY2FjaGVzIGluIExSVSBmYXNoaW9uIHdoZW4gdGhlIG1heGltdW0KKyAg
ICAgICAgc2l6ZSBpcyByZWFjaGVkLgorCisgICAgICAgICogV2ViS2l0U3VwcG9ydC9DaHJvbWVD
bGllbnRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRXeDo6bWF4QXBwQ2Fj
aGVTaXplKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4Lmg6CisKIDIw
MDktMDQtMjQgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAg
ICAgICAgd3ggYnVpbGQgZml4LiBTd2l0Y2hpbmcgSlNDb3JlIGZyb20gYSBzdGF0aWMgbGliIHRv
IGEgZHluYW1pYyBsaWIKSW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVu
dFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGll
bnRXeC5jcHAJKHJldmlzaW9uIDQyMDI2KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hy
b21lQ2xpZW50V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsNCArMzYzLDE0IEBAIHZvaWQg
Q2hyb21lQ2xpZW50V3g6OnJ1bk9wZW5QYW5lbChGcmFtZSoKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKK2ludDY0X3QgQ2hy
b21lQ2xpZW50V3g6Om1heEFwcENhY2hlU2l6ZSgpCit7CisgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIHByb3Blcmx5LgorICAgcmV0dXJuIDUgKiAxMDI0
ICogMTAyNDsKIH0KKyNlbmRpZgorCit9CisKSW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0
L0Nocm9tZUNsaWVudFd4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQv
Q2hyb21lQ2xpZW50V3guaAkocmV2aXNpb24gNDIwMjYpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3Vw
cG9ydC9DaHJvbWVDbGllbnRXeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDEwIEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9k
ZSopIHsgfQogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICB2aXJ0
dWFsIGludDY0X3QgbWF4QXBwQ2FjaGVTaXplKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB3
eFdlYlZpZXcqIG1fd2ViVmlldzsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31413</attachid>
            <date>2009-06-17 07:37:42 -0700</date>
            <delta_ts>2009-07-01 17:08:10 -0700</delta_ts>
            <desc>New proposal to limit the maximum size of the application cache (take 6)</desc>
            <filename>22700.patch</filename>
            <type>text/plain</type>
            <size>37512</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDc1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMDktMDYtMTcgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMAorICAgICAgICAK
KyAgICAgICAgaHR0cHM6Ly9saXN0cy53ZWJraXQub3JnL3BpcGVybWFpbC93ZWJraXQtZGV2LzIw
MDktTWF5LzAwNzU2MC5odG1sCisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBpbXBsZW1l
bnRzIGEgbWVjaGFuaXNtIGZvciBsaW1pdCB0aGUgbWF4aW11bSBzaXplIG9mIHRoZQorICAgICAg
ICBhcHBsaWNhdGlvbiBjYWNoZSBmaWxlLiBUaGUgbWF4aW11bSBzaXplIGlzIGRlZmllbmQgYnkg
Q2hyb21lQ2xpZW50CisgICAgICAgIGltcGxlbWVudGVycy4gV2hlbiB0aGUgbWF4aW11bSBzaXpl
IGlzIGhpdCBhIENocm9tZUNsaWVudCBjYWxsYmFjayBpcworICAgICAgICBpbnZva2VkLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBleHRlbmRzIHRoZSBBcHBsaUNhdGlvbkNh
Y2hlU3RvcmFnZSBBUEkgYnkgYWxsb3dpbmcKKyAgICAgICAgYSBjbGllbnQgdG8gcXVlcnkgb3Ig
bW9kaWZ5IHRoZSBhcHBsaWNhdGlvbiBjYWNoZSB3aXRob3V0IGhhdmluZyB0bworICAgICAgICBs
b2FkIGFueSByZXNvdXJjZXMgaW50byBtZW1vcnkuCisgICAgICAgIAorICAgICAgICBOT1RFIFRI
QVQgVEhJUyBDSEFOR0UgRU5GT1JDRVMgQSBNQVhJTVVNIFNJWkUgT0YgNU1CIEZPUiBUSEUKKyAg
ICAgICAgQVBQTElDQVRJT04gQ0FDSEUgRk9SIEFMTCBQTEFURk9STVMhIFBMRUFTRSBDSEFOR0Ug
VEhFIElNUExFTUVOVEFUSU9OCisgICAgICAgIE9GIG1heEFwcENhY2hlU2l6ZSgpIElOIFlPVVIg
Q2hyb21lQ2xpZW50IElNUExFTUVOVEFUSU9OIQorICAgICAgICAKKyAgICAgICAgTm90ZSB0aGF0
IHRoZSBvcmlnaW5hbCBwYXRjaCBmb3IgdGhpcyBidWcgaW1wbGVtZW50ZWQgYW4gTFJVIGV2aWN0
aW9uCisgICAgICAgIG1lY2hhbmlzbS4gQmFzZWQgb24gdGhlIGRpc2N1c3Npb24gb24gd2Via2l0
LWRldiwgdGhpcyB3YXMgZGVlbWVkIHRvIGJlCisgICAgICAgIGEgcXVlc3Rpb25hYmxlIHNvbHV0
aW9uLiBUaGlzIG5ldyBwYXRjaCBjYW4gYmUgZWFzaWx5IGV4dGVuZGVkIHRvIHByb3ZpZGUKKyAg
ICAgICAgc2ltcGxlIHN0YXRpc3RpY3MgdGhhdCB3b3VsZCBhbGxvdyBhIENocm9tZUNsaWVudCBp
bXBsZW1lbnRlciB0byBhY3R1YWxseQorICAgICAgICB1c2UgTFJVIGV2aWN0aW9uIGlmIGl0IHdp
c2hlcy4gRm9yIGV4YW1wbGUsIG9uZSBjb3VsZCBhZGQgYSB0aW1lc3RhbXAKKyAgICAgICAgYXR0
cmlidXRlIG9uIHRoZSBDYWNoZUdyb3VwIHRhYmxlIGFuZCB1cGRhdGUgdGhhdCBhdHRyaWJ1dGUg
ZXZlcnkgdGltZSBhCisgICAgICAgIGNhY2hlIGdyb3VwcyBpcyBzZWxlY3RlZC4gV2hlbiB0aGUg
bWF4aW11bSBzaXplIGlzIHJlYWNoZWQsIHRoZQorICAgICAgICBtYW5pZmVzdFVSTHMgbWV0aG9k
IGNvdWxkIGJlIGNoYW5nZWQgdG8gcmV0dXJuZWQgdGhlIGxpc3Qgb2YgZXhpc3RpbmcKKyAgICAg
ICAgY2FjaGUgZ3JvdXBzIG9yZGVyZWQgYnkgdGltZXN0YW1wLiBUaGUgTFJVIGV2aWNpdGlvbiBw
b2xpY3kgY291bGQgdGhlbgorICAgICAgICBiZSBpbXBsZW1lbnRlZCBpbnNpZGUgdGhlICdDaHJv
bWVDbGllbnQ6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUnCisgICAgICAgIGNhbGxiYWNrLgorCisg
ICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAgICAgICBJbXBsZW1lbnRzIHRoZSBu
ZXcgQ2hyb21lQ2xpZW50IG1ldGhvZHMuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGUuY3BwOgorICAgICAgICBBZGRzIHRoZSBhYmlsaXR5IHRvIGNhbGN1bGF0ZSB0
aGUgYXBwcm94aW1hdGUgc2l6ZSBvZiBhbiBBcHBsaWNhdGlvbkNhY2hlIG9iamVjdC4KKyAgICAg
ICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oOgorICAgICAgICBBZGRzIHRo
ZSBhYmlsaXR5IHRvIGNhbGN1bGF0ZSB0aGUgYXBwcm94aW1hdGUgc2l6ZSBvZiBhbiBBcHBsaWNh
dGlvbkNhY2hlIG9iamVjdC4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZUdyb3VwLmNwcDoKKyAgICAgICAgQWRkcyBhIG1ldGhvZCB0aGF0IHByb3ZpZGVzIGFjY2Vz
cyB0byB0aGUgQ2hyb21lQ2xpZW50IG9iamVjdC4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUdyb3VwLmg6CisgICAgICAgIEFkZHMgYSBtZXRob2QgdGhhdCBwcm92
aWRlcyBhY2Nlc3MgdG8gdGhlIENocm9tZUNsaWVudCBvYmplY3QuCisgICAgICAgICogbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHA6CisgICAgICAgIEFkZHMgdGhl
IGFiaWxpdHkgdG8gY2FsY3VsYXRlIHRoZSBhcHByb3hpbWF0ZSBzaXplIG9mIGFuIEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSBvYmplY3QuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZS5oOgorICAgICAgICBBZGRzIHRoZSBhYmlsaXR5IHRvIGNhbGN1
bGF0ZSB0aGUgYXBwcm94aW1hdGUgc2l6ZSBvZiBhbiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Ug
b2JqZWN0LgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZS5jcHA6CisgICAgICAgIEVuZm9yY2VzIHRoZSBtYXhpbXVtIGFwcGxpY2F0aW9uIGNhY2hlIGZp
bGUgc2l6ZSBwcm92aWRlZCBieSB0aGUgQ2hyb21lQ2xpZW50LgorICAgICAgICBBZGRzIGNoZWNr
cyB0byBkZXRlcmVtaW5lIHdoZW4gdGhlIG1heGltdW0gc2l6ZSBpcyByZWFjaGVkIGFuZCB0byBp
bnZva2UKKyAgICAgICAgdGhlIGFwcHJvcHJpYXRlIENocm9tZUNsaWVudCBjYWxsYmFja3MuCisg
ICAgICAgIEltcGxlbWVudHMgbmV3IG1ldGhvZHMgdGhhdCBhbGxvdyBjaGVhcCBxdWVyeSBhbmQg
ZGVsZXRpb24gb2YgYXBwbGljYXRpb24gY2FjaGUgZGF0YWJhc2UuCisgICAgICAgICogbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg6CisgICAgICAgIERlY2xhcmVzIG5l
dyBtZXRob2RzIHRoYXQgYWxsb3cgY2hlYXAgcXVlcnkgYW5kIGRlbGV0aW9uIG9mIGFwcGxpY2F0
aW9uIGNhY2hlIGRhdGFiYXNlLgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAg
ICAgIEFkZHMgYSBtZXRob2QgdGhhdCBhbGxvd3MgdGhlIENocm9tZUNsaWVudCBpbXBsZW1lbnRh
dGlvbiB0byBkZWNpZGUgdGhlIG1heGltdW0gc2l6ZQorICAgICAgICBvZiBhbiBhcHBsaWNhdGlv
biBjYWNoZS4KKyAgICAgICAgQWRkcyBhIGNhbGxiYWNrIG1ldGhvZCB0aGF0IGlzIGludm9rZWQg
YnkgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIHdoZW4gdGhlIG1heGltdW0gc2l6ZQorICAgICAgICBp
cyByZWFjaGVkLgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmg6CisgICAgICAgIEFkZHMgYSBu
ZXcgbWV0aG9kIHRoYXQgYWxsb3dzIHF1ZXJ5aW5nIGZvciB0aGUgYW1vdW50IG9mIHVudXNlZCBz
cGFjZSBpbnNpZGUgdGhlCisgICAgICAgIGFwcGxpY2F0aW9uIGNhY2hlIGRhdGFiYXNlIGZpbGUu
CisKIDIwMDktMDYtMTcgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgJKHJldmlzaW9uIDQ0NjAyKQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMyw2ICsxMzMsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25zdCBTdHJpbmcmKSB7IH0KICNl
bmRpZgogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICB2aXJ0dWFs
IGludDY0X3QgbWF4QXBwQ2FjaGVTaXplKCkgeyByZXR1cm4gMDsgfTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90KSB7IH0KKyNlbmRpZgorCiAgICAgdmly
dHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+KSB7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopIHsg
fQpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAJ
KHJldmlzaW9uIDQ0NjAyKQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgQXBwbGljYXRpb25DYWNo
ZTo6QXBwbGljYXRpb25DYWNoZSgpCiAgICAgOiBtX2dyb3VwKDApCiAgICAgLCBtX21hbmlmZXN0
KDApCiAgICAgLCBtX3N0b3JhZ2VJRCgwKQorICAgICwgbV9zaXplKDApCiB7CiB9CiAKQEAgLTg2
LDcgKzg3LDkgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlOjphZGRSZXNvdXJjZShQYXNzUgogICAg
ICAgICAvLyBBZGQgdGhlIHJlc291cmNlIHRvIHRoZSBzdG9yYWdlLgogICAgICAgICBjYWNoZVN0
b3JhZ2UoKS5zdG9yZShyZXNvdXJjZS5nZXQoKSwgdGhpcyk7CiAgICAgfQotICAgIAorCisgICAg
bV9zaXplICs9IHJlc291cmNlLT5zaXplKCk7CisKICAgICBtX3Jlc291cmNlcy5zZXQodXJsLCBy
ZXNvdXJjZSk7CiB9CiAKQEAgLTEwMCw3ICsxMDMsOSBAQCB1bnNpZ25lZCBBcHBsaWNhdGlvbkNh
Y2hlOjpyZW1vdmVSZXNvdXJjCiAgICAgdW5zaWduZWQgdHlwZSA9IGl0LT5zZWNvbmQtPnR5cGUo
KTsKIAogICAgIG1fcmVzb3VyY2VzLnJlbW92ZShpdCk7Ci0gICAgCisKKyAgICBtX3NpemUgLT0g
aXQtPnNlY29uZC0+c2l6ZSgpOworCiAgICAgcmV0dXJuIHR5cGU7CiB9ICAgIAogICAgIApJbmRl
eDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaAkocmV2aXNpb24g
NDQ2MDIpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDggQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBi
b29sIHJlcXVlc3RJc0hUVFBPckhUVFBTR2V0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogCisg
ICAgaW50NjRfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKIHByaXZhdGU6CiAg
ICAgQXBwbGljYXRpb25DYWNoZSgpOwogICAgIApAQCAtMTA2LDYgKzEwOCw5IEBAIHByaXZhdGU6
CiAgICAgLy8gV2hpbGUgYW4gdXBkYXRlIGlzIGluIHByb2dyZXNzLCBjaGFuZ2VzIGluIGR5bmFt
aWMgZW50cmllcyBhcmUgcXVldWVkIGZvciBsYXRlciBleGVjdXRpb24uCiAgICAgVmVjdG9yPHN0
ZDo6cGFpcjxLVVJMLCBib29sPiA+IG1fcGVuZGluZ0R5bmFtaWNFbnRyeUFjdGlvbnM7CiAKKyAg
ICAvLyBUaGUgdG90YWwgc2l6ZSBvZiB0aGUgcmVzb3VyY2VzIGJlbG9uZ2luZyB0byB0aGlzIEFw
cGxpY2F0aW9uIENhY2hlIGluc3RhbmNlLg0KKyAgICBpbnQ2NF90IG1fc2l6ZTsKKwogICAgIHVu
c2lnbmVkIG1fc3RvcmFnZUlEOwogfTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCShyZXZpc2lvbiA0NDYwMikKKysrIFdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlLmgiCiAj
aW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJE
b2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRPTUFwcGxpY2F0aW9uQ2FjaGUuaCIKICNpbmNs
dWRlICJET01XaW5kb3cuaCIKQEAgLTkwOCw3ICs5MDksMTIgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXA6OmNsZWFyU3RvcmFnZQogICAgIGZvciAoSGFzaFNldDxBcHBsaWNhdGlvbkNhY2hl
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQogICAgICAgICAoKml0KS0+Y2xlYXJTdG9yYWdlSUQoKTsKIH0KLSAgICAKKworQ2hyb21lQ2xp
ZW50KiBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNsaWVudCgpDQorew0KKyAgICBBU1NFUlQobV9m
cmFtZSk7DQorICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKTsN
Cit9CiAKIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZUdyb3VwLmgJKHJldmlzaW9uIDQ0NjAyKQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlOwogY2xhc3Mg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOworY2xhc3MgQ2hyb21lQ2xpZW50OwogY2xhc3MgRE9N
QXBwbGljYXRpb25DYWNoZTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7
CkBAIC05MCw2ICs5MSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNDb3B5KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0NvcHk7IH0KIAorICAgIENocm9tZUNsaWVudCogY2xpZW50KCk7CisKIHByaXZh
dGU6CiAgICAgdHlwZWRlZiB2b2lkIChET01BcHBsaWNhdGlvbkNhY2hlOjoqTGlzdGVuZXJGdW5j
dGlvbikoKTsKICAgICBzdGF0aWMgdm9pZCBwb3N0TGlzdGVuZXJUYXNrKExpc3RlbmVyRnVuY3Rp
b24sIGNvbnN0IEhhc2hTZXQ8RG9jdW1lbnRMb2FkZXIqPiYpOwpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCShyZXZp
c2lvbiA0MzI1MCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlOjpBcHBsaWNhdGlvbkNhYwogICAgIDogU3Vic3RpdHV0ZVJlc291cmNlKHVy
bCwgcmVzcG9uc2UsIGRhdGEpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fc3RvcmFnZUlE
KDApCisgICAgLCBtX3NpemUoMCkKIHsKIH0KIApAQCAtNDQsNiArNDUsMjcgQEAgdm9pZCBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U6OmFkZFR5cGUodQogICAgIG1fdHlwZSB8PSB0eXBlOyAKIH0K
IAoraW50NjRfdCBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OnNpemUoKQ0KK3sNCisgICAgaWYg
KCFtX3NpemUpIHsNCisgICAgICAgIGlmIChkYXRhKCkpDQorICAgICAgICAgICAgbV9zaXplID0g
ZGF0YSgpLT5zaXplKCk7DQorDQorICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSByZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsNCisgICAgICAgIGZv
ciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNwb25zZSgpLmh0dHBIZWFk
ZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpDQorICAgICAgICAgICAgbV9zaXpl
ICs9IChpdC0+Zmlyc3QubGVuZ3RoKCkgKyBpdC0+c2Vjb25kLmxlbmd0aCgpICsgMikgKiBzaXpl
b2YoVUNoYXIpOw0KKw0KKyAgICAgICAgbV9zaXplICs9IHVybCgpLnN0cmluZygpLmxlbmd0aCgp
ICogc2l6ZW9mKFVDaGFyKTsNCisgICAgICAgIG1fc2l6ZSArPSBzaXplb2YoaW50KTsgLy8gcmVz
cG9uc2UoKS5tX2h0dHBTdGF0dXNDb2RlDQorICAgICAgICBtX3NpemUgKz0gcmVzcG9uc2UoKS51
cmwoKS5zdHJpbmcoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7DQorICAgICAgICBtX3NpemUg
Kz0gc2l6ZW9mKHVuc2lnbmVkKTsgLy8gZGF0YUlkDQorICAgICAgICBtX3NpemUgKz0gcmVzcG9u
c2UoKS5taW1lVHlwZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsNCisgICAgICAgIG1fc2l6
ZSArPSByZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hh
cik7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG1fc2l6ZTsNCit9CisKICNpZm5kZWYgTkRFQlVH
CiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5cGUodW5zaWduZWQgdHlwZSkK
IHsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZS5oCShyZXZpc2lvbiA0MzI1MCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0b3JhZ2VJRCh1bnNpZ25lZCBzdG9yYWdlSUQpIHsg
bV9zdG9yYWdlSUQgPSBzdG9yYWdlSUQ7IH0KICAgICB1bnNpZ25lZCBzdG9yYWdlSUQoKSBjb25z
dCB7IHJldHVybiBtX3N0b3JhZ2VJRDsgfQogICAgIHZvaWQgY2xlYXJTdG9yYWdlSUQoKSB7IG1f
c3RvcmFnZUlEID0gMDsgfQorICAgIGludDY0X3Qgc2l6ZSgpOwogCiAjaWZuZGVmIE5ERUJVRwog
ICAgIHN0YXRpYyB2b2lkIGR1bXBUeXBlKHVuc2lnbmVkIHR5cGUpOwpAQCAtNjQsNiArNjUsNyBA
QCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgbV90eXBlOwogICAgIHVuc2lnbmVkIG1fc3RvcmFn
ZUlEOworICAgIGludDY0X3QgbV9zaXplOwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDQ0NjAyKQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSAr
MzEsMTMgQEAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiQXBwbGlj
YXRpb25DYWNoZUdyb3VwLmgiCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgi
CisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1
ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3Rh
dGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDxzcWxp
dGUzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJp
bmdFeHRyYXMuaD4KIApAQCAtMjIzLDYgKzIyNSw4IEBAIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCog
QXBwbGljYXRpb25DYWNoZVMKICAgICAgICAgLy8gYSBtYXRjaGluZyBVUkwuCiAgICAgICAgIHVu
c2lnbmVkIG5ld2VzdENhY2hlSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50Lmdl
dENvbHVtbkludDY0KDIpKTsKICAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IGNhY2hl
ID0gbG9hZENhY2hlKG5ld2VzdENhY2hlSUQpOworICAgICAgICBpZiAoIWNhY2hlKQ0KKyAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVz
b3VyY2UgPSBjYWNoZS0+cmVzb3VyY2VGb3JVUkwodXJsKTsKICAgICAgICAgaWYgKCFyZXNvdXJj
ZSkKQEAgLTM2Niw3ICszNzAsNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVj
dXRlU1FMCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGNvbnN0IGludCBzY2hlbWFW
ZXJzaW9uID0gMzsKK3N0YXRpYyBjb25zdCBpbnQgc2NoZW1hVmVyc2lvbiA9IDQ7CiAgICAgCiB2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKIHsKQEAg
LTQwMCwxMyArNDA0LDEzIEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRh
YmEKICAgICAvLyBUaGUgY2FjaGUgZGlyZWN0b3J5IHNob3VsZCBuZXZlciBiZSBudWxsLCBidXQg
aWYgaXQgZm9yIHNvbWUgd2VpcmQgcmVhc29uIGlzIHdlIGJhaWwgb3V0LgogICAgIGlmIChtX2Nh
Y2hlRGlyZWN0b3J5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgU3RyaW5n
IGFwcGxpY2F0aW9uQ2FjaGVQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fY2FjaGVE
aXJlY3RvcnksICJBcHBsaWNhdGlvbkNhY2hlLmRiIik7Ci0gICAgaWYgKCFjcmVhdGVJZkRvZXNO
b3RFeGlzdCAmJiAhZmlsZUV4aXN0cyhhcHBsaWNhdGlvbkNhY2hlUGF0aCkpCisNCisgICAgbV9j
YWNoZUZpbGUgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVjdG9yeSwgIkFw
cGxpY2F0aW9uQ2FjaGUuZGIiKTsNCisgICAgaWYgKCFjcmVhdGVJZkRvZXNOb3RFeGlzdCAmJiAh
ZmlsZUV4aXN0cyhtX2NhY2hlRmlsZSkpDQogICAgICAgICByZXR1cm47CiAKICAgICBtYWtlQWxs
RGlyZWN0b3JpZXMobV9jYWNoZURpcmVjdG9yeSk7Ci0gICAgbV9kYXRhYmFzZS5vcGVuKGFwcGxp
Y2F0aW9uQ2FjaGVQYXRoKTsKKyAgICBtX2RhdGFiYXNlLm9wZW4obV9jYWNoZUZpbGUpOwogICAg
IAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDE2
LDcgKzQyMCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om9wZW5EYXRhYmEKICAg
ICAvLyBDcmVhdGUgdGFibGVzCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJ
RiBOT1QgRVhJU1RTIENhY2hlR3JvdXBzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNS
RU1FTlQsICIKICAgICAgICAgICAgICAgICAgICAgICAibWFuaWZlc3RIb3N0SGFzaCBJTlRFR0VS
IE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG1hbmlmZXN0VVJMIFRFWFQgVU5JUVVFIE9OIENP
TkZMSUNUIEZBSUwsIG5ld2VzdENhY2hlIElOVEVHRVIpIik7Ci0gICAgZXhlY3V0ZVNRTENvbW1h
bmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlcyAoaWQgSU5URUdFUiBQUklNQVJZ
IEtFWSBBVVRPSU5DUkVNRU5ULCBjYWNoZUdyb3VwIElOVEVHRVIpIik7CisgICAgZXhlY3V0ZVNR
TENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlcyAoaWQgSU5URUdFUiBQ
UklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBjYWNoZUdyb3VwIElOVEVHRVIsIHNpemUgSU5URUdF
UikiKTsKICAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg
Q2FjaGVXaGl0ZWxpc3RVUkxzICh1cmwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBj
YWNoZSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7CiAgICAgZXhlY3V0ZVNR
TENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEZhbGxiYWNrVVJMcyAobmFtZXNw
YWNlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgZmFsbGJhY2tVUkwgVEVYVCBOT1Qg
TlVMTCBPTiBDT05GTElDVCBGQUlMLCAiCiAgICAgICAgICAgICAgICAgICAgICAgImNhY2hlIElO
VEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKQEAgLTQ4MCwxMSArNDg0LDEyIEBA
IGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGwKICAgICBBU1NFUlQoY2Fj
aGUtPmdyb3VwKCktPnN0b3JhZ2VJRCgpICE9IDApOwogICAgIEFTU0VSVChzdG9yYWdlSURKb3Vy
bmFsKTsKICAgICAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJ
TlNFUlQgSU5UTyBDYWNoZXMgKGNhY2hlR3JvdXApIFZBTFVFUyAoPykiKTsKKyAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZXMgKGNhY2hl
R3JvdXAsIHNpemUpIFZBTFVFUyAoPywgPykiKTsKICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3RhdGVtZW50
LmJpbmRJbnQ2NCgxLCBjYWNoZS0+Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVu
dC5iaW5kSW50NjQoMiwgY2FjaGUtPnNpemUoKSk7CiAKICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoc3RhdGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjM1LDEwICs2NDAsMjUg
QEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbAogICAgIAogICAgIG9w
ZW5EYXRhYmFzZSh0cnVlKTsKICAKKyAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKGNhY2hl
LT5ncm91cCgpLT5jbGllbnQoKS0+bWF4QXBwQ2FjaGVTaXplKCkpOworCiAgICAgU1FMaXRlVHJh
bnNhY3Rpb24gc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIHN0b3Jl
UmVzb3VyY2VUcmFuc2FjdGlvbi5iZWdpbigpOwogICAgIAotICAgIGlmICghc3RvcmUocmVzb3Vy
Y2UsIGNhY2hlLT5zdG9yYWdlSUQoKSkpCisgICAgaWYgKCFzdG9yZShyZXNvdXJjZSwgY2FjaGUt
PnN0b3JhZ2VJRCgpKSkgew0KKyAgICAgICAgY2hlY2tGb3JNYXhTaXplUmVhY2hlZChjYWNoZS0+
c2l6ZSgpLCBjYWNoZS0+Z3JvdXAoKS0+Y2xpZW50KCksICZzdG9yZVJlc291cmNlVHJhbnNhY3Rp
b24pOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIC8vIEEgcmVzb3VyY2Ugd2Fz
IGFkZGVkIHRvIHRoZSBjYWNoZS4gVXBkYXRlIHRoZSB0b3RhbCBkYXRhIHNpemUgZm9yIHRoZSBj
YWNoZS4NCisgICAgU1FMaXRlU3RhdGVtZW50IHNpemVVcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgIlVQREFURSBDYWNoZXMgU0VUIHNpemU9c2l6ZSs/IFdIRVJFIGlkPT8iKTsNCisgICAgaWYg
KHNpemVVcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQ0KKyAgICAgICAg
cmV0dXJuOw0KKw0KKyAgICBzaXplVXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCByZXNvdXJj
ZS0+c2l6ZSgpKTsNCisgICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGUt
PnN0b3JhZ2VJRCgpKTsNCisNCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHNpemVVcGRhdGVT
dGF0ZW1lbnQpKQ0KICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHN0b3JlUmVzb3VyY2VUcmFu
c2FjdGlvbi5jb21taXQoKTsKQEAgLTY0OCwxNCArNjY4LDE4IEBAIGJvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXMKIHsKICAgICBvcGVuRGF0YWJhc2UodHJ1ZSk7CiAgICAg
CisgICAgbV9kYXRhYmFzZS5zZXRNYXhpbXVtU2l6ZShncm91cC0+Y2xpZW50KCktPm1heEFwcENh
Y2hlU2l6ZSgpKTsKKwogICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHN0b3JlQ2FjaGVUcmFuc2FjdGlv
bihtX2RhdGFiYXNlKTsKICAgICAKICAgICBzdG9yZUNhY2hlVHJhbnNhY3Rpb24uYmVnaW4oKTsK
ICAgICAKICAgICBpZiAoIWdyb3VwLT5zdG9yYWdlSUQoKSkgewotICAgICAgICAvLyBTdG9yZSB0
aGUgZ3JvdXAKLSAgICAgICAgaWYgKCFzdG9yZShncm91cCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIC8vIFN0b3JlIHRoZSBncm91cA0KKyAgICAgICAgaWYgKCFzdG9yZShn
cm91cCkpIHsNCisgICAgICAgICAgICBjaGVja0Zvck1heFNpemVSZWFjaGVkKGdyb3VwLT5uZXdl
c3RDYWNoZSgpLT5zaXplKCksIGdyb3VwLT5jbGllbnQoKSwgJnN0b3JlQ2FjaGVUcmFuc2FjdGlv
bik7DQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICAgICAgfQogICAgIH0KICAgICAK
ICAgICBBU1NFUlQoZ3JvdXAtPm5ld2VzdENhY2hlKCkpOwpAQCAtNjY4LDggKzY5MiwxMCBAQCBi
b29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzCiAgICAgUmVzb3VyY2VTdG9y
YWdlSURKb3VybmFsIHN0b3JhZ2VJREpvdXJuYWw7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3ZXN0
IGNhY2hlCi0gICAgaWYgKCFzdG9yZShncm91cC0+bmV3ZXN0Q2FjaGUoKSwgJnN0b3JhZ2VJREpv
dXJuYWwpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFzdG9yZShncm91cC0+bmV3
ZXN0Q2FjaGUoKSwgJnN0b3JhZ2VJREpvdXJuYWwpKSB7DQorICAgICAgICBjaGVja0Zvck1heFNp
emVSZWFjaGVkKGdyb3VwLT5uZXdlc3RDYWNoZSgpLT5zaXplKCksIGdyb3VwLT5jbGllbnQoKSwg
JnN0b3JlQ2FjaGVUcmFuc2FjdGlvbik7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0K
ICAgICAKICAgICAvLyBVcGRhdGUgdGhlIG5ld2VzdCBjYWNoZSBpbiB0aGUgZ3JvdXAuCiAgICAg
CkBAIC04NzksNyArOTA1LDE1MyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9y
ZUNvcHlPCiAgICAgCiAgICAgcmV0dXJuIGNvcHlTdG9yYWdlLnN0b3JlTmV3ZXN0Q2FjaGUoZ3Jv
dXBDb3B5LmdldCgpKTsKIH0KLSAgICAKKworYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
bWFuaWZlc3RVUkxzKFZlY3RvcjxLVVJMPiogdXJscykNCit7DQorICAgIEFTU0VSVCh1cmxzKTsN
CisgICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsNCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3Blbigp
KQ0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgICBTUUxpdGVTdGF0ZW1lbnQgc2VsZWN0
VVJMcyhtX2RhdGFiYXNlLCAiU0VMRUNUIG1hbmlmZXN0VVJMIEZST00gQ2FjaGVHcm91cHMiKTsN
CisNCisgICAgaWYgKHNlbGVjdFVSTHMucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQ0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgICAgd2hpbGUgKHNlbGVjdFVSTHMuc3RlcCgpID09IFNR
TFJlc3VsdFJvdykNCisgICAgICAgIHVybHMtPmFwcGVuZChzZWxlY3RVUkxzLmdldENvbHVtblRl
eHQoMCkpOw0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6Y2FjaGVHcm91cFNpemUoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50
NjRfdCogc2l6ZSkNCit7DQorICAgIEFTU0VSVChzaXplKTsNCisgICAgb3BlbkRhdGFiYXNlKGZh
bHNlKTsNCisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQ0KKyAgICAgICByZXR1cm4gZmFs
c2U7DQorDQorICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVD
VCBzdW0oQ2FjaGVzLnNpemUpIEZST00gQ2FjaGVzIElOTkVSIEpPSU4gQ2FjaGVHcm91cHMgT04g
Q2FjaGVzLmNhY2hlR3JvdXA9Q2FjaGVHcm91cHMuaWQgV0hFUkUgQ2FjaGVHcm91cHMubWFuaWZl
c3RVUkw9PyIpOw0KKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykN
CisgICAgICAgIHJldHVybiBmYWxzZTsNCisNCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG1h
bmlmZXN0VVJMKTsNCisNCisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7DQorICAg
IGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisN
CisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRSb3cpIHsNCisgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGdldCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgZ3JvdXAsIGVycm9yIFwiJXNcIiIs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAg
ICB9DQorDQorICAgICpzaXplID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApOw0KKyAgICBy
ZXR1cm4gdHJ1ZTsNCit9DQorDQorYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRl
Q2FjaGVHcm91cChjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMKQ0KK3sNCisgICAgU1FMaXRlVHJh
bnNhY3Rpb24gZGVsZXRlVHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7DQorICAgIC8vIENoZWNrIHRv
IHNlZSBpZiB0aGUgZ3JvdXAgaXMgaW4gbWVtb3J5Lg0KKyAgICBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXAqIGdyb3VwID0gbV9jYWNoZXNJbk1lbW9yeS5nZXQobWFuaWZlc3RVUkwpOw0KKyAgICBpZiAo
Z3JvdXApDQorICAgICAgICBjYWNoZUdyb3VwTWFkZU9ic29sZXRlKGdyb3VwKTsNCisgICAgZWxz
ZSB7DQorICAgICAgICAvLyBUaGUgY2FjaGUgZ3JvdXAgaXMgbm90IGluIG1lbW9yeSwgc28gcmVt
b3ZlIGl0IGZyb20gdGhlIGRpc2suDQorICAgICAgICBvcGVuRGF0YWJhc2UoZmFsc2UpOw0KKyAg
ICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQ0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsNCisNCisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBpZFN0YXRlbWVudChtX2RhdGFiYXNlLCAi
U0VMRUNUIGlkIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbWFuaWZlc3RVUkw9PyIpOw0KKyAgICAg
ICAgaWYgKGlkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykNCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7DQorDQorICAgICAgICBpZFN0YXRlbWVudC5iaW5kVGV4dCgxLCBtYW5p
ZmVzdFVSTCk7DQorDQorICAgICAgICBpbnQgcmVzdWx0ID0gaWRTdGF0ZW1lbnQuc3RlcCgpOw0K
KyAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKQ0KKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsNCisNCisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0Um93KSB7DQorICAg
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgbG9hZCBjYWNoZSBncm91cCBpZCwgZXJyb3Ig
XCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7DQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7DQorDQorICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgY2Fj
aGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENhY2hlcyBXSEVSRSBjYWNoZUdy
b3VwPT8iKTsNCisgICAgICAgIGlmIChjYWNoZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVz
dWx0T2spDQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZUdyb3Vw
cyBXSEVSRSBpZD0/Iik7DQorICAgICAgICBpZiAoZ3JvdXBTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTFJlc3VsdE9rKQ0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisNCisgICAgICAgIGNh
Y2hlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBncm91cElkKTsNCisgICAgICAgIGV4ZWN1dGVTdGF0
ZW1lbnQoY2FjaGVTdGF0ZW1lbnQpOw0KKyAgICAgICAgZ3JvdXBTdGF0ZW1lbnQuYmluZEludDY0
KDEsIGdyb3VwSWQpOw0KKyAgICAgICAgZXhlY3V0ZVN0YXRlbWVudChncm91cFN0YXRlbWVudCk7
DQorICAgIH0NCisNCisgICAgZGVsZXRlVHJhbnNhY3Rpb24uY29tbWl0KCk7DQorICAgIHJldHVy
biB0cnVlOw0KK30NCisNCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjaGVja0Zvck1h
eFNpemVSZWFjaGVkKGludDY0X3QgZmFpbGVkQ2FjaGVTaXplLCBDaHJvbWVDbGllbnQqIGNsaWVu
dCwgU1FMaXRlVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQ0KK3sNCisgICAgQVNTRVJUKGNsaWVu
dCk7DQorICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7DQorICAgIGlmIChtX2RhdGFiYXNlLmxhc3RF
cnJvcigpID09IFNRTElURV9GVUxMKSB7DQorICAgICAgICAvLyBUaGUgbGFzdCBTUUwgc3RhdGVt
ZW50IGV4ZWN1dGlvbiBmYWlsZWQgZHVlIHRvIHJlYWNoaW5nIG1heCBhcHAgY2FjaGUgc2l6ZS4N
CisgICAgICAgIGludDY0X3Qgc2l6ZVRvRnJlZSA9IDA7DQorICAgICAgICBpZiAoIXNwYWNlTmVl
ZGVkKGNsaWVudC0+bWF4QXBwQ2FjaGVTaXplKCksIGZhaWxlZENhY2hlU2l6ZSwgJnNpemVUb0Zy
ZWUpKQ0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIC8vIFJvbGxiYWNrIHRoZSB0cmFu
c2FjdGlvbiBwcmlvciB0byBpbnZva2luZyB0aGUgY2FsbGJhY2suDQorICAgICAgICAvLyBUaGlz
IHdpbGwgYWxsb3cgdGhlIGNhbGxiYWNrIHRvIHJ1biBpdHMgb3duIHRyYW5zYWN0aW9uDQorICAg
ICAgICAvLyAoZS5nLiB0byBwZXJmb3JtIGNsZWFudXApIGlmIGl0IHNvIHdpc2hlcy4NCisgICAg
ICAgIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOw0KKyAgICAgICAgY2xpZW50LT5yZWFjaGVkTWF4
QXBwQ2FjaGVTaXplKHNpemVUb0ZyZWUpOw0KKyAgICB9Cit9CisNCitib29sIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpzcGFjZU5lZWRlZChpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSwgaW50NjRf
dCBmYWlsZWRDYWNoZVNpemUsIGludDY0X3QqIHNpemVUb0ZyZWUpDQorew0KKyAgICBBU1NFUlQo
c2l6ZVRvRnJlZSk7DQorICAgIGludDY0X3QgY3VycmVudFNpemUgPSAwOw0KKyAgICBpZiAoIWdl
dEZpbGVTaXplKG1fY2FjaGVGaWxlLCBjdXJyZW50U2l6ZSkpDQorICAgICAgICByZXR1cm4gZmFs
c2U7DQorDQorICAgIC8vIERldGVybWluZSB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2Ugd2UgaGF2
ZSBhdmFpbGFibGUuDQorICAgIGludDY0X3QgdG90YWxBdmFpbGFibGVTaXplID0gMDsNCisgICAg
aWYgKG1heEFwcENhY2hlU2l6ZSA8IGN1cnJlbnRTaXplKSB7DQorICAgICAgICAvLyBUaGUgbWF4
IHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgYXBwIGNhY2hlIGZp
bGUuDQorICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIGNsaWVudCBwcmV2aW91c2x5
IGltcG9zZWQgYSBsYXJnZXIgbWF4IHNpemUNCisgICAgICAgIC8vIHZhbHVlIGFuZCB0aGUgYXBw
IGNhY2hlIGZpbGUgaGFzIGFscmVhZHkgZ3Jvd24gYmV5b25kIHRoZSBjdXJyZW50DQorICAgICAg
ICAvLyBtYXggc2l6ZSB2YWx1ZS4NCisgICAgICAgIC8vIFRoZSBhbW91bnQgb2YgZnJlZSBzcGFj
ZSBpcyBqdXN0IHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBpbnNpZGUNCisgICAgICAgIC8vIHRo
ZSBkYXRhYmFzZSBmaWxlLiBOb3RlIHRoYXQgdGhpcyBpcyBhbHdheXMgMCBpZiBTUUxpdGUgaXMg
Y29tcGlsZWQNCisgICAgICAgIC8vIHdpdGggQVVUT19WQUNVVU0gPSAxLg0KKyAgICAgICAgdG90
YWxBdmFpbGFibGVTaXplID0gbV9kYXRhYmFzZS5mcmVlU3BhY2VTaXplKCk7DQorICAgIH0gZWxz
ZSB7DQorICAgICAgICAvLyBUaGUgbWF4IHNpemUgaXMgdGhlIHNhbWUgb3IgbGFyZ2VyIHRoYW4g
dGhlIGN1cnJlbnQgc2l6ZS4NCisgICAgICAgIC8vIFRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBh
dmFpbGFibGUgaXMgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlDQorICAgICAgICAvLyBpbnNpZGUg
dGhlIGRhdGFiYXNlIGZpbGUgcGx1cyB0aGUgYW1vdW50IHdlIGNhbiBncm93IHVudGlsIHdlIGhp
dA0KKyAgICAgICAgLy8gdGhlIG1heCBzaXplLg0KKyAgICAgICAgdG90YWxBdmFpbGFibGVTaXpl
ID0gKG1heEFwcENhY2hlU2l6ZSAtIGN1cnJlbnRTaXplKSArIG1fZGF0YWJhc2UuZnJlZVNwYWNl
U2l6ZSgpOw0KKyAgICB9DQorDQorICAgIC8vIFRoZSBzcGFjZSBuZWVkZWQgdG8gYmUgZnJlZWQg
aW4gb3JkZXIgdG8gYWNjb21vZGF0ZSB0aGUgZmFpbGVkIGNhY2hlIGlzDQorICAgIC8vIHRoZSBz
aXplIG9mIHRoZSBmYWlsZWQgY2FjaGUgbWludXMgYW55IGFscmVhZHkgYXZhaWxhYmxlIGZyZWUg
c3BhY2UuDQorICAgICpzaXplVG9GcmVlID0gZmFpbGVkQ2FjaGVTaXplIC0gdG90YWxBdmFpbGFi
bGVTaXplOw0KKyAgICAvLyBUaGUgc3BhY2UgbmVlZGVkIHZhbHVlIG11c3QgYmUgcG9zaXRpdmUg
KG9yIGVsc2UgdGhlIHRvdGFsIGFscmVhZHkNCisgICAgLy8gYXZhaWxhYmxlIGZyZWUgc3BhY2Ug
d291bGQgYmUgbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGZhaWxlZCBjYWNoZSBhbmQNCisg
ICAgLy8gc2F2aW5nIG9mIHRoZSBjYWNoZSBzaG91bGQgaGF2ZSBuZXZlciBmYWlsZWQpLg0KKyAg
ICBBU1NFUlQoKnNpemVUb0ZyZWUpOw0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQorCiBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZSYgY2FjaGVTdG9yYWdlKCkKIHsKICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLCBzdG9yYWdlLCAoKSk7CkluZGV4OiBXZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgJKHJl
dmlzaW9uIDQ0NjAyKQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlOwogY2xhc3MgQXBwbGljYXRpb25DYWNoZUdy
b3VwOwogY2xhc3MgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOworY2xhc3MgQ2hyb21lQ2xpZW50
OwogY2xhc3MgS1VSTDsKIGNsYXNzIFJlc291cmNlU3RvcmFnZUlESm91cm5hbDsKICAgICAKQEAg
LTY1LDYgKzY2LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgYm9vbCBzdG9yZUNvcHlP
ZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcGxpY2F0aW9uQ2FjaGUqKTsK
IAorICAgIGJvb2wgbWFuaWZlc3RVUkxzKFZlY3RvcjxLVVJMPiogdXJscyk7DQorICAgIGJvb2wg
Y2FjaGVHcm91cFNpemUoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50NjRfdCogc2l6ZSk7
DQorICAgIGJvb2wgZGVsZXRlQ2FjaGVHcm91cChjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMKTsK
KwogcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IGxvYWRDYWNoZSh1
bnNpZ25lZCBzdG9yYWdlSUQpOwogICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogbG9hZENhY2hl
R3JvdXAoY29uc3QgS1VSTCYgbWFuaWZlc3RVUkwpOwpAQCAtODEsOCArODYsMTIgQEAgcHJpdmF0
ZToKICAgICAKICAgICBib29sIGV4ZWN1dGVTdGF0ZW1lbnQoU1FMaXRlU3RhdGVtZW50Jik7CiAg
ICAgYm9vbCBleGVjdXRlU1FMQ29tbWFuZChjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQgY2hl
Y2tGb3JNYXhTaXplUmVhY2hlZChpbnQ2NF90IGZhaWxlZENhY2hlU2l6ZSwgQ2hyb21lQ2xpZW50
KiBjbGllbnQsIFNRTGl0ZVRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbik7DQorICAgIGJvb2wgc3Bh
Y2VOZWVkZWQoaW50NjRfdCBtYXhBcHBDYWNoZVNpemUsIGludDY0X3QgZmFpbGVkQ2FjaGVTaXpl
LCBpbnQ2NF90KiBzaXplVG9GcmVlKTsKICAgICAKICAgICBTdHJpbmcgbV9jYWNoZURpcmVjdG9y
eTsKKyAgICBTdHJpbmcgbV9jYWNoZUZpbGU7CiAKICAgICBTUUxpdGVEYXRhYmFzZSBtX2RhdGFi
YXNlOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiA0NDYwMikKKysrIFdlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSwxOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNl
UXVvdGEoRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkgPSAwOwogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICAvLyBSZXR1cm5z
IHRoZSBtYXhpbXVtIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgYXBwbGljYXRpb24gY2FjaGVzIGZp
bGUuCisgICAgICAgIHZpcnR1YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKSA9IDA7CisKKyAg
ICAgICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBnZXRz
IGhpdHMgdGhlIG1heGltdW0gc2l6ZS4KKyAgICAgICAgLy8gVGhlIGNocm9tZSBjbGllbnQgd291
bGQgbmVlZCB0byB0YWtlIHNvbWUgYWN0aW9uIHN1Y2ggYXMgZXZpY3Rpbmcgc29tZQorICAgICAg
ICAvLyBvbGQgY2FjaGVzLgorICAgICAgICAvLyBzcGFjZU5lZWRlZCBkZW5vdGVzIHRoZSBhbW91
bnQgb2Ygc3BhY2UgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGZyZWVkCisgICAgICAgIC8vIGluIG9y
ZGVyIGZvciB0aGUgb3BlcmF0aW9uIHRoYXQgY2F1c2VkIHRoZSBvdXQtb2Ytc3BhY2UgY29uZGl0
aW9uIHRvCisgICAgICAgIC8vIHN1Y2NlZWQuCisgICAgICAgIHZpcnR1YWwgdm9pZCByZWFjaGVk
TWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpID0gMDsKKyNlbmRpZgorCiAjaWYg
RU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGFzaGJvYXJk
UmVnaW9uc0NoYW5nZWQoKTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0
ZURhdGFiYXNlLmNwcAkocmV2aXNpb24gNDQ2MDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsMTggQEAgaW50
IFNRTGl0ZURhdGFiYXNlOjpwYWdlU2l6ZSgpCiAgICAgcmV0dXJuIG1fcGFnZVNpemU7CiB9CiAK
K2ludDY0X3QgU1FMaXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNpemUoKQoreworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKKyAgICBlbmFibGVBdXRob3JpemVyKGZhbHNl
KTsKKyAgICAvLyBOb3RlOiBmcmVlbGlzdF9jb3VudCB3YXMgYWRkZWQgaW4gU1FMaXRlIDMuNC4x
LgorICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgZnJlZWxpc3Rf
Y291bnQiKTsKKyAgICBpbnQ2NF90IHNpemUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkg
KiBwYWdlU2l6ZSgpOworCisgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKKyAgICByZXR1cm4g
c2l6ZTsKK30KKwogdm9pZCBTUUxpdGVEYXRhYmFzZTo6c2V0U3luY2hyb25vdXMoU3luY2hyb25v
dXNQcmFnbWEgc3luYykKIHsKICAgICBleGVjdXRlQ29tbWFuZChTdHJpbmc6OmZvcm1hdCgiUFJB
R01BIHN5bmNocm9ub3VzID0gJWkiLCBzeW5jKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVEYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZURhdGFiYXNlLmgJKHJldmlzaW9uIDQzMjUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsOSBAQCBwdWJsaWM6
CiAgICAgaW50NjRfdCBtYXhpbXVtU2l6ZSgpOwogICAgIHZvaWQgc2V0TWF4aW11bVNpemUoaW50
NjRfdCk7CiAgICAgCisgICAgLy8gR2V0cyB0aGUgbnVtYmVyIG9mIHVudXNlZCBieXRlcyBpbiB0
aGUgZGF0YWJhc2UgZmlsZS4KKyAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUoKTsKKwogICAgIC8v
IFRoZSBTUUxpdGUgU1lOQ0hST05PVVMgcHJhZ21hIGNhbiBiZSBlaXRoZXIgRlVMTCwgTk9STUFM
LCBvciBPRkYKICAgICAvLyBGVUxMIC0gQW55IHdyaXRpbmcgY2FsbHMgdG8gdGhlIERCIGJsb2Nr
IHVudGlsIHRoZSBkYXRhIGlzIGFjdHVhbGx5IG9uIHRoZSBkaXNrIHN1cmZhY2UKICAgICAvLyBO
T1JNQUwgLSBTUUxpdGUgcGF1c2VzIGF0IHNvbWUgY3JpdGljYWwgbW9tZW50cyB3aGVuIHdyaXRp
bmcsIGJ1dCBtdWNoIGxlc3MgdGhhbiBGVUxMCkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNDQ3NTcpCisrKyBX
ZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDA5
LTA2LTE3ICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEd0ay5jcHA6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
R3RrLmg6CisgICAgICAgIEFkZHMgZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZvbGxvd2lu
ZyBuZXcgQ2hyb21lQ2xpZW50IG1ldGhvZHM6CisgICAgICAgIC8vIFJldHVybnMgdGhlIG1heGlt
dW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBhcHBsaWNhdGlvbiBjYWNoZXMgZmlsZS4KKyAgICAg
ICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpID0gMDsKKworICAgICAgICAvLyBD
YWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGNhY2hlIGdldHMgaGl0cyB0aGUg
bWF4aW11bSBzaXplLgorICAgICAgICAvLyBUaGUgY2hyb21lIGNsaWVudCB3b3VsZCBuZWVkIHRv
IHRha2Ugc29tZSBhY3Rpb24gc3VjaCBhcyBldmljdGluZyBzb21lCisgICAgICAgIC8vIG9sZCBj
YWNoZXMuCisgICAgICAgIC8vIHNwYWNlTmVlZGVkIGRlbm90ZXMgdGhlIGFtb3VudCBvZiBzcGFj
ZSB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgZnJlZWQKKyAgICAgICAgLy8gaW4gb3JkZXIgZm9yIHRo
ZSBvcGVyYXRpb24gdGhhdCBjYXVzZWQgdGhlIG91dC1vZi1zcGFjZSBjb25kaXRpb24gdG8KKyAg
ICAgICAgLy8gc3VjY2VlZC4KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNo
ZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkgPSAwOworCiAyMDA5LTA2LTE2ICBYYW4gTG9wZXog
IDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9u
aGEuCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
Y3BwCShyZXZpc2lvbiA0NDYwMikKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSwyMCBAQCB2b2lkIENo
cm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCitpbnQ2NF90IENocm9tZUNsaWVudDo6bWF4QXBw
Q2FjaGVTaXplKCkKK3sKKyAgICAvLyBGSVhNRTogU2V0IGEgc2Vuc2libGUgc2l6ZS4KKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiA1ICogMTAyNCAqIDEwMjQ7Cit9CisKK3ZvaWQg
Q2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQp
Cit7CisgICAgLy8gRklYTUU6IEZyZWUgc29tZSBzcGFjZS4KK30KKyNlbmRpZgorCiB2b2lkIENo
cm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4g
cHJwRmlsZUNob29zZXIpCiB7CiAgICAgUmVmUHRyPEZpbGVDaG9vc2VyPiBjaG9vc2VyID0gcHJw
RmlsZUNob29zZXI7CkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmgJKHJldmlzaW9uIDQ0NjAyKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpT
dHJpbmcmKTsKICNlbmRpZgorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisg
ICAgICAgIHZpcnR1YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7CisjZW5k
aWYKICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChXZWJDb3JlOjpGcmFtZSosIFBh
c3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
Zm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKSB7IH0KSW5kZXg6IFdlYktp
dC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA0NDc1NykKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjEgQEAKKzIwMDktMDYtMTcgIGFuZHJlaXAgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQubW06CisgICAgICAgIEFkZHMgZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgdGhl
IGZvbGxvd2luZyBuZXcgQ2hyb21lQ2xpZW50IG1ldGhvZHM6CisgICAgICAgIC8vIFJldHVybnMg
dGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBhcHBsaWNhdGlvbiBjYWNoZXMgZmls
ZS4KKyAgICAgICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpID0gMDsKKworICAg
ICAgICAvLyBDYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGNhY2hlIGdldHMg
aGl0cyB0aGUgbWF4aW11bSBzaXplLgorICAgICAgICAvLyBUaGUgY2hyb21lIGNsaWVudCB3b3Vs
ZCBuZWVkIHRvIHRha2Ugc29tZSBhY3Rpb24gc3VjaCBhcyBldmljdGluZyBzb21lCisgICAgICAg
IC8vIG9sZCBjYWNoZXMuCisgICAgICAgIC8vIHNwYWNlTmVlZGVkIGRlbm90ZXMgdGhlIGFtb3Vu
dCBvZiBzcGFjZSB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgZnJlZWQKKyAgICAgICAgLy8gaW4gb3Jk
ZXIgZm9yIHRoZSBvcGVyYXRpb24gdGhhdCBjYXVzZWQgdGhlIG91dC1vZi1zcGFjZSBjb25kaXRp
b24gdG8KKyAgICAgICAgLy8gc3VjY2VlZC4KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRN
YXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkgPSAwOworCiAyMDA5LTA2LTE2ICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhbiBCZXJuc3RlaW4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaAkocmV2aXNpb24gNDQ2MDIpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDEwIEBA
IHB1YmxpYzoKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVk
RGF0YWJhc2VRdW90YShXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgZGF0
YWJhc2VOYW1lKTsKICNlbmRpZgorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
CisgICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpOworICAgIHZpcnR1YWwgdm9p
ZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpOworI2VuZGlmCiAg
ICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CiAKICNpZiBFTkFCTEUoREFT
SEJPQVJEX1NVUFBPUlQpCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5tbQkocmV2aXNpb24gNDQ2MDIpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTM2LDYgKzUzNiwxOSBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1CiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKIH0KICNlbmRpZgorCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykKK2ludDY0X3QgV2ViQ2hyb21lQ2xpZW50OjptYXhBcHBDYWNoZVNpemUoKQor
eworICAgIC8vIEZJWE1FOiBTZXQgYSBzZW5zaWJsZSBzaXplLgorICAgIHJldHVybiA1ICogMTAy
NCAqIDEwMjQ7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVT
aXplKGludDY0X3Qgc3BhY2VOZWVkZWQpCit7CisgICAgLy8gRklYTUU6IEZyZWUgc29tZSBzcGFj
ZS4KK30KKyNlbmRpZgogICAgIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBvcHVsYXRlVmlzaXRl
ZExpbmtzKCkKIHsKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNDQ3NTcpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDYtMTcgIEFuZHJlaSBQb3Bl
c2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0Lmg6CisgICAgICAgIC8vIFJl
dHVybnMgdGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBhcHBsaWNhdGlvbiBjYWNo
ZXMgZmlsZS4KKyAgICAgICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpID0gMDsK
KworICAgICAgICAvLyBDYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGNhY2hl
IGdldHMgaGl0cyB0aGUgbWF4aW11bSBzaXplLgorICAgICAgICAvLyBUaGUgY2hyb21lIGNsaWVu
dCB3b3VsZCBuZWVkIHRvIHRha2Ugc29tZSBhY3Rpb24gc3VjaCBhcyBldmljdGluZyBzb21lCisg
ICAgICAgIC8vIG9sZCBjYWNoZXMuCisgICAgICAgIC8vIHNwYWNlTmVlZGVkIGRlbm90ZXMgdGhl
IGFtb3VudCBvZiBzcGFjZSB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgZnJlZWQKKyAgICAgICAgLy8g
aW4gb3JkZXIgZm9yIHRoZSBvcGVyYXRpb24gdGhhdCBjYXVzZWQgdGhlIG91dC1vZi1zcGFjZSBj
b25kaXRpb24gdG8KKyAgICAgICAgLy8gc3VjY2VlZC4KKyAgICAgICAgdmlydHVhbCB2b2lkIHJl
YWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkgPSAwOworCiAyMDA5LTA2
LTE3ICBNYXJrdXMgR29ldHogPE1hcmt1cy5Hb2V0ekBub2tpYS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDQ0NjAyKQorKysgV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDYgKzM5
OSwyMCBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpleGNlZWRlZERhdGFiYXNlUXVvCiB9CiAjZW5k
aWYKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCitpbnQ2NF90IENocm9t
ZUNsaWVudFF0OjptYXhBcHBDYWNoZVNpemUoKQoreworICAgIC8vIEZJWE1FOiBTZXQgYSBzZW5z
aWJsZSBzaXplLgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDUgKiAxMDI0ICog
MTAyNDsKK30KKwordm9pZCBDaHJvbWVDbGllbnRRdDo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZShp
bnQ2NF90IHNwYWNlTmVlZGVkKQoreworICAgIC8vIEZJWE1FOiBGcmVlIHNvbWUgc3BhY2UuCit9
CisjZW5kaWYKKwogdm9pZCBDaHJvbWVDbGllbnRRdDo6cnVuT3BlblBhbmVsKEZyYW1lKiBmcmFt
ZSwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gcHJwRmlsZUNob29zZXIpCiB7CiAgICAgUmVmUHRy
PEZpbGVDaG9vc2VyPiBmaWxlQ2hvb3NlciA9IHBycEZpbGVDaG9vc2VyOwpJbmRleDogV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHJldmlzaW9uIDQ0NjAyKQorKysg
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTExNiw2ICsxMTYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShEQVRB
QkFTRSkKICAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSos
IGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykKKyAgICAgICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVk
KTsKKyNlbmRpZgogICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFz
c1JlZlB0cjxGaWxlQ2hvb3Nlcj4pOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVE
aWRDaGFuZ2UoY29uc3QgTm9kZSopIHsgfQpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0NzU3KQorKysgV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwOS0w
Ni0xNyAgQW5kcmVpIFBvcGVzY3UgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHA6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lmg6CisgICAgICAgIC8vIFJldHVybnMgdGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIHRo
ZSBhcHBsaWNhdGlvbiBjYWNoZXMgZmlsZS4KKyAgICAgICAgdmlydHVhbCBpbnQ2NF90IG1heEFw
cENhY2hlU2l6ZSgpID0gMDsKKworICAgICAgICAvLyBDYWxsYmFjayBpbnZva2VkIHdoZW4gdGhl
IGFwcGxpY2F0aW9uIGNhY2hlIGdldHMgaGl0cyB0aGUgbWF4aW11bSBzaXplLgorICAgICAgICAv
LyBUaGUgY2hyb21lIGNsaWVudCB3b3VsZCBuZWVkIHRvIHRha2Ugc29tZSBhY3Rpb24gc3VjaCBh
cyBldmljdGluZyBzb21lCisgICAgICAgIC8vIG9sZCBjYWNoZXMuCisgICAgICAgIC8vIHNwYWNl
TmVlZGVkIGRlbm90ZXMgdGhlIGFtb3VudCBvZiBzcGFjZSB0aGF0IHdvdWxkIG5lZWQgdG8gYmUg
ZnJlZWQKKyAgICAgICAgLy8gaW4gb3JkZXIgZm9yIHRoZSBvcGVyYXRpb24gdGhhdCBjYXVzZWQg
dGhlIG91dC1vZi1zcGFjZSBjb25kaXRpb24gdG8KKyAgICAgICAgLy8gc3VjY2VlZC4KKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRl
ZCkgPSAwOworCiAyMDA5LTA2LTE2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gNDQ2MDIp
CisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU0NSw2ICs1NDUsMjAgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4Y2Vl
ZGVkRGF0YWJhc2VRdQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKQoraW50NjRfdCBXZWJDaHJvbWVDbGllbnQ6Om1heEFwcENhY2hlU2l6ZSgpCit7Cisg
ICAgLy8gRklYTUU6IFNldCBhIHNlbnNpYmxlIHNpemUuCisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gNSAqIDEwMjQgKiAxMDI0OworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6
cmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKQoreworICAgIC8vIEZJ
WE1FOiBGcmVlIHNvbWUgc3BhY2UuCit9CisjZW5kaWYKKwogdm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnBvcHVsYXRlVmlzaXRlZExpbmtzKCkKIHsKICAgICBXZWJIaXN0b3J5KiBoaXN0b3J5ID0gV2Vi
SGlzdG9yeTo6c2hhcmVkSGlzdG9yeSgpOwpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA0NDYwMikKKysrIFdlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsx
MDksMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEo
V2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKICNlbmRpZgogCisjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICB2aXJ0dWFsIGludDY0X3QgbWF4
QXBwQ2FjaGVTaXplKCk7CisgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUo
aW50NjRfdCBzcGFjZU5lZWRlZCk7CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0
ZVZpc2l0ZWRMaW5rcygpOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsYmFy
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdl
YkNvcmU6OlNjcm9sbGJhckNvbnRyb2xTaXplLCAKSW5kZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2aXNpb24gNDQ3NTcpCisrKyBX
ZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDkt
MDYtMTcgIEFuZHJlaSBQb3Blc2N1IDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Nocm9t
ZUNsaWVudFd4LmNwcDoKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4Lmg6
CisgICAgICAgIC8vIFJldHVybnMgdGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBh
cHBsaWNhdGlvbiBjYWNoZXMgZmlsZS4KKyAgICAgICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENh
Y2hlU2l6ZSgpID0gMDsKKworICAgICAgICAvLyBDYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIGFw
cGxpY2F0aW9uIGNhY2hlIGdldHMgaGl0cyB0aGUgbWF4aW11bSBzaXplLgorICAgICAgICAvLyBU
aGUgY2hyb21lIGNsaWVudCB3b3VsZCBuZWVkIHRvIHRha2Ugc29tZSBhY3Rpb24gc3VjaCBhcyBl
dmljdGluZyBzb21lCisgICAgICAgIC8vIG9sZCBjYWNoZXMuCisgICAgICAgIC8vIHNwYWNlTmVl
ZGVkIGRlbm90ZXMgdGhlIGFtb3VudCBvZiBzcGFjZSB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgZnJl
ZWQKKyAgICAgICAgLy8gaW4gb3JkZXIgZm9yIHRoZSBvcGVyYXRpb24gdGhhdCBjYXVzZWQgdGhl
IG91dC1vZi1zcGFjZSBjb25kaXRpb24gdG8KKyAgICAgICAgLy8gc3VjY2VlZC4KKyAgICAgICAg
dmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkg
PSAwOworCiAyMDA5LTA2LTA5ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMu
Y29tPgogCiAgICAgICAgIHd4IGJ1aWxkIGZpeCwgYWRkaW5nIEpTQ29yZS9hc3NlbWJsZXIgdG8g
dGhlIGxpc3Qgb2YgaW5jbHVkZSBkaXJzLgpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQv
Q2hyb21lQ2xpZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0
L0Nocm9tZUNsaWVudFd4LmNwcAkocmV2aXNpb24gNDQ2MDIpCisrKyBXZWJLaXQvd3gvV2ViS2l0
U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Myw2ICszODMs
MjAgQEAgdm9pZCBDaHJvbWVDbGllbnRXeDo6ZXhjZWVkZWREYXRhYmFzZVF1bwogfQogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQoraW50NjRfdCBDaHJvbWVD
bGllbnRXeDo6bWF4QXBwQ2FjaGVTaXplKCkKK3sKKyAgICAvLyBGSVhNRTogU2V0IGEgc2Vuc2li
bGUgc2l6ZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiA1ICogMTAyNCAqIDEw
MjQ7Cit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50V3g6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50
NjRfdCBzcGFjZU5lZWRlZCkKK3sKKyAgICAvLyBGSVhNRTogRnJlZSBzb21lIHNwYWNlLgorfQor
I2VuZGlmCisKIHZvaWQgQ2hyb21lQ2xpZW50V3g6OnNjcm9sbChjb25zdCBJbnRTaXplJiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Cklu
ZGV4OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmgJKHJldmlzaW9uIDQ0
NjAyKQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwxMiBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKERBVEFCQVNF
KQogICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25zdCBT
dHJpbmcmKTsKICNlbmRpZgorCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykK
KyAgICB2aXJ0dWFsIGludDY0X3QgbWF4QXBwQ2FjaGVTaXplKCk7CisgICAgdmlydHVhbCB2b2lk
IHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7CisjZW5kaWYKKwog
ICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9v
c2VyPik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUq
KSB7IH0K
</data>
<flag name="review"
          id="16077"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32160</attachid>
            <date>2009-07-01 17:00:37 -0700</date>
            <delta_ts>2009-07-01 17:08:10 -0700</delta_ts>
            <desc>New proposal to limit the maximum size of the application cache (take 7)</desc>
            <filename>22700.patch</filename>
            <type>text/plain</type>
            <size>66355</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDktMDctMDEgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3Q6IGh0dHAvdGVzdHMvYXBwY2FjaGUvbWF4LXNpemUuaHRtbAorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMAorIAorICAgICAgICBodHRw
czovL2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1kZXYvMjAwOS1NYXkvMDA3NTYw
Lmh0bWwKKyAKKyAgICAgICAgVGhpcyBjaGFuZ2UgaW1wbGVtZW50cyBhIG1lY2hhbmlzbSBmb3Ig
bGltaXRpbmcgdGhlIG1heGltdW0gc2l6ZSBvZgorICAgICAgICB0aGUgYXBwbGljYXRpb24gY2Fj
aGUgZmlsZS4gV2hlbiB0aGlzIHNpemUgaXMgcmVhY2hlZCwgYSBDaHJvbWVDbGllbnQKKyAgICAg
ICAgY2FsbGJhY2sgaXMgaW52b2tlZCBhc3luY2hyb25vdXNseSBhbmQgdGhlIHNhdmluZyBvZiB0
aGUgbGFzdCAoZmFpbGVkKQorICAgICAgICBjYWNoZSBpcyByZXRyaWVkIGF1dG9tYXRpY2FsbHku
CisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBhbHNvIGV4dGVuZHMgdGhlIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlIEFQSSBieSBhbGxvd2luZworICAgICAgICBhIGNsaWVudCB0byBxdWVy
eSBvciBtb2RpZnkgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIHdpdGhvdXQgaGF2aW5nIHRvCisgICAg
ICAgIGxvYWQgYW55IHJlc291cmNlcyBpbnRvIG1lbW9yeS4KKworICAgICAgICAqIFdlYkNvcmUu
YmFzZS5leHA6CisgICAgICAgIEV4cG9ydHMgdGhlIHN5bWJvbHMgcmVxdWlyZWQgYnkgdGhlIER1
bXBSZW5kZXJUcmVlIHRlc3QgYXBwbGljYXRpb24uCisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oOgorICAgICAgICBBZGRzIGVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgQ2hy
b21lQ2xpZW50IG1ldGhvZHMuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGUuY3BwOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmg6
CisgICAgICAgIEFkZHMgdGhlIGFiaWxpdHkgdG8gY2FsY3VsYXRlIHRoZSBhcHByb3hpbWF0ZSBz
aXplIG9mIGFuIEFwcGxpY2F0aW9uQ2FjaGUgb2JqZWN0LgorICAgICAgICAqIGxvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaDoKKyAgICAgICAgSW52b2tlcyB0aGUgQ2hyb21lQ2xp
ZW50IGNhbGxiYWNrIHdoZW4gdGhlIHN0b3JhZ2UgbGF5ZXIgcnVucyBvdXQgb2Ygc3BhY2UuCisJ
CUFmdGVyIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLCB3ZSByZS1hdHRlbXB0IHRvIHN0b3JlIHRo
ZSBuZXdlc3QgY2FjaGUsCisJCWluIGNhc2UgdGhlIENocm9tZUNsaWVudCBoYXMgZnJlZWQgc29t
ZSBzcGFjZS4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmg6CisgICAgICAgIEFkZHMgdGhlIGFiaWxpdHkgdG8gY2FsY3VsYXRlIHRoZSBhcHByb3hp
bWF0ZSBzaXplIG9mIGFuIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSBvYmplY3QuCisgICAgICAg
ICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAg
KiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaDoKKyAgICAgICAgRW5m
b3JjZXMgYSBtYXhpbXVtIHNpemUgZm9yIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBmaWxlLgorICAg
ICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIEFkZHMgYSBuZXcgY2FsbGJhY2ss
IGludm9rZWQgd2hlbiB0aGUgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UgcmVwb3J0cyB0aGF0IGl0
IGhhcworICAgICAgICByZWFjaGVkIHRoZSBtYXhpbXVtIHNpemUgZm9yIGl0cyBkYXRhYmFzZSBm
aWxlLgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmg6CisgICAgICAgIEFkZHMgYSBuZXcgbWV0
aG9kIHRoYXQgYWxsb3dzIHF1ZXJ5aW5nIGZvciB0aGUgYW1vdW50IG9mIHVudXNlZCBzcGFjZSBp
bnNpZGUgdGhlCisgICAgICAgIGFwcGxpY2F0aW9uIGNhY2hlIGRhdGFiYXNlIGZpbGUuCisKIDIw
MDktMDctMDEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNDU0NTEpCisrKyBX
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw2ICs0MzksOCBA
QCBfX1pON1dlYkNvcmUyMmV4dGVybmFsUmVwcmVzZW50YXRpb25FUE5TCiBfX1pON1dlYkNvcmUy
M0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTZzdG9yZUNvcHlPZkNhY2hlRVJLTlNfNlN0cmluZ0VQ
TlNfMTZBcHBsaWNhdGlvbkNhY2hlRQogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTE3c2V0Q2FjaGVEaXJlY3RvcnlFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMjNBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTVlbXB0eUV2CitfX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlMTRzZXRNYXhpbXVtU2l6ZUV4CitfX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlMTh2YWN1dW1EYXRhYmFzZUZpbGVFdgogX19aTjdXZWJDb3JlMjNSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZEMxRVBOU184RG9jdW1lbnRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTZEb2N1
bWVudEZyYWdtZW50RUVFYmJiYmJOU18xMEVkaXRBY3Rpb25FCiBfX1pON1dlYkNvcmUyM2NyZWF0
ZUZyYWdtZW50RnJvbU5vZGVzRVBOU184RG9jdW1lbnRFUktOM1dURjZWZWN0b3JJUE5TXzROb2Rl
RUxtMEVFRQogX19aTjdXZWJDb3JlMjRCaW5hcnlQcm9wZXJ0eUxpc3RXcml0ZXIxN3dyaXRlUHJv
cGVydHlMaXN0RXYKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiA0NTQ1MSkKKysr
IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiAr
MTMzLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3Rh
KEZyYW1lKiwgY29uc3QgU3RyaW5nJikgeyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCisgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNp
emUoaW50NjRfdCkgeyB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwo
RnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
Zm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUqKSB7IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEFwcGxpY2F0aW9uQ2FjaGU6
OkFwcGxpY2F0aW9uQ2FjaGUoKQogICAgIDogbV9ncm91cCgwKQogICAgICwgbV9tYW5pZmVzdCgw
KQorICAgICwgbV9zaXplKDApCiAgICAgLCBtX3N0b3JhZ2VJRCgwKQogewogfQpAQCAtODYsNyAr
ODcsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmFkZFJlc291cmNlKFBhc3NSCiAgICAgICAg
IC8vIEFkZCB0aGUgcmVzb3VyY2UgdG8gdGhlIHN0b3JhZ2UuCiAgICAgICAgIGNhY2hlU3RvcmFn
ZSgpLnN0b3JlKHJlc291cmNlLmdldCgpLCB0aGlzKTsKICAgICB9Ci0gICAgCisKKyAgICBtX3Np
emUgKz0gcmVzb3VyY2UtPnNpemUoKTsKKwogICAgIG1fcmVzb3VyY2VzLnNldCh1cmwsIHJlc291
cmNlKTsKIH0KIApAQCAtMTAwLDcgKzEwMyw5IEBAIHVuc2lnbmVkIEFwcGxpY2F0aW9uQ2FjaGU6
OnJlbW92ZVJlc291cmMKICAgICB1bnNpZ25lZCB0eXBlID0gaXQtPnNlY29uZC0+dHlwZSgpOwog
CiAgICAgbV9yZXNvdXJjZXMucmVtb3ZlKGl0KTsKLSAgICAKKworICAgIG1fc2l6ZSAtPSBpdC0+
c2Vjb25kLT5zaXplKCk7CisKICAgICByZXR1cm4gdHlwZTsKIH0gICAgCiAgICAgCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oCShyZXZpc2lvbiA0NTQ1
MSkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODcsNiArODcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGJvb2wg
cmVxdWVzdElzSFRUUE9ySFRUUFNHZXQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKKyAgICBp
bnQ2NF90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKwogcHJpdmF0ZToKICAgICBB
cHBsaWNhdGlvbkNhY2hlKCk7CiAgICAgCkBAIC05Nyw2ICs5OSw5IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPEtVUkw+IG1fb25saW5lV2hpdGVsaXN0OwogICAgIEZhbGxiYWNrVVJMVmVjdG9yIG1f
ZmFsbGJhY2tVUkxzOwogCisgICAgLy8gVGhlIHRvdGFsIHNpemUgb2YgdGhlIHJlc291cmNlcyBi
ZWxvbmdpbmcgdG8gdGhpcyBBcHBsaWNhdGlvbiBDYWNoZSBpbnN0YW5jZS4KKyAgICBpbnQ2NF90
IG1fc2l6ZTsKKwogICAgIHVuc2lnbmVkIG1fc3RvcmFnZUlEOwogfTsKIApJbmRleDogV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCShyZXZp
c2lvbiA0NTQ1MSkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVH
cm91cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcHBs
aWNhdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgiCiAj
aW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRPTUFwcGxpY2F0
aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKQEAgLTUzLDYgKzU0LDcgQEAgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjpBcHBsaWNhdGlvbkNhY2hlRwogICAgICwgbV9pc09ic29sZXRl
KGZhbHNlKQogICAgICwgbV9jb21wbGV0aW9uVHlwZShOb25lKQogICAgICwgbV9pc0NvcHkoaXND
b3B5KQorICAgICwgbV9jYWxsZWRDaHJvbWVDbGllbnQoZmFsc2UpCiB7CiB9CiAKQEAgLTY1Miw2
ICs2NTQsMTUgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZpbmlzaExvYQogICAg
IHN0YXJ0TG9hZGluZ0VudHJ5KCk7CiB9CiAKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpk
aWRSZWFjaE1heEFwcENhY2hlU2l6ZSgpCit7CisgICAgQVNTRVJUKG1fZnJhbWUpOworICAgIEFT
U0VSVChtX2NhY2hlQmVpbmdVcGRhdGVkKTsKKyAgICBtX2ZyYW1lLT5wYWdlKCktPmNocm9tZSgp
LT5jbGllbnQoKS0+cmVhY2hlZE1heEFwcENhY2hlU2l6ZShjYWNoZVN0b3JhZ2UoKS5zcGFjZU5l
ZWRlZChtX2NhY2hlQmVpbmdVcGRhdGVkLT5zaXplKCkpKTsKKyAgICBtX2NhbGxlZENocm9tZUNs
aWVudCA9IHRydWU7CisgICAgY2hlY2tJZkxvYWRJc0NvbXBsZXRlKCk7Cit9CisKIHZvaWQgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjpjYWNoZVVwZGF0ZUZhaWxlZCgpCiB7CiAgICAgc3RvcExvYWRp
bmcoKTsKQEAgLTczMCw3ICs3NDEsMTUgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNo
ZWNrSWZMb2FkSQogICAgICAgICAvLyBGSVhNRTogRmV0Y2ggdGhlIHJlc291cmNlIGZyb20gbWFu
aWZlc3QgVVJMIGFnYWluLCBhbmQgY2hlY2sgd2hldGhlciBpdCBpcyBpZGVudGljYWwgdG8gdGhl
IG9uZSB1c2VkIGZvciB1cGRhdGUgKGluIGNhc2UgdGhlIGFwcGxpY2F0aW9uIHdhcyB1cGdyYWRl
ZCBzZXJ2ZXItc2lkZSBpbiB0aGUgbWVhbndoaWxlKS4gKDxyZGFyOi8vcHJvYmxlbS82NDY3NjI1
PikKIAogICAgICAgICBBU1NFUlQobV9jYWNoZUJlaW5nVXBkYXRlZCk7Ci0gICAgICAgIG1fY2Fj
aGVCZWluZ1VwZGF0ZWQtPnNldE1hbmlmZXN0UmVzb3VyY2UobV9tYW5pZmVzdFJlc291cmNlLnJl
bGVhc2UoKSk7CisgICAgICAgIGlmIChtX21hbmlmZXN0UmVzb3VyY2UpCisgICAgICAgICAgICBt
X2NhY2hlQmVpbmdVcGRhdGVkLT5zZXRNYW5pZmVzdFJlc291cmNlKG1fbWFuaWZlc3RSZXNvdXJj
ZS5yZWxlYXNlKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbiBnZXQg
aGVyZSBhcyBhIHJlc3VsdCBvZiByZXRyeWluZyB0aGUgQ29tcGxldGUgc3RlcCwgZm9sbG93aW5n
CisgICAgICAgICAgICAvLyBhIGZhaWx1cmUgb2YgdGhlIGNhY2hlIHN0b3JhZ2UgdG8gc2F2ZSB0
aGUgbmV3ZXN0IGNhY2hlIGR1ZSB0byBoaXR0aW5nCisgICAgICAgICAgICAvLyB0aGUgbWF4aW11
bSBzaXplLiBJbiBzdWNoIGEgY2FzZSwgbV9tYW5pZmVzdFJlc291cmNlIG1heSBiZSBOVUxMLCBh
cworICAgICAgICAgICAgLy8gdGhlIG1hbmlmZXN0IHdhcyBhbHJlYWR5IHNldCBvbiB0aGUgbmV3
ZXN0IGNhY2hlIG9iamVjdC4KKyAgICAgICAgICAgIEFTU0VSVChjYWNoZVN0b3JhZ2UoKS5pc01h
eGltdW1TaXplUmVhY2hlZCgpICYmIG1fY2FsbGVkQ2hyb21lQ2xpZW50KTsKKyAgICAgICAgfQog
CiAgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBvbGROZXdlc3RDYWNoZSA9IChtX25l
d2VzdENhY2hlID09IG1fY2FjaGVCZWluZ1VwZGF0ZWQpID8gMCA6IG1fbmV3ZXN0Q2FjaGU7CiAK
QEAgLTc0MiwyOCArNzYxLDQ0IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjaGVja0lm
TG9hZEkKICAgICAgICAgICAgIC8vIEZpcmUgdGhlIHN1Y2Nlc3MgZXZlbnRzLgogICAgICAgICAg
ICAgcG9zdExpc3RlbmVyVGFzayhpc1VwZ3JhZGVBdHRlbXB0ID8gJkRPTUFwcGxpY2F0aW9uQ2Fj
aGU6OmNhbGxVcGRhdGVSZWFkeUxpc3RlbmVyIDogJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxD
YWNoZWRMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIFJ1biB0aGUgImNhY2hlIGZhaWx1cmUgc3RlcHMiCi0gICAg
ICAgICAgICAvLyBGaXJlIHRoZSBlcnJvciBldmVudHMgdG8gYWxsIHBlbmRpbmcgbWFzdGVyIGVu
dHJpZXMsIGFzIHdlbGwgYW55IG90aGVyIGNhY2hlIGhvc3RzCi0gICAgICAgICAgICAvLyBjdXJy
ZW50bHkgYXNzb2NpYXRlZCB3aXRoIGEgY2FjaGUgaW4gdGhpcyBncm91cC4KLSAgICAgICAgICAg
IHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvckxpc3RlbmVy
LCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOwotICAgICAgICAgICAgLy8gRGlzYXNzb2Np
YXRlIHRoZSBwZW5kaW5nIG1hc3RlciBlbnRyaWVzIGZyb20gdGhlIGZhaWxlZCBuZXcgY2FjaGUu
IE5vdGUgdGhhdAotICAgICAgICAgICAgLy8gYWxsIG90aGVyIGxvYWRlcnMgaW4gdGhlIG1fYXNz
b2NpYXRlZERvY3VtZW50TG9hZGVycyBhcmUgc3RpbGwgYXNzb2NpYXRlZCB3aXRoCi0gICAgICAg
ICAgICAvLyBzb21lIG90aGVyIGNhY2hlIGluIHRoaXMgZ3JvdXAuIFRoZXkgYXJlIG5vdCBhc3Nv
Y2lhdGVkIHdpdGggdGhlIGZhaWxlZCBuZXcgY2FjaGUuCi0KLSAgICAgICAgICAgIC8vIE5lZWQg
dG8gY29weSBsb2FkZXJzLCBiZWNhdXNlIHRoZSBjYWNoZSBncm91cCBtYXkgYmUgZGVzdHJveWVk
IGF0IHRoZSBlbmQgb2YgaXRlcmF0aW9uLgotICAgICAgICAgICAgVmVjdG9yPERvY3VtZW50TG9h
ZGVyKj4gbG9hZGVyczsKLSAgICAgICAgICAgIGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdNYXN0ZXJS
ZXNvdXJjZUxvYWRlcnMsIGxvYWRlcnMpOwotICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gbG9h
ZGVycy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBjb3VudDsg
KytpKQotICAgICAgICAgICAgICAgIGRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKGxvYWRlcnNb
aV0pOyAvLyBUaGlzIGNhbiBkZWxldGUgdGhpcyBncm91cC4KLQotICAgICAgICAgICAgLy8gUmVp
bnN0YXRlIHRoZSBvbGROZXdlc3RDYWNoZSwgaWYgdGhlcmUgd2FzIG9uZS4KLSAgICAgICAgICAg
IGlmIChvbGROZXdlc3RDYWNoZSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBkaXNj
YXJkIHRoZSBmYWlsZWQgbmV3IGNhY2hlLgotICAgICAgICAgICAgICAgIHNldE5ld2VzdENhY2hl
KG9sZE5ld2VzdENhY2hlLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIC8vIFdlIG11c3QgaGF2ZSBiZWVuIGRlbGV0ZWQgYnkgdGhlIGxhc3QgY2FsbCB0
byBkaXNhc3NvY2lhdGVEb2N1bWVudExvYWRlcigpLgorICAgICAgICAgICAgaWYgKGNhY2hlU3Rv
cmFnZSgpLmlzTWF4aW11bVNpemVSZWFjaGVkKCkgJiYgIW1fY2FsbGVkQ2hyb21lQ2xpZW50KSB7
CisgICAgICAgICAgICAgICAgLy8gV2UgcmFuIG91dCBvZiBzcGFjZS4gQWxsIHRoZSBjaGFuZ2Vz
IGluIHRoZSBjYWNoZSBzdG9yYWdlIGhhdmUKKyAgICAgICAgICAgICAgICAvLyBiZWVuIHJvbGxl
ZCBiYWNrLiBXZSByb2xsIGJhY2sgdG8gdGhlIHByZXZpb3VzIHN0YXRlIGluIGhlcmUsCisgICAg
ICAgICAgICAgICAgLy8gYXMgd2VsbCwgY2FsbCB0aGUgY2hyb21lIGNsaWVudCBhc3luY2hyb25v
dXNseSBhbmQgcmV0cnkgdG8KKyAgICAgICAgICAgICAgICAvLyBzYXZlIHRoZSBuZXcgY2FjaGUu
CisKKyAgICAgICAgICAgICAgICAvLyBTYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXcgY2FjaGUu
CisgICAgICAgICAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRlZCA9IG1fbmV3ZXN0Q2FjaGUucmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgIGlmIChvbGROZXdlc3RDYWNoZSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBSZWluc3RhdGUgdGhlIG9sZE5ld2VzdENhY2hlLgorICAgICAgICAgICAg
ICAgICAgICBzZXROZXdlc3RDYWNoZShvbGROZXdlc3RDYWNoZS5yZWxlYXNlKCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNoZVNp
emUoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFJ1biB0aGUgImNhY2hlIGZhaWx1cmUgc3RlcHMiCisgICAgICAgICAg
ICAgICAgLy8gRmlyZSB0aGUgZXJyb3IgZXZlbnRzIHRvIGFsbCBwZW5kaW5nIG1hc3RlciBlbnRy
aWVzLCBhcyB3ZWxsIGFueSBvdGhlciBjYWNoZSBob3N0cworICAgICAgICAgICAgICAgIC8vIGN1
cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBpbiB0aGlzIGdyb3VwLgorICAgICAgICAg
ICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvckxp
c3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOworICAgICAgICAgICAgICAgIC8v
IERpc2Fzc29jaWF0ZSB0aGUgcGVuZGluZyBtYXN0ZXIgZW50cmllcyBmcm9tIHRoZSBmYWlsZWQg
bmV3IGNhY2hlLiBOb3RlIHRoYXQKKyAgICAgICAgICAgICAgICAvLyBhbGwgb3RoZXIgbG9hZGVy
cyBpbiB0aGUgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzIGFyZSBzdGlsbCBhc3NvY2lhdGVk
IHdpdGgKKyAgICAgICAgICAgICAgICAvLyBzb21lIG90aGVyIGNhY2hlIGluIHRoaXMgZ3JvdXAu
IFRoZXkgYXJlIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIGZhaWxlZCBuZXcgY2FjaGUuCisKKyAg
ICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNvcHkgbG9hZGVycywgYmVjYXVzZSB0aGUgY2FjaGUg
Z3JvdXAgbWF5IGJlIGRlc3Ryb3llZCBhdCB0aGUgZW5kIG9mIGl0ZXJhdGlvbi4KKyAgICAgICAg
ICAgICAgICBWZWN0b3I8RG9jdW1lbnRMb2FkZXIqPiBsb2FkZXJzOworICAgICAgICAgICAgICAg
IGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMsIGxvYWRlcnMpOwor
ICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IGxvYWRlcnMuc2l6ZSgpOworICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGNvdW50OyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIGRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKGxvYWRlcnNbaV0pOyAvLyBUaGlzIGNh
biBkZWxldGUgdGhpcyBncm91cC4KKworICAgICAgICAgICAgICAgIC8vIFJlaW5zdGF0ZSB0aGUg
b2xkTmV3ZXN0Q2FjaGUsIGlmIHRoZXJlIHdhcyBvbmUuCisgICAgICAgICAgICAgICAgaWYgKG9s
ZE5ld2VzdENhY2hlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBkaXNjYXJk
IHRoZSBmYWlsZWQgbmV3IGNhY2hlLgorICAgICAgICAgICAgICAgICAgICBzZXROZXdlc3RDYWNo
ZShvbGROZXdlc3RDYWNoZS5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgaGF2ZSBiZWVuIGRlbGV0ZWQgYnkgdGhlIGxh
c3QgY2FsbCB0byBkaXNhc3NvY2lhdGVEb2N1bWVudExvYWRlcigpLgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwpAQCAtNzc1LDYgKzgxMCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpjaGVja0lmTG9hZEkKICAgICBtX2NvbXBsZXRpb25UeXBlID0gTm9uZTsKICAgICBt
X3VwZGF0ZVN0YXR1cyA9IElkbGU7CiAgICAgbV9mcmFtZSA9IDA7CisgICAgbV9jYWxsZWRDaHJv
bWVDbGllbnQgPSBmYWxzZTsKIH0KIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnN0YXJ0
TG9hZGluZ0VudHJ5KCkKQEAgLTg1Nyw3ICs4OTMsMzIgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hl
R3JvdXA6OmFzc29jaWF0ZURvYwogICAgIEFTU0VSVCghbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2Fk
ZXJzLmNvbnRhaW5zKGxvYWRlcikpOwogICAgIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5h
ZGQobG9hZGVyKTsKIH0KLSAKKworY2xhc3MgQ2hyb21lQ2xpZW50Q2FsbGJhY2tUaW1lcjogcHVi
bGljIFRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgQ2hyb21lQ2xpZW50Q2FsbGJhY2tUaW1lcihB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGNhY2hlR3JvdXApCisgICAgICAgIDogbV9jYWNoZUdyb3Vw
KGNhY2hlR3JvdXApCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQg
ZmlyZWQoKQorICAgIHsKKyAgICAgICAgbV9jYWNoZUdyb3VwLT5kaWRSZWFjaE1heEFwcENhY2hl
U2l6ZSgpOworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CisKKyAgICBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAqIG1fY2FjaGVHcm91cDsKK307CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNoZVNpemUoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgQ2hyb21lQ2xpZW50Q2FsbGJhY2tUaW1lciogdGltZXIgPSBuZXcgQ2hy
b21lQ2xpZW50Q2FsbGJhY2tUaW1lcih0aGlzKTsKKyAgICB0aW1lci0+c3RhcnRPbmVTaG90KDAp
OworICAgIC8vIFRoZSB0aW1lciB3aWxsIGRlbGV0ZSBpdHNlbGYgb25jZSBpdCBmaXJlcy4KK30K
KwogY2xhc3MgQ2FsbENhY2hlTGlzdGVuZXJUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2sgewogICAgIHR5cGVkZWYgdm9pZCAoRE9NQXBwbGljYXRpb25DYWNoZTo6Kkxp
c3RlbmVyRnVuY3Rpb24pKCk7CiBwdWJsaWM6CkBAIC05MTAsNyArOTcxLDcgQEAgdm9pZCBBcHBs
aWNhdGlvbkNhY2hlR3JvdXA6OmNsZWFyU3RvcmFnZQogICAgIGZvciAoSGFzaFNldDxBcHBsaWNh
dGlvbkNhY2hlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQogICAgICAgICAoKml0KS0+Y2xlYXJTdG9yYWdlSUQoKTsKIH0KLSAgICAKKwog
CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5oCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKIGNsYXNzIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTsKK2NsYXNzIENocm9tZUNsaWVudENhbGxiYWNrVGltZXI7CiBj
bGFzcyBET01BcHBsaWNhdGlvbkNhY2hlOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBEb2N1bWVu
dExvYWRlcjsKQEAgLTk1LDYgKzk2LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBwb3N0
TGlzdGVuZXJUYXNrKExpc3RlbmVyRnVuY3Rpb24sIGNvbnN0IEhhc2hTZXQ8RG9jdW1lbnRMb2Fk
ZXIqPiYpOwogICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2soTGlzdGVuZXJGdW5jdGlv
biwgY29uc3QgVmVjdG9yPFJlZlB0cjxEb2N1bWVudExvYWRlcj4gPiYgbG9hZGVycyk7CiAgICAg
c3RhdGljIHZvaWQgcG9zdExpc3RlbmVyVGFzayhMaXN0ZW5lckZ1bmN0aW9uLCBEb2N1bWVudExv
YWRlciopOworICAgIHZvaWQgc2NoZWR1bGVSZWFjaGVkTWF4QXBwQ2FjaGVTaXplKCk7CiAKICAg
ICBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGVSZXNvdXJjZUhhbmRsZShjb25zdCBL
VVJMJiwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBuZXdlc3RDYWNoZWRSZXNvdXJjZSk7CiAK
QEAgLTEwNiw2ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkUmVjZWl2ZU1hbmlmZXN0
UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1h
bmlmZXN0RGF0YShjb25zdCBjaGFyKiwgaW50KTsKICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdN
YW5pZmVzdCgpOworICAgIHZvaWQgZGlkUmVhY2hNYXhBcHBDYWNoZVNpemUoKTsKICAgICAKICAg
ICB2b2lkIHN0YXJ0TG9hZGluZ0VudHJ5KCk7CiAgICAgdm9pZCBkZWxpdmVyRGVsYXllZE1haW5S
ZXNvdXJjZXMoKTsKQEAgLTE2MywxMiArMTY2LDE5IEBAIHByaXZhdGU6CiAKICAgICAvLyBXaGV0
aGVyIHRoaXMgY2FjaGUgZ3JvdXAgaXMgYSBjb3B5IHRoYXQncyBvbmx5IHVzZWQgZm9yIHRyYW5z
ZmVycmluZyB0aGUgY2FjaGUgdG8gYW5vdGhlciBmaWxlLgogICAgIGJvb2wgbV9pc0NvcHk7CisK
KyAgICAvLyBXaGV0aGVyIHdlIGNhbGxlZCBiYWNrIGludG8gdGhlIENocm9tZUNsaWVudCBhcyBh
IHJlc3VsdCBvZiB0aGUKKyAgICAvLyBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSBmYWlsaW5nIHRv
IHNhdmUgYSBjYWNoZSBkdWUgdG8gcmVhY2hpbmcKKyAgICAvLyB0aGUgbWF4aW11bSBzaXplIG9m
IHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBkYXRhYmFzZSBmaWxlLgorICAgIGJvb2wgbV9jYWxsZWRD
aHJvbWVDbGllbnQ7CiAgICAgCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBtX2N1cnJlbnRI
YW5kbGU7CiAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gbV9jdXJyZW50UmVz
b3VyY2U7CiAgICAgCiAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gbV9tYW5p
ZmVzdFJlc291cmNlOwogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9tYW5pZmVzdEhhbmRs
ZTsKKworICAgIGZyaWVuZCBjbGFzcyBDaHJvbWVDbGllbnRDYWxsYmFja1RpbWVyOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZVJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA0NTQ1MSkKKysr
IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpB
cHBsaWNhdGlvbkNhYwogICAgIDogU3Vic3RpdHV0ZVJlc291cmNlKHVybCwgcmVzcG9uc2UsIGRh
dGEpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fc3RvcmFnZUlEKDApCisgICAgLCBtX3Np
emUoMCkKIHsKIH0KIApAQCAtNDQsNiArNDUsMjggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U6OmFkZFR5cGUodQogICAgIG1fdHlwZSB8PSB0eXBlOyAKIH0KIAoraW50NjRfdCBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U6OnNpemUoKQoreworICAgIGlmIChtX3NpemUpCisgICAgICBy
ZXR1cm4gbV9zaXplOworCisgICAgaWYgKGRhdGEoKSkKKyAgICAgICAgbV9zaXplID0gZGF0YSgp
LT5zaXplKCk7CisKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNw
b25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBtX3NpemUgKz0gKGl0LT5maXJzdC5sZW5ndGgo
KSArIGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihVQ2hhcik7CisKKyAgICBtX3Np
emUgKz0gdXJsKCkuc3RyaW5nKCkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgIG1fc2l6
ZSArPSBzaXplb2YoaW50KTsgLy8gcmVzcG9uc2UoKS5tX2h0dHBTdGF0dXNDb2RlCisgICAgbV9z
aXplICs9IHJlc3BvbnNlKCkudXJsKCkuc3RyaW5nKCkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIp
OworICAgIG1fc2l6ZSArPSBzaXplb2YodW5zaWduZWQpOyAvLyBkYXRhSWQKKyAgICBtX3NpemUg
Kz0gcmVzcG9uc2UoKS5taW1lVHlwZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICBt
X3NpemUgKz0gcmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCkubGVuZ3RoKCkgKiBzaXplb2Yo
VUNoYXIpOworCisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKwogI2lmbmRlZiBOREVCVUcKIHZvaWQg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpkdW1wVHlwZSh1bnNpZ25lZCB0eXBlKQogewpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmgJKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0U3RvcmFnZUlEKHVuc2lnbmVkIHN0b3JhZ2VJRCkgeyBtX3N0b3Jh
Z2VJRCA9IHN0b3JhZ2VJRDsgfQogICAgIHVuc2lnbmVkIHN0b3JhZ2VJRCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RvcmFnZUlEOyB9CiAgICAgdm9pZCBjbGVhclN0b3JhZ2VJRCgpIHsgbV9zdG9yYWdl
SUQgPSAwOyB9CisgICAgaW50NjRfdCBzaXplKCk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3Rh
dGljIHZvaWQgZHVtcFR5cGUodW5zaWduZWQgdHlwZSk7CkBAIC02Myw2ICs2NCw3IEBAIHByaXZh
dGU6CiAKICAgICB1bnNpZ25lZCBtX3R5cGU7CiAgICAgdW5zaWduZWQgbV9zdG9yYWdlSUQ7Cisg
ICAgaW50NjRfdCBtX3NpemU7CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlLmNwcAkocmV2aXNpb24gNDU0NTEpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDxzcWxpdGUzLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIApAQCAt
NDMsMTYgKzQ0LDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgUmVzb3VyY2VTdG9yYWdlSURKb3VybmFsIHsKK3RlbXBsYXRlIDxjbGFzcyBU
PgorY2xhc3MgU3RvcmFnZUlESm91cm5hbCB7CiBwdWJsaWM6ICAKLSAgICB+UmVzb3VyY2VTdG9y
YWdlSURKb3VybmFsKCkKKyAgICB+U3RvcmFnZUlESm91cm5hbCgpCiAgICAgewogICAgICAgICBz
aXplX3Qgc2l6ZSA9IG1fcmVjb3Jkcy5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQogICAgICAgICAgICAgbV9yZWNvcmRzW2ldLnJlc3RvcmUoKTsKICAg
ICB9CiAKLSAgICB2b2lkIGFkZChBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCB1
bnNpZ25lZCBzdG9yYWdlSUQpCisgICAgdm9pZCBhZGQoVCogcmVzb3VyY2UsIHVuc2lnbmVkIHN0
b3JhZ2VJRCkKICAgICB7CiAgICAgICAgIG1fcmVjb3Jkcy5hcHBlbmQoUmVjb3JkKHJlc291cmNl
LCBzdG9yYWdlSUQpKTsKICAgICB9CkBAIC02Niw3ICs2OCw3IEBAIHByaXZhdGU6CiAgICAgY2xh
c3MgUmVjb3JkIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlY29yZCgpIDogbV9yZXNvdXJjZSgw
KSwgbV9zdG9yYWdlSUQoMCkgeyB9Ci0gICAgICAgIFJlY29yZChBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZCBzdG9yYWdlSUQpIDogbV9yZXNvdXJjZShyZXNvdXJj
ZSksIG1fc3RvcmFnZUlEKHN0b3JhZ2VJRCkgeyB9CisgICAgICAgIFJlY29yZChUKiByZXNvdXJj
ZSwgdW5zaWduZWQgc3RvcmFnZUlEKSA6IG1fcmVzb3VyY2UocmVzb3VyY2UpLCBtX3N0b3JhZ2VJ
RChzdG9yYWdlSUQpIHsgfQogCiAgICAgICAgIHZvaWQgcmVzdG9yZSgpCiAgICAgICAgIHsKQEAg
LTc0LDcgKzc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBtX3Jlc291cmNlOworICAgICAgICBUKiBtX3Jl
c291cmNlOwogICAgICAgICB1bnNpZ25lZCBtX3N0b3JhZ2VJRDsKICAgICB9OwogCkBAIC0yMjMs
NiArMjI1LDggQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlUwogICAg
ICAgICAvLyBhIG1hdGNoaW5nIFVSTC4KICAgICAgICAgdW5zaWduZWQgbmV3ZXN0Q2FjaGVJRCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMikpOwogICAg
ICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2Fj
aGVJRCk7CisgICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gY2FjaGUtPnJlc291cmNl
Rm9yVVJMKHVybCk7CiAgICAgICAgIGlmICghcmVzb3VyY2UpCkBAIC0zNTMsNiArMzU3LDU2IEBA
IGNvbnN0IFN0cmluZyYgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmMKICAgICByZXR1cm4gbV9j
YWNoZURpcmVjdG9yeTsKIH0KIAordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c2V0TWF4
aW11bVNpemUoaW50NjRfdCBzaXplKQoreworICAgIG1fbWF4aW11bVNpemUgPSBzaXplOworfQor
CitpbnQ2NF90IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjptYXhpbXVtU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbWF4aW11bVNpemU7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmlzTWF4aW11bVNpemVSZWFjaGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc01h
eGltdW1TaXplUmVhY2hlZDsKK30KKworaW50NjRfdCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3BhY2VOZWVkZWQoaW50NjRfdCBjYWNoZVRvU2F2ZSkKK3sKKyAgICBpbnQ2NF90IHNwYWNlTmVl
ZGVkID0gMDsKKyAgICBpbnQ2NF90IGN1cnJlbnRTaXplID0gMDsKKyAgICBpZiAoIWdldEZpbGVT
aXplKG1fY2FjaGVGaWxlLCBjdXJyZW50U2l6ZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSB3ZSBoYXZlIGF2YWlsYWJsZS4K
KyAgICBpbnQ2NF90IHRvdGFsQXZhaWxhYmxlU2l6ZSA9IDA7CisgICAgaWYgKG1fbWF4aW11bVNp
emUgPCBjdXJyZW50U2l6ZSkgeworICAgICAgICAvLyBUaGUgbWF4IHNpemUgaXMgc21hbGxlciB0
aGFuIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgYXBwIGNhY2hlIGZpbGUuCisgICAgICAgIC8vIFRo
aXMgY2FuIGhhcHBlbiBpZiB0aGUgY2xpZW50IHByZXZpb3VzbHkgaW1wb3NlZCBhIGxhcmdlciBt
YXggc2l6ZQorICAgICAgICAvLyB2YWx1ZSBhbmQgdGhlIGFwcCBjYWNoZSBmaWxlIGhhcyBhbHJl
YWR5IGdyb3duIGJleW9uZCB0aGUgY3VycmVudAorICAgICAgICAvLyBtYXggc2l6ZSB2YWx1ZS4K
KyAgICAgICAgLy8gVGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIGlzIGp1c3QgdGhlIGFtb3VudCBv
ZiBmcmVlIHNwYWNlIGluc2lkZQorICAgICAgICAvLyB0aGUgZGF0YWJhc2UgZmlsZS4gTm90ZSB0
aGF0IHRoaXMgaXMgYWx3YXlzIDAgaWYgU1FMaXRlIGlzIGNvbXBpbGVkCisgICAgICAgIC8vIHdp
dGggQVVUT19WQUNVVU0gPSAxLgorICAgICAgICB0b3RhbEF2YWlsYWJsZVNpemUgPSBtX2RhdGFi
YXNlLmZyZWVTcGFjZVNpemUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaGUgbWF4IHNp
emUgaXMgdGhlIHNhbWUgb3IgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgc2l6ZS4KKyAgICAgICAg
Ly8gVGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpcyB0aGUgYW1vdW50IG9mIGZy
ZWUgc3BhY2UKKyAgICAgICAgLy8gaW5zaWRlIHRoZSBkYXRhYmFzZSBmaWxlIHBsdXMgdGhlIGFt
b3VudCB3ZSBjYW4gZ3JvdyB1bnRpbCB3ZSBoaXQKKyAgICAgICAgLy8gdGhlIG1heCBzaXplLgor
ICAgICAgICB0b3RhbEF2YWlsYWJsZVNpemUgPSAobV9tYXhpbXVtU2l6ZSAtIGN1cnJlbnRTaXpl
KSArIG1fZGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOworICAgIH0KKworICAgIC8vIFRoZSBzcGFj
ZSBuZWVkZWQgdG8gYmUgZnJlZWQgaW4gb3JkZXIgdG8gYWNjb21vZGF0ZSB0aGUgZmFpbGVkIGNh
Y2hlIGlzCisgICAgLy8gdGhlIHNpemUgb2YgdGhlIGZhaWxlZCBjYWNoZSBtaW51cyBhbnkgYWxy
ZWFkeSBhdmFpbGFibGUgZnJlZSBzcGFjZS4KKyAgICBzcGFjZU5lZWRlZCA9IGNhY2hlVG9TYXZl
IC0gdG90YWxBdmFpbGFibGVTaXplOworICAgIC8vIFRoZSBzcGFjZSBuZWVkZWQgdmFsdWUgbXVz
dCBiZSBwb3NpdGl2ZSAob3IgZWxzZSB0aGUgdG90YWwgYWxyZWFkeQorICAgIC8vIGF2YWlsYWJs
ZSBmcmVlIHNwYWNlIHdvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBmYWlsZWQg
Y2FjaGUgYW5kCisgICAgLy8gc2F2aW5nIG9mIHRoZSBjYWNoZSBzaG91bGQgaGF2ZSBuZXZlciBm
YWlsZWQpLgorICAgIEFTU0VSVChzcGFjZU5lZWRlZCk7CisgICAgcmV0dXJuIHNwYWNlTmVlZGVk
OworfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMQ29tbWFuZChj
b25zdCBTdHJpbmcmIHNxbCkKIHsKQEAgLTM2Niw3ICs0MjAsNyBAQCBib29sIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IGNvbnN0IGludCBzY2hlbWFWZXJzaW9uID0gMzsKK3N0YXRpYyBjb25zdCBpbnQgc2NoZW1hVmVy
c2lvbiA9IDQ7CiAgICAgCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hl
bWFWZXJzaW9uKCkKIHsKQEAgLTQwMCwxMyArNDU0LDEzIEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6Om9wZW5EYXRhYmEKICAgICAvLyBUaGUgY2FjaGUgZGlyZWN0b3J5IHNob3VsZCBu
ZXZlciBiZSBudWxsLCBidXQgaWYgaXQgZm9yIHNvbWUgd2VpcmQgcmVhc29uIGlzIHdlIGJhaWwg
b3V0LgogICAgIGlmIChtX2NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgU3RyaW5nIGFwcGxpY2F0aW9uQ2FjaGVQYXRoID0gcGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KG1fY2FjaGVEaXJlY3RvcnksICJBcHBsaWNhdGlvbkNhY2hlLmRiIik7Ci0gICAg
aWYgKCFjcmVhdGVJZkRvZXNOb3RFeGlzdCAmJiAhZmlsZUV4aXN0cyhhcHBsaWNhdGlvbkNhY2hl
UGF0aCkpCisKKyAgICBtX2NhY2hlRmlsZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2Nh
Y2hlRGlyZWN0b3J5LCAiQXBwbGljYXRpb25DYWNoZS5kYiIpOworICAgIGlmICghY3JlYXRlSWZE
b2VzTm90RXhpc3QgJiYgIWZpbGVFeGlzdHMobV9jYWNoZUZpbGUpKQogICAgICAgICByZXR1cm47
CiAKICAgICBtYWtlQWxsRGlyZWN0b3JpZXMobV9jYWNoZURpcmVjdG9yeSk7Ci0gICAgbV9kYXRh
YmFzZS5vcGVuKGFwcGxpY2F0aW9uQ2FjaGVQYXRoKTsKKyAgICBtX2RhdGFiYXNlLm9wZW4obV9j
YWNoZUZpbGUpOwogICAgIAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNDE2LDcgKzQ3MCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
Om9wZW5EYXRhYmEKICAgICAvLyBDcmVhdGUgdGFibGVzCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQo
IkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlR3JvdXBzIChpZCBJTlRFR0VSIFBSSU1B
UlkgS0VZIEFVVE9JTkNSRU1FTlQsICIKICAgICAgICAgICAgICAgICAgICAgICAibWFuaWZlc3RI
b3N0SGFzaCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG1hbmlmZXN0VVJMIFRF
WFQgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIG5ld2VzdENhY2hlIElOVEVHRVIpIik7Ci0gICAg
ZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlcyAoaWQg
SU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBjYWNoZUdyb3VwIElOVEVHRVIpIik7
CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hl
cyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBjYWNoZUdyb3VwIElOVEVH
RVIsIHNpemUgSU5URUdFUikiKTsKICAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxF
IElGIE5PVCBFWElTVFMgQ2FjaGVXaGl0ZWxpc3RVUkxzICh1cmwgVEVYVCBOT1QgTlVMTCBPTiBD
T05GTElDVCBGQUlMLCBjYWNoZSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7
CiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEZhbGxi
YWNrVVJMcyAobmFtZXNwYWNlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgZmFsbGJh
Y2tVUkwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCAiCiAgICAgICAgICAgICAgICAg
ICAgICAgImNhY2hlIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKQEAgLTQ1
Niw5ICs1MTAsMTAgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVN0YQog
ICAgIHJldHVybiByZXN1bHQ7CiB9ICAgIAogCi1ib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwKQorYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCwgR3JvdXBTdG9y
YWdlSURKb3VybmFsKiBqb3VybmFsKQogewogICAgIEFTU0VSVChncm91cC0+c3RvcmFnZUlEKCkg
PT0gMCk7CisgICAgQVNTRVJUKGpvdXJuYWwpOwogCiAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVHcm91cHMgKG1hbmlmZXN0SG9zdEhh
c2gsIG1hbmlmZXN0VVJMKSBWQUxVRVMgKD8sID8pIik7CiAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMUmVzdWx0T2spCkBAIC00NzEsNiArNTI2LDcgQEAgYm9vbCBBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBn
cm91cC0+c2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJ
bnNlcnRSb3dJRCgpKSk7CisgICAgam91cm5hbC0+YWRkKGdyb3VwLCAwKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0gICAgCiAKQEAgLTQ4MCwxMSArNTM2LDEyIEBAIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlKEFwcGwKICAgICBBU1NFUlQoY2FjaGUtPmdyb3VwKCktPnN0b3JhZ2VJ
RCgpICE9IDApOwogICAgIEFTU0VSVChzdG9yYWdlSURKb3VybmFsKTsKICAgICAKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZXMgKGNh
Y2hlR3JvdXApIFZBTFVFUyAoPykiKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZXMgKGNhY2hlR3JvdXAsIHNpemUpIFZBTFVFUyAo
PywgPykiKTsKICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBjYWNoZS0+
Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGUt
PnNpemUoKSk7CiAKICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNTgxLDYgKzYzOCw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlKEFwcGwKICAgICBpZiAocmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTFJlc3VsdE9rKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAgLy8gVGhl
IHNhbWUgQXBwbGljYXRpb25DYWNoZVJlc291cmNlIGFyZSB1c2VkIGluIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6c2l6ZSgpCisgICAgLy8gdG8gY2FsY3VsYXRlIHRoZSBhcHByb3hpbWF0ZSBz
aXplIG9mIGFuIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSBvYmplY3QuIElmCisgICAgLy8geW91
IGNoYW5nZSB0aGUgY29kZSBiZWxvdywgcGxlYXNlIGFsc28gY2hhbmdlIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6c2l6ZSgpLgogICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDEsIHJl
c291cmNlLT51cmwoKSk7CiAgICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZEludDY0KDIsIHJlc291
cmNlLT5yZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkpOwogICAgIHJlc291cmNlU3RhdGVtZW50
LmJpbmRUZXh0KDMsIHJlc291cmNlLT5yZXNwb25zZSgpLnVybCgpKTsKQEAgLTYyNiwzMyArNjg2
LDU2IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlVXBkYXQKICAgICByZXR1
cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudCk7CiB9CiAKLXZvaWQgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2Us
IEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQorYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXRpb25DYWNo
ZSogY2FjaGUpCiB7CiAgICAgQVNTRVJUKGNhY2hlLT5zdG9yYWdlSUQoKSk7CiAgICAgCiAgICAg
b3BlbkRhdGFiYXNlKHRydWUpOwogIAorICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSBmYWxz
ZTsKKyAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUpOworCiAgICAg
U1FMaXRlVHJhbnNhY3Rpb24gc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwog
ICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5iZWdpbigpOwogICAgIAotICAgIGlmICghc3Rv
cmUocmVzb3VyY2UsIGNhY2hlLT5zdG9yYWdlSUQoKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXN0b3JlKHJlc291cmNlLCBjYWNoZS0+c3RvcmFnZUlEKCkpKSB7CisgICAgICAgIGNoZWNr
Rm9yTWF4U2l6ZVJlYWNoZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIEEgcmVzb3VyY2Ugd2FzIGFkZGVkIHRvIHRoZSBjYWNoZS4gVXBkYXRlIHRoZSB0b3RhbCBk
YXRhIHNpemUgZm9yIHRoZSBjYWNoZS4KKyAgICBTUUxpdGVTdGF0ZW1lbnQgc2l6ZVVwZGF0ZVN0
YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUg
aWQ9PyIpOworICAgIGlmIChzaXplVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC5i
aW5kSW50NjQoMSwgcmVzb3VyY2UtPnNpemUoKSk7CisgICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC5i
aW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKKworICAgIGlmICghZXhlY3V0ZVN0YXRl
bWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVOZXdlc3RDYWNoZShBcHBs
aWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwKQogewogICAgIG9wZW5EYXRhYmFzZSh0cnVlKTsKLSAg
ICAKKworICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSBmYWxzZTsKKyAgICBtX2RhdGFiYXNl
LnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUpOworCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24g
c3RvcmVDYWNoZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIAogICAgIHN0b3JlQ2FjaGVU
cmFuc2FjdGlvbi5iZWdpbigpOwotICAgIAorCisgICAgR3JvdXBTdG9yYWdlSURKb3VybmFsIGdy
b3VwU3RvcmFnZUlESm91cm5hbDsKICAgICBpZiAoIWdyb3VwLT5zdG9yYWdlSUQoKSkgewogICAg
ICAgICAvLyBTdG9yZSB0aGUgZ3JvdXAKLSAgICAgICAgaWYgKCFzdG9yZShncm91cCkpCisgICAg
ICAgIGlmICghc3RvcmUoZ3JvdXAsICZncm91cFN0b3JhZ2VJREpvdXJuYWwpKSB7CisgICAgICAg
ICAgICBjaGVja0Zvck1heFNpemVSZWFjaGVkKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGdyb3VwLT5uZXdlc3RDYWNoZSgp
KTsKQEAgLTY2MiwxMSArNzQ1LDEzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0
b3JlTmV3ZXMKICAgICAvLyBMb2cgdGhlIHN0b3JhZ2VJRCBjaGFuZ2VzIHRvIHRoZSBpbi1tZW1v
cnkgcmVzb3VyY2Ugb2JqZWN0cy4gVGhlIGpvdXJuYWwKICAgICAvLyBvYmplY3Qgd2lsbCByb2xs
IHRoZW0gYmFjayBhdXRvbWF0aWNhbGx5IGluIGNhc2UgYSBkYXRhYmFzZSBvcGVyYXRpb24KICAg
ICAvLyBmYWlscyBhbmQgdGhpcyBtZXRob2QgcmV0dXJucyBlYXJseS4KLSAgICBSZXNvdXJjZVN0
b3JhZ2VJREpvdXJuYWwgc3RvcmFnZUlESm91cm5hbDsKKyAgICBSZXNvdXJjZVN0b3JhZ2VJREpv
dXJuYWwgcmVzb3VyY2VTdG9yYWdlSURKb3VybmFsOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ld2Vz
dCBjYWNoZQotICAgIGlmICghc3RvcmUoZ3JvdXAtPm5ld2VzdENhY2hlKCksICZzdG9yYWdlSURK
b3VybmFsKSkKKyAgICBpZiAoIXN0b3JlKGdyb3VwLT5uZXdlc3RDYWNoZSgpLCAmcmVzb3VyY2VT
dG9yYWdlSURKb3VybmFsKSkgeworICAgICAgICBjaGVja0Zvck1heFNpemVSZWFjaGVkKCk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBuZXdl
c3QgY2FjaGUgaW4gdGhlIGdyb3VwLgogICAgIApAQCAtNjgwLDcgKzc2NSw4IEBAIGJvb2wgQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXMKICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoc3RhdGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHN0b3JhZ2VJ
REpvdXJuYWwuY29tbWl0KCk7CisgICAgZ3JvdXBTdG9yYWdlSURKb3VybmFsLmNvbW1pdCgpOwor
ICAgIHJlc291cmNlU3RvcmFnZUlESm91cm5hbC5jb21taXQoKTsKICAgICBzdG9yZUNhY2hlVHJh
bnNhY3Rpb24uY29tbWl0KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC04NzYsNyArOTYyLDEx
NiBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPCiAgICAgCiAgICAg
cmV0dXJuIGNvcHlTdG9yYWdlLnN0b3JlTmV3ZXN0Q2FjaGUoZ3JvdXBDb3B5LmdldCgpKTsKIH0K
LSAgICAKKworYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKFZlY3Rv
cjxLVVJMPiogdXJscykKK3sKKyAgICBBU1NFUlQodXJscyk7CisgICAgb3BlbkRhdGFiYXNlKGZh
bHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxlY3RVUkxzKG1fZGF0YWJhc2UsICJTRUxFQ1Qg
bWFuaWZlc3RVUkwgRlJPTSBDYWNoZUdyb3VwcyIpOworCisgICAgaWYgKHNlbGVjdFVSTHMucHJl
cGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgd2hp
bGUgKHNlbGVjdFVSTHMuc3RlcCgpID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgdXJscy0+YXBw
ZW5kKHNlbGVjdFVSTHMuZ2V0Q29sdW1uVGV4dCgwKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cFNpemUoY29uc3QgU3Ry
aW5nJiBtYW5pZmVzdFVSTCwgaW50NjRfdCogc2l6ZSkKK3sKKyAgICBBU1NFUlQoc2l6ZSk7Cisg
ICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIHN1bShDYWNoZXMuc2l6ZSkgRlJPTSBDYWNoZXMgSU5ORVIgSk9JTiBD
YWNoZUdyb3VwcyBPTiBDYWNoZXMuY2FjaGVHcm91cD1DYWNoZUdyb3Vwcy5pZCBXSEVSRSBDYWNo
ZUdyb3Vwcy5tYW5pZmVzdFVSTD0/Iik7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRlbWVudC5iaW5k
VGV4dCgxLCBtYW5pZmVzdFVSTCk7CisKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KTsKKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdERvbmUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGdldCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgZ3JvdXAsIGVycm9yIFwiJXNc
IiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgKnNpemUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hl
R3JvdXAoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCkKK3sKKyAgICBTUUxpdGVUcmFuc2FjdGlv
biBkZWxldGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICAvLyBDaGVjayB0byBzZWUgaWYg
dGhlIGdyb3VwIGlzIGluIG1lbW9yeS4KKyAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3Vw
ID0gbV9jYWNoZXNJbk1lbW9yeS5nZXQobWFuaWZlc3RVUkwpOworICAgIGlmIChncm91cCkKKyAg
ICAgICAgY2FjaGVHcm91cE1hZGVPYnNvbGV0ZShncm91cCk7CisgICAgZWxzZSB7CisgICAgICAg
IC8vIFRoZSBjYWNoZSBncm91cCBpcyBub3QgaW4gbWVtb3J5LCBzbyByZW1vdmUgaXQgZnJvbSB0
aGUgZGlzay4KKyAgICAgICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKKyAgICAgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBpZFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGlkIEZST00gQ2Fj
aGVHcm91cHMgV0hFUkUgbWFuaWZlc3RVUkw9PyIpOworICAgICAgICBpZiAoaWRTdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGlkU3RhdGVtZW50LmJpbmRUZXh0KDEsIG1hbmlmZXN0VVJMKTsKKworICAgICAgICBp
bnQgcmVzdWx0ID0gaWRTdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNR
TFJlc3VsdERvbmUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGxvYWQgY2FjaGUgZ3JvdXAgaWQsIGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
aW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisKKyAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJP
TSBDYWNoZXMgV0hFUkUgY2FjaGVHcm91cD0/Iik7CisgICAgICAgIGlmIChjYWNoZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgU1FMaXRlU3RhdGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBpZD0/Iik7CisgICAgICAgIGlmIChncm91cFN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOworICAgICAg
ICBleGVjdXRlU3RhdGVtZW50KGNhY2hlU3RhdGVtZW50KTsKKyAgICAgICAgZ3JvdXBTdGF0ZW1l
bnQuYmluZEludDY0KDEsIGdyb3VwSWQpOworICAgICAgICBleGVjdXRlU3RhdGVtZW50KGdyb3Vw
U3RhdGVtZW50KTsKKyAgICB9CisKKyAgICBkZWxldGVUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dmFjdXVt
RGF0YWJhc2VGaWxlKCkKK3sKKyAgICBtX2RhdGFiYXNlLnJ1blZhY3V1bUNvbW1hbmQoKTsKK30K
Kwordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JNYXhTaXplUmVhY2hlZCgp
Cit7CisgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCisgICAg
ICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSB0cnVlOworfQorCitBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKSAKKyAgICA6IG1fbWF4aW11bVNpemUo
SU5UX01BWCkKKyAgICAsIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQoZmFsc2UpCit7Cit9CisKIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlJiBjYWNoZVN0b3JhZ2UoKQogewogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UsIHN0b3JhZ2UsICgpKTsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaAko
cmV2aXNpb24gNDU0NTEpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsMTkgQEAgY2xhc3MgQXBw
bGljYXRpb25DYWNoZTsKIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDsKIGNsYXNzIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTsKIGNsYXNzIEtVUkw7Ci1jbGFzcyBSZXNvdXJjZVN0b3JhZ2VJ
REpvdXJuYWw7Ci0gICAgCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NsYXNzIFN0b3JhZ2VJREpvdXJu
YWw7CisKIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlIHsKIHB1YmxpYzoKICAgICB2b2lk
IHNldENhY2hlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY2Fj
aGVEaXJlY3RvcnkoKSBjb25zdDsKICAgICAKKyAgICB2b2lkIHNldE1heGltdW1TaXplKGludDY0
X3Qgc2l6ZSk7CisgICAgaW50NjRfdCBtYXhpbXVtU2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaXNN
YXhpbXVtU2l6ZVJlYWNoZWQoKSBjb25zdDsKKyAgICBpbnQ2NF90IHNwYWNlTmVlZGVkKGludDY0
X3QgY2FjaGVUb1NhdmUpOworCiAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBjYWNoZUdyb3Vw
Rm9yVVJMKGNvbnN0IEtVUkwmKTsgLy8gQ2FjaGUgdG8gbG9hZCBhIG1haW4gcmVzb3VyY2UgZnJv
bS4KICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChj
b25zdCBLVVJMJik7IC8vIENhY2hlIHRoYXQgaGFzIGEgZmFsbGJhY2sgZW50cnkgdG8gbG9hZCBh
IG1haW4gcmVzb3VyY2UgZnJvbSBpZiBub3JtYWwgbG9hZGluZyBmYWlscy4KIApAQCAtNTUsNyAr
NjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWNoZUdyb3VwTWFkZU9ic29sZXRlKEFwcGxpY2F0
aW9uQ2FjaGVHcm91cCopOwogICAgICAgICAKICAgICBib29sIHN0b3JlTmV3ZXN0Q2FjaGUoQXBw
bGljYXRpb25DYWNoZUdyb3VwKik7IC8vIFVwZGF0ZXMgdGhlIGNhY2hlIGdyb3VwLCBidXQgZG9l
c24ndCByZW1vdmUgb2xkIGNhY2hlLgotICAgIHZvaWQgc3RvcmUoQXBwbGljYXRpb25DYWNoZVJl
c291cmNlKiwgQXBwbGljYXRpb25DYWNoZSopOworICAgIGJvb2wgc3RvcmUoQXBwbGljYXRpb25D
YWNoZVJlc291cmNlKiwgQXBwbGljYXRpb25DYWNoZSopOwogICAgIGJvb2wgc3RvcmVVcGRhdGVk
VHlwZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqLCBBcHBsaWNhdGlvbkNhY2hlKik7CiAKICAg
ICAvLyBSZW1vdmVzIHRoZSBncm91cCBpZiB0aGUgY2FjaGUgdG8gYmUgcmVtb3ZlZCBpcyB0aGUg
bmV3ZXN0IG9uZSAoc28sIHN0b3JlTmV3ZXN0Q2FjaGUoKSBuZWVkcyB0byBiZSBjYWxsZWQgYmVm
b3JlaGFuZCB3aGVuIHVwZGF0aW5nKS4KQEAgLTY1LDExICs3MSwxOSBAQCBwdWJsaWM6CiAgICAg
CiAgICAgc3RhdGljIGJvb2wgc3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGly
ZWN0b3J5LCBBcHBsaWNhdGlvbkNhY2hlKik7CiAKKyAgICBib29sIG1hbmlmZXN0VVJMcyhWZWN0
b3I8S1VSTD4qIHVybHMpOworICAgIGJvb2wgY2FjaGVHcm91cFNpemUoY29uc3QgU3RyaW5nJiBt
YW5pZmVzdFVSTCwgaW50NjRfdCogc2l6ZSk7CisgICAgYm9vbCBkZWxldGVDYWNoZUdyb3VwKGNv
bnN0IFN0cmluZyYgbWFuaWZlc3RVUkwpOworICAgIHZvaWQgdmFjdXVtRGF0YWJhc2VGaWxlKCk7
CiBwcml2YXRlOgorICAgIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCk7CiAgICAgUGFzc1JlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlPiBsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZUlEKTsKICAgICBB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGxvYWRDYWNoZUdyb3VwKGNvbnN0IEtVUkwmIG1hbmlmZXN0
VVJMKTsKICAgICAKLSAgICBib29sIHN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCopOworICAg
IHR5cGVkZWYgU3RvcmFnZUlESm91cm5hbDxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IFJlc291
cmNlU3RvcmFnZUlESm91cm5hbDsKKyAgICB0eXBlZGVmIFN0b3JhZ2VJREpvdXJuYWw8QXBwbGlj
YXRpb25DYWNoZUdyb3VwPiBHcm91cFN0b3JhZ2VJREpvdXJuYWw7CisKKyAgICBib29sIHN0b3Jl
KEFwcGxpY2F0aW9uQ2FjaGVHcm91cCosIEdyb3VwU3RvcmFnZUlESm91cm5hbCopOwogICAgIGJv
b2wgc3RvcmUoQXBwbGljYXRpb25DYWNoZSosIFJlc291cmNlU3RvcmFnZUlESm91cm5hbCopOwog
ICAgIGJvb2wgc3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiwgdW5zaWduZWQgY2FjaGVT
dG9yYWdlSUQpOwogCkBAIC04MSw4ICs5NSwxNCBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wg
ZXhlY3V0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmKTsKICAgICBib29sIGV4ZWN1dGVTUUxD
b21tYW5kKGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBjaGVja0Zvck1heFNpemVSZWFjaGVk
KCk7CiAgICAgCiAgICAgU3RyaW5nIG1fY2FjaGVEaXJlY3Rvcnk7CisgICAgU3RyaW5nIG1fY2Fj
aGVGaWxlOworCisgICAgaW50NjRfdCBtX21heGltdW1TaXplOworICAgIGJvb2wgbV9pc01heGlt
dW1TaXplUmVhY2hlZDsKIAogICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CiAKQEAgLTky
LDYgKzExMiw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
QXBwbGljYXRpb25DYWNoZUdyb3VwKj4gQ2FjaGVHcm91cE1hcDsKICAgICBDYWNoZUdyb3VwTWFw
IG1fY2FjaGVzSW5NZW1vcnk7IC8vIEV4Y2x1ZGVzIG9ic29sZXRlIGNhY2hlIGdyb3Vwcy4KKwor
ICAgIGZyaWVuZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSYgY2FjaGVTdG9yYWdlKCk7CiB9Owog
IAogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UmIGNhY2hlU3RvcmFnZSgpOwpJbmRleDogV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAkocmV2aXNpb24gNDU0NTEpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzOSw2ICsxMzksMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZU5hbWUpID0gMDsKICNlbmRpZgogCisjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBh
cHBsaWNhdGlvbiBjYWNoZSBnZXRzIGhpdHMgdGhlIG1heGltdW0gc2l6ZS4KKyAgICAgICAgLy8g
VGhlIGNocm9tZSBjbGllbnQgd291bGQgbmVlZCB0byB0YWtlIHNvbWUgYWN0aW9uIHN1Y2ggYXMg
ZXZpY3Rpbmcgc29tZQorICAgICAgICAvLyBvbGQgY2FjaGVzLgorICAgICAgICAvLyBzcGFjZU5l
ZWRlZCBkZW5vdGVzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGZy
ZWVkCisgICAgICAgIC8vIGluIG9yZGVyIGZvciB0aGUgb3BlcmF0aW9uIHRoYXQgY2F1c2VkIHRo
ZSBvdXQtb2Ytc3BhY2UgY29uZGl0aW9uIHRvCisgICAgICAgIC8vIHN1Y2NlZWQuCisgICAgICAg
IHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQp
ID0gMDsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKTsKICNlbmRpZgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAkocmV2aXNpb24gNDU0NTEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MSw2ICsxNTEsMTggQEAgaW50IFNRTGl0ZURhdGFiYXNlOjpwYWdlU2l6ZSgpCiAgICAgcmV0
dXJuIG1fcGFnZVNpemU7CiB9CiAKK2ludDY0X3QgU1FMaXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNp
emUoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKKyAgICBl
bmFibGVBdXRob3JpemVyKGZhbHNlKTsKKyAgICAvLyBOb3RlOiBmcmVlbGlzdF9jb3VudCB3YXMg
YWRkZWQgaW4gU1FMaXRlIDMuNC4xLgorICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRo
aXMsICJQUkFHTUEgZnJlZWxpc3RfY291bnQiKTsKKyAgICBpbnQ2NF90IHNpemUgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkgKiBwYWdlU2l6ZSgpOworCisgICAgZW5hYmxlQXV0aG9yaXpl
cih0cnVlKTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKwogdm9pZCBTUUxpdGVEYXRhYmFzZTo6c2V0
U3luY2hyb25vdXMoU3luY2hyb25vdXNQcmFnbWEgc3luYykKIHsKICAgICBleGVjdXRlQ29tbWFu
ZChTdHJpbmc6OmZvcm1hdCgiUFJBR01BIHN5bmNocm9ub3VzID0gJWkiLCBzeW5jKSk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgJKHJldmlzaW9uIDQ1NDUxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
ODMsNiArODMsOSBAQCBwdWJsaWM6CiAgICAgaW50NjRfdCBtYXhpbXVtU2l6ZSgpOwogICAgIHZv
aWQgc2V0TWF4aW11bVNpemUoaW50NjRfdCk7CiAgICAgCisgICAgLy8gR2V0cyB0aGUgbnVtYmVy
IG9mIHVudXNlZCBieXRlcyBpbiB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICBpbnQ2NF90IGZyZWVT
cGFjZVNpemUoKTsKKwogICAgIC8vIFRoZSBTUUxpdGUgU1lOQ0hST05PVVMgcHJhZ21hIGNhbiBi
ZSBlaXRoZXIgRlVMTCwgTk9STUFMLCBvciBPRkYKICAgICAvLyBGVUxMIC0gQW55IHdyaXRpbmcg
Y2FsbHMgdG8gdGhlIERCIGJsb2NrIHVudGlsIHRoZSBkYXRhIGlzIGFjdHVhbGx5IG9uIHRoZSBk
aXNrIHN1cmZhY2UKICAgICAvLyBOT1JNQUwgLSBTUUxpdGUgcGF1c2VzIGF0IHNvbWUgY3JpdGlj
YWwgbW9tZW50cyB3aGVuIHdyaXRpbmcsIGJ1dCBtdWNoIGxlc3MgdGhhbiBGVUxMCkluZGV4OiBX
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDQ1NDU0KQorKysgV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
IEBACisyMDA5LTA3LTAxICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MDAKKyAgICAgICAgCisgICAgICAgIFVw
ZGF0ZWQgdGhlIHByb2plY3QgYWZ0ZXIgYWRkaW5nIFdlYkFwcGxpY2F0aW9uQ2FjaGUuaC9tbQor
CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMDktMDYt
MDggIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3Rh
bXBlZCBieSBNYXJrIFJvd2UuCkluZGV4OiBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4IEBACiAJCUE3RDNDNUJE
MEI1NzczQzUwMDJDQTQ1MCAvKiBXZWJQYXN0ZWJvYXJkSGVscGVyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEM0M1QkIwQjU3NzNDNTAwMkNBNDUw
IC8qIFdlYlBhc3RlYm9hcmRIZWxwZXIubW0gKi87IH07CiAJCUFCOUZCQkJCMEY4NTgyQjAwMDZB
REM0MyAvKiBXZWJET01PcGVyYXRpb25zSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCOUZCQkJBMEY4NTgyQjAwMDZBREM0MyAvKiBXZWJE
T01PcGVyYXRpb25zSW50ZXJuYWwuaCAqLzsgfTsKIAkJQUJEREYyMEQwOEVCMEREQzAwMUUxMjQx
IC8qIFdlYkRvd25sb2FkSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFCRERGMjBDMDhFQjBEREMwMDFFMTI0MSAvKiBXZWJEb3dubG9hZElu
dGVybmFsLmggKi87IH07CisJCUI2ODA0OTczMEZGQkNFQzEwMDlGN0Y2MiAvKiBXZWJBcHBsaWNh
dGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCNjgwNDk3MTBGRkJDRUMxMDA5RjdGNjIgLyogV2ViQXBwbGljYXRpb25DYWNoZS5oICovOyB9
OworCQlCNjgwNDk3NDBGRkJDRUMxMDA5RjdGNjIgLyogV2ViQXBwbGljYXRpb25DYWNoZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2ODA0OTcyMEZG
QkNFQzEwMDlGN0Y2MiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlLm1tICovOyB9OwogCQlCQzJFNDY0
RDBGRDhBOTY4MDBBOUQ5REUgLyogV2ViVmlld0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkU0NjRCMEZEOEE5NjgwMEE5RDlERSAvKiBXZWJW
aWV3RGF0YS5oICovOyB9OwogCQlCQzJFNDY0RTBGRDhBOTY4MDBBOUQ5REUgLyogV2ViVmlld0Rh
dGEubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJF
NDY0QzBGRDhBOTY4MDBBOUQ5REUgLyogV2ViVmlld0RhdGEubW0gKi87IH07CiAJCUJDNTQyQzQy
MEZENzc2NkYwMEQ4QUI1RCAvKiBXZWJEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1NDJDNDAwRkQ3
NzY2RjAwRDhBQjVEIC8qIFdlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLmggKi87IH07
CkBAIC01NjQsNiArNTY2LDggQEAKIAkJQTdEM0M1QkIwQjU3NzNDNTAwMkNBNDUwIC8qIFdlYlBh
c3RlYm9hcmRIZWxwZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJQYXN0ZWJvYXJkSGVscGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
QjlGQkJCQTBGODU4MkIwMDA2QURDNDMgLyogV2ViRE9NT3BlcmF0aW9uc0ludGVybmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRPTU9wZXJhdGlvbnNJbnRlcm5hbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQkRERjIwQzA4RUIwRERDMDAxRTEyNDEg
LyogV2ViRG93bmxvYWRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEb3dubG9hZEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQlCNjgwNDk3MTBGRkJD
RUMxMDA5RjdGNjIgLyogV2ViQXBwbGljYXRpb25DYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJBcHBsaWNhdGlvbkNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUI2ODA0OTcyMEZGQkNFQzEwMDlGN0Y2MiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQXBwbGljYXRp
b25DYWNoZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyRTQ2NEIwRkQ4QTk2
ODAwQTlEOURFIC8qIFdlYlZpZXdEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlZpZXdEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkU0NjRD
MEZEOEE5NjgwMEE5RDlERSAvKiBXZWJWaWV3RGF0YS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZXdEYXRhLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzU0MkM0MDBGRDc3NjZGMDBEOEFCNUQgLyogV2ViRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbkNhY2hpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbkNhY2hpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTExMzMsNiArMTEzNyw4IEBACiAJCQkJMTREODI1MkQwQUY5NTUwOTAwMDRGMDU3IC8qIFdlYkNo
cm9tZUNsaWVudC5oICovLAogCQkJCTE0RDgyNTJFMEFGOTU1MDkwMDA0RjA1NyAvKiBXZWJDaHJv
bWVDbGllbnQubW0gKi8sCiAJCQkJMDY1QUQ1QTEwQjBDMzJDNzAwNUEyQjFEIC8qIFdlYkNvbnRl
eHRNZW51Q2xpZW50LmggKi8sCisJCQkJQjY4MDQ5NzEwRkZCQ0VDMTAwOUY3RjYyIC8qIFdlYkFw
cGxpY2F0aW9uQ2FjaGUuaCAqLywKKwkJCQlCNjgwNDk3MjBGRkJDRUMxMDA5RjdGNjIgLyogV2Vi
QXBwbGljYXRpb25DYWNoZS5tbSAqLywKIAkJCQkwNjVBRDVBMjBCMEMzMkM3MDA1QTJCMUQgLyog
V2ViQ29udGV4dE1lbnVDbGllbnQubW0gKi8sCiAJCQkJQTcwOTM2QUQwQjU2MDhEQzAwQ0RCNDhF
IC8qIFdlYkRyYWdDbGllbnQuaCAqLywKIAkJCQlBNzA5MzZBRTBCNTYwOERDMDBDREI0OEUgLyog
V2ViRHJhZ0NsaWVudC5tbSAqLywKQEAgLTEyNjUsNiArMTI3MSw3IEBACiAJCQkJMUFBRjVDRUEw
RURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBQUY1Q0VDMEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBRjVDRUUwRURERTFGRTAwOEQ4ODNEIC8qIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjY4MDQ5NzMw
RkZCQ0VDMTAwOUY3RjYyIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzOTgxMDlBMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1REU5MkZFRjBCRDcwMTdFMDA1OUE1RkQgLyogV2ViQXNzZXJ0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM5ODEwMjkwODI0QkYwMTAwOERGMDM4IC8qIFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWwuaCBpbiBIZWFkZXJzICovLApAQCAtMTc2Niw2ICsxNzczLDcgQEAKIAkJCQk5MzZB
MkRFODBGRDJEMDgwMDBEMzEyREIgLyogV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM1NDJDNDMwRkQ3NzY2RjAwRDhBQjVEIC8qIFdlYkRlbGVnYXRl
SW1wbGVtZW50YXRpb25DYWNoaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyRTQ2NEUwRkQ4
QTk2ODAwQTlEOURFIC8qIFdlYlZpZXdEYXRhLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQjY4MDQ5
NzQwRkZCQ0VDMTAwOUY3RjYyIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGUubW0gaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsv
Q2hhbmdlTG9nCShyZXZpc2lvbiA0NTQ1NCkKKysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDctMDEgIEFuZHJlaSBQb3Blc2N1ICA8
YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcw
MAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKToKKyAgICAg
ICAgQWRkcyBlbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiByZWFjaGVkTWF4QXBwQ2FjaGVTaXplLgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oOgorCiAyMDA5LTA2LTI5
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBK
YW4gQWxvbnpvLgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmNwcAkocmV2aXNpb24gNDU0NTEpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw2ICs0NTEsMTQgQEAg
dm9pZCBDaHJvbWVDbGllbnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YQogfQogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQordm9pZCBDaHJvbWVDbGllbnQ6OnJl
YWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkKK3sKKyAgICAvLyBGSVhN
RTogRnJlZSBzb21lIHNwYWNlLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwog
dm9pZCBDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNo
b29zZXI+IHBycEZpbGVDaG9vc2VyKQogewogICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3Nl
ciA9IHBycEZpbGVDaG9vc2VyOwpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEd0ay5oCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsOSBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJD
b3JlOjpTdHJpbmcmKTsKICNlbmRpZgorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElP
TlMpCisgICAgICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qg
c3BhY2VOZWVkZWQpOworI2VuZGlmCiAgICAgICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwo
V2ViQ29yZTo6RnJhbWUqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9vc2VyPik7CiAKICAg
ICAgICAgdmlydHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpOb2Rl
KikgeyB9CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDU0NTQpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDA5LTA3LTAxICBBbmRyZWkgUG9wZXNj
dSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI3MDAKKworICAgICAgICBBZGRzIHRoZSBXZWJBcHBsaWNhdGlvbkNhY2hlIGNsYXNzIHRoYXQg
aXMKKyAgICAgICAgdXNlZCBieSB0aGUgRHVtcFJlbmRlclRyZWUgdGVzdCBhcHBsaWNhdGlvbiB0
bworICAgICAgICBjb25maWd1cmUgdGhlIEFwcGxpY2F0aW9uIENhY2hlIG1heGltdW0gc2l6ZS4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUuaDogQWRkZWQu
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQXBwbGljYXRpb25DYWNoZS5tbTogQWRkZWQu
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xp
ZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKToKKyAgICAgICAgQWRkcyBlbXB0eSBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgcmVhY2hlZE1heEFwcENhY2hlU2l6ZSBjYWxsYmFjay4KKyAgICAgICAg
KiBXZWJLaXQuZXhwOgorCiAyMDA5LTA3LTAxICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KSW5kZXg6IFdlYktpdC9tYWMv
V2ViS2l0LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYktpdC5leHAJKHJldmlzaW9u
IDQ1NDUxKQorKysgV2ViS2l0L21hYy9XZWJLaXQuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNCBAQAorLm9iamNfY2xhc3NfbmFtZV9XZWJBcHBsaWNhdGlvbkNhY2hlCiAub2JqY19jbGFz
c19uYW1lX1dlYkFyY2hpdmUKIC5vYmpjX2NsYXNzX25hbWVfV2ViQmFja0ZvcndhcmRMaXN0CiAu
b2JqY19jbGFzc19uYW1lX1dlYkNhY2hlCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkFwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQXBwbGljYXRpb25DYWNoZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitAaW50ZXJmYWNlIFdlYkFwcGxp
Y2F0aW9uQ2FjaGU6IE5TT2JqZWN0IHsKK30KKworKyAodm9pZClzZXRNYXhpbXVtU2l6ZToodW5z
aWduZWQgbG9uZyBsb25nKXNpemU7CitAZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1tCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1tCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbXBvcnQgIldlYkFwcGxpY2F0aW9uQ2FjaGUuaCIKKyNpbXBvcnQgPFdlYkNvcmUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K0BpbXBsZW1lbnRhdGlvbiBXZWJBcHBsaWNhdGlvbkNhY2hlCisKKysgKHZvaWQpc2V0TWF4aW11
bVNpemU6KHVuc2lnbmVkIGxvbmcgbG9uZylzaXplCit7CisgICAgY2FjaGVTdG9yYWdlKCkuZW1w
dHkoKTsKKyAgICBjYWNoZVN0b3JhZ2UoKS52YWN1dW1EYXRhYmFzZUZpbGUoKTsKKyAgICBjYWNo
ZVN0b3JhZ2UoKS5zZXRNYXhpbXVtU2l6ZShzaXplKTsKK30KKworQGVuZApJbmRleDogV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA0NTQ1MSkK
KysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNyw2ICsxMDcsOSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKERBVEFCQVNFKQog
ICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBj
b25zdCBXZWJDb3JlOjpTdHJpbmcmIGRhdGFiYXNlTmFtZSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4QXBw
Q2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lk
IHBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQko
cmV2aXNpb24gNDU0NTEpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTM2LDYgKzUzNiwxMyBAQCB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKIH0KICNlbmRpZgorCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKK3Zv
aWQgV2ViQ2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VO
ZWVkZWQpCit7CisgICAgLy8gRklYTUU6IEZyZWUgc29tZSBzcGFjZS4KK30KKyNlbmRpZgogICAg
IAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBvcHVsYXRlVmlzaXRlZExpbmtzKCkKIHsKSW5kZXg6
IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwko
cmV2aXNpb24gNDU0NTQpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDktMDctMDEgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMAorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21lQ2xpZW50UXQ6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUpOgorICAgICAgICBBZGRzIGVt
cHR5IGltcGxlbWVudGF0aW9uIG9mIHRoZSByZWFjaGVkTWF4QXBwQ2FjaGVTaXplIGNhbGxiYWNr
LgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0Lmg6CisKIDIwMDktMDct
MDEgIEpha3ViIFdpZWN6b3JlayAgPGZhdzIxN0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDYgKzM5OSwx
NCBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpleGNlZWRlZERhdGFiYXNlUXVvCiB9CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCit2b2lkIENocm9tZUNsaWVu
dFF0OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpCit7CisgICAg
Ly8gRklYTUU6IEZyZWUgc29tZSBzcGFjZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2Vu
ZGlmCisKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJ1bk9wZW5QYW5lbChGcmFtZSogZnJhbWUsIFBh
c3NSZWZQdHI8RmlsZUNob29zZXI+IHBycEZpbGVDaG9vc2VyKQogewogICAgIFJlZlB0cjxGaWxl
Q2hvb3Nlcj4gZmlsZUNob29zZXIgPSBwcnBGaWxlQ2hvb3NlcjsKSW5kZXg6IFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTYsNiArMTE2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoREFUQUJBU0Up
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25z
dCBTdHJpbmcmKTsKICNlbmRpZgorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
CisgICAgICAgIHZpcnR1YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7Cisj
ZW5kaWYKICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQ
dHI8RmlsZUNob29zZXI+KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hh
bmdlKGNvbnN0IE5vZGUqKSB7IH0KSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTQ1NCkKKysrIFdlYktpdC93
aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDctMDEg
IEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjcwMAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6cmVhY2hlZE1heEFwcENhY2hl
U2l6ZSk6CisgICAgICAgIEFkZHMgZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlYWNoZWRN
YXhBcHBDYWNoZVNpemUgY2FsbGJhY2suCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Lmg6CisKIDIwMDktMDctMDEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgpJbmRleDogV2ViS2l0L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gNDU0NTEpCisr
KyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU0Myw2ICs1NDMsMTUgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4Y2VlZGVk
RGF0YWJhc2VRdQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKQorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCit2b2lkIFdlYkNocm9t
ZUNsaWVudDo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKQorewor
ICAgIC8vIEZJWE1FOiBGcmVlIHNvbWUgc3BhY2UuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KyNlbmRpZgorCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoKQog
ewogICAgIFdlYkhpc3RvcnkqIGhpc3RvcnkgPSBXZWJIaXN0b3J5OjpzaGFyZWRIaXN0b3J5KCk7
CkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJl
dmlzaW9uIDQ1NDUxKQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiwxMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKQorICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qg
c3BhY2VOZWVkZWQpOworI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVWaXNpdGVk
TGlua3MoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbVNjcm9sbGJhcihXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpT
Y3JvbGxiYXJDb250cm9sU2l6ZSwgCkluZGV4OiBXZWJLaXQvd3gvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC93eC9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1NDU0KQorKysgV2ViS2l0L3d4
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDA5LTA3LTAxICBB
bmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI3MDAKKyAKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVu
dFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFd4OjpyZWFjaGVkTWF4QXBw
Q2FjaGVTaXplKToKKyAgICAgICAgQWRkcyBlbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVh
Y2hlZE1heEFwcENhY2hlU2l6ZSBjYWxsYmFjay4KKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0No
cm9tZUNsaWVudFd4Lmg6CisKIDIwMDktMDYtMDkgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRo
ZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgd3ggYnVpbGQgZml4LCBhZGRpbmcgSlNDb3JlL2Fz
c2VtYmxlciB0byB0aGUgbGlzdCBvZiBpbmNsdWRlIGRpcnMuCkluZGV4OiBXZWJLaXQvd3gvV2Vi
S2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dl
YktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3BwCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktp
dC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgzLDYgKzM4MywxMyBAQCB2b2lkIENocm9tZUNsaWVudFd4OjpleGNlZWRlZERhdGFiYXNlUXVv
CiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCit2b2lk
IENocm9tZUNsaWVudFd4OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVk
ZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCiB2b2lkIENocm9tZUNs
aWVudFd4OjpzY3JvbGwoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRS
ZWN0JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1
cHBvcnQvQ2hyb21lQ2xpZW50V3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3Vw
cG9ydC9DaHJvbWVDbGllbnRXeC5oCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktpdC93eC9XZWJL
aXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUs
MTEgQEAgcHVibGljOgogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICB2aXJ0dWFsIHZvaWQgZXhj
ZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3QgU3RyaW5nJik7CiAjZW5kaWYKKworI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgdmlydHVhbCB2b2lkIHJlYWNo
ZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7CisjZW5kaWYKKwogICAgIHZp
cnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUqKSB7IH0K
SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQ1NDU0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDktMDctMDEgIEFuZHJlaSBQb3Blc2N1ICA8
YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcw
MAorICAgICAgICAKKyAgICAgICAgQWRkcyBhIG5ldyBtZXRob2Qgb24gdGhlIExheW91dFRlc3RD
b250cm9sbGVyIHRoYXQKKyAgICAgICAgYWxsb3dzIGEgSlMgdW5pdCB0ZXN0IHRvIGNvbmZpZ3Vy
ZSB0aGUgbWF4aW11bSBzaXplCisgICAgICAgIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZS4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKHNldEFwcENhY2hlTWF4aW11bVNpemVDYWxsYmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEFwcENhY2hlTWF4aW11bVNpemUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9M
YXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gv
TGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisKIDIwMDktMDctMDEgIENocmlzIEZsZWl6YWNo
ICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCZXRoIERha2lu
LgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gNDU0NTEpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw2ICs0
ODcsMjIgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QWNjZXB0c0VkaXRpbmdDYWxsYgogICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVS
ZWYgc2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKwor
ICAgIGRvdWJsZSBzaXplID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
TlVMTCk7CisgICAgaWYgKCFpc25hbihzaXplKSkKKyAgICAgICAgY29udHJvbGxlci0+c2V0QXBw
Q2FjaGVNYXhpbXVtU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUpKTsK
KyAgICAgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCit9
CisKIHN0YXRpYyBKU1ZhbHVlUmVmIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkQ2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIC8vIEhhcyBtYWMgJiB3aW5k
b3dzIGltcGxlbWVudGF0aW9uCkBAIC05MDYsNiArOTIyLDcgQEAgSlNTdGF0aWNGdW5jdGlvbiog
TGF5b3V0VGVzdENvbnRyb2xsZXI6OgogICAgICAgICB7ICJyZXBhaW50U3dlZXBIb3Jpem9udGFs
bHkiLCByZXBhaW50U3dlZXBIb3Jpem9udGFsbHlDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJzZXRBY2NlcHRzRWRpdGluZyIsIHNldEFjY2VwdHNFZGl0aW5nQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
ICAgICAgICAgeyAic2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQiLCBzZXRBdXRob3JBbmRV
c2VyU3R5bGVzRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldEFwcENhY2hl
TWF4aW11bVNpemUiLCBzZXRBcHBDYWNoZU1heGltdW1TaXplQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwgCiAg
ICAgICAgIHsgInNldENhbGxDbG9zZU9uV2ViVmlld3MiLCBzZXRDYWxsQ2xvc2VPbldlYlZpZXdz
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0Q2FuT3BlbldpbmRvd3MiLCBzZXRDYW5P
cGVuV2luZG93c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldENhY2hlTW9kZWwiLCBz
ZXRDYWNoZU1vZGVsQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gNDU0NTEpCisr
KyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHF1ZXVlTm9uTG9h
ZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpOwogICAgIHZvaWQgcXVldWVSZWxvYWQoKTsK
ICAgICB2b2lkIHNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNjZXB0c0VkaXRpbmcpOworICAgIHZv
aWQgc2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOwogICAg
IHZvaWQgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRD
YWNoZU1vZGVsKGludCk7CiAgICAgdm9pZCBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNl
dERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpOwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCShy
ZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRU
ZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw2ICszMjYsMTEgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdQogICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhp
bXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Cit9CisKIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBK
U1N0cmluZ1JlZiBlbGVtZW50SWQpCiB7ICAgIAogICAgIGdjaGFyKiBuYW1lID0gSlNTdHJpbmdD
b3B5VVRGOENTdHJpbmcoYW5pbWF0aW9uTmFtZSk7CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCShy
ZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRU
ZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2ViS2l0L0RP
TURvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NRWxlbWVudC5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dlYkFwcGxpY2F0aW9uQ2FjaGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJCYWNrRm9yd2Fy
ZExpc3QuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViRGF0YVNvdXJjZS5oPgpAQCAtMTkwLDYgKzE5MSwxMSBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpCiAgICAgWyhFZGl0aW5nRGVsZWdh
dGUgKilbW21haW5GcmFtZSB3ZWJWaWV3XSBlZGl0aW5nRGVsZWdhdGVdIHNldEFjY2VwdHNFZGl0
aW5nOm5ld0FjY2VwdHNFZGl0aW5nXTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBb
V2ViQXBwbGljYXRpb25DYWNoZSBzZXRNYXhpbXVtU2l6ZTpzaXplXTsKK30KKwogdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBmbGFn
KQogewogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWQ6ZmxhZ107CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlz
aW9uIDQ1NDUxKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RD
b250cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk5LDYgKzY5OSwxMSBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1CiAgICAgcHJpbnRmKCJFUlJPUjog
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXVvdGEoKSBub3QgaW1wbGVtZW50ZWRc
biIpOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1T
aXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQoreworICAgIHByaW50ZigiRVJST1I6IExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKCkgbm90IGltcGxlbWVudGVk
XG4iKTsKK30KKwogYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRp
bWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUs
IEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKIHsKICAgICBDT01QdHI8SURPTURvY3VtZW50PiBkb2N1
bWVudDsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250
cm9sbGVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4
L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDYsNiArMjA2LDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dERhdGFiYXNlUXUKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNp
emUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCiB1bnNpZ25lZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKIHsKICAgICAvLyBG
SVhNRTogaW1wbGVtZW50CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTQ1NCkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDA5LTA3LTAxICBB
bmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI3MDAKKworICAgICAgICBBZGRzIGEgdW5pdCB0ZXN0IHRoYXQgZW5zdXJl
cyB0aGF0IHRoZSBtZWNoYW5pc20gdGhhdAorICAgICAgICBlbmZvcmNlcyB0aGUgbWF4aW11bSBz
aXplIG9mIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBpcworICAgICAgICB3b3JraW5nIGNvcnJlY3Rs
eS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvbWF4LXNpemUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2FwcGNhY2hlL21heC1zaXplLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvcmVzb3VyY2VzL21heHNpemUubWFu
aWZlc3Q6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDA5LTA3
LTAxICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQmV0aCBEYWtpbi4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2Fj
aGUvbWF4LXNpemUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvYXBwY2FjaGUvbWF4LXNpemUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9tYXgtc2l6ZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNCBAQAorQ2FjaGUgYSBtYW5pZmVzdCB0aGF0IGNvbnRhaW5zIGEg
cmVzb3VyY2UgdGhhdCBpcyB0b28gbGFyZ2UgdG8gZml0LiBUaGUgbGF5b3V0IHRlc3QgY29udHJv
bGxlciBzZXRzIGEgbWF4aW11bSBzaXplIG9mIDEwS0IgZm9yIHRoZSBhcHBsaWNhdGlvbiBjYWNo
ZSBkYXRhYmFzZSBmaWxlLgorCitTVUNDRVNTCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvYXBwY2FjaGUvbWF4LXNpemUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2FwcGNhY2hlL21heC1zaXplLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2FwcGNhY2hlL21heC1zaXplLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjggQEAKKzxodG1sIG1hbmlmZXN0PSJyZXNvdXJjZXMvbWF4c2l6ZS5tYW5pZmVzdCI+Cis8
Ym9keT4NCis8c2NyaXB0Pg0KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEFwcENhY2hlTWF4aW11bVNpemUoMTAg
KiAxMDI0KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCisgICAgeworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7CisgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLnNldEFwcENhY2hlTWF4aW11bVNpemUoMTAwICogMTAyNCAqIDEwMjQpOworICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgYXBwbGljYXRpb25DYWNoZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7IGxvZygi
U1VDQ0VTUyIpOyB9CisgICAgYXBwbGljYXRpb25DYWNoZS5vbmNhY2hlZCA9IGZ1bmN0aW9uKCkg
eyBsb2coIkZBSUw6IHJlY2VpdmVkIHVuZXhwZWN0ZWQgY2FjaGVkIGV2ZW50Iik7IH0KKyAgICBh
cHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBmdW5jdGlvbigpIHsgbG9nKCJGQUlMOiByZWNl
aXZlZCB1bmV4cGVjdGVkIG9ubm91cGRhdGUgZXZlbnQiKTsgfQorICAgIGFwcGxpY2F0aW9uQ2Fj
aGUub251cGRhdGVyZWFkeSA9IGZ1bmN0aW9uKCkgeyBsb2coIkZBSUw6IHJlY2VpdmVkIHVuZXhw
ZWN0ZWQgb251cGRhdGVyZWFkeSBldmVudCIpOyB9Cis8L3NjcmlwdD4KKw0KKzxwPkNhY2hlIGEg
bWFuaWZlc3QgdGhhdCBjb250YWlucyBhIHJlc291cmNlIHRoYXQgaXMgdG9vIGxhcmdlIHRvIGZp
dC4gVGhlIGxheW91dCB0ZXN0IGNvbnRyb2xsZXIgc2V0cyBhIG1heGltdW0gc2l6ZSBvZiAxMEtC
IGZvciB0aGUgYXBwbGljYXRpb24gY2FjaGUgZGF0YWJhc2UgZmlsZS48L3A+DQorPGRpdiBpZD1y
ZXN1bHQ+PC9kaXY+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9tYXhzaXplLm1hbmlmZXN0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvcmVzb3VyY2VzL21heHNpemUubWFuaWZl
c3QJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291
cmNlcy9tYXhzaXplLm1hbmlmZXN0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NBQ0hF
IE1BTklGRVNUCisjdjEKK2FiZS5wbmcKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9T
a2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShy
ZXZpc2lvbiA0NTQ1MSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzAsNyArNDMwLDcgQEAgc3RvcmFnZS9zdWNjZXNzLWNhbGxiYWNrLmh0
bWwKIHN0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLmh0bWwKIAogIyBBcHBsaWNhdGlvbiBj
YWNoZQotaHR0cC90ZXN0cy9hcHBjYWNoZQorI2h0dHAvdGVzdHMvYXBwY2FjaGUKIAogIyA8cmRh
cjovL3Byb2JsZW0vNTk2MTAwNj4gTGF5b3V0VGVzdHMgdGhhdCBzZW5kIGFuIE9QVElPTlMgcmVx
dWVzdCBkb24ndCB3b3JrIG9uIFdpbmRvd3MgZHVlIHRvIEFwYWNoZSAxLjMKIGh0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYmFzaWMtbm9uLXNpbXBsZS1hbGxvdy1hc3lu
Yy5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32162</attachid>
            <date>2009-07-01 17:08:10 -0700</date>
            <delta_ts>2009-07-14 06:41:18 -0700</delta_ts>
            <desc>New proposal to limit the maximum size of the application cache (take 7)</desc>
            <filename>22700.patch</filename>
            <type>text/plain</type>
            <size>65769</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTQ1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDktMDctMDEgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3Q6IGh0dHAvdGVzdHMvYXBwY2FjaGUvbWF4LXNpemUuaHRtbAorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMAorIAorICAgICAgICBodHRw
czovL2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1kZXYvMjAwOS1NYXkvMDA3NTYw
Lmh0bWwKKyAKKyAgICAgICAgVGhpcyBjaGFuZ2UgaW1wbGVtZW50cyBhIG1lY2hhbmlzbSBmb3Ig
bGltaXRpbmcgdGhlIG1heGltdW0gc2l6ZSBvZgorICAgICAgICB0aGUgYXBwbGljYXRpb24gY2Fj
aGUgZmlsZS4gV2hlbiB0aGlzIHNpemUgaXMgcmVhY2hlZCwgYSBDaHJvbWVDbGllbnQKKyAgICAg
ICAgY2FsbGJhY2sgaXMgaW52b2tlZCBhc3luY2hyb25vdXNseSBhbmQgdGhlIHNhdmluZyBvZiB0
aGUgbGFzdCAoZmFpbGVkKQorICAgICAgICBjYWNoZSBpcyByZXRyaWVkIGF1dG9tYXRpY2FsbHku
CisgICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBhbHNvIGV4dGVuZHMgdGhlIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlIEFQSSBieSBhbGxvd2luZworICAgICAgICBhIGNsaWVudCB0byBxdWVy
eSBvciBtb2RpZnkgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIHdpdGhvdXQgaGF2aW5nIHRvCisgICAg
ICAgIGxvYWQgYW55IHJlc291cmNlcyBpbnRvIG1lbW9yeS4KKworICAgICAgICAqIFdlYkNvcmUu
YmFzZS5leHA6CisgICAgICAgIEV4cG9ydHMgdGhlIHN5bWJvbHMgcmVxdWlyZWQgYnkgdGhlIER1
bXBSZW5kZXJUcmVlIHRlc3QgYXBwbGljYXRpb24uCisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oOgorICAgICAgICBBZGRzIGVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXcgQ2hy
b21lQ2xpZW50IG1ldGhvZHMuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGUuY3BwOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmg6
CisgICAgICAgIEFkZHMgdGhlIGFiaWxpdHkgdG8gY2FsY3VsYXRlIHRoZSBhcHByb3hpbWF0ZSBz
aXplIG9mIGFuIEFwcGxpY2F0aW9uQ2FjaGUgb2JqZWN0LgorICAgICAgICAqIGxvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaDoKKyAgICAgICAgSW52b2tlcyB0aGUgQ2hyb21lQ2xp
ZW50IGNhbGxiYWNrIHdoZW4gdGhlIHN0b3JhZ2UgbGF5ZXIgcnVucyBvdXQgb2Ygc3BhY2UuCisJ
CUFmdGVyIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkLCB3ZSByZS1hdHRlbXB0IHRvIHN0b3JlIHRo
ZSBuZXdlc3QgY2FjaGUsCisJCWluIGNhc2UgdGhlIENocm9tZUNsaWVudCBoYXMgZnJlZWQgc29t
ZSBzcGFjZS4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmg6CisgICAgICAgIEFkZHMgdGhlIGFiaWxpdHkgdG8gY2FsY3VsYXRlIHRoZSBhcHByb3hp
bWF0ZSBzaXplIG9mIGFuIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSBvYmplY3QuCisgICAgICAg
ICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAg
KiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaDoKKyAgICAgICAgRW5m
b3JjZXMgYSBtYXhpbXVtIHNpemUgZm9yIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBmaWxlLgorICAg
ICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIEFkZHMgYSBuZXcgY2FsbGJhY2ss
IGludm9rZWQgd2hlbiB0aGUgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UgcmVwb3J0cyB0aGF0IGl0
IGhhcworICAgICAgICByZWFjaGVkIHRoZSBtYXhpbXVtIHNpemUgZm9yIGl0cyBkYXRhYmFzZSBm
aWxlLgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmg6CisgICAgICAgIEFkZHMgYSBuZXcgbWV0
aG9kIHRoYXQgYWxsb3dzIHF1ZXJ5aW5nIGZvciB0aGUgYW1vdW50IG9mIHVudXNlZCBzcGFjZSBp
bnNpZGUgdGhlCisgICAgICAgIGFwcGxpY2F0aW9uIGNhY2hlIGRhdGFiYXNlIGZpbGUuCisKIDIw
MDktMDctMDEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNDU0NTEpCisrKyBX
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw2ICs0MzksOCBA
QCBfX1pON1dlYkNvcmUyMmV4dGVybmFsUmVwcmVzZW50YXRpb25FUE5TCiBfX1pON1dlYkNvcmUy
M0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlMTZzdG9yZUNvcHlPZkNhY2hlRVJLTlNfNlN0cmluZ0VQ
TlNfMTZBcHBsaWNhdGlvbkNhY2hlRQogX19aTjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTE3c2V0Q2FjaGVEaXJlY3RvcnlFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMjNBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTVlbXB0eUV2CitfX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlMTRzZXRNYXhpbXVtU2l6ZUV4CitfX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlMTh2YWN1dW1EYXRhYmFzZUZpbGVFdgogX19aTjdXZWJDb3JlMjNSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZEMxRVBOU184RG9jdW1lbnRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTZEb2N1
bWVudEZyYWdtZW50RUVFYmJiYmJOU18xMEVkaXRBY3Rpb25FCiBfX1pON1dlYkNvcmUyM2NyZWF0
ZUZyYWdtZW50RnJvbU5vZGVzRVBOU184RG9jdW1lbnRFUktOM1dURjZWZWN0b3JJUE5TXzROb2Rl
RUxtMEVFRQogX19aTjdXZWJDb3JlMjRCaW5hcnlQcm9wZXJ0eUxpc3RXcml0ZXIxN3dyaXRlUHJv
cGVydHlMaXN0RXYKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiA0NTQ1MSkKKysr
IFdlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiAr
MTMzLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3Rh
KEZyYW1lKiwgY29uc3QgU3RyaW5nJikgeyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCisgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNp
emUoaW50NjRfdCkgeyB9CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwo
RnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
Zm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUqKSB7IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEFwcGxpY2F0aW9uQ2FjaGU6
OkFwcGxpY2F0aW9uQ2FjaGUoKQogICAgIDogbV9ncm91cCgwKQogICAgICwgbV9tYW5pZmVzdCgw
KQorICAgICwgbV9zaXplKDApCiAgICAgLCBtX3N0b3JhZ2VJRCgwKQogewogfQpAQCAtODYsNyAr
ODcsOSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGU6OmFkZFJlc291cmNlKFBhc3NSCiAgICAgICAg
IC8vIEFkZCB0aGUgcmVzb3VyY2UgdG8gdGhlIHN0b3JhZ2UuCiAgICAgICAgIGNhY2hlU3RvcmFn
ZSgpLnN0b3JlKHJlc291cmNlLmdldCgpLCB0aGlzKTsKICAgICB9Ci0gICAgCisKKyAgICBtX3Np
emUgKz0gcmVzb3VyY2UtPnNpemUoKTsKKwogICAgIG1fcmVzb3VyY2VzLnNldCh1cmwsIHJlc291
cmNlKTsKIH0KIApAQCAtMTAwLDcgKzEwMyw5IEBAIHVuc2lnbmVkIEFwcGxpY2F0aW9uQ2FjaGU6
OnJlbW92ZVJlc291cmMKICAgICB1bnNpZ25lZCB0eXBlID0gaXQtPnNlY29uZC0+dHlwZSgpOwog
CiAgICAgbV9yZXNvdXJjZXMucmVtb3ZlKGl0KTsKLSAgICAKKworICAgIG1fc2l6ZSAtPSBpdC0+
c2Vjb25kLT5zaXplKCk7CisKICAgICByZXR1cm4gdHlwZTsKIH0gICAgCiAgICAgCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oCShyZXZpc2lvbiA0NTQ1
MSkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODcsNiArODcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGJvb2wg
cmVxdWVzdElzSFRUUE9ySFRUUFNHZXQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKKyAgICBp
bnQ2NF90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKwogcHJpdmF0ZToKICAgICBB
cHBsaWNhdGlvbkNhY2hlKCk7CiAgICAgCkBAIC05Nyw2ICs5OSw5IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPEtVUkw+IG1fb25saW5lV2hpdGVsaXN0OwogICAgIEZhbGxiYWNrVVJMVmVjdG9yIG1f
ZmFsbGJhY2tVUkxzOwogCisgICAgLy8gVGhlIHRvdGFsIHNpemUgb2YgdGhlIHJlc291cmNlcyBi
ZWxvbmdpbmcgdG8gdGhpcyBBcHBsaWNhdGlvbiBDYWNoZSBpbnN0YW5jZS4KKyAgICBpbnQ2NF90
IG1fc2l6ZTsKKwogICAgIHVuc2lnbmVkIG1fc3RvcmFnZUlEOwogfTsKIApJbmRleDogV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCShyZXZp
c2lvbiA0NTQ1MSkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVH
cm91cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcHBs
aWNhdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgiCiAj
aW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRPTUFwcGxpY2F0
aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKQEAgLTUzLDYgKzU0LDcgQEAgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjpBcHBsaWNhdGlvbkNhY2hlRwogICAgICwgbV9pc09ic29sZXRl
KGZhbHNlKQogICAgICwgbV9jb21wbGV0aW9uVHlwZShOb25lKQogICAgICwgbV9pc0NvcHkoaXND
b3B5KQorICAgICwgbV9jYWxsZWRDaHJvbWVDbGllbnQoZmFsc2UpCiB7CiB9CiAKQEAgLTY1Miw2
ICs2NTQsMTUgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZEZpbmlzaExvYQogICAg
IHN0YXJ0TG9hZGluZ0VudHJ5KCk7CiB9CiAKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpk
aWRSZWFjaE1heEFwcENhY2hlU2l6ZSgpCit7CisgICAgQVNTRVJUKG1fZnJhbWUpOworICAgIEFT
U0VSVChtX2NhY2hlQmVpbmdVcGRhdGVkKTsKKyAgICBtX2ZyYW1lLT5wYWdlKCktPmNocm9tZSgp
LT5jbGllbnQoKS0+cmVhY2hlZE1heEFwcENhY2hlU2l6ZShjYWNoZVN0b3JhZ2UoKS5zcGFjZU5l
ZWRlZChtX2NhY2hlQmVpbmdVcGRhdGVkLT5zaXplKCkpKTsKKyAgICBtX2NhbGxlZENocm9tZUNs
aWVudCA9IHRydWU7CisgICAgY2hlY2tJZkxvYWRJc0NvbXBsZXRlKCk7Cit9CisKIHZvaWQgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjpjYWNoZVVwZGF0ZUZhaWxlZCgpCiB7CiAgICAgc3RvcExvYWRp
bmcoKTsKQEAgLTczMCw3ICs3NDEsMTUgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNo
ZWNrSWZMb2FkSQogICAgICAgICAvLyBGSVhNRTogRmV0Y2ggdGhlIHJlc291cmNlIGZyb20gbWFu
aWZlc3QgVVJMIGFnYWluLCBhbmQgY2hlY2sgd2hldGhlciBpdCBpcyBpZGVudGljYWwgdG8gdGhl
IG9uZSB1c2VkIGZvciB1cGRhdGUgKGluIGNhc2UgdGhlIGFwcGxpY2F0aW9uIHdhcyB1cGdyYWRl
ZCBzZXJ2ZXItc2lkZSBpbiB0aGUgbWVhbndoaWxlKS4gKDxyZGFyOi8vcHJvYmxlbS82NDY3NjI1
PikKIAogICAgICAgICBBU1NFUlQobV9jYWNoZUJlaW5nVXBkYXRlZCk7Ci0gICAgICAgIG1fY2Fj
aGVCZWluZ1VwZGF0ZWQtPnNldE1hbmlmZXN0UmVzb3VyY2UobV9tYW5pZmVzdFJlc291cmNlLnJl
bGVhc2UoKSk7CisgICAgICAgIGlmIChtX21hbmlmZXN0UmVzb3VyY2UpCisgICAgICAgICAgICBt
X2NhY2hlQmVpbmdVcGRhdGVkLT5zZXRNYW5pZmVzdFJlc291cmNlKG1fbWFuaWZlc3RSZXNvdXJj
ZS5yZWxlYXNlKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbiBnZXQg
aGVyZSBhcyBhIHJlc3VsdCBvZiByZXRyeWluZyB0aGUgQ29tcGxldGUgc3RlcCwgZm9sbG93aW5n
CisgICAgICAgICAgICAvLyBhIGZhaWx1cmUgb2YgdGhlIGNhY2hlIHN0b3JhZ2UgdG8gc2F2ZSB0
aGUgbmV3ZXN0IGNhY2hlIGR1ZSB0byBoaXR0aW5nCisgICAgICAgICAgICAvLyB0aGUgbWF4aW11
bSBzaXplLiBJbiBzdWNoIGEgY2FzZSwgbV9tYW5pZmVzdFJlc291cmNlIG1heSBiZSBOVUxMLCBh
cworICAgICAgICAgICAgLy8gdGhlIG1hbmlmZXN0IHdhcyBhbHJlYWR5IHNldCBvbiB0aGUgbmV3
ZXN0IGNhY2hlIG9iamVjdC4KKyAgICAgICAgICAgIEFTU0VSVChjYWNoZVN0b3JhZ2UoKS5pc01h
eGltdW1TaXplUmVhY2hlZCgpICYmIG1fY2FsbGVkQ2hyb21lQ2xpZW50KTsKKyAgICAgICAgfQog
CiAgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBvbGROZXdlc3RDYWNoZSA9IChtX25l
d2VzdENhY2hlID09IG1fY2FjaGVCZWluZ1VwZGF0ZWQpID8gMCA6IG1fbmV3ZXN0Q2FjaGU7CiAK
QEAgLTc0MiwyOCArNzYxLDQ0IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjaGVja0lm
TG9hZEkKICAgICAgICAgICAgIC8vIEZpcmUgdGhlIHN1Y2Nlc3MgZXZlbnRzLgogICAgICAgICAg
ICAgcG9zdExpc3RlbmVyVGFzayhpc1VwZ3JhZGVBdHRlbXB0ID8gJkRPTUFwcGxpY2F0aW9uQ2Fj
aGU6OmNhbGxVcGRhdGVSZWFkeUxpc3RlbmVyIDogJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxD
YWNoZWRMaXN0ZW5lciwgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzKTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIFJ1biB0aGUgImNhY2hlIGZhaWx1cmUgc3RlcHMiCi0gICAg
ICAgICAgICAvLyBGaXJlIHRoZSBlcnJvciBldmVudHMgdG8gYWxsIHBlbmRpbmcgbWFzdGVyIGVu
dHJpZXMsIGFzIHdlbGwgYW55IG90aGVyIGNhY2hlIGhvc3RzCi0gICAgICAgICAgICAvLyBjdXJy
ZW50bHkgYXNzb2NpYXRlZCB3aXRoIGEgY2FjaGUgaW4gdGhpcyBncm91cC4KLSAgICAgICAgICAg
IHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvckxpc3RlbmVy
LCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOwotICAgICAgICAgICAgLy8gRGlzYXNzb2Np
YXRlIHRoZSBwZW5kaW5nIG1hc3RlciBlbnRyaWVzIGZyb20gdGhlIGZhaWxlZCBuZXcgY2FjaGUu
IE5vdGUgdGhhdAotICAgICAgICAgICAgLy8gYWxsIG90aGVyIGxvYWRlcnMgaW4gdGhlIG1fYXNz
b2NpYXRlZERvY3VtZW50TG9hZGVycyBhcmUgc3RpbGwgYXNzb2NpYXRlZCB3aXRoCi0gICAgICAg
ICAgICAvLyBzb21lIG90aGVyIGNhY2hlIGluIHRoaXMgZ3JvdXAuIFRoZXkgYXJlIG5vdCBhc3Nv
Y2lhdGVkIHdpdGggdGhlIGZhaWxlZCBuZXcgY2FjaGUuCi0KLSAgICAgICAgICAgIC8vIE5lZWQg
dG8gY29weSBsb2FkZXJzLCBiZWNhdXNlIHRoZSBjYWNoZSBncm91cCBtYXkgYmUgZGVzdHJveWVk
IGF0IHRoZSBlbmQgb2YgaXRlcmF0aW9uLgotICAgICAgICAgICAgVmVjdG9yPERvY3VtZW50TG9h
ZGVyKj4gbG9hZGVyczsKLSAgICAgICAgICAgIGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdNYXN0ZXJS
ZXNvdXJjZUxvYWRlcnMsIGxvYWRlcnMpOwotICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gbG9h
ZGVycy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBjb3VudDsg
KytpKQotICAgICAgICAgICAgICAgIGRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKGxvYWRlcnNb
aV0pOyAvLyBUaGlzIGNhbiBkZWxldGUgdGhpcyBncm91cC4KLQotICAgICAgICAgICAgLy8gUmVp
bnN0YXRlIHRoZSBvbGROZXdlc3RDYWNoZSwgaWYgdGhlcmUgd2FzIG9uZS4KLSAgICAgICAgICAg
IGlmIChvbGROZXdlc3RDYWNoZSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBkaXNj
YXJkIHRoZSBmYWlsZWQgbmV3IGNhY2hlLgotICAgICAgICAgICAgICAgIHNldE5ld2VzdENhY2hl
KG9sZE5ld2VzdENhY2hlLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIC8vIFdlIG11c3QgaGF2ZSBiZWVuIGRlbGV0ZWQgYnkgdGhlIGxhc3QgY2FsbCB0
byBkaXNhc3NvY2lhdGVEb2N1bWVudExvYWRlcigpLgorICAgICAgICAgICAgaWYgKGNhY2hlU3Rv
cmFnZSgpLmlzTWF4aW11bVNpemVSZWFjaGVkKCkgJiYgIW1fY2FsbGVkQ2hyb21lQ2xpZW50KSB7
CisgICAgICAgICAgICAgICAgLy8gV2UgcmFuIG91dCBvZiBzcGFjZS4gQWxsIHRoZSBjaGFuZ2Vz
IGluIHRoZSBjYWNoZSBzdG9yYWdlIGhhdmUKKyAgICAgICAgICAgICAgICAvLyBiZWVuIHJvbGxl
ZCBiYWNrLiBXZSByb2xsIGJhY2sgdG8gdGhlIHByZXZpb3VzIHN0YXRlIGluIGhlcmUsCisgICAg
ICAgICAgICAgICAgLy8gYXMgd2VsbCwgY2FsbCB0aGUgY2hyb21lIGNsaWVudCBhc3luY2hyb25v
dXNseSBhbmQgcmV0cnkgdG8KKyAgICAgICAgICAgICAgICAvLyBzYXZlIHRoZSBuZXcgY2FjaGUu
CisKKyAgICAgICAgICAgICAgICAvLyBTYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXcgY2FjaGUu
CisgICAgICAgICAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRlZCA9IG1fbmV3ZXN0Q2FjaGUucmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgIGlmIChvbGROZXdlc3RDYWNoZSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBSZWluc3RhdGUgdGhlIG9sZE5ld2VzdENhY2hlLgorICAgICAgICAgICAg
ICAgICAgICBzZXROZXdlc3RDYWNoZShvbGROZXdlc3RDYWNoZS5yZWxlYXNlKCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNoZVNp
emUoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFJ1biB0aGUgImNhY2hlIGZhaWx1cmUgc3RlcHMiCisgICAgICAgICAg
ICAgICAgLy8gRmlyZSB0aGUgZXJyb3IgZXZlbnRzIHRvIGFsbCBwZW5kaW5nIG1hc3RlciBlbnRy
aWVzLCBhcyB3ZWxsIGFueSBvdGhlciBjYWNoZSBob3N0cworICAgICAgICAgICAgICAgIC8vIGN1
cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBpbiB0aGlzIGdyb3VwLgorICAgICAgICAg
ICAgICAgIHBvc3RMaXN0ZW5lclRhc2soJkRPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvckxp
c3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOworICAgICAgICAgICAgICAgIC8v
IERpc2Fzc29jaWF0ZSB0aGUgcGVuZGluZyBtYXN0ZXIgZW50cmllcyBmcm9tIHRoZSBmYWlsZWQg
bmV3IGNhY2hlLiBOb3RlIHRoYXQKKyAgICAgICAgICAgICAgICAvLyBhbGwgb3RoZXIgbG9hZGVy
cyBpbiB0aGUgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzIGFyZSBzdGlsbCBhc3NvY2lhdGVk
IHdpdGgKKyAgICAgICAgICAgICAgICAvLyBzb21lIG90aGVyIGNhY2hlIGluIHRoaXMgZ3JvdXAu
IFRoZXkgYXJlIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIGZhaWxlZCBuZXcgY2FjaGUuCisKKyAg
ICAgICAgICAgICAgICAvLyBOZWVkIHRvIGNvcHkgbG9hZGVycywgYmVjYXVzZSB0aGUgY2FjaGUg
Z3JvdXAgbWF5IGJlIGRlc3Ryb3llZCBhdCB0aGUgZW5kIG9mIGl0ZXJhdGlvbi4KKyAgICAgICAg
ICAgICAgICBWZWN0b3I8RG9jdW1lbnRMb2FkZXIqPiBsb2FkZXJzOworICAgICAgICAgICAgICAg
IGNvcHlUb1ZlY3RvcihtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMsIGxvYWRlcnMpOwor
ICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IGxvYWRlcnMuc2l6ZSgpOworICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGNvdW50OyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIGRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKGxvYWRlcnNbaV0pOyAvLyBUaGlzIGNh
biBkZWxldGUgdGhpcyBncm91cC4KKworICAgICAgICAgICAgICAgIC8vIFJlaW5zdGF0ZSB0aGUg
b2xkTmV3ZXN0Q2FjaGUsIGlmIHRoZXJlIHdhcyBvbmUuCisgICAgICAgICAgICAgICAgaWYgKG9s
ZE5ld2VzdENhY2hlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBkaXNjYXJk
IHRoZSBmYWlsZWQgbmV3IGNhY2hlLgorICAgICAgICAgICAgICAgICAgICBzZXROZXdlc3RDYWNo
ZShvbGROZXdlc3RDYWNoZS5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgaGF2ZSBiZWVuIGRlbGV0ZWQgYnkgdGhlIGxh
c3QgY2FsbCB0byBkaXNhc3NvY2lhdGVEb2N1bWVudExvYWRlcigpLgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwpAQCAtNzc1LDYgKzgxMCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpjaGVja0lmTG9hZEkKICAgICBtX2NvbXBsZXRpb25UeXBlID0gTm9uZTsKICAgICBt
X3VwZGF0ZVN0YXR1cyA9IElkbGU7CiAgICAgbV9mcmFtZSA9IDA7CisgICAgbV9jYWxsZWRDaHJv
bWVDbGllbnQgPSBmYWxzZTsKIH0KIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnN0YXJ0
TG9hZGluZ0VudHJ5KCkKQEAgLTg1Nyw3ICs4OTMsMzIgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hl
R3JvdXA6OmFzc29jaWF0ZURvYwogICAgIEFTU0VSVCghbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2Fk
ZXJzLmNvbnRhaW5zKGxvYWRlcikpOwogICAgIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5h
ZGQobG9hZGVyKTsKIH0KLSAKKworY2xhc3MgQ2hyb21lQ2xpZW50Q2FsbGJhY2tUaW1lcjogcHVi
bGljIFRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgQ2hyb21lQ2xpZW50Q2FsbGJhY2tUaW1lcihB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGNhY2hlR3JvdXApCisgICAgICAgIDogbV9jYWNoZUdyb3Vw
KGNhY2hlR3JvdXApCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQg
ZmlyZWQoKQorICAgIHsKKyAgICAgICAgbV9jYWNoZUdyb3VwLT5kaWRSZWFjaE1heEFwcENhY2hl
U2l6ZSgpOworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CisKKyAgICBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXAqIG1fY2FjaGVHcm91cDsKK307CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNoZVNpemUoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgQ2hyb21lQ2xpZW50Q2FsbGJhY2tUaW1lciogdGltZXIgPSBuZXcgQ2hy
b21lQ2xpZW50Q2FsbGJhY2tUaW1lcih0aGlzKTsKKyAgICB0aW1lci0+c3RhcnRPbmVTaG90KDAp
OworICAgIC8vIFRoZSB0aW1lciB3aWxsIGRlbGV0ZSBpdHNlbGYgb25jZSBpdCBmaXJlcy4KK30K
KwogY2xhc3MgQ2FsbENhY2hlTGlzdGVuZXJUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2sgewogICAgIHR5cGVkZWYgdm9pZCAoRE9NQXBwbGljYXRpb25DYWNoZTo6Kkxp
c3RlbmVyRnVuY3Rpb24pKCk7CiBwdWJsaWM6CkBAIC05MTAsNyArOTcxLDcgQEAgdm9pZCBBcHBs
aWNhdGlvbkNhY2hlR3JvdXA6OmNsZWFyU3RvcmFnZQogICAgIGZvciAoSGFzaFNldDxBcHBsaWNh
dGlvbkNhY2hlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jYWNoZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQogICAgICAgICAoKml0KS0+Y2xlYXJTdG9yYWdlSUQoKTsKIH0KLSAgICAKKwog
CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5oCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0Fw
cGxpY2F0aW9uQ2FjaGVHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKIGNsYXNzIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTsKK2NsYXNzIENocm9tZUNsaWVudENhbGxiYWNrVGltZXI7CiBj
bGFzcyBET01BcHBsaWNhdGlvbkNhY2hlOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBEb2N1bWVu
dExvYWRlcjsKQEAgLTk1LDYgKzk2LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBwb3N0
TGlzdGVuZXJUYXNrKExpc3RlbmVyRnVuY3Rpb24sIGNvbnN0IEhhc2hTZXQ8RG9jdW1lbnRMb2Fk
ZXIqPiYpOwogICAgIHN0YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2soTGlzdGVuZXJGdW5jdGlv
biwgY29uc3QgVmVjdG9yPFJlZlB0cjxEb2N1bWVudExvYWRlcj4gPiYgbG9hZGVycyk7CiAgICAg
c3RhdGljIHZvaWQgcG9zdExpc3RlbmVyVGFzayhMaXN0ZW5lckZ1bmN0aW9uLCBEb2N1bWVudExv
YWRlciopOworICAgIHZvaWQgc2NoZWR1bGVSZWFjaGVkTWF4QXBwQ2FjaGVTaXplKCk7CiAKICAg
ICBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGVSZXNvdXJjZUhhbmRsZShjb25zdCBL
VVJMJiwgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBuZXdlc3RDYWNoZWRSZXNvdXJjZSk7CiAK
QEAgLTEwNiw2ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkUmVjZWl2ZU1hbmlmZXN0
UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1h
bmlmZXN0RGF0YShjb25zdCBjaGFyKiwgaW50KTsKICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdN
YW5pZmVzdCgpOworICAgIHZvaWQgZGlkUmVhY2hNYXhBcHBDYWNoZVNpemUoKTsKICAgICAKICAg
ICB2b2lkIHN0YXJ0TG9hZGluZ0VudHJ5KCk7CiAgICAgdm9pZCBkZWxpdmVyRGVsYXllZE1haW5S
ZXNvdXJjZXMoKTsKQEAgLTE2MywxMiArMTY2LDE5IEBAIHByaXZhdGU6CiAKICAgICAvLyBXaGV0
aGVyIHRoaXMgY2FjaGUgZ3JvdXAgaXMgYSBjb3B5IHRoYXQncyBvbmx5IHVzZWQgZm9yIHRyYW5z
ZmVycmluZyB0aGUgY2FjaGUgdG8gYW5vdGhlciBmaWxlLgogICAgIGJvb2wgbV9pc0NvcHk7CisK
KyAgICAvLyBXaGV0aGVyIHdlIGNhbGxlZCBiYWNrIGludG8gdGhlIENocm9tZUNsaWVudCBhcyBh
IHJlc3VsdCBvZiB0aGUKKyAgICAvLyBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSBmYWlsaW5nIHRv
IHNhdmUgYSBjYWNoZSBkdWUgdG8gcmVhY2hpbmcKKyAgICAvLyB0aGUgbWF4aW11bSBzaXplIG9m
IHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBkYXRhYmFzZSBmaWxlLgorICAgIGJvb2wgbV9jYWxsZWRD
aHJvbWVDbGllbnQ7CiAgICAgCiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBtX2N1cnJlbnRI
YW5kbGU7CiAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gbV9jdXJyZW50UmVz
b3VyY2U7CiAgICAgCiAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gbV9tYW5p
ZmVzdFJlc291cmNlOwogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9tYW5pZmVzdEhhbmRs
ZTsKKworICAgIGZyaWVuZCBjbGFzcyBDaHJvbWVDbGllbnRDYWxsYmFja1RpbWVyOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZVJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA0NTQ1MSkKKysr
IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpB
cHBsaWNhdGlvbkNhYwogICAgIDogU3Vic3RpdHV0ZVJlc291cmNlKHVybCwgcmVzcG9uc2UsIGRh
dGEpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fc3RvcmFnZUlEKDApCisgICAgLCBtX3Np
emUoMCkKIHsKIH0KIApAQCAtNDQsNiArNDUsMjggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U6OmFkZFR5cGUodQogICAgIG1fdHlwZSB8PSB0eXBlOyAKIH0KIAoraW50NjRfdCBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U6OnNpemUoKQoreworICAgIGlmIChtX3NpemUpCisgICAgICBy
ZXR1cm4gbV9zaXplOworCisgICAgaWYgKGRhdGEoKSkKKyAgICAgICAgbV9zaXplID0gZGF0YSgp
LT5zaXplKCk7CisKKyAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNw
b25zZSgpLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBtX3NpemUgKz0gKGl0LT5maXJzdC5sZW5ndGgo
KSArIGl0LT5zZWNvbmQubGVuZ3RoKCkgKyAyKSAqIHNpemVvZihVQ2hhcik7CisKKyAgICBtX3Np
emUgKz0gdXJsKCkuc3RyaW5nKCkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgIG1fc2l6
ZSArPSBzaXplb2YoaW50KTsgLy8gcmVzcG9uc2UoKS5tX2h0dHBTdGF0dXNDb2RlCisgICAgbV9z
aXplICs9IHJlc3BvbnNlKCkudXJsKCkuc3RyaW5nKCkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIp
OworICAgIG1fc2l6ZSArPSBzaXplb2YodW5zaWduZWQpOyAvLyBkYXRhSWQKKyAgICBtX3NpemUg
Kz0gcmVzcG9uc2UoKS5taW1lVHlwZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICBt
X3NpemUgKz0gcmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCkubGVuZ3RoKCkgKiBzaXplb2Yo
VUNoYXIpOworCisgICAgcmV0dXJuIG1fc2l6ZTsKK30KKwogI2lmbmRlZiBOREVCVUcKIHZvaWQg
QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpkdW1wVHlwZSh1bnNpZ25lZCB0eXBlKQogewpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291
cmNlLmgJKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0U3RvcmFnZUlEKHVuc2lnbmVkIHN0b3JhZ2VJRCkgeyBtX3N0b3Jh
Z2VJRCA9IHN0b3JhZ2VJRDsgfQogICAgIHVuc2lnbmVkIHN0b3JhZ2VJRCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RvcmFnZUlEOyB9CiAgICAgdm9pZCBjbGVhclN0b3JhZ2VJRCgpIHsgbV9zdG9yYWdl
SUQgPSAwOyB9CisgICAgaW50NjRfdCBzaXplKCk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3Rh
dGljIHZvaWQgZHVtcFR5cGUodW5zaWduZWQgdHlwZSk7CkBAIC02Myw2ICs2NCw3IEBAIHByaXZh
dGU6CiAKICAgICB1bnNpZ25lZCBtX3R5cGU7CiAgICAgdW5zaWduZWQgbV9zdG9yYWdlSUQ7Cisg
ICAgaW50NjRfdCBtX3NpemU7CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlLmNwcAkocmV2aXNpb24gNDU0NTEpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1FMaXRlVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDxzcWxpdGUzLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIApAQCAt
NDMsMTYgKzQ0LDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgUmVzb3VyY2VTdG9yYWdlSURKb3VybmFsIHsKK3RlbXBsYXRlIDxjbGFzcyBU
PgorY2xhc3MgU3RvcmFnZUlESm91cm5hbCB7CiBwdWJsaWM6ICAKLSAgICB+UmVzb3VyY2VTdG9y
YWdlSURKb3VybmFsKCkKKyAgICB+U3RvcmFnZUlESm91cm5hbCgpCiAgICAgewogICAgICAgICBz
aXplX3Qgc2l6ZSA9IG1fcmVjb3Jkcy5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQogICAgICAgICAgICAgbV9yZWNvcmRzW2ldLnJlc3RvcmUoKTsKICAg
ICB9CiAKLSAgICB2b2lkIGFkZChBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCB1
bnNpZ25lZCBzdG9yYWdlSUQpCisgICAgdm9pZCBhZGQoVCogcmVzb3VyY2UsIHVuc2lnbmVkIHN0
b3JhZ2VJRCkKICAgICB7CiAgICAgICAgIG1fcmVjb3Jkcy5hcHBlbmQoUmVjb3JkKHJlc291cmNl
LCBzdG9yYWdlSUQpKTsKICAgICB9CkBAIC02Niw3ICs2OCw3IEBAIHByaXZhdGU6CiAgICAgY2xh
c3MgUmVjb3JkIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlY29yZCgpIDogbV9yZXNvdXJjZSgw
KSwgbV9zdG9yYWdlSUQoMCkgeyB9Ci0gICAgICAgIFJlY29yZChBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UqIHJlc291cmNlLCB1bnNpZ25lZCBzdG9yYWdlSUQpIDogbV9yZXNvdXJjZShyZXNvdXJj
ZSksIG1fc3RvcmFnZUlEKHN0b3JhZ2VJRCkgeyB9CisgICAgICAgIFJlY29yZChUKiByZXNvdXJj
ZSwgdW5zaWduZWQgc3RvcmFnZUlEKSA6IG1fcmVzb3VyY2UocmVzb3VyY2UpLCBtX3N0b3JhZ2VJ
RChzdG9yYWdlSUQpIHsgfQogCiAgICAgICAgIHZvaWQgcmVzdG9yZSgpCiAgICAgICAgIHsKQEAg
LTc0LDcgKzc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiBtX3Jlc291cmNlOworICAgICAgICBUKiBtX3Jl
c291cmNlOwogICAgICAgICB1bnNpZ25lZCBtX3N0b3JhZ2VJRDsKICAgICB9OwogCkBAIC0yMjMs
NiArMjI1LDggQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlUwogICAg
ICAgICAvLyBhIG1hdGNoaW5nIFVSTC4KICAgICAgICAgdW5zaWduZWQgbmV3ZXN0Q2FjaGVJRCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMikpOwogICAg
ICAgICBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gY2FjaGUgPSBsb2FkQ2FjaGUobmV3ZXN0Q2Fj
aGVJRCk7CisgICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlID0gY2FjaGUtPnJlc291cmNl
Rm9yVVJMKHVybCk7CiAgICAgICAgIGlmICghcmVzb3VyY2UpCkBAIC0zNTMsNiArMzU3LDU2IEBA
IGNvbnN0IFN0cmluZyYgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmMKICAgICByZXR1cm4gbV9j
YWNoZURpcmVjdG9yeTsKIH0KIAordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c2V0TWF4
aW11bVNpemUoaW50NjRfdCBzaXplKQoreworICAgIG1fbWF4aW11bVNpemUgPSBzaXplOworfQor
CitpbnQ2NF90IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjptYXhpbXVtU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbWF4aW11bVNpemU7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OmlzTWF4aW11bVNpemVSZWFjaGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc01h
eGltdW1TaXplUmVhY2hlZDsKK30KKworaW50NjRfdCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3BhY2VOZWVkZWQoaW50NjRfdCBjYWNoZVRvU2F2ZSkKK3sKKyAgICBpbnQ2NF90IHNwYWNlTmVl
ZGVkID0gMDsKKyAgICBpbnQ2NF90IGN1cnJlbnRTaXplID0gMDsKKyAgICBpZiAoIWdldEZpbGVT
aXplKG1fY2FjaGVGaWxlLCBjdXJyZW50U2l6ZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSB3ZSBoYXZlIGF2YWlsYWJsZS4K
KyAgICBpbnQ2NF90IHRvdGFsQXZhaWxhYmxlU2l6ZSA9IDA7CisgICAgaWYgKG1fbWF4aW11bVNp
emUgPCBjdXJyZW50U2l6ZSkgeworICAgICAgICAvLyBUaGUgbWF4IHNpemUgaXMgc21hbGxlciB0
aGFuIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgYXBwIGNhY2hlIGZpbGUuCisgICAgICAgIC8vIFRo
aXMgY2FuIGhhcHBlbiBpZiB0aGUgY2xpZW50IHByZXZpb3VzbHkgaW1wb3NlZCBhIGxhcmdlciBt
YXggc2l6ZQorICAgICAgICAvLyB2YWx1ZSBhbmQgdGhlIGFwcCBjYWNoZSBmaWxlIGhhcyBhbHJl
YWR5IGdyb3duIGJleW9uZCB0aGUgY3VycmVudAorICAgICAgICAvLyBtYXggc2l6ZSB2YWx1ZS4K
KyAgICAgICAgLy8gVGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIGlzIGp1c3QgdGhlIGFtb3VudCBv
ZiBmcmVlIHNwYWNlIGluc2lkZQorICAgICAgICAvLyB0aGUgZGF0YWJhc2UgZmlsZS4gTm90ZSB0
aGF0IHRoaXMgaXMgYWx3YXlzIDAgaWYgU1FMaXRlIGlzIGNvbXBpbGVkCisgICAgICAgIC8vIHdp
dGggQVVUT19WQUNVVU0gPSAxLgorICAgICAgICB0b3RhbEF2YWlsYWJsZVNpemUgPSBtX2RhdGFi
YXNlLmZyZWVTcGFjZVNpemUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaGUgbWF4IHNp
emUgaXMgdGhlIHNhbWUgb3IgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgc2l6ZS4KKyAgICAgICAg
Ly8gVGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIGF2YWlsYWJsZSBpcyB0aGUgYW1vdW50IG9mIGZy
ZWUgc3BhY2UKKyAgICAgICAgLy8gaW5zaWRlIHRoZSBkYXRhYmFzZSBmaWxlIHBsdXMgdGhlIGFt
b3VudCB3ZSBjYW4gZ3JvdyB1bnRpbCB3ZSBoaXQKKyAgICAgICAgLy8gdGhlIG1heCBzaXplLgor
ICAgICAgICB0b3RhbEF2YWlsYWJsZVNpemUgPSAobV9tYXhpbXVtU2l6ZSAtIGN1cnJlbnRTaXpl
KSArIG1fZGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOworICAgIH0KKworICAgIC8vIFRoZSBzcGFj
ZSBuZWVkZWQgdG8gYmUgZnJlZWQgaW4gb3JkZXIgdG8gYWNjb21vZGF0ZSB0aGUgZmFpbGVkIGNh
Y2hlIGlzCisgICAgLy8gdGhlIHNpemUgb2YgdGhlIGZhaWxlZCBjYWNoZSBtaW51cyBhbnkgYWxy
ZWFkeSBhdmFpbGFibGUgZnJlZSBzcGFjZS4KKyAgICBzcGFjZU5lZWRlZCA9IGNhY2hlVG9TYXZl
IC0gdG90YWxBdmFpbGFibGVTaXplOworICAgIC8vIFRoZSBzcGFjZSBuZWVkZWQgdmFsdWUgbXVz
dCBiZSBwb3NpdGl2ZSAob3IgZWxzZSB0aGUgdG90YWwgYWxyZWFkeQorICAgIC8vIGF2YWlsYWJs
ZSBmcmVlIHNwYWNlIHdvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBmYWlsZWQg
Y2FjaGUgYW5kCisgICAgLy8gc2F2aW5nIG9mIHRoZSBjYWNoZSBzaG91bGQgaGF2ZSBuZXZlciBm
YWlsZWQpLgorICAgIEFTU0VSVChzcGFjZU5lZWRlZCk7CisgICAgcmV0dXJuIHNwYWNlTmVlZGVk
OworfQogCiBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMQ29tbWFuZChj
b25zdCBTdHJpbmcmIHNxbCkKIHsKQEAgLTM2Niw3ICs0MjAsNyBAQCBib29sIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpleGVjdXRlU1FMCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IGNvbnN0IGludCBzY2hlbWFWZXJzaW9uID0gMzsKK3N0YXRpYyBjb25zdCBpbnQgc2NoZW1hVmVy
c2lvbiA9IDQ7CiAgICAgCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2ZXJpZnlTY2hl
bWFWZXJzaW9uKCkKIHsKQEAgLTQwMCwxMyArNDU0LDEzIEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6Om9wZW5EYXRhYmEKICAgICAvLyBUaGUgY2FjaGUgZGlyZWN0b3J5IHNob3VsZCBu
ZXZlciBiZSBudWxsLCBidXQgaWYgaXQgZm9yIHNvbWUgd2VpcmQgcmVhc29uIGlzIHdlIGJhaWwg
b3V0LgogICAgIGlmIChtX2NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKQogICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgU3RyaW5nIGFwcGxpY2F0aW9uQ2FjaGVQYXRoID0gcGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KG1fY2FjaGVEaXJlY3RvcnksICJBcHBsaWNhdGlvbkNhY2hlLmRiIik7Ci0gICAg
aWYgKCFjcmVhdGVJZkRvZXNOb3RFeGlzdCAmJiAhZmlsZUV4aXN0cyhhcHBsaWNhdGlvbkNhY2hl
UGF0aCkpCisKKyAgICBtX2NhY2hlRmlsZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2Nh
Y2hlRGlyZWN0b3J5LCAiQXBwbGljYXRpb25DYWNoZS5kYiIpOworICAgIGlmICghY3JlYXRlSWZE
b2VzTm90RXhpc3QgJiYgIWZpbGVFeGlzdHMobV9jYWNoZUZpbGUpKQogICAgICAgICByZXR1cm47
CiAKICAgICBtYWtlQWxsRGlyZWN0b3JpZXMobV9jYWNoZURpcmVjdG9yeSk7Ci0gICAgbV9kYXRh
YmFzZS5vcGVuKGFwcGxpY2F0aW9uQ2FjaGVQYXRoKTsKKyAgICBtX2RhdGFiYXNlLm9wZW4obV9j
YWNoZUZpbGUpOwogICAgIAogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNDE2LDcgKzQ3MCw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6
Om9wZW5EYXRhYmEKICAgICAvLyBDcmVhdGUgdGFibGVzCiAgICAgZXhlY3V0ZVNRTENvbW1hbmQo
IkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlR3JvdXBzIChpZCBJTlRFR0VSIFBSSU1B
UlkgS0VZIEFVVE9JTkNSRU1FTlQsICIKICAgICAgICAgICAgICAgICAgICAgICAibWFuaWZlc3RI
b3N0SGFzaCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG1hbmlmZXN0VVJMIFRF
WFQgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIG5ld2VzdENhY2hlIElOVEVHRVIpIik7Ci0gICAg
ZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hlcyAoaWQg
SU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBjYWNoZUdyb3VwIElOVEVHRVIpIik7
CisgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIENhY2hl
cyAoaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBjYWNoZUdyb3VwIElOVEVH
RVIsIHNpemUgSU5URUdFUikiKTsKICAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxF
IElGIE5PVCBFWElTVFMgQ2FjaGVXaGl0ZWxpc3RVUkxzICh1cmwgVEVYVCBOT1QgTlVMTCBPTiBD
T05GTElDVCBGQUlMLCBjYWNoZSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7
CiAgICAgZXhlY3V0ZVNRTENvbW1hbmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEZhbGxi
YWNrVVJMcyAobmFtZXNwYWNlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgZmFsbGJh
Y2tVUkwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCAiCiAgICAgICAgICAgICAgICAg
ICAgICAgImNhY2hlIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKQEAgLTQ1
Niw5ICs1MTAsMTAgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZXhlY3V0ZVN0YQog
ICAgIHJldHVybiByZXN1bHQ7CiB9ICAgIAogCi1ib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwKQorYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZUdyb3VwKiBncm91cCwgR3JvdXBTdG9y
YWdlSURKb3VybmFsKiBqb3VybmFsKQogewogICAgIEFTU0VSVChncm91cC0+c3RvcmFnZUlEKCkg
PT0gMCk7CisgICAgQVNTRVJUKGpvdXJuYWwpOwogCiAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gQ2FjaGVHcm91cHMgKG1hbmlmZXN0SG9zdEhh
c2gsIG1hbmlmZXN0VVJMKSBWQUxVRVMgKD8sID8pIik7CiAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMUmVzdWx0T2spCkBAIC00NzEsNiArNTI2LDcgQEAgYm9vbCBBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBn
cm91cC0+c2V0U3RvcmFnZUlEKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RhdGFiYXNlLmxhc3RJ
bnNlcnRSb3dJRCgpKSk7CisgICAgam91cm5hbC0+YWRkKGdyb3VwLCAwKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0gICAgCiAKQEAgLTQ4MCwxMSArNTM2LDEyIEBAIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlKEFwcGwKICAgICBBU1NFUlQoY2FjaGUtPmdyb3VwKCktPnN0b3JhZ2VJ
RCgpICE9IDApOwogICAgIEFTU0VSVChzdG9yYWdlSURKb3VybmFsKTsKICAgICAKLSAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZXMgKGNh
Y2hlR3JvdXApIFZBTFVFUyAoPykiKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZXMgKGNhY2hlR3JvdXAsIHNpemUpIFZBTFVFUyAo
PywgPykiKTsKICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgxLCBjYWNoZS0+
Z3JvdXAoKS0+c3RvcmFnZUlEKCkpOworICAgIHN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGUt
PnNpemUoKSk7CiAKICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNTgxLDYgKzYzOCw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlKEFwcGwKICAgICBpZiAocmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTFJlc3VsdE9rKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAgLy8gVGhl
IHNhbWUgQXBwbGljYXRpb25DYWNoZVJlc291cmNlIGFyZSB1c2VkIGluIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6c2l6ZSgpCisgICAgLy8gdG8gY2FsY3VsYXRlIHRoZSBhcHByb3hpbWF0ZSBz
aXplIG9mIGFuIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSBvYmplY3QuIElmCisgICAgLy8geW91
IGNoYW5nZSB0aGUgY29kZSBiZWxvdywgcGxlYXNlIGFsc28gY2hhbmdlIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6c2l6ZSgpLgogICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDEsIHJl
c291cmNlLT51cmwoKSk7CiAgICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZEludDY0KDIsIHJlc291
cmNlLT5yZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkpOwogICAgIHJlc291cmNlU3RhdGVtZW50
LmJpbmRUZXh0KDMsIHJlc291cmNlLT5yZXNwb25zZSgpLnVybCgpKTsKQEAgLTYyNiwzMyArNjg2
LDU2IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlVXBkYXQKICAgICByZXR1
cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRlbWVudCk7CiB9CiAKLXZvaWQgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2Us
IEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQorYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXRpb25DYWNo
ZSogY2FjaGUpCiB7CiAgICAgQVNTRVJUKGNhY2hlLT5zdG9yYWdlSUQoKSk7CiAgICAgCiAgICAg
b3BlbkRhdGFiYXNlKHRydWUpOwogIAorICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSBmYWxz
ZTsKKyAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUpOworCiAgICAg
U1FMaXRlVHJhbnNhY3Rpb24gc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwog
ICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5iZWdpbigpOwogICAgIAotICAgIGlmICghc3Rv
cmUocmVzb3VyY2UsIGNhY2hlLT5zdG9yYWdlSUQoKSkpCi0gICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXN0b3JlKHJlc291cmNlLCBjYWNoZS0+c3RvcmFnZUlEKCkpKSB7CisgICAgICAgIGNoZWNr
Rm9yTWF4U2l6ZVJlYWNoZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIEEgcmVzb3VyY2Ugd2FzIGFkZGVkIHRvIHRoZSBjYWNoZS4gVXBkYXRlIHRoZSB0b3RhbCBk
YXRhIHNpemUgZm9yIHRoZSBjYWNoZS4KKyAgICBTUUxpdGVTdGF0ZW1lbnQgc2l6ZVVwZGF0ZVN0
YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIENhY2hlcyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUg
aWQ9PyIpOworICAgIGlmIChzaXplVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC5i
aW5kSW50NjQoMSwgcmVzb3VyY2UtPnNpemUoKSk7CisgICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC5i
aW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgpKTsKKworICAgIGlmICghZXhlY3V0ZVN0YXRl
bWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVOZXdlc3RDYWNoZShBcHBs
aWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwKQogewogICAgIG9wZW5EYXRhYmFzZSh0cnVlKTsKLSAg
ICAKKworICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSBmYWxzZTsKKyAgICBtX2RhdGFiYXNl
LnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUpOworCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24g
c3RvcmVDYWNoZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIAogICAgIHN0b3JlQ2FjaGVU
cmFuc2FjdGlvbi5iZWdpbigpOwotICAgIAorCisgICAgR3JvdXBTdG9yYWdlSURKb3VybmFsIGdy
b3VwU3RvcmFnZUlESm91cm5hbDsKICAgICBpZiAoIWdyb3VwLT5zdG9yYWdlSUQoKSkgewogICAg
ICAgICAvLyBTdG9yZSB0aGUgZ3JvdXAKLSAgICAgICAgaWYgKCFzdG9yZShncm91cCkpCisgICAg
ICAgIGlmICghc3RvcmUoZ3JvdXAsICZncm91cFN0b3JhZ2VJREpvdXJuYWwpKSB7CisgICAgICAg
ICAgICBjaGVja0Zvck1heFNpemVSZWFjaGVkKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgQVNTRVJUKGdyb3VwLT5uZXdlc3RDYWNoZSgp
KTsKQEAgLTY2MiwxMSArNzQ1LDEzIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0
b3JlTmV3ZXMKICAgICAvLyBMb2cgdGhlIHN0b3JhZ2VJRCBjaGFuZ2VzIHRvIHRoZSBpbi1tZW1v
cnkgcmVzb3VyY2Ugb2JqZWN0cy4gVGhlIGpvdXJuYWwKICAgICAvLyBvYmplY3Qgd2lsbCByb2xs
IHRoZW0gYmFjayBhdXRvbWF0aWNhbGx5IGluIGNhc2UgYSBkYXRhYmFzZSBvcGVyYXRpb24KICAg
ICAvLyBmYWlscyBhbmQgdGhpcyBtZXRob2QgcmV0dXJucyBlYXJseS4KLSAgICBSZXNvdXJjZVN0
b3JhZ2VJREpvdXJuYWwgc3RvcmFnZUlESm91cm5hbDsKKyAgICBSZXNvdXJjZVN0b3JhZ2VJREpv
dXJuYWwgcmVzb3VyY2VTdG9yYWdlSURKb3VybmFsOwogCiAgICAgLy8gU3RvcmUgdGhlIG5ld2Vz
dCBjYWNoZQotICAgIGlmICghc3RvcmUoZ3JvdXAtPm5ld2VzdENhY2hlKCksICZzdG9yYWdlSURK
b3VybmFsKSkKKyAgICBpZiAoIXN0b3JlKGdyb3VwLT5uZXdlc3RDYWNoZSgpLCAmcmVzb3VyY2VT
dG9yYWdlSURKb3VybmFsKSkgeworICAgICAgICBjaGVja0Zvck1heFNpemVSZWFjaGVkKCk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBuZXdl
c3QgY2FjaGUgaW4gdGhlIGdyb3VwLgogICAgIApAQCAtNjgwLDcgKzc2NSw4IEBAIGJvb2wgQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXMKICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1l
bnQoc3RhdGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHN0b3JhZ2VJ
REpvdXJuYWwuY29tbWl0KCk7CisgICAgZ3JvdXBTdG9yYWdlSURKb3VybmFsLmNvbW1pdCgpOwor
ICAgIHJlc291cmNlU3RvcmFnZUlESm91cm5hbC5jb21taXQoKTsKICAgICBzdG9yZUNhY2hlVHJh
bnNhY3Rpb24uY29tbWl0KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC04NzYsNyArOTYyLDEx
NiBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZUNvcHlPCiAgICAgCiAgICAg
cmV0dXJuIGNvcHlTdG9yYWdlLnN0b3JlTmV3ZXN0Q2FjaGUoZ3JvdXBDb3B5LmdldCgpKTsKIH0K
LSAgICAKKworYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6bWFuaWZlc3RVUkxzKFZlY3Rv
cjxLVVJMPiogdXJscykKK3sKKyAgICBBU1NFUlQodXJscyk7CisgICAgb3BlbkRhdGFiYXNlKGZh
bHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxlY3RVUkxzKG1fZGF0YWJhc2UsICJTRUxFQ1Qg
bWFuaWZlc3RVUkwgRlJPTSBDYWNoZUdyb3VwcyIpOworCisgICAgaWYgKHNlbGVjdFVSTHMucHJl
cGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgd2hp
bGUgKHNlbGVjdFVSTHMuc3RlcCgpID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgdXJscy0+YXBw
ZW5kKHNlbGVjdFVSTHMuZ2V0Q29sdW1uVGV4dCgwKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cFNpemUoY29uc3QgU3Ry
aW5nJiBtYW5pZmVzdFVSTCwgaW50NjRfdCogc2l6ZSkKK3sKKyAgICBBU1NFUlQoc2l6ZSk7Cisg
ICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIHN1bShDYWNoZXMuc2l6ZSkgRlJPTSBDYWNoZXMgSU5ORVIgSk9JTiBD
YWNoZUdyb3VwcyBPTiBDYWNoZXMuY2FjaGVHcm91cD1DYWNoZUdyb3Vwcy5pZCBXSEVSRSBDYWNo
ZUdyb3Vwcy5tYW5pZmVzdFVSTD0/Iik7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRlbWVudC5iaW5k
VGV4dCgxLCBtYW5pZmVzdFVSTCk7CisKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KTsKKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdERvbmUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGdldCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgZ3JvdXAsIGVycm9yIFwiJXNc
IiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgKnNpemUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hl
R3JvdXAoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCkKK3sKKyAgICBTUUxpdGVUcmFuc2FjdGlv
biBkZWxldGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICAvLyBDaGVjayB0byBzZWUgaWYg
dGhlIGdyb3VwIGlzIGluIG1lbW9yeS4KKyAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3Vw
ID0gbV9jYWNoZXNJbk1lbW9yeS5nZXQobWFuaWZlc3RVUkwpOworICAgIGlmIChncm91cCkKKyAg
ICAgICAgY2FjaGVHcm91cE1hZGVPYnNvbGV0ZShncm91cCk7CisgICAgZWxzZSB7CisgICAgICAg
IC8vIFRoZSBjYWNoZSBncm91cCBpcyBub3QgaW4gbWVtb3J5LCBzbyByZW1vdmUgaXQgZnJvbSB0
aGUgZGlzay4KKyAgICAgICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKKyAgICAgICAgaWYgKCFtX2Rh
dGFiYXNlLmlzT3BlbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBpZFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGlkIEZST00gQ2Fj
aGVHcm91cHMgV0hFUkUgbWFuaWZlc3RVUkw9PyIpOworICAgICAgICBpZiAoaWRTdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGlkU3RhdGVtZW50LmJpbmRUZXh0KDEsIG1hbmlmZXN0VVJMKTsKKworICAgICAgICBp
bnQgcmVzdWx0ID0gaWRTdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICBpZiAocmVzdWx0ID09IFNR
TFJlc3VsdERvbmUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGxvYWQgY2FjaGUgZ3JvdXAgaWQsIGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
aW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCk7CisKKyAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJP
TSBDYWNoZXMgV0hFUkUgY2FjaGVHcm91cD0/Iik7CisgICAgICAgIGlmIChjYWNoZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgU1FMaXRlU3RhdGVtZW50IGdyb3VwU3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxF
VEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBpZD0/Iik7CisgICAgICAgIGlmIChncm91cFN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgY2FjaGVTdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOworICAgICAg
ICBleGVjdXRlU3RhdGVtZW50KGNhY2hlU3RhdGVtZW50KTsKKyAgICAgICAgZ3JvdXBTdGF0ZW1l
bnQuYmluZEludDY0KDEsIGdyb3VwSWQpOworICAgICAgICBleGVjdXRlU3RhdGVtZW50KGdyb3Vw
U3RhdGVtZW50KTsKKyAgICB9CisKKyAgICBkZWxldGVUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6dmFjdXVt
RGF0YWJhc2VGaWxlKCkKK3sKKyAgICBtX2RhdGFiYXNlLnJ1blZhY3V1bUNvbW1hbmQoKTsKK30K
Kwordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2hlY2tGb3JNYXhTaXplUmVhY2hlZCgp
Cit7CisgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCisgICAg
ICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSB0cnVlOworfQorCitBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKSAKKyAgICA6IG1fbWF4aW11bVNpemUo
SU5UX01BWCkKKyAgICAsIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQoZmFsc2UpCit7Cit9CisKIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlJiBjYWNoZVN0b3JhZ2UoKQogewogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UsIHN0b3JhZ2UsICgpKTsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaAko
cmV2aXNpb24gNDU0NTEpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsMTkgQEAgY2xhc3MgQXBw
bGljYXRpb25DYWNoZTsKIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDsKIGNsYXNzIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTsKIGNsYXNzIEtVUkw7Ci1jbGFzcyBSZXNvdXJjZVN0b3JhZ2VJ
REpvdXJuYWw7Ci0gICAgCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NsYXNzIFN0b3JhZ2VJREpvdXJu
YWw7CisKIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlIHsKIHB1YmxpYzoKICAgICB2b2lk
IHNldENhY2hlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOwogICAgIGNvbnN0IFN0cmluZyYgY2Fj
aGVEaXJlY3RvcnkoKSBjb25zdDsKICAgICAKKyAgICB2b2lkIHNldE1heGltdW1TaXplKGludDY0
X3Qgc2l6ZSk7CisgICAgaW50NjRfdCBtYXhpbXVtU2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaXNN
YXhpbXVtU2l6ZVJlYWNoZWQoKSBjb25zdDsKKyAgICBpbnQ2NF90IHNwYWNlTmVlZGVkKGludDY0
X3QgY2FjaGVUb1NhdmUpOworCiAgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBjYWNoZUdyb3Vw
Rm9yVVJMKGNvbnN0IEtVUkwmKTsgLy8gQ2FjaGUgdG8gbG9hZCBhIG1haW4gcmVzb3VyY2UgZnJv
bS4KICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTChj
b25zdCBLVVJMJik7IC8vIENhY2hlIHRoYXQgaGFzIGEgZmFsbGJhY2sgZW50cnkgdG8gbG9hZCBh
IG1haW4gcmVzb3VyY2UgZnJvbSBpZiBub3JtYWwgbG9hZGluZyBmYWlscy4KIApAQCAtNTUsNyAr
NjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWNoZUdyb3VwTWFkZU9ic29sZXRlKEFwcGxpY2F0
aW9uQ2FjaGVHcm91cCopOwogICAgICAgICAKICAgICBib29sIHN0b3JlTmV3ZXN0Q2FjaGUoQXBw
bGljYXRpb25DYWNoZUdyb3VwKik7IC8vIFVwZGF0ZXMgdGhlIGNhY2hlIGdyb3VwLCBidXQgZG9l
c24ndCByZW1vdmUgb2xkIGNhY2hlLgotICAgIHZvaWQgc3RvcmUoQXBwbGljYXRpb25DYWNoZVJl
c291cmNlKiwgQXBwbGljYXRpb25DYWNoZSopOworICAgIGJvb2wgc3RvcmUoQXBwbGljYXRpb25D
YWNoZVJlc291cmNlKiwgQXBwbGljYXRpb25DYWNoZSopOwogICAgIGJvb2wgc3RvcmVVcGRhdGVk
VHlwZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqLCBBcHBsaWNhdGlvbkNhY2hlKik7CiAKICAg
ICAvLyBSZW1vdmVzIHRoZSBncm91cCBpZiB0aGUgY2FjaGUgdG8gYmUgcmVtb3ZlZCBpcyB0aGUg
bmV3ZXN0IG9uZSAoc28sIHN0b3JlTmV3ZXN0Q2FjaGUoKSBuZWVkcyB0byBiZSBjYWxsZWQgYmVm
b3JlaGFuZCB3aGVuIHVwZGF0aW5nKS4KQEAgLTY1LDExICs3MSwxOSBAQCBwdWJsaWM6CiAgICAg
CiAgICAgc3RhdGljIGJvb2wgc3RvcmVDb3B5T2ZDYWNoZShjb25zdCBTdHJpbmcmIGNhY2hlRGly
ZWN0b3J5LCBBcHBsaWNhdGlvbkNhY2hlKik7CiAKKyAgICBib29sIG1hbmlmZXN0VVJMcyhWZWN0
b3I8S1VSTD4qIHVybHMpOworICAgIGJvb2wgY2FjaGVHcm91cFNpemUoY29uc3QgU3RyaW5nJiBt
YW5pZmVzdFVSTCwgaW50NjRfdCogc2l6ZSk7CisgICAgYm9vbCBkZWxldGVDYWNoZUdyb3VwKGNv
bnN0IFN0cmluZyYgbWFuaWZlc3RVUkwpOworICAgIHZvaWQgdmFjdXVtRGF0YWJhc2VGaWxlKCk7
CiBwcml2YXRlOgorICAgIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCk7CiAgICAgUGFzc1JlZlB0
cjxBcHBsaWNhdGlvbkNhY2hlPiBsb2FkQ2FjaGUodW5zaWduZWQgc3RvcmFnZUlEKTsKICAgICBB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGxvYWRDYWNoZUdyb3VwKGNvbnN0IEtVUkwmIG1hbmlmZXN0
VVJMKTsKICAgICAKLSAgICBib29sIHN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCopOworICAg
IHR5cGVkZWYgU3RvcmFnZUlESm91cm5hbDxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IFJlc291
cmNlU3RvcmFnZUlESm91cm5hbDsKKyAgICB0eXBlZGVmIFN0b3JhZ2VJREpvdXJuYWw8QXBwbGlj
YXRpb25DYWNoZUdyb3VwPiBHcm91cFN0b3JhZ2VJREpvdXJuYWw7CisKKyAgICBib29sIHN0b3Jl
KEFwcGxpY2F0aW9uQ2FjaGVHcm91cCosIEdyb3VwU3RvcmFnZUlESm91cm5hbCopOwogICAgIGJv
b2wgc3RvcmUoQXBwbGljYXRpb25DYWNoZSosIFJlc291cmNlU3RvcmFnZUlESm91cm5hbCopOwog
ICAgIGJvb2wgc3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiwgdW5zaWduZWQgY2FjaGVT
dG9yYWdlSUQpOwogCkBAIC04MSw4ICs5NSwxNCBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wg
ZXhlY3V0ZVN0YXRlbWVudChTUUxpdGVTdGF0ZW1lbnQmKTsKICAgICBib29sIGV4ZWN1dGVTUUxD
b21tYW5kKGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBjaGVja0Zvck1heFNpemVSZWFjaGVk
KCk7CiAgICAgCiAgICAgU3RyaW5nIG1fY2FjaGVEaXJlY3Rvcnk7CisgICAgU3RyaW5nIG1fY2Fj
aGVGaWxlOworCisgICAgaW50NjRfdCBtX21heGltdW1TaXplOworICAgIGJvb2wgbV9pc01heGlt
dW1TaXplUmVhY2hlZDsKIAogICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CiAKQEAgLTky
LDYgKzExMiw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
QXBwbGljYXRpb25DYWNoZUdyb3VwKj4gQ2FjaGVHcm91cE1hcDsKICAgICBDYWNoZUdyb3VwTWFw
IG1fY2FjaGVzSW5NZW1vcnk7IC8vIEV4Y2x1ZGVzIG9ic29sZXRlIGNhY2hlIGdyb3Vwcy4KKwor
ICAgIGZyaWVuZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSYgY2FjaGVTdG9yYWdlKCk7CiB9Owog
IAogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UmIGNhY2hlU3RvcmFnZSgpOwpJbmRleDogV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAkocmV2aXNpb24gNDU0NTEpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzOSw2ICsxMzksMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZU5hbWUpID0gMDsKICNlbmRpZgogCisjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSBh
cHBsaWNhdGlvbiBjYWNoZSBnZXRzIGhpdHMgdGhlIG1heGltdW0gc2l6ZS4KKyAgICAgICAgLy8g
VGhlIGNocm9tZSBjbGllbnQgd291bGQgbmVlZCB0byB0YWtlIHNvbWUgYWN0aW9uIHN1Y2ggYXMg
ZXZpY3Rpbmcgc29tZQorICAgICAgICAvLyBvbGQgY2FjaGVzLgorICAgICAgICAvLyBzcGFjZU5l
ZWRlZCBkZW5vdGVzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGZy
ZWVkCisgICAgICAgIC8vIGluIG9yZGVyIGZvciB0aGUgb3BlcmF0aW9uIHRoYXQgY2F1c2VkIHRo
ZSBvdXQtb2Ytc3BhY2UgY29uZGl0aW9uIHRvCisgICAgICAgIC8vIHN1Y2NlZWQuCisgICAgICAg
IHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQp
ID0gMDsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKTsKICNlbmRpZgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAkocmV2aXNpb24gNDU0NTEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MSw2ICsxNTEsMTggQEAgaW50IFNRTGl0ZURhdGFiYXNlOjpwYWdlU2l6ZSgpCiAgICAgcmV0
dXJuIG1fcGFnZVNpemU7CiB9CiAKK2ludDY0X3QgU1FMaXRlRGF0YWJhc2U6OmZyZWVTcGFjZVNp
emUoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKKyAgICBl
bmFibGVBdXRob3JpemVyKGZhbHNlKTsKKyAgICAvLyBOb3RlOiBmcmVlbGlzdF9jb3VudCB3YXMg
YWRkZWQgaW4gU1FMaXRlIDMuNC4xLgorICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRo
aXMsICJQUkFHTUEgZnJlZWxpc3RfY291bnQiKTsKKyAgICBpbnQ2NF90IHNpemUgPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50NjQoMCkgKiBwYWdlU2l6ZSgpOworCisgICAgZW5hYmxlQXV0aG9yaXpl
cih0cnVlKTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKwogdm9pZCBTUUxpdGVEYXRhYmFzZTo6c2V0
U3luY2hyb25vdXMoU3luY2hyb25vdXNQcmFnbWEgc3luYykKIHsKICAgICBleGVjdXRlQ29tbWFu
ZChTdHJpbmc6OmZvcm1hdCgiUFJBR01BIHN5bmNocm9ub3VzID0gJWkiLCBzeW5jKSk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgJKHJldmlzaW9uIDQ1NDUxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
ODMsNiArODMsOSBAQCBwdWJsaWM6CiAgICAgaW50NjRfdCBtYXhpbXVtU2l6ZSgpOwogICAgIHZv
aWQgc2V0TWF4aW11bVNpemUoaW50NjRfdCk7CiAgICAgCisgICAgLy8gR2V0cyB0aGUgbnVtYmVy
IG9mIHVudXNlZCBieXRlcyBpbiB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICBpbnQ2NF90IGZyZWVT
cGFjZVNpemUoKTsKKwogICAgIC8vIFRoZSBTUUxpdGUgU1lOQ0hST05PVVMgcHJhZ21hIGNhbiBi
ZSBlaXRoZXIgRlVMTCwgTk9STUFMLCBvciBPRkYKICAgICAvLyBGVUxMIC0gQW55IHdyaXRpbmcg
Y2FsbHMgdG8gdGhlIERCIGJsb2NrIHVudGlsIHRoZSBkYXRhIGlzIGFjdHVhbGx5IG9uIHRoZSBk
aXNrIHN1cmZhY2UKICAgICAvLyBOT1JNQUwgLSBTUUxpdGUgcGF1c2VzIGF0IHNvbWUgY3JpdGlj
YWwgbW9tZW50cyB3aGVuIHdyaXRpbmcsIGJ1dCBtdWNoIGxlc3MgdGhhbiBGVUxMCkluZGV4OiBX
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDQ1NDU0KQorKysgV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
IEBACisyMDA5LTA3LTAxICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MDAKKyAgICAgICAgCisgICAgICAgIFVw
ZGF0ZWQgdGhlIHByb2plY3QgYWZ0ZXIgYWRkaW5nIFdlYkFwcGxpY2F0aW9uQ2FjaGUuaC9tbQor
CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMDktMDYt
MDggIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3Rh
bXBlZCBieSBNYXJrIFJvd2UuCkluZGV4OiBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4IEBACiAJCUE3RDNDNUJE
MEI1NzczQzUwMDJDQTQ1MCAvKiBXZWJQYXN0ZWJvYXJkSGVscGVyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEM0M1QkIwQjU3NzNDNTAwMkNBNDUw
IC8qIFdlYlBhc3RlYm9hcmRIZWxwZXIubW0gKi87IH07CiAJCUFCOUZCQkJCMEY4NTgyQjAwMDZB
REM0MyAvKiBXZWJET01PcGVyYXRpb25zSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCOUZCQkJBMEY4NTgyQjAwMDZBREM0MyAvKiBXZWJE
T01PcGVyYXRpb25zSW50ZXJuYWwuaCAqLzsgfTsKIAkJQUJEREYyMEQwOEVCMEREQzAwMUUxMjQx
IC8qIFdlYkRvd25sb2FkSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFCRERGMjBDMDhFQjBEREMwMDFFMTI0MSAvKiBXZWJEb3dubG9hZElu
dGVybmFsLmggKi87IH07CisJCUI2ODA0OTczMEZGQkNFQzEwMDlGN0Y2MiAvKiBXZWJBcHBsaWNh
dGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCNjgwNDk3MTBGRkJDRUMxMDA5RjdGNjIgLyogV2ViQXBwbGljYXRpb25DYWNoZS5oICovOyB9
OworCQlCNjgwNDk3NDBGRkJDRUMxMDA5RjdGNjIgLyogV2ViQXBwbGljYXRpb25DYWNoZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2ODA0OTcyMEZG
QkNFQzEwMDlGN0Y2MiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlLm1tICovOyB9OwogCQlCQzJFNDY0
RDBGRDhBOTY4MDBBOUQ5REUgLyogV2ViVmlld0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkU0NjRCMEZEOEE5NjgwMEE5RDlERSAvKiBXZWJW
aWV3RGF0YS5oICovOyB9OwogCQlCQzJFNDY0RTBGRDhBOTY4MDBBOUQ5REUgLyogV2ViVmlld0Rh
dGEubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJF
NDY0QzBGRDhBOTY4MDBBOUQ5REUgLyogV2ViVmlld0RhdGEubW0gKi87IH07CiAJCUJDNTQyQzQy
MEZENzc2NkYwMEQ4QUI1RCAvKiBXZWJEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1NDJDNDAwRkQ3
NzY2RjAwRDhBQjVEIC8qIFdlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLmggKi87IH07
CkBAIC01NjQsNiArNTY2LDggQEAKIAkJQTdEM0M1QkIwQjU3NzNDNTAwMkNBNDUwIC8qIFdlYlBh
c3RlYm9hcmRIZWxwZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJQYXN0ZWJvYXJkSGVscGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
QjlGQkJCQTBGODU4MkIwMDA2QURDNDMgLyogV2ViRE9NT3BlcmF0aW9uc0ludGVybmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRPTU9wZXJhdGlvbnNJbnRlcm5hbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQkRERjIwQzA4RUIwRERDMDAxRTEyNDEg
LyogV2ViRG93bmxvYWRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEb3dubG9hZEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQlCNjgwNDk3MTBGRkJD
RUMxMDA5RjdGNjIgLyogV2ViQXBwbGljYXRpb25DYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJBcHBsaWNhdGlvbkNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUI2ODA0OTcyMEZGQkNFQzEwMDlGN0Y2MiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQXBwbGljYXRp
b25DYWNoZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyRTQ2NEIwRkQ4QTk2
ODAwQTlEOURFIC8qIFdlYlZpZXdEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlZpZXdEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkU0NjRD
MEZEOEE5NjgwMEE5RDlERSAvKiBXZWJWaWV3RGF0YS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZXdEYXRhLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzU0MkM0MDBGRDc3NjZGMDBEOEFCNUQgLyogV2ViRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbkNhY2hpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbkNhY2hpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTExMzMsNiArMTEzNyw4IEBACiAJCQkJMTREODI1MkQwQUY5NTUwOTAwMDRGMDU3IC8qIFdlYkNo
cm9tZUNsaWVudC5oICovLAogCQkJCTE0RDgyNTJFMEFGOTU1MDkwMDA0RjA1NyAvKiBXZWJDaHJv
bWVDbGllbnQubW0gKi8sCiAJCQkJMDY1QUQ1QTEwQjBDMzJDNzAwNUEyQjFEIC8qIFdlYkNvbnRl
eHRNZW51Q2xpZW50LmggKi8sCisJCQkJQjY4MDQ5NzEwRkZCQ0VDMTAwOUY3RjYyIC8qIFdlYkFw
cGxpY2F0aW9uQ2FjaGUuaCAqLywKKwkJCQlCNjgwNDk3MjBGRkJDRUMxMDA5RjdGNjIgLyogV2Vi
QXBwbGljYXRpb25DYWNoZS5tbSAqLywKIAkJCQkwNjVBRDVBMjBCMEMzMkM3MDA1QTJCMUQgLyog
V2ViQ29udGV4dE1lbnVDbGllbnQubW0gKi8sCiAJCQkJQTcwOTM2QUQwQjU2MDhEQzAwQ0RCNDhF
IC8qIFdlYkRyYWdDbGllbnQuaCAqLywKIAkJCQlBNzA5MzZBRTBCNTYwOERDMDBDREI0OEUgLyog
V2ViRHJhZ0NsaWVudC5tbSAqLywKQEAgLTEyNjUsNiArMTI3MSw3IEBACiAJCQkJMUFBRjVDRUEw
RURERTFGRTAwOEQ4ODNEIC8qIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBQUY1Q0VDMEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBRjVDRUUwRURERTFGRTAwOEQ4ODNEIC8qIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjY4MDQ5NzMw
RkZCQ0VDMTAwOUY3RjYyIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzOTgxMDlBMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1REU5MkZFRjBCRDcwMTdFMDA1OUE1RkQgLyogV2ViQXNzZXJ0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM5ODEwMjkwODI0QkYwMTAwOERGMDM4IC8qIFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWwuaCBpbiBIZWFkZXJzICovLApAQCAtMTc2Niw2ICsxNzczLDcgQEAKIAkJCQk5MzZB
MkRFODBGRDJEMDgwMDBEMzEyREIgLyogV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM1NDJDNDMwRkQ3NzY2RjAwRDhBQjVEIC8qIFdlYkRlbGVnYXRl
SW1wbGVtZW50YXRpb25DYWNoaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyRTQ2NEUwRkQ4
QTk2ODAwQTlEOURFIC8qIFdlYlZpZXdEYXRhLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQjY4MDQ5
NzQwRkZCQ0VDMTAwOUY3RjYyIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGUubW0gaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsv
Q2hhbmdlTG9nCShyZXZpc2lvbiA0NTQ1NCkKKysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDctMDEgIEFuZHJlaSBQb3Blc2N1ICA8
YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcw
MAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKToKKyAgICAg
ICAgQWRkcyBlbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiByZWFjaGVkTWF4QXBwQ2FjaGVTaXplLgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oOgorCiAyMDA5LTA2LTI5
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBK
YW4gQWxvbnpvLgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmNwcAkocmV2aXNpb24gNDU0NTEpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw2ICs0NTEsMTQgQEAg
dm9pZCBDaHJvbWVDbGllbnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YQogfQogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQordm9pZCBDaHJvbWVDbGllbnQ6OnJl
YWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkKK3sKKyAgICAvLyBGSVhN
RTogRnJlZSBzb21lIHNwYWNlLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwog
dm9pZCBDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNo
b29zZXI+IHBycEZpbGVDaG9vc2VyKQogewogICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3Nl
ciA9IHBycEZpbGVDaG9vc2VyOwpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEd0ay5oCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsOSBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJD
b3JlOjpTdHJpbmcmKTsKICNlbmRpZgorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElP
TlMpCisgICAgICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qg
c3BhY2VOZWVkZWQpOworI2VuZGlmCiAgICAgICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwo
V2ViQ29yZTo6RnJhbWUqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9vc2VyPik7CiAKICAg
ICAgICAgdmlydHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpOb2Rl
KikgeyB9CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDU0NTQpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDA5LTA3LTAxICBBbmRyZWkgUG9wZXNj
dSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI3MDAKKworICAgICAgICBBZGRzIHRoZSBXZWJBcHBsaWNhdGlvbkNhY2hlIGNsYXNzIHRoYXQg
aXMKKyAgICAgICAgdXNlZCBieSB0aGUgRHVtcFJlbmRlclRyZWUgdGVzdCBhcHBsaWNhdGlvbiB0
bworICAgICAgICBjb25maWd1cmUgdGhlIEFwcGxpY2F0aW9uIENhY2hlIG1heGltdW0gc2l6ZS4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUuaDogQWRkZWQu
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQXBwbGljYXRpb25DYWNoZS5tbTogQWRkZWQu
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xp
ZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKToKKyAgICAgICAgQWRkcyBlbXB0eSBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgcmVhY2hlZE1heEFwcENhY2hlU2l6ZSBjYWxsYmFjay4KKyAgICAgICAg
KiBXZWJLaXQuZXhwOgorCiAyMDA5LTA3LTAxICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KSW5kZXg6IFdlYktpdC9tYWMv
V2ViS2l0LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYktpdC5leHAJKHJldmlzaW9u
IDQ1NDUxKQorKysgV2ViS2l0L21hYy9XZWJLaXQuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNCBAQAorLm9iamNfY2xhc3NfbmFtZV9XZWJBcHBsaWNhdGlvbkNhY2hlCiAub2JqY19jbGFz
c19uYW1lX1dlYkFyY2hpdmUKIC5vYmpjX2NsYXNzX25hbWVfV2ViQmFja0ZvcndhcmRMaXN0CiAu
b2JqY19jbGFzc19uYW1lX1dlYkNhY2hlCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkFwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQXBwbGljYXRpb25DYWNoZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitAaW50ZXJmYWNlIFdlYkFwcGxp
Y2F0aW9uQ2FjaGU6IE5TT2JqZWN0IHsKK30KKworKyAodm9pZClzZXRNYXhpbXVtU2l6ZToodW5z
aWduZWQgbG9uZyBsb25nKXNpemU7CitAZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1tCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1tCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbXBvcnQgIldlYkFwcGxpY2F0aW9uQ2FjaGUuaCIKKyNpbXBvcnQgPFdlYkNvcmUv
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K0BpbXBsZW1lbnRhdGlvbiBXZWJBcHBsaWNhdGlvbkNhY2hlCisKKysgKHZvaWQpc2V0TWF4aW11
bVNpemU6KHVuc2lnbmVkIGxvbmcgbG9uZylzaXplCit7CisgICAgY2FjaGVTdG9yYWdlKCkuZW1w
dHkoKTsKKyAgICBjYWNoZVN0b3JhZ2UoKS52YWN1dW1EYXRhYmFzZUZpbGUoKTsKKyAgICBjYWNo
ZVN0b3JhZ2UoKS5zZXRNYXhpbXVtU2l6ZShzaXplKTsKK30KKworQGVuZApJbmRleDogV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA0NTQ1MSkK
KysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNyw2ICsxMDcsOSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKERBVEFCQVNFKQog
ICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBj
b25zdCBXZWJDb3JlOjpTdHJpbmcmIGRhdGFiYXNlTmFtZSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4QXBw
Q2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lk
IHBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQko
cmV2aXNpb24gNDU0NTEpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTM2LDYgKzUzNiwxMyBAQCB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKIH0KICNlbmRpZgorCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKK3Zv
aWQgV2ViQ2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VO
ZWVkZWQpCit7CisgICAgLy8gRklYTUU6IEZyZWUgc29tZSBzcGFjZS4KK30KKyNlbmRpZgogICAg
IAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBvcHVsYXRlVmlzaXRlZExpbmtzKCkKIHsKSW5kZXg6
IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwko
cmV2aXNpb24gNDU0NTQpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDktMDctMDEgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMAorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21lQ2xpZW50UXQ6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUpOgorICAgICAgICBBZGRzIGVt
cHR5IGltcGxlbWVudGF0aW9uIG9mIHRoZSByZWFjaGVkTWF4QXBwQ2FjaGVTaXplIGNhbGxiYWNr
LgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0Lmg6CisKIDIwMDktMDct
MDEgIEpha3ViIFdpZWN6b3JlayAgPGZhdzIxN0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDQ1NDUxKQorKysgV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDYgKzM5OSwx
NCBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpleGNlZWRlZERhdGFiYXNlUXVvCiB9CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCit2b2lkIENocm9tZUNsaWVu
dFF0OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpCit7CisgICAg
Ly8gRklYTUU6IEZyZWUgc29tZSBzcGFjZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2Vu
ZGlmCisKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJ1bk9wZW5QYW5lbChGcmFtZSogZnJhbWUsIFBh
c3NSZWZQdHI8RmlsZUNob29zZXI+IHBycEZpbGVDaG9vc2VyKQogewogICAgIFJlZlB0cjxGaWxl
Q2hvb3Nlcj4gZmlsZUNob29zZXIgPSBwcnBGaWxlQ2hvb3NlcjsKSW5kZXg6IFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTYsNiArMTE2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoREFUQUJBU0Up
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25z
dCBTdHJpbmcmKTsKICNlbmRpZgorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
CisgICAgICAgIHZpcnR1YWwgaW50NjRfdCBtYXhBcHBDYWNoZVNpemUoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7Cisj
ZW5kaWYKICAgICAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQ
dHI8RmlsZUNob29zZXI+KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hh
bmdlKGNvbnN0IE5vZGUqKSB7IH0KSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTQ1NCkKKysrIFdlYktpdC93
aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDctMDEg
IEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjcwMAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6cmVhY2hlZE1heEFwcENhY2hl
U2l6ZSk6CisgICAgICAgIEFkZHMgZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlYWNoZWRN
YXhBcHBDYWNoZVNpemUgY2FsbGJhY2suCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Lmg6CisKIDIwMDktMDctMDEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyLgpJbmRleDogV2ViS2l0L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gNDU0NTEpCisr
KyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU0Myw2ICs1NDMsMTUgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4Y2VlZGVk
RGF0YWJhc2VRdQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKQorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCit2b2lkIFdlYkNocm9t
ZUNsaWVudDo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKQorewor
ICAgIC8vIEZJWE1FOiBGcmVlIHNvbWUgc3BhY2UuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KyNlbmRpZgorCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoKQog
ewogICAgIFdlYkhpc3RvcnkqIGhpc3RvcnkgPSBXZWJIaXN0b3J5OjpzaGFyZWRIaXN0b3J5KCk7
CkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJl
dmlzaW9uIDQ1NDUxKQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiwxMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKQorICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qg
c3BhY2VOZWVkZWQpOworI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVWaXNpdGVk
TGlua3MoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbVNjcm9sbGJhcihXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpT
Y3JvbGxiYXJDb250cm9sU2l6ZSwgCkluZGV4OiBXZWJLaXQvd3gvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC93eC9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1NDU0KQorKysgV2ViS2l0L3d4
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDA5LTA3LTAxICBB
bmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI3MDAKKyAKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVu
dFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFd4OjpyZWFjaGVkTWF4QXBw
Q2FjaGVTaXplKToKKyAgICAgICAgQWRkcyBlbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVh
Y2hlZE1heEFwcENhY2hlU2l6ZSBjYWxsYmFjay4KKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0No
cm9tZUNsaWVudFd4Lmg6CisKIDIwMDktMDYtMDkgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRo
ZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgd3ggYnVpbGQgZml4LCBhZGRpbmcgSlNDb3JlL2Fz
c2VtYmxlciB0byB0aGUgbGlzdCBvZiBpbmNsdWRlIGRpcnMuCkluZGV4OiBXZWJLaXQvd3gvV2Vi
S2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dl
YktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3BwCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktp
dC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgzLDYgKzM4MywxMyBAQCB2b2lkIENocm9tZUNsaWVudFd4OjpleGNlZWRlZERhdGFiYXNlUXVv
CiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCit2b2lk
IENocm9tZUNsaWVudFd4OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVk
ZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCiB2b2lkIENocm9tZUNs
aWVudFd4OjpzY3JvbGwoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRS
ZWN0JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1
cHBvcnQvQ2hyb21lQ2xpZW50V3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3Vw
cG9ydC9DaHJvbWVDbGllbnRXeC5oCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktpdC93eC9XZWJL
aXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUs
MTEgQEAgcHVibGljOgogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICB2aXJ0dWFsIHZvaWQgZXhj
ZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiwgY29uc3QgU3RyaW5nJik7CiAjZW5kaWYKKworI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgdmlydHVhbCB2b2lkIHJlYWNo
ZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7CisjZW5kaWYKKwogICAgIHZp
cnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUqKSB7IH0K
SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQ1NDU0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDktMDctMDEgIEFuZHJlaSBQb3Blc2N1ICA8
YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcw
MAorICAgICAgICAKKyAgICAgICAgQWRkcyBhIG5ldyBtZXRob2Qgb24gdGhlIExheW91dFRlc3RD
b250cm9sbGVyIHRoYXQKKyAgICAgICAgYWxsb3dzIGEgSlMgdW5pdCB0ZXN0IHRvIGNvbmZpZ3Vy
ZSB0aGUgbWF4aW11bSBzaXplCisgICAgICAgIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZS4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKHNldEFwcENhY2hlTWF4aW11bVNpemVDYWxsYmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEFwcENhY2hlTWF4aW11bVNpemUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9M
YXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gv
TGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisKIDIwMDktMDctMDEgIENocmlzIEZsZWl6YWNo
ICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCZXRoIERha2lu
LgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gNDU0NTEpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw2ICs0
ODcsMjIgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QWNjZXB0c0VkaXRpbmdDYWxsYgogICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVS
ZWYgc2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCisgICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKwor
ICAgIGRvdWJsZSBzaXplID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
TlVMTCk7CisgICAgaWYgKCFpc25hbihzaXplKSkKKyAgICAgICAgY29udHJvbGxlci0+c2V0QXBw
Q2FjaGVNYXhpbXVtU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUpKTsK
KyAgICAgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCit9
CisKIHN0YXRpYyBKU1ZhbHVlUmVmIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkQ2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIC8vIEhhcyBtYWMgJiB3aW5k
b3dzIGltcGxlbWVudGF0aW9uCkBAIC05MDYsNiArOTIyLDcgQEAgSlNTdGF0aWNGdW5jdGlvbiog
TGF5b3V0VGVzdENvbnRyb2xsZXI6OgogICAgICAgICB7ICJyZXBhaW50U3dlZXBIb3Jpem9udGFs
bHkiLCByZXBhaW50U3dlZXBIb3Jpem9udGFsbHlDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJzZXRBY2NlcHRzRWRpdGluZyIsIHNldEFjY2VwdHNFZGl0aW5nQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
ICAgICAgICAgeyAic2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQiLCBzZXRBdXRob3JBbmRV
c2VyU3R5bGVzRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldEFwcENhY2hl
TWF4aW11bVNpemUiLCBzZXRBcHBDYWNoZU1heGltdW1TaXplQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwgCiAg
ICAgICAgIHsgInNldENhbGxDbG9zZU9uV2ViVmlld3MiLCBzZXRDYWxsQ2xvc2VPbldlYlZpZXdz
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0Q2FuT3BlbldpbmRvd3MiLCBzZXRDYW5P
cGVuV2luZG93c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldENhY2hlTW9kZWwiLCBz
ZXRDYWNoZU1vZGVsQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gNDU0NTEpCisr
KyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHF1ZXVlTm9uTG9h
ZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpOwogICAgIHZvaWQgcXVldWVSZWxvYWQoKTsK
ICAgICB2b2lkIHNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNjZXB0c0VkaXRpbmcpOworICAgIHZv
aWQgc2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOwogICAg
IHZvaWQgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRD
YWNoZU1vZGVsKGludCk7CiAgICAgdm9pZCBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNl
dERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpOwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCShy
ZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRU
ZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw2ICszMjYsMTEgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdQogICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhp
bXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50Cit9CisKIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1l
T25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lLCBK
U1N0cmluZ1JlZiBlbGVtZW50SWQpCiB7ICAgIAogICAgIGdjaGFyKiBuYW1lID0gSlNTdHJpbmdD
b3B5VVRGOENTdHJpbmcoYW5pbWF0aW9uTmFtZSk7CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCShy
ZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRU
ZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8V2ViS2l0L0RP
TURvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NRWxlbWVudC5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dlYkFwcGxpY2F0aW9uQ2FjaGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJCYWNrRm9yd2Fy
ZExpc3QuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViRGF0YVNvdXJjZS5oPgpAQCAtMTkwLDYgKzE5MSwxMSBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpCiAgICAgWyhFZGl0aW5nRGVsZWdh
dGUgKilbW21haW5GcmFtZSB3ZWJWaWV3XSBlZGl0aW5nRGVsZWdhdGVdIHNldEFjY2VwdHNFZGl0
aW5nOm5ld0FjY2VwdHNFZGl0aW5nXTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBb
V2ViQXBwbGljYXRpb25DYWNoZSBzZXRNYXhpbXVtU2l6ZTpzaXplXTsKK30KKwogdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBmbGFn
KQogewogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWQ6ZmxhZ107CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlz
aW9uIDQ1NDUxKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RD
b250cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk5LDYgKzY5OSwxMSBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1CiAgICAgcHJpbnRmKCJFUlJPUjog
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXVvdGEoKSBub3QgaW1wbGVtZW50ZWRc
biIpOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1T
aXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQoreworICAgIHByaW50ZigiRVJST1I6IExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKCkgbm90IGltcGxlbWVudGVk
XG4iKTsKK30KKwogYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRp
bWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUs
IEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKIHsKICAgICBDT01QdHI8SURPTURvY3VtZW50PiBkb2N1
bWVudDsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250
cm9sbGVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4
L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCShyZXZpc2lvbiA0NTQ1MSkKKysrIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDYsNiArMjA2LDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dERhdGFiYXNlUXUKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNp
emUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCiB1bnNpZ25lZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKIHsKICAgICAvLyBG
SVhNRTogaW1wbGVtZW50CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTQ1NCkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDA5LTA3LTAxICBB
bmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI3MDAKKworICAgICAgICBBZGRzIGEgdW5pdCB0ZXN0IHRoYXQgZW5zdXJl
cyB0aGF0IHRoZSBtZWNoYW5pc20gdGhhdAorICAgICAgICBlbmZvcmNlcyB0aGUgbWF4aW11bSBz
aXplIG9mIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBpcworICAgICAgICB3b3JraW5nIGNvcnJlY3Rs
eS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvbWF4LXNpemUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2FwcGNhY2hlL21heC1zaXplLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvYXBwY2FjaGUvcmVzb3VyY2VzL21heHNpemUubWFu
aWZlc3Q6IEFkZGVkLgorCiAyMDA5LTA3LTAxICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0aCBEYWtpbi4KSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvbWF4LXNpemUtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvbWF4LXNpemUtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9tYXgt
c2l6ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorQ2FjaGUgYSBt
YW5pZmVzdCB0aGF0IGNvbnRhaW5zIGEgcmVzb3VyY2UgdGhhdCBpcyB0b28gbGFyZ2UgdG8gZml0
LiBUaGUgbGF5b3V0IHRlc3QgY29udHJvbGxlciBzZXRzIGEgbWF4aW11bSBzaXplIG9mIDEwS0Ig
Zm9yIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBkYXRhYmFzZSBmaWxlLgorCitTVUNDRVNTCisKSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvbWF4LXNpemUuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL21heC1zaXplLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL21heC1zaXplLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjggQEAKKzxodG1sIG1hbmlmZXN0PSJyZXNvdXJj
ZXMvbWF4c2l6ZS5tYW5pZmVzdCI+Cis8Ym9keT4NCis8c2NyaXB0Pg0KKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNl
dEFwcENhY2hlTWF4aW11bVNpemUoMTAgKiAxMDI0KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCisgICAgeworICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1lc3Nh
Z2UgKyAiPGJyPiI7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEFwcENhY2hlTWF4aW11bVNpemUo
MTAwICogMTAyNCAqIDEwMjQpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgYXBwbGljYXRpb25DYWNoZS5vbmVy
cm9yID0gZnVuY3Rpb24oKSB7IGxvZygiU1VDQ0VTUyIpOyB9CisgICAgYXBwbGljYXRpb25DYWNo
ZS5vbmNhY2hlZCA9IGZ1bmN0aW9uKCkgeyBsb2coIkZBSUw6IHJlY2VpdmVkIHVuZXhwZWN0ZWQg
Y2FjaGVkIGV2ZW50Iik7IH0KKyAgICBhcHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBmdW5j
dGlvbigpIHsgbG9nKCJGQUlMOiByZWNlaXZlZCB1bmV4cGVjdGVkIG9ubm91cGRhdGUgZXZlbnQi
KTsgfQorICAgIGFwcGxpY2F0aW9uQ2FjaGUub251cGRhdGVyZWFkeSA9IGZ1bmN0aW9uKCkgeyBs
b2coIkZBSUw6IHJlY2VpdmVkIHVuZXhwZWN0ZWQgb251cGRhdGVyZWFkeSBldmVudCIpOyB9Cis8
L3NjcmlwdD4KKw0KKzxwPkNhY2hlIGEgbWFuaWZlc3QgdGhhdCBjb250YWlucyBhIHJlc291cmNl
IHRoYXQgaXMgdG9vIGxhcmdlIHRvIGZpdC4gVGhlIGxheW91dCB0ZXN0IGNvbnRyb2xsZXIgc2V0
cyBhIG1heGltdW0gc2l6ZSBvZiAxMEtCIGZvciB0aGUgYXBwbGljYXRpb24gY2FjaGUgZGF0YWJh
c2UgZmlsZS48L3A+DQorPGRpdiBpZD1yZXN1bHQ+PC9kaXY+DQorPC9ib2R5Pg0KKzwvaHRtbD4N
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9tYXhzaXpl
Lm1hbmlmZXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUv
cmVzb3VyY2VzL21heHNpemUubWFuaWZlc3QJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9tYXhzaXplLm1hbmlmZXN0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMgQEAKK0NBQ0hFIE1BTklGRVNUCisjdjEKK2FiZS5wbmcK
</data>
<flag name="review"
          id="16660"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32709</attachid>
            <date>2009-07-14 06:41:18 -0700</date>
            <delta_ts>2009-07-16 14:10:33 -0700</delta_ts>
            <desc>New proposal to limit the maximum size of the application cache (take 8)</desc>
            <filename>22700.patch</filename>
            <type>text/plain</type>
            <size>66490</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTg1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDktMDctMTQgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMAorCisgICAgICAg
IGh0dHBzOi8vbGlzdHMud2Via2l0Lm9yZy9waXBlcm1haWwvd2Via2l0LWRldi8yMDA5LU1heS8w
MDc1NjAuaHRtbAorCisgICAgICAgIFRoaXMgY2hhbmdlIGltcGxlbWVudHMgYSBtZWNoYW5pc20g
Zm9yIGxpbWl0aW5nIHRoZSBtYXhpbXVtIHNpemUgb2YKKyAgICAgICAgdGhlIGFwcGxpY2F0aW9u
IGNhY2hlIGZpbGUuIFdoZW4gdGhpcyBzaXplIGlzIHJlYWNoZWQsIGEgQ2hyb21lQ2xpZW50Cisg
ICAgICAgIGNhbGxiYWNrIGlzIGludm9rZWQgYXN5bmNocm9ub3VzbHkgYW5kIHRoZSBzYXZpbmcg
b2YgdGhlIGxhc3QgKGZhaWxlZCkKKyAgICAgICAgY2FjaGUgaXMgcmV0cmllZCBhdXRvbWF0aWNh
bGx5LgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBleHRlbmRzIHRoZSBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZSBBUEkgYnkgYWxsb3dpbmcKKyAgICAgICAgYSBjbGllbnQgdG8g
cXVlcnkgb3IgbW9kaWZ5IHRoZSBhcHBsaWNhdGlvbiBjYWNoZSB3aXRob3V0IGhhdmluZyB0bwor
ICAgICAgICBsb2FkIGFueSByZXNvdXJjZXMgaW50byBtZW1vcnkuCisKKyAgICAgICAgVGVzdDog
aHR0cC90ZXN0cy9hcHBjYWNoZS9tYXgtc2l6ZS5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmJh
c2UuZXhwOgorICAgICAgICBFeHBvcnRzIHRoZSBzeW1ib2xzIHJlcXVpcmVkIGJ5IHRoZSBEdW1w
UmVuZGVyVHJlZSB0ZXN0IGFwcGxpY2F0aW9uLgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVu
dHMuaDoKKyAgICAgICAgQWRkcyBlbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV3IENocm9t
ZUNsaWVudCBtZXRob2RzLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oOgor
ICAgICAgICBBZGRzIHRoZSBhYmlsaXR5IHRvIGNhbGN1bGF0ZSB0aGUgYXBwcm94aW1hdGUgc2l6
ZSBvZiBhbiBBcHBsaWNhdGlvbkNhY2hlIG9iamVjdC4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2Fj
aGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZUdyb3VwLmg6CisgICAgICAgIEludm9rZXMgdGhlIENocm9tZUNsaWVu
dCBjYWxsYmFjayB3aGVuIHRoZSBzdG9yYWdlIGxheWVyIHJ1bnMgb3V0IG9mIHNwYWNlLgorCQlB
ZnRlciB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZCwgd2UgcmUtYXR0ZW1wdCB0byBzdG9yZSB0aGUg
bmV3ZXN0IGNhY2hlLAorCQlpbiBjYXNlIHRoZSBDaHJvbWVDbGllbnQgaGFzIGZyZWVkIHNvbWUg
c3BhY2UuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZS5jcHA6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZS5oOgorICAgICAgICBBZGRzIHRoZSBhYmlsaXR5IHRvIGNhbGN1bGF0ZSB0aGUgYXBwcm94aW1h
dGUgc2l6ZSBvZiBhbiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Ugb2JqZWN0LgorICAgICAgICAq
IGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgICog
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg6CisgICAgICAgIEVuZm9y
Y2VzIGEgbWF4aW11bSBzaXplIGZvciB0aGUgYXBwbGljYXRpb24gY2FjaGUgZmlsZS4KKyAgICAg
ICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICBBZGRzIGEgbmV3IGNhbGxiYWNrLCBp
bnZva2VkIHdoZW4gdGhlIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlIHJlcG9ydHMgdGhhdCBpdCBo
YXMKKyAgICAgICAgcmVhY2hlZCB0aGUgbWF4aW11bSBzaXplIGZvciBpdHMgZGF0YWJhc2UgZmls
ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgorICAgICAgICBBZGRzIGEgbmV3IG1ldGhv
ZCB0aGF0IGFsbG93cyBxdWVyeWluZyBmb3IgdGhlIGFtb3VudCBvZiB1bnVzZWQgc3BhY2UgaW5z
aWRlIHRoZQorICAgICAgICBhcHBsaWNhdGlvbiBjYWNoZSBkYXRhYmFzZSBmaWxlLgorCiAyMDA5
LTA3LTEzICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNl
LmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQ1
NzU5KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC00NDIs
NiArNDQyLDggQEAgX19aTjdXZWJDb3JlMjJleHRlcm5hbFJlcHJlc2VudGF0aW9uRVBOUwogX19a
TjdXZWJDb3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTE2c3RvcmVDb3B5T2ZDYWNoZUVSS05T
XzZTdHJpbmdFUE5TXzE2QXBwbGljYXRpb25DYWNoZUUKIF9fWk43V2ViQ29yZTIzQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UxN3NldENhY2hlRGlyZWN0b3J5RVJLTlNfNlN0cmluZ0UKIF9fWk43V2Vi
Q29yZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U1ZW1wdHlFdgorX19aTjdXZWJDb3JlMjNBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTE0c2V0TWF4aW11bVNpemVFeAorX19aTjdXZWJDb3JlMjNBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTE4dmFjdXVtRGF0YWJhc2VGaWxlRXYKIF9fWk43V2ViQ29yZTIz
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmRDMUVQTlNfOERvY3VtZW50RU4zV1RGMTBQYXNzUmVmUHRy
SU5TXzE2RG9jdW1lbnRGcmFnbWVudEVFRWJiYmJiTlNfMTBFZGl0QWN0aW9uRQogX19aTjdXZWJD
b3JlMjNjcmVhdGVGcmFnbWVudEZyb21Ob2Rlc0VQTlNfOERvY3VtZW50RVJLTjNXVEY2VmVjdG9y
SVBOU180Tm9kZUVMbTBFRUUKIF9fWk43V2ViQ29yZTI0QmluYXJ5UHJvcGVydHlMaXN0V3JpdGVy
MTd3cml0ZVByb3BlcnR5TGlzdEV2CkluZGV4OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24g
NDU3NTkpCisrKyBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTMzLDYgKzEzMywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0
YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYpIHsgfQogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIHZpcnR1YWwgdm9pZCByZWFjaGVkTWF4
QXBwQ2FjaGVTaXplKGludDY0X3QpIHsgfQorI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgcnVu
T3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pIHsgfQogCiAgICAgdmly
dHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBOb2RlKikgeyB9CkluZGV4OiBXZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAkocmV2aXNpb24gNDU3
NTkpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBBcHBsaWNh
dGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlKCkKICAgICA6IG1fZ3JvdXAoMCkKICAgICAsIG1f
bWFuaWZlc3QoMCkKKyAgICAsIG1fZXN0aW1hdGVkU2l6ZUluRGF0YWJhc2UoMCkKICAgICAsIG1f
c3RvcmFnZUlEKDApCiB7CiB9CkBAIC04Niw3ICs4Nyw5IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZTo6YWRkUmVzb3VyY2UoUGFzc1IKICAgICAgICAgLy8gQWRkIHRoZSByZXNvdXJjZSB0byB0aGUg
c3RvcmFnZS4KICAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmUocmVzb3VyY2UuZ2V0KCksIHRo
aXMpOwogICAgIH0KLSAgICAKKworICAgIG1fZXN0aW1hdGVkU2l6ZUluRGF0YWJhc2UgKz0gcmVz
b3VyY2UtPnNpemUoKTsKKwogICAgIG1fcmVzb3VyY2VzLnNldCh1cmwsIHJlc291cmNlKTsKIH0K
IApAQCAtMTAwLDcgKzEwMyw5IEBAIHVuc2lnbmVkIEFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZVJl
c291cmMKICAgICB1bnNpZ25lZCB0eXBlID0gaXQtPnNlY29uZC0+dHlwZSgpOwogCiAgICAgbV9y
ZXNvdXJjZXMucmVtb3ZlKGl0KTsKLSAgICAKKworICAgIG1fZXN0aW1hdGVkU2l6ZUluRGF0YWJh
c2UgLT0gaXQtPnNlY29uZC0+c2l6ZSgpOworCiAgICAgcmV0dXJuIHR5cGU7CiB9ICAgIAogICAg
IApJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaAkocmV2
aXNpb24gNDU3NTkpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDggQEAgcHVibGljOgogICAgIAogICAgIHN0
YXRpYyBib29sIHJlcXVlc3RJc0hUVFBPckhUVFBTR2V0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
OwogCisgICAgaW50NjRfdCBlc3RpbWF0ZWRTaXplSW5EYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZXN0aW1hdGVkU2l6ZUluRGF0YWJhc2U7IH0KKwogcHJpdmF0ZToKICAgICBBcHBsaWNhdGlv
bkNhY2hlKCk7CiAgICAgCkBAIC05Nyw2ICs5OSwxMSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxL
VVJMPiBtX29ubGluZVdoaXRlbGlzdDsKICAgICBGYWxsYmFja1VSTFZlY3RvciBtX2ZhbGxiYWNr
VVJMczsKIAorICAgIC8vIFRoZSB0b3RhbCBzaXplIG9mIHRoZSByZXNvdXJjZXMgYmVsb25naW5n
IHRvIHRoaXMgQXBwbGljYXRpb24gQ2FjaGUgaW5zdGFuY2UuCisgICAgLy8gVGhpcyBpcyBhbiBl
c3RpbWF0aW9uIG9mIHRoZSBzaXplIHRoaXMgQXBwbGljYXRpb24gQ2FjaGUgb2NjdXBpZXMgaW4g
dGhlCisgICAgLy8gZGF0YWJhc2UgZmlsZS4KKyAgICBpbnQ2NF90IG1fZXN0aW1hdGVkU2l6ZUlu
RGF0YWJhc2U7CisKICAgICB1bnNpZ25lZCBtX3N0b3JhZ2VJRDsKIH07CiAKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkocmV2
aXNpb24gNDU3NTkpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
R3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXBw
bGljYXRpb25DYWNoZS5oIgogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJET01BcHBsaWNh
dGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC01Myw2ICs1NCw3IEBAIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6QXBwbGljYXRpb25DYWNoZUcKICAgICAsIG1faXNPYnNvbGV0
ZShmYWxzZSkKICAgICAsIG1fY29tcGxldGlvblR5cGUoTm9uZSkKICAgICAsIG1faXNDb3B5KGlz
Q29weSkKKyAgICAsIG1fY2FsbGVkUmVhY2hlZE1heEFwcENhY2hlU2l6ZShmYWxzZSkKIHsKIH0K
IApAQCAtNjUyLDYgKzY1NCwxNSBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGlkRmlu
aXNoTG9hCiAgICAgc3RhcnRMb2FkaW5nRW50cnkoKTsKIH0KIAordm9pZCBBcHBsaWNhdGlvbkNh
Y2hlR3JvdXA6OmRpZFJlYWNoTWF4QXBwQ2FjaGVTaXplKCkKK3sKKyAgICBBU1NFUlQobV9mcmFt
ZSk7CisgICAgQVNTRVJUKG1fY2FjaGVCZWluZ1VwZGF0ZWQpOworICAgIG1fZnJhbWUtPnBhZ2Uo
KS0+Y2hyb21lKCktPmNsaWVudCgpLT5yZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGNhY2hlU3RvcmFn
ZSgpLnNwYWNlTmVlZGVkKG1fY2FjaGVCZWluZ1VwZGF0ZWQtPmVzdGltYXRlZFNpemVJbkRhdGFi
YXNlKCkpKTsKKyAgICBtX2NhbGxlZFJlYWNoZWRNYXhBcHBDYWNoZVNpemUgPSB0cnVlOworICAg
IGNoZWNrSWZMb2FkSXNDb21wbGV0ZSgpOworfQorCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cDo6Y2FjaGVVcGRhdGVGYWlsZWQoKQogewogICAgIHN0b3BMb2FkaW5nKCk7CkBAIC03MzAsNyAr
NzQxLDE1IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjaGVja0lmTG9hZEkKICAgICAg
ICAgLy8gRklYTUU6IEZldGNoIHRoZSByZXNvdXJjZSBmcm9tIG1hbmlmZXN0IFVSTCBhZ2Fpbiwg
YW5kIGNoZWNrIHdoZXRoZXIgaXQgaXMgaWRlbnRpY2FsIHRvIHRoZSBvbmUgdXNlZCBmb3IgdXBk
YXRlIChpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbiB3YXMgdXBncmFkZWQgc2VydmVyLXNpZGUgaW4g
dGhlIG1lYW53aGlsZSkuICg8cmRhcjovL3Byb2JsZW0vNjQ2NzYyNT4pCiAKICAgICAgICAgQVNT
RVJUKG1fY2FjaGVCZWluZ1VwZGF0ZWQpOwotICAgICAgICBtX2NhY2hlQmVpbmdVcGRhdGVkLT5z
ZXRNYW5pZmVzdFJlc291cmNlKG1fbWFuaWZlc3RSZXNvdXJjZS5yZWxlYXNlKCkpOworICAgICAg
ICBpZiAobV9tYW5pZmVzdFJlc291cmNlKQorICAgICAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRl
ZC0+c2V0TWFuaWZlc3RSZXNvdXJjZShtX21hbmlmZXN0UmVzb3VyY2UucmVsZWFzZSgpKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBjYW4gZ2V0IGhlcmUgYXMgYSByZXN1bHQg
b2YgcmV0cnlpbmcgdGhlIENvbXBsZXRlIHN0ZXAsIGZvbGxvd2luZworICAgICAgICAgICAgLy8g
YSBmYWlsdXJlIG9mIHRoZSBjYWNoZSBzdG9yYWdlIHRvIHNhdmUgdGhlIG5ld2VzdCBjYWNoZSBk
dWUgdG8gaGl0dGluZworICAgICAgICAgICAgLy8gdGhlIG1heGltdW0gc2l6ZS4gSW4gc3VjaCBh
IGNhc2UsIG1fbWFuaWZlc3RSZXNvdXJjZSBtYXkgYmUgMCwgYXMKKyAgICAgICAgICAgIC8vIHRo
ZSBtYW5pZmVzdCB3YXMgYWxyZWFkeSBzZXQgb24gdGhlIG5ld2VzdCBjYWNoZSBvYmplY3QuCisg
ICAgICAgICAgICBBU1NFUlQoY2FjaGVTdG9yYWdlKCkuaXNNYXhpbXVtU2l6ZVJlYWNoZWQoKSAm
JiBtX2NhbGxlZFJlYWNoZWRNYXhBcHBDYWNoZVNpemUpOworICAgICAgICB9CiAKICAgICAgICAg
UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IG9sZE5ld2VzdENhY2hlID0gKG1fbmV3ZXN0Q2FjaGUg
PT0gbV9jYWNoZUJlaW5nVXBkYXRlZCkgPyAwIDogbV9uZXdlc3RDYWNoZTsKIApAQCAtNzQyLDI4
ICs3NjEsNDQgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSQogICAg
ICAgICAgICAgLy8gRmlyZSB0aGUgc3VjY2VzcyBldmVudHMuCiAgICAgICAgICAgICBwb3N0TGlz
dGVuZXJUYXNrKGlzVXBncmFkZUF0dGVtcHQgPyAmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbFVw
ZGF0ZVJlYWR5TGlzdGVuZXIgOiAmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbENhY2hlZExpc3Rl
bmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gUnVuIHRoZSAiY2FjaGUgZmFpbHVyZSBzdGVwcyIKLSAgICAgICAgICAgIC8v
IEZpcmUgdGhlIGVycm9yIGV2ZW50cyB0byBhbGwgcGVuZGluZyBtYXN0ZXIgZW50cmllcywgYXMg
d2VsbCBhbnkgb3RoZXIgY2FjaGUgaG9zdHMKLSAgICAgICAgICAgIC8vIGN1cnJlbnRseSBhc3Nv
Y2lhdGVkIHdpdGggYSBjYWNoZSBpbiB0aGlzIGdyb3VwLgotICAgICAgICAgICAgcG9zdExpc3Rl
bmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbEVycm9yTGlzdGVuZXIsIG1fYXNzb2Np
YXRlZERvY3VtZW50TG9hZGVycyk7Ci0gICAgICAgICAgICAvLyBEaXNhc3NvY2lhdGUgdGhlIHBl
bmRpbmcgbWFzdGVyIGVudHJpZXMgZnJvbSB0aGUgZmFpbGVkIG5ldyBjYWNoZS4gTm90ZSB0aGF0
Ci0gICAgICAgICAgICAvLyBhbGwgb3RoZXIgbG9hZGVycyBpbiB0aGUgbV9hc3NvY2lhdGVkRG9j
dW1lbnRMb2FkZXJzIGFyZSBzdGlsbCBhc3NvY2lhdGVkIHdpdGgKLSAgICAgICAgICAgIC8vIHNv
bWUgb3RoZXIgY2FjaGUgaW4gdGhpcyBncm91cC4gVGhleSBhcmUgbm90IGFzc29jaWF0ZWQgd2l0
aCB0aGUgZmFpbGVkIG5ldyBjYWNoZS4KLQotICAgICAgICAgICAgLy8gTmVlZCB0byBjb3B5IGxv
YWRlcnMsIGJlY2F1c2UgdGhlIGNhY2hlIGdyb3VwIG1heSBiZSBkZXN0cm95ZWQgYXQgdGhlIGVu
ZCBvZiBpdGVyYXRpb24uCi0gICAgICAgICAgICBWZWN0b3I8RG9jdW1lbnRMb2FkZXIqPiBsb2Fk
ZXJzOwotICAgICAgICAgICAgY29weVRvVmVjdG9yKG1fcGVuZGluZ01hc3RlclJlc291cmNlTG9h
ZGVycywgbG9hZGVycyk7Ci0gICAgICAgICAgICBzaXplX3QgY291bnQgPSBsb2FkZXJzLnNpemUo
KTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGNvdW50OyArK2kpCi0gICAg
ICAgICAgICAgICAgZGlzYXNzb2NpYXRlRG9jdW1lbnRMb2FkZXIobG9hZGVyc1tpXSk7IC8vIFRo
aXMgY2FuIGRlbGV0ZSB0aGlzIGdyb3VwLgotCi0gICAgICAgICAgICAvLyBSZWluc3RhdGUgdGhl
IG9sZE5ld2VzdENhY2hlLCBpZiB0aGVyZSB3YXMgb25lLgotICAgICAgICAgICAgaWYgKG9sZE5l
d2VzdENhY2hlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGRpc2NhcmQgdGhlIGZh
aWxlZCBuZXcgY2FjaGUuCi0gICAgICAgICAgICAgICAgc2V0TmV3ZXN0Q2FjaGUob2xkTmV3ZXN0
Q2FjaGUucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gV2UgbXVzdCBoYXZlIGJlZW4gZGVsZXRlZCBieSB0aGUgbGFzdCBjYWxsIHRvIGRpc2Fzc29j
aWF0ZURvY3VtZW50TG9hZGVyKCkuCisgICAgICAgICAgICBpZiAoY2FjaGVTdG9yYWdlKCkuaXNN
YXhpbXVtU2l6ZVJlYWNoZWQoKSAmJiAhbV9jYWxsZWRSZWFjaGVkTWF4QXBwQ2FjaGVTaXplKSB7
CisgICAgICAgICAgICAgICAgLy8gV2UgcmFuIG91dCBvZiBzcGFjZS4gQWxsIHRoZSBjaGFuZ2Vz
IGluIHRoZSBjYWNoZSBzdG9yYWdlIGhhdmUKKyAgICAgICAgICAgICAgICAvLyBiZWVuIHJvbGxl
ZCBiYWNrLiBXZSByb2xsIGJhY2sgdG8gdGhlIHByZXZpb3VzIHN0YXRlIGluIGhlcmUsCisgICAg
ICAgICAgICAgICAgLy8gYXMgd2VsbCwgY2FsbCB0aGUgY2hyb21lIGNsaWVudCBhc3luY2hyb25v
dXNseSBhbmQgcmV0cnkgdG8KKyAgICAgICAgICAgICAgICAvLyBzYXZlIHRoZSBuZXcgY2FjaGUu
CisKKyAgICAgICAgICAgICAgICAvLyBTYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXcgY2FjaGUu
CisgICAgICAgICAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRlZCA9IG1fbmV3ZXN0Q2FjaGUucmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgIGlmIChvbGROZXdlc3RDYWNoZSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBSZWluc3RhdGUgdGhlIG9sZE5ld2VzdENhY2hlLgorICAgICAgICAgICAg
ICAgICAgICBzZXROZXdlc3RDYWNoZShvbGROZXdlc3RDYWNoZS5yZWxlYXNlKCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNoZVNp
emVDYWxsYmFjaygpOwogICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgLy8gUnVuIHRoZSAiY2FjaGUgZmFpbHVyZSBzdGVwcyIKKyAg
ICAgICAgICAgICAgICAvLyBGaXJlIHRoZSBlcnJvciBldmVudHMgdG8gYWxsIHBlbmRpbmcgbWFz
dGVyIGVudHJpZXMsIGFzIHdlbGwgYW55IG90aGVyIGNhY2hlIGhvc3RzCisgICAgICAgICAgICAg
ICAgLy8gY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCBhIGNhY2hlIGluIHRoaXMgZ3JvdXAuCisg
ICAgICAgICAgICAgICAgcG9zdExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2Fs
bEVycm9yTGlzdGVuZXIsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7CisgICAgICAgICAg
ICAgICAgLy8gRGlzYXNzb2NpYXRlIHRoZSBwZW5kaW5nIG1hc3RlciBlbnRyaWVzIGZyb20gdGhl
IGZhaWxlZCBuZXcgY2FjaGUuIE5vdGUgdGhhdAorICAgICAgICAgICAgICAgIC8vIGFsbCBvdGhl
ciBsb2FkZXJzIGluIHRoZSBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMgYXJlIHN0aWxsIGFz
c29jaWF0ZWQgd2l0aAorICAgICAgICAgICAgICAgIC8vIHNvbWUgb3RoZXIgY2FjaGUgaW4gdGhp
cyBncm91cC4gVGhleSBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGVkIG5ldyBjYWNo
ZS4KKworICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gY29weSBsb2FkZXJzLCBiZWNhdXNlIHRo
ZSBjYWNoZSBncm91cCBtYXkgYmUgZGVzdHJveWVkIGF0IHRoZSBlbmQgb2YgaXRlcmF0aW9uLgor
ICAgICAgICAgICAgICAgIFZlY3RvcjxEb2N1bWVudExvYWRlcio+IGxvYWRlcnM7CisgICAgICAg
ICAgICAgICAgY29weVRvVmVjdG9yKG1fcGVuZGluZ01hc3RlclJlc291cmNlTG9hZGVycywgbG9h
ZGVycyk7CisgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gbG9hZGVycy5zaXplKCk7Cisg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gY291bnQ7ICsraSkKKyAgICAg
ICAgICAgICAgICAgICAgZGlzYXNzb2NpYXRlRG9jdW1lbnRMb2FkZXIobG9hZGVyc1tpXSk7IC8v
IFRoaXMgY2FuIGRlbGV0ZSB0aGlzIGdyb3VwLgorCisgICAgICAgICAgICAgICAgLy8gUmVpbnN0
YXRlIHRoZSBvbGROZXdlc3RDYWNoZSwgaWYgdGhlcmUgd2FzIG9uZS4KKyAgICAgICAgICAgICAg
ICBpZiAob2xkTmV3ZXN0Q2FjaGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxs
IGRpc2NhcmQgdGhlIGZhaWxlZCBuZXcgY2FjaGUuCisgICAgICAgICAgICAgICAgICAgIHNldE5l
d2VzdENhY2hlKG9sZE5ld2VzdENhY2hlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBoYXZlIGJlZW4gZGVsZXRlZCBi
eSB0aGUgbGFzdCBjYWxsIHRvIGRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKCkuCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC03NzUsNiArODEwLDcgQEAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSQogICAgIG1fY29tcGxldGlvblR5cGUgPSBOb25l
OwogICAgIG1fdXBkYXRlU3RhdHVzID0gSWRsZTsKICAgICBtX2ZyYW1lID0gMDsKKyAgICBtX2Nh
bGxlZFJlYWNoZWRNYXhBcHBDYWNoZVNpemUgPSBmYWxzZTsKIH0KIAogdm9pZCBBcHBsaWNhdGlv
bkNhY2hlR3JvdXA6OnN0YXJ0TG9hZGluZ0VudHJ5KCkKQEAgLTg1Nyw3ICs4OTMsMzcgQEAgdm9p
ZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFzc29jaWF0ZURvYwogICAgIEFTU0VSVCghbV9hc3Nv
Y2lhdGVkRG9jdW1lbnRMb2FkZXJzLmNvbnRhaW5zKGxvYWRlcikpOwogICAgIG1fYXNzb2NpYXRl
ZERvY3VtZW50TG9hZGVycy5hZGQobG9hZGVyKTsKIH0KLSAKKworY2xhc3MgQ2hyb21lQ2xpZW50
Q2FsbGJhY2tUaW1lcjogcHVibGljIFRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgQ2hyb21lQ2xp
ZW50Q2FsbGJhY2tUaW1lcihBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGNhY2hlR3JvdXApCisgICAg
ICAgIDogbV9jYWNoZUdyb3VwKGNhY2hlR3JvdXApCisgICAgeworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKQorICAgIHsKKyAgICAgICAgbV9jYWNoZUdyb3VwLT5k
aWRSZWFjaE1heEFwcENhY2hlU2l6ZSgpOworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9Cisg
ICAgLy8gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGEgUmVmUHRyIGhlcmUuCisg
ICAgLy8gVGhlIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCBpbnN0YW5jZSBpcyBndWFyYW50ZWVkCisg
ICAgLy8gdG8gYmUgYWxpdmUgd2hlbiB0aGUgdGltZXIgZmlyZXMgc2luY2UgaW52b2tpbmcKKyAg
ICAvLyB0aGUgQ2hyb21lQ2xpZW50IGNhbGxiYWNrIGlzIHBhcnQgb2YgaXRzIG5vcm1hbAorICAg
IC8vIHVwZGF0ZSBtYWNoaW5lcnkgYW5kIG5vdGhpbmcgY2FuIHlldCBjYXVzZSBpdCB0bworICAg
IC8vIGdldCBkZWxldGVkLgorICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogbV9jYWNoZUdyb3Vw
OworfTsKKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNjaGVkdWxlUmVhY2hlZE1heEFw
cENhY2hlU2l6ZUNhbGxiYWNrKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IENocm9tZUNsaWVudENhbGxiYWNrVGltZXIqIHRpbWVyID0gbmV3IENocm9tZUNsaWVudENhbGxi
YWNrVGltZXIodGhpcyk7CisgICAgdGltZXItPnN0YXJ0T25lU2hvdCgwKTsKKyAgICAvLyBUaGUg
dGltZXIgd2lsbCBkZWxldGUgaXRzZWxmIG9uY2UgaXQgZmlyZXMuCit9CisKIGNsYXNzIENhbGxD
YWNoZUxpc3RlbmVyVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsK
ICAgICB0eXBlZGVmIHZvaWQgKERPTUFwcGxpY2F0aW9uQ2FjaGU6OipMaXN0ZW5lckZ1bmN0aW9u
KSgpOwogcHVibGljOgpAQCAtOTEwLDcgKzk3Niw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdy
b3VwOjpjbGVhclN0b3JhZ2UKICAgICBmb3IgKEhhc2hTZXQ8QXBwbGljYXRpb25DYWNoZSo+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAg
ICAgICAgKCppdCktPmNsZWFyU3RvcmFnZUlEKCk7CiB9Ci0gICAgCisKIAogfQogCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkocmV2
aXNpb24gNDU3NTkpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
R3JvdXAuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyB2b2lkIHBvc3RMaXN0ZW5lclRhc2soTGlzdGVuZXJGdW5jdGlvbiwgY29uc3QgSGFzaFNl
dDxEb2N1bWVudExvYWRlcio+Jik7CiAgICAgc3RhdGljIHZvaWQgcG9zdExpc3RlbmVyVGFzayhM
aXN0ZW5lckZ1bmN0aW9uLCBjb25zdCBWZWN0b3I8UmVmUHRyPERvY3VtZW50TG9hZGVyPiA+JiBs
b2FkZXJzKTsKICAgICBzdGF0aWMgdm9pZCBwb3N0TGlzdGVuZXJUYXNrKExpc3RlbmVyRnVuY3Rp
b24sIERvY3VtZW50TG9hZGVyKik7CisgICAgdm9pZCBzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNo
ZVNpemVDYWxsYmFjaygpOwogCiAgICAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRl
UmVzb3VyY2VIYW5kbGUoY29uc3QgS1VSTCYsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogbmV3
ZXN0Q2FjaGVkUmVzb3VyY2UpOwogCkBAIC0xMDYsNiArMTA3LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRpZFJlY2VpdmVNYW5pZmVzdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsK
ICAgICB2b2lkIGRpZFJlY2VpdmVNYW5pZmVzdERhdGEoY29uc3QgY2hhciosIGludCk7CiAgICAg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QoKTsKKyAgICB2b2lkIGRpZFJlYWNoTWF4QXBw
Q2FjaGVTaXplKCk7CiAgICAgCiAgICAgdm9pZCBzdGFydExvYWRpbmdFbnRyeSgpOwogICAgIHZv
aWQgZGVsaXZlckRlbGF5ZWRNYWluUmVzb3VyY2VzKCk7CkBAIC0xNjMsMTIgKzE2NSwyMyBAQCBw
cml2YXRlOgogCiAgICAgLy8gV2hldGhlciB0aGlzIGNhY2hlIGdyb3VwIGlzIGEgY29weSB0aGF0
J3Mgb25seSB1c2VkIGZvciB0cmFuc2ZlcnJpbmcgdGhlIGNhY2hlIHRvIGFub3RoZXIgZmlsZS4K
ICAgICBib29sIG1faXNDb3B5OworCisgICAgLy8gVGhpcyBmbGFnIGlzIHNldCBpbW1lZGlhdGVs
eSBhZnRlciB0aGUgQ2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKCkKKyAgICAv
LyBjYWxsYmFjayBpcyBpbnZva2VkIGFzIGEgcmVzdWx0IG9mIHRoZSBzdG9yYWdlIGxheWVyIGZh
aWxpbmcgdG8gc2F2ZSBhIGNhY2hlCisgICAgLy8gZHVlIHRvIHJlYWNoaW5nIHRoZSBtYXhpbXVt
IHNpemUgb2YgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIGRhdGFiYXNlIGZpbGUuCisgICAgLy8gVGhp
cyBmbGFnIGlzIHVzZWQgYnkgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpjaGVja0lmTG9hZElzQ29t
cGxldGUoKSB0byBkZWNpZGUKKyAgICAvLyB0aGUgY291cnNlIG9mIGFjdGlvbiBpbiBjYXNlIG9m
IHRoaXMgZmFpbHVyZSAoaS5lLiBjYWxsIHRoZSBDaHJvbWVDbGllbnQKKyAgICAvLyBjYWxsYmFj
ayBvciBydW4gdGhlIGZhaWx1cmUgc3RlcHMpLgorICAgIC8vIFRoaXMgZmxhZyBpcyByZXNldCBp
biBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSXNDb21wbGV0ZSgpLgorICAgIGJv
b2wgbV9jYWxsZWRSZWFjaGVkTWF4QXBwQ2FjaGVTaXplOwogICAgIAogICAgIFJlZlB0cjxSZXNv
dXJjZUhhbmRsZT4gbV9jdXJyZW50SGFuZGxlOwogICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2U+IG1fY3VycmVudFJlc291cmNlOwogICAgIAogICAgIFJlZlB0cjxBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2U+IG1fbWFuaWZlc3RSZXNvdXJjZTsKICAgICBSZWZQdHI8UmVzb3VyY2VI
YW5kbGU+IG1fbWFuaWZlc3RIYW5kbGU7CisKKyAgICBmcmllbmQgY2xhc3MgQ2hyb21lQ2xpZW50
Q2FsbGJhY2tUaW1lcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmNw
cAkocmV2aXNpb24gNDU3NTkpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZTo6QXBwbGljYXRpb25DYWMKICAgICA6IFN1YnN0aXR1dGVSZXNv
dXJjZSh1cmwsIHJlc3BvbnNlLCBkYXRhKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3N0
b3JhZ2VJRCgwKQorICAgICwgbV9zaXplKDApCiB7CiB9CiAKQEAgLTQ0LDYgKzQ1LDI4IEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjphZGRUeXBlKHUKICAgICBtX3R5cGUgfD0gdHlw
ZTsgCiB9CiAKK2ludDY0X3QgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkKK3sKKyAg
ICBpZiAobV9zaXplKQorICAgICAgcmV0dXJuIG1fc2l6ZTsKKworICAgIGlmIChkYXRhKCkpCisg
ICAgICAgIG1fc2l6ZSA9IGRhdGEoKS0+c2l6ZSgpOworCisgICAgSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7Cisg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlKCkuaHR0
cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgbV9zaXpl
ICs9IChpdC0+Zmlyc3QubGVuZ3RoKCkgKyBpdC0+c2Vjb25kLmxlbmd0aCgpICsgMikgKiBzaXpl
b2YoVUNoYXIpOworCisgICAgbV9zaXplICs9IHVybCgpLnN0cmluZygpLmxlbmd0aCgpICogc2l6
ZW9mKFVDaGFyKTsKKyAgICBtX3NpemUgKz0gc2l6ZW9mKGludCk7IC8vIHJlc3BvbnNlKCkubV9o
dHRwU3RhdHVzQ29kZQorICAgIG1fc2l6ZSArPSByZXNwb25zZSgpLnVybCgpLnN0cmluZygpLmxl
bmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICBtX3NpemUgKz0gc2l6ZW9mKHVuc2lnbmVkKTsg
Ly8gZGF0YUlkCisgICAgbV9zaXplICs9IHJlc3BvbnNlKCkubWltZVR5cGUoKS5sZW5ndGgoKSAq
IHNpemVvZihVQ2hhcik7CisgICAgbV9zaXplICs9IHJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFt
ZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKworICAgIHJldHVybiBtX3NpemU7Cit9CisK
ICNpZm5kZWYgTkRFQlVHCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6ZHVtcFR5cGUo
dW5zaWduZWQgdHlwZSkKIHsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCShyZXZpc2lvbiA0NTc1OSkKKysrIFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0b3JhZ2VJRCh1bnNpZ25l
ZCBzdG9yYWdlSUQpIHsgbV9zdG9yYWdlSUQgPSBzdG9yYWdlSUQ7IH0KICAgICB1bnNpZ25lZCBz
dG9yYWdlSUQoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VJRDsgfQogICAgIHZvaWQgY2xlYXJT
dG9yYWdlSUQoKSB7IG1fc3RvcmFnZUlEID0gMDsgfQorICAgIGludDY0X3Qgc2l6ZSgpOwogCiAj
aWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyB2b2lkIGR1bXBUeXBlKHVuc2lnbmVkIHR5cGUpOwpA
QCAtNjMsNiArNjQsNyBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgbV90eXBlOwogICAgIHVu
c2lnbmVkIG1fc3RvcmFnZUlEOworICAgIGludDY0X3QgbV9zaXplOwogfTsKICAgICAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDQ1NzU5KQorKysgV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MywxNiArNDMsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBSZXNvdXJjZVN0b3JhZ2VJREpvdXJuYWwgewordGVtcGxhdGUg
PGNsYXNzIFQ+CitjbGFzcyBTdG9yYWdlSURKb3VybmFsIHsKIHB1YmxpYzogIAotICAgIH5SZXNv
dXJjZVN0b3JhZ2VJREpvdXJuYWwoKQorICAgIH5TdG9yYWdlSURKb3VybmFsKCkKICAgICB7CiAg
ICAgICAgIHNpemVfdCBzaXplID0gbV9yZWNvcmRzLnNpemUoKTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgICAgICBtX3JlY29yZHNbaV0ucmVzdG9y
ZSgpOwogICAgIH0KIAotICAgIHZvaWQgYWRkKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVz
b3VyY2UsIHVuc2lnbmVkIHN0b3JhZ2VJRCkKKyAgICB2b2lkIGFkZChUKiByZXNvdXJjZSwgdW5z
aWduZWQgc3RvcmFnZUlEKQogICAgIHsKICAgICAgICAgbV9yZWNvcmRzLmFwcGVuZChSZWNvcmQo
cmVzb3VyY2UsIHN0b3JhZ2VJRCkpOwogICAgIH0KQEAgLTY2LDcgKzY3LDcgQEAgcHJpdmF0ZToK
ICAgICBjbGFzcyBSZWNvcmQgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVjb3JkKCkgOiBtX3Jl
c291cmNlKDApLCBtX3N0b3JhZ2VJRCgwKSB7IH0KLSAgICAgICAgUmVjb3JkKEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkIHN0b3JhZ2VJRCkgOiBtX3Jlc291cmNl
KHJlc291cmNlKSwgbV9zdG9yYWdlSUQoc3RvcmFnZUlEKSB7IH0KKyAgICAgICAgUmVjb3JkKFQq
IHJlc291cmNlLCB1bnNpZ25lZCBzdG9yYWdlSUQpIDogbV9yZXNvdXJjZShyZXNvdXJjZSksIG1f
c3RvcmFnZUlEKHN0b3JhZ2VJRCkgeyB9CiAKICAgICAgICAgdm9pZCByZXN0b3JlKCkKICAgICAg
ICAgewpAQCAtNzQsNyArNzUsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIG1fcmVzb3VyY2U7CisgICAgICAg
IFQqIG1fcmVzb3VyY2U7CiAgICAgICAgIHVuc2lnbmVkIG1fc3RvcmFnZUlEOwogICAgIH07CiAK
QEAgLTIyMyw2ICsyMjQsOCBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2Fj
aGVTCiAgICAgICAgIC8vIGEgbWF0Y2hpbmcgVVJMLgogICAgICAgICB1bnNpZ25lZCBuZXdlc3RD
YWNoZUlEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgy
KSk7CiAgICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBjYWNoZSA9IGxvYWRDYWNoZShu
ZXdlc3RDYWNoZUlEKTsKKyAgICAgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBjYWNoZS0+
cmVzb3VyY2VGb3JVUkwodXJsKTsKICAgICAgICAgaWYgKCFyZXNvdXJjZSkKQEAgLTM1Myw2ICsz
NTYsNTYgQEAgY29uc3QgU3RyaW5nJiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6YwogICAgIHJl
dHVybiBtX2NhY2hlRGlyZWN0b3J5OwogfQogCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpzZXRNYXhpbXVtU2l6ZShpbnQ2NF90IHNpemUpCit7CisgICAgbV9tYXhpbXVtU2l6ZSA9IHNp
emU7Cit9CisKK2ludDY0X3QgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om1heGltdW1TaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9tYXhpbXVtU2l6ZTsKK30KKworYm9vbCBBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6aXNNYXhpbXVtU2l6ZVJlYWNoZWQoKSBjb25zdAoreworICAgIHJldHVy
biBtX2lzTWF4aW11bVNpemVSZWFjaGVkOworfQorCitpbnQ2NF90IEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlOjpzcGFjZU5lZWRlZChpbnQ2NF90IGNhY2hlVG9TYXZlKQoreworICAgIGludDY0X3Qg
c3BhY2VOZWVkZWQgPSAwOworICAgIGludDY0X3QgY3VycmVudFNpemUgPSAwOworICAgIGlmICgh
Z2V0RmlsZVNpemUobV9jYWNoZUZpbGUsIGN1cnJlbnRTaXplKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIHdlIGhhdmUgYXZh
aWxhYmxlLgorICAgIGludDY0X3QgdG90YWxBdmFpbGFibGVTaXplID0gMDsKKyAgICBpZiAobV9t
YXhpbXVtU2l6ZSA8IGN1cnJlbnRTaXplKSB7CisgICAgICAgIC8vIFRoZSBtYXggc2l6ZSBpcyBz
bWFsbGVyIHRoYW4gdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBhcHAgY2FjaGUgZmlsZS4KKyAgICAg
ICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBjbGllbnQgcHJldmlvdXNseSBpbXBvc2VkIGEg
bGFyZ2VyIG1heCBzaXplCisgICAgICAgIC8vIHZhbHVlIGFuZCB0aGUgYXBwIGNhY2hlIGZpbGUg
aGFzIGFscmVhZHkgZ3Jvd24gYmV5b25kIHRoZSBjdXJyZW50CisgICAgICAgIC8vIG1heCBzaXpl
IHZhbHVlLgorICAgICAgICAvLyBUaGUgYW1vdW50IG9mIGZyZWUgc3BhY2UgaXMganVzdCB0aGUg
YW1vdW50IG9mIGZyZWUgc3BhY2UgaW5zaWRlCisgICAgICAgIC8vIHRoZSBkYXRhYmFzZSBmaWxl
LiBOb3RlIHRoYXQgdGhpcyBpcyBhbHdheXMgMCBpZiBTUUxpdGUgaXMgY29tcGlsZWQKKyAgICAg
ICAgLy8gd2l0aCBBVVRPX1ZBQ1VVTSA9IDEuCisgICAgICAgIHRvdGFsQXZhaWxhYmxlU2l6ZSA9
IG1fZGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRo
ZSBtYXggc2l6ZSBpcyB0aGUgc2FtZSBvciBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBzaXplLgor
ICAgICAgICAvLyBUaGUgYW1vdW50IG9mIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGlzIHRoZSBhbW91
bnQgb2YgZnJlZSBzcGFjZQorICAgICAgICAvLyBpbnNpZGUgdGhlIGRhdGFiYXNlIGZpbGUgcGx1
cyB0aGUgYW1vdW50IHdlIGNhbiBncm93IHVudGlsIHdlIGhpdAorICAgICAgICAvLyB0aGUgbWF4
IHNpemUuCisgICAgICAgIHRvdGFsQXZhaWxhYmxlU2l6ZSA9IChtX21heGltdW1TaXplIC0gY3Vy
cmVudFNpemUpICsgbV9kYXRhYmFzZS5mcmVlU3BhY2VTaXplKCk7CisgICAgfQorCisgICAgLy8g
VGhlIHNwYWNlIG5lZWRlZCB0byBiZSBmcmVlZCBpbiBvcmRlciB0byBhY2NvbW9kYXRlIHRoZSBm
YWlsZWQgY2FjaGUgaXMKKyAgICAvLyB0aGUgc2l6ZSBvZiB0aGUgZmFpbGVkIGNhY2hlIG1pbnVz
IGFueSBhbHJlYWR5IGF2YWlsYWJsZSBmcmVlIHNwYWNlLgorICAgIHNwYWNlTmVlZGVkID0gY2Fj
aGVUb1NhdmUgLSB0b3RhbEF2YWlsYWJsZVNpemU7CisgICAgLy8gVGhlIHNwYWNlIG5lZWRlZCB2
YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIChvciBlbHNlIHRoZSB0b3RhbCBhbHJlYWR5CisgICAgLy8g
YXZhaWxhYmxlIGZyZWUgc3BhY2Ugd291bGQgYmUgbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhl
IGZhaWxlZCBjYWNoZSBhbmQKKyAgICAvLyBzYXZpbmcgb2YgdGhlIGNhY2hlIHNob3VsZCBoYXZl
IG5ldmVyIGZhaWxlZCkuCisgICAgQVNTRVJUKHNwYWNlTmVlZGVkKTsKKyAgICByZXR1cm4gc3Bh
Y2VOZWVkZWQ7Cit9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTUUxD
b21tYW5kKGNvbnN0IFN0cmluZyYgc3FsKQogewpAQCAtMzY2LDcgKzQxOSw3IEBAIGJvb2wgQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTUUwKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1zdGF0aWMgY29uc3QgaW50IHNjaGVtYVZlcnNpb24gPSAzOworc3RhdGljIGNvbnN0IGludCBz
Y2hlbWFWZXJzaW9uID0gNDsKICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZl
cmlmeVNjaGVtYVZlcnNpb24oKQogewpAQCAtNDAwLDEzICs0NTMsMTMgQEAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6b3BlbkRhdGFiYQogICAgIC8vIFRoZSBjYWNoZSBkaXJlY3Rvcnkg
c2hvdWxkIG5ldmVyIGJlIG51bGwsIGJ1dCBpZiBpdCBmb3Igc29tZSB3ZWlyZCByZWFzb24gaXMg
d2UgYmFpbCBvdXQuCiAgICAgaWYgKG1fY2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBTdHJpbmcgYXBwbGljYXRpb25DYWNoZVBhdGggPSBwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVjdG9yeSwgIkFwcGxpY2F0aW9uQ2FjaGUuZGIi
KTsKLSAgICBpZiAoIWNyZWF0ZUlmRG9lc05vdEV4aXN0ICYmICFmaWxlRXhpc3RzKGFwcGxpY2F0
aW9uQ2FjaGVQYXRoKSkKKworICAgIG1fY2FjaGVGaWxlID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KG1fY2FjaGVEaXJlY3RvcnksICJBcHBsaWNhdGlvbkNhY2hlLmRiIik7CisgICAgaWYgKCFj
cmVhdGVJZkRvZXNOb3RFeGlzdCAmJiAhZmlsZUV4aXN0cyhtX2NhY2hlRmlsZSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1ha2VBbGxEaXJlY3RvcmllcyhtX2NhY2hlRGlyZWN0b3J5KTsKLSAg
ICBtX2RhdGFiYXNlLm9wZW4oYXBwbGljYXRpb25DYWNoZVBhdGgpOworICAgIG1fZGF0YWJhc2Uu
b3BlbihtX2NhY2hlRmlsZSk7CiAgICAgCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQog
ICAgICAgICByZXR1cm47CkBAIC00MTYsNyArNDY5LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6b3BlbkRhdGFiYQogICAgIC8vIENyZWF0ZSB0YWJsZXMKICAgICBleGVjdXRlU1FM
Q29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQ2FjaGVHcm91cHMgKGlkIElOVEVH
RVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgIgogICAgICAgICAgICAgICAgICAgICAgICJt
YW5pZmVzdEhvc3RIYXNoIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgbWFuaWZl
c3RVUkwgVEVYVCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbmV3ZXN0Q2FjaGUgSU5URUdFUiki
KTsKLSAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQ2Fj
aGVzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIGNhY2hlR3JvdXAgSU5U
RUdFUikiKTsKKyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElT
VFMgQ2FjaGVzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIGNhY2hlR3Jv
dXAgSU5URUdFUiwgc2l6ZSBJTlRFR0VSKSIpOwogICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVB
VEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBDYWNoZVdoaXRlbGlzdFVSTHMgKHVybCBURVhUIE5PVCBO
VUxMIE9OIENPTkZMSUNUIEZBSUwsIGNhY2hlIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1Qg
RkFJTCkiKTsKICAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElT
VFMgRmFsbGJhY2tVUkxzIChuYW1lc3BhY2UgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlM
LCBmYWxsYmFja1VSTCBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsICIKICAgICAgICAg
ICAgICAgICAgICAgICAiY2FjaGUgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIp
OwpAQCAtNDU2LDkgKzUwOSwxMCBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVj
dXRlU3RhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0gICAgCiAKLWJvb2wgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXApCitib29sIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwLCBH
cm91cFN0b3JhZ2VJREpvdXJuYWwqIGpvdXJuYWwpCiB7CiAgICAgQVNTRVJUKGdyb3VwLT5zdG9y
YWdlSUQoKSA9PSAwKTsKKyAgICBBU1NFUlQoam91cm5hbCk7CiAKICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZUdyb3VwcyAobWFuaWZl
c3RIb3N0SGFzaCwgbWFuaWZlc3RVUkwpIFZBTFVFUyAoPywgPykiKTsKICAgICBpZiAoc3RhdGVt
ZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKQEAgLTQ3MSw2ICs1MjUsNyBAQCBib29sIEFw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGdyb3VwLT5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJh
c2UubGFzdEluc2VydFJvd0lEKCkpKTsKKyAgICBqb3VybmFsLT5hZGQoZ3JvdXAsIDApOwogICAg
IHJldHVybiB0cnVlOwogfSAgICAKIApAQCAtNDgwLDExICs1MzUsMTIgQEAgYm9vbCBBcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbAogICAgIEFTU0VSVChjYWNoZS0+Z3JvdXAoKS0+
c3RvcmFnZUlEKCkgIT0gMCk7CiAgICAgQVNTRVJUKHN0b3JhZ2VJREpvdXJuYWwpOwogICAgIAot
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENh
Y2hlcyAoY2FjaGVHcm91cCkgVkFMVUVTICg/KSIpOworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlcyAoY2FjaGVHcm91cCwgc2l6ZSkg
VkFMVUVTICg/LCA/KSIpOwogICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3Vs
dE9rKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEs
IGNhY2hlLT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgy
LCBjYWNoZS0+ZXN0aW1hdGVkU2l6ZUluRGF0YWJhc2UoKSk7CiAKICAgICBpZiAoIWV4ZWN1dGVT
dGF0ZW1lbnQoc3RhdGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTgxLDYgKzYz
Nyw5IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGwKICAgICBpZiAo
cmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCisgICAgLy8gVGhlIHNhbWUgQXBwbGljYXRpb25DYWNoZVJlc291cmNl
IGFyZSB1c2VkIGluIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6c2l6ZSgpCisgICAgLy8gdG8g
Y2FsY3VsYXRlIHRoZSBhcHByb3hpbWF0ZSBzaXplIG9mIGFuIEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZSBvYmplY3QuIElmCisgICAgLy8geW91IGNoYW5nZSB0aGUgY29kZSBiZWxvdywgcGxlYXNl
IGFsc28gY2hhbmdlIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6c2l6ZSgpLgogICAgIHJlc291
cmNlU3RhdGVtZW50LmJpbmRUZXh0KDEsIHJlc291cmNlLT51cmwoKSk7CiAgICAgcmVzb3VyY2VT
dGF0ZW1lbnQuYmluZEludDY0KDIsIHJlc291cmNlLT5yZXNwb25zZSgpLmh0dHBTdGF0dXNDb2Rl
KCkpOwogICAgIHJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDMsIHJlc291cmNlLT5yZXNwb25z
ZSgpLnVybCgpKTsKQEAgLTYyNiwzMyArNjg1LDU2IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2U6OnN0b3JlVXBkYXQKICAgICByZXR1cm4gZXhlY3V0ZVN0YXRlbWVudChlbnRyeVN0YXRl
bWVudCk7CiB9CiAKLXZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlKEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UsIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKQorYm9v
bCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNl
KiByZXNvdXJjZSwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCiB7CiAgICAgQVNTRVJUKGNhY2hl
LT5zdG9yYWdlSUQoKSk7CiAgICAgCiAgICAgb3BlbkRhdGFiYXNlKHRydWUpOwogIAorICAgIG1f
aXNNYXhpbXVtU2l6ZVJlYWNoZWQgPSBmYWxzZTsKKyAgICBtX2RhdGFiYXNlLnNldE1heGltdW1T
aXplKG1fbWF4aW11bVNpemUpOworCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gc3RvcmVSZXNvdXJj
ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5i
ZWdpbigpOwogICAgIAotICAgIGlmICghc3RvcmUocmVzb3VyY2UsIGNhY2hlLT5zdG9yYWdlSUQo
KSkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0b3JlKHJlc291cmNlLCBjYWNoZS0+c3Rv
cmFnZUlEKCkpKSB7CisgICAgICAgIGNoZWNrRm9yTWF4U2l6ZVJlYWNoZWQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEEgcmVzb3VyY2Ugd2FzIGFkZGVkIHRvIHRo
ZSBjYWNoZS4gVXBkYXRlIHRoZSB0b3RhbCBkYXRhIHNpemUgZm9yIHRoZSBjYWNoZS4KKyAgICBT
UUxpdGVTdGF0ZW1lbnQgc2l6ZVVwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCAiVVBEQVRFIENh
Y2hlcyBTRVQgc2l6ZT1zaXplKz8gV0hFUkUgaWQ9PyIpOworICAgIGlmIChzaXplVXBkYXRlU3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMSwgcmVzb3VyY2UtPnNpemUoKSk7
CisgICAgc2l6ZVVwZGF0ZVN0YXRlbWVudC5iaW5kSW50NjQoMiwgY2FjaGUtPnN0b3JhZ2VJRCgp
KTsKKworICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzaXplVXBkYXRlU3RhdGVtZW50KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHN0b3JlUmVzb3VyY2VUcmFuc2FjdGlvbi5j
b21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmVOZXdlc3RDYWNoZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwKQogewog
ICAgIG9wZW5EYXRhYmFzZSh0cnVlKTsKLSAgICAKKworICAgIG1faXNNYXhpbXVtU2l6ZVJlYWNo
ZWQgPSBmYWxzZTsKKyAgICBtX2RhdGFiYXNlLnNldE1heGltdW1TaXplKG1fbWF4aW11bVNpemUp
OworCiAgICAgU1FMaXRlVHJhbnNhY3Rpb24gc3RvcmVDYWNoZVRyYW5zYWN0aW9uKG1fZGF0YWJh
c2UpOwogICAgIAogICAgIHN0b3JlQ2FjaGVUcmFuc2FjdGlvbi5iZWdpbigpOwotICAgIAorCisg
ICAgR3JvdXBTdG9yYWdlSURKb3VybmFsIGdyb3VwU3RvcmFnZUlESm91cm5hbDsKICAgICBpZiAo
IWdyb3VwLT5zdG9yYWdlSUQoKSkgewogICAgICAgICAvLyBTdG9yZSB0aGUgZ3JvdXAKLSAgICAg
ICAgaWYgKCFzdG9yZShncm91cCkpCisgICAgICAgIGlmICghc3RvcmUoZ3JvdXAsICZncm91cFN0
b3JhZ2VJREpvdXJuYWwpKSB7CisgICAgICAgICAgICBjaGVja0Zvck1heFNpemVSZWFjaGVkKCk7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
QVNTRVJUKGdyb3VwLT5uZXdlc3RDYWNoZSgpKTsKQEAgLTY2MiwxMSArNzQ0LDEzIEBAIGJvb2wg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXMKICAgICAvLyBMb2cgdGhlIHN0b3Jh
Z2VJRCBjaGFuZ2VzIHRvIHRoZSBpbi1tZW1vcnkgcmVzb3VyY2Ugb2JqZWN0cy4gVGhlIGpvdXJu
YWwKICAgICAvLyBvYmplY3Qgd2lsbCByb2xsIHRoZW0gYmFjayBhdXRvbWF0aWNhbGx5IGluIGNh
c2UgYSBkYXRhYmFzZSBvcGVyYXRpb24KICAgICAvLyBmYWlscyBhbmQgdGhpcyBtZXRob2QgcmV0
dXJucyBlYXJseS4KLSAgICBSZXNvdXJjZVN0b3JhZ2VJREpvdXJuYWwgc3RvcmFnZUlESm91cm5h
bDsKKyAgICBSZXNvdXJjZVN0b3JhZ2VJREpvdXJuYWwgcmVzb3VyY2VTdG9yYWdlSURKb3VybmFs
OwogCiAgICAgLy8gU3RvcmUgdGhlIG5ld2VzdCBjYWNoZQotICAgIGlmICghc3RvcmUoZ3JvdXAt
Pm5ld2VzdENhY2hlKCksICZzdG9yYWdlSURKb3VybmFsKSkKKyAgICBpZiAoIXN0b3JlKGdyb3Vw
LT5uZXdlc3RDYWNoZSgpLCAmcmVzb3VyY2VTdG9yYWdlSURKb3VybmFsKSkgeworICAgICAgICBj
aGVja0Zvck1heFNpemVSZWFjaGVkKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAg
ICAgCiAgICAgLy8gVXBkYXRlIHRoZSBuZXdlc3QgY2FjaGUgaW4gdGhlIGdyb3VwLgogICAgIApA
QCAtNjgwLDcgKzc2NCw4IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3
ZXMKICAgICBpZiAoIWV4ZWN1dGVTdGF0ZW1lbnQoc3RhdGVtZW50KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIHN0b3JhZ2VJREpvdXJuYWwuY29tbWl0KCk7CisgICAgZ3JvdXBT
dG9yYWdlSURKb3VybmFsLmNvbW1pdCgpOworICAgIHJlc291cmNlU3RvcmFnZUlESm91cm5hbC5j
b21taXQoKTsKICAgICBzdG9yZUNhY2hlVHJhbnNhY3Rpb24uY29tbWl0KCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC04NzYsNyArOTYxLDExNiBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlOjpzdG9yZUNvcHlPCiAgICAgCiAgICAgcmV0dXJuIGNvcHlTdG9yYWdlLnN0b3JlTmV3ZXN0
Q2FjaGUoZ3JvdXBDb3B5LmdldCgpKTsKIH0KLSAgICAKKworYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6bWFuaWZlc3RVUkxzKFZlY3RvcjxLVVJMPiogdXJscykKK3sKKyAgICBBU1NFUlQo
dXJscyk7CisgICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UuaXNP
cGVuKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzZWxl
Y3RVUkxzKG1fZGF0YWJhc2UsICJTRUxFQ1QgbWFuaWZlc3RVUkwgRlJPTSBDYWNoZUdyb3VwcyIp
OworCisgICAgaWYgKHNlbGVjdFVSTHMucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgd2hpbGUgKHNlbGVjdFVSTHMuc3RlcCgpID09IFNRTFJl
c3VsdFJvdykKKyAgICAgICAgdXJscy0+YXBwZW5kKHNlbGVjdFVSTHMuZ2V0Q29sdW1uVGV4dCgw
KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6Y2FjaGVHcm91cFNpemUoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCwgaW50NjRfdCogc2l6
ZSkKK3sKKyAgICBBU1NFUlQoc2l6ZSk7CisgICAgb3BlbkRhdGFiYXNlKGZhbHNlKTsKKyAgICBp
ZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHN1bShDYWNoZXMuc2l6
ZSkgRlJPTSBDYWNoZXMgSU5ORVIgSk9JTiBDYWNoZUdyb3VwcyBPTiBDYWNoZXMuY2FjaGVHcm91
cD1DYWNoZUdyb3Vwcy5pZCBXSEVSRSBDYWNoZUdyb3Vwcy5tYW5pZmVzdFVSTD0/Iik7CisgICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBtYW5pZmVzdFVSTCk7CisKKyAgICBp
bnQgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3Vs
dERvbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVz
dWx0Um93KSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGdldCB0aGUgc2l6ZSBvZiB0
aGUgY2FjaGUgZ3JvdXAsIGVycm9yIFwiJXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgKnNpemUgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50NjQoMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmRlbGV0ZUNhY2hlR3JvdXAoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVS
TCkKK3sKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiBkZWxldGVUcmFuc2FjdGlvbihtX2RhdGFiYXNl
KTsKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGdyb3VwIGlzIGluIG1lbW9yeS4KKyAgICBB
cHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwID0gbV9jYWNoZXNJbk1lbW9yeS5nZXQobWFuaWZl
c3RVUkwpOworICAgIGlmIChncm91cCkKKyAgICAgICAgY2FjaGVHcm91cE1hZGVPYnNvbGV0ZShn
cm91cCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFRoZSBjYWNoZSBncm91cCBpcyBub3QgaW4g
bWVtb3J5LCBzbyByZW1vdmUgaXQgZnJvbSB0aGUgZGlzay4KKyAgICAgICAgb3BlbkRhdGFiYXNl
KGZhbHNlKTsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBpZFN0YXRlbWVudChtX2Rh
dGFiYXNlLCAiU0VMRUNUIGlkIEZST00gQ2FjaGVHcm91cHMgV0hFUkUgbWFuaWZlc3RVUkw9PyIp
OworICAgICAgICBpZiAoaWRTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlkU3RhdGVtZW50LmJpbmRUZXh0KDEs
IG1hbmlmZXN0VVJMKTsKKworICAgICAgICBpbnQgcmVzdWx0ID0gaWRTdGF0ZW1lbnQuc3RlcCgp
OworICAgICAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdERvbmUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRSb3cpIHsKKyAgICAg
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGxvYWQgY2FjaGUgZ3JvdXAgaWQsIGVycm9yIFwi
JXNcIiIsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgaW50NjRfdCBncm91cElkID0gaWRTdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50NjQoMCk7CisKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IGNhY2hlU3RhdGVt
ZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZXMgV0hFUkUgY2FjaGVHcm91cD0/Iik7
CisgICAgICAgIGlmIChjYWNoZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IGdyb3Vw
U3RhdGVtZW50KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBpZD0/
Iik7CisgICAgICAgIGlmIChncm91cFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY2FjaGVTdGF0ZW1lbnQuYmlu
ZEludDY0KDEsIGdyb3VwSWQpOworICAgICAgICBleGVjdXRlU3RhdGVtZW50KGNhY2hlU3RhdGVt
ZW50KTsKKyAgICAgICAgZ3JvdXBTdGF0ZW1lbnQuYmluZEludDY0KDEsIGdyb3VwSWQpOworICAg
ICAgICBleGVjdXRlU3RhdGVtZW50KGdyb3VwU3RhdGVtZW50KTsKKyAgICB9CisKKyAgICBkZWxl
dGVUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6dmFjdXVtRGF0YWJhc2VGaWxlKCkKK3sKKyAgICBtX2RhdGFi
YXNlLnJ1blZhY3V1bUNvbW1hbmQoKTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6Y2hlY2tGb3JNYXhTaXplUmVhY2hlZCgpCit7CisgICAgaWYgKG1fZGF0YWJhc2UubGFzdEVy
cm9yKCkgPT0gU1FMUmVzdWx0RnVsbCkKKyAgICAgICAgbV9pc01heGltdW1TaXplUmVhY2hlZCA9
IHRydWU7Cit9CisKK0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZSgpIAorICAgIDogbV9tYXhpbXVtU2l6ZShJTlRfTUFYKQorICAgICwgbV9pc01heGltdW1T
aXplUmVhY2hlZChmYWxzZSkKK3sKK30KKwogQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UmIGNhY2hl
U3RvcmFnZSgpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZSwgc3RvcmFnZSwgKCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCShyZXZpc2lvbiA0NTc1OSkKKysrIFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDEzICs0MCwxOSBAQCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlOwogY2xhc3MgQXBwbGlj
YXRpb25DYWNoZUdyb3VwOwogY2xhc3MgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOwogY2xhc3Mg
S1VSTDsKLWNsYXNzIFJlc291cmNlU3RvcmFnZUlESm91cm5hbDsKLSAgICAKK3RlbXBsYXRlIDxj
bGFzcyBUPgorY2xhc3MgU3RvcmFnZUlESm91cm5hbDsKKwogY2xhc3MgQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UgewogcHVibGljOgogICAgIHZvaWQgc2V0Q2FjaGVEaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJik7CiAgICAgY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSgpIGNvbnN0OwogICAgIAor
ICAgIHZvaWQgc2V0TWF4aW11bVNpemUoaW50NjRfdCBzaXplKTsKKyAgICBpbnQ2NF90IG1heGlt
dW1TaXplKCkgY29uc3Q7CisgICAgYm9vbCBpc01heGltdW1TaXplUmVhY2hlZCgpIGNvbnN0Owor
ICAgIGludDY0X3Qgc3BhY2VOZWVkZWQoaW50NjRfdCBjYWNoZVRvU2F2ZSk7CisKICAgICBBcHBs
aWNhdGlvbkNhY2hlR3JvdXAqIGNhY2hlR3JvdXBGb3JVUkwoY29uc3QgS1VSTCYpOyAvLyBDYWNo
ZSB0byBsb2FkIGEgbWFpbiByZXNvdXJjZSBmcm9tLgogICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCogZmFsbGJhY2tDYWNoZUdyb3VwRm9yVVJMKGNvbnN0IEtVUkwmKTsgLy8gQ2FjaGUgdGhhdCBo
YXMgYSBmYWxsYmFjayBlbnRyeSB0byBsb2FkIGEgbWFpbiByZXNvdXJjZSBmcm9tIGlmIG5vcm1h
bCBsb2FkaW5nIGZhaWxzLgogCkBAIC01NSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNh
Y2hlR3JvdXBNYWRlT2Jzb2xldGUoQXBwbGljYXRpb25DYWNoZUdyb3VwKik7CiAgICAgICAgIAog
ICAgIGJvb2wgc3RvcmVOZXdlc3RDYWNoZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqKTsgLy8gVXBk
YXRlcyB0aGUgY2FjaGUgZ3JvdXAsIGJ1dCBkb2Vzbid0IHJlbW92ZSBvbGQgY2FjaGUuCi0gICAg
dm9pZCBzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqLCBBcHBsaWNhdGlvbkNhY2hlKik7
CisgICAgYm9vbCBzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqLCBBcHBsaWNhdGlvbkNh
Y2hlKik7CiAgICAgYm9vbCBzdG9yZVVwZGF0ZWRUeXBlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZSosIEFwcGxpY2F0aW9uQ2FjaGUqKTsKIAogICAgIC8vIFJlbW92ZXMgdGhlIGdyb3VwIGlmIHRo
ZSBjYWNoZSB0byBiZSByZW1vdmVkIGlzIHRoZSBuZXdlc3Qgb25lIChzbywgc3RvcmVOZXdlc3RD
YWNoZSgpIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmVoYW5kIHdoZW4gdXBkYXRpbmcpLgpAQCAt
NjUsMTEgKzcxLDE5IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgYm9vbCBzdG9yZUNvcHlP
ZkNhY2hlKGNvbnN0IFN0cmluZyYgY2FjaGVEaXJlY3RvcnksIEFwcGxpY2F0aW9uQ2FjaGUqKTsK
IAorICAgIGJvb2wgbWFuaWZlc3RVUkxzKFZlY3RvcjxLVVJMPiogdXJscyk7CisgICAgYm9vbCBj
YWNoZUdyb3VwU2l6ZShjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJMLCBpbnQ2NF90KiBzaXplKTsK
KyAgICBib29sIGRlbGV0ZUNhY2hlR3JvdXAoY29uc3QgU3RyaW5nJiBtYW5pZmVzdFVSTCk7Cisg
ICAgdm9pZCB2YWN1dW1EYXRhYmFzZUZpbGUoKTsKIHByaXZhdGU6CisgICAgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UoKTsKICAgICBQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IGxvYWRDYWNo
ZSh1bnNpZ25lZCBzdG9yYWdlSUQpOwogICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogbG9hZENh
Y2hlR3JvdXAoY29uc3QgS1VSTCYgbWFuaWZlc3RVUkwpOwogICAgIAotICAgIGJvb2wgc3RvcmUo
QXBwbGljYXRpb25DYWNoZUdyb3VwKik7CisgICAgdHlwZWRlZiBTdG9yYWdlSURKb3VybmFsPEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gUmVzb3VyY2VTdG9yYWdlSURKb3VybmFsOworICAgIHR5
cGVkZWYgU3RvcmFnZUlESm91cm5hbDxBcHBsaWNhdGlvbkNhY2hlR3JvdXA+IEdyb3VwU3RvcmFn
ZUlESm91cm5hbDsKKworICAgIGJvb2wgc3RvcmUoQXBwbGljYXRpb25DYWNoZUdyb3VwKiwgR3Jv
dXBTdG9yYWdlSURKb3VybmFsKik7CiAgICAgYm9vbCBzdG9yZShBcHBsaWNhdGlvbkNhY2hlKiwg
UmVzb3VyY2VTdG9yYWdlSURKb3VybmFsKik7CiAgICAgYm9vbCBzdG9yZShBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2UqLCB1bnNpZ25lZCBjYWNoZVN0b3JhZ2VJRCk7CiAKQEAgLTgxLDggKzk1LDE0
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBleGVjdXRlU3RhdGVtZW50KFNRTGl0ZVN0YXRl
bWVudCYpOwogICAgIGJvb2wgZXhlY3V0ZVNRTENvbW1hbmQoY29uc3QgU3RyaW5nJik7CisKKyAg
ICB2b2lkIGNoZWNrRm9yTWF4U2l6ZVJlYWNoZWQoKTsKICAgICAKICAgICBTdHJpbmcgbV9jYWNo
ZURpcmVjdG9yeTsKKyAgICBTdHJpbmcgbV9jYWNoZUZpbGU7CisKKyAgICBpbnQ2NF90IG1fbWF4
aW11bVNpemU7CisgICAgYm9vbCBtX2lzTWF4aW11bVNpemVSZWFjaGVkOwogCiAgICAgU1FMaXRl
RGF0YWJhc2UgbV9kYXRhYmFzZTsKIApAQCAtOTIsNiArMTEyLDggQEAgcHJpdmF0ZToKICAgICAK
ICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqPiBDYWNo
ZUdyb3VwTWFwOwogICAgIENhY2hlR3JvdXBNYXAgbV9jYWNoZXNJbk1lbW9yeTsgLy8gRXhjbHVk
ZXMgb2Jzb2xldGUgY2FjaGUgZ3JvdXBzLgorCisgICAgZnJpZW5kIEFwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlJiBjYWNoZVN0b3JhZ2UoKTsKIH07CiAgCiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSYg
Y2FjaGVTdG9yYWdlKCk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiA0NTc1OSkKKysr
IFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEz
OSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRl
ZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkgPSAwOwog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICAv
LyBDYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGNhY2hlIGZhaWxzIHRvIHNh
dmUgYSBjYWNoZSBvYmplY3QKKyAgICAgICAgLy8gYmVjYXVzZSBzdG9yaW5nIGl0IHdvdWxkIGdy
b3cgdGhlIGRhdGFiYXNlIGZpbGUgcGFzdCBpdHMgZGVmaW5lZCBtYXhpbXVtCisgICAgICAgIC8v
IHNpemUgb3IgcGFzdCB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2Ugb24gdGhlIGRldmljZS4gCisg
ICAgICAgIC8vIFRoZSBjaHJvbWUgY2xpZW50IHdvdWxkIG5lZWQgdG8gdGFrZSBzb21lIGFjdGlv
biBzdWNoIGFzIGV2aWN0aW5nIHNvbWUKKyAgICAgICAgLy8gb2xkIGNhY2hlcy4KKyAgICAgICAg
dmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkg
PSAwOworI2VuZGlmCisKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpOwogI2VuZGlmCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA0NTc1OSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUwLDYgKzE1MCwxOCBAQCBpbnQgU1FMaXRlRGF0YWJhc2U6OnBhZ2VTaXplKCkKICAgICByZXR1
cm4gbV9wYWdlU2l6ZTsKIH0KIAoraW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6ZnJlZVNwYWNlU2l6
ZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOworICAgIGVu
YWJsZUF1dGhvcml6ZXIoZmFsc2UpOworICAgIC8vIE5vdGU6IGZyZWVsaXN0X2NvdW50IHdhcyBh
ZGRlZCBpbiBTUUxpdGUgMy40LjEuCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhp
cywgIlBSQUdNQSBmcmVlbGlzdF9jb3VudCIpOworICAgIGludDY0X3Qgc2l6ZSA9IHN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQ2NCgwKSAqIHBhZ2VTaXplKCk7CisKKyAgICBlbmFibGVBdXRob3JpemVy
KHRydWUpOworICAgIHJldHVybiBzaXplOworfQorCiB2b2lkIFNRTGl0ZURhdGFiYXNlOjpzZXRT
eW5jaHJvbm91cyhTeW5jaHJvbm91c1ByYWdtYSBzeW5jKQogewogICAgIGV4ZWN1dGVDb21tYW5k
KFN0cmluZzo6Zm9ybWF0KCJQUkFHTUEgc3luY2hyb25vdXMgPSAlaSIsIHN5bmMpKTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAkocmV2aXNpb24gNDU3NTkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Myw2ICs4Myw5IEBAIHB1YmxpYzoKICAgICBpbnQ2NF90IG1heGltdW1TaXplKCk7CiAgICAgdm9p
ZCBzZXRNYXhpbXVtU2l6ZShpbnQ2NF90KTsKICAgICAKKyAgICAvLyBHZXRzIHRoZSBudW1iZXIg
b2YgdW51c2VkIGJ5dGVzIGluIHRoZSBkYXRhYmFzZSBmaWxlLgorICAgIGludDY0X3QgZnJlZVNw
YWNlU2l6ZSgpOworCiAgICAgLy8gVGhlIFNRTGl0ZSBTWU5DSFJPTk9VUyBwcmFnbWEgY2FuIGJl
IGVpdGhlciBGVUxMLCBOT1JNQUwsIG9yIE9GRgogICAgIC8vIEZVTEwgLSBBbnkgd3JpdGluZyBj
YWxscyB0byB0aGUgREIgYmxvY2sgdW50aWwgdGhlIGRhdGEgaXMgYWN0dWFsbHkgb24gdGhlIGRp
c2sgc3VyZmFjZQogICAgIC8vIE5PUk1BTCAtIFNRTGl0ZSBwYXVzZXMgYXQgc29tZSBjcml0aWNh
bCBtb21lbnRzIHdoZW4gd3JpdGluZywgYnV0IG11Y2ggbGVzcyB0aGFuIEZVTEwKSW5kZXg6IFdl
YktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
NDU4NTYpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEg
QEAKKzIwMDktMDctMTQgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMAorICAg
ICAgICAKKyAgICAgICAgVXBkYXRlZCB0aGUgcHJvamVjdCBhZnRlciBhZGRpbmcgV2ViQXBwbGlj
YXRpb25DYWNoZS5oL21tCisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKwogMjAwOS0wNy0xMCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgU29ydCBhbGwgb3VyIFhjb2RlIHByb2plY3RzCkluZGV4OiBXZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NTc1OSkKKysrIFdlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMwOCw4
IEBACiAJCUE3RDNDNUJEMEI1NzczQzUwMDJDQTQ1MCAvKiBXZWJQYXN0ZWJvYXJkSGVscGVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEM0M1QkIw
QjU3NzNDNTAwMkNBNDUwIC8qIFdlYlBhc3RlYm9hcmRIZWxwZXIubW0gKi87IH07CiAJCUFCOUZC
QkJCMEY4NTgyQjAwMDZBREM0MyAvKiBXZWJET01PcGVyYXRpb25zSW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCOUZCQkJBMEY4NTgyQjAw
MDZBREM0MyAvKiBXZWJET01PcGVyYXRpb25zSW50ZXJuYWwuaCAqLzsgfTsKIAkJQUJEREYyMEQw
OEVCMEREQzAwMUUxMjQxIC8qIFdlYkRvd25sb2FkSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCRERGMjBDMDhFQjBEREMwMDFFMTI0MSAv
KiBXZWJEb3dubG9hZEludGVybmFsLmggKi87IH07CisJCUI2Q0U1QzI0MTAwQkM1Q0UwMDIxOTkz
NiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjY4MDQ5NzIwRkZCQ0VDMTAwOUY3RjYyIC8qIFdlYkFwcGxpY2F0
aW9uQ2FjaGUubW0gKi87IH07CisJCUI2Q0U1QzI1MTAwQkM1RjUwMDIxOTkzNiAvKiBXZWJBcHBs
aWNhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNjgwNDk3MTBGRkJDRUMxMDA5RjdGNjIgLyogV2ViQXBwbGljYXRpb25DYWNoZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMkU0NjRE
MEZEOEE5NjgwMEE5RDlERSAvKiBXZWJWaWV3RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRTQ2NEIwRkQ4QTk2ODAwQTlEOURFIC8qIFdlYlZp
ZXdEYXRhLmggKi87IH07CiAJCUJDMkU0NjRFMEZEOEE5NjgwMEE5RDlERSAvKiBXZWJWaWV3RGF0
YS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkU0
NjRDMEZEOEE5NjgwMEE5RDlERSAvKiBXZWJWaWV3RGF0YS5tbSAqLzsgfTsKIAkJQkM1NDJDNDIw
RkQ3NzY2RjAwRDhBQjVEIC8qIFdlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU0MkM0MDBGRDc3
NjZGMDBEOEFCNUQgLyogV2ViRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hpbmcuaCAqLzsgfTsK
QEAgLTU2NCw2ICs1NjYsOCBAQAogCQlBN0QzQzVCQjBCNTc3M0M1MDAyQ0E0NTAgLyogV2ViUGFz
dGVib2FyZEhlbHBlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYlBhc3RlYm9hcmRIZWxwZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFC
OUZCQkJBMEY4NTgyQjAwMDZBREM0MyAvKiBXZWJET01PcGVyYXRpb25zSW50ZXJuYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRE9NT3BlcmF0aW9uc0ludGVybmFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCRERGMjBDMDhFQjBEREMwMDFFMTI0MSAv
KiBXZWJEb3dubG9hZEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRvd25sb2FkSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCUI2ODA0OTcxMEZGQkNF
QzEwMDlGN0Y2MiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYkFwcGxpY2F0aW9uQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQjY4MDQ5NzIwRkZCQ0VDMTAwOUY3RjYyIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGUu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBcHBsaWNhdGlv
bkNhY2hlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJFNDY0QjBGRDhBOTY4
MDBBOUQ5REUgLyogV2ViVmlld0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViVmlld0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyRTQ2NEMw
RkQ4QTk2ODAwQTlEOURFIC8qIFdlYlZpZXdEYXRhLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViVmlld0RhdGEubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDNTQyQzQwMEZENzc2NkYwMEQ4QUI1RCAvKiBXZWJEZWxlZ2F0ZUltcGxlbWVudGF0
aW9uQ2FjaGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEZWxlZ2F0
ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTEzMyw2ICsxMTM3LDggQEAKIAkJCQkxNEQ4MjUyRDBBRjk1NTA5MDAwNEYwNTcgLyogV2ViQ2hy
b21lQ2xpZW50LmggKi8sCiAJCQkJMTREODI1MkUwQUY5NTUwOTAwMDRGMDU3IC8qIFdlYkNocm9t
ZUNsaWVudC5tbSAqLywKIAkJCQkwNjVBRDVBMTBCMEMzMkM3MDA1QTJCMUQgLyogV2ViQ29udGV4
dE1lbnVDbGllbnQuaCAqLywKKwkJCQlCNjgwNDk3MTBGRkJDRUMxMDA5RjdGNjIgLyogV2ViQXBw
bGljYXRpb25DYWNoZS5oICovLAorCQkJCUI2ODA0OTcyMEZGQkNFQzEwMDlGN0Y2MiAvKiBXZWJB
cHBsaWNhdGlvbkNhY2hlLm1tICovLAogCQkJCTA2NUFENUEyMEIwQzMyQzcwMDVBMkIxRCAvKiBX
ZWJDb250ZXh0TWVudUNsaWVudC5tbSAqLywKIAkJCQlBNzA5MzZBRDBCNTYwOERDMDBDREI0OEUg
LyogV2ViRHJhZ0NsaWVudC5oICovLAogCQkJCUE3MDkzNkFFMEI1NjA4REMwMENEQjQ4RSAvKiBX
ZWJEcmFnQ2xpZW50Lm1tICovLApAQCAtMTI2Niw2ICsxMjcyLDcgQEAKIAkJCQkxQUFGNUNFQzBF
RERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBQUY1Q0VFMEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkRCRTlGMEYyNTFFM0EwMDM2RjhBNiAvKiBQ
cm94eUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNkNFNUMyNTEwMEJDNUY1MDAyMTk5
MzYgLyogV2ViQXBwbGljYXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwOUEw
ODI0QkYwMTAwOERGMDM4IC8qIFdlYkFyY2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVERTky
RkVGMEJENzAxN0UwMDU5QTVGRCAvKiBXZWJBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5Mzk4MTAyOTA4MjRCRjAxMDA4REYwMzggLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xNjU2LDYgKzE2NjMsNyBAQAogCQkJCTkzOTgxMEREMDgyNEJGMDEw
MDhERjAzOCAvKiBucGFwaS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDQ0ZGRDEzMEIxRjgxRjIw
MDJFRTkyNiAvKiBPbGRXZWJBc3NlcnRpb25zLmMgaW4gU291cmNlcyAqLywKIAkJCQkxQTJEQkVB
MDBGMjUxRTNBMDAzNkY4QTYgLyogUHJveHlJbnN0YW5jZS5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CUI2Q0U1QzI0MTAwQkM1Q0UwMDIxOTkzNiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTM5ODExMUQwODI0QkYwMTAwOERGMDM4IC8qIFdlYkFyY2hpdmUubW0g
aW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBDRjA4MjRCRjAxMDA4REYwMzggLyogV2ViQXV0aGVu
dGljYXRpb25QYW5lbC5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwQkMwODI0QkYwMTAwOERG
MDM4IC8qIFdlYkJhY2tGb3J3YXJkTGlzdC5tbSBpbiBTb3VyY2VzICovLApJbmRleDogV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlz
aW9uIDQ1ODU2KQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNCBAQAorMjAwOS0wNy0xNCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzAwCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJv
bWVDbGllbnQ6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUpOgorICAgICAgICBBZGRzIGVtcHR5IGlt
cGxlbWVudGF0aW9uIG9mIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUuCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmg6CisKIDIwMDktMDctMTMgIEd1c3Rhdm8gTm9yb25o
YSBTaWx2YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgVW5y
ZXZpZXdlZC4gTGF0ZSBORVdTIGZpbGUgZm9yIDEuMS4xMS4KSW5kZXg6IFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDQ1NzU5KQorKysg
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTEsNiArNDUxLDE0IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFi
YXNlUXVvdGEKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykKK3ZvaWQgQ2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3Bh
Y2VOZWVkZWQpCit7CisgICAgLy8gRklYTUU6IEZyZWUgc29tZSBzcGFjZS4KKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorI2VuZGlmCisKIHZvaWQgQ2hyb21lQ2xpZW50OjpydW5PcGVuUGFuZWwo
RnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPiBwcnBGaWxlQ2hvb3NlcikKIHsKICAgICBS
ZWZQdHI8RmlsZUNob29zZXI+IGNob29zZXIgPSBwcnBGaWxlQ2hvb3NlcjsKSW5kZXg6IFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAkocmV2aXNpb24gNDU3NTkp
CisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAsNiArMTAwLDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAjaWYgRU5BQkxF
KERBVEFCQVNFKQogICAgICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdl
YkNvcmU6OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAjZW5kaWYKKyNpZiBFTkFC
TEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hl
ZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKTsKKyNlbmRpZgogICAgICAgICB2
aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpGaWxlQ2hvb3Nlcj4pOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRD
aGFuZ2UoY29uc3QgV2ViQ29yZTo6Tm9kZSopIHsgfQpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1ODU2KQor
KysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAor
MjAwOS0wNy0xNCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzAwCisKKyAgICAgICAgQWRkcyB0aGUgV2ViQXBw
bGljYXRpb25DYWNoZSBjbGFzcyB0aGF0IGlzCisgICAgICAgIHVzZWQgYnkgdGhlIER1bXBSZW5k
ZXJUcmVlIHRlc3QgYXBwbGljYXRpb24gdG8KKyAgICAgICAgY29uZmlndXJlIHRoZSBBcHBsaWNh
dGlvbiBDYWNoZSBtYXhpbXVtIHNpemUuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJB
cHBsaWNhdGlvbkNhY2hlLmg6IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkFw
cGxpY2F0aW9uQ2FjaGUubW06IEFkZGVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZSk6Cisg
ICAgICAgIEFkZHMgZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlYWNoZWRNYXhBcHBDYWNo
ZVNpemUgY2FsbGJhY2suCisgICAgICAgICogV2ViS2l0LmV4cDoKKwogMjAwOS0wNy0xMyAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYW4gQmVybnN0ZWluLCBBZGFtIFJvYmVuLgpJbmRleDogV2ViS2l0L21hYy9XZWJLaXQuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViS2l0LmV4cAkocmV2aXNpb24gNDU3NTkpCisr
KyBXZWJLaXQvbWFjL1dlYktpdC5leHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0IEBACisu
b2JqY19jbGFzc19uYW1lX1dlYkFwcGxpY2F0aW9uQ2FjaGUKIC5vYmpjX2NsYXNzX25hbWVfV2Vi
QXJjaGl2ZQogLm9iamNfY2xhc3NfbmFtZV9XZWJCYWNrRm9yd2FyZExpc3QKIC5vYmpjX2NsYXNz
X25hbWVfV2ViQ2FjaGUKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQXBwbGlj
YXRpb25DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
QXBwbGljYXRpb25DYWNoZS5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK0BpbnRlcmZhY2UgV2ViQXBwbGljYXRpb25DYWNo
ZTogTlNPYmplY3QgeworfQorCisrICh2b2lkKXNldE1heGltdW1TaXplOih1bnNpZ25lZCBsb25n
IGxvbmcpc2l6ZTsKK0BlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQXBw
bGljYXRpb25DYWNoZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkFwcGxpY2F0aW9uQ2FjaGUubW0JKHJldmlzaW9uIDApCisrKyBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lt
cG9ydCAiV2ViQXBwbGljYXRpb25DYWNoZS5oIgorI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQGltcGxlbWVu
dGF0aW9uIFdlYkFwcGxpY2F0aW9uQ2FjaGUKKworKyAodm9pZClzZXRNYXhpbXVtU2l6ZToodW5z
aWduZWQgbG9uZyBsb25nKXNpemUKK3sKKyAgICBjYWNoZVN0b3JhZ2UoKS5lbXB0eSgpOworICAg
IGNhY2hlU3RvcmFnZSgpLnZhY3V1bURhdGFiYXNlRmlsZSgpOworICAgIGNhY2hlU3RvcmFnZSgp
LnNldE1heGltdW1TaXplKHNpemUpOworfQorCitAZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDQ1NzU5KQorKysgV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA3LDYgKzEwNyw5IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgdmlydHVh
bCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYgZGF0YWJhc2VOYW1lKTsKICNlbmRpZgorI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCisgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUo
aW50NjRfdCBzcGFjZU5lZWRlZCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVW
aXNpdGVkTGlua3MoKTsKIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKSW5kZXg6IFdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiA0
NTc1OSkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC01MzYsNiArNTM2LDEzIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpl
eGNlZWRlZERhdGFiYXNlUXUKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQordm9pZCBXZWJDaHJv
bWVDbGllbnQ6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkKK3sK
KyAgICAvLyBGSVhNRTogRnJlZSBzb21lIHNwYWNlLgorfQorI2VuZGlmCiAgICAgCiB2b2lkIFdl
YkNocm9tZUNsaWVudDo6cG9wdWxhdGVWaXNpdGVkTGlua3MoKQogewpJbmRleDogV2ViS2l0L3F0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA0
NTg1NikKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NCBAQAorMjAwOS0wNy0xNCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzAwCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGll
bnRRdDo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZSk6CisgICAgICAgIEFkZHMgZW1wdHkgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUgY2FsbGJhY2suCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoKKwogMjAwOS0wNy0xMyAgU2ltb24g
SGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQXJpeWEgSGlkYXlhdC4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFF0LmNwcAkocmV2aXNpb24gNDU3NTkpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNiArNDAwLDE0IEBA
IHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW8KIH0KICNlbmRpZgogCisj
aWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKK3ZvaWQgQ2hyb21lQ2xpZW50UXQ6
OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkKK3sKKyAgICAvLyBG
SVhNRTogRnJlZSBzb21lIHNwYWNlLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYK
Kwogdm9pZCBDaHJvbWVDbGllbnRRdDo6cnVuT3BlblBhbmVsKEZyYW1lKiBmcmFtZSwgUGFzc1Jl
ZlB0cjxGaWxlQ2hvb3Nlcj4gcHJwRmlsZUNob29zZXIpCiB7CiAgICAgUmVmUHRyPEZpbGVDaG9v
c2VyPiBmaWxlQ2hvb3NlciA9IHBycEZpbGVDaG9vc2VyOwpJbmRleDogV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHJldmlzaW9uIDQ1NzU5KQorKysgV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2
ICsxMTYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAg
ICAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0
cmluZyYpOwogI2VuZGlmCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAg
ICAgICAgdmlydHVhbCBpbnQ2NF90IG1heEFwcENhY2hlU2l6ZSgpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKTsKKyNlbmRp
ZgogICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxG
aWxlQ2hvb3Nlcj4pOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2Uo
Y29uc3QgTm9kZSopIHsgfQpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1ODU2KQorKysgV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wNy0xNCAgQW5k
cmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyNzAwCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXpl
KToKKyAgICAgICAgQWRkcyBlbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVhY2hlZE1heEFw
cENhY2hlU2l6ZSBjYWxsYmFjay4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaDoKKwogMjAwOS0wNy0xMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFdlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDQ1NzU5KQor
KysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NDMsNiArNTQzLDE1IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRl
ZERhdGFiYXNlUXUKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgordm9pZCBXZWJDaHJv
bWVDbGllbnQ6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkKK3sK
KyAgICAvLyBGSVhNRTogRnJlZSBzb21lIHNwYWNlLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisjZW5kaWYKKwogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBvcHVsYXRlVmlzaXRlZExpbmtzKCkK
IHsKICAgICBXZWJIaXN0b3J5KiBoaXN0b3J5ID0gV2ViSGlzdG9yeTo6c2hhcmVkSGlzdG9yeSgp
OwpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShy
ZXZpc2lvbiA0NTc1OSkKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsMTAgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKKyAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90
IHNwYWNlTmVlZGVkKTsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlVmlzaXRl
ZExpbmtzKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0b21TY3JvbGxiYXIoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6
U2Nyb2xsYmFyQ29udHJvbFNpemUsIApJbmRleDogV2ViS2l0L3d4L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTg1NikKKysrIFdlYktpdC93
eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wNy0xNCAg
QW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNzAwCisgCisgICAgICAgICogV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGll
bnRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRXeDo6cmVhY2hlZE1heEFw
cENhY2hlU2l6ZSk6CisgICAgICAgIEFkZHMgZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIHJl
YWNoZWRNYXhBcHBDYWNoZVNpemUgY2FsbGJhY2suCisgICAgICAgICogV2ViS2l0U3VwcG9ydC9D
aHJvbWVDbGllbnRXeC5oOgorCiAyMDA5LTA3LTEyICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1A
Z21haWwuY29tPgogCiAgICAgICAgIFNwZWN1bGF0aXZlIGJ1aWxkIGZpeCBhZnRlciBodHRwOi8v
dHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC80NTc4Ni4KSW5kZXg6IFdlYktpdC93eC9XZWJLaXRT
dXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0
U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAJKHJldmlzaW9uIDQ1NzU5KQorKysgV2ViS2l0L3d4
L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODMs
NiArMzgzLDEzIEBAIHZvaWQgQ2hyb21lQ2xpZW50V3g6OmV4Y2VlZGVkRGF0YWJhc2VRdW8KIH0K
ICNlbmRpZgogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKK3ZvaWQgQ2hy
b21lQ2xpZW50V3g6OnJlYWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKIHZvaWQgQ2hyb21lQ2xpZW50
V3g6OnNjcm9sbChjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3Qm
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9y
dC9DaHJvbWVDbGllbnRXeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0
L0Nocm9tZUNsaWVudFd4LmgJKHJldmlzaW9uIDQ1NzU5KQorKysgV2ViS2l0L3d4L1dlYktpdFN1
cHBvcnQvQ2hyb21lQ2xpZW50V3guaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwxMSBA
QCBwdWJsaWM6CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIHZpcnR1YWwgdm9pZCBleGNlZWRl
ZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKICNlbmRpZgorCisjaWYgRU5B
QkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1h
eEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKTsKKyNlbmRpZgorCiAgICAgdmlydHVh
bCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+KTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopIHsgfQpJbmRl
eDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gNDU4NTYpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAwOS0wNy0xNCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRy
ZWlwQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzAwCisg
ICAgICAgIAorICAgICAgICBBZGRzIGEgbmV3IG1ldGhvZCBvbiB0aGUgTGF5b3V0VGVzdENvbnRy
b2xsZXIgdGhhdAorICAgICAgICBhbGxvd3MgYSBKUyB1bml0IHRlc3QgdG8gY29uZmlndXJlIHRo
ZSBtYXhpbXVtIHNpemUKKyAgICAgICAgb2YgdGhlIEFwcGxpY2F0aW9uIENhY2hlLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZUNhbGxiYWNrKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRl
c3RDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
cHBDYWNoZU1heGltdW1TaXplKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0
VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91
dFRlc3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBcHBDYWNoZU1heGltdW1TaXplKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9MYXlv
dXRUZXN0Q29udHJvbGxlcld4LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBcHBDYWNoZU1heGltdW1TaXplKToKKwogMjAwOS0wNy0xNCAgTGFzemxvIEdvbWJvcyAgPGxh
c3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1
c21hbm4uCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA0NTc1OSkKKysrIFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3
LDYgKzQ4NywyMiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRBY2NlcHRzRWRpdGluZ0NhbGxiCiAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0aWMgSlNW
YWx1ZVJlZiBzZXRBcHBDYWNoZU1heGltdW1TaXplQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIC8vIEhhcyBtYWMgaW1wbGVtZW50YXRpb24KKyAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworCisgICAgZG91YmxlIHNpemUgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRz
WzBdLCBOVUxMKTsKKyAgICBpZiAoIWlzbmFuKHNpemUpKQorICAgICAgICBjb250cm9sbGVyLT5z
ZXRBcHBDYWNoZU1heGltdW1TaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6
ZSkpOworICAgICAgICAKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWRD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgLy8gSGFzIG1hYyAm
IHdpbmRvd3MgaW1wbGVtZW50YXRpb24KQEAgLTkwNiw2ICs5MjIsNyBAQCBKU1N0YXRpY0Z1bmN0
aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6CiAgICAgICAgIHsgInJlcGFpbnRTd2VlcEhvcml6
b250YWxseSIsIHJlcGFpbnRTd2VlcEhvcml6b250YWxseUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAg
ICAgIHsgInNldEFjY2VwdHNFZGl0aW5nIiwgc2V0QWNjZXB0c0VkaXRpbmdDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCIsIHNldEF1dGhv
ckFuZFVzZXJTdHlsZXNFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0QXBw
Q2FjaGVNYXhpbXVtU2l6ZSIsIHNldEFwcENhY2hlTWF4aW11bVNpemVDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LCAKICAgICAgICAgeyAic2V0Q2FsbENsb3NlT25XZWJWaWV3cyIsIHNldENhbGxDbG9zZU9uV2Vi
Vmlld3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRDYW5PcGVuV2luZG93cyIsIHNl
dENhbk9wZW5XaW5kb3dzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0Q2FjaGVNb2Rl
bCIsIHNldENhY2hlTW9kZWxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApJbmRleDogV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiA0NTc1
OSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgcXVldWVO
b25Mb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCk7CiAgICAgdm9pZCBxdWV1ZVJlbG9h
ZCgpOwogICAgIHZvaWQgc2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRzRWRpdGluZyk7Cisg
ICAgdm9pZCBzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7
CiAgICAgdm9pZCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sKTsKICAgICB2b2lk
IHNldENhY2hlTW9kZWwoaW50KTsKICAgICB2b2lkIHNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJv
b2wgc2V0RGVsZWdhdGUsIGJvb2wgcGVybWlzc2l2ZSk7CkluZGV4OiBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5j
cHAJKHJldmlzaW9uIDQ1NzU5KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xh
eW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDYgKzMyNiwx
MSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1CiAgICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNo
ZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKK30KKwogYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25B
dFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRp
bWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKIHsgICAgCiAgICAgZ2NoYXIqIG5hbWUgPSBKU1N0
cmluZ0NvcHlVVEY4Q1N0cmluZyhhbmltYXRpb25OYW1lKTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMu
bW0JKHJldmlzaW9uIDQ1NzU5KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAjaW1wb3J0IDxXZWJL
aXQvRE9NRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdlYktpdC9ET01FbGVtZW50Lmg+CisjaW1wb3J0
IDxXZWJLaXQvV2ViQXBwbGljYXRpb25DYWNoZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkJhY2tG
b3J3YXJkTGlzdC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkRhdGFiYXNlTWFuYWdlclByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJEYXRhU291cmNlLmg+CkBAIC0xOTAsNiArMTkxLDExIEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGkKICAgICBbKEVkaXRpbmdE
ZWxlZ2F0ZSAqKVtbbWFpbkZyYW1lIHdlYlZpZXddIGVkaXRpbmdEZWxlZ2F0ZV0gc2V0QWNjZXB0
c0VkaXRpbmc6bmV3QWNjZXB0c0VkaXRpbmddOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQorewor
ICAgIFtXZWJBcHBsaWNhdGlvbkNhY2hlIHNldE1heGltdW1TaXplOnNpemVdOworfQorCiB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29s
IGZsYWcpCiB7CiAgICAgW1tbbWFpbkZyYW1lIHdlYlZpZXddIHByZWZlcmVuY2VzXSBzZXRBdXRo
b3JBbmRVc2VyU3R5bGVzRW5hYmxlZDpmbGFnXTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAko
cmV2aXNpb24gNDU3NTkpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0
VGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTksNiArNjk5LDExIEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXUKICAgICBwcmludGYoIkVS
Uk9SOiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdW90YSgpIG5vdCBpbXBsZW1l
bnRlZFxuIik7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4
aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCit7CisgICAgcHJpbnRmKCJFUlJPUjog
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUoKSBub3QgaW1wbGVt
ZW50ZWRcbiIpOworfQorCiBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlv
bkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUg
dGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQogewogICAgIENPTVB0cjxJRE9NRG9jdW1lbnQ+
IGRvY3VtZW50OwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVz
dENvbnRyb2xsZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHJldmlzaW9uIDQ1NzU5KQorKysgV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwNiw2ICsyMDYsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0RGF0YWJhc2VRdQogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKIHVuc2lnbmVkIExheW91
dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogewogICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1ODU2KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDct
MTQgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMAorCisgICAgICAgIEFkZHMg
YSB1bml0IHRlc3QgdGhhdCBlbnN1cmVzIHRoYXQgdGhlIG1lY2hhbmlzbSB0aGF0CisgICAgICAg
IGVuZm9yY2VzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIGlzCisg
ICAgICAgIHdvcmtpbmcgY29ycmVjdGx5LgorCisgICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNo
ZS9tYXgtc2l6ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvYXBw
Y2FjaGUvbWF4LXNpemUuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNo
ZS9yZXNvdXJjZXMvbWF4c2l6ZS5tYW5pZmVzdDogQWRkZWQuCisKIDIwMDktMDctMTMgIEJyYWR5
IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBMZW9wYXJkIHJlZ3Jl
c3Npb24gSSBqdXN0IGludHJvZHVjZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Fw
cGNhY2hlL21heC1zaXplLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2FwcGNhY2hlL21heC1zaXplLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvbWF4LXNpemUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKK0NhY2hlIGEgbWFuaWZlc3QgdGhhdCBjb250YWlu
cyBhIHJlc291cmNlIHRoYXQgaXMgdG9vIGxhcmdlIHRvIGZpdC4gVGhlIGxheW91dCB0ZXN0IGNv
bnRyb2xsZXIgc2V0cyBhIG1heGltdW0gc2l6ZSBvZiAxMEtCIGZvciB0aGUgYXBwbGljYXRpb24g
Y2FjaGUgZGF0YWJhc2UgZmlsZS4KKworU1VDQ0VTUworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2FwcGNhY2hlL21heC1zaXplLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9hcHBjYWNoZS9tYXgtc2l6ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9tYXgtc2l6ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI4IEBACis8aHRtbCBtYW5pZmVzdD0icmVzb3VyY2VzL21heHNpemUubWFuaWZlc3Qi
PgorPGJvZHk+DQorPHNjcmlwdD4NCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRBcHBDYWNoZU1heGltdW1TaXpl
KDEwICogMTAyNCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQorICAgIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOworICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5zZXRBcHBDYWNoZU1heGltdW1TaXplKDEwMCAqIDEwMjQgKiAxMDI0KTsK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGFwcGxpY2F0aW9uQ2FjaGUub25lcnJvciA9IGZ1bmN0aW9uKCkgeyBs
b2coIlNVQ0NFU1MiKTsgfQorICAgIGFwcGxpY2F0aW9uQ2FjaGUub25jYWNoZWQgPSBmdW5jdGlv
bigpIHsgbG9nKCJGQUlMOiByZWNlaXZlZCB1bmV4cGVjdGVkIGNhY2hlZCBldmVudCIpOyB9Cisg
ICAgYXBwbGljYXRpb25DYWNoZS5vbm5vdXBkYXRlID0gZnVuY3Rpb24oKSB7IGxvZygiRkFJTDog
cmVjZWl2ZWQgdW5leHBlY3RlZCBvbm5vdXBkYXRlIGV2ZW50Iik7IH0KKyAgICBhcHBsaWNhdGlv
bkNhY2hlLm9udXBkYXRlcmVhZHkgPSBmdW5jdGlvbigpIHsgbG9nKCJGQUlMOiByZWNlaXZlZCB1
bmV4cGVjdGVkIG9udXBkYXRlcmVhZHkgZXZlbnQiKTsgfQorPC9zY3JpcHQ+CisNCis8cD5DYWNo
ZSBhIG1hbmlmZXN0IHRoYXQgY29udGFpbnMgYSByZXNvdXJjZSB0aGF0IGlzIHRvbyBsYXJnZSB0
byBmaXQuIFRoZSBsYXlvdXQgdGVzdCBjb250cm9sbGVyIHNldHMgYSBtYXhpbXVtIHNpemUgb2Yg
MTBLQiBmb3IgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIGRhdGFiYXNlIGZpbGUuPC9wPg0KKzxkaXYg
aWQ9cmVzdWx0PjwvZGl2Pg0KKzwvYm9keT4NCis8L2h0bWw+DQpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9hcHBjYWNoZS9yZXNvdXJjZXMvbWF4c2l6ZS5tYW5pZmVzdAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9tYXhzaXplLm1h
bmlmZXN0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9y
ZXNvdXJjZXMvbWF4c2l6ZS5tYW5pZmVzdAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitD
QUNIRSBNQU5JRkVTVAorI3YxCithYmUucG5nCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32891</attachid>
            <date>2009-07-16 14:10:33 -0700</date>
            <delta_ts>2009-07-17 14:41:02 -0700</delta_ts>
            <desc>New proposal to limit the maximum size of the application cache (take 9)</desc>
            <filename>22700.patch</filename>
            <type>text/plain</type>
            <size>67113</size>
            <attacher name="Andrei Popescu">andreip</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTg1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMDktMDctMTQgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFwcGxpY2F0aW9uQ2FjaGUgc2hvdWxkIGhhdmUgc2l6ZSBsaW1pdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MDAKKworICAgICAgICBodHRwczov
L2xpc3RzLndlYmtpdC5vcmcvcGlwZXJtYWlsL3dlYmtpdC1kZXYvMjAwOS1NYXkvMDA3NTYwLmh0
bWwKKworICAgICAgICBUaGlzIGNoYW5nZSBpbXBsZW1lbnRzIGEgbWVjaGFuaXNtIGZvciBsaW1p
dGluZyB0aGUgbWF4aW11bSBzaXplIG9mCisgICAgICAgIHRoZSBhcHBsaWNhdGlvbiBjYWNoZSBm
aWxlLiBXaGVuIHRoaXMgc2l6ZSBpcyByZWFjaGVkLCBhIENocm9tZUNsaWVudAorICAgICAgICBj
YWxsYmFjayBpcyBpbnZva2VkIGFzeW5jaHJvbm91c2x5IGFuZCB0aGUgc2F2aW5nIG9mIHRoZSBs
YXN0IChmYWlsZWQpCisgICAgICAgIGNhY2hlIGlzIHJldHJpZWQgYXV0b21hdGljYWxseS4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlIGFsc28gZXh0ZW5kcyB0aGUgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UgQVBJIGJ5IGFsbG93aW5nCisgICAgICAgIGEgY2xpZW50IHRvIHF1ZXJ5IG9y
IG1vZGlmeSB0aGUgYXBwbGljYXRpb24gY2FjaGUgd2l0aG91dCBoYXZpbmcgdG8KKyAgICAgICAg
bG9hZCBhbnkgcmVzb3VyY2VzIGludG8gbWVtb3J5LgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVz
dHMvYXBwY2FjaGUvbWF4LXNpemUuaHRtbAorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoK
KyAgICAgICAgRXhwb3J0cyB0aGUgc3ltYm9scyByZXF1aXJlZCBieSB0aGUgRHVtcFJlbmRlclRy
ZWUgdGVzdCBhcHBsaWNhdGlvbi4KKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6Cisg
ICAgICAgIEFkZHMgZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldyBDaHJvbWVDbGllbnQg
bWV0aG9kcy4KKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHA6
CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGUuaDoKKyAgICAgICAg
QWRkcyB0aGUgYWJpbGl0eSB0byBjYWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHNpemUgb2YgYW4g
QXBwbGljYXRpb25DYWNoZSBvYmplY3QuCisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxp
Y2F0aW9uQ2FjaGVHcm91cC5jcHA6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVHcm91cC5oOgorICAgICAgICBJbnZva2VzIHRoZSBDaHJvbWVDbGllbnQgY2FsbGJh
Y2sgd2hlbiB0aGUgc3RvcmFnZSBsYXllciBydW5zIG91dCBvZiBzcGFjZS4KKwkJQWZ0ZXIgdGhl
IGNhbGxiYWNrIGlzIGludm9rZWQsIHdlIHJlLWF0dGVtcHQgdG8gc3RvcmUgdGhlIG5ld2VzdCBj
YWNoZSwKKwkJaW4gY2FzZSB0aGUgQ2hyb21lQ2xpZW50IGhhcyBmcmVlZCBzb21lIHNwYWNlLgor
ICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwOgor
ICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaDoKKyAg
ICAgICAgQWRkcyB0aGUgYWJpbGl0eSB0byBjYWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHNpemUg
b2YgYW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlIG9iamVjdC4KKyAgICAgICAgKiBsb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwOgorICAgICAgICAqIGxvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oOgorICAgICAgICBFbmZvcmNlcyBhIG1h
eGltdW0gc2l6ZSBmb3IgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIGZpbGUuCisgICAgICAgICogcGFn
ZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgQWRkcyBhIG5ldyBjYWxsYmFjaywgaW52b2tlZCB3
aGVuIHRoZSBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSByZXBvcnRzIHRoYXQgaXQgaGFzCisgICAg
ICAgIHJlYWNoZWQgdGhlIG1heGltdW0gc2l6ZSBmb3IgaXRzIGRhdGFiYXNlIGZpbGUuCisgICAg
ICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcWwvU1FMaXRlRGF0YWJhc2UuaDoKKyAgICAgICAgQWRkcyBhIG5ldyBtZXRob2QgdGhhdCBh
bGxvd3MgcXVlcnlpbmcgZm9yIHRoZSBhbW91bnQgb2YgdW51c2VkIHNwYWNlIGluc2lkZSB0aGUK
KyAgICAgICAgYXBwbGljYXRpb24gY2FjaGUgZGF0YWJhc2UgZmlsZS4KKwogMjAwOS0wNy0xMyAg
UGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiA0NTc1OSkKKysr
IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtNDQyLDYgKzQ0Miw4
IEBAIF9fWk43V2ViQ29yZTIyZXh0ZXJuYWxSZXByZXNlbnRhdGlvbkVQTlMKIF9fWk43V2ViQ29y
ZTIzQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UxNnN0b3JlQ29weU9mQ2FjaGVFUktOU182U3RyaW5n
RVBOU18xNkFwcGxpY2F0aW9uQ2FjaGVFCiBfX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlMTdzZXRDYWNoZURpcmVjdG9yeUVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUyM0Fw
cGxpY2F0aW9uQ2FjaGVTdG9yYWdlNWVtcHR5RXYKK19fWk43V2ViQ29yZTIzQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UxNHNldE1heGltdW1TaXplRXgKK19fWk43V2ViQ29yZTIzQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UxOHZhY3V1bURhdGFiYXNlRmlsZUV2CiBfX1pON1dlYkNvcmUyM1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kQzFFUE5TXzhEb2N1bWVudEVOM1dURjEwUGFzc1JlZlB0cklOU18xNkRv
Y3VtZW50RnJhZ21lbnRFRUViYmJiYk5TXzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29yZTIzY3Jl
YXRlRnJhZ21lbnRGcm9tTm9kZXNFUE5TXzhEb2N1bWVudEVSS04zV1RGNlZlY3RvcklQTlNfNE5v
ZGVFTG0wRUVFCiBfX1pON1dlYkNvcmUyNEJpbmFyeVByb3BlcnR5TGlzdFdyaXRlcjE3d3JpdGVQ
cm9wZXJ0eUxpc3RFdgpJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDQ1NzU5KQor
KysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw2
ICsxMzMsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVv
dGEoRnJhbWUqLCBjb25zdCBTdHJpbmcmKSB7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKE9GRkxJ
TkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFwcENhY2hl
U2l6ZShpbnQ2NF90KSB7IH0KKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5l
bChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+KSB7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopIHsgfQpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDQ1NzU5KQorKysg
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogQXBwbGljYXRpb25DYWNo
ZTo6QXBwbGljYXRpb25DYWNoZSgpCiAgICAgOiBtX2dyb3VwKDApCiAgICAgLCBtX21hbmlmZXN0
KDApCisgICAgLCBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UoMCkKICAgICAsIG1fc3RvcmFnZUlE
KDApCiB7CiB9CkBAIC04Niw3ICs4Nyw5IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZTo6YWRkUmVz
b3VyY2UoUGFzc1IKICAgICAgICAgLy8gQWRkIHRoZSByZXNvdXJjZSB0byB0aGUgc3RvcmFnZS4K
ICAgICAgICAgY2FjaGVTdG9yYWdlKCkuc3RvcmUocmVzb3VyY2UuZ2V0KCksIHRoaXMpOwogICAg
IH0KLSAgICAKKworICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSByZXNvdXJjZS0+ZXN0
aW1hdGVkU2l6ZUluU3RvcmFnZSgpOworCiAgICAgbV9yZXNvdXJjZXMuc2V0KHVybCwgcmVzb3Vy
Y2UpOwogfQogCkBAIC0xMDAsNyArMTAzLDkgQEAgdW5zaWduZWQgQXBwbGljYXRpb25DYWNoZTo6
cmVtb3ZlUmVzb3VyYwogICAgIHVuc2lnbmVkIHR5cGUgPSBpdC0+c2Vjb25kLT50eXBlKCk7CiAK
ICAgICBtX3Jlc291cmNlcy5yZW1vdmUoaXQpOwotICAgIAorCisgICAgbV9lc3RpbWF0ZWRTaXpl
SW5TdG9yYWdlIC09IGl0LT5zZWNvbmQtPmVzdGltYXRlZFNpemVJblN0b3JhZ2UoKTsKKwogICAg
IHJldHVybiB0eXBlOwogfSAgICAKICAgICAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlLmgJKHJldmlzaW9uIDQ1NzU5KQorKysgV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw4
IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgYm9vbCByZXF1ZXN0SXNIVFRQT3JIVFRQU0dl
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAorICAgIGludDY0X3QgZXN0aW1hdGVkU2l6ZUlu
U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZTsgfQorCiBw
cml2YXRlOgogICAgIEFwcGxpY2F0aW9uQ2FjaGUoKTsKICAgICAKQEAgLTk3LDYgKzk5LDExIEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPEtVUkw+IG1fb25saW5lV2hpdGVsaXN0OwogICAgIEZhbGxi
YWNrVVJMVmVjdG9yIG1fZmFsbGJhY2tVUkxzOwogCisgICAgLy8gVGhlIHRvdGFsIHNpemUgb2Yg
dGhlIHJlc291cmNlcyBiZWxvbmdpbmcgdG8gdGhpcyBBcHBsaWNhdGlvbiBDYWNoZSBpbnN0YW5j
ZS4KKyAgICAvLyBUaGlzIGlzIGFuIGVzdGltYXRpb24gb2YgdGhlIHNpemUgdGhpcyBBcHBsaWNh
dGlvbiBDYWNoZSBvY2N1cGllcyBpbiB0aGUKKyAgICAvLyBkYXRhYmFzZSBmaWxlLgorICAgIGlu
dDY0X3QgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlOworCiAgICAgdW5zaWduZWQgbV9zdG9yYWdl
SUQ7CiB9OwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hl
R3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVHcm91cC5jcHAJKHJldmlzaW9uIDQ1NzU5KQorKysgV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5o
IgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgi
CiAjaW5jbHVkZSAiRE9NQXBwbGljYXRpb25DYWNoZS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgpAQCAtNTMsNiArNTQsNyBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OkFwcGxpY2F0aW9uQ2Fj
aGVHCiAgICAgLCBtX2lzT2Jzb2xldGUoZmFsc2UpCiAgICAgLCBtX2NvbXBsZXRpb25UeXBlKE5v
bmUpCiAgICAgLCBtX2lzQ29weShpc0NvcHkpCisgICAgLCBtX2NhbGxlZFJlYWNoZWRNYXhBcHBD
YWNoZVNpemUoZmFsc2UpCiB7CiB9CiAKQEAgLTY1Miw2ICs2NTQsMTUgQEAgdm9pZCBBcHBsaWNh
dGlvbkNhY2hlR3JvdXA6OmRpZEZpbmlzaExvYQogICAgIHN0YXJ0TG9hZGluZ0VudHJ5KCk7CiB9
CiAKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRSZWFjaE1heEFwcENhY2hlU2l6ZSgp
Cit7CisgICAgQVNTRVJUKG1fZnJhbWUpOworICAgIEFTU0VSVChtX2NhY2hlQmVpbmdVcGRhdGVk
KTsKKyAgICBtX2ZyYW1lLT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+cmVhY2hlZE1heEFw
cENhY2hlU2l6ZShjYWNoZVN0b3JhZ2UoKS5zcGFjZU5lZWRlZChtX2NhY2hlQmVpbmdVcGRhdGVk
LT5lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkpKTsKKyAgICBtX2NhbGxlZFJlYWNoZWRNYXhBcHBD
YWNoZVNpemUgPSB0cnVlOworICAgIGNoZWNrSWZMb2FkSXNDb21wbGV0ZSgpOworfQorCiB2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6Y2FjaGVVcGRhdGVGYWlsZWQoKQogewogICAgIHN0b3BM
b2FkaW5nKCk7CkBAIC03MzAsNyArNzQxLDE1IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpjaGVja0lmTG9hZEkKICAgICAgICAgLy8gRklYTUU6IEZldGNoIHRoZSByZXNvdXJjZSBmcm9t
IG1hbmlmZXN0IFVSTCBhZ2FpbiwgYW5kIGNoZWNrIHdoZXRoZXIgaXQgaXMgaWRlbnRpY2FsIHRv
IHRoZSBvbmUgdXNlZCBmb3IgdXBkYXRlIChpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbiB3YXMgdXBn
cmFkZWQgc2VydmVyLXNpZGUgaW4gdGhlIG1lYW53aGlsZSkuICg8cmRhcjovL3Byb2JsZW0vNjQ2
NzYyNT4pCiAKICAgICAgICAgQVNTRVJUKG1fY2FjaGVCZWluZ1VwZGF0ZWQpOwotICAgICAgICBt
X2NhY2hlQmVpbmdVcGRhdGVkLT5zZXRNYW5pZmVzdFJlc291cmNlKG1fbWFuaWZlc3RSZXNvdXJj
ZS5yZWxlYXNlKCkpOworICAgICAgICBpZiAobV9tYW5pZmVzdFJlc291cmNlKQorICAgICAgICAg
ICAgbV9jYWNoZUJlaW5nVXBkYXRlZC0+c2V0TWFuaWZlc3RSZXNvdXJjZShtX21hbmlmZXN0UmVz
b3VyY2UucmVsZWFzZSgpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBjYW4g
Z2V0IGhlcmUgYXMgYSByZXN1bHQgb2YgcmV0cnlpbmcgdGhlIENvbXBsZXRlIHN0ZXAsIGZvbGxv
d2luZworICAgICAgICAgICAgLy8gYSBmYWlsdXJlIG9mIHRoZSBjYWNoZSBzdG9yYWdlIHRvIHNh
dmUgdGhlIG5ld2VzdCBjYWNoZSBkdWUgdG8gaGl0dGluZworICAgICAgICAgICAgLy8gdGhlIG1h
eGltdW0gc2l6ZS4gSW4gc3VjaCBhIGNhc2UsIG1fbWFuaWZlc3RSZXNvdXJjZSBtYXkgYmUgMCwg
YXMKKyAgICAgICAgICAgIC8vIHRoZSBtYW5pZmVzdCB3YXMgYWxyZWFkeSBzZXQgb24gdGhlIG5l
d2VzdCBjYWNoZSBvYmplY3QuCisgICAgICAgICAgICBBU1NFUlQoY2FjaGVTdG9yYWdlKCkuaXNN
YXhpbXVtU2l6ZVJlYWNoZWQoKSAmJiBtX2NhbGxlZFJlYWNoZWRNYXhBcHBDYWNoZVNpemUpOwor
ICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IG9sZE5ld2VzdENh
Y2hlID0gKG1fbmV3ZXN0Q2FjaGUgPT0gbV9jYWNoZUJlaW5nVXBkYXRlZCkgPyAwIDogbV9uZXdl
c3RDYWNoZTsKIApAQCAtNzQyLDI4ICs3NjEsNDQgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OmNoZWNrSWZMb2FkSQogICAgICAgICAgICAgLy8gRmlyZSB0aGUgc3VjY2VzcyBldmVudHMu
CiAgICAgICAgICAgICBwb3N0TGlzdGVuZXJUYXNrKGlzVXBncmFkZUF0dGVtcHQgPyAmRE9NQXBw
bGljYXRpb25DYWNoZTo6Y2FsbFVwZGF0ZVJlYWR5TGlzdGVuZXIgOiAmRE9NQXBwbGljYXRpb25D
YWNoZTo6Y2FsbENhY2hlZExpc3RlbmVyLCBtX2Fzc29jaWF0ZWREb2N1bWVudExvYWRlcnMpOwog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUnVuIHRoZSAiY2FjaGUgZmFpbHVyZSBz
dGVwcyIKLSAgICAgICAgICAgIC8vIEZpcmUgdGhlIGVycm9yIGV2ZW50cyB0byBhbGwgcGVuZGlu
ZyBtYXN0ZXIgZW50cmllcywgYXMgd2VsbCBhbnkgb3RoZXIgY2FjaGUgaG9zdHMKLSAgICAgICAg
ICAgIC8vIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBpbiB0aGlzIGdyb3VwLgot
ICAgICAgICAgICAgcG9zdExpc3RlbmVyVGFzaygmRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbEVy
cm9yTGlzdGVuZXIsIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycyk7Ci0gICAgICAgICAgICAv
LyBEaXNhc3NvY2lhdGUgdGhlIHBlbmRpbmcgbWFzdGVyIGVudHJpZXMgZnJvbSB0aGUgZmFpbGVk
IG5ldyBjYWNoZS4gTm90ZSB0aGF0Ci0gICAgICAgICAgICAvLyBhbGwgb3RoZXIgbG9hZGVycyBp
biB0aGUgbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzIGFyZSBzdGlsbCBhc3NvY2lhdGVkIHdp
dGgKLSAgICAgICAgICAgIC8vIHNvbWUgb3RoZXIgY2FjaGUgaW4gdGhpcyBncm91cC4gVGhleSBh
cmUgbm90IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmFpbGVkIG5ldyBjYWNoZS4KLQotICAgICAgICAg
ICAgLy8gTmVlZCB0byBjb3B5IGxvYWRlcnMsIGJlY2F1c2UgdGhlIGNhY2hlIGdyb3VwIG1heSBi
ZSBkZXN0cm95ZWQgYXQgdGhlIGVuZCBvZiBpdGVyYXRpb24uCi0gICAgICAgICAgICBWZWN0b3I8
RG9jdW1lbnRMb2FkZXIqPiBsb2FkZXJzOwotICAgICAgICAgICAgY29weVRvVmVjdG9yKG1fcGVu
ZGluZ01hc3RlclJlc291cmNlTG9hZGVycywgbG9hZGVycyk7Ci0gICAgICAgICAgICBzaXplX3Qg
Y291bnQgPSBsb2FkZXJzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
ICE9IGNvdW50OyArK2kpCi0gICAgICAgICAgICAgICAgZGlzYXNzb2NpYXRlRG9jdW1lbnRMb2Fk
ZXIobG9hZGVyc1tpXSk7IC8vIFRoaXMgY2FuIGRlbGV0ZSB0aGlzIGdyb3VwLgotCi0gICAgICAg
ICAgICAvLyBSZWluc3RhdGUgdGhlIG9sZE5ld2VzdENhY2hlLCBpZiB0aGVyZSB3YXMgb25lLgot
ICAgICAgICAgICAgaWYgKG9sZE5ld2VzdENhY2hlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhp
cyB3aWxsIGRpc2NhcmQgdGhlIGZhaWxlZCBuZXcgY2FjaGUuCi0gICAgICAgICAgICAgICAgc2V0
TmV3ZXN0Q2FjaGUob2xkTmV3ZXN0Q2FjaGUucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBoYXZlIGJlZW4gZGVsZXRlZCBieSB0aGUg
bGFzdCBjYWxsIHRvIGRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKCkuCisgICAgICAgICAgICBp
ZiAoY2FjaGVTdG9yYWdlKCkuaXNNYXhpbXVtU2l6ZVJlYWNoZWQoKSAmJiAhbV9jYWxsZWRSZWFj
aGVkTWF4QXBwQ2FjaGVTaXplKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgcmFuIG91dCBvZiBz
cGFjZS4gQWxsIHRoZSBjaGFuZ2VzIGluIHRoZSBjYWNoZSBzdG9yYWdlIGhhdmUKKyAgICAgICAg
ICAgICAgICAvLyBiZWVuIHJvbGxlZCBiYWNrLiBXZSByb2xsIGJhY2sgdG8gdGhlIHByZXZpb3Vz
IHN0YXRlIGluIGhlcmUsCisgICAgICAgICAgICAgICAgLy8gYXMgd2VsbCwgY2FsbCB0aGUgY2hy
b21lIGNsaWVudCBhc3luY2hyb25vdXNseSBhbmQgcmV0cnkgdG8KKyAgICAgICAgICAgICAgICAv
LyBzYXZlIHRoZSBuZXcgY2FjaGUuCisKKyAgICAgICAgICAgICAgICAvLyBTYXZlIGEgcmVmZXJl
bmNlIHRvIHRoZSBuZXcgY2FjaGUuCisgICAgICAgICAgICAgICAgbV9jYWNoZUJlaW5nVXBkYXRl
ZCA9IG1fbmV3ZXN0Q2FjaGUucmVsZWFzZSgpOworICAgICAgICAgICAgICAgIGlmIChvbGROZXdl
c3RDYWNoZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBSZWluc3RhdGUgdGhlIG9sZE5ld2Vz
dENhY2hlLgorICAgICAgICAgICAgICAgICAgICBzZXROZXdlc3RDYWNoZShvbGROZXdlc3RDYWNo
ZS5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzY2hlZHVs
ZVJlYWNoZWRNYXhBcHBDYWNoZVNpemVDYWxsYmFjaygpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gUnVuIHRoZSAiY2Fj
aGUgZmFpbHVyZSBzdGVwcyIKKyAgICAgICAgICAgICAgICAvLyBGaXJlIHRoZSBlcnJvciBldmVu
dHMgdG8gYWxsIHBlbmRpbmcgbWFzdGVyIGVudHJpZXMsIGFzIHdlbGwgYW55IG90aGVyIGNhY2hl
IGhvc3RzCisgICAgICAgICAgICAgICAgLy8gY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCBhIGNh
Y2hlIGluIHRoaXMgZ3JvdXAuCisgICAgICAgICAgICAgICAgcG9zdExpc3RlbmVyVGFzaygmRE9N
QXBwbGljYXRpb25DYWNoZTo6Y2FsbEVycm9yTGlzdGVuZXIsIG1fYXNzb2NpYXRlZERvY3VtZW50
TG9hZGVycyk7CisgICAgICAgICAgICAgICAgLy8gRGlzYXNzb2NpYXRlIHRoZSBwZW5kaW5nIG1h
c3RlciBlbnRyaWVzIGZyb20gdGhlIGZhaWxlZCBuZXcgY2FjaGUuIE5vdGUgdGhhdAorICAgICAg
ICAgICAgICAgIC8vIGFsbCBvdGhlciBsb2FkZXJzIGluIHRoZSBtX2Fzc29jaWF0ZWREb2N1bWVu
dExvYWRlcnMgYXJlIHN0aWxsIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICAgICAgICAgIC8vIHNv
bWUgb3RoZXIgY2FjaGUgaW4gdGhpcyBncm91cC4gVGhleSBhcmUgbm90IGFzc29jaWF0ZWQgd2l0
aCB0aGUgZmFpbGVkIG5ldyBjYWNoZS4KKworICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gY29w
eSBsb2FkZXJzLCBiZWNhdXNlIHRoZSBjYWNoZSBncm91cCBtYXkgYmUgZGVzdHJveWVkIGF0IHRo
ZSBlbmQgb2YgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgIFZlY3RvcjxEb2N1bWVudExvYWRl
cio+IGxvYWRlcnM7CisgICAgICAgICAgICAgICAgY29weVRvVmVjdG9yKG1fcGVuZGluZ01hc3Rl
clJlc291cmNlTG9hZGVycywgbG9hZGVycyk7CisgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50
ID0gbG9hZGVycy5zaXplKCk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
IT0gY291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgZGlzYXNzb2NpYXRlRG9jdW1lbnRM
b2FkZXIobG9hZGVyc1tpXSk7IC8vIFRoaXMgY2FuIGRlbGV0ZSB0aGlzIGdyb3VwLgorCisgICAg
ICAgICAgICAgICAgLy8gUmVpbnN0YXRlIHRoZSBvbGROZXdlc3RDYWNoZSwgaWYgdGhlcmUgd2Fz
IG9uZS4KKyAgICAgICAgICAgICAgICBpZiAob2xkTmV3ZXN0Q2FjaGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyB3aWxsIGRpc2NhcmQgdGhlIGZhaWxlZCBuZXcgY2FjaGUuCisgICAg
ICAgICAgICAgICAgICAgIHNldE5ld2VzdENhY2hlKG9sZE5ld2VzdENhY2hlLnJlbGVhc2UoKSk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgbXVz
dCBoYXZlIGJlZW4gZGVsZXRlZCBieSB0aGUgbGFzdCBjYWxsIHRvIGRpc2Fzc29jaWF0ZURvY3Vt
ZW50TG9hZGVyKCkuCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC03NzUsNiAr
ODEwLDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSQogICAgIG1f
Y29tcGxldGlvblR5cGUgPSBOb25lOwogICAgIG1fdXBkYXRlU3RhdHVzID0gSWRsZTsKICAgICBt
X2ZyYW1lID0gMDsKKyAgICBtX2NhbGxlZFJlYWNoZWRNYXhBcHBDYWNoZVNpemUgPSBmYWxzZTsK
IH0KIAogdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnN0YXJ0TG9hZGluZ0VudHJ5KCkKQEAg
LTg1Nyw3ICs4OTMsMzQgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmFzc29jaWF0ZURv
YwogICAgIEFTU0VSVCghbV9hc3NvY2lhdGVkRG9jdW1lbnRMb2FkZXJzLmNvbnRhaW5zKGxvYWRl
cikpOwogICAgIG1fYXNzb2NpYXRlZERvY3VtZW50TG9hZGVycy5hZGQobG9hZGVyKTsKIH0KLSAK
KworY2xhc3MgQ2hyb21lQ2xpZW50Q2FsbGJhY2tUaW1lcjogcHVibGljIFRpbWVyQmFzZSB7Citw
dWJsaWM6CisgICAgQ2hyb21lQ2xpZW50Q2FsbGJhY2tUaW1lcihBcHBsaWNhdGlvbkNhY2hlR3Jv
dXAqIGNhY2hlR3JvdXApCisgICAgICAgIDogbV9jYWNoZUdyb3VwKGNhY2hlR3JvdXApCisgICAg
eworICAgIH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKQorICAgIHsKKyAg
ICAgICAgbV9jYWNoZUdyb3VwLT5kaWRSZWFjaE1heEFwcENhY2hlU2l6ZSgpOworICAgICAgICBk
ZWxldGUgdGhpczsKKyAgICB9CisgICAgLy8gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIG5lZWQgdG8g
dXNlIGEgUmVmUHRyIGhlcmUuIFRoZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXAgaW5zdGFuY2UgaXMg
Z3VhcmFudGVlZAorICAgIC8vIHRvIGJlIGFsaXZlIHdoZW4gdGhlIHRpbWVyIGZpcmVzIHNpbmNl
IGludm9raW5nIHRoZSBDaHJvbWVDbGllbnQgY2FsbGJhY2sgaXMgcGFydCBvZiBpdHMgbm9ybWFs
CisgICAgLy8gdXBkYXRlIG1hY2hpbmVyeSBhbmQgbm90aGluZyBjYW4geWV0IGNhdXNlIGl0IHRv
IGdldCBkZWxldGVkLgorICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogbV9jYWNoZUdyb3VwOwor
fTsKKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNjaGVkdWxlUmVhY2hlZE1heEFwcENh
Y2hlU2l6ZUNhbGxiYWNrKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIENo
cm9tZUNsaWVudENhbGxiYWNrVGltZXIqIHRpbWVyID0gbmV3IENocm9tZUNsaWVudENhbGxiYWNr
VGltZXIodGhpcyk7CisgICAgdGltZXItPnN0YXJ0T25lU2hvdCgwKTsKKyAgICAvLyBUaGUgdGlt
ZXIgd2lsbCBkZWxldGUgaXRzZWxmIG9uY2UgaXQgZmlyZXMuCit9CisKIGNsYXNzIENhbGxDYWNo
ZUxpc3RlbmVyVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKICAg
ICB0eXBlZGVmIHZvaWQgKERPTUFwcGxpY2F0aW9uQ2FjaGU6OipMaXN0ZW5lckZ1bmN0aW9uKSgp
OwogcHVibGljOgpAQCAtOTEwLDcgKzk3Myw3IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3Vw
OjpjbGVhclN0b3JhZ2UKICAgICBmb3IgKEhhc2hTZXQ8QXBwbGljYXRpb25DYWNoZSo+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fY2FjaGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAg
ICAgKCppdCktPmNsZWFyU3RvcmFnZUlEKCk7CiB9Ci0gICAgCisKIAogfQogCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaAkocmV2aXNp
b24gNDU3NTkpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3Jv
dXAuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyB2b2lkIHBvc3RMaXN0ZW5lclRhc2soTGlzdGVuZXJGdW5jdGlvbiwgY29uc3QgSGFzaFNldDxE
b2N1bWVudExvYWRlcio+Jik7CiAgICAgc3RhdGljIHZvaWQgcG9zdExpc3RlbmVyVGFzayhMaXN0
ZW5lckZ1bmN0aW9uLCBjb25zdCBWZWN0b3I8UmVmUHRyPERvY3VtZW50TG9hZGVyPiA+JiBsb2Fk
ZXJzKTsKICAgICBzdGF0aWMgdm9pZCBwb3N0TGlzdGVuZXJUYXNrKExpc3RlbmVyRnVuY3Rpb24s
IERvY3VtZW50TG9hZGVyKik7CisgICAgdm9pZCBzY2hlZHVsZVJlYWNoZWRNYXhBcHBDYWNoZVNp
emVDYWxsYmFjaygpOwogCiAgICAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVz
b3VyY2VIYW5kbGUoY29uc3QgS1VSTCYsIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogbmV3ZXN0
Q2FjaGVkUmVzb3VyY2UpOwogCkBAIC0xMDYsNiArMTA3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGRpZFJlY2VpdmVNYW5pZmVzdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAg
ICB2b2lkIGRpZFJlY2VpdmVNYW5pZmVzdERhdGEoY29uc3QgY2hhciosIGludCk7CiAgICAgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nTWFuaWZlc3QoKTsKKyAgICB2b2lkIGRpZFJlYWNoTWF4QXBwQ2Fj
aGVTaXplKCk7CiAgICAgCiAgICAgdm9pZCBzdGFydExvYWRpbmdFbnRyeSgpOwogICAgIHZvaWQg
ZGVsaXZlckRlbGF5ZWRNYWluUmVzb3VyY2VzKCk7CkBAIC0xNjMsMTIgKzE2NSwxOSBAQCBwcml2
YXRlOgogCiAgICAgLy8gV2hldGhlciB0aGlzIGNhY2hlIGdyb3VwIGlzIGEgY29weSB0aGF0J3Mg
b25seSB1c2VkIGZvciB0cmFuc2ZlcnJpbmcgdGhlIGNhY2hlIHRvIGFub3RoZXIgZmlsZS4KICAg
ICBib29sIG1faXNDb3B5OworCisgICAgLy8gVGhpcyBmbGFnIGlzIHNldCBpbW1lZGlhdGVseSBh
ZnRlciB0aGUgQ2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKCkgY2FsbGJhY2sg
aXMgaW52b2tlZCBhcyBhIHJlc3VsdCBvZiB0aGUgc3RvcmFnZSBsYXllciBmYWlsaW5nIHRvIHNh
dmUgYSBjYWNoZQorICAgIC8vIGR1ZSB0byByZWFjaGluZyB0aGUgbWF4aW11bSBzaXplIG9mIHRo
ZSBhcHBsaWNhdGlvbiBjYWNoZSBkYXRhYmFzZSBmaWxlLiBUaGlzIGZsYWcgaXMgdXNlZCBieSBB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6OmNoZWNrSWZMb2FkSXNDb21wbGV0ZSgpIHRvIGRlY2lkZQor
ICAgIC8vIHRoZSBjb3Vyc2Ugb2YgYWN0aW9uIGluIGNhc2Ugb2YgdGhpcyBmYWlsdXJlIChpLmUu
IGNhbGwgdGhlIENocm9tZUNsaWVudCBjYWxsYmFjayBvciBydW4gdGhlIGZhaWx1cmUgc3RlcHMp
LgorICAgIGJvb2wgbV9jYWxsZWRSZWFjaGVkTWF4QXBwQ2FjaGVTaXplOwogICAgIAogICAgIFJl
ZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9jdXJyZW50SGFuZGxlOwogICAgIFJlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+IG1fY3VycmVudFJlc291cmNlOwogICAgIAogICAgIFJlZlB0cjxB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IG1fbWFuaWZlc3RSZXNvdXJjZTsKICAgICBSZWZQdHI8
UmVzb3VyY2VIYW5kbGU+IG1fbWFuaWZlc3RIYW5kbGU7CisKKyAgICBmcmllbmQgY2xhc3MgQ2hy
b21lQ2xpZW50Q2FsbGJhY2tUaW1lcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVJl
c291cmNlLmNwcAkocmV2aXNpb24gNDU3NTkpCisrKyBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBAIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6QXBwbGljYXRpb25DYWMKICAgICA6IFN1YnN0
aXR1dGVSZXNvdXJjZSh1cmwsIHJlc3BvbnNlLCBkYXRhKQogICAgICwgbV90eXBlKHR5cGUpCiAg
ICAgLCBtX3N0b3JhZ2VJRCgwKQorICAgICwgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlKDApCiB7
CiB9CiAKQEAgLTQ0LDYgKzQ1LDI4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjph
ZGRUeXBlKHUKICAgICBtX3R5cGUgfD0gdHlwZTsgCiB9CiAKK2ludDY0X3QgQXBwbGljYXRpb25D
YWNoZVJlc291cmNlOjplc3RpbWF0ZWRTaXplSW5TdG9yYWdlKCkKK3sKKyAgICBpZiAobV9lc3Rp
bWF0ZWRTaXplSW5TdG9yYWdlKQorICAgICAgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFn
ZTsKKworICAgIGlmIChkYXRhKCkpCisgICAgICAgIG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSA9
IGRhdGEoKS0+c2l6ZSgpOworCisgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CisgICAgZm9yIChIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkcygp
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9y
YWdlICs9IChpdC0+Zmlyc3QubGVuZ3RoKCkgKyBpdC0+c2Vjb25kLmxlbmd0aCgpICsgMikgKiBz
aXplb2YoVUNoYXIpOworCisgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IHVybCgpLnN0
cmluZygpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICBtX2VzdGltYXRlZFNpemVJblN0
b3JhZ2UgKz0gc2l6ZW9mKGludCk7IC8vIHJlc3BvbnNlKCkubV9odHRwU3RhdHVzQ29kZQorICAg
IG1fZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSArPSByZXNwb25zZSgpLnVybCgpLnN0cmluZygpLmxl
bmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICBtX2VzdGltYXRlZFNpemVJblN0b3JhZ2UgKz0g
c2l6ZW9mKHVuc2lnbmVkKTsgLy8gZGF0YUlkCisgICAgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdl
ICs9IHJlc3BvbnNlKCkubWltZVR5cGUoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAg
bV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlICs9IHJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgp
Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKworICAgIHJldHVybiBtX2VzdGltYXRlZFNpemVJ
blN0b3JhZ2U7Cit9CisKICNpZm5kZWYgTkRFQlVHCiB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZTo6ZHVtcFR5cGUodW5zaWduZWQgdHlwZSkKIHsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCShyZXZpc2lvbiA0NTc1
OSkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0
b3JhZ2VJRCh1bnNpZ25lZCBzdG9yYWdlSUQpIHsgbV9zdG9yYWdlSUQgPSBzdG9yYWdlSUQ7IH0K
ICAgICB1bnNpZ25lZCBzdG9yYWdlSUQoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VJRDsgfQog
ICAgIHZvaWQgY2xlYXJTdG9yYWdlSUQoKSB7IG1fc3RvcmFnZUlEID0gMDsgfQorICAgIGludDY0
X3QgZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRp
YyB2b2lkIGR1bXBUeXBlKHVuc2lnbmVkIHR5cGUpOwpAQCAtNjMsNiArNjQsNyBAQCBwcml2YXRl
OgogCiAgICAgdW5zaWduZWQgbV90eXBlOwogICAgIHVuc2lnbmVkIG1fc3RvcmFnZUlEOworICAg
IGludDY0X3QgbV9lc3RpbWF0ZWRTaXplSW5TdG9yYWdlOwogfTsKICAgICAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDQ1NzU5KQorKysgV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MywxNiArNDMsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBSZXNvdXJjZVN0b3JhZ2VJREpvdXJuYWwgewordGVtcGxhdGUgPGNsYXNz
IFQ+CitjbGFzcyBTdG9yYWdlSURKb3VybmFsIHsKIHB1YmxpYzogIAotICAgIH5SZXNvdXJjZVN0
b3JhZ2VJREpvdXJuYWwoKQorICAgIH5TdG9yYWdlSURKb3VybmFsKCkKICAgICB7CiAgICAgICAg
IHNpemVfdCBzaXplID0gbV9yZWNvcmRzLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgICAgICBtX3JlY29yZHNbaV0ucmVzdG9yZSgpOwog
ICAgIH0KIAotICAgIHZvaWQgYWRkKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2Us
IHVuc2lnbmVkIHN0b3JhZ2VJRCkKKyAgICB2b2lkIGFkZChUKiByZXNvdXJjZSwgdW5zaWduZWQg
c3RvcmFnZUlEKQogICAgIHsKICAgICAgICAgbV9yZWNvcmRzLmFwcGVuZChSZWNvcmQocmVzb3Vy
Y2UsIHN0b3JhZ2VJRCkpOwogICAgIH0KQEAgLTY2LDcgKzY3LDcgQEAgcHJpdmF0ZToKICAgICBj
bGFzcyBSZWNvcmQgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVjb3JkKCkgOiBtX3Jlc291cmNl
KDApLCBtX3N0b3JhZ2VJRCgwKSB7IH0KLSAgICAgICAgUmVjb3JkKEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZSogcmVzb3VyY2UsIHVuc2lnbmVkIHN0b3JhZ2VJRCkgOiBtX3Jlc291cmNlKHJlc291
cmNlKSwgbV9zdG9yYWdlSUQoc3RvcmFnZUlEKSB7IH0KKyAgICAgICAgUmVjb3JkKFQqIHJlc291
cmNlLCB1bnNpZ25lZCBzdG9yYWdlSUQpIDogbV9yZXNvdXJjZShyZXNvdXJjZSksIG1fc3RvcmFn
ZUlEKHN0b3JhZ2VJRCkgeyB9CiAKICAgICAgICAgdm9pZCByZXN0b3JlKCkKICAgICAgICAgewpA
QCAtNzQsNyArNzUsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIG1fcmVzb3VyY2U7CisgICAgICAgIFQqIG1f
cmVzb3VyY2U7CiAgICAgICAgIHVuc2lnbmVkIG1fc3RvcmFnZUlEOwogICAgIH07CiAKQEAgLTIy
Myw2ICsyMjQsOCBAQCBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2FjaGVTCiAg
ICAgICAgIC8vIGEgbWF0Y2hpbmcgVVJMLgogICAgICAgICB1bnNpZ25lZCBuZXdlc3RDYWNoZUlE
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgyKSk7CiAg
ICAgICAgIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiBjYWNoZSA9IGxvYWRDYWNoZShuZXdlc3RD
YWNoZUlEKTsKKyAgICAgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBjYWNoZS0+cmVzb3Vy
Y2VGb3JVUkwodXJsKTsKICAgICAgICAgaWYgKCFyZXNvdXJjZSkKQEAgLTM1Myw2ICszNTYsNTYg
QEAgY29uc3QgU3RyaW5nJiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6YwogICAgIHJldHVybiBt
X2NhY2hlRGlyZWN0b3J5OwogfQogCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzZXRN
YXhpbXVtU2l6ZShpbnQ2NF90IHNpemUpCit7CisgICAgbV9tYXhpbXVtU2l6ZSA9IHNpemU7Cit9
CisKK2ludDY0X3QgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6Om1heGltdW1TaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9tYXhpbXVtU2l6ZTsKK30KKworYm9vbCBBcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZTo6aXNNYXhpbXVtU2l6ZVJlYWNoZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lz
TWF4aW11bVNpemVSZWFjaGVkOworfQorCitpbnQ2NF90IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpzcGFjZU5lZWRlZChpbnQ2NF90IGNhY2hlVG9TYXZlKQoreworICAgIGludDY0X3Qgc3BhY2VO
ZWVkZWQgPSAwOworICAgIGludDY0X3QgY3VycmVudFNpemUgPSAwOworICAgIGlmICghZ2V0Rmls
ZVNpemUobV9jYWNoZUZpbGUsIGN1cnJlbnRTaXplKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICAvLyBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIHdlIGhhdmUgYXZhaWxhYmxl
LgorICAgIGludDY0X3QgdG90YWxBdmFpbGFibGVTaXplID0gMDsKKyAgICBpZiAobV9tYXhpbXVt
U2l6ZSA8IGN1cnJlbnRTaXplKSB7CisgICAgICAgIC8vIFRoZSBtYXggc2l6ZSBpcyBzbWFsbGVy
IHRoYW4gdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBhcHAgY2FjaGUgZmlsZS4KKyAgICAgICAgLy8g
VGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBjbGllbnQgcHJldmlvdXNseSBpbXBvc2VkIGEgbGFyZ2Vy
IG1heCBzaXplCisgICAgICAgIC8vIHZhbHVlIGFuZCB0aGUgYXBwIGNhY2hlIGZpbGUgaGFzIGFs
cmVhZHkgZ3Jvd24gYmV5b25kIHRoZSBjdXJyZW50CisgICAgICAgIC8vIG1heCBzaXplIHZhbHVl
LgorICAgICAgICAvLyBUaGUgYW1vdW50IG9mIGZyZWUgc3BhY2UgaXMganVzdCB0aGUgYW1vdW50
IG9mIGZyZWUgc3BhY2UgaW5zaWRlCisgICAgICAgIC8vIHRoZSBkYXRhYmFzZSBmaWxlLiBOb3Rl
IHRoYXQgdGhpcyBpcyBhbHdheXMgMCBpZiBTUUxpdGUgaXMgY29tcGlsZWQKKyAgICAgICAgLy8g
d2l0aCBBVVRPX1ZBQ1VVTSA9IDEuCisgICAgICAgIHRvdGFsQXZhaWxhYmxlU2l6ZSA9IG1fZGF0
YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRoZSBtYXgg
c2l6ZSBpcyB0aGUgc2FtZSBvciBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBzaXplLgorICAgICAg
ICAvLyBUaGUgYW1vdW50IG9mIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGlzIHRoZSBhbW91bnQgb2Yg
ZnJlZSBzcGFjZQorICAgICAgICAvLyBpbnNpZGUgdGhlIGRhdGFiYXNlIGZpbGUgcGx1cyB0aGUg
YW1vdW50IHdlIGNhbiBncm93IHVudGlsIHdlIGhpdAorICAgICAgICAvLyB0aGUgbWF4IHNpemUu
CisgICAgICAgIHRvdGFsQXZhaWxhYmxlU2l6ZSA9IChtX21heGltdW1TaXplIC0gY3VycmVudFNp
emUpICsgbV9kYXRhYmFzZS5mcmVlU3BhY2VTaXplKCk7CisgICAgfQorCisgICAgLy8gVGhlIHNw
YWNlIG5lZWRlZCB0byBiZSBmcmVlZCBpbiBvcmRlciB0byBhY2NvbW9kYXRlIHRoZSBmYWlsZWQg
Y2FjaGUgaXMKKyAgICAvLyB0aGUgc2l6ZSBvZiB0aGUgZmFpbGVkIGNhY2hlIG1pbnVzIGFueSBh
bHJlYWR5IGF2YWlsYWJsZSBmcmVlIHNwYWNlLgorICAgIHNwYWNlTmVlZGVkID0gY2FjaGVUb1Nh
dmUgLSB0b3RhbEF2YWlsYWJsZVNpemU7CisgICAgLy8gVGhlIHNwYWNlIG5lZWRlZCB2YWx1ZSBt
dXN0IGJlIHBvc2l0aXZlIChvciBlbHNlIHRoZSB0b3RhbCBhbHJlYWR5CisgICAgLy8gYXZhaWxh
YmxlIGZyZWUgc3BhY2Ugd291bGQgYmUgbGFyZ2VyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGZhaWxl
ZCBjYWNoZSBhbmQKKyAgICAvLyBzYXZpbmcgb2YgdGhlIGNhY2hlIHNob3VsZCBoYXZlIG5ldmVy
IGZhaWxlZCkuCisgICAgQVNTRVJUKHNwYWNlTmVlZGVkKTsKKyAgICByZXR1cm4gc3BhY2VOZWVk
ZWQ7Cit9CiAKIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTUUxDb21tYW5k
KGNvbnN0IFN0cmluZyYgc3FsKQogewpAQCAtMzY2LDcgKzQxOSw3IEBAIGJvb2wgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OmV4ZWN1dGVTUUwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0
aWMgY29uc3QgaW50IHNjaGVtYVZlcnNpb24gPSAzOworc3RhdGljIGNvbnN0IGludCBzY2hlbWFW
ZXJzaW9uID0gNDsKICAgICAKIHZvaWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnZlcmlmeVNj
aGVtYVZlcnNpb24oKQogewpAQCAtNDAwLDEzICs0NTMsMTMgQEAgdm9pZCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6b3BlbkRhdGFiYQogICAgIC8vIFRoZSBjYWNoZSBkaXJlY3Rvcnkgc2hvdWxk
IG5ldmVyIGJlIG51bGwsIGJ1dCBpZiBpdCBmb3Igc29tZSB3ZWlyZCByZWFzb24gaXMgd2UgYmFp
bCBvdXQuCiAgICAgaWYgKG1fY2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBTdHJpbmcgYXBwbGljYXRpb25DYWNoZVBhdGggPSBwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQobV9jYWNoZURpcmVjdG9yeSwgIkFwcGxpY2F0aW9uQ2FjaGUuZGIiKTsKLSAg
ICBpZiAoIWNyZWF0ZUlmRG9lc05vdEV4aXN0ICYmICFmaWxlRXhpc3RzKGFwcGxpY2F0aW9uQ2Fj
aGVQYXRoKSkKKworICAgIG1fY2FjaGVGaWxlID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1f
Y2FjaGVEaXJlY3RvcnksICJBcHBsaWNhdGlvbkNhY2hlLmRiIik7CisgICAgaWYgKCFjcmVhdGVJ
ZkRvZXNOb3RFeGlzdCAmJiAhZmlsZUV4aXN0cyhtX2NhY2hlRmlsZSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1ha2VBbGxEaXJlY3RvcmllcyhtX2NhY2hlRGlyZWN0b3J5KTsKLSAgICBtX2Rh
dGFiYXNlLm9wZW4oYXBwbGljYXRpb25DYWNoZVBhdGgpOworICAgIG1fZGF0YWJhc2Uub3Blbiht
X2NhY2hlRmlsZSk7CiAgICAgCiAgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQogICAgICAg
ICByZXR1cm47CkBAIC00MTYsNyArNDY5LDcgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6b3BlbkRhdGFiYQogICAgIC8vIENyZWF0ZSB0YWJsZXMKICAgICBleGVjdXRlU1FMQ29tbWFu
ZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQ2FjaGVHcm91cHMgKGlkIElOVEVHRVIgUFJJ
TUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgIgogICAgICAgICAgICAgICAgICAgICAgICJtYW5pZmVz
dEhvc3RIYXNoIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgbWFuaWZlc3RVUkwg
VEVYVCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbmV3ZXN0Q2FjaGUgSU5URUdFUikiKTsKLSAg
ICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQ2FjaGVzIChp
ZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIGNhY2hlR3JvdXAgSU5URUdFUiki
KTsKKyAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQ2Fj
aGVzIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIGNhY2hlR3JvdXAgSU5U
RUdFUiwgc2l6ZSBJTlRFR0VSKSIpOwogICAgIGV4ZWN1dGVTUUxDb21tYW5kKCJDUkVBVEUgVEFC
TEUgSUYgTk9UIEVYSVNUUyBDYWNoZVdoaXRlbGlzdFVSTHMgKHVybCBURVhUIE5PVCBOVUxMIE9O
IENPTkZMSUNUIEZBSUwsIGNhY2hlIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCki
KTsKICAgICBleGVjdXRlU1FMQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgRmFs
bGJhY2tVUkxzIChuYW1lc3BhY2UgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBmYWxs
YmFja1VSTCBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsICIKICAgICAgICAgICAgICAg
ICAgICAgICAiY2FjaGUgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOwpAQCAt
NDU2LDkgKzUwOSwxMCBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpleGVjdXRlU3Rh
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0gICAgCiAKLWJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OnN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXApCitib29sIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIGdyb3VwLCBHcm91cFN0
b3JhZ2VJREpvdXJuYWwqIGpvdXJuYWwpCiB7CiAgICAgQVNTRVJUKGdyb3VwLT5zdG9yYWdlSUQo
KSA9PSAwKTsKKyAgICBBU1NFUlQoam91cm5hbCk7CiAKICAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBDYWNoZUdyb3VwcyAobWFuaWZlc3RIb3N0
SGFzaCwgbWFuaWZlc3RVUkwpIFZBTFVFUyAoPywgPykiKTsKICAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKQEAgLTQ3MSw2ICs1MjUsNyBAQCBib29sIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGdyb3VwLT5zZXRTdG9yYWdlSUQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZGF0YWJhc2UubGFz
dEluc2VydFJvd0lEKCkpKTsKKyAgICBqb3VybmFsLT5hZGQoZ3JvdXAsIDApOwogICAgIHJldHVy
biB0cnVlOwogfSAgICAKIApAQCAtNDgwLDExICs1MzUsMTIgQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c3RvcmUoQXBwbAogICAgIEFTU0VSVChjYWNoZS0+Z3JvdXAoKS0+c3RvcmFn
ZUlEKCkgIT0gMCk7CiAgICAgQVNTRVJUKHN0b3JhZ2VJREpvdXJuYWwpOwogICAgIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlcyAo
Y2FjaGVHcm91cCkgVkFMVUVTICg/KSIpOworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIENhY2hlcyAoY2FjaGVHcm91cCwgc2l6ZSkgVkFMVUVT
ICg/LCA/KSIpOwogICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzdGF0ZW1lbnQuYmluZEludDY0KDEsIGNhY2hl
LT5ncm91cCgpLT5zdG9yYWdlSUQoKSk7CisgICAgc3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNo
ZS0+ZXN0aW1hdGVkU2l6ZUluU3RvcmFnZSgpKTsKIAogICAgIGlmICghZXhlY3V0ZVN0YXRlbWVu
dChzdGF0ZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01ODEsNiArNjM3LDkgQEAg
Ym9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbAogICAgIGlmIChyZXNvdXJj
ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKKyAgICAvLyBUaGUgc2FtZSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UgYXJlIHVz
ZWQgaW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkKKyAgICAvLyB0byBjYWxjdWxh
dGUgdGhlIGFwcHJveGltYXRlIHNpemUgb2YgYW4gQXBwbGljYXRpb25DYWNoZVJlc291cmNlIG9i
amVjdC4gSWYKKyAgICAvLyB5b3UgY2hhbmdlIHRoZSBjb2RlIGJlbG93LCBwbGVhc2UgYWxzbyBj
aGFuZ2UgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpzaXplKCkuCiAgICAgcmVzb3VyY2VTdGF0
ZW1lbnQuYmluZFRleHQoMSwgcmVzb3VyY2UtPnVybCgpKTsKICAgICByZXNvdXJjZVN0YXRlbWVu
dC5iaW5kSW50NjQoMiwgcmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSk7CiAg
ICAgcmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMywgcmVzb3VyY2UtPnJlc3BvbnNlKCkudXJs
KCkpOwpAQCAtNjI2LDMzICs2ODUsNTYgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6
c3RvcmVVcGRhdAogICAgIHJldHVybiBleGVjdXRlU3RhdGVtZW50KGVudHJ5U3RhdGVtZW50KTsK
IH0KIAotdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUoQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKiByZXNvdXJjZSwgQXBwbGljYXRpb25DYWNoZSogY2FjaGUpCitib29sIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291
cmNlLCBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkKIHsKICAgICBBU1NFUlQoY2FjaGUtPnN0b3Jh
Z2VJRCgpKTsKICAgICAKICAgICBvcGVuRGF0YWJhc2UodHJ1ZSk7CiAgCisgICAgbV9pc01heGlt
dW1TaXplUmVhY2hlZCA9IGZhbHNlOworICAgIG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobV9t
YXhpbXVtU2l6ZSk7CisKICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9yZVJlc291cmNlVHJhbnNh
Y3Rpb24obV9kYXRhYmFzZSk7CiAgICAgc3RvcmVSZXNvdXJjZVRyYW5zYWN0aW9uLmJlZ2luKCk7
CiAgICAgCi0gICAgaWYgKCFzdG9yZShyZXNvdXJjZSwgY2FjaGUtPnN0b3JhZ2VJRCgpKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIGlmICghc3RvcmUocmVzb3VyY2UsIGNhY2hlLT5zdG9yYWdlSUQo
KSkpIHsKKyAgICAgICAgY2hlY2tGb3JNYXhTaXplUmVhY2hlZCgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgLy8gQSByZXNvdXJjZSB3YXMgYWRkZWQgdG8gdGhlIGNhY2hl
LiBVcGRhdGUgdGhlIHRvdGFsIGRhdGEgc2l6ZSBmb3IgdGhlIGNhY2hlLgorICAgIFNRTGl0ZVN0
YXRlbWVudCBzaXplVXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsICJVUERBVEUgQ2FjaGVzIFNF
VCBzaXplPXNpemUrPyBXSEVSRSBpZD0/Iik7CisgICAgaWYgKHNpemVVcGRhdGVTdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
aXplVXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgxLCByZXNvdXJjZS0+ZXN0aW1hdGVkU2l6ZUlu
U3RvcmFnZSgpKTsKKyAgICBzaXplVXBkYXRlU3RhdGVtZW50LmJpbmRJbnQ2NCgyLCBjYWNoZS0+
c3RvcmFnZUlEKCkpOworCisgICAgaWYgKCFleGVjdXRlU3RhdGVtZW50KHNpemVVcGRhdGVTdGF0
ZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgc3RvcmVSZXNvdXJjZVRy
YW5zYWN0aW9uLmNvbW1pdCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZU5ld2VzdENhY2hlKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCog
Z3JvdXApCiB7CiAgICAgb3BlbkRhdGFiYXNlKHRydWUpOwotICAgIAorCisgICAgbV9pc01heGlt
dW1TaXplUmVhY2hlZCA9IGZhbHNlOworICAgIG1fZGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobV9t
YXhpbXVtU2l6ZSk7CisKICAgICBTUUxpdGVUcmFuc2FjdGlvbiBzdG9yZUNhY2hlVHJhbnNhY3Rp
b24obV9kYXRhYmFzZSk7CiAgICAgCiAgICAgc3RvcmVDYWNoZVRyYW5zYWN0aW9uLmJlZ2luKCk7
Ci0gICAgCisKKyAgICBHcm91cFN0b3JhZ2VJREpvdXJuYWwgZ3JvdXBTdG9yYWdlSURKb3VybmFs
OwogICAgIGlmICghZ3JvdXAtPnN0b3JhZ2VJRCgpKSB7CiAgICAgICAgIC8vIFN0b3JlIHRoZSBn
cm91cAotICAgICAgICBpZiAoIXN0b3JlKGdyb3VwKSkKKyAgICAgICAgaWYgKCFzdG9yZShncm91
cCwgJmdyb3VwU3RvcmFnZUlESm91cm5hbCkpIHsKKyAgICAgICAgICAgIGNoZWNrRm9yTWF4U2l6
ZVJlYWNoZWQoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0K
ICAgICAKICAgICBBU1NFUlQoZ3JvdXAtPm5ld2VzdENhY2hlKCkpOwpAQCAtNjYyLDExICs3NDQs
MTMgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmVOZXdlcwogICAgIC8vIExv
ZyB0aGUgc3RvcmFnZUlEIGNoYW5nZXMgdG8gdGhlIGluLW1lbW9yeSByZXNvdXJjZSBvYmplY3Rz
LiBUaGUgam91cm5hbAogICAgIC8vIG9iamVjdCB3aWxsIHJvbGwgdGhlbSBiYWNrIGF1dG9tYXRp
Y2FsbHkgaW4gY2FzZSBhIGRhdGFiYXNlIG9wZXJhdGlvbgogICAgIC8vIGZhaWxzIGFuZCB0aGlz
IG1ldGhvZCByZXR1cm5zIGVhcmx5LgotICAgIFJlc291cmNlU3RvcmFnZUlESm91cm5hbCBzdG9y
YWdlSURKb3VybmFsOworICAgIFJlc291cmNlU3RvcmFnZUlESm91cm5hbCByZXNvdXJjZVN0b3Jh
Z2VJREpvdXJuYWw7CiAKICAgICAvLyBTdG9yZSB0aGUgbmV3ZXN0IGNhY2hlCi0gICAgaWYgKCFz
dG9yZShncm91cC0+bmV3ZXN0Q2FjaGUoKSwgJnN0b3JhZ2VJREpvdXJuYWwpKQorICAgIGlmICgh
c3RvcmUoZ3JvdXAtPm5ld2VzdENhY2hlKCksICZyZXNvdXJjZVN0b3JhZ2VJREpvdXJuYWwpKSB7
CisgICAgICAgIGNoZWNrRm9yTWF4U2l6ZVJlYWNoZWQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KICAgICAKICAgICAvLyBVcGRhdGUgdGhlIG5ld2VzdCBjYWNoZSBpbiB0aGUgZ3Jv
dXAuCiAgICAgCkBAIC02ODAsNyArNzY0LDggQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmVOZXdlcwogICAgIGlmICghZXhlY3V0ZVN0YXRlbWVudChzdGF0ZW1lbnQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgc3RvcmFnZUlESm91cm5hbC5jb21taXQoKTsK
KyAgICBncm91cFN0b3JhZ2VJREpvdXJuYWwuY29tbWl0KCk7CisgICAgcmVzb3VyY2VTdG9yYWdl
SURKb3VybmFsLmNvbW1pdCgpOwogICAgIHN0b3JlQ2FjaGVUcmFuc2FjdGlvbi5jb21taXQoKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTg3Niw3ICs5NjEsMTE2IEBAIGJvb2wgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2U6OnN0b3JlQ29weU8KICAgICAKICAgICByZXR1cm4gY29weVN0b3JhZ2Uu
c3RvcmVOZXdlc3RDYWNoZShncm91cENvcHkuZ2V0KCkpOwogfQotICAgIAorCitib29sIEFwcGxp
Y2F0aW9uQ2FjaGVTdG9yYWdlOjptYW5pZmVzdFVSTHMoVmVjdG9yPEtVUkw+KiB1cmxzKQorewor
ICAgIEFTU0VSVCh1cmxzKTsKKyAgICBvcGVuRGF0YWJhc2UoZmFsc2UpOworICAgIGlmICghbV9k
YXRhYmFzZS5pc09wZW4oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU1FMaXRlU3Rh
dGVtZW50IHNlbGVjdFVSTHMobV9kYXRhYmFzZSwgIlNFTEVDVCBtYW5pZmVzdFVSTCBGUk9NIENh
Y2hlR3JvdXBzIik7CisKKyAgICBpZiAoc2VsZWN0VVJMcy5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0
T2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHdoaWxlIChzZWxlY3RVUkxzLnN0ZXAo
KSA9PSBTUUxSZXN1bHRSb3cpCisgICAgICAgIHVybHMtPmFwcGVuZChzZWxlY3RVUkxzLmdldENv
bHVtblRleHQoMCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2U6OmNhY2hlR3JvdXBTaXplKGNvbnN0IFN0cmluZyYgbWFuaWZlc3RVUkwsIGlu
dDY0X3QqIHNpemUpCit7CisgICAgQVNTRVJUKHNpemUpOworICAgIG9wZW5EYXRhYmFzZShmYWxz
ZSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLmlzT3BlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qgc3Vt
KENhY2hlcy5zaXplKSBGUk9NIENhY2hlcyBJTk5FUiBKT0lOIENhY2hlR3JvdXBzIE9OIENhY2hl
cy5jYWNoZUdyb3VwPUNhY2hlR3JvdXBzLmlkIFdIRVJFIENhY2hlR3JvdXBzLm1hbmlmZXN0VVJM
PT8iKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG1hbmlmZXN0VVJM
KTsKKworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGlmIChyZXN1bHQg
PT0gU1FMUmVzdWx0RG9uZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJlc3Vs
dCAhPSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZ2V0IHRo
ZSBzaXplIG9mIHRoZSBjYWNoZSBncm91cCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAqc2l6ZSA9
IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZGVsZXRlQ2FjaGVHcm91cChjb25zdCBTdHJpbmcm
IG1hbmlmZXN0VVJMKQoreworICAgIFNRTGl0ZVRyYW5zYWN0aW9uIGRlbGV0ZVRyYW5zYWN0aW9u
KG1fZGF0YWJhc2UpOworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZ3JvdXAgaXMgaW4gbWVt
b3J5LgorICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBtX2NhY2hlc0luTWVtb3J5
LmdldChtYW5pZmVzdFVSTCk7CisgICAgaWYgKGdyb3VwKQorICAgICAgICBjYWNoZUdyb3VwTWFk
ZU9ic29sZXRlKGdyb3VwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gVGhlIGNhY2hlIGdyb3Vw
IGlzIG5vdCBpbiBtZW1vcnksIHNvIHJlbW92ZSBpdCBmcm9tIHRoZSBkaXNrLgorICAgICAgICBv
cGVuRGF0YWJhc2UoZmFsc2UpOworICAgICAgICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IGlkU3Rh
dGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgaWQgRlJPTSBDYWNoZUdyb3VwcyBXSEVSRSBtYW5p
ZmVzdFVSTD0/Iik7CisgICAgICAgIGlmIChpZFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVz
dWx0T2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWRTdGF0ZW1lbnQu
YmluZFRleHQoMSwgbWFuaWZlc3RVUkwpOworCisgICAgICAgIGludCByZXN1bHQgPSBpZFN0YXRl
bWVudC5zdGVwKCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdFJv
dykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgbG9hZCBjYWNoZSBncm91cCBp
ZCwgZXJyb3IgXCIlc1wiIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpbnQ2NF90IGdyb3VwSWQgPSBp
ZFN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2NCgwKTsKKworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
Y2FjaGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENhY2hlcyBXSEVSRSBjYWNo
ZUdyb3VwPT8iKTsKKyAgICAgICAgaWYgKGNhY2hlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxS
ZXN1bHRPaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgZ3JvdXBTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIENhY2hlR3JvdXBz
IFdIRVJFIGlkPT8iKTsKKyAgICAgICAgaWYgKGdyb3VwU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxSZXN1bHRPaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjYWNoZVN0
YXRlbWVudC5iaW5kSW50NjQoMSwgZ3JvdXBJZCk7CisgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQo
Y2FjaGVTdGF0ZW1lbnQpOworICAgICAgICBncm91cFN0YXRlbWVudC5iaW5kSW50NjQoMSwgZ3Jv
dXBJZCk7CisgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnQoZ3JvdXBTdGF0ZW1lbnQpOworICAgIH0K
KworICAgIGRlbGV0ZVRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp2YWN1dW1EYXRhYmFzZUZpbGUoKQorewor
ICAgIG1fZGF0YWJhc2UucnVuVmFjdXVtQ29tbWFuZCgpOworfQorCit2b2lkIEFwcGxpY2F0aW9u
Q2FjaGVTdG9yYWdlOjpjaGVja0Zvck1heFNpemVSZWFjaGVkKCkKK3sKKyAgICBpZiAobV9kYXRh
YmFzZS5sYXN0RXJyb3IoKSA9PSBTUUxSZXN1bHRGdWxsKQorICAgICAgICBtX2lzTWF4aW11bVNp
emVSZWFjaGVkID0gdHJ1ZTsKK30KKworQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlKCkgCisgICAgOiBtX21heGltdW1TaXplKElOVF9NQVgpCisgICAgLCBt
X2lzTWF4aW11bVNpemVSZWFjaGVkKGZhbHNlKQoreworfQorCiBBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZSYgY2FjaGVTdG9yYWdlKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLCBzdG9yYWdlLCAoKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgJKHJldmlzaW9uIDQ1NzU5KQor
KysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDE5IEBAIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGU7CiBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlR3JvdXA7CiBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2U7CiBjbGFzcyBLVVJMOwotY2xhc3MgUmVzb3VyY2VTdG9yYWdlSURKb3VybmFsOwotICAgIAor
dGVtcGxhdGUgPGNsYXNzIFQ+CitjbGFzcyBTdG9yYWdlSURKb3VybmFsOworCiBjbGFzcyBBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZSB7CiBwdWJsaWM6CiAgICAgdm9pZCBzZXRDYWNoZURpcmVjdG9y
eShjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBTdHJpbmcmIGNhY2hlRGlyZWN0b3J5KCkgY29u
c3Q7CiAgICAgCisgICAgdm9pZCBzZXRNYXhpbXVtU2l6ZShpbnQ2NF90IHNpemUpOworICAgIGlu
dDY0X3QgbWF4aW11bVNpemUoKSBjb25zdDsKKyAgICBib29sIGlzTWF4aW11bVNpemVSZWFjaGVk
KCkgY29uc3Q7CisgICAgaW50NjRfdCBzcGFjZU5lZWRlZChpbnQ2NF90IGNhY2hlVG9TYXZlKTsK
KwogICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogY2FjaGVHcm91cEZvclVSTChjb25zdCBLVVJM
Jik7IC8vIENhY2hlIHRvIGxvYWQgYSBtYWluIHJlc291cmNlIGZyb20uCiAgICAgQXBwbGljYXRp
b25DYWNoZUdyb3VwKiBmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgS1VSTCYpOyAvLyBD
YWNoZSB0aGF0IGhhcyBhIGZhbGxiYWNrIGVudHJ5IHRvIGxvYWQgYSBtYWluIHJlc291cmNlIGZy
b20gaWYgbm9ybWFsIGxvYWRpbmcgZmFpbHMuCiAKQEAgLTU1LDcgKzYxLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgY2FjaGVHcm91cE1hZGVPYnNvbGV0ZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqKTsK
ICAgICAgICAgCiAgICAgYm9vbCBzdG9yZU5ld2VzdENhY2hlKEFwcGxpY2F0aW9uQ2FjaGVHcm91
cCopOyAvLyBVcGRhdGVzIHRoZSBjYWNoZSBncm91cCwgYnV0IGRvZXNuJ3QgcmVtb3ZlIG9sZCBj
YWNoZS4KLSAgICB2b2lkIHN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSosIEFwcGxpY2F0
aW9uQ2FjaGUqKTsKKyAgICBib29sIHN0b3JlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSosIEFw
cGxpY2F0aW9uQ2FjaGUqKTsKICAgICBib29sIHN0b3JlVXBkYXRlZFR5cGUoQXBwbGljYXRpb25D
YWNoZVJlc291cmNlKiwgQXBwbGljYXRpb25DYWNoZSopOwogCiAgICAgLy8gUmVtb3ZlcyB0aGUg
Z3JvdXAgaWYgdGhlIGNhY2hlIHRvIGJlIHJlbW92ZWQgaXMgdGhlIG5ld2VzdCBvbmUgKHNvLCBz
dG9yZU5ld2VzdENhY2hlKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZWhhbmQgd2hlbiB1cGRh
dGluZykuCkBAIC02NSwxMSArNzEsMTkgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBib29s
IHN0b3JlQ29weU9mQ2FjaGUoY29uc3QgU3RyaW5nJiBjYWNoZURpcmVjdG9yeSwgQXBwbGljYXRp
b25DYWNoZSopOwogCisgICAgYm9vbCBtYW5pZmVzdFVSTHMoVmVjdG9yPEtVUkw+KiB1cmxzKTsK
KyAgICBib29sIGNhY2hlR3JvdXBTaXplKGNvbnN0IFN0cmluZyYgbWFuaWZlc3RVUkwsIGludDY0
X3QqIHNpemUpOworICAgIGJvb2wgZGVsZXRlQ2FjaGVHcm91cChjb25zdCBTdHJpbmcmIG1hbmlm
ZXN0VVJMKTsKKyAgICB2b2lkIHZhY3V1bURhdGFiYXNlRmlsZSgpOwogcHJpdmF0ZToKKyAgICBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpOwogICAgIFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZT4gbG9hZENhY2hlKHVuc2lnbmVkIHN0b3JhZ2VJRCk7CiAgICAgQXBwbGljYXRpb25DYWNoZUdy
b3VwKiBsb2FkQ2FjaGVHcm91cChjb25zdCBLVVJMJiBtYW5pZmVzdFVSTCk7CiAgICAgCi0gICAg
Ym9vbCBzdG9yZShBcHBsaWNhdGlvbkNhY2hlR3JvdXAqKTsKKyAgICB0eXBlZGVmIFN0b3JhZ2VJ
REpvdXJuYWw8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBSZXNvdXJjZVN0b3JhZ2VJREpvdXJu
YWw7CisgICAgdHlwZWRlZiBTdG9yYWdlSURKb3VybmFsPEFwcGxpY2F0aW9uQ2FjaGVHcm91cD4g
R3JvdXBTdG9yYWdlSURKb3VybmFsOworCisgICAgYm9vbCBzdG9yZShBcHBsaWNhdGlvbkNhY2hl
R3JvdXAqLCBHcm91cFN0b3JhZ2VJREpvdXJuYWwqKTsKICAgICBib29sIHN0b3JlKEFwcGxpY2F0
aW9uQ2FjaGUqLCBSZXNvdXJjZVN0b3JhZ2VJREpvdXJuYWwqKTsKICAgICBib29sIHN0b3JlKEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSosIHVuc2lnbmVkIGNhY2hlU3RvcmFnZUlEKTsKIApAQCAt
ODEsOCArOTUsMTQgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIGV4ZWN1dGVTdGF0ZW1lbnQo
U1FMaXRlU3RhdGVtZW50Jik7CiAgICAgYm9vbCBleGVjdXRlU1FMQ29tbWFuZChjb25zdCBTdHJp
bmcmKTsKKworICAgIHZvaWQgY2hlY2tGb3JNYXhTaXplUmVhY2hlZCgpOwogICAgIAogICAgIFN0
cmluZyBtX2NhY2hlRGlyZWN0b3J5OworICAgIFN0cmluZyBtX2NhY2hlRmlsZTsKKworICAgIGlu
dDY0X3QgbV9tYXhpbXVtU2l6ZTsKKyAgICBib29sIG1faXNNYXhpbXVtU2l6ZVJlYWNoZWQ7CiAK
ICAgICBTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOwogCkBAIC05Miw2ICsxMTIsOCBAQCBwcml2
YXRlOgogICAgIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cCo+IENhY2hlR3JvdXBNYXA7CiAgICAgQ2FjaGVHcm91cE1hcCBtX2NhY2hlc0luTWVtb3J5
OyAvLyBFeGNsdWRlcyBvYnNvbGV0ZSBjYWNoZSBncm91cHMuCisKKyAgICBmcmllbmQgQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UmIGNhY2hlU3RvcmFnZSgpOwogfTsKICAKIEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlJiBjYWNoZVN0b3JhZ2UoKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9u
IDQ1NzU5KQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzksNiArMTM5LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2
b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VO
YW1lKSA9IDA7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
CisgICAgICAgIC8vIENhbGxiYWNrIGludm9rZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gY2FjaGUg
ZmFpbHMgdG8gc2F2ZSBhIGNhY2hlIG9iamVjdAorICAgICAgICAvLyBiZWNhdXNlIHN0b3Jpbmcg
aXQgd291bGQgZ3JvdyB0aGUgZGF0YWJhc2UgZmlsZSBwYXN0IGl0cyBkZWZpbmVkIG1heGltdW0K
KyAgICAgICAgLy8gc2l6ZSBvciBwYXN0IHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBvbiB0aGUg
ZGV2aWNlLiAKKyAgICAgICAgLy8gVGhlIGNocm9tZSBjbGllbnQgd291bGQgbmVlZCB0byB0YWtl
IHNvbWUgYWN0aW9uIHN1Y2ggYXMgZXZpY3Rpbmcgc29tZQorICAgICAgICAvLyBvbGQgY2FjaGVz
LgorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNw
YWNlTmVlZGVkKSA9IDA7CisjZW5kaWYKKwogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkK
ICAgICAgICAgdmlydHVhbCB2b2lkIGRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCk7CiAjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDQ1
NzU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTAsNiArMTUwLDE4IEBAIGludCBTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUo
KQogICAgIHJldHVybiBtX3BhZ2VTaXplOwogfQogCitpbnQ2NF90IFNRTGl0ZURhdGFiYXNlOjpm
cmVlU3BhY2VTaXplKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9hdXRob3JpemVyTG9j
ayk7CisgICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7CisgICAgLy8gTm90ZTogZnJlZWxpc3Rf
Y291bnQgd2FzIGFkZGVkIGluIFNRTGl0ZSAzLjQuMS4KKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KCp0aGlzLCAiUFJBR01BIGZyZWVsaXN0X2NvdW50Iik7CisgICAgaW50NjRfdCBzaXpl
ID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApICogcGFnZVNpemUoKTsKKworICAgIGVuYWJs
ZUF1dGhvcml6ZXIodHJ1ZSk7CisgICAgcmV0dXJuIHNpemU7Cit9CisKIHZvaWQgU1FMaXRlRGF0
YWJhc2U6OnNldFN5bmNocm9ub3VzKFN5bmNocm9ub3VzUHJhZ21hIHN5bmMpCiB7CiAgICAgZXhl
Y3V0ZUNvbW1hbmQoU3RyaW5nOjpmb3JtYXQoIlBSQUdNQSBzeW5jaHJvbm91cyA9ICVpIiwgc3lu
YykpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCShyZXZpc2lvbiA0
NTc1OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgzLDYgKzgzLDkgQEAgcHVibGljOgogICAgIGludDY0X3QgbWF4aW11bVNpemUo
KTsKICAgICB2b2lkIHNldE1heGltdW1TaXplKGludDY0X3QpOwogICAgIAorICAgIC8vIEdldHMg
dGhlIG51bWJlciBvZiB1bnVzZWQgYnl0ZXMgaW4gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgaW50
NjRfdCBmcmVlU3BhY2VTaXplKCk7CisKICAgICAvLyBUaGUgU1FMaXRlIFNZTkNIUk9OT1VTIHBy
YWdtYSBjYW4gYmUgZWl0aGVyIEZVTEwsIE5PUk1BTCwgb3IgT0ZGCiAgICAgLy8gRlVMTCAtIEFu
eSB3cml0aW5nIGNhbGxzIHRvIHRoZSBEQiBibG9jayB1bnRpbCB0aGUgZGF0YSBpcyBhY3R1YWxs
eSBvbiB0aGUgZGlzayBzdXJmYWNlCiAgICAgLy8gTk9STUFMIC0gU1FMaXRlIHBhdXNlcyBhdCBz
b21lIGNyaXRpY2FsIG1vbWVudHMgd2hlbiB3cml0aW5nLCBidXQgbXVjaCBsZXNzIHRoYW4gRlVM
TApJbmRleDogV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTg1NikKKysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMiBAQAorMjAwOS0wNy0xNCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZSBzaG91bGQgaGF2ZSBzaXplIGxpbWl0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMAor
ICAgICAgICAKKyAgICAgICAgVXBkYXRlZCB0aGUgcHJvamVjdCBhZnRlciBhZGRpbmcgV2ViQXBw
bGljYXRpb25DYWNoZS5oL21tCisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKwogMjAwOS0wNy0xMCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgU29ydCBhbGwgb3VyIFhjb2RlIHByb2plY3RzCkluZGV4OiBXZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NTc1OSkKKysrIFdlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA4LDYgKzMw
OCw4IEBACiAJCUE3RDNDNUJEMEI1NzczQzUwMDJDQTQ1MCAvKiBXZWJQYXN0ZWJvYXJkSGVscGVy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEM0M1
QkIwQjU3NzNDNTAwMkNBNDUwIC8qIFdlYlBhc3RlYm9hcmRIZWxwZXIubW0gKi87IH07CiAJCUFC
OUZCQkJCMEY4NTgyQjAwMDZBREM0MyAvKiBXZWJET01PcGVyYXRpb25zSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCOUZCQkJBMEY4NTgy
QjAwMDZBREM0MyAvKiBXZWJET01PcGVyYXRpb25zSW50ZXJuYWwuaCAqLzsgfTsKIAkJQUJEREYy
MEQwOEVCMEREQzAwMUUxMjQxIC8qIFdlYkRvd25sb2FkSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCRERGMjBDMDhFQjBEREMwMDFFMTI0
MSAvKiBXZWJEb3dubG9hZEludGVybmFsLmggKi87IH07CisJCUI2Q0U1QzI0MTAwQkM1Q0UwMDIx
OTkzNiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjY4MDQ5NzIwRkZCQ0VDMTAwOUY3RjYyIC8qIFdlYkFwcGxp
Y2F0aW9uQ2FjaGUubW0gKi87IH07CisJCUI2Q0U1QzI1MTAwQkM1RjUwMDIxOTkzNiAvKiBXZWJB
cHBsaWNhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCNjgwNDk3MTBGRkJDRUMxMDA5RjdGNjIgLyogV2ViQXBwbGljYXRpb25DYWNoZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMkU0
NjREMEZEOEE5NjgwMEE5RDlERSAvKiBXZWJWaWV3RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRTQ2NEIwRkQ4QTk2ODAwQTlEOURFIC8qIFdl
YlZpZXdEYXRhLmggKi87IH07CiAJCUJDMkU0NjRFMEZEOEE5NjgwMEE5RDlERSAvKiBXZWJWaWV3
RGF0YS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MkU0NjRDMEZEOEE5NjgwMEE5RDlERSAvKiBXZWJWaWV3RGF0YS5tbSAqLzsgfTsKIAkJQkM1NDJD
NDIwRkQ3NzY2RjAwRDhBQjVEIC8qIFdlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU0MkM0MDBG
RDc3NjZGMDBEOEFCNUQgLyogV2ViRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hpbmcuaCAqLzsg
fTsKQEAgLTU2NCw2ICs1NjYsOCBAQAogCQlBN0QzQzVCQjBCNTc3M0M1MDAyQ0E0NTAgLyogV2Vi
UGFzdGVib2FyZEhlbHBlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYlBhc3RlYm9hcmRIZWxwZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUFCOUZCQkJBMEY4NTgyQjAwMDZBREM0MyAvKiBXZWJET01PcGVyYXRpb25zSW50ZXJuYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRE9NT3BlcmF0aW9uc0ludGVybmFs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCRERGMjBDMDhFQjBEREMwMDFFMTI0
MSAvKiBXZWJEb3dubG9hZEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRvd25sb2FkSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCUI2ODA0OTcxMEZG
QkNFQzEwMDlGN0Y2MiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkFwcGxpY2F0aW9uQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQjY4MDQ5NzIwRkZCQ0VDMTAwOUY3RjYyIC8qIFdlYkFwcGxpY2F0aW9uQ2Fj
aGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBcHBsaWNh
dGlvbkNhY2hlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJFNDY0QjBGRDhB
OTY4MDBBOUQ5REUgLyogV2ViVmlld0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViVmlld0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyRTQ2
NEMwRkQ4QTk2ODAwQTlEOURFIC8qIFdlYlZpZXdEYXRhLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlld0RhdGEubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDNTQyQzQwMEZENzc2NkYwMEQ4QUI1RCAvKiBXZWJEZWxlZ2F0ZUltcGxlbWVu
dGF0aW9uQ2FjaGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEZWxl
Z2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTEzMyw2ICsxMTM3LDggQEAKIAkJCQkxNEQ4MjUyRDBBRjk1NTA5MDAwNEYwNTcgLyogV2Vi
Q2hyb21lQ2xpZW50LmggKi8sCiAJCQkJMTREODI1MkUwQUY5NTUwOTAwMDRGMDU3IC8qIFdlYkNo
cm9tZUNsaWVudC5tbSAqLywKIAkJCQkwNjVBRDVBMTBCMEMzMkM3MDA1QTJCMUQgLyogV2ViQ29u
dGV4dE1lbnVDbGllbnQuaCAqLywKKwkJCQlCNjgwNDk3MTBGRkJDRUMxMDA5RjdGNjIgLyogV2Vi
QXBwbGljYXRpb25DYWNoZS5oICovLAorCQkJCUI2ODA0OTcyMEZGQkNFQzEwMDlGN0Y2MiAvKiBX
ZWJBcHBsaWNhdGlvbkNhY2hlLm1tICovLAogCQkJCTA2NUFENUEyMEIwQzMyQzcwMDVBMkIxRCAv
KiBXZWJDb250ZXh0TWVudUNsaWVudC5tbSAqLywKIAkJCQlBNzA5MzZBRDBCNTYwOERDMDBDREI0
OEUgLyogV2ViRHJhZ0NsaWVudC5oICovLAogCQkJCUE3MDkzNkFFMEI1NjA4REMwMENEQjQ4RSAv
KiBXZWJEcmFnQ2xpZW50Lm1tICovLApAQCAtMTI2Niw2ICsxMjcyLDcgQEAKIAkJCQkxQUFGNUNF
QzBFRERFMUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0UHJveHkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBQUY1Q0VFMEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkRCRTlGMEYyNTFFM0EwMDM2RjhBNiAv
KiBQcm94eUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNkNFNUMyNTEwMEJDNUY1MDAy
MTk5MzYgLyogV2ViQXBwbGljYXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEw
OUEwODI0QkYwMTAwOERGMDM4IC8qIFdlYkFyY2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVE
RTkyRkVGMEJENzAxN0UwMDU5QTVGRCAvKiBXZWJBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5Mzk4MTAyOTA4MjRCRjAxMDA4REYwMzggLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xNjU2LDYgKzE2NjMsNyBAQAogCQkJCTkzOTgxMEREMDgyNEJG
MDEwMDhERjAzOCAvKiBucGFwaS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDQ0ZGRDEzMEIxRjgx
RjIwMDJFRTkyNiAvKiBPbGRXZWJBc3NlcnRpb25zLmMgaW4gU291cmNlcyAqLywKIAkJCQkxQTJE
QkVBMDBGMjUxRTNBMDAzNkY4QTYgLyogUHJveHlJbnN0YW5jZS5tbSBpbiBTb3VyY2VzICovLAor
CQkJCUI2Q0U1QzI0MTAwQkM1Q0UwMDIxOTkzNiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMUQwODI0QkYwMTAwOERGMDM4IC8qIFdlYkFyY2hpdmUu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBDRjA4MjRCRjAxMDA4REYwMzggLyogV2ViQXV0
aGVudGljYXRpb25QYW5lbC5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwQkMwODI0QkYwMTAw
OERGMDM4IC8qIFdlYkJhY2tGb3J3YXJkTGlzdC5tbSBpbiBTb3VyY2VzICovLApJbmRleDogV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDQ1ODU2KQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAwOS0wNy0xNCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QXBwbGljYXRpb25DYWNoZSBzaG91bGQgaGF2ZSBzaXplIGxpbWl0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMAorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xp
ZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKToKKyAgICAgICAgQWRkcyBlbXB0eSBpbXBsZW1l
bnRhdGlvbiBvZiByZWFjaGVkTWF4QXBwQ2FjaGVTaXplLgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5oOgorCiAyMDA5LTA3LTEzICBHdXN0YXZvIE5vcm9uaGEgU2ls
dmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFVucmV2aWV3
ZWQuIExhdGUgTkVXUyBmaWxlIGZvciAxLjEuMTEuCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCShyZXZpc2lvbiA0NTc1OSkKKysrIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUxLDYgKzQ1MSwxNCBAQCB2b2lkIENocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1
b3RhCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCit2
b2lkIENocm9tZUNsaWVudDo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVl
ZGVkKQoreworICAgIC8vIEZJWE1FOiBGcmVlIHNvbWUgc3BhY2UuCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKyNlbmRpZgorCiB2b2lkIENocm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKEZyYW1l
KiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gcHJwRmlsZUNob29zZXIpCiB7CiAgICAgUmVmUHRy
PEZpbGVDaG9vc2VyPiBjaG9vc2VyID0gcHJwRmlsZUNob29zZXI7CkluZGV4OiBXZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgJKHJldmlzaW9uIDQ1NzU5KQorKysg
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAkod29ya2luZyBjb3B5
KQpAQCAtMTAwLDYgKzEwMCw5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogI2lmIEVOQUJMRShEQVRB
QkFTRSkKICAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3Jl
OjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwogI2VuZGlmCisjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlYWNoZWRNYXhB
cHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7CisjZW5kaWYKICAgICAgICAgdmlydHVh
bCB2b2lkIHJ1bk9wZW5QYW5lbChXZWJDb3JlOjpGcmFtZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6
RmlsZUNob29zZXI+KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdl
KGNvbnN0IFdlYkNvcmU6Ok5vZGUqKSB7IH0KSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTg1NikKKysrIFdl
YktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDkt
MDctMTQgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUgc2hv
dWxkIGhhdmUgc2l6ZSBsaW1pdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI3MDAKKworICAgICAgICBBZGRzIHRoZSBXZWJBcHBsaWNhdGlvbkNhY2hl
IGNsYXNzIHRoYXQgaXMKKyAgICAgICAgdXNlZCBieSB0aGUgRHVtcFJlbmRlclRyZWUgdGVzdCBh
cHBsaWNhdGlvbiB0bworICAgICAgICBjb25maWd1cmUgdGhlIEFwcGxpY2F0aW9uIENhY2hlIG1h
eGltdW0gc2l6ZS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2Fj
aGUuaDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQXBwbGljYXRpb25DYWNo
ZS5tbTogQWRkZWQuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAo
V2ViQ2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKToKKyAgICAgICAgQWRkcyBl
bXB0eSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVhY2hlZE1heEFwcENhY2hlU2l6ZSBjYWxsYmFj
ay4KKyAgICAgICAgKiBXZWJLaXQuZXhwOgorCiAyMDA5LTA3LTEzICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3Rl
aW4sIEFkYW0gUm9iZW4uCkluZGV4OiBXZWJLaXQvbWFjL1dlYktpdC5leHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9XZWJLaXQuZXhwCShyZXZpc2lvbiA0NTc1OSkKKysrIFdlYktpdC9tYWMv
V2ViS2l0LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAKKy5vYmpjX2NsYXNzX25h
bWVfV2ViQXBwbGljYXRpb25DYWNoZQogLm9iamNfY2xhc3NfbmFtZV9XZWJBcmNoaXZlCiAub2Jq
Y19jbGFzc19uYW1lX1dlYkJhY2tGb3J3YXJkTGlzdAogLm9iamNfY2xhc3NfbmFtZV9XZWJDYWNo
ZQpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNh
Y2hlLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkFwcGxp
Y2F0aW9uQ2FjaGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KKworQGludGVyZmFjZSBXZWJBcHBsaWNhdGlvbkNhY2hlOiBOU09iamVjdCB7
Cit9CisKKysgKHZvaWQpc2V0TWF4aW11bVNpemU6KHVuc2lnbmVkIGxvbmcgbG9uZylzaXplOwor
QGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQXBwbGljYXRp
b25DYWNoZS5tbQkocmV2aXNpb24gMCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
QXBwbGljYXRpb25DYWNoZS5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJXZWJBcHBs
aWNhdGlvbkNhY2hlLmgiCisjaW1wb3J0IDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitAaW1wbGVtZW50YXRpb24gV2ViQXBw
bGljYXRpb25DYWNoZQorCisrICh2b2lkKXNldE1heGltdW1TaXplOih1bnNpZ25lZCBsb25nIGxv
bmcpc2l6ZQoreworICAgIGNhY2hlU3RvcmFnZSgpLmVtcHR5KCk7CisgICAgY2FjaGVTdG9yYWdl
KCkudmFjdXVtRGF0YWJhc2VGaWxlKCk7CisgICAgY2FjaGVTdG9yYWdlKCkuc2V0TWF4aW11bVNp
emUoc2l6ZSk7Cit9CisKK0BlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNDU3NTkpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDkg
QEAgcHVibGljOgogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBk
YXRhYmFzZU5hbWUpOwogI2VuZGlmCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykKKyAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNl
TmVlZGVkKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygp
OwogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpJbmRleDogV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDQ1NzU5KQorKysgV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHdvcmtpbmcgY29weSkK
QEAgLTUzNiw2ICs1MzYsMTMgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4Y2VlZGVkRGF0YWJh
c2VRdQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAjZW5kaWYKKworI2lmIEVO
QUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCit2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVh
Y2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKQoreworICAgIC8vIEZJWE1F
OiBGcmVlIHNvbWUgc3BhY2UuCit9CisjZW5kaWYKICAgICAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50
Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpCiB7CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1ODU2KQorKysgV2Vi
S2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA5LTA3
LTE0ICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlIHNob3Vs
ZCBoYXZlIHNpemUgbGltaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyNzAwCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6cmVhY2hlZE1heEFwcENh
Y2hlU2l6ZSk6CisgICAgICAgIEFkZHMgZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlYWNo
ZWRNYXhBcHBDYWNoZVNpemUgY2FsbGJhY2suCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuaDoKKwogMjAwOS0wNy0xMyAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVz
bWFubkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQXJpeWEgSGlkYXlhdC4KSW5k
ZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkocmV2aXNp
b24gNDU3NTkpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNiArNDAwLDE0IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6
OmV4Y2VlZGVkRGF0YWJhc2VRdW8KIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VC
X0FQUExJQ0FUSU9OUykKK3ZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJlYWNoZWRNYXhBcHBDYWNoZVNp
emUoaW50NjRfdCBzcGFjZU5lZWRlZCkKK3sKKyAgICAvLyBGSVhNRTogRnJlZSBzb21lIHNwYWNl
LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwogdm9pZCBDaHJvbWVDbGllbnRR
dDo6cnVuT3BlblBhbmVsKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gcHJw
RmlsZUNob29zZXIpCiB7CiAgICAgUmVmUHRyPEZpbGVDaG9vc2VyPiBmaWxlQ2hvb3NlciA9IHBy
cEZpbGVDaG9vc2VyOwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFF0LmgJKHJldmlzaW9uIDQ1NzU5KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAgICAgdmlydHVhbCB2b2lkIGV4
Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCisjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgdmlydHVhbCBpbnQ2NF90
IG1heEFwcENhY2hlU2l6ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFwcENh
Y2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKTsKKyNlbmRpZgogICAgICAgICB2aXJ0dWFsIHZv
aWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pOwogCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopIHsgfQpJbmRl
eDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ1ODU2KQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0wNy0xNCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlw
QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQXBwbGljYXRpb25DYWNoZSBzaG91bGQgaGF2ZSBzaXplIGxpbWl0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMAorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNocm9tZUNs
aWVudDo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZSk6CisgICAgICAgIEFkZHMgZW1wdHkgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIHJlYWNoZWRNYXhBcHBDYWNoZVNpemUgY2FsbGJhY2suCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisKIDIwMDktMDctMTMgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFk
YW0gUm9iZW4uCkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwCShyZXZpc2lvbiA0NTc1OSkKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQzLDYgKzU0MywxNSBAQCB2
b2lkIFdlYkNocm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1CiB9CiAjZW5kaWYKIAorI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaW5jbHVkZSAiQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UuaCIKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZWFjaGVkTWF4QXBwQ2FjaGVT
aXplKGludDY0X3Qgc3BhY2VOZWVkZWQpCit7CisgICAgLy8gRklYTUU6IEZyZWUgc29tZSBzcGFj
ZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpCiB7CiAgICAgV2ViSGlzdG9yeSogaGlzdG9yeSA9
IFdlYkhpc3Rvcnk6OnNoYXJlZEhpc3RvcnkoKTsKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNDU3NTkpCisrKyBXZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYs
NiArMTA2LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1
b3RhKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgdmlydHVhbCB2b2lkIHJl
YWNoZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7CisjZW5kaWYKKwogICAg
IHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOwogCiAgICAgdmlydHVhbCBib29s
IHBhaW50Q3VzdG9tU2Nyb2xsYmFyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OlNjcm9sbGJhckNvbnRyb2xTaXplLCAKSW5kZXg6
IFdlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxvZwko
cmV2aXNpb24gNDU4NTYpCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMDctMTQgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFwcGxpY2F0aW9uQ2FjaGUgc2hvdWxkIGhhdmUgc2l6ZSBsaW1pdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MDAKKyAKKyAgICAgICAgKiBXZWJL
aXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNs
aWVudFd4OjpyZWFjaGVkTWF4QXBwQ2FjaGVTaXplKToKKyAgICAgICAgQWRkcyBlbXB0eSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgcmVhY2hlZE1heEFwcENhY2hlU2l6ZSBjYWxsYmFjay4KKyAgICAg
ICAgKiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4Lmg6CisKIDIwMDktMDctMTIgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFpbC5jb20+CiAKICAgICAgICAgU3BlY3VsYXRpdmUgYnVp
bGQgZml4IGFmdGVyIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzQ1Nzg2LgpJbmRl
eDogV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcAkocmV2aXNpb24g
NDU3NTkpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4Myw2ICszODMsMTMgQEAgdm9pZCBDaHJvbWVDbGllbnRXeDo6ZXhj
ZWVkZWREYXRhYmFzZVF1bwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKQordm9pZCBDaHJvbWVDbGllbnRXeDo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZShp
bnQ2NF90IHNwYWNlTmVlZGVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYK
Kwogdm9pZCBDaHJvbWVDbGllbnRXeDo6c2Nyb2xsKGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UmVjdCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdl
YktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guaAkocmV2aXNpb24gNDU3NTkpCisr
KyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTUsNiArMTE1LDExIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAg
dmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYp
OwogI2VuZGlmCisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIHZp
cnR1YWwgdm9pZCByZWFjaGVkTWF4QXBwQ2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpOwor
I2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0
cjxGaWxlQ2hvb3Nlcj4pOwogCiAgICAgdmlydHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShj
b25zdCBOb2RlKikgeyB9CkluZGV4OiBXZWJLaXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTg1NikKKysrIFdlYktpdFRvb2xz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDA5LTA3LTE0ICBB
bmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlIHNob3VsZCBoYXZl
IHNpemUgbGltaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNzAwCisKKyAgICAgICAgQWRkcyBhIG5ldyBtZXRob2Qgb24gdGhlIExheW91dFRlc3RD
b250cm9sbGVyIHRoYXQKKyAgICAgICAgYWxsb3dzIGEgSlMgdW5pdCB0ZXN0IHRvIGNvbmZpZ3Vy
ZSB0aGUgbWF4aW11bSBzaXplCisgICAgICAgIG9mIHRoZSBBcHBsaWNhdGlvbiBDYWNoZS4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKHNldEFwcENhY2hlTWF4aW11bVNpemVDYWxsYmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEFwcENhY2hlTWF4aW11bVNpemUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9M
YXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gv
TGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisKIDIwMDktMDctMTQgIExhc3psbyBHb21ib3Mg
IDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9u
IEhhdXNtYW5uLgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNDU3NTkpCisrKyBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4Nyw2ICs0ODcsMjIgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0QWNjZXB0c0VkaXRpbmdDYWxs
YgogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGlj
IEpTVmFsdWVSZWYgc2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAvLyBIYXMgbWFjIGltcGxlbWVudGF0aW9uCisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKworICAgIGRvdWJsZSBzaXplID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgTlVMTCk7CisgICAgaWYgKCFpc25hbihzaXplKSkKKyAgICAgICAgY29udHJvbGxl
ci0+c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KHNpemUpKTsKKyAgICAgICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworCit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFi
bGVkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIC8vIEhhcyBt
YWMgJiB3aW5kb3dzIGltcGxlbWVudGF0aW9uCkBAIC05MDYsNiArOTIyLDcgQEAgSlNTdGF0aWNG
dW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OgogICAgICAgICB7ICJyZXBhaW50U3dlZXBI
b3Jpem9udGFsbHkiLCByZXBhaW50U3dlZXBIb3Jpem9udGFsbHlDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJzZXRBY2NlcHRzRWRpdGluZyIsIHNldEFjY2VwdHNFZGl0aW5nQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAic2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQiLCBzZXRB
dXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNl
dEFwcENhY2hlTWF4aW11bVNpemUiLCBzZXRBcHBDYWNoZU1heGltdW1TaXplQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwgCiAgICAgICAgIHsgInNldENhbGxDbG9zZU9uV2ViVmlld3MiLCBzZXRDYWxsQ2xvc2VP
bldlYlZpZXdzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0Q2FuT3BlbldpbmRvd3Mi
LCBzZXRDYW5PcGVuV2luZG93c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldENhY2hl
TW9kZWwiLCBzZXRDYWNoZU1vZGVsQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24g
NDU3NTkpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHF1
ZXVlTm9uTG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpOwogICAgIHZvaWQgcXVldWVS
ZWxvYWQoKTsKICAgICB2b2lkIHNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNjZXB0c0VkaXRpbmcp
OworICAgIHZvaWQgc2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgcXVv
dGEpOwogICAgIHZvaWQgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCk7CiAgICAg
dm9pZCBzZXRDYWNoZU1vZGVsKGludCk7CiAgICAgdm9pZCBzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0
ZShib29sIHNldERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpOwpJbmRleDogV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJH
dGsuY3BwCShyZXZpc2lvbiA0NTc1OSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw2ICsz
MjYsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0YWJhc2VRdQogICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBw
Q2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50Cit9CisKIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0
aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJs
ZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCiB7ICAgIAogICAgIGdjaGFyKiBuYW1lID0g
SlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoYW5pbWF0aW9uTmFtZSk7CkluZGV4OiBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVy
TWFjLm1tCShyZXZpc2lvbiA0NTc1OSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzks
NyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgogI2ltcG9ydCA8
V2ViS2l0L0RPTURvY3VtZW50Lmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NRWxlbWVudC5oPgorI2lt
cG9ydCA8V2ViS2l0L1dlYkFwcGxpY2F0aW9uQ2FjaGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJC
YWNrRm9yd2FyZExpc3QuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJEYXRhYmFzZU1hbmFnZXJQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRGF0YVNvdXJjZS5oPgpAQCAtMTkwLDYgKzE5MSwx
MSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpCiAgICAgWyhFZGl0
aW5nRGVsZWdhdGUgKilbW21haW5GcmFtZSB3ZWJWaWV3XSBlZGl0aW5nRGVsZWdhdGVdIHNldEFj
Y2VwdHNFZGl0aW5nOm5ld0FjY2VwdHNFZGl0aW5nXTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkK
K3sKKyAgICBbV2ViQXBwbGljYXRpb25DYWNoZSBzZXRNYXhpbXVtU2l6ZTpzaXplXTsKK30KKwog
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQo
Ym9vbCBmbGFnKQogewogICAgIFtbW21haW5GcmFtZSB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gc2V0
QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQ6ZmxhZ107CkluZGV4OiBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5j
cHAJKHJldmlzaW9uIDQ1NzU5KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xh
eW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk5LDYgKzY5OSwx
MSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1CiAgICAgcHJpbnRm
KCJFUlJPUjogTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNlUXVvdGEoKSBub3QgaW1w
bGVtZW50ZWRcbiIpOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNo
ZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQoreworICAgIHByaW50ZigiRVJS
T1I6IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKCkgbm90IGlt
cGxlbWVudGVkXG4iKTsKK30KKwogYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmlt
YXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91
YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKIHsKICAgICBDT01QdHI8SURPTURvY3Vt
ZW50PiBkb2N1bWVudDsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91
dFRlc3RDb250cm9sbGVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCShyZXZpc2lvbiA0NTc1OSkKKysr
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNiArMjA2LDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldERhdGFiYXNlUXUKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9u
ZyBsb25nIHNpemUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCiB1bnNpZ25lZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogaW1wbGVtZW50CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTg1NikKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDA5
LTA3LTE0ICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KKworICAgICAgICBB
cHBsaWNhdGlvbkNhY2hlIHNob3VsZCBoYXZlIHNpemUgbGltaXQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzAwCisKKyAgICAgICAgQWRkcyBhIHVu
aXQgdGVzdCB0aGF0IGVuc3VyZXMgdGhhdCB0aGUgbWVjaGFuaXNtIHRoYXQKKyAgICAgICAgZW5m
b3JjZXMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYXBwbGljYXRpb24gY2FjaGUgaXMKKyAgICAg
ICAgd29ya2luZyBjb3JyZWN0bHkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2FwcGNhY2hlL21h
eC1zaXplLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9hcHBjYWNo
ZS9tYXgtc2l6ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2FwcGNhY2hlL3Jl
c291cmNlcy9tYXhzaXplLm1hbmlmZXN0OiBBZGRlZC4KKwogMjAwOS0wNy0xMyAgQnJhZHkgRWlk
c29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IExlb3BhcmQgcmVncmVzc2lv
biBJIGp1c3QgaW50cm9kdWNlZC4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2Fj
aGUvbWF4LXNpemUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvYXBwY2FjaGUvbWF4LXNpemUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9hcHBjYWNoZS9tYXgtc2l6ZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNCBAQAorQ2FjaGUgYSBtYW5pZmVzdCB0aGF0IGNvbnRhaW5zIGEg
cmVzb3VyY2UgdGhhdCBpcyB0b28gbGFyZ2UgdG8gZml0LiBUaGUgbGF5b3V0IHRlc3QgY29udHJv
bGxlciBzZXRzIGEgbWF4aW11bSBzaXplIG9mIDEwS0IgZm9yIHRoZSBhcHBsaWNhdGlvbiBjYWNo
ZSBkYXRhYmFzZSBmaWxlLgorCitTVUNDRVNTCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvYXBwY2FjaGUvbWF4LXNpemUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2FwcGNhY2hlL21heC1zaXplLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2FwcGNhY2hlL21heC1zaXplLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjggQEAKKzxodG1sIG1hbmlmZXN0PSJyZXNvdXJjZXMvbWF4c2l6ZS5tYW5pZmVzdCI+Cis8
Ym9keT4NCis8c2NyaXB0Pg0KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEFwcENhY2hlTWF4aW11bVNpemUoMTAg
KiAxMDI0KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCisgICAgeworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7CisgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLnNldEFwcENhY2hlTWF4aW11bVNpemUoMTAwICogMTAyNCAqIDEwMjQpOworICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgYXBwbGljYXRpb25DYWNoZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7IGxvZygi
U1VDQ0VTUyIpOyB9CisgICAgYXBwbGljYXRpb25DYWNoZS5vbmNhY2hlZCA9IGZ1bmN0aW9uKCkg
eyBsb2coIkZBSUw6IHJlY2VpdmVkIHVuZXhwZWN0ZWQgY2FjaGVkIGV2ZW50Iik7IH0KKyAgICBh
cHBsaWNhdGlvbkNhY2hlLm9ubm91cGRhdGUgPSBmdW5jdGlvbigpIHsgbG9nKCJGQUlMOiByZWNl
aXZlZCB1bmV4cGVjdGVkIG9ubm91cGRhdGUgZXZlbnQiKTsgfQorICAgIGFwcGxpY2F0aW9uQ2Fj
aGUub251cGRhdGVyZWFkeSA9IGZ1bmN0aW9uKCkgeyBsb2coIkZBSUw6IHJlY2VpdmVkIHVuZXhw
ZWN0ZWQgb251cGRhdGVyZWFkeSBldmVudCIpOyB9Cis8L3NjcmlwdD4KKw0KKzxwPkNhY2hlIGEg
bWFuaWZlc3QgdGhhdCBjb250YWlucyBhIHJlc291cmNlIHRoYXQgaXMgdG9vIGxhcmdlIHRvIGZp
dC4gVGhlIGxheW91dCB0ZXN0IGNvbnRyb2xsZXIgc2V0cyBhIG1heGltdW0gc2l6ZSBvZiAxMEtC
IGZvciB0aGUgYXBwbGljYXRpb24gY2FjaGUgZGF0YWJhc2UgZmlsZS48L3A+DQorPGRpdiBpZD1y
ZXN1bHQ+PC9kaXY+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2FwcGNhY2hlL3Jlc291cmNlcy9tYXhzaXplLm1hbmlmZXN0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvYXBwY2FjaGUvcmVzb3VyY2VzL21heHNpemUubWFuaWZl
c3QJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2FwcGNhY2hlL3Jlc291
cmNlcy9tYXhzaXplLm1hbmlmZXN0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NBQ0hF
IE1BTklGRVNUCisjdjEKK2FiZS5wbmcK
</data>
<flag name="review"
          id="17241"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>