<?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>16924</bug_id>
          
          <creation_ts>2008-01-18 12:55:36 -0800</creation_ts>
          <short_desc>Shared PluginDatabase, PluginPackage, and PlugInInfoStore Implementations</short_desc>
          <delta_ts>2008-02-25 14:10:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Plug-ins</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rodney Dawes">dobey</reporter>
          <assigned_to name="Rodney Dawes">dobey</assigned_to>
          <cc>alp</cc>
    
    <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>eric</cc>
    
    <cc>jhoneycutt</cc>
    
    <cc>mrowe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>67609</commentid>
    <comment_count>0</comment_count>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-18 12:55:36 -0800</bug_when>
    <thetext>The attached patch moves the majority of these APIs into shared implementations, with platform-specific portions remaining in platform-specific sources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67610</commentid>
    <comment_count>1</comment_count>
      <attachid>18529</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-18 12:57:28 -0800</bug_when>
    <thetext>Created attachment 18529
Patch to provide shared API classes and implementations

This patch affects the Windows, GTK+, and Qt builds. Please test that the Windows and Qt builds still build and work as expected, before landing this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67613</commentid>
    <comment_count>2</comment_count>
      <attachid>18531</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-18 13:24:11 -0800</bug_when>
    <thetext>Created attachment 18531
Updated to use String::fromUTF8 with glib strings

This patch just switches to using fromUTF8 for creating Strings from glib strings. Still needs to be built/tested on win32 and qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67826</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-01-20 23:00:57 -0800</bug_when>
    <thetext>A few things jump out at me.  You&apos;ve taken two member variables of PluginPackage and turned them into file-level statics, which seems like a bad way for passing data between functions.

+static DWORD m_fileVersionLS = 0;
+static DWORD m_fileVersionMS = 0;

You&apos;ve moved isPluginBlacklisted to a static function rather than a member function, but it appears to need access to the instance to check name() and fileName(), and the two file version variables mentioned above.

The new PluginViewWin::createPluginView is not declared correctly in the header.  It should be declared as static and have the class name omitted.


There&apos;s a small change in two places in PluginDatabase that needs some justification:

     for (PluginSet::const_iterator it = m_plugins.begin(); it != end; ++it) {
         if ((*it)-&gt;mimeToDescriptions().contains(key)) {
             plugin = (*it).get();
-            // prefer plugins in our own plugins directory
-            if (plugin-&gt;parentDirectory() == ourPath)
-                break;
         }
     }

Why is it ok to remove this?

I&apos;m not sure that it makes sense to put unloadModule in FileSystem.cpp either.  It doesn&apos;t seem to be all that related to the file system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67975</commentid>
    <comment_count>4</comment_count>
      <attachid>18604</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-22 13:17:48 -0800</bug_when>
    <thetext>Created attachment 18604
Updated patch to fix issues

This patch resolves the issues presented by Mark in review of the previous version.

As for the FileSystem concern, it is probably the wrong name for the file, as none of the operations in it are actually filesystem-dependent. They are file operations, not filesystem operations. A module is a special type of file. I think  the method to unload it in a platform-independent way belongs in the same place as closing a normal file in a platform-independent way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68027</commentid>
    <comment_count>5</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-23 06:32:11 -0800</bug_when>
    <thetext>This looks OK to me. Any comments on the Win side?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68033</commentid>
    <comment_count>6</comment_count>
      <attachid>18619</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-23 08:43:26 -0800</bug_when>
    <thetext>Created attachment 18619
Updated patch

Discovered a crash in the gtk+ build with the patch. Fixed the crash and updated TemporaryLinkStubs for Qt as well in this revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68034</commentid>
    <comment_count>7</comment_count>
      <attachid>18620</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-23 08:55:48 -0800</bug_when>
    <thetext>Created attachment 18620
Updated patch with ChangeLog

Oops. Forgot to svn resolved WebCore/ChangeLog last time. This includes the missing ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68373</commentid>
    <comment_count>8</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-27 12:06:46 -0800</bug_when>
    <thetext>Mark, can you confirm that this doesn&apos;t break anything on Windows?

I think the best way to break the current deadlock is to get this landed and work on it in-tree.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68391</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-01-27 15:37:53 -0800</bug_when>
    <thetext>It does break things on Windows.  I mentioned some issues to Rodney via IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68467</commentid>
    <comment_count>10</comment_count>
      <attachid>18738</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-28 11:27:16 -0800</bug_when>
    <thetext>Created attachment 18738
Updated patch to resolve some of mark&apos;s issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69357</commentid>
    <comment_count>11</comment_count>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-04 09:04:26 -0800</bug_when>
    <thetext>Can we PLEASE get this reviewed so we can get it landed? It&apos;s very important, and the longer it takes to get reviewed and landed, the bigger the patch is going to get.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69381</commentid>
    <comment_count>12</comment_count>
      <attachid>18916</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-04 13:06:30 -0800</bug_when>
    <thetext>Created attachment 18916
Updated patch against svn trunk r29968

Here&apos;s an updated version against r29968. Can we PLEASE get this reviewed/landed? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69398</commentid>
    <comment_count>13</comment_count>
      <attachid>18916</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-04 14:57:49 -0800</bug_when>
    <thetext>Comment on attachment 18916
Updated patch against svn trunk r29968

-        if (compareFileVersion(silverlightPluginMinRequiredVersionMS, silverlightPluginMinRequiredVersionLS) &gt;= 0)
+        if (info-&gt;dwFileVersionMS &lt; silverlightPluginMinRequiredVersionMSDWORD ||
+            (info-&gt;dwFileVersionMS == silverlightPluginMinRequiredVersionMSDWORD &amp;&amp; info-&gt;dwFileVersionLS &lt; silverlightPluginMinRequiredVersionLSDWORD))

You want the new version of this, with the compareFileVersion function. Not the old version.

This patch makes too many changes at once, making it unnecessarily large, and making it harder to get review.

I suggest we do the renaming part of this patch first, separately, so we can more clearly see the changes other than renaming. Lets use the do-webcore-rename script to do the renaming.

Then a next patch could be to just add the new FileSystem functions.

Then we can see what&apos;s left. The patch remaining after taking those steps should be way smaller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69407</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-02-04 15:22:21 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=18916) [edit]
&gt; Updated patch against svn trunk r29968
&gt; 
&gt; Here&apos;s an updated version against r29968. Can we PLEASE get this
&gt; reviewed/landed? Thanks.
&gt; 

Rodney, this patch doesn&apos;t apply cleanly against r29968.  Are you sure that&apos;s the right revision?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69414</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-02-04 17:05:02 -0800</bug_when>
    <thetext>I&apos;ve been looking at this and I think the first step should be:
PluginDatabaseWin -&gt; PluginDatabase
PluginPackageWin -&gt; PluginPackage
PlugInInfoStore -&gt; PluginInfoStore (I&apos;m not sure whether we want Plugin or PlugIn, but either way I think we should be consistent about this while we&apos;re renaming things)

It should also move the PluginInfoStore header into WebCore/plugins from WebCore/platform, and the mac and qt implementations of PlugInInfoStore into plugins/{mac,qt}.

Using do-webcore-renames will result in WebCore/plugins/win/PluginDatabaseWin.cpp being renamed to WebCore/plugins/win/PluginDatabase.cpp when we&apos;ll probably want it to eventually end up staying at the original location and only containing the Windows-specific bits of code.  I think it would be fine to have it renamed briefly and then move it out of plugins/win/ into plugins/ in a later revision, which can also move the Windows-specific bits back to PluginDatabaseWin.cpp.

Does this sound like a reasonable first step?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69472</commentid>
    <comment_count>16</comment_count>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-05 07:28:25 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Rodney, this patch doesn&apos;t apply cleanly against r29968.  Are you sure that&apos;s
&gt; the right revision?

That&apos;s the revision &quot;svn info&quot; tells me. What failed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69474</commentid>
    <comment_count>17</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-02-05 07:33:43 -0800</bug_when>
    <thetext>Weird!  A rather large hunk in PluginPackage.cpp failed to apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69489</commentid>
    <comment_count>18</comment_count>
      <attachid>18938</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-05 12:04:00 -0800</bug_when>
    <thetext>Created attachment 18938
Patch to only do the renaming of API, and moving of files

Here is a patch which only does the moving of files, and renaming of API. PluginInfoStore.cpp and npapi.cpp will be able to built cross-platform, so they have also been moved. Can we please get this in so the rest of the refactoring can go more smoothly? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69490</commentid>
    <comment_count>19</comment_count>
      <attachid>18938</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-02-05 12:28:36 -0800</bug_when>
    <thetext>Comment on attachment 18938
Patch to only do the renaming of API, and moving of files

Looks good, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69491</commentid>
    <comment_count>20</comment_count>
      <attachid>18938</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-02-05 12:28:58 -0800</bug_when>
    <thetext>Comment on attachment 18938
Patch to only do the renaming of API, and moving of files

Looks good, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69514</commentid>
    <comment_count>21</comment_count>
      <attachid>18938</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-02-05 14:40:56 -0800</bug_when>
    <thetext>Comment on attachment 18938
Patch to only do the renaming of API, and moving of files

Landed this part of the change in r30015, with two build fixes shortly after.  Clearing review flag to get this change out of the commit queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69599</commentid>
    <comment_count>22</comment_count>
      <attachid>18966</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-06 12:42:20 -0800</bug_when>
    <thetext>Created attachment 18966
Patch for FileSystem changes

This patch adds two new methods to FileSystem.h, and implements them for the GTK+ and Windows ports. It also defines two new cross-platform types, and stubs out the new and missing methods for the Qt and Wx ports. These new methods are needed for the cross-platform plug-in api refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69703</commentid>
    <comment_count>23</comment_count>
      <attachid>18966</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-07 13:29:27 -0800</bug_when>
    <thetext>Comment on attachment 18966
Patch for FileSystem changes

Clearing review flag as the changes for Wx need some additional fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69705</commentid>
    <comment_count>24</comment_count>
      <attachid>18989</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-07 14:22:18 -0800</bug_when>
    <thetext>Created attachment 18989
Updated patch to fix a few small issues with Wx and Qt changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69720</commentid>
    <comment_count>25</comment_count>
      <attachid>18989</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2008-02-07 17:45:58 -0800</bug_when>
    <thetext>Comment on attachment 18989
Updated patch to fix a few small issues with Wx and Qt changes

Looks good to me. Few small comments:

+/* Methods for dealing with loadable modules */

We prefer // style comments.

+ * Copyright (C) 2008 Collabora, LTd. All rights reserved.

Typo: LTd.

+String pathGetFileName(const String&amp; path)
+{
+    notImplemented();
+    return String();
+}
+
+bool unloadModule(PlatformModule module)
+{
+    notImplemented();
+    return false;
+}

No need to name the args here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69772</commentid>
    <comment_count>26</comment_count>
      <attachid>19004</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-08 07:15:27 -0800</bug_when>
    <thetext>Created attachment 19004
Updated patch per Jon&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69774</commentid>
    <comment_count>27</comment_count>
      <attachid>19004</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-02-08 08:26:08 -0800</bug_when>
    <thetext>Comment on attachment 19004
Updated patch per Jon&apos;s comments

Landed in r30092. Clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69896</commentid>
    <comment_count>28</comment_count>
      <attachid>18989</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-02-08 22:49:45 -0800</bug_when>
    <thetext>Comment on attachment 18989
Updated patch to fix a few small issues with Wx and Qt changes

Clearing review flag on obsolete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70680</commentid>
    <comment_count>29</comment_count>
      <attachid>19120</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-14 11:52:20 -0800</bug_when>
    <thetext>Created attachment 19120
Patch to implement PluginDatabase as shared and use PluginInfoStore for GTK+, Qt, and Wx</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70721</commentid>
    <comment_count>30</comment_count>
      <attachid>19120</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2008-02-14 20:33:50 -0800</bug_when>
    <thetext>Comment on attachment 19120
Patch to implement PluginDatabase as shared and use PluginInfoStore for GTK+, Qt, and Wx

This mostly looks good, although it does break the Windows build, because PluginPackage::storeFileVersion was removed but is still in PluginPackageWin.cpp.

I think a good fix would be to add an abstraction for a PlatformModuleVersion and make storeModuleVersion a static helper function.

+PluginSet PluginDatabase::getPluginsInPaths() const { notImplemented(); PluginSet plugins; return plugins;}
+Vector&lt;String&gt; PluginDatabase::defaultPluginPaths() { notImplemented(); Vector&lt;String&gt; paths; return paths;}

No need to name the return values, need a space before closing brace.

+bool PluginPackage::fetchInfo() { notImplemented(); return false;}
+unsigned PluginPackage::hash() const { notImplemented(); return 0;}

Need a space before closing brace.

r- for the build breakage, but I think this looks great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70788</commentid>
    <comment_count>31</comment_count>
      <attachid>19142</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-15 12:45:02 -0800</bug_when>
    <thetext>Created attachment 19142
Updated patch per Jon&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71276</commentid>
    <comment_count>32</comment_count>
      <attachid>19142</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2008-02-20 12:18:38 -0800</bug_when>
    <thetext>Comment on attachment 19142
Updated patch per Jon&apos;s comments

PluginView::determineQuirks() on Windows uses PluginPackage::compareFileVersion(), which is no longer available.

I think there should be a cross-platform abstraction for a module version, even if it&apos;s only used on Windows for now. I think it&apos;s likely that other platforms will eventually have the same uses for it that Windows has: preferring the latest version of several installed plug-ins that handle the same MIME type, or determining plug-in idiosyncrasies specific to only some versions.

My suggestion is then:

#if PLATFORM(WIN)
typedef struct { unsigned leastSig; unsigned mostSig; } PlatformModuleVersion;
#else
typedef unsigned PlatformModuleVersion;
#endif

int PluginPackage::compareFileVersion(int, int) const -&gt;
int PluginPackage::compareModuleVersion(const PlatformModuleVersion&amp;) const

etc. Does this seem like a good idea to you?

r- for the build breakage mentioned above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71320</commentid>
    <comment_count>33</comment_count>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-20 15:02:01 -0800</bug_when>
    <thetext>Sounds plausible. I&apos;ll get an updated patch together asap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71397</commentid>
    <comment_count>34</comment_count>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-21 10:47:19 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 19142 [edit])
&gt; PluginView::determineQuirks() on Windows uses
&gt; PluginPackage::compareFileVersion(), which is no longer available.
&gt;
&gt; etc. Does this seem like a good idea to you?

Should we just move ::determineQuirks() to PluginPackage instead? It seems like the more appropriate place for it. It doesn&apos;t seem like there is any code specific to the PluginView inside determineQuirks(), while it is specific to the PluginPackage. It seems like it belongs there instead, reading the code, and moving it would allow us to clean up some of the code there as well.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71528</commentid>
    <comment_count>35</comment_count>
      <attachid>19284</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-22 16:14:04 -0800</bug_when>
    <thetext>Created attachment 19284
Updated patch to move determineQuirks to PluginPackage also

Here&apos;s an updated patch. This version also moves the quirks to PluginPackage instead of PluginView, as they are issues with the plug-ins themselves, and not the view, and other classes may want to peruse them in the future, that don&apos;t use a view, and don&apos;t depend on PluginView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71657</commentid>
    <comment_count>36</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-02-23 17:55:54 -0800</bug_when>
    <thetext>1.  PluginPackageWin.cpp

You are missing an include:
#include &quot;MIMETypeRegistry.h&quot;

-    , m_fileVersionLS(0)
-    , m_fileVersionMS(0)
+    , m_moduleVersion(0)

This fails to compile, but can be made to work by modifying PluginPackage.h as follows.  You need the one-argument version to allow initialization with zero, the two-value version for the other structure declarations.

#if PLATFORM(WIN)
struct PlatformModuleVersion
{
     unsigned leastSig;
     unsigned mostSig;

     PlatformModuleVersion(unsigned) 
         : leastSig(0)
         , mostSig(0)
     {
     }

     PlatformModuleVersion(unsigned lsb, unsigned msb) 
         : leastSig(lsb)
         , mostSig(msb)
     {
     }

};
#else
typedef unsigned PlatformModuleVersion;
#endif


2. This method declaration looks wrong:

-int PluginPackage::compareFileVersion(unsigned compareVersionMS, unsigned compareVersionLS) const
+int PluginPackage::compareFileVersion(const PlatformModuleVersion&amp; compareVersion)

Why are you losing the &apos;const&apos; here?  I get a compile failure due to this under Windows.  You probably didn&apos;t notice this since it doesn&apos;t get built on your platform.

3. The use of a structure for the PlatformModuleVersion means that this:
    static const PlatformModuleVersion slPluginMinRequired = {0x51BE0000, 0x00010000};
must become this:
    static const PlatformModuleVersion slPluginMinRequired(0x51BE0000, 0x00010000);

likewise:
    static const PlatformModuleVersion lastKnownUnloadableRealPlayerVersion = { 0x000B0B24, 0x00060000 };

4. You have the wrong classname used for &apos;determineQuirks&apos; in PluginPackageWin.cpp:
    void PluginView::determineQuirks(const String&amp; mimeType)
should be:
    void PluginPackage::determineQuirks(const String&amp; mimeType)

5. Typo:
    m_mdouleVersion.mostSig = info-&gt;dwFileVersionMS;
should be
    m_moduleVersion.mostSig = info-&gt;dwFileVersionMS;

6.  Use of the OwnArrayPtr prevents the LPVOID signature getVersion function from working.  I got things to compile by using the get() method, which produces a char* which will implicitly cast to a void*.  This seems to be what was done elsewhere in the file.

    m_name = getVersionInfo(versionInfoData, &quot;ProductName&quot;);
    m_description = getVersionInfo(versionInfoData &quot;FileDescription&quot;);
becomes
    m_name = getVersionInfo(versionInfoData.get(), &quot;ProductName&quot;);
    m_description = getVersionInfo(versionInfoData.get(), &quot;FileDescription&quot;);

likewise:
        fastFree(versionInfoData);
becomes:
        fastFree(versionInfoData.get());

and:
    if (!VerQueryValue(versionInfoData, TEXT(&quot;\\&quot;), (LPVOID*) &amp;info, &amp;infoSize) || infoSize &lt; sizeof(VS_FIXEDFILEINFO))
        return false;
becomes:
    if (!VerQueryValue(versionInfoData.get(), TEXT(&quot;\\&quot;), (LPVOID*) &amp;info, &amp;infoSize) || infoSize &lt; sizeof(VS_FIXEDFILEINFO))
        return false;

7.  The method bool PluginPackage::fetchInfo(){  has some strange indenting and is missing a curly brace.  The culprit appears to be this line:

    if (m_name.isNull() || m_description.isNull()) {
        fastFree(versionInfoData);

Note that this is also mentioned above due to the LPVOID casting problem.  I suspect the curly brace is not needed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71878</commentid>
    <comment_count>37</comment_count>
      <attachid>19348</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-25 07:45:02 -0800</bug_when>
    <thetext>Created attachment 19348
Updated patch to resolve more Windows build issues

Here&apos;s an updated patch which should take care of all the issues now. Thanks again for the reviewing and build testing on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71889</commentid>
    <comment_count>38</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-02-25 10:54:17 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; Created an attachment (id=19348) [edit]
&gt; Updated patch to resolve more Windows build issues
&gt; 
&gt; Here&apos;s an updated patch which should take care of all the issues now. Thanks
&gt; again for the reviewing and build testing on Windows.
&gt; 

After applying this patch, there is still the minor problem of a missing header include in PluginPackageWin.cpp:

   #include &quot;MIMETypeRegistry.h&quot;

Once this correction is made, the code compiles properly and seems to work properly under the Windows platform.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71894</commentid>
    <comment_count>39</comment_count>
      <attachid>19348</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2008-02-25 11:34:12 -0800</bug_when>
    <thetext>Comment on attachment 19348
Updated patch to resolve more Windows build issues

Looks good! r=me, few comments below.

&gt;&lt;html&gt;&lt;body&gt;&lt;pre style=&quot;word-wrap: break-word; white-space: pre-wrap;&quot;&gt;Index: WebCore/ChangeLog
&gt;===================================================================
&gt;--- WebCore/ChangeLog	(revision 30564)
&gt;+++ WebCore/ChangeLog	(working copy)
&gt;@@ -1,3 +1,43 @@
&gt;+2008-02-25  Rodney Dawes  &lt;dobey@wayofthemonkey.com&gt;
&gt;+
&gt;+        Reviewed by NOBODY (OOPS!!)
&gt;+
&gt;+        Add PluginInfoStore.cpp and new PluginDatabase.cpp to GTK+ and Qt ports
&gt;+        Remove old PlugInInfoStoreQt.cpp as it is obsoleted by shared code
&gt;+        Add PluginInfoStore, PluginDatabase, and PluginStream files to Wx build
&gt;+        Add new PluginDatabase.cpp to Windows build
&gt;+        Add temporary stubs for new PluginDatabase and PluginPackage
&gt;+        shared classes to GTK+, Qt, and Wx ports
&gt;+        Copy PluginDatabaseWin.cpp to PluginDatabase.cpp to preserve history
&gt;+        Remove shared code from PluginDatabaseWin.cpp
&gt;+        Remove Windows-specific code from PluginDatabase.cpp
&gt;+        Use PlatformModule and PlatformFileTime instead of HMODULE and FILETIME
&gt;+        Remove extraneous PluginPackage:: from hash() class method prototype
&gt;+        Subsume storeFileVersion into PluginPackage::fetchInfo
&gt;+        Add cross-platform PlatformModuleVersion type definition
&gt;+        Use PlatformModuleVersio to store the module version
&gt;+        Rename m_fileVersion[ML]S to m_moduleVersion
&gt;+        Change compareFileVersion to use PlatformModuleVersion as the argument
&gt;+        Move PluginView::determineQuirks and m_quirks to PluginPackage
&gt;+        Updated determineQuirks for the PlatformModuleVersion

Typo: PlatformModuleVersio.
Please add punctuation to each sentence.


&gt;Index: WebCore/plugins/PluginPackage.h
&gt; 
&gt;+#if PLATFORM(WIN)
&gt;+struct PlatformModuleVersion {

I think this would fit better in FileSystem.h with the other platform definitions.

&gt;+        int compareFileVersion(const PlatformModuleVersion&amp;) const;
&gt;+
&gt;+        PluginQuirkSet m_quirks;

Please make m_quirks private and add a getter.


&gt;Index: WebCore/plugins/win/PluginPackageWin.cpp
&gt;@@ -76,49 +77,37 @@ void PluginPackage::freeLibraryTimerFire
&gt; PluginPackage::PluginPackage(const String&amp; path, const FILETIME&amp; lastModified)
&gt;     : RefCounted&lt;PluginPackage&gt;(0)
&gt;     , m_path(path)
&gt;+    , m_moduleVersion(0)

Should remove this.

Needs MIMETypeRegistry.h as bfulgham mentioned.

&gt;+    static const PlatformModuleVersion slPluginMinRequired(0x51BE0000, 0x00010000 );

Extra space here.

&gt;+        // Determine the quirks for the MIME types this plug-in supports
&gt;+	determineQuirks(type);
&gt;+

I think there&apos;s a tab here. Please remove this and grep for any other tabs.


&gt;Index: WebCore/plugins/win/PluginViewWin.cpp

Should use the quirks getter throughout this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71899</commentid>
    <comment_count>40</comment_count>
      <attachid>19354</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-25 12:39:28 -0800</bug_when>
    <thetext>Created attachment 19354
Updated patch to fix last minor issues

Updated patch which incorporates Jon&apos;s suggestions, minus the removal of the m_moduleVersion initializer, which he was confused about. I&apos;m setting the flag to r+ as he set the previous version of the patch, and this version solves the issues he mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71905</commentid>
    <comment_count>41</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-02-25 14:00:06 -0800</bug_when>
    <thetext>Landed in r30574.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18529</attachid>
            <date>2008-01-18 12:57:28 -0800</date>
            <delta_ts>2008-01-18 13:24:11 -0800</delta_ts>
            <desc>Patch to provide shared API classes and implementations</desc>
            <filename>webkit-more-shared-plugin-api.patch</filename>
            <type>text/plain</type>
            <size>122943</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTYzNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDgtMDEtMTggIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBTaGFyZWQgY2xhc3NlcyBmb3IgUGx1Z2luRGF0YWJhc2UgYW5kIFBsdWdpblBhY2thZ2UK
KyAgICAgICAgU2hhcmVkIGltcGxlbWVudGF0aW9uIG9mIFBsdWdpbkluZm9TdG9yZSBBUEkKKyAg
ICAgICAgQWRkIHRoZSBuZXcgc2hhcmVkIGNsYXNzIGltcGxlbWVudGF0aW9ucyB0byBhdXRvdG9v
bHMgYW5kIHFtYWtlIGJ1aWxkcworICAgICAgICBNb3ZlIHRoZSBjcmVhdGVQbHVnaW5WaWV3IEFQ
SSB0byBQbHVnaW5WaWV3V2luLCB0byBhdm9pZCBhCisgICAgICAgIGNpcmN1bGFyIGRlcGVuZGVu
Y3kgd2l0aCBQbHVnaW5EYXRhYmFzZQorICAgICAgICBVc2Ugc3RhdGljIGdsb2JhbHMgZm9yIHRo
ZSBtX2ZpbGVWZXJzaW9ue01TLExTfSB2YXJpYWJsZXMgb24gV2luMzIKKyAgICAgICAgTWFrZSBz
dG9yZUZpbGVWZXJzaW9uIGFuZCBpc1BsdWdpbkJsYWNrbGlzdGVkIHN0YXRpYyBpbnRlcm5hbCBD
IG1ldGhvZHMKKyAgICAgICAgRGVmaW5lIFBsYXRmb3JtRmlsZVRpbWUgYW5kIFBsYXRmb3JtTW9k
dWxlIHR5cGVzCisgICAgICAgIEltcGxlbWVudCBwYXRoR2V0RmlsZU5hbWUgZm9yIFdpbjMyIGFu
ZCBHVEsrCisgICAgICAgIEltcGxlbWVudCB1bmxvYWRNb2R1bGUgZm9yIFdpbjMyIGFuZCBHVEsr
CisgICAgICAgIEFkZCBub3RJbXBsZW1lbnRlZCgpcyBmb3IgcGF0aEdldEZpbGVOYW1lIGFuZCB1
bmxvYWRNb2R1bGUgb24gUXQKKyAgICAgICAgVXBkYXRlIHRoZSBXaW4zMiB2Y3Byb2ogZm9yIHRo
ZSBwbHVnLWluIEFQSSBjaGFuZ2VzCisgICAgICAgIEFkZCB0ZW1wb3Jhcnkgc3R1YnMgZm9yIFBs
dWdpbkRhdGFiYXNlIGFuZCBQbHVnaW5QYWNrYWdlIG1ldGhvZHMsCisgICAgICAgIG9uIEdUSysg
YW5kIFF0CisgICAgICAgIFJlbW92ZSB0ZW1wb3Jhcnkgc3R1YnMgZm9yIFBsdWdJbkluZm9TdG9y
ZSBvbiBHVEsrIGFuZCBRdAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICog
V2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9G
aWxlU3lzdGVtR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6CisgICAgICAgICogcGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5o
OgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcDoKKyAgICAgICAgKiBwbHVn
aW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5o
OgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdJbkluZm9TdG9yZVdpbi5jcHA6CisgICAgICAg
ICogcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwOgorICAgICAgICAqIHBsdWdpbnMv
d2luL1BsdWdpbkRhdGFiYXNlV2luLmg6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFj
a2FnZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5oOgor
ICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwOgorICAgICAgICAqIHBsdWdp
bnMvd2luL1BsdWdpblZpZXdXaW4uaDoKKwogMjAwOC0wMS0xOCAgQmV0aCBEYWtpbiAgPGJkYWtp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyLgpJbmRleDogV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShy
ZXZpc2lvbiAyOTYzNikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkK
QEAgLTg0NSw2ICs4NDUsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZv
cm0vVGltZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YWJhc2UuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCisJ
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luU3RyZWFtLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBc
CiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBy
bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyOTYzNikKKysr
IFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTc3OSw2ICs3NzksOSBAQCBT
T1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9UaW1lci5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQv
VW5pY29kZVJhbmdlLmNwcCBcCiAgICAgcGxhdGZvcm0vV2lkZ2V0LmNwcCBcCisgICAgcGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHAgXAorICAgIHBsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBc
CisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBcCiAgICAgcGx1Z2lucy9QbHVnaW5TdHJl
YW0uY3BwIFwKICAgICByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAgICAgcmVuZGVy
aW5nL2JpZGkuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
cmV2aXNpb24gMjk2MzYpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC03OTMzLDEwICs3OTMzLDMwIEBACiAJCQkJPg0KIAkJCTwvRmls
ZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YWJh
c2UuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2lu
c1xQbHVnaW5JbmZvU3RvcmUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5QYWNrYWdlLmNwcCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1
Z2luUGFja2FnZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5TdHJlYW0uY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxl
Pg0KQEAgLTc5NTYsMjIgKzc5NzYsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxG
aWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbkRhdGFiYXNlV2lu
LmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGx1Z2luc1x3aW5cUGx1Z0luSW5mb1N0b3JlV2luLmNwcCINCi0JCQkJCT4NCi0JCQkJ
PC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQ
bHVnaW5QYWNrYWdlV2luLmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0K
LQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmgiDQot
CQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGx1Z2luc1x3aW5cUGx1Z2luVmlld1dpbi5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjk2MzYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0ZpbGVTeXN0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTAgQEAKICNpZm5k
ZWYgRmlsZVN5c3RlbV9oCiAjZGVmaW5lIEZpbGVTeXN0ZW1faAogCisjaWYgUExBVEZPUk0oR1RL
KQorI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00Miw5ICs0NiwxNyBAQCBjbGFzcyBT
dHJpbmc7CiAKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIEhBTkRMRSBQbGF0Zm9ybUZpbGVI
YW5kbGU7Cit0eXBlZGVmIEZJTEVUSU1FIFBsYXRmb3JtRmlsZVRpbWU7Cit0eXBlZGVmIEhNT0RV
TEUgUGxhdGZvcm1Nb2R1bGU7CiBjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUgaW52YWxpZFBsYXRm
b3JtRmlsZUhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogI2Vsc2UKIHR5cGVkZWYgaW50
IFBsYXRmb3JtRmlsZUhhbmRsZTsKK3R5cGVkZWYgdGltZV90IFBsYXRmb3JtRmlsZVRpbWU7Cisj
aWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBHTW9kdWxlKiBQbGF0Zm9ybU1vZHVsZTsKKyNlbHNl
Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtTW9kdWxlOworI2VuZGlmCiBjb25zdCBQbGF0Zm9ybUZp
bGVIYW5kbGUgaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IC0xOwogI2VuZGlmCiAKQEAgLTU0
LDYgKzY2LDcgQEAgYm9vbCBmaWxlU2l6ZShjb25zdCBTdHJpbmcmLCBsb25nIGxvbmcmIAogU3Ry
aW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgY29tcG9uZW50KTsKIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYg
cGF0aCk7CiBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKTsKK1N0cmluZyBwYXRoR2V0RmlsZU5h
bWUoY29uc3QgU3RyaW5nJik7CiAKIENTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNv
bnN0IFN0cmluZyYpOwogCkBAIC02NCw2ICs3Nyw5IEBAIENTdHJpbmcgb3BlblRlbXBvcmFyeUZp
bGUoY29uc3QgY2hhciogcHIKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYpOwog
aW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCk7CiAKKy8qIE1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBsb2FkYWJsZSBtb2R1bGVz
ICovCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSk7CisKICNpZiBQTEFURk9STShX
SU4pCiBTdHJpbmcgbG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCk7CiBTdHJpbmcg
cm9hbWluZ1VzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCShyZXZpc2lvbiAyOTYzNikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miwy
MCBAQCBib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhCiAgICAgcmV0dXJu
IHJlc3VsdCA9PSAwOwogfQogCitTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQoreworICAgIHJl
dHVybiBTdHJpbmcoZ19nZXRfaG9tZV9kaXIoKSk7Cit9CisKK1N0cmluZyBwYXRoR2V0RmlsZU5h
bWUoY29uc3QgU3RyaW5nJiBwYXRoTmFtZSkKK3sKKyAgICBjaGFyKiBiYXNlTmFtZSA9IGdfcGF0
aF9nZXRfYmFzZW5hbWUocGF0aE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgU3RyaW5nIGZpbGVO
YW1lID0gU3RyaW5nKGJhc2VOYW1lKTsKKyAgICBnX2ZyZWUoYmFzZU5hbWUpOworCisgICAgcmV0
dXJuIGZpbGVOYW1lOworfQorCiBDU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IGNoYXIq
IHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgZ2NoYXIqIGZpbGVu
YW1lID0gZ19zdHJkdXBfcHJpbnRmKCIlc1hYWFhYWCIsIHByZWZpeCk7CkBAIC0xMzEsNCArMTQ1
LDkgQEAgaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbAogCiAgICAgcmV0
dXJuIHRvdGFsQnl0ZXNXcml0dGVuOwogfQorCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1v
ZHVsZSBtb2R1bGUpCit7CisgICAgcmV0dXJuIGdfbW9kdWxlX2Nsb3NlKG1vZHVsZSk7Cit9CiB9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJl
dmlzaW9uIDI5NjM2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOCBAQAogI2luY2x1ZGUgIkZUUERpcmVj
dG9yeURvY3VtZW50LmgiCiAjaW5jbHVkZSAiR2xvYmFsSGlzdG9yeS5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAi
UGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCkBAIC01NywxMiArNTgsOSBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJl
c291cmNlSW50b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNv
bnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbkluZm8qIFBs
dWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3Jl
OjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVN0
cmluZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfSAKLWJvb2wg
V2ViQ29yZTo6UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFdlYkNv
cmU6OnJlZnJlc2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCitQbHVnaW5T
ZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QgeyBub3RJbXBsZW1l
bnRlZCgpOyB9CitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpblBh
dGhzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Citib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5m
bygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogCiBDb2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xv
cigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29s
b3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
cXQvRmlsZVN5c3RlbVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0Zp
bGVTeXN0ZW1RdC5jcHAJKHJldmlzaW9uIDI5NjM2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9G
aWxlU3lzdGVtUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwxOCBAQCBTdHJpbmcg
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0CiAgICAgcmV0dXJuIFFEaXIocGF0aCku
ZmlsZVBhdGgoY29tcG9uZW50KTsKIH0KIAorU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBT
dHJpbmcmIHBhdGgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9CiAKIC8vIHZpbTogdHM9NCBz
dz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
CShyZXZpc2lvbiAyOTYzNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksOCBAQAogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgotI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRh
dGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgIlJlbmRlclRo
ZW1lLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVz
LmgiCkBAIC02OSw2ICs3MCwxMCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorUGx1
Z2luU2V0IFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0IHsgbm90SW1w
bGVtZW50ZWQoKTsgfQorVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVn
aW5QYXRocygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRj
aEluZm8oKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBW
ZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRLZXlTaXplcygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVT
eXN0ZW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwCShyZXZpc2lvbiAyOTYzNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVT
eXN0ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDExIEBAIFN0cmluZyBo
b21lRGlyZWN0b3J5UGF0aCgpCiAgICAgcmV0dXJuICIiOwogfQogCitTdHJpbmcgcGF0aEdldEZp
bGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKFBhdGhGaW5k
RmlsZU5hbWUobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpKTsKK30KKwog
c3RhdGljIFN0cmluZyBidW5kbGVOYW1lKCkKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXpl
ZDsKQEAgLTE5Niw2ICsyMDEsMTIgQEAgaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSBoYW5kbAogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
Ynl0ZXNXcml0dGVuKTsKIH0KKworYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9k
dWxlKQoreworICAgIHJldHVybiA6OkZyZWVMaWJyYXJ5KG1vZHVsZSk7Cit9CisKIFN0cmluZyBs
b2NhbFVzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKQogewogICAgIHJldHVybiBjYWNoZWRT
dG9yYWdlRGlyZWN0b3J5KENTSURMX0xPQ0FMX0FQUERBVEEpOwpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL1BsdWdpbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyOTYyNikJKGZyb20gV2ViQ29yZS9wbHVnaW5zL3dp
bi9QbHVnaW5EYXRhYmFzZVdpbi5jcHA6Mjk2MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZVdpbi5o
IgorCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdX
aW4uaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRl
IDxzaGx3YXBpLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luRGF0YWJhc2VXaW4q
IFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCkKK3sKKyAgICBzdGF0aWMgUGx1
Z2luRGF0YWJhc2VXaW4qIHBsdWdpbnMgPSAwOworICAgIAorICAgIGlmICghcGx1Z2lucykgewor
ICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlV2luOworICAgICAgICBwbHVnaW5z
LT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRhYmFzZVdpbjo6ZGVmYXVsdFBsdWdpblBhdGhzKCkp
OworICAgICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdp
bnM7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2VXaW46OmFkZEV4dHJhUGx1Z2luUGF0aChjb25z
dCBTdHJpbmcmIHBhdGgpCit7CisgICAgbV9wbHVnaW5QYXRocy5hcHBlbmQocGF0aCk7CisgICAg
cmVmcmVzaCgpOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlV2luOjpyZWZyZXNoKCkKK3sgICAK
KyAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsKKworICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9
IGZhbHNlOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IHNldCBvZiBwbHVnaW5zCisgICAgbmV3UGx1
Z2lucyA9IGdldFBsdWdpbnNJblBhdGhzKCk7CisKKyAgICBpZiAoIW1fcGx1Z2lucy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7CisKKyAgICAgICAg
UGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZCA9IG1fcGx1Z2luczsKKworICAgICAgICBQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICAgICAgcGx1Z2luc1RvVW5sb2FkLnJlbW92ZSgqaXQpOworCisg
ICAgICAgIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgICAgIG5ld1BsdWdpbnMucmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gVW5sb2FkIHBs
dWdpbnMKKyAgICAgICAgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVuZCgpOworICAgICAgICBmb3Ig
KFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLnJlbW92ZSgqaXQpOworCisg
ICAgICAgIC8vIEFkZCBuZXcgcGx1Z2lucworICAgICAgICBlbmQgPSBuZXdQbHVnaW5zLmVuZCgp
OworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0
KTsKKworICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5
KCkgfHwgIW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGx1
Z2lucyA9IG5ld1BsdWdpbnM7CisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAg
ICBtX3BsdWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFuZXdQ
bHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICAvLyBSZWdpc3RlciBwbHVnLWluIE1JTUUg
dHlwZXMKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQo
KTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIC8vIEdldCBNSU1FIHR5cGVzCisgICAg
ICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQp
LT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlw
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlv
bnMoKS5iZWdpbigpOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpIHsKKyAgICAgICAgICAg
IG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5maXJzdCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdlZDsKK30KKworVmVjdG9yPFBsdWdpblBh
Y2thZ2VXaW4qPiBQbHVnaW5EYXRhYmFzZVdpbjo6cGx1Z2lucygpIGNvbnN0Cit7CisgICAgVmVj
dG9yPFBsdWdpblBhY2thZ2VXaW4qPiByZXN1bHQ7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVkgcm9vdEtleSwg
UGx1Z2luU2V0JiBwbHVnaW5zKQoreworICAgIEhLRVkga2V5OworICAgIEhSRVNVTFQgcmVzdWx0
ID0gUmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNvZnR3YXJlXFxNb3ppbGxhUGx1Z2lucyIsIDAs
IEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkpOworCisgICAgaWYgKHJlc3VsdCAhPSBFUlJP
Ul9TVUNDRVNTKQorICAgICAgICByZXR1cm47CisKKyAgICB3Y2hhcl90IG5hbWVbMTI4XTsKKyAg
ICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7CisKKyAgICAvLyBFbnVtZXJhdGUgc3Via2V5cworICAg
IGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgIERXT1JEIG5hbWVMZW4gPSBfY291bnRv
ZihuYW1lKTsKKyAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZu
YW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKKworICAgICAgICBpZiAocmVzdWx0ICE9
IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBXQ0hBUiBwYXRo
U3RyW19NQVhfUEFUSF07CisgICAgICAgIERXT1JEIHBhdGhTdHJTaXplID0gc2l6ZW9mKHBhdGhT
dHIpOworICAgICAgICBEV09SRCB0eXBlOworCisgICAgICAgIHJlc3VsdCA9IFNIR2V0VmFsdWUo
a2V5LCBuYW1lLCBURVhUKCJQYXRoIiksICZ0eXBlLCAoTFBCWVRFKXBhdGhTdHIsICZwYXRoU3Ry
U2l6ZSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUyB8fCB0eXBlICE9IFJF
R19TWikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFdJTjMyX0ZJTEVfQVRUUklC
VVRFX0RBVEEgYXR0cmlidXRlczsKKyAgICAgICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXgocGF0
aFN0ciwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmYXR0cmlidXRlcykgPT0gMCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBQbHVn
aW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKFN0cmluZyhwYXRoU3RyLCBwYXRoU3RyU2l6ZSAv
IHNpemVvZihXQ0hBUikgLSAxKSwgYXR0cmlidXRlcy5mdExhc3RXcml0ZVRpbWUpOworCisgICAg
ICAgIGlmIChwYWNrYWdlKQorICAgICAgICAgICAgcGx1Z2lucy5hZGQocGFja2FnZSk7CisgICAg
fQorCisgICAgUmVnQ2xvc2VLZXkoa2V5KTsKK30KKworUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNl
V2luOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCisgICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1
ZUZpbGVuYW1lczsKKyAgICBQbHVnaW5TZXQgcGx1Z2luczsKKworICAgIEhBTkRMRSBoRmluZCA9
IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIFdJTjMyX0ZJTkRfREFUQVcgZmluZEZpbGVEYXRh
OworCisgICAgUGx1Z2luUGFja2FnZVdpbiogb2xkV01QUGx1Z2luID0gMDsKKyAgICBQbHVnaW5Q
YWNrYWdlV2luKiBuZXdXTVBQbHVnaW4gPSAwOworCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICppdCArICJcXCoiOworCisgICAg
ICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVcocGF0dGVybi5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpLCAmZmluZEZpbGVEYXRhKTsKKworICAgICAgICBpZiAoaEZpbmQgPT0gSU5WQUxJ
RF9IQU5ETEVfVkFMVUUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICBpZiAoZmluZEZpbGVEYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJ
QlVURV9ESVJFQ1RPUlkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IFN0cmluZyBmaWxlbmFtZSA9IFN0cmluZyhmaW5kRmlsZURhdGEuY0ZpbGVOYW1lLCB3Y3NsZW4o
ZmluZEZpbGVEYXRhLmNGaWxlTmFtZSkpOworICAgICAgICAgICAgaWYgKCghZmlsZW5hbWUuc3Rh
cnRzV2l0aCgibnAiLCBmYWxzZSkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKCJkbGwiLCBmYWxzZSkp
ICYmCisgICAgICAgICAgICAgICAgKCFlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIlBsdWdp
bi5kbGwiKSB8fCAhaXQtPmVuZHNXaXRoKCJTaG9ja3dhdmUgMTAiLCBmYWxzZSkpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSAqaXQg
KyAiXFwiICsgZmlsZW5hbWU7CisgICAgICAgICAgICBpZiAoIXVuaXF1ZUZpbGVuYW1lcy5hZGQo
ZnVsbFBhdGgpLnNlY29uZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisg
ICAgICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2Fn
ZVdpbjo6Y3JlYXRlUGFja2FnZShmdWxsUGF0aCwgZmluZEZpbGVEYXRhLmZ0TGFzdFdyaXRlVGlt
ZSk7CisKKyAgICAgICAgICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7CisgICAgICAgICAgICAgICAg
cGx1Z2lucy5hZGQocGx1Z2luUGFja2FnZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucGRzcGxheS5kbGwiKSkKKyAgICAgICAgICAgICAgICAg
ICAgb2xkV01QUGx1Z2luID0gcGx1Z2luUGFja2FnZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wLW1zd21wLmRsbCIpKQorICAgICAgICAg
ICAgICAgICAgICBuZXdXTVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdlOworICAgICAgICAgICAgfQor
CisgICAgICAgIH0gd2hpbGUgKEZpbmROZXh0RmlsZVcoaEZpbmQsICZmaW5kRmlsZURhdGEpICE9
IDApOworCisgICAgICAgIEZpbmRDbG9zZShoRmluZCk7CisgICAgfQorCisgICAgYWRkUGx1Z2lu
c0Zyb21SZWdpc3RyeShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBsdWdpbnMpOworICAgIGFkZFBsdWdp
bnNGcm9tUmVnaXN0cnkoSEtFWV9DVVJSRU5UX1VTRVIsIHBsdWdpbnMpOworCisgICAgLy8gSWYg
Ym90aCB0aGUgb2xkIGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJlc2VudCBpbiB0aGUgcGx1Z2lu
cyBzZXQsIAorICAgIC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBzbyB3ZSBkb24ndCBlbmQgdXAg
Y2hvb3NpbmcgdGhlIG9sZCBvbmUuCisgICAgaWYgKG9sZFdNUFBsdWdpbiAmJiBuZXdXTVBQbHVn
aW4pCisgICAgICAgIHBsdWdpbnMucmVtb3ZlKG9sZFdNUFBsdWdpbik7CisKKyAgICByZXR1cm4g
cGx1Z2luczsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBwYXJzZVZlcnNpb25TdHJp
bmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQoreworICAgIFZlY3RvcjxpbnQ+IHZlcnNp
b247CisKKyAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7CisgICAgdW5zaWduZWQgZW5kUG9zOwor
ICAgIAorICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCkpIHsKKyAg
ICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVyc2lvblN0cmluZy5sZW5n
dGgoKTsgKytlbmRQb3MpCisgICAgICAgICAgICBpZiAodmVyc2lvblN0cmluZ1tlbmRQb3NdID09
ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVyc2lvblN0cmluZy5zdWJz
dHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgpOworICAgICAgICB2ZXJz
aW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKKworICAgICAgICBzdGFydFBvcyA9IGVuZFBv
cyArIDE7CisgICAgfQorCisgICAgcmV0dXJuIHZlcnNpb247Cit9CisKKy8vIFRoaXMgcmV0dXJu
cyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25CCitzdGF0aWMgaW5saW5l
IGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29uc3Qg
VmVjdG9yPGludD4mIHZlcnNpb25CKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2
ZXJzaW9uQS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXplKCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodmVyc2lvbkFbaV0gPiB2
ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBlbHNlIGlmICh2
ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25zIGFyZSBlaXRoZXIgdGhl
IHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwganVzdCByZXR1cm4gZmFs
c2UKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxh
UGx1Z2luUGF0aHMoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIC8vIEVudW1lcmF0ZSBh
bGwgTW96aWxsYSBwbHVnaW4gZGlyZWN0b3JpZXMgaW4gdGhlIHJlZ2lzdHJ5CisgICAgSEtFWSBr
ZXk7CisgICAgTE9ORyByZXN1bHQ7CisgICAgCisgICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhL
RVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1vemlsbGEiKSwgMCwgS0VZX1JFQUQs
ICZrZXkpOworICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICBXQ0hB
UiBuYW1lWzEyOF07CisgICAgICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKKworICAgICAgICAv
LyBFbnVtZXJhdGUgc3Via2V5cworICAgICAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAg
ICAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7Cisg
ICAgICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4s
IDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOworCisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IEVS
Uk9SX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIFN0cmlu
ZyBleHRlbnNpb25zUGF0aCA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKSArICJcXEV4dGVuc2lvbnMi
OworICAgICAgICAgICAgSEtFWSBleHRlbnNpb25zS2V5OworCisgICAgICAgICAgICAvLyBUcnkg
b3BlbmluZyB0aGUga2V5CisgICAgICAgICAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoa2V5LCBl
eHRlbnNpb25zUGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCBLRVlfUkVB
RCwgJmV4dGVuc2lvbnNLZXkpOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NV
Q0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0IHRoZSBwbHVnaW5zIHBhdGgKKyAg
ICAgICAgICAgICAgICBXQ0hBUiBwbHVnaW5zUGF0aFN0cltfTUFYX1BBVEhdOworICAgICAgICAg
ICAgICAgIERXT1JEIHBsdWdpbnNQYXRoU2l6ZSA9IHNpemVvZihwbHVnaW5zUGF0aFN0cik7Cisg
ICAgICAgICAgICAgICAgRFdPUkQgdHlwZTsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFJl
Z1F1ZXJ5VmFsdWVFeChleHRlbnNpb25zS2V5LCBURVhUKCJQbHVnaW5zIiksIDAsICZ0eXBlLCAo
TFBCWVRFKSZwbHVnaW5zUGF0aFN0ciwgJnBsdWdpbnNQYXRoU2l6ZSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisgICAg
ICAgICAgICAgICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1Z2luc1BhdGhTdHIsIHBsdWdp
bnNQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7CisKKyAgICAgICAgICAgICAgICBSZWdD
bG9zZUtleShleHRlbnNpb25zS2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgUmVnQ2xvc2VLZXkoa2V5KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRo
cykKK3sKKyAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBsdWdpbiBpcyBpbnN0YWxsZWQgaW4g
XFBGaWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55IEZpcmVmb3ggaW5zdGFsbHMKKyAg
ICBXQ0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRIICsgMV07CisgICAgRFdPUkQgcGx1
Z2luRGlyZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzVyhURVhUKCIlU1lT
VEVNRFJJVkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2luRGlyZWN0b3J5U3RyLCBfY291bnRv
ZihwbHVnaW5EaXJlY3RvcnlTdHIpKTsKKworICAgIGlmIChwbHVnaW5EaXJlY3RvcnlTaXplID4g
MCAmJiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9IF9jb3VudG9mKHBsdWdpbkRpcmVjdG9yeVN0cikp
CisgICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1Z2luRGlyZWN0b3J5U3RyLCBwbHVnaW5E
aXJlY3RvcnlTaXplIC0gMSkpOworCisgICAgRFdPUkQgdHlwZTsKKyAgICBXQ0hBUiBpbnN0YWxs
YXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKKyAgICBEV09SRCBpbnN0YWxsYXRpb25EaXJl
Y3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cik7CisKKyAgICBIUkVT
VUxUIHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2Fy
ZVxcTWljcm9zb2Z0XFxNZWRpYVBsYXllciIpLCBURVhUKCJJbnN0YWxsYXRpb24gRGlyZWN0b3J5
IiksICZ0eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsICZpbnN0YWxsYXRp
b25EaXJlY3RvcnlTaXplKTsKKworICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0
eXBlID09IFJFR19TWikKKyAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhpbnN0YWxsYXRpb25E
aXJlY3RvcnlTdHIsIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0g
MSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkUXVpY2tUaW1lUGx1Z2luUGF0aChWZWN0
b3I8U3RyaW5nPiYgcGF0aHMpCit7CisgICAgRFdPUkQgdHlwZTsKKyAgICBXQ0hBUiBpbnN0YWxs
YXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKKyAgICBEV09SRCBpbnN0YWxsYXRpb25EaXJl
Y3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cik7CisKKyAgICBIUkVT
VUxUIHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2Fy
ZVxcQXBwbGUgQ29tcHV0ZXIsIEluYy5cXFF1aWNrVGltZSIpLCBURVhUKCJJbnN0YWxsRGlyIiks
ICZ0eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsICZpbnN0YWxsYXRpb25E
aXJlY3RvcnlTaXplKTsKKworICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBl
ID09IFJFR19TWikgeworICAgICAgICBTdHJpbmcgcGx1Z2luRGlyID0gU3RyaW5nKGluc3RhbGxh
dGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hB
UikgLSAxKSArICJcXHBsdWdpbnMiOworICAgICAgICBwYXRocy5hcHBlbmQocGx1Z2luRGlyKTsK
KyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRBZG9iZUFjcm9iYXRQbHVnaW5QYXRo
KFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBIS0VZIGtleTsKKyAgICBIUkVTVUxUIHJl
c3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxB
ZG9iZVxcQWNyb2JhdCBSZWFkZXIiKSwgMCwgS0VZX1JFQUQsICZrZXkpOworICAgIGlmIChyZXN1
bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOworCisgICAgV0NIQVIgbmFtZVsx
MjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKKworICAgIFZlY3RvcjxpbnQ+IGxhdGVz
dEFjcm9iYXRWZXJzaW9uOworICAgIFN0cmluZyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZzsK
KworICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsK
KyAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7Cisg
ICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwg
MCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUND
RVNTKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgVmVjdG9yPGludD4gYWNyb2JhdFZl
cnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5hbWUsIG5hbWVMZW4pKTsKKyAgICAg
ICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhhY3JvYmF0VmVyc2lvbiwgbGF0ZXN0QWNyb2JhdFZlcnNp
b24pKSB7CisgICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvbiA9IGFjcm9iYXRWZXJzaW9u
OworICAgICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgPSBTdHJpbmcobmFtZSwg
bmFtZUxlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWxhdGVzdEFjcm9iYXRWZXJz
aW9uU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIERXT1JEIHR5cGU7CisgICAgICAgIFdDSEFS
IGFjcm9iYXRJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOworICAgICAgICBEV09SRCBhY3JvYmF0
SW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGFjcm9iYXRJbnN0YWxsUGF0aFN0cik7CisKKyAgICAg
ICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5LZXlQYXRoID0gIlNvZnR3YXJlXFxBZG9iZVxcQWNyb2Jh
dCBSZWFkZXJcXCIgKyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyArICJcXEluc3RhbGxQYXRo
IjsKKyAgICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIGFjcm9i
YXRQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsICZ0eXBl
LCAoTFBCWVRFKWFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFjcm9iYXRJbnN0YWxsUGF0aFNpemUp
OworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgICAg
U3RyaW5nIGFjcm9iYXRQbHVnaW5QYXRoID0gU3RyaW5nKGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwg
YWNyb2JhdEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXGJyb3dzZXIi
OworICAgICAgICAgICAgcGF0aHMuYXBwZW5kKGFjcm9iYXRQbHVnaW5QYXRoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFJlZ0Nsb3NlS2V5KGtleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3Ry
aW5nIHNhZmFyaVBsdWdpbnNQYXRoKCkKK3sKKyAgICBXQ0hBUiBtb2R1bGVGaWxlTmFtZVN0cltf
TUFYX1BBVEhdOworICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc1BhdGg7CisgICAgc3RhdGljIGJv
b2wgY2FjaGVkUGx1Z2luUGF0aCA9IGZhbHNlOworCisgICAgaWYgKCFjYWNoZWRQbHVnaW5QYXRo
KSB7CisgICAgICAgIGNhY2hlZFBsdWdpblBhdGggPSB0cnVlOworCisgICAgICAgIGludCBtb2R1
bGVGaWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1lKDAsIG1vZHVsZUZpbGVOYW1lU3RyLCBf
TUFYX1BBVEgpOworCisgICAgICAgIGlmICghbW9kdWxlRmlsZU5hbWVMZW4gfHwgbW9kdWxlRmls
ZU5hbWVMZW4gPT0gX01BWF9QQVRIKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAg
IGlmICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZpbGVOYW1lU3RyKSkKKyAgICAgICAgICAg
IGdvdG8gZXhpdDsKKworICAgICAgICBwbHVnaW5zUGF0aCA9IFN0cmluZyhtb2R1bGVGaWxlTmFt
ZVN0cikgKyAiXFxQbHVnaW5zIjsKKyAgICB9CitleGl0OgorICAgIHJldHVybiBwbHVnaW5zUGF0
aDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZE1hY3JvbWVkaWFQbHVnaW5QYXRocyhWZWN0
b3I8U3RyaW5nPiYgcGF0aHMpCit7CisgICAgV0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01BWF9Q
QVRIXTsKKworICAgIGlmIChHZXRTeXN0ZW1EaXJlY3Rvcnkoc3lzdGVtRGlyZWN0b3J5U3RyLCBf
Y291bnRvZihzeXN0ZW1EaXJlY3RvcnlTdHIpKSA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXQ0hBUiBtYWNyb21lZGlhRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKKworICAgIFBhdGhDb21i
aW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0ciwgVEVYVCgibWFj
cm9tZWRcXEZsYXNoIikpOworICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3Ry
KTsKKworICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVj
dG9yeVN0ciwgVEVYVCgibWFjcm9tZWRcXFNob2Nrd2F2ZSAxMCIpKTsKKyAgICBwYXRocy5hcHBl
bmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRh
dGFiYXNlV2luOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHBh
dGhzOworICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKKworICAgIGlm
ICghb3VyUGF0aC5pc051bGwoKSkKKyAgICAgICAgcGF0aHMuYXBwZW5kKG91clBhdGgpOworICAg
IGFkZFF1aWNrVGltZVBsdWdpblBhdGgocGF0aHMpOworICAgIGFkZEFkb2JlQWNyb2JhdFBsdWdp
blBhdGgocGF0aHMpOworICAgIGFkZE1vemlsbGFQbHVnaW5QYXRocyhwYXRocyk7CisgICAgYWRk
V2luZG93c01lZGlhUGxheWVyUGx1Z2luUGF0aChwYXRocyk7CisgICAgYWRkTWFjcm9tZWRpYVBs
dWdpblBhdGhzKHBhdGhzKTsKKworICAgIHJldHVybiBwYXRoczsKK30KKworYm9vbCBQbHVnaW5E
YXRhYmFzZVdpbjo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkK
K3sKKyAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcg
dGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICByZXR1cm4gKHJlZnJlc2goKSAm
JiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKTsKK30KKworUGx1Z2lu
UGFja2FnZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKKyAgICBTdHJp
bmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7CisgICAgUGx1Z2luUGFja2FnZVdpbiog
cGx1Z2luID0gMDsKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lu
cy5lbmQoKTsKKworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1
Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5taW1l
VG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisgICAgICAgICAgICBwbHVnaW4gPSAo
Kml0KS5nZXQoKTsKKyAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1
Z2lucyBkaXJlY3RvcnkKKyAgICAgICAgICAgIGlmIChwbHVnaW4tPnBhcmVudERpcmVjdG9yeSgp
ID09IG91clBhdGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gcGx1Z2luOworfQorCitTdHJpbmcgUGx1Z2luRGF0YWJhc2VXaW46Ok1JTUVU
eXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdAoreworICAgIGlm
IChleHRlbnNpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBTdHJp
bmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7CisgICAgU3RyaW5nIG1pbWVUeXBlOwor
ICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IDA7CisKKyAgICBmb3IgKFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0g
KCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKKworICAgICAgICBmb3IgKE1JTUVUb0V4
dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5z
aW9ucygpLmJlZ2luKCk7IG1pbWVfaXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgeworICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7
IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShleHRlbnNpb25z
W2ldLCBleHRlbnNpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9p
dC0+Zmlyc3Q7CisgICAgICAgICAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOworICAg
ICAgICAgICAgICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBpbiBvdXIgb3duIHBsdWdpbnMgZGly
ZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4tPnBhcmVudERpcmVjdG9yeSgp
ID09IG91clBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWlt
ZVR5cGU7Cit9CisKK1BsdWdpblBhY2thZ2VXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpmaW5kUGx1
Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSkKK3sgICAKKyAgICBQbHVnaW5Q
YWNrYWdlV2luKiBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgU3Ry
aW5nIGZpbGVuYW1lID0gdXJsLnN0cmluZygpOworICAgIAorICAgIGlmICghcGx1Z2luKSB7Cisg
ICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IHVybC5sYXN0UGF0aENvbXBvbmVudCgpOworICAgICAg
ICBpZiAoIWZpbGVuYW1lLmVuZHNXaXRoKCIvIikpIHsKKyAgICAgICAgICAgIGludCBleHRlbnNp
b25Qb3MgPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgICAgICAgICAgaWYgKGV4dGVu
c2lvblBvcyAhPSAtMSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBmaWxl
bmFtZS5zdWJzdHJpbmcoZXh0ZW5zaW9uUG9zICsgMSk7CisKKyAgICAgICAgICAgICAgICBtaW1l
VHlwZSA9IE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7CisgICAgICAgICAgICAgICAg
cGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gRklYTUU6IGlmIG5vIHBsdWdpbiBjb3VsZCBiZSBmb3Vu
ZCwgcXVlcnkgV2luZG93cyBmb3IgdGhlIG1pbWUgdHlwZSAKKyAgICAvLyBjb3JyZXNwb25kaW5n
IHRvIHRoZSBleHRlbnNpb24uCisKKyAgICByZXR1cm4gcGx1Z2luOworfQorCitQbHVnaW5WaWV3
V2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6Y3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJh
bWUsIGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkp
Cit7CisgICAgLy8gaWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1Z2luIGZvciB0aGlzIE1JTUUgdHlw
ZSwgZmluZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IKKyAgICAvLyBhIHBsdWdpbiBieSB0aGUgZmls
ZSBleHRlbnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBlLCBzbyBwYXNzIGEgbXV0YWJsZSBT
dHJpbmcKKyAgICBTdHJpbmcgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7CisgICAgUGx1Z2luUGFj
a2FnZVdpbiogcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7CisgICAgCisg
ICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFu
ZCBzZWFyY2hpbmcgYWdhaW4KKyAgICBpZiAoIXBsdWdpbiAmJiByZWZyZXNoKCkpIHsKKyAgICAg
ICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7CisgICAgICAgIHBsdWdpbiA9IGZpbmRQbHVnaW4o
dXJsLCBtaW1lVHlwZUNvcHkpOworICAgIH0KKyAgICAgICAgCisgICAgcmV0dXJuIG5ldyBQbHVn
aW5WaWV3V2luKHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVsZW1lbnQsIHVybCwgcGFyYW1O
YW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9hZE1hbnVhbGx5KTsKK30KKworfQpJ
bmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyOTYyNikKKysrIFdl
YkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NCwzNiArMjUsNDMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1
Z2luRGF0YWJhc2VXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogCi0jaW5jbHVk
ZSAiUGx1Z2luUGFja2FnZVdpbi5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXdXaW4uaCIKKyNpbmNs
dWRlICJQbHVnaW5QYWNrYWdlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlIDx3aW5k
b3dzLmg+Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBs
dWdpbkRhdGFiYXNlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpCitQ
bHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKQogewotICAg
IHN0YXRpYyBQbHVnaW5EYXRhYmFzZVdpbiogcGx1Z2lucyA9IDA7CisgICAgc3RhdGljIFBsdWdp
bkRhdGFiYXNlKiBwbHVnaW5zID0gMDsKICAgICAKICAgICBpZiAoIXBsdWdpbnMpIHsKLSAgICAg
ICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZVdpbjsKLSAgICAgICAgcGx1Z2lucy0+c2V0
UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKKyAg
ICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZTsKKyAgICAgICAgcGx1Z2lucy0+c2V0
UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKICAgICAg
ICAgcGx1Z2lucy0+cmVmcmVzaCgpOwogICAgIH0KIAogICAgIHJldHVybiBwbHVnaW5zOwogfQog
Ci12b2lkIFBsdWdpbkRhdGFiYXNlV2luOjphZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5n
JiBwYXRoKQorYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1p
bWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3Vu
ZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICBy
ZXR1cm4gKHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5
cGUpKTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0
IFN0cmluZyYgcGF0aCkKIHsKICAgICBtX3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsKICAgICBy
ZWZyZXNoKCk7CiB9CiAKLWJvb2wgUGx1Z2luRGF0YWJhc2VXaW46OnJlZnJlc2goKQorYm9vbCBQ
bHVnaW5EYXRhYmFzZTo6cmVmcmVzaCgpCiB7ICAgCiAgICAgUGx1Z2luU2V0IG5ld1BsdWdpbnM7
CiAKQEAgLTEwOCw5ICsxMTYsOSBAQCBib29sIFBsdWdpbkRhdGFiYXNlV2luOjpyZWZyZXNoKCkK
ICAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdlZDsKIH0KIAotVmVjdG9yPFBsdWdpblBhY2thZ2VX
aW4qPiBQbHVnaW5EYXRhYmFzZVdpbjo6cGx1Z2lucygpIGNvbnN0CitWZWN0b3I8UGx1Z2luUGFj
a2FnZSo+IFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5zKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8UGx1
Z2luUGFja2FnZVdpbio+IHJlc3VsdDsKKyAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IHJlc3Vs
dDsKIAogICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgp
OwogICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCkBAIC0xMTksMzYzICsxMjcsMzIgQEAgVmVjdG9yPFBsdWdp
blBhY2thZ2VXaW4qPiBQbHVnaW5EYXRhYmFzZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVkgcm9vdEtleSwgUGx1
Z2luU2V0JiBwbHVnaW5zKQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0ID0g
UmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNvZnR3YXJlXFxNb3ppbGxhUGx1Z2lucyIsIDAsIEtF
WV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9T
VUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3Y2hhcl90IG5hbWVbMTI4XTsKLSAgICBG
SUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAgIGZv
ciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgIERXT1JEIG5hbWVMZW4gPSBfY291bnRvZihu
YW1lKTsKLSAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1l
TGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9IEVS
Uk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBXQ0hBUiBwYXRoU3Ry
W19NQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIHBhdGhTdHJTaXplID0gc2l6ZW9mKHBhdGhTdHIp
OwotICAgICAgICBEV09SRCB0eXBlOwotCi0gICAgICAgIHJlc3VsdCA9IFNIR2V0VmFsdWUoa2V5
LCBuYW1lLCBURVhUKCJQYXRoIiksICZ0eXBlLCAoTFBCWVRFKXBhdGhTdHIsICZwYXRoU3RyU2l6
ZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUyB8fCB0eXBlICE9IFJFR19T
WikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRF
X0RBVEEgYXR0cmlidXRlczsKLSAgICAgICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXgocGF0aFN0
ciwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmYXR0cmlidXRlcykgPT0gMCkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBQbHVnaW5Q
YWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKFN0cmluZyhwYXRoU3RyLCBwYXRoU3RyU2l6ZSAvIHNp
emVvZihXQ0hBUikgLSAxKSwgYXR0cmlidXRlcy5mdExhc3RXcml0ZVRpbWUpOwotCi0gICAgICAg
IGlmIChwYWNrYWdlKQotICAgICAgICAgICAgcGx1Z2lucy5hZGQocGFja2FnZSk7Ci0gICAgfQot
Ci0gICAgUmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQotUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlV2lu
OjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCi0gICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZp
bGVuYW1lczsKLSAgICBQbHVnaW5TZXQgcGx1Z2luczsKLQotICAgIEhBTkRMRSBoRmluZCA9IElO
VkFMSURfSEFORExFX1ZBTFVFOwotICAgIFdJTjMyX0ZJTkRfREFUQVcgZmluZEZpbGVEYXRhOwot
Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogb2xkV01QUGx1Z2luID0gMDsKLSAgICBQbHVnaW5QYWNr
YWdlV2luKiBuZXdXTVBQbHVnaW4gPSAwOwotCi0gICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICppdCArICJcXCoiOwotCi0gICAgICAg
IGhGaW5kID0gRmluZEZpcnN0RmlsZVcocGF0dGVybi5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLCAmZmluZEZpbGVEYXRhKTsKLQotICAgICAgICBpZiAoaEZpbmQgPT0gSU5WQUxJRF9I
QU5ETEVfVkFMVUUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBkbyB7Ci0gICAg
ICAgICAgICBpZiAoZmluZEZpbGVEYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVU
RV9ESVJFQ1RPUlkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFN0
cmluZyBmaWxlbmFtZSA9IFN0cmluZyhmaW5kRmlsZURhdGEuY0ZpbGVOYW1lLCB3Y3NsZW4oZmlu
ZEZpbGVEYXRhLmNGaWxlTmFtZSkpOwotICAgICAgICAgICAgaWYgKCghZmlsZW5hbWUuc3RhcnRz
V2l0aCgibnAiLCBmYWxzZSkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKCJkbGwiLCBmYWxzZSkpICYm
Ci0gICAgICAgICAgICAgICAgKCFlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIlBsdWdpbi5k
bGwiKSB8fCAhaXQtPmVuZHNXaXRoKCJTaG9ja3dhdmUgMTAiLCBmYWxzZSkpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSAqaXQgKyAi
XFwiICsgZmlsZW5hbWU7Ci0gICAgICAgICAgICBpZiAoIXVuaXF1ZUZpbGVuYW1lcy5hZGQoZnVs
bFBhdGgpLnNlY29uZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAg
ICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2FnZVdp
bjo6Y3JlYXRlUGFja2FnZShmdWxsUGF0aCwgZmluZEZpbGVEYXRhLmZ0TGFzdFdyaXRlVGltZSk7
Ci0KLSAgICAgICAgICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7Ci0gICAgICAgICAgICAgICAgcGx1
Z2lucy5hZGQocGx1Z2luUGFja2FnZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoZmlsZW5hbWUsICJucGRzcGxheS5kbGwiKSkKLSAgICAgICAgICAgICAgICAgICAg
b2xkV01QUGx1Z2luID0gcGx1Z2luUGFja2FnZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wLW1zd21wLmRsbCIpKQotICAgICAgICAgICAg
ICAgICAgICBuZXdXTVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgIH0gd2hpbGUgKEZpbmROZXh0RmlsZVcoaEZpbmQsICZmaW5kRmlsZURhdGEpICE9IDAp
OwotCi0gICAgICAgIEZpbmRDbG9zZShoRmluZCk7Ci0gICAgfQotCi0gICAgYWRkUGx1Z2luc0Zy
b21SZWdpc3RyeShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBsdWdpbnMpOwotICAgIGFkZFBsdWdpbnNG
cm9tUmVnaXN0cnkoSEtFWV9DVVJSRU5UX1VTRVIsIHBsdWdpbnMpOwotCi0gICAgLy8gSWYgYm90
aCB0aGUgb2xkIGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJlc2VudCBpbiB0aGUgcGx1Z2lucyBz
ZXQsIAotICAgIC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBzbyB3ZSBkb24ndCBlbmQgdXAgY2hv
b3NpbmcgdGhlIG9sZCBvbmUuCi0gICAgaWYgKG9sZFdNUFBsdWdpbiAmJiBuZXdXTVBQbHVnaW4p
Ci0gICAgICAgIHBsdWdpbnMucmVtb3ZlKG9sZFdNUFBsdWdpbik7Ci0KLSAgICByZXR1cm4gcGx1
Z2luczsKLX0KLQotc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBwYXJzZVZlcnNpb25TdHJpbmco
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQotewotICAgIFZlY3RvcjxpbnQ+IHZlcnNpb247
Ci0KLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7Ci0gICAgdW5zaWduZWQgZW5kUG9zOwotICAg
IAotICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCkpIHsKLSAgICAg
ICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgo
KTsgKytlbmRQb3MpCi0gICAgICAgICAgICBpZiAodmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICcu
JyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVyc2lvblN0cmluZy5zdWJzdHJp
bmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgpOwotICAgICAgICB2ZXJzaW9u
LmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKLQotICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyAr
IDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZlcnNpb247Ci19Ci0KLS8vIFRoaXMgcmV0dXJucyB3
aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25CCi1zdGF0aWMgaW5saW5lIGJv
b2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29uc3QgVmVj
dG9yPGludD4mIHZlcnNpb25CKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJz
aW9uQS5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXplKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAodmVyc2lvbkFbaV0gPiB2ZXJz
aW9uQltpXSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBlbHNlIGlmICh2ZXJz
aW9uQVtpXSA8IHZlcnNpb25CW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25zIGFyZSBlaXRoZXIgdGhlIHNh
bWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwganVzdCByZXR1cm4gZmFsc2UK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1
Z2luUGF0aHMoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQotewotICAgIC8vIEVudW1lcmF0ZSBhbGwg
TW96aWxsYSBwbHVnaW4gZGlyZWN0b3JpZXMgaW4gdGhlIHJlZ2lzdHJ5Ci0gICAgSEtFWSBrZXk7
Ci0gICAgTE9ORyByZXN1bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlf
TE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1vemlsbGEiKSwgMCwgS0VZX1JFQUQsICZr
ZXkpOwotICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICBXQ0hBUiBu
YW1lWzEyOF07Ci0gICAgICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgICAgICAvLyBF
bnVtZXJhdGUgc3Via2V5cwotICAgICAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewotICAgICAg
ICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7Ci0gICAg
ICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAs
IDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9S
X1NVQ0NFU1MpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIFN0cmluZyBl
eHRlbnNpb25zUGF0aCA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKSArICJcXEV4dGVuc2lvbnMiOwot
ICAgICAgICAgICAgSEtFWSBleHRlbnNpb25zS2V5OwotCi0gICAgICAgICAgICAvLyBUcnkgb3Bl
bmluZyB0aGUga2V5Ci0gICAgICAgICAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoa2V5LCBleHRl
bnNpb25zUGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCBLRVlfUkVBRCwg
JmV4dGVuc2lvbnNLZXkpOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NF
U1MpIHsKLSAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0IHRoZSBwbHVnaW5zIHBhdGgKLSAgICAg
ICAgICAgICAgICBXQ0hBUiBwbHVnaW5zUGF0aFN0cltfTUFYX1BBVEhdOwotICAgICAgICAgICAg
ICAgIERXT1JEIHBsdWdpbnNQYXRoU2l6ZSA9IHNpemVvZihwbHVnaW5zUGF0aFN0cik7Ci0gICAg
ICAgICAgICAgICAgRFdPUkQgdHlwZTsKLQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFJlZ1F1
ZXJ5VmFsdWVFeChleHRlbnNpb25zS2V5LCBURVhUKCJQbHVnaW5zIiksIDAsICZ0eXBlLCAoTFBC
WVRFKSZwbHVnaW5zUGF0aFN0ciwgJnBsdWdpbnNQYXRoU2l6ZSk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCi0gICAgICAg
ICAgICAgICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1Z2luc1BhdGhTdHIsIHBsdWdpbnNQ
YXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci0KLSAgICAgICAgICAgICAgICBSZWdDbG9z
ZUtleShleHRlbnNpb25zS2V5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgUmVnQ2xvc2VLZXkoa2V5KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9p
ZCBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykK
LXsKLSAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBsdWdpbiBpcyBpbnN0YWxsZWQgaW4gXFBG
aWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55IEZpcmVmb3ggaW5zdGFsbHMKLSAgICBX
Q0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRIICsgMV07Ci0gICAgRFdPUkQgcGx1Z2lu
RGlyZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzVyhURVhUKCIlU1lTVEVN
RFJJVkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2luRGlyZWN0b3J5U3RyLCBfY291bnRvZihw
bHVnaW5EaXJlY3RvcnlTdHIpKTsKLQotICAgIGlmIChwbHVnaW5EaXJlY3RvcnlTaXplID4gMCAm
JiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9IF9jb3VudG9mKHBsdWdpbkRpcmVjdG9yeVN0cikpCi0g
ICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1Z2luRGlyZWN0b3J5U3RyLCBwbHVnaW5EaXJl
Y3RvcnlTaXplIC0gMSkpOwotCi0gICAgRFdPUkQgdHlwZTsKLSAgICBXQ0hBUiBpbnN0YWxsYXRp
b25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKLSAgICBEV09SRCBpbnN0YWxsYXRpb25EaXJlY3Rv
cnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cik7Ci0KLSAgICBIUkVTVUxU
IHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxc
TWljcm9zb2Z0XFxNZWRpYVBsYXllciIpLCBURVhUKCJJbnN0YWxsYXRpb24gRGlyZWN0b3J5Iiks
ICZ0eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsICZpbnN0YWxsYXRpb25E
aXJlY3RvcnlTaXplKTsKLQotICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBl
ID09IFJFR19TWikKLSAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhpbnN0YWxsYXRpb25EaXJl
Y3RvcnlTdHIsIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkp
OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkUXVpY2tUaW1lUGx1Z2luUGF0aChWZWN0b3I8
U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgRFdPUkQgdHlwZTsKLSAgICBXQ0hBUiBpbnN0YWxsYXRp
b25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKLSAgICBEV09SRCBpbnN0YWxsYXRpb25EaXJlY3Rv
cnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cik7Ci0KLSAgICBIUkVTVUxU
IHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxc
QXBwbGUgQ29tcHV0ZXIsIEluYy5cXFF1aWNrVGltZSIpLCBURVhUKCJJbnN0YWxsRGlyIiksICZ0
eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsICZpbnN0YWxsYXRpb25EaXJl
Y3RvcnlTaXplKTsKLQotICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09
IFJFR19TWikgewotICAgICAgICBTdHJpbmcgcGx1Z2luRGlyID0gU3RyaW5nKGluc3RhbGxhdGlv
bkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikg
LSAxKSArICJcXHBsdWdpbnMiOwotICAgICAgICBwYXRocy5hcHBlbmQocGx1Z2luRGlyKTsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRBZG9iZUFjcm9iYXRQbHVnaW5QYXRoKFZl
Y3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBIS0VZIGtleTsKLSAgICBIUkVTVUxUIHJlc3Vs
dCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxBZG9i
ZVxcQWNyb2JhdCBSZWFkZXIiKSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChyZXN1bHQg
IT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV0NIQVIgbmFtZVsxMjhd
OwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgIFZlY3RvcjxpbnQ+IGxhdGVzdEFj
cm9iYXRWZXJzaW9uOwotICAgIFN0cmluZyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZzsKLQot
ICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKLSAg
ICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7Ci0gICAg
ICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwg
MCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNT
KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVmVjdG9yPGludD4gYWNyb2JhdFZlcnNp
b24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5hbWUsIG5hbWVMZW4pKTsKLSAgICAgICAg
aWYgKGNvbXBhcmVWZXJzaW9ucyhhY3JvYmF0VmVyc2lvbiwgbGF0ZXN0QWNyb2JhdFZlcnNpb24p
KSB7Ci0gICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvbiA9IGFjcm9iYXRWZXJzaW9uOwot
ICAgICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgPSBTdHJpbmcobmFtZSwgbmFt
ZUxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWxhdGVzdEFjcm9iYXRWZXJzaW9u
U3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIERXT1JEIHR5cGU7Ci0gICAgICAgIFdDSEFSIGFj
cm9iYXRJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOwotICAgICAgICBEV09SRCBhY3JvYmF0SW5z
dGFsbFBhdGhTaXplID0gc2l6ZW9mKGFjcm9iYXRJbnN0YWxsUGF0aFN0cik7Ci0KLSAgICAgICAg
U3RyaW5nIGFjcm9iYXRQbHVnaW5LZXlQYXRoID0gIlNvZnR3YXJlXFxBZG9iZVxcQWNyb2JhdCBS
ZWFkZXJcXCIgKyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyArICJcXEluc3RhbGxQYXRoIjsK
LSAgICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIGFjcm9iYXRQ
bHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsICZ0eXBlLCAo
TFBCWVRFKWFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFjcm9iYXRJbnN0YWxsUGF0aFNpemUpOwot
Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAgICAgU3Ry
aW5nIGFjcm9iYXRQbHVnaW5QYXRoID0gU3RyaW5nKGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgYWNy
b2JhdEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXGJyb3dzZXIiOwot
ICAgICAgICAgICAgcGF0aHMuYXBwZW5kKGFjcm9iYXRQbHVnaW5QYXRoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIFJlZ0Nsb3NlS2V5KGtleSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5n
IHNhZmFyaVBsdWdpbnNQYXRoKCkKLXsKLSAgICBXQ0hBUiBtb2R1bGVGaWxlTmFtZVN0cltfTUFY
X1BBVEhdOwotICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc1BhdGg7Ci0gICAgc3RhdGljIGJvb2wg
Y2FjaGVkUGx1Z2luUGF0aCA9IGZhbHNlOwotCi0gICAgaWYgKCFjYWNoZWRQbHVnaW5QYXRoKSB7
Ci0gICAgICAgIGNhY2hlZFBsdWdpblBhdGggPSB0cnVlOwotCi0gICAgICAgIGludCBtb2R1bGVG
aWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1lKDAsIG1vZHVsZUZpbGVOYW1lU3RyLCBfTUFY
X1BBVEgpOwotCi0gICAgICAgIGlmICghbW9kdWxlRmlsZU5hbWVMZW4gfHwgbW9kdWxlRmlsZU5h
bWVMZW4gPT0gX01BWF9QQVRIKQotICAgICAgICAgICAgZ290byBleGl0OwotCi0gICAgICAgIGlm
ICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZpbGVOYW1lU3RyKSkKLSAgICAgICAgICAgIGdv
dG8gZXhpdDsKLQotICAgICAgICBwbHVnaW5zUGF0aCA9IFN0cmluZyhtb2R1bGVGaWxlTmFtZVN0
cikgKyAiXFxQbHVnaW5zIjsKLSAgICB9Ci1leGl0OgotICAgIHJldHVybiBwbHVnaW5zUGF0aDsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZE1hY3JvbWVkaWFQbHVnaW5QYXRocyhWZWN0b3I8
U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgV0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01BWF9QQVRI
XTsKLQotICAgIGlmIChHZXRTeXN0ZW1EaXJlY3Rvcnkoc3lzdGVtRGlyZWN0b3J5U3RyLCBfY291
bnRvZihzeXN0ZW1EaXJlY3RvcnlTdHIpKSA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBX
Q0hBUiBtYWNyb21lZGlhRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKLQotICAgIFBhdGhDb21iaW5l
KG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0ciwgVEVYVCgibWFjcm9t
ZWRcXEZsYXNoIikpOwotICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsK
LQotICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVjdG9y
eVN0ciwgVEVYVCgibWFjcm9tZWRcXFNob2Nrd2F2ZSAxMCIpKTsKLSAgICBwYXRocy5hcHBlbmQo
bWFjcm9tZWRpYURpcmVjdG9yeVN0cik7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFi
YXNlV2luOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhz
OwotICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKLQotICAgIGlmICgh
b3VyUGF0aC5pc051bGwoKSkKLSAgICAgICAgcGF0aHMuYXBwZW5kKG91clBhdGgpOwotICAgIGFk
ZFF1aWNrVGltZVBsdWdpblBhdGgocGF0aHMpOwotICAgIGFkZEFkb2JlQWNyb2JhdFBsdWdpblBh
dGgocGF0aHMpOwotICAgIGFkZE1vemlsbGFQbHVnaW5QYXRocyhwYXRocyk7Ci0gICAgYWRkV2lu
ZG93c01lZGlhUGxheWVyUGx1Z2luUGF0aChwYXRocyk7Ci0gICAgYWRkTWFjcm9tZWRpYVBsdWdp
blBhdGhzKHBhdGhzKTsKLQotICAgIHJldHVybiBwYXRoczsKLX0KLQotYm9vbCBQbHVnaW5EYXRh
YmFzZVdpbjo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsK
LSAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhl
IGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICByZXR1cm4gKHJlZnJlc2goKSAmJiBt
X3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKTsKLX0KLQotUGx1Z2luUGFj
a2FnZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICBpZiAobWltZVR5cGUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dl
cigpOwotICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKLSAgICBQbHVn
aW5QYWNrYWdlV2luKiBwbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IDA7
CiAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CiAK
ICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmICgoKml0KS0+bWltZVRvRGVzY3JpcHRp
b25zKCkuY29udGFpbnMoa2V5KSkgewogICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7
Ci0gICAgICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBpbiBvdXIgb3duIHBsdWdpbnMgZGlyZWN0
b3J5Ci0gICAgICAgICAgICBpZiAocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSA9PSBvdXJQYXRo
KQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJu
IHBsdWdpbjsKIH0KIAotU3RyaW5nIFBsdWdpbkRhdGFiYXNlV2luOjpNSU1FVHlwZUZvckV4dGVu
c2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QKK1N0cmluZyBQbHVnaW5EYXRhYmFz
ZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0CiB7
CiAgICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IAogICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwot
ICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKICAgICBTdHJpbmcgbWlt
ZVR5cGU7Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gMDsKKyAgICBQbHVnaW5QYWNr
YWdlKiBwbHVnaW4gPSAwOwogCiAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBNSU1FVG9F
eHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRl
bnNpb25zKCkuZW5kKCk7CkBAIC00ODYsOSArMTYzLDYgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNl
V2luOjpNSU1FVHlwZUZvckV4dAogICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgIG1pbWVU
eXBlID0gbWltZV9pdC0+Zmlyc3Q7CiAgICAgICAgICAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQp
LmdldCgpOwotICAgICAgICAgICAgICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBpbiBvdXIgb3du
IHBsdWdpbnMgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4tPnBhcmVu
dERpcmVjdG9yeSgpID09IG91clBhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ5Nyw5ICsx
NzEsOSBAQCBTdHJpbmcgUGx1Z2luRGF0YWJhc2VXaW46Ok1JTUVUeXBlRm9yRXh0CiAgICAgcmV0
dXJuIG1pbWVUeXBlOwogfQogCi1QbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6
ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCitQbHVnaW5QYWNr
YWdlKiBQbHVnaW5EYXRhYmFzZTo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYg
bWltZVR5cGUpCiB7ICAgCi0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gcGx1Z2luRm9y
TUlNRVR5cGUobWltZVR5cGUpOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IHBsdWdpbkZv
ck1JTUVUeXBlKG1pbWVUeXBlKTsKICAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwuc3RyaW5nKCk7
CiAgICAgCiAgICAgaWYgKCFwbHVnaW4pIHsKQEAgLTUyMSwyMCArMTk1LDQgQEAgUGx1Z2luUGFj
a2FnZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46OmZpbgogICAgIHJldHVybiBwbHVnaW47CiB9CiAK
LVBsdWdpblZpZXdXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpjcmVhdGVQbHVnaW5WaWV3KEZyYW1l
KiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxv
YWRNYW51YWxseSkKLXsKLSAgICAvLyBpZiB3ZSBmYWlsIHRvIGZpbmQgYSBwbHVnaW4gZm9yIHRo
aXMgTUlNRSB0eXBlLCBmaW5kUGx1Z2luIHdpbGwgc2VhcmNoIGZvcgotICAgIC8vIGEgcGx1Z2lu
IGJ5IHRoZSBmaWxlIGV4dGVuc2lvbiBhbmQgdXBkYXRlIHRoZSBNSU1FIHR5cGUsIHNvIHBhc3Mg
YSBtdXRhYmxlIFN0cmluZwotICAgIFN0cmluZyBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKLSAg
ICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5
KTsKLSAgICAKLSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUg
ZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIGlmICghcGx1Z2luICYmIHJlZnJlc2go
KSkgewotICAgICAgICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKLSAgICAgICAgcGx1Z2luID0g
ZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1
cm4gbmV3IFBsdWdpblZpZXdXaW4ocGFyZW50RnJhbWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwg
dXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGVDb3B5LCBsb2FkTWFudWFsbHkp
OwotfQotCiB9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAkocmV2aXNpb24gMjk2MjYp
CShmcm9tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uaDoyOTYyNikKKysr
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5EYXRhYmFzZVdpbl9ICisj
ZGVmaW5lIFBsdWdpbkRhdGFiYXNlV2luX0gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBGcmFtZTsK
KyAgICBjbGFzcyBJbnRTaXplOworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luUGFj
a2FnZVdpbjsKKyAgICBjbGFzcyBQbHVnaW5WaWV3V2luOworCisgICAgdHlwZWRlZiBIYXNoU2V0
PFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiwgUGx1Z2luUGFja2FnZVdpbkhhc2g+IFBsdWdpblNl
dDsKKyAgCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VXaW4geworICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlV2luKiBpbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgICAg
IFBsdWdpblZpZXdXaW4qIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25z
dCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVz
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisKKyAgICAgICAg
Ym9vbCByZWZyZXNoKCk7CisgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gcGx1Z2lu
cygpIGNvbnN0OworICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpOworICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJp
bmcmKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXRocykgeyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KKyAgICAgICAg
UGx1Z2luU2V0IGdldFBsdWdpbnNJblBhdGhzKCkgY29uc3Q7CisKKyAgICAgICAgUGx1Z2luUGFj
a2FnZVdpbiogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpOwor
ICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKTsKKyAgICAgICAgU3RyaW5nIE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgZXh0ZW5zaW9uKSBjb25zdDsKKworICAgICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4g
ZGVmYXVsdFBsdWdpblBhdGhzKCk7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gbV9wbHVnaW5Q
YXRoczsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVnaXN0ZXJlZE1JTUVUeXBlczsKKyAg
ICAgICAgUGx1Z2luU2V0IG1fcGx1Z2luczsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHJldmlzaW9uIDI5
NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
LCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yMyw0MSArMjQsMzkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYg
UGx1Z2luRGF0YWJhc2VXaW5fSAotI2RlZmluZSBQbHVnaW5EYXRhYmFzZVdpbl9ICi0KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpZm5kZWYgUGx1
Z2luRGF0YWJhc2VfSAorI2RlZmluZSBQbHVnaW5EYXRhYmFzZV9ICiAKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKyNpbmNsdWRlICJQ
bHVnaW5QYWNrYWdlLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBFbGVtZW50OwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEludFNp
emU7CiAgICAgY2xhc3MgS1VSTDsKLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdlV2luOwotICAgIGNs
YXNzIFBsdWdpblZpZXdXaW47CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKIAotICAgIHR5cGVk
ZWYgSGFzaFNldDxSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4sIFBsdWdpblBhY2thZ2VXaW5IYXNo
PiBQbHVnaW5TZXQ7CisgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlPiwg
UGx1Z2luUGFja2FnZUhhc2g+IFBsdWdpblNldDsKICAgCi0gICAgY2xhc3MgUGx1Z2luRGF0YWJh
c2VXaW4geworICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBQbHVnaW5EYXRhYmFzZVdpbiogaW5zdGFsbGVkUGx1Z2lucygpOwotICAgICAgICBQ
bHVnaW5WaWV3V2luKiBjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3Qg
SW50U2l6ZSYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworICAgICAgICBzdGF0
aWMgUGx1Z2luRGF0YWJhc2UqIGluc3RhbGxlZFBsdWdpbnMoKTsKIAogICAgICAgICBib29sIHJl
ZnJlc2goKTsKLSAgICAgICAgVmVjdG9yPFBsdWdpblBhY2thZ2VXaW4qPiBwbHVnaW5zKCkgY29u
c3Q7CisgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcGx1Z2lucygpIGNvbnN0OwogICAg
ICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwog
ICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKICAgICBwcml2
YXRlOgogICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXRocykgeyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KICAgICAgICAgUGx1Z2luU2V0IGdldFBs
dWdpbnNJblBhdGhzKCkgY29uc3Q7CiAKLSAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogZmluZFBs
dWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICBQbHVnaW5Q
YWNrYWdlV2luKiBwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAg
ICAgICAgUGx1Z2luUGFja2FnZSogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYg
bWltZVR5cGUpOworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5Gb3JNSU1FVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKTsKICAgICAgICAgU3RyaW5nIE1JTUVUeXBlRm9yRXh0ZW5zaW9u
KGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgVmVjdG9y
PFN0cmluZz4gZGVmYXVsdFBsdWdpblBhdGhzKCk7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luSW5mb1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5m
b1N0b3JlLmNwcAkocmV2aXNpb24gMjk2MjYpCShmcm9tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z0luSW5mb1N0b3JlV2luLmNwcDoyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZv
U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2lu
Y2x1ZGUgIlBsdWdpbkRhdGFiYXNlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6
Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQgaSkgCit7IAorICAgIFBs
dWdpbkRhdGFiYXNlV2luICpkYiA9IFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5z
KCk7CisgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5JbmZvOworICAgIFBsdWdpblBh
Y2thZ2VXaW4qIHBhY2thZ2UgPSBkYi0+cGx1Z2lucygpW2ldOworCisgICAgaW5mby0+bmFtZSA9
IHBhY2thZ2UtPm5hbWUoKTsKKyAgICBpbmZvLT5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsK
KyAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsKKworICAgIGNvbnN0IE1J
TUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRv
RGVzY3JpcHRpb25zKCk7CisgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CisgICAgZm9yIChNSU1FVG9EZXNjcmlw
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0gbmV3IE1p
bWVDbGFzc0luZm87CisgICAgICAgIGluZm8tPm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAg
CisgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgIG1pbWUtPmRlc2MgPSBp
dC0+c2Vjb25kOworICAgICAgICBtaW1lLT5wbHVnaW4gPSBpbmZvOworCisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1p
bWUtPnR5cGUpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4
dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAg
ICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSAiLCI7CisKKyAgICAgICAgICAgIG1pbWUtPnN1ZmZp
eGVzICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaW5m
bzsKK30KKwordW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCktPnBsdWdp
bnMoKS5zaXplKCk7Cit9CisKKworU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZv
ck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8gRklYTUUgNTYyOTEz
OTogSW1wbGVtZW50IHRoaXMgbWV0aG9kIG9uIFdpbmRvd3MuCisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCisgICAgCitib29sIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25z
dCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBlKSAKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJh
c2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUp
OworfQorCit2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkT3BlblBhZ2VzKQoreworICAg
IFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKKworICAg
IGlmIChyZWxvYWRPcGVuUGFnZXMpIHsKKyAgICAgICAgLy8gRklYTUU6IHJlbG9hZCBvcGVuIHBh
Z2VzCisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3Jl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcAko
cmV2aXNpb24gMjk2MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDE2ICsyNiwxNiBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJh
c2VXaW4uaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2lu
RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9y
UGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKSAKIHsgCi0gICAgUGx1Z2luRGF0YWJhc2VXaW4gKmRi
ID0gUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBQbHVnaW5EYXRh
YmFzZSAqZGIgPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpOwogICAgIFBsdWdp
bkluZm8qIGluZm8gPSBuZXcgUGx1Z2luSW5mbzsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNr
YWdlID0gZGItPnBsdWdpbnMoKVtpXTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gZGIt
PnBsdWdpbnMoKVtpXTsKIAogICAgIGluZm8tPm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7CiAgICAg
aW5mby0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CkBAIC02NSwyNSArNjYsMjUgQEAgUGx1
Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaQogCiB1bnNpZ25lZCBQbHVnSW5J
bmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gUGx1Z2luRGF0YWJh
c2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKKyAgICByZXR1cm4g
UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKIH0K
IAogCiBTdHJpbmcgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICAvLyBGSVhNRSA1NjI5MTM5OiBJbXBsZW1lbnQgdGhp
cyBtZXRob2Qgb24gV2luZG93cy4KKyAgICAvLyBGSVhNRSA1NjI5MTM5OiBJbXBsZW1lbnQgdGhp
cyBtZXRob2QuCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiAgICAgCiBib29sIFBsdWdJbklu
Zm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBl
KSAKIHsKLSAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+
aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpOworICAgIHJldHVybiBQbHVnaW5EYXRhYmFz
ZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJlZChtaW1lVHlwZSk7CiB9
CiAKIHZvaWQgcmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWRPcGVuUGFnZXMpCiB7Ci0gICAgUGx1
Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOworICAgIFBsdWdp
bkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKIAogICAgIGlmIChyZWxv
YWRPcGVuUGFnZXMpIHsKICAgICAgICAgLy8gRklYTUU6IHJlbG9hZCBvcGVuIHBhZ2VzCkluZGV4
OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCShyZXZpc2lvbiAyOTYyNikJKGZyb20gV2ViQ29y
ZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcDoyOTYyNikKKysrIFdlYkNvcmUvcGx1
Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSA8c2hsd2FwaS5oPgorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorCisjaW5jbHVkZSAiVGltZXIuaCIK
KyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwu
aCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bs
dWdpblBhY2thZ2VXaW46On5QbHVnaW5QYWNrYWdlV2luKCkKK3sKKyAgICBBU1NFUlQoIW1faXNM
b2FkZWQpOworfQorCitzdGF0aWMgU3RyaW5nIGdldFZlcnNpb25JbmZvKGNvbnN0IExQVk9JRCB2
ZXJzaW9uSW5mb0RhdGEsIGNvbnN0IFN0cmluZyYgaW5mbykKK3sKKyAgICBMUFZPSUQgYnVmZmVy
OworICAgIFVJTlQgYnVmZmVyTGVuZ3RoOworICAgIFN0cmluZyBzdWJJbmZvID0gIlxcU3RyaW5n
ZmlsZUluZm9cXDA0MDkwNEU0XFwiICsgaW5mbzsKKworICAgIGJvb2wgcmV0dmFsID0gVmVyUXVl
cnlWYWx1ZVcodmVyc2lvbkluZm9EYXRhLCBjb25zdF9jYXN0PFVDaGFyKj4oc3ViSW5mby5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmYnVmZmVyLCAmYnVmZmVyTGVuZ3RoKTsKKyAgICBpZiAoIXJldHZhbCB8fCBidWZm
ZXJMZW5ndGggPT0gMCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gU3VidHJh
Y3QgMSBmcm9tIHRoZSBsZW5ndGg7IHdlIGRvbid0IHdhbnQgdGhlIHRyYWlsaW5nIDAKKyAgICBy
ZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIpLCBidWZmZXJMZW5n
dGggLSAxKTsKK30KKworc3RhdGljIFZlY3RvcjxTdHJpbmc+IHNwbGl0U3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyLCBjaGFyIGRlbGltaXRlciwgaW50IHBhZFRvKQoreworICAgIGludCBwb3MgPSAw
OworICAgIGludCBuZXdQb3M7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworICAgIERlcHJl
Y2F0ZWRTdHJpbmcgZHMgPSBzdHIuZGVwcmVjYXRlZFN0cmluZygpOworICAgIFN0cmluZyBzOwor
ICAgIGRvIHsKKworICAgICAgICBuZXdQb3MgPSBkcy5maW5kKGRlbGltaXRlciwgcG9zKTsKKwor
ICAgICAgICBpZiAobmV3UG9zID09IC0xKQorICAgICAgICAgICAgcyA9IGRzLm1pZChwb3MpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzID0gZHMubWlkKHBvcywgbmV3UG9zIC0gcG9zKTsK
KyAgICAgICAgCisgICAgICAgIGlmICghcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHMpOworCisgICAgICAgIHBvcyA9IG5ld1BvcyArIDE7CisgICAgfSB3aGlsZSAobmV3
UG9zICE9IC0xKTsKKworICAgIHdoaWxlIChwYWRUbyAhPSAtMSAmJiBzdGF0aWNfY2FzdDxpbnQ+
KHJlc3VsdC5zaXplKCkpIDwgcGFkVG8pCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiIpOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFy
eVNvb24oKQoreworICAgIEFTU0VSVCghbV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpOwor
ICAgIEFTU0VSVChtX21vZHVsZSk7CisgICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOworCisg
ICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBQbHVnaW5Q
YWNrYWdlV2luOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luUGFja2FnZVdpbj4q
IC8qdGltZXIqLykKK3sKKyAgICBBU1NFUlQobV9tb2R1bGUpOworICAgIEFTU0VSVChtX2xvYWRD
b3VudCA9PSAwKTsKKworICAgIDo6RnJlZUxpYnJhcnkobV9tb2R1bGUpOworICAgIG1fbW9kdWxl
ID0gMDsKK30KKworUGx1Z2luUGFja2FnZVdpbjo6UGx1Z2luUGFja2FnZVdpbihjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpCisgICAgOiBtX3BhdGgocGF0
aCkKKyAgICAsIG1fbW9kdWxlKDApCisgICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQp
CisgICAgLCBtX2lzTG9hZGVkKGZhbHNlKQorICAgICwgbV9sb2FkQ291bnQoMCkKKyAgICAsIG1f
ZnJlZUxpYnJhcnlUaW1lcih0aGlzLCAmUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlUaW1l
ckZpcmVkKQorICAgICwgbV9maWxlVmVyc2lvbkxTKDApCisgICAgLCBtX2ZpbGVWZXJzaW9uTVMo
MCkKK3sKKyAgICBtX2ZpbGVOYW1lID0gU3RyaW5nKFBhdGhGaW5kRmlsZU5hbWUobV9wYXRoLmNo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpKTsKKyAgICBtX3BhcmVudERpcmVjdG9yeSA9
IG1fcGF0aC5sZWZ0KG1fcGF0aC5sZW5ndGgoKSAtIG1fZmlsZU5hbWUubGVuZ3RoKCkgLSAxKTsK
K30KKwordm9pZCBQbHVnaW5QYWNrYWdlV2luOjpzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJz
aW9uSW5mb0RhdGEpCit7CisgICAgVlNfRklYRURGSUxFSU5GTyogaW5mbzsKKyAgICBVSU5UIGlu
Zm9TaXplOworICAgIGlmICghVmVyUXVlcnlWYWx1ZSh2ZXJzaW9uSW5mb0RhdGEsIFRFWFQoIlxc
IiksIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNpemVvZihWU19G
SVhFREZJTEVJTkZPKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZmlsZVZlcnNpb25MUyA9IGlu
Zm8tPmR3RmlsZVZlcnNpb25MUzsKKyAgICBtX2ZpbGVWZXJzaW9uTVMgPSBpbmZvLT5kd0ZpbGVW
ZXJzaW9uTVM7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZVdpbjo6aXNQbHVnaW5CbGFja2xpc3Rl
ZCgpCit7CisgICAgc3RhdGljIGNvbnN0IERXT1JEIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWly
ZWRWZXJzaW9uTVNEV09SRCA9IDB4MDAwMTAwMDA7CisgICAgc3RhdGljIGNvbnN0IERXT1JEIHNp
bHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFNEV09SRCA9IDB4NTFCRTAwMDA7CisK
KyAgICBpZiAobmFtZSgpID09ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgeworICAgICAgICAvLyB3
b3JrYXJvdW5kIGZvciA8cmRhcjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZlcmxpZ2h0IHdoZW4g
b3BlbmluZyBtaWNyb3NvZnQuY29tLgorICAgICAgICAvLyB0aGUgbGF0ZXN0IDEuMCB2ZXJzaW9u
IG9mIFNpbHZlcmxpZ2h0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNoLCBzbyBhbGxvdyBp
dAorICAgICAgICAvLyBhbmQgYW55IG5ld2VyIHZlcnNpb25zCisgICAgICAgIGlmIChtX2ZpbGVW
ZXJzaW9uTVMgPCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgfHwK
KyAgICAgICAgICAgIChtX2ZpbGVWZXJzaW9uTVMgPT0gc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1
aXJlZFZlcnNpb25NU0RXT1JEICYmIG1fZmlsZVZlcnNpb25MUyA8IHNpbHZlcmxpZ2h0UGx1Z2lu
TWluUmVxdWlyZWRWZXJzaW9uTFNEV09SRCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9IGVsc2UgaWYgKGZpbGVOYW1lKCkgPT0gIm5wbW96YXguZGxsIikKKyAgICAgICAgLy8gQnVn
IDE1MjE3OiBNb3ppbGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyB4
cGNvbV9jb3JlLmRsbAorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpmZXRjaEluZm8oKQoreworICAgIERXT1JEIHZl
cnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsKKyAgICB2ZXJzaW9uSW5mb1NpemUgPSBHZXRGaWxl
VmVyc2lvbkluZm9TaXplVyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwg
Jnplcm9IYW5kbGUpOyAKKworICAgIGlmICh2ZXJzaW9uSW5mb1NpemUgPT0gMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSA9IGZhc3RNYWxsb2Mo
dmVyc2lvbkluZm9TaXplKTsKKworICAgIGlmICghR2V0RmlsZVZlcnNpb25JbmZvVyhtX3BhdGgu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJz
aW9uSW5mb0RhdGEpKSB7CisgICAgICAgIGZhc3RGcmVlKHZlcnNpb25JbmZvRGF0YSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX25hbWUgPSBnZXRWZXJzaW9uSW5mbyh2
ZXJzaW9uSW5mb0RhdGEsICJQcm9kdWN0TmFtZSIpOworICAgIG1fZGVzY3JpcHRpb24gPSBnZXRW
ZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJGaWxlRGVzY3JpcHRpb24iKTsKKworICAgIGlm
IChtX25hbWUuaXNOdWxsKCkgfHwgbV9kZXNjcmlwdGlvbi5pc051bGwoKSkgeworICAgICAgICBm
YXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgc3RvcmVGaWxlVmVyc2lvbih2ZXJzaW9uSW5mb0RhdGEpOworCisgICAgaWYgKGlzUGx1
Z2luQmxhY2tsaXN0ZWQoKSkgeworICAgICAgICBmYXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVmVjdG9yPFN0cmluZz4gbWltZVR5
cGVzID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLCAiTUlNRVR5
cGUiKSwgJ3wnLCAtMSk7CisgICAgVmVjdG9yPFN0cmluZz4gZmlsZUV4dGVudHMgPSBzcGxpdFN0
cmluZyhnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJGaWxlRXh0ZW50cyIpLCAnfCcs
IG1pbWVUeXBlcy5zaXplKCkpOworICAgIFZlY3RvcjxTdHJpbmc+IGRlc2NyaXB0aW9ucyA9IHNw
bGl0U3RyaW5nKGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIkZpbGVPcGVuTmFtZSIp
LCAnfCcsIG1pbWVUeXBlcy5zaXplKCkpOworCisgICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRh
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lVHlwZXMuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgLy8gR2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxpc3QgaW4gdGhlIGRlc2Ny
aXB0aW9uIHN0cmluZworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbnNb
aV07ICAgIAorICAgICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24uZmluZCgiKCoiKTsKKyAgICAg
ICAgaWYgKHBvcyAhPSAtMSkgeworICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgYSBzcGFj
ZSB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZgorICAgICAgICAgICAgaWYgKHBvcyA+IDEgJiYg
ZGVzY3JpcHRpb25bcG9zIC0gMV0gPT0gJyAnKQorICAgICAgICAgICAgICAgIHBvcy0tOworCisg
ICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmxlZnQocG9zKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1pbWVUeXBlc1tpXSA9IG1pbWVUeXBlc1tpXS5sb3dlcigpOworCisgICAg
ICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZVR5cGVzW2ldLCBzcGxpdFN0cmluZyhmaWxl
RXh0ZW50c1tpXSwgJywnLCAtMSkpOworICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQo
bWltZVR5cGVzW2ldLCBkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUGx1Z2luUGFja2FnZVdpbjo6bG9hZCgpCit7CisgICAgaWYgKG1fZnJlZUxpYnJh
cnlUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIEFTU0VSVChtX21vZHVsZSk7CisgICAgICAg
IG1fZnJlZUxpYnJhcnlUaW1lci5zdG9wKCk7CisgICAgfSBlbHNlIGlmIChtX2lzTG9hZGVkKSB7
CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxz
ZSB7CisgICAgICAgIFdDSEFSIGN1cnJlbnRQYXRoW01BWF9QQVRIXTsKKworICAgICAgICBpZiAo
ITo6R2V0Q3VycmVudERpcmVjdG9yeVcoTUFYX1BBVEgsIGN1cnJlbnRQYXRoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBTdHJpbmcgcGF0aCA9IG1fcGF0aC5zdWJzdHJp
bmcoMCwgbV9wYXRoLnJldmVyc2VGaW5kKCdcXCcpKTsKKworICAgICAgICBpZiAoITo6U2V0Q3Vy
cmVudERpcmVjdG9yeVcocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBMb2FkIHRoZSBsaWJyYXJ5Cisg
ICAgICAgIG1fbW9kdWxlID0gOjpMb2FkTGlicmFyeVcobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCkpOworCisgICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5Vyhj
dXJyZW50UGF0aCkpIHsKKyAgICAgICAgICAgIGlmIChtX21vZHVsZSkKKyAgICAgICAgICAgICAg
ICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9tb2R1bGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfR2V0RW50cnlQb2ludHNGdW5j
UHRyIE5QX0dldEVudHJ5UG9pbnRzID0gMDsKKyAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9J
bml0aWFsaXplID0gMDsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAgTlBfSW5pdGlhbGl6ZSA9
IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0luaXRp
YWxpemUiKTsKKyAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRyeVBvaW50c0Z1bmNQ
dHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBvaW50cyIpOworICAgIG1f
TlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1
bGUsICJOUF9TaHV0ZG93biIpOworCisgICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFOUF9HZXRF
bnRyeVBvaW50cyB8fCAhbV9OUFBfU2h1dGRvd24pCisgICAgICAgIGdvdG8gYWJvcnQ7CisgIAor
ICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAg
ICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisKKyAgICBucEVy
ciA9IE5QX0dldEVudHJ5UG9pbnRzKCZtX3BsdWdpbkZ1bmNzKTsKKyAgICBMT0dfTlBFUlJPUihu
cEVycik7CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFi
b3J0OworCisgICAgbWVtc2V0KCZtX2Jyb3dzZXJGdW5jcywgMCwgc2l6ZW9mKG1fYnJvd3NlckZ1
bmNzKSk7CisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAobV9icm93c2VyRnVuY3Mp
OworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9SOworICAgIG1f
YnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2VyRnVuY3MucG9z
dHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBO
X1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJl
YW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAgbV9icm93c2Vy
RnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1fYnJvd3NlckZ1
bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBO
X1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAgbV9icm93c2Vy
RnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVuY3MucmVsb2Fk
cGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5v
dGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlm
eSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBO
X0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0Owor
ICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lv
bjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7CisgICAgbV9icm93
c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9icm93c2VyRnVu
Y3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOwor
ICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNF
bmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0g
X05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lk
ZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3Mu
Z2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOworICAgIG1f
YnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50aWZpZXI7Cisg
ICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNT
dHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4
RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaW50ZnJvbWlkZW50aWZpZXIgPSBf
TlBOX0ludEZyb21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9
IF9OUE5fQ3JlYXRlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9O
UE5fUmV0YWluT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBO
X1JlbGVhc2VPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7
CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7CisgICAgbV9icm93
c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1
bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5y
ZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Mu
aGFzcHJvcGVydHkgPSBfTlBOX0hhc01ldGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRo
b2QgPSBfTlBOX0hhc1Byb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9
IF9OUE5fU2V0RXhjZXB0aW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5f
RW51bWVyYXRlOworCisgICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcyk7
CisgICAgTE9HX05QRVJST1IobnBFcnIpOworCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VS
Uk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1
cm4gdHJ1ZTsKK2Fib3J0OgorICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxvYWQoKQoreworICAgIGlm
ICghbV9pc0xvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKC0tbV9sb2FkQ291bnQg
PiAwKQorICAgICAgICByZXR1cm47CisKKyAgICBtX05QUF9TaHV0ZG93bigpOworCisgICAgdW5s
b2FkV2l0aG91dFNodXRkb3duKCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZVdpbjo6dW5sb2Fk
V2l0aG91dFNodXRkb3duKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsKKyAgICBBU1NFUlQobV9tb2R1bGUp
OworCisgICAgLy8gPHJkYXI6Ly81NTMwNTE5PjogQ3Jhc2ggd2hlbiBjbG9zaW5nIHRhYiB3aXRo
IHBkZiBmaWxlIChSZWFkZXIgNyBvbmx5KQorICAgIC8vIElmIHRoZSBwbHVnaW4gaGFzIHN1YmNs
YXNzZWQgaXRzIHBhcmVudCB3aW5kb3csIGFzIHdpdGggUmVhZGVyIDcsIHdlIG1heSBoYXZlCisg
ICAgLy8gZ290dGVuIGhlcmUgYnkgd2F5IG9mIHRoZSBwbHVnaW4ncyBpbnRlcm5hbCB3aW5kb3cg
cHJvYyBmb3J3YXJkaW5nIGEgbWVzc2FnZSB0byBvdXIKKyAgICAvLyBvcmlnaW5hbCB3aW5kb3cg
cHJvYy4gSWYgd2UgZnJlZSB0aGUgcGx1Z2luIGxpYnJhcnkgZnJvbSBoZXJlLCB3ZSB3aWxsIGp1
bXAgYmFjaworICAgIC8vIHRvIGNvZGUgd2UganVzdCBmcmVlZCB3aGVuIHdlIHJldHVybiwgc28g
ZGVsYXkgY2FsbGluZyBGcmVlTGlicmFyeSBhdCBsZWFzdCB1bnRpbAorICAgIC8vIHRoZSBuZXh0
IG1lc3NhZ2UgbG9vcAorICAgIGZyZWVMaWJyYXJ5U29vbigpOworCisgICAgbV9pc0xvYWRlZCA9
IGZhbHNlOworfQorCitQbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQ
YWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCkK
K3sKKyAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gbmV3IFBsdWdpblBhY2thZ2VXaW4o
cGF0aCwgbGFzdE1vZGlmaWVkKTsKKworICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpIHsK
KyAgICAgICAgZGVsZXRlIHBhY2thZ2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gcGFja2FnZTsKK30KKwordW5zaWduZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFz
aCgpIGNvbnN0Cit7IAorICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1szXSA9IHsKKyAgICAgICAgbV9k
ZXNjcmlwdGlvbi5pbXBsKCktPmhhc2goKSwKKyAgICAgICAgbV9sYXN0TW9kaWZpZWQuZHdMb3dE
YXRlVGltZSwKKyAgICAgICAgbV9sYXN0TW9kaWZpZWQuZHdIaWdoRGF0ZVRpbWUKKyAgICB9Owor
CisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNo
YXIqPihoYXNoQ29kZXMpLCAzICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOwor
fQorCitib29sIFBsdWdpblBhY2thZ2VXaW46OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4m
IGEsIGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlw
dGlvbiA9PSBiLm1fZGVzY3JpcHRpb24gJiYgKENvbXBhcmVGaWxlVGltZSgmYS5tX2xhc3RNb2Rp
ZmllZCwgJmIubV9sYXN0TW9kaWZpZWQpID09IDApOworfQorCit9CkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblBhY2thZ2UuY3BwCShyZXZpc2lvbiAyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5QYWNrYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDEwICsyNCw4IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaW5jbHVkZSA8c2hsd2FwaS5oPgotCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBh
Y2thZ2UuaCIKIAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmlu
Zy5oIgpAQCAtMzUsNTUgKzM0LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGx1Z2lu
UGFja2FnZVdpbjo6flBsdWdpblBhY2thZ2VXaW4oKQorUGx1Z2luUGFja2FnZTo6flBsdWdpblBh
Y2thZ2UoKQogewogICAgIEFTU0VSVCghbV9pc0xvYWRlZCk7CiB9CiAKLXN0YXRpYyBTdHJpbmcg
Z2V0VmVyc2lvbkluZm8oY29uc3QgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSwgY29uc3QgU3RyaW5n
JiBpbmZvKQotewotICAgIExQVk9JRCBidWZmZXI7Ci0gICAgVUlOVCBidWZmZXJMZW5ndGg7Ci0g
ICAgU3RyaW5nIHN1YkluZm8gPSAiXFxTdHJpbmdmaWxlSW5mb1xcMDQwOTA0RTRcXCIgKyBpbmZv
OwotCi0gICAgYm9vbCByZXR2YWwgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEsIGNv
bnN0X2Nhc3Q8VUNoYXIqPihzdWJJbmZvLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkp
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZmZXIsICZidWZmZXJMZW5n
dGgpOwotICAgIGlmICghcmV0dmFsIHx8IGJ1ZmZlckxlbmd0aCA9PSAwKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0KLSAgICAvLyBTdWJ0cmFjdCAxIGZyb20gdGhlIGxlbmd0aDsgd2UgZG9u
J3Qgd2FudCB0aGUgdHJhaWxpbmcgMAotICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxVQ2hhcio+KGJ1ZmZlciksIGJ1ZmZlckxlbmd0aCAtIDEpOwotfQotCi1zdGF0aWMgVmVjdG9y
PFN0cmluZz4gc3BsaXRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIGNoYXIgZGVsaW1pdGVyLCBp
bnQgcGFkVG8pCi17Ci0gICAgaW50IHBvcyA9IDA7Ci0gICAgaW50IG5ld1BvczsKLSAgICBWZWN0
b3I8U3RyaW5nPiByZXN1bHQ7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBkcyA9IHN0ci5kZXByZWNh
dGVkU3RyaW5nKCk7Ci0gICAgU3RyaW5nIHM7Ci0gICAgZG8gewotCi0gICAgICAgIG5ld1BvcyA9
IGRzLmZpbmQoZGVsaW1pdGVyLCBwb3MpOwotCi0gICAgICAgIGlmIChuZXdQb3MgPT0gLTEpCi0g
ICAgICAgICAgICBzID0gZHMubWlkKHBvcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHMg
PSBkcy5taWQocG9zLCBuZXdQb3MgLSBwb3MpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFzLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocyk7Ci0KLSAgICAgICAgcG9zID0g
bmV3UG9zICsgMTsKLSAgICB9IHdoaWxlIChuZXdQb3MgIT0gLTEpOwotCi0gICAgd2hpbGUgKHBh
ZFRvICE9IC0xICYmIHN0YXRpY19jYXN0PGludD4ocmVzdWx0LnNpemUoKSkgPCBwYWRUbykKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiIik7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lk
IFBsdWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5U29vbigpCit2b2lkIFBsdWdpblBhY2thZ2U6
OmZyZWVMaWJyYXJ5U29vbigpCiB7CiAgICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5VGltZXIuaXNB
Y3RpdmUoKSk7CiAgICAgQVNTRVJUKG1fbW9kdWxlKTsKQEAgLTkyLDIzMCArNDgsMjggQEAgdm9p
ZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVNvb24oKQogICAgIG1fZnJlZUxpYnJhcnlU
aW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLXZvaWQgUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxp
YnJhcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+KiAvKnRpbWVyKi8pCit2b2lk
IFBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdl
PiogLyp0aW1lciovKQogewogICAgIEFTU0VSVChtX21vZHVsZSk7CiAgICAgQVNTRVJUKG1fbG9h
ZENvdW50ID09IDApOwogCi0gICAgOjpGcmVlTGlicmFyeShtX21vZHVsZSk7CisgICAgdW5sb2Fk
TW9kdWxlKG1fbW9kdWxlKTsKICAgICBtX21vZHVsZSA9IDA7CiB9CiAKLVBsdWdpblBhY2thZ2VX
aW46OlBsdWdpblBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYg
bGFzdE1vZGlmaWVkKQotICAgIDogbV9wYXRoKHBhdGgpCitQbHVnaW5QYWNrYWdlOjpQbHVnaW5Q
YWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgUGxhdGZvcm1GaWxlVGltZSYgbGFzdE1v
ZGlmaWVkKQorICAgIDogbV9pc0xvYWRlZChmYWxzZSkKKyAgICAsIG1fbG9hZENvdW50KDApCisg
ICAgLCBtX3BhdGgocGF0aCkKICAgICAsIG1fbW9kdWxlKDApCiAgICAgLCBtX2xhc3RNb2RpZmll
ZChsYXN0TW9kaWZpZWQpCi0gICAgLCBtX2lzTG9hZGVkKGZhbHNlKQotICAgICwgbV9sb2FkQ291
bnQoMCkKLSAgICAsIG1fZnJlZUxpYnJhcnlUaW1lcih0aGlzLCAmUGx1Z2luUGFja2FnZVdpbjo6
ZnJlZUxpYnJhcnlUaW1lckZpcmVkKQotICAgICwgbV9maWxlVmVyc2lvbkxTKDApCi0gICAgLCBt
X2ZpbGVWZXJzaW9uTVMoMCkKKyAgICAsIG1fZnJlZUxpYnJhcnlUaW1lcih0aGlzLCAmUGx1Z2lu
UGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKQogewotICAgIG1fZmlsZU5hbWUgPSBTdHJp
bmcoUGF0aEZpbmRGaWxlTmFtZShtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24o
KSkpOworICAgIG1fZmlsZU5hbWUgPSBwYXRoR2V0RmlsZU5hbWUobV9wYXRoKTsKICAgICBtX3Bh
cmVudERpcmVjdG9yeSA9IG1fcGF0aC5sZWZ0KG1fcGF0aC5sZW5ndGgoKSAtIG1fZmlsZU5hbWUu
bGVuZ3RoKCkgLSAxKTsKIH0KIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpzdG9yZUZpbGVWZXJz
aW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpCi17Ci0gICAgVlNfRklYRURGSUxFSU5GTyogaW5m
bzsKLSAgICBVSU5UIGluZm9TaXplOwotICAgIGlmICghVmVyUXVlcnlWYWx1ZSh2ZXJzaW9uSW5m
b0RhdGEsIFRFWFQoIlxcIiksIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6
ZSA8IHNpemVvZihWU19GSVhFREZJTEVJTkZPKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZmls
ZVZlcnNpb25MUyA9IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKLSAgICBtX2ZpbGVWZXJzaW9uTVMg
PSBpbmZvLT5kd0ZpbGVWZXJzaW9uTVM7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6aXNQ
bHVnaW5CbGFja2xpc3RlZCgpCi17Ci0gICAgc3RhdGljIGNvbnN0IERXT1JEIHNpbHZlcmxpZ2h0
UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCA9IDB4MDAwMTAwMDA7Ci0gICAgc3RhdGlj
IGNvbnN0IERXT1JEIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFNEV09SRCA9
IDB4NTFCRTAwMDA7Ci0KLSAgICBpZiAobmFtZSgpID09ICJTaWx2ZXJsaWdodCBQbHVnLUluIikg
ewotICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRhcjovLzU1NTczNzk+IENyYXNoIGluIFNp
bHZlcmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQuY29tLgotICAgICAgICAvLyB0aGUgbGF0
ZXN0IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNy
YXNoLCBzbyBhbGxvdyBpdAotICAgICAgICAvLyBhbmQgYW55IG5ld2VyIHZlcnNpb25zCi0gICAg
ICAgIGlmIChtX2ZpbGVWZXJzaW9uTVMgPCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVy
c2lvbk1TRFdPUkQgfHwKLSAgICAgICAgICAgIChtX2ZpbGVWZXJzaW9uTVMgPT0gc2lsdmVybGln
aHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEICYmIG1fZmlsZVZlcnNpb25MUyA8IHNp
bHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFNEV09SRCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGZpbGVOYW1lKCkgPT0gIm5wbW96YXguZGxsIikK
LSAgICAgICAgLy8gQnVnIDE1MjE3OiBNb3ppbGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMg
YWJvdXQgbWlzc2luZyB4cGNvbV9jb3JlLmRsbAotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpmZXRjaEluZm8oKQot
ewotICAgIERXT1JEIHZlcnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsKLSAgICB2ZXJzaW9uSW5m
b1NpemUgPSBHZXRGaWxlVmVyc2lvbkluZm9TaXplVyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSwgJnplcm9IYW5kbGUpOyAKLQotICAgIGlmICh2ZXJzaW9uSW5mb1NpemUg
PT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTFBWT0lEIHZlcnNpb25JbmZvRGF0
YSA9IGZhc3RNYWxsb2ModmVyc2lvbkluZm9TaXplKTsKLQotICAgIGlmICghR2V0RmlsZVZlcnNp
b25JbmZvVyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgdmVyc2lv
bkluZm9TaXplLCB2ZXJzaW9uSW5mb0RhdGEpKSB7Ci0gICAgICAgIGZhc3RGcmVlKHZlcnNpb25J
bmZvRGF0YSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX25hbWUgPSBn
ZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJQcm9kdWN0TmFtZSIpOwotICAgIG1fZGVz
Y3JpcHRpb24gPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJGaWxlRGVzY3JpcHRp
b24iKTsKLQotICAgIGlmIChtX25hbWUuaXNOdWxsKCkgfHwgbV9kZXNjcmlwdGlvbi5pc051bGwo
KSkgewotICAgICAgICBmYXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgc3RvcmVGaWxlVmVyc2lvbih2ZXJzaW9uSW5mb0RhdGEpOwot
Ci0gICAgaWYgKGlzUGx1Z2luQmxhY2tsaXN0ZWQoKSkgewotICAgICAgICBmYXN0RnJlZSh2ZXJz
aW9uSW5mb0RhdGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVmVjdG9y
PFN0cmluZz4gbWltZVR5cGVzID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbkluZm8odmVyc2lvbklu
Zm9EYXRhLCAiTUlNRVR5cGUiKSwgJ3wnLCAtMSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gZmlsZUV4
dGVudHMgPSBzcGxpdFN0cmluZyhnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJGaWxl
RXh0ZW50cyIpLCAnfCcsIG1pbWVUeXBlcy5zaXplKCkpOwotICAgIFZlY3RvcjxTdHJpbmc+IGRl
c2NyaXB0aW9ucyA9IHNwbGl0U3RyaW5nKGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwg
IkZpbGVPcGVuTmFtZSIpLCAnfCcsIG1pbWVUeXBlcy5zaXplKCkpOwotCi0gICAgZmFzdEZyZWUo
dmVyc2lvbkluZm9EYXRhKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lVHlw
ZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgLy8gR2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxp
c3QgaW4gdGhlIGRlc2NyaXB0aW9uIHN0cmluZwotICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24g
PSBkZXNjcmlwdGlvbnNbaV07ICAgIAotICAgICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24uZmlu
ZCgiKCoiKTsKLSAgICAgICAgaWYgKHBvcyAhPSAtMSkgewotICAgICAgICAgICAgLy8gVGhlcmUg
bWlnaHQgYmUgYSBzcGFjZSB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZgotICAgICAgICAgICAg
aWYgKHBvcyA+IDEgJiYgZGVzY3JpcHRpb25bcG9zIC0gMV0gPT0gJyAnKQotICAgICAgICAgICAg
ICAgIHBvcy0tOwotCi0gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmxlZnQo
cG9zKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1pbWVUeXBlc1tpXSA9IG1pbWVUeXBlc1tpXS5s
b3dlcigpOwotCi0gICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZVR5cGVzW2ldLCBz
cGxpdFN0cmluZyhmaWxlRXh0ZW50c1tpXSwgJywnLCAtMSkpOwotICAgICAgICBtX21pbWVUb0Rl
c2NyaXB0aW9ucy5hZGQobWltZVR5cGVzW2ldLCBkZXNjcmlwdGlvbik7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6bG9hZCgpCi17Ci0gICAg
aWYgKG1fZnJlZUxpYnJhcnlUaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIEFTU0VSVChtX21v
ZHVsZSk7Ci0gICAgICAgIG1fZnJlZUxpYnJhcnlUaW1lci5zdG9wKCk7Ci0gICAgfSBlbHNlIGlm
IChtX2lzTG9hZGVkKSB7Ci0gICAgICAgIG1fbG9hZENvdW50Kys7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFdDSEFSIGN1cnJlbnRQYXRoW01BWF9QQVRIXTsK
LQotICAgICAgICBpZiAoITo6R2V0Q3VycmVudERpcmVjdG9yeVcoTUFYX1BBVEgsIGN1cnJlbnRQ
YXRoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBTdHJpbmcgcGF0aCA9
IG1fcGF0aC5zdWJzdHJpbmcoMCwgbV9wYXRoLnJldmVyc2VGaW5kKCdcXCcpKTsKLQotICAgICAg
ICBpZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVcocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBMb2Fk
IHRoZSBsaWJyYXJ5Ci0gICAgICAgIG1fbW9kdWxlID0gOjpMb2FkTGlicmFyeVcobV9wYXRoLmNo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwotCi0gICAgICAgIGlmICghOjpTZXRDdXJy
ZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsKLSAgICAgICAgICAgIGlmIChtX21vZHVsZSkK
LSAgICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV9tb2R1bGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faXNMb2FkZWQgPSB0cnVlOwotCi0gICAgTlBfR2V0
RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0gMDsKLSAgICBOUF9Jbml0aWFs
aXplRnVuY1B0ciBOUF9Jbml0aWFsaXplID0gMDsKLSAgICBOUEVycm9yIG5wRXJyOwotCi0gICAg
TlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21v
ZHVsZSwgIk5QX0luaXRpYWxpemUiKTsKLSAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRF
bnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBv
aW50cyIpOwotICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJv
Y0FkZHJlc3MobV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOwotCi0gICAgaWYgKCFOUF9Jbml0aWFs
aXplIHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAhbV9OUFBfU2h1dGRvd24pCi0gICAgICAgIGdv
dG8gYWJvcnQ7Ci0gIAotICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1
Z2luRnVuY3MpKTsKLSAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5j
cyk7Ci0KLSAgICBucEVyciA9IE5QX0dldEVudHJ5UG9pbnRzKCZtX3BsdWdpbkZ1bmNzKTsKLSAg
ICBMT0dfTlBFUlJPUihucEVycik7Ci0gICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQot
ICAgICAgICBnb3RvIGFib3J0OwotCi0gICAgbWVtc2V0KCZtX2Jyb3dzZXJGdW5jcywgMCwgc2l6
ZW9mKG1fYnJvd3NlckZ1bmNzKSk7Ci0gICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAo
bV9icm93c2VyRnVuY3MpOwotICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9O
X01JTk9SOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7Ci0gICAgbV9i
cm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOwotICAgIG1fYnJvd3NlckZ1bmNzLnJl
cXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOwotICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVh
bSA9IE5QTl9OZXdTdHJlYW07Ci0gICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7
Ci0gICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOwot
ICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7Ci0gICAgbV9icm93c2VyRnVu
Y3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9
IE5QTl9NZW1BbGxvYzsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7
Ci0gICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7Ci0gICAgbV9icm93
c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOwotICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7Ci0gICAgbV9icm93c2VyRnVu
Y3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OwotICAgIG1fYnJvd3NlckZ1bmNz
LmdldHZhbHVlID0gTlBOX0dldFZhbHVlOwotICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0g
TlBOX1NldFZhbHVlOwotICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0lu
dmFsaWRhdGVSZWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5f
SW52YWxpZGF0ZVJlZ2lvbjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9G
b3JjZVJlZHJhdzsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFF
bnY7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7Ci0g
ICAgbV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBz
RW5hYmxlZFN0YXRlOwotICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9
IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7Ci0KLSAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNl
dmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOwotICAgIG1fYnJvd3NlckZ1
bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7Ci0gICAg
bV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50
aWZpZXJzOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dldElu
dElkZW50aWZpZXI7Ci0gICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05Q
Tl9JZGVudGlmaWVySXNTdHJpbmc7Ci0gICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlm
aWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7Ci0gICAgbV9icm93c2VyRnVuY3MuaW50ZnJv
bWlkZW50aWZpZXIgPSBfTlBOX0ludEZyb21JZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNz
LmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLnJl
dGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVh
c2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52b2tl
ID0gX05QTl9JbnZva2U7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5f
SW52b2tlRGVmYXVsdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVh
dGU7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5Owot
ICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7Ci0gICAg
bV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc01ldGhvZDsKLSAgICBtX2Jyb3dz
ZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc1Byb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNz
LnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOwotICAgIG1fYnJvd3NlckZ1bmNzLmVu
dW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOwotCi0gICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZt
X2Jyb3dzZXJGdW5jcyk7Ci0gICAgTE9HX05QRVJST1IobnBFcnIpOwotCi0gICAgaWYgKG5wRXJy
ICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICBnb3RvIGFib3J0OwotCi0gICAgbV9sb2FkQ291
bnQrKzsKLSAgICByZXR1cm4gdHJ1ZTsKLWFib3J0OgotICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93
bigpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxv
YWQoKQordm9pZCBQbHVnaW5QYWNrYWdlOjp1bmxvYWQoKQogewogICAgIGlmICghbV9pc0xvYWRl
ZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzI4LDcgKzgyLDcgQEAgdm9pZCBQbHVnaW5QYWNrYWdl
V2luOjp1bmxvYWQoKQogICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwogfQogCi12b2lkIFBs
dWdpblBhY2thZ2VXaW46OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCit2b2lkIFBsdWdpblBhY2th
Z2U6OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCiB7CiAgICAgaWYgKCFtX2lzTG9hZGVkKQogICAg
ICAgICByZXR1cm47CkBAIC0zNDcsOSArMTAxLDkgQEAgdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1
bmxvYWRXaXRob3V0U2h1dAogICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKIH0KIAotUGx1Z2luUGFj
a2FnZVdpbiogUGx1Z2luUGFja2FnZVdpbjo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5Q
YWNrYWdlOjpjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgUGxhdGZvcm1G
aWxlVGltZSYgbGFzdE1vZGlmaWVkKQogewotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2thZ2Ug
PSBuZXcgUGx1Z2luUGFja2FnZVdpbihwYXRoLCBsYXN0TW9kaWZpZWQpOworICAgIFBsdWdpblBh
Y2thZ2UqIHBhY2thZ2UgPSBuZXcgUGx1Z2luUGFja2FnZShwYXRoLCBsYXN0TW9kaWZpZWQpOwog
CiAgICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkgewogICAgICAgICBkZWxldGUgcGFja2Fn
ZTsKQEAgLTM1OSwyMCArMTEzLDQgQEAgUGx1Z2luUGFja2FnZVdpbiogUGx1Z2luUGFja2FnZVdp
bjo6Y3JlYQogICAgIHJldHVybiBwYWNrYWdlOwogfQogCi11bnNpZ25lZCBQbHVnaW5QYWNrYWdl
V2luOjpoYXNoKCkgY29uc3QKLXsgCi0gICAgdW5zaWduZWQgaGFzaENvZGVzWzNdID0gewotICAg
ICAgICBtX2Rlc2NyaXB0aW9uLmltcGwoKS0+aGFzaCgpLAotICAgICAgICBtX2xhc3RNb2RpZmll
ZC5kd0xvd0RhdGVUaW1lLAotICAgICAgICBtX2xhc3RNb2RpZmllZC5kd0hpZ2hEYXRlVGltZQot
ICAgIH07Ci0KLSAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRf
Y2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIDMgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9mKFVD
aGFyKSk7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZXF1YWwoY29uc3QgUGx1Z2luUGFj
a2FnZVdpbiYgYSwgY29uc3QgUGx1Z2luUGFja2FnZVdpbiYgYikKLXsKLSAgICByZXR1cm4gYS5t
X2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbiAmJiAoQ29tcGFyZUZpbGVUaW1lKCZhLm1f
bGFzdE1vZGlmaWVkLCAmYi5tX2xhc3RNb2RpZmllZCkgPT0gMCk7Ci19Ci0KIH0KSW5kZXg6IFdl
YkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblBhY2thZ2UuaAkocmV2aXNpb24gMjk2MjYpCShmcm9tIFdlYkNvcmUvcGx1Z2lu
cy93aW4vUGx1Z2luUGFja2FnZVdpbi5oOjI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blBhY2thZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFBsdWdpblBhY2thZ2VXaW5fSAorI2RlZmluZSBQbHVnaW5QYWNrYWdlV2lu
X0gKKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5j
bHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25z
TWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRv
RXh0ZW5zaW9uc01hcDsKKworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VXaW4gOiBwdWJsaWMgUmVm
Q291bnRlZDxQbHVnaW5QYWNrYWdlV2luPiB7CisgICAgcHVibGljOgorICAgICAgICB+UGx1Z2lu
UGFja2FnZVdpbigpOworICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZVdpbiogY3JlYXRlUGFj
a2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpOwor
ICAgICAgICAKKyAgICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
KyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlv
bjsgfQorICAgICAgICBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1l
OyB9CisgICAgICAgIFN0cmluZyBwYXJlbnREaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3Bh
cmVudERpcmVjdG9yeTsgfQorCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYg
bWltZVRvRGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7
IH0KKyAgICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5zaW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQorCisgICAgICAgIHVuc2lnbmVk
IFBsdWdpblBhY2thZ2VXaW46Omhhc2goKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgUGx1Z2luUGFja2FnZVdpbiYgYSwgY29uc3QgUGx1Z2luUGFja2FnZVdpbiYgYik7
CisKKyAgICAgICAgYm9vbCBsb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkKCk7CisgICAgICAg
IHZvaWQgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5G
dW5jcyogcGx1Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQorICAg
IHByaXZhdGU6CisgICAgICAgIFBsdWdpblBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsK
KyAgICAgICAgdm9pZCBzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpOwor
ICAgICAgICBib29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKTsKKworICAgICAgICBib29sIG1faXNM
b2FkZWQ7CisgICAgICAgIGludCBtX2xvYWRDb3VudDsKKworICAgICAgICBEV09SRCBtX2ZpbGVW
ZXJzaW9uTVM7CisgICAgICAgIERXT1JEIG1fZmlsZVZlcnNpb25MUzsKKworICAgICAgICBTdHJp
bmcgbV9kZXNjcmlwdGlvbjsKKyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgU3RyaW5n
IG1fZmlsZU5hbWU7CisgICAgICAgIFN0cmluZyBtX25hbWU7CisgICAgICAgIFN0cmluZyBtX3Bh
cmVudERpcmVjdG9yeTsKKworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXAgbV9taW1lVG9E
ZXNjcmlwdGlvbnM7CisgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXAgbV9taW1lVG9FeHRlbnNp
b25zOworCisgICAgICAgIEhNT0RVTEUgbV9tb2R1bGU7CisgICAgICAgIEZJTEVUSU1FIG1fbGFz
dE1vZGlmaWVkOworCisgICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247
CisgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBOZXRzY2Fw
ZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOworCisgICAgICAgIHZvaWQgZnJlZUxpYnJhcnlTb29uKCk7
CisgICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2VX
aW4+Kik7CisgICAgICAgIFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+IG1fZnJlZUxpYnJhcnlUaW1l
cjsKKyAgICB9OworCisgICAgc3RydWN0IFBsdWdpblBhY2thZ2VXaW5IYXNoIHsKKyAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxQbHVnaW5QYWNrYWdlV2luKj4oa2V5KS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYga2V5KSB7IHJldHVy
biBrZXktPmhhc2goKTsgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBh
LCBjb25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNr
YWdlV2luKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGIpKTsgfQor
ICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4m
IGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYgYikgeyByZXR1cm4gUGx1Z2luUGFj
a2FnZVdpbjo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQorICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5k
IGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byB1c2UgYSBjdXN0b20g
SGFzaCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRyYWl0cy4KKy8vIEl0IHNob3VsZCBiZSBw
b3NzaWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9yYWdlVHJhaXRzIHNwZWNpYWxpemF0aW9u
LgorbmFtZXNwYWNlIFdURiB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VU
cmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbkhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdl
YkNvcmU6OlBsdWdpblBhY2thZ2VXaW4+ID4gPiB7CisgICAgICAgIHR5cGVkZWYgSW50VHlwZXM8
c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPik+OjpTaWduZWRUeXBlIElu
dFR5cGU7CisgICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbkhhc2ggSGFz
aDsKKyAgICAgICAgdHlwZWRlZiBIYXNoVHJhaXRzPEludFR5cGU+IFRyYWl0czsKKyAgICB9Owor
fQorCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCShyZXZpc2lvbiAyOTYy
NikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDEyICsyMywxMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQbHVnaW5Q
YWNrYWdlV2luX0gKLSNkZWZpbmUgUGx1Z2luUGFja2FnZVdpbl9ICi0KLSNpbmNsdWRlIDx3aW5z
b2NrMi5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZm5kZWYgUGx1Z2luUGFja2FnZV9ICisj
ZGVmaW5lIFBsdWdpblBhY2thZ2VfSAogCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtNDAsMTAgKzM5LDEwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1JTUVUb0Rl
c2NyaXB0aW9uc01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5n
PiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7CiAKLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdlV2luIDog
cHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZVdpbj4geworICAgIGNsYXNzIFBsdWdpblBh
Y2thZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlPiB7CiAgICAgcHVibGljOgot
ICAgICAgICB+UGx1Z2luUGFja2FnZVdpbigpOwotICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2Fn
ZVdpbiogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBs
YXN0TW9kaWZpZWQpOworICAgICAgICB+UGx1Z2luUGFja2FnZSgpOworICAgICAgICBzdGF0aWMg
UGx1Z2luUGFja2FnZSogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFBs
YXRmb3JtRmlsZVRpbWUmIGxhc3RNb2RpZmllZCk7CiAgICAgICAgIAogICAgICAgICBTdHJpbmcg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgICAgICBTdHJpbmcgZGVzY3JpcHRp
b24oKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CkBAIC01Myw4ICs1Miw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBt
aW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9uczsg
fQogICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CiAKLSAgICAgICAgdW5zaWduZWQg
UGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBiKTsK
KyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2Fn
ZSYgYikgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgICAgICBib29sIGxvYWQoKTsKICAgICAgICAg
dm9pZCB1bmxvYWQoKTsKQEAgLTYyLDE3ICs2MSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25zdCB7IHJldHVy
biAmbV9wbHVnaW5GdW5jczsgfQogICAgIHByaXZhdGU6Ci0gICAgICAgIFBsdWdpblBhY2thZ2VX
aW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKTsKKyAg
ICAgICAgUGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFBsYXRmb3JtRmls
ZVRpbWUmIGxhc3RNb2RpZmllZCk7CiAgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7Ci0gICAgICAg
IHZvaWQgc3RvcmVGaWxlVmVyc2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKTsKLSAgICAgICAg
Ym9vbCBpc1BsdWdpbkJsYWNrbGlzdGVkKCk7CiAKICAgICAgICAgYm9vbCBtX2lzTG9hZGVkOwog
ICAgICAgICBpbnQgbV9sb2FkQ291bnQ7CiAKLSAgICAgICAgRFdPUkQgbV9maWxlVmVyc2lvbk1T
OwotICAgICAgICBEV09SRCBtX2ZpbGVWZXJzaW9uTFM7Ci0KICAgICAgICAgU3RyaW5nIG1fZGVz
Y3JpcHRpb247CiAgICAgICAgIFN0cmluZyBtX3BhdGg7CiAgICAgICAgIFN0cmluZyBtX2ZpbGVO
YW1lOwpAQCAtODIsMjQgKzc2LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgTUlN
RVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOwogICAgICAgICBNSU1FVG9F
eHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKIAotICAgICAgICBITU9EVUxFIG1fbW9k
dWxlOwotICAgICAgICBGSUxFVElNRSBtX2xhc3RNb2RpZmllZDsKKyAgICAgICAgUGxhdGZvcm1N
b2R1bGUgbV9tb2R1bGU7CisgICAgICAgIFBsYXRmb3JtRmlsZVRpbWUgbV9sYXN0TW9kaWZpZWQ7
CiAKICAgICAgICAgTlBQX1NodXRkb3duUHJvY1B0ciBtX05QUF9TaHV0ZG93bjsKICAgICAgICAg
TlBQbHVnaW5GdW5jcyBtX3BsdWdpbkZ1bmNzOwogICAgICAgICBOUE5ldHNjYXBlRnVuY3MgbV9i
cm93c2VyRnVuY3M7CiAKICAgICAgICAgdm9pZCBmcmVlTGlicmFyeVNvb24oKTsKLSAgICAgICAg
dm9pZCBmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luUGFja2FnZVdpbj4qKTsKLSAg
ICAgICAgVGltZXI8UGx1Z2luUGFja2FnZVdpbj4gbV9mcmVlTGlicmFyeVRpbWVyOworICAgICAg
ICB2b2lkIGZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdlPiopOworICAg
ICAgICBUaW1lcjxQbHVnaW5QYWNrYWdlPiBtX2ZyZWVMaWJyYXJ5VGltZXI7CiAgICAgfTsKIAot
ICAgIHN0cnVjdCBQbHVnaW5QYWNrYWdlV2luSGFzaCB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IGludCBrZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFj
a2FnZVdpbio+KGtleSktPmhhc2goKTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7
IH0KKyAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBh
Y2thZ2UqPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CiAK
LSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGludCBiKSB7IHJl
dHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihhKSwgcmVpbnRl
cnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlV2luKj4oYikpOyB9Ci0gICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYgYSwgY29uc3QgUmVmUHRyPFBs
dWdpblBhY2thZ2VXaW4+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlV2luOjplcXVhbCgqYS5n
ZXQoKSwgKmIuZ2V0KCkpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBh
LCBjb25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNr
YWdlKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGIpKTsgfQorICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGEsIGNvbnN0
IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZTo6ZXF1YWwo
KmEuZ2V0KCksICpiLmdldCgpKTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwogICAgIH07CiAKQEAgLTEwOCw5ICsxMDIs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQg
Zm9yIGEgYnVnIGluIFdURiwgd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1c3RvbSBI
YXNoIGZ1bmN0aW9uIGJ1dCB3aXRoIGRlZmF1bHQgdHJhaXRzLgogLy8gSXQgc2hvdWxkIGJlIHBv
c3NpYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6YXRpb24u
CiBuYW1lc3BhY2UgV1RGIHsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFnZVRy
YWl0czxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8V2Vi
Q29yZTo6UGx1Z2luUGFja2FnZVdpbj4gPiA+IHsKLSAgICAgICAgdHlwZWRlZiBJbnRUeXBlczxz
aXplb2YoUmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW4+KT46OlNpZ25lZFR5cGUgSW50
VHlwZTsKLSAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luSGFzaCBIYXNo
OworICAgIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hLZXlTdG9yYWdlVHJhaXRzPFdlYkNvcmU6OlBs
dWdpblBhY2thZ2VIYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
PiA+ID4geworICAgICAgICB0eXBlZGVmIEludFR5cGVzPHNpemVvZihSZWZQdHI8V2ViQ29yZTo6
UGx1Z2luUGFja2FnZT4pPjo6U2lnbmVkVHlwZSBJbnRUeXBlOworICAgICAgICB0eXBlZGVmIFdl
YkNvcmU6OlBsdWdpblBhY2thZ2VIYXNoIEhhc2g7CiAgICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0
czxJbnRUeXBlPiBUcmFpdHM7CiAgICAgfTsKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z0luSW5mb1N0b3JlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdJbkluZm9TdG9yZVdpbi5jcHAJKHJldmlzaW9uIDI5NjM2KQorKysgV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnSW5JbmZvU3RvcmVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBs
dWdJbkluZm9TdG9yZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlV2luLmgiCi0jaW5jbHVk
ZSAiUGx1Z2luUGFja2FnZVdpbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBsdWdpbklu
Zm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5z
aWduZWQgaSkgCi17IAotICAgIFBsdWdpbkRhdGFiYXNlV2luICpkYiA9IFBsdWdpbkRhdGFiYXNl
V2luOjppbnN0YWxsZWRQbHVnaW5zKCk7Ci0gICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVn
aW5JbmZvOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBkYi0+cGx1Z2lucygpW2ld
OwotCi0gICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKLSAgICBpbmZvLT5maWxlID0g
cGFja2FnZS0+ZmlsZU5hbWUoKTsKLSAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRp
b24oKTsKLQotICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRp
b25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7Ci0gICAgTUlNRVRvRGVzY3JpcHRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7Ci0g
ICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRv
RGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBNaW1lQ2xh
c3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0luZm87Ci0gICAgICAgIGluZm8tPm1pbWVzLmFw
cGVuZChtaW1lKTsKLSAgICAgICAgCi0gICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7Ci0g
ICAgICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOwotICAgICAgICBtaW1lLT5wbHVnaW4gPSBp
bmZvOwotCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1l
VG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAg
IGlmIChpID4gMCkKLSAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSAiLCI7Ci0KLSAg
ICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gaW5mbzsKLX0KLQotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpw
bHVnaW5Db3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0
YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKS5zaXplKCk7Ci19Ci0KLQotU3RyaW5nIFBsdWdJbklu
Zm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17
Ci0gICAgLy8gRklYTUUgNTYyOTEzOTogSW1wbGVtZW50IHRoaXMgbWV0aG9kIG9uIFdpbmRvd3Mu
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi0gICAgCi1ib29sIFBsdWdJbkluZm9TdG9yZTo6
c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBlKSAKLXsKLSAg
ICByZXR1cm4gUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlw
ZVJlZ2lzdGVyZWQobWltZVR5cGUpOwotfQotCi12b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVs
b2FkT3BlblBhZ2VzKQotewotICAgIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5z
KCktPnJlZnJlc2goKTsKLQotICAgIGlmIChyZWxvYWRPcGVuUGFnZXMpIHsKLSAgICAgICAgLy8g
RklYTUU6IHJlbG9hZCBvcGVuIHBhZ2VzCi0gICAgfQotfQotCi19CkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcAkocmV2aXNpb24gMjk2MzYpCisrKyBXZWJD
b3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQsOSArMjQsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVn
aW5EYXRhYmFzZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAKLSNpbmNsdWRl
ICJQbHVnaW5QYWNrYWdlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1
ZGUgIlBsdWdpblZpZXdXaW4uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgPHdpbmRv
d3MuaD4KQEAgLTM0LDkxICszNCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGx1Z2lu
RGF0YWJhc2VXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCkKLXsKLSAg
ICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VXaW4qIHBsdWdpbnMgPSAwOwotICAgIAotICAgIGlmICgh
cGx1Z2lucykgewotICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlV2luOwotICAg
ICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRhYmFzZVdpbjo6ZGVmYXVsdFBs
dWdpblBhdGhzKCkpOwotICAgICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHBsdWdpbnM7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2VXaW46OmFkZEV4dHJhUGx1
Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgbV9wbHVnaW5QYXRocy5hcHBlbmQo
cGF0aCk7Ci0gICAgcmVmcmVzaCgpOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlV2luOjpyZWZy
ZXNoKCkKLXsgICAKLSAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsKLQotICAgIGJvb2wgcGx1Z2lu
U2V0Q2hhbmdlZCA9IGZhbHNlOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IHNldCBvZiBwbHVnaW5z
Ci0gICAgbmV3UGx1Z2lucyA9IGdldFBsdWdpbnNJblBhdGhzKCk7Ci0KLSAgICBpZiAoIW1fcGx1
Z2lucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7
Ci0KLSAgICAgICAgUGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZCA9IG1fcGx1Z2luczsKLQotICAg
ICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7Ci0g
ICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgcGx1Z2luc1RvVW5sb2FkLnJlbW92
ZSgqaXQpOwotCi0gICAgICAgIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgICAgIG5ld1BsdWdpbnMucmVtb3ZlKCppdCk7Ci0KLSAgICAgICAg
Ly8gVW5sb2FkIHBsdWdpbnMKLSAgICAgICAgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVuZCgpOwot
ICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5zVG9Vbmxv
YWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgbV9wbHVnaW5zLnJlbW92
ZSgqaXQpOwotCi0gICAgICAgIC8vIEFkZCBuZXcgcGx1Z2lucwotICAgICAgICBlbmQgPSBuZXdQ
bHVnaW5zLmVuZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIG1fcGx1
Z2lucy5hZGQoKml0KTsKLQotICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1Vu
bG9hZC5pc0VtcHR5KCkgfHwgIW5ld1BsdWdpbnMuaXNFbXB0eSgpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG1fcGx1Z2lucyA9IG5ld1BsdWdpbnM7Ci0gICAgICAgIFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7Ci0KLSAgICAgICAgcGx1Z2luU2V0Q2hh
bmdlZCA9ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICAvLyBSZWdpc3RlciBw
bHVnLWluIE1JTUUgdHlwZXMKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIEdldCBNSU1F
IHR5cGVzCi0gICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFw
X2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKLSAgICAgICAgZm9yIChN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1l
VG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpIHsK
LSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5maXJzdCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdlZDsKLX0KLQotVmVj
dG9yPFBsdWdpblBhY2thZ2VXaW4qPiBQbHVnaW5EYXRhYmFzZVdpbjo6cGx1Z2lucygpIGNvbnN0
Ci17Ci0gICAgVmVjdG9yPFBsdWdpblBhY2thZ2VXaW4qPiByZXN1bHQ7Ci0KLSAgICBQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKLQotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhL
RVkgcm9vdEtleSwgUGx1Z2luU2V0JiBwbHVnaW5zKQogewogICAgIEhLRVkga2V5OwpAQCAtMTUw
LDcgKzY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVnaXN0cgogICAg
ICAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZvU3RhbmRh
cmQsICZhdHRyaWJ1dGVzKSA9PSAwKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
UGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBhY2th
Z2UoU3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBhdHRy
aWJ1dGVzLmZ0TGFzdFdyaXRlVGltZSk7CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2Ug
PSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKFN0cmluZyhwYXRoU3RyLCBwYXRoU3RyU2l6
ZSAvIHNpemVvZihXQ0hBUikgLSAxKSwgYXR0cmlidXRlcy5mdExhc3RXcml0ZVRpbWUpOwogCiAg
ICAgICAgIGlmIChwYWNrYWdlKQogICAgICAgICAgICAgcGx1Z2lucy5hZGQocGFja2FnZSk7CkBA
IC0xNTksNyArNzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkUGx1Z2luc0Zyb21SZWdpc3Ry
CiAgICAgUmVnQ2xvc2VLZXkoa2V5KTsKIH0KIAotUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlV2lu
OjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0CitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6Omdl
dFBsdWdpbnNJblBhdGhzKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUg
YSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KICAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5h
bWVzOwpAQCAtMTY4LDggKzgzLDggQEAgUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlV2luOjpnZXRQ
bHVnaW5zSQogICAgIEhBTkRMRSBoRmluZCA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogICAgIFdJ
TjMyX0ZJTkRfREFUQVcgZmluZEZpbGVEYXRhOwogCi0gICAgUGx1Z2luUGFja2FnZVdpbiogb2xk
V01QUGx1Z2luID0gMDsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBuZXdXTVBQbHVnaW4gPSAwOwor
ICAgIFBsdWdpblBhY2thZ2UqIG9sZFdNUFBsdWdpbiA9IDA7CisgICAgUGx1Z2luUGFja2FnZSog
bmV3V01QUGx1Z2luID0gMDsKIAogICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BsdWdpblBhdGhzLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5QYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
QEAgLTE5Myw3ICsxMDgsNyBAQCBQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VXaW46OmdldFBsdWdp
bnNJCiAgICAgICAgICAgICBpZiAoIXVuaXF1ZUZpbGVuYW1lcy5hZGQoZnVsbFBhdGgpLnNlY29u
ZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgICAgICBQbHVn
aW5QYWNrYWdlV2luKiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2FnZVdpbjo6Y3JlYXRlUGFj
a2FnZShmdWxsUGF0aCwgZmluZEZpbGVEYXRhLmZ0TGFzdFdyaXRlVGltZSk7CisgICAgICAgICAg
ICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFj
a2FnZShmdWxsUGF0aCwgZmluZEZpbGVEYXRhLmZ0TGFzdFdyaXRlVGltZSk7CiAKICAgICAgICAg
ICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7CiAgICAgICAgICAgICAgICAgcGx1Z2lucy5hZGQocGx1
Z2luUGFja2FnZSk7CkBAIC00MTksNyArMzM0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZE1h
Y3JvbWVkaWFQbHVnaW5QYQogICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3Ry
KTsKIH0KIAotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQbHVnaW5Q
YXRocygpCitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpblBhdGhz
KCkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKICAgICBTdHJpbmcgb3VyUGF0aCA9IHNh
ZmFyaVBsdWdpbnNQYXRoKCk7CkBAIC00MzUsMTA2ICszNTAsNCBAQCBWZWN0b3I8U3RyaW5nPiBQ
bHVnaW5EYXRhYmFzZVdpbjo6ZGVmYXVsCiAgICAgcmV0dXJuIHBhdGhzOwogfQogCi1ib29sIFBs
dWdpbkRhdGFiYXNlV2luOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQotewotICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVz
aGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIHJldHVybiAocmVmcmVz
aCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpOwotfQotCi1Q
bHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6cGx1Z2luRm9yTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwotICAg
IFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKLSAgICBQbHVnaW5QYWNrYWdl
V2luKiBwbHVnaW4gPSAwOwotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
bHVnaW5zLmVuZCgpOwotCi0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoKCppdCkt
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKLSAgICAgICAgICAgIHBsdWdp
biA9ICgqaXQpLmdldCgpOwotICAgICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93
biBwbHVnaW5zIGRpcmVjdG9yeQotICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0
b3J5KCkgPT0gb3VyUGF0aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiBwbHVnaW47Ci19Ci0KLVN0cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6
TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0Ci17Ci0g
ICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAg
IFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKLSAgICBTdHJpbmcgbWltZVR5
cGU7Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gMDsKLQotICAgIGZvciAoUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9l
bmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwotCi0gICAgICAgIGZvciAoTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9F
eHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0g
ICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNl
Y29uZDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVu
c2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBt
aW1lX2l0LT5maXJzdDsKLSAgICAgICAgICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lu
cyBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0
b3J5KCkgPT0gb3VyUGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBtaW1lVHlwZTsKLX0KLQotUGx1Z2luUGFja2FnZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46OmZp
bmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBlKQoteyAgIAotICAgIFBs
dWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAg
ICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwuc3RyaW5nKCk7Ci0gICAgCi0gICAgaWYgKCFwbHVnaW4p
IHsKLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7Ci0g
ICAgICAgIGlmICghZmlsZW5hbWUuZW5kc1dpdGgoIi8iKSkgewotICAgICAgICAgICAgaW50IGV4
dGVuc2lvblBvcyA9IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgICAgICAgICBpZiAo
ZXh0ZW5zaW9uUG9zICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9
IGZpbGVuYW1lLnN1YnN0cmluZyhleHRlbnNpb25Qb3MgKyAxKTsKLQotICAgICAgICAgICAgICAg
IG1pbWVUeXBlID0gTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKLSAgICAgICAgICAg
ICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogaWYgbm8gcGx1Z2luIGNvdWxkIGJl
IGZvdW5kLCBxdWVyeSBXaW5kb3dzIGZvciB0aGUgbWltZSB0eXBlIAotICAgIC8vIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIGV4dGVuc2lvbi4KLQotICAgIHJldHVybiBwbHVnaW47Ci19Ci0KLVBsdWdp
blZpZXdXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJl
bnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51
YWxseSkKLXsKLSAgICAvLyBpZiB3ZSBmYWlsIHRvIGZpbmQgYSBwbHVnaW4gZm9yIHRoaXMgTUlN
RSB0eXBlLCBmaW5kUGx1Z2luIHdpbGwgc2VhcmNoIGZvcgotICAgIC8vIGEgcGx1Z2luIGJ5IHRo
ZSBmaWxlIGV4dGVuc2lvbiBhbmQgdXBkYXRlIHRoZSBNSU1FIHR5cGUsIHNvIHBhc3MgYSBtdXRh
YmxlIFN0cmluZwotICAgIFN0cmluZyBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKLSAgICBQbHVn
aW5QYWNrYWdlV2luKiBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKLSAg
ICAKLSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJh
c2UgYW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIGlmICghcGx1Z2luICYmIHJlZnJlc2goKSkgewot
ICAgICAgICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKLSAgICAgICAgcGx1Z2luID0gZmluZFBs
dWdpbih1cmwsIG1pbWVUeXBlQ29weSk7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1cm4gbmV3
IFBsdWdpblZpZXdXaW4ocGFyZW50RnJhbWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBw
YXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGVDb3B5LCBsb2FkTWFudWFsbHkpOwotfQot
CiB9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5oCShyZXZpc2lv
biAyOTYzNikKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUGx1
Z2luRGF0YWJhc2VXaW5fSAotI2RlZmluZSBQbHVnaW5EYXRhYmFzZVdpbl9ICi0KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgotI2luY2x1ZGUg
IlN0cmluZ0hhc2guaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEVsZW1lbnQ7
Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgSW50U2l6ZTsKLSAgICBjbGFzcyBLVVJMOwot
ICAgIGNsYXNzIFBsdWdpblBhY2thZ2VXaW47Ci0gICAgY2xhc3MgUGx1Z2luVmlld1dpbjsKLQot
ICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4sIFBsdWdpblBhY2th
Z2VXaW5IYXNoPiBQbHVnaW5TZXQ7Ci0gIAotICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlV2luIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZVdpbiogaW5zdGFsbGVk
UGx1Z2lucygpOwotICAgICAgICBQbHVnaW5WaWV3V2luKiBjcmVhdGVQbHVnaW5WaWV3KEZyYW1l
KiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFu
dWFsbHkpOwotCi0gICAgICAgIGJvb2wgcmVmcmVzaCgpOwotICAgICAgICBWZWN0b3I8UGx1Z2lu
UGFja2FnZVdpbio+IHBsdWdpbnMoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc01JTUVUeXBlUmVn
aXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgdm9pZCBhZGRFeHRyYVBs
dWdpblBhdGgoY29uc3QgU3RyaW5nJik7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBzZXRQ
bHVnaW5QYXRocyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsgbV9wbHVnaW5QYXRocyA9
IHBhdGhzOyB9Ci0gICAgICAgIFBsdWdpblNldCBnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0Owot
Ci0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIGZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBT
dHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luRm9yTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIFN0cmluZyBNSU1FVHlwZUZv
ckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3Q7Ci0KLSAgICAgICAgc3Rh
dGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5QYXRocygpOwotCi0gICAgICAgIFZlY3Rv
cjxTdHJpbmc+IG1fcGx1Z2luUGF0aHM7Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlZ2lz
dGVyZWRNSU1FVHlwZXM7Ci0gICAgICAgIFBsdWdpblNldCBtX3BsdWdpbnM7Ci0gICAgfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93
aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dp
bi9QbHVnaW5QYWNrYWdlV2luLmNwcAkocmV2aXNpb24gMjk2MzYpCisrKyBXZWJDb3JlL3BsdWdp
bnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaW5jbHVkZSA8c2hsd2FwaS5oPgogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKIAogI2lu
Y2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgpAQCAtMzUsMTEg
KzM1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QbHVnaW5QYWNrYWdlV2luOjp+UGx1
Z2luUGFja2FnZVdpbigpCi17Ci0gICAgQVNTRVJUKCFtX2lzTG9hZGVkKTsKLX0KLQogc3RhdGlj
IFN0cmluZyBnZXRWZXJzaW9uSW5mbyhjb25zdCBMUFZPSUQgdmVyc2lvbkluZm9EYXRhLCBjb25z
dCBTdHJpbmcmIGluZm8pCiB7CiAgICAgTFBWT0lEIGJ1ZmZlcjsKQEAgLTgzLDM5ICs3OCwxMCBA
QCBzdGF0aWMgVmVjdG9yPFN0cmluZz4gc3BsaXRTdHJpbmcoY29uc3QgCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVNvb24oKQotewot
ICAgIEFTU0VSVCghbV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCht
X21vZHVsZSk7Ci0gICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOworc3RhdGljIERXT1JEIG1f
ZmlsZVZlcnNpb25MUyA9IDA7CitzdGF0aWMgRFdPUkQgbV9maWxlVmVyc2lvbk1TID0gMDsKIAot
ICAgIG1fZnJlZUxpYnJhcnlUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgUGx1Z2lu
UGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+
KiAvKnRpbWVyKi8pCi17Ci0gICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICBBU1NFUlQobV9sb2Fk
Q291bnQgPT0gMCk7Ci0KLSAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKLSAgICBtX21vZHVs
ZSA9IDA7Ci19Ci0KLVBsdWdpblBhY2thZ2VXaW46OlBsdWdpblBhY2thZ2VXaW4oY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKQotICAgIDogbV9wYXRoKHBh
dGgpCi0gICAgLCBtX21vZHVsZSgwKQotICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVk
KQotICAgICwgbV9pc0xvYWRlZChmYWxzZSkKLSAgICAsIG1fbG9hZENvdW50KDApCi0gICAgLCBt
X2ZyZWVMaWJyYXJ5VGltZXIodGhpcywgJlBsdWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5VGlt
ZXJGaXJlZCkKLSAgICAsIG1fZmlsZVZlcnNpb25MUygwKQotICAgICwgbV9maWxlVmVyc2lvbk1T
KDApCi17Ci0gICAgbV9maWxlTmFtZSA9IFN0cmluZyhQYXRoRmluZEZpbGVOYW1lKG1fcGF0aC5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSk7Ci0gICAgbV9wYXJlbnREaXJlY3Rvcnkg
PSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7
Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZVdpbjo6c3RvcmVGaWxlVmVyc2lvbihMUFZPSUQgdmVy
c2lvbkluZm9EYXRhKQorc3RhdGljIHZvaWQgc3RvcmVGaWxlVmVyc2lvbihMUFZPSUQgdmVyc2lv
bkluZm9EYXRhKQogewogICAgIFZTX0ZJWEVERklMRUlORk8qIGluZm87CiAgICAgVUlOVCBpbmZv
U2l6ZTsKQEAgLTEyNSw3ICs5MSw3IEBAIHZvaWQgUGx1Z2luUGFja2FnZVdpbjo6c3RvcmVGaWxl
VmVyc2lvbigKICAgICBtX2ZpbGVWZXJzaW9uTVMgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTVM7CiB9
CiAKLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6aXNQbHVnaW5CbGFja2xpc3RlZCgpCitzdGF0aWMg
Ym9vbCBpc1BsdWdpbkJsYWNrbGlzdGVkKCkKIHsKICAgICBzdGF0aWMgY29uc3QgRFdPUkQgc2ls
dmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEID0gMHgwMDAxMDAwMDsKICAg
ICBzdGF0aWMgY29uc3QgRFdPUkQgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25M
U0RXT1JEID0gMHg1MUJFMDAwMDsKQEAgLTE0NCw3ICsxMTAsNyBAQCBib29sIFBsdWdpblBhY2th
Z2VXaW46OmlzUGx1Z2luQmxhY2tsaXN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFBs
dWdpblBhY2thZ2VXaW46OmZldGNoSW5mbygpCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5m
bygpCiB7CiAgICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJvSGFuZGxlOwogICAgIHZlcnNp
b25JbmZvU2l6ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLCAmemVyb0hhbmRsZSk7IApAQCAtMjAxLDcgKzE2Nyw3IEBAIGJv
b2wgUGx1Z2luUGFja2FnZVdpbjo6ZmV0Y2hJbmZvKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBQbHVnaW5QYWNrYWdlV2luOjpsb2FkKCkKK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgp
CiB7CiAgICAgaWYgKG1fZnJlZUxpYnJhcnlUaW1lci5pc0FjdGl2ZSgpKSB7CiAgICAgICAgIEFT
U0VSVChtX21vZHVsZSk7CkBAIC0zMTUsNTEgKzI4MSw3IEBAIGFib3J0OgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxvYWQoKQotewotICAgIGlmICgh
bV9pc0xvYWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKC0tbV9sb2FkQ291bnQgPiAw
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX05QUF9TaHV0ZG93bigpOwotCi0gICAgdW5sb2Fk
V2l0aG91dFNodXRkb3duKCk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZVdpbjo6dW5sb2FkV2l0
aG91dFNodXRkb3duKCkKLXsKLSAgICBpZiAoIW1faXNMb2FkZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsKLSAgICBBU1NFUlQobV9tb2R1bGUpOwot
Ci0gICAgLy8gPHJkYXI6Ly81NTMwNTE5PjogQ3Jhc2ggd2hlbiBjbG9zaW5nIHRhYiB3aXRoIHBk
ZiBmaWxlIChSZWFkZXIgNyBvbmx5KQotICAgIC8vIElmIHRoZSBwbHVnaW4gaGFzIHN1YmNsYXNz
ZWQgaXRzIHBhcmVudCB3aW5kb3csIGFzIHdpdGggUmVhZGVyIDcsIHdlIG1heSBoYXZlCi0gICAg
Ly8gZ290dGVuIGhlcmUgYnkgd2F5IG9mIHRoZSBwbHVnaW4ncyBpbnRlcm5hbCB3aW5kb3cgcHJv
YyBmb3J3YXJkaW5nIGEgbWVzc2FnZSB0byBvdXIKLSAgICAvLyBvcmlnaW5hbCB3aW5kb3cgcHJv
Yy4gSWYgd2UgZnJlZSB0aGUgcGx1Z2luIGxpYnJhcnkgZnJvbSBoZXJlLCB3ZSB3aWxsIGp1bXAg
YmFjawotICAgIC8vIHRvIGNvZGUgd2UganVzdCBmcmVlZCB3aGVuIHdlIHJldHVybiwgc28gZGVs
YXkgY2FsbGluZyBGcmVlTGlicmFyeSBhdCBsZWFzdCB1bnRpbAotICAgIC8vIHRoZSBuZXh0IG1l
c3NhZ2UgbG9vcAotICAgIGZyZWVMaWJyYXJ5U29vbigpOwotCi0gICAgbV9pc0xvYWRlZCA9IGZh
bHNlOwotfQotCi1QbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNr
YWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCkKLXsK
LSAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gbmV3IFBsdWdpblBhY2thZ2VXaW4ocGF0
aCwgbGFzdE1vZGlmaWVkKTsKLQotICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpIHsKLSAg
ICAgICAgZGVsZXRlIHBhY2thZ2U7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gcGFja2FnZTsKLX0KLQotdW5zaWduZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgp
IGNvbnN0Cit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QKIHsgCiAgICAgdW5z
aWduZWQgaGFzaENvZGVzWzNdID0gewogICAgICAgICBtX2Rlc2NyaXB0aW9uLmltcGwoKS0+aGFz
aCgpLApAQCAtMzcwLDcgKzI5Miw3IEBAIHVuc2lnbmVkIFBsdWdpblBhY2thZ2VXaW46Omhhc2go
KSBjb25zdAogICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9j
YXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMyAqIHNpemVvZih1bnNpZ25lZCkgLyBzaXplb2YoVUNo
YXIpKTsKIH0KIAotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjplcXVhbChjb25zdCBQbHVnaW5QYWNr
YWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBiKQorYm9vbCBQbHVnaW5QYWNrYWdl
OjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQog
ewogICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uICYmIChDb21w
YXJlRmlsZVRpbWUoJmEubV9sYXN0TW9kaWZpZWQsICZiLm1fbGFzdE1vZGlmaWVkKSA9PSAwKTsK
IH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5oCShyZXZpc2lvbiAy
OTYzNikKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUGx1Z2lu
UGFja2FnZVdpbl9ICi0jZGVmaW5lIFBsdWdpblBhY2thZ2VXaW5fSAotCi0jaW5jbHVkZSA8d2lu
c29jazIuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLSNpbmNsdWRlICJUaW1lci5oIgotI2lu
Y2x1ZGUgIlN0cmluZ0hhc2guaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgIm5wZnVuY3Rpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOwotCi0g
ICAgY2xhc3MgUGx1Z2luUGFja2FnZVdpbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2th
Z2VXaW4+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIH5QbHVnaW5QYWNrYWdlV2luKCk7Ci0gICAg
ICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlV2luKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7Ci0gICAgICAgIAotICAgICAgICBT
dHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgICAgICBTdHJpbmcgZGVz
Y3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9Ci0gICAgICAgIFN0cmlu
ZyBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZU5hbWU7IH0KLSAgICAgICAgU3RyaW5n
IHBhcmVudERpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RGlyZWN0b3J5OyB9Ci0K
LSAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMo
KSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9uczsgfQotICAgICAgICBjb25zdCBN
SU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9t
aW1lVG9FeHRlbnNpb25zOyB9Ci0KLSAgICAgICAgdW5zaWduZWQgUGx1Z2luUGFja2FnZVdpbjo6
aGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNr
YWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBiKTsKLQotICAgICAgICBib29sIGxv
YWQoKTsKLSAgICAgICAgdm9pZCB1bmxvYWQoKTsKLSAgICAgICAgdm9pZCB1bmxvYWRXaXRob3V0
U2h1dGRvd24oKTsKLQotICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcygp
IGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAg
UGx1Z2luUGFja2FnZVdpbihjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0
TW9kaWZpZWQpOwotICAgICAgICBib29sIGZldGNoSW5mbygpOwotICAgICAgICB2b2lkIHN0b3Jl
RmlsZVZlcnNpb24oTFBWT0lEIHZlcnNpb25JbmZvRGF0YSk7Ci0gICAgICAgIGJvb2wgaXNQbHVn
aW5CbGFja2xpc3RlZCgpOwotCi0gICAgICAgIGJvb2wgbV9pc0xvYWRlZDsKLSAgICAgICAgaW50
IG1fbG9hZENvdW50OwotCi0gICAgICAgIERXT1JEIG1fZmlsZVZlcnNpb25NUzsKLSAgICAgICAg
RFdPUkQgbV9maWxlVmVyc2lvbkxTOwotCi0gICAgICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9uOwot
ICAgICAgICBTdHJpbmcgbV9wYXRoOwotICAgICAgICBTdHJpbmcgbV9maWxlTmFtZTsKLSAgICAg
ICAgU3RyaW5nIG1fbmFtZTsKLSAgICAgICAgU3RyaW5nIG1fcGFyZW50RGlyZWN0b3J5OwotCi0g
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBtX21pbWVUb0Rlc2NyaXB0aW9uczsKLSAgICAg
ICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21pbWVUb0V4dGVuc2lvbnM7Ci0KLSAgICAgICAgSE1P
RFVMRSBtX21vZHVsZTsKLSAgICAgICAgRklMRVRJTUUgbV9sYXN0TW9kaWZpZWQ7Ci0KLSAgICAg
ICAgTlBQX1NodXRkb3duUHJvY1B0ciBtX05QUF9TaHV0ZG93bjsKLSAgICAgICAgTlBQbHVnaW5G
dW5jcyBtX3BsdWdpbkZ1bmNzOwotICAgICAgICBOUE5ldHNjYXBlRnVuY3MgbV9icm93c2VyRnVu
Y3M7Ci0KLSAgICAgICAgdm9pZCBmcmVlTGlicmFyeVNvb24oKTsKLSAgICAgICAgdm9pZCBmcmVl
TGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luUGFja2FnZVdpbj4qKTsKLSAgICAgICAgVGlt
ZXI8UGx1Z2luUGFja2FnZVdpbj4gbV9mcmVlTGlicmFyeVRpbWVyOwotICAgIH07Ci0KLSAgICBz
dHJ1Y3QgUGx1Z2luUGFja2FnZVdpbkhhc2ggewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VX
aW4qPihrZXkpLT5oYXNoKCk7IH0KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
UmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9Ci0K
LSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGludCBiKSB7IHJl
dHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihhKSwgcmVpbnRl
cnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlV2luKj4oYikpOyB9Ci0gICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYgYSwgY29uc3QgUmVmUHRyPFBs
dWdpblBhY2thZ2VXaW4+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlV2luOjplcXVhbCgqYS5n
ZXQoKSwgKmIuZ2V0KCkpOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0vLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIFdURiwg
d2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1c3RvbSBIYXNoIGZ1bmN0aW9uIGJ1dCB3
aXRoIGRlZmF1bHQgdHJhaXRzLgotLy8gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGRvIHRoaXMg
d2l0aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6YXRpb24uCi1uYW1lc3BhY2UgV1RGIHsK
LSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFnZVRyYWl0czxXZWJDb3JlOjpQbHVn
aW5QYWNrYWdlV2luSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2Fn
ZVdpbj4gPiA+IHsKLSAgICAgICAgdHlwZWRlZiBJbnRUeXBlczxzaXplb2YoUmVmUHRyPFdlYkNv
cmU6OlBsdWdpblBhY2thZ2VXaW4+KT46OlNpZ25lZFR5cGUgSW50VHlwZTsKLSAgICAgICAgdHlw
ZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luSGFzaCBIYXNoOwotICAgICAgICB0eXBlZGVm
IEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOwotICAgIH07Ci19Ci0KLQotI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDI5NjM2KQorKysg
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY2NCw0ICsxNjY0LDIwIEBAIGJvb2wgUGx1Z2luVmlld1dpbjo6aXNDYWxsaW5nUGx1Z2luKCkK
ICAgICByZXR1cm4gc19jYWxsaW5nUGx1Z2luID4gMDsKIH0KIAorUGx1Z2luVmlld1dpbiogUGx1
Z2luVmlld1dpbjo6Y3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IElu
dFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVl
cywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCit7CisgICAgLy8g
aWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1Z2luIGZvciB0aGlzIE1JTUUgdHlwZSwgZmluZFBsdWdp
biB3aWxsIHNlYXJjaCBmb3IKKyAgICAvLyBhIHBsdWdpbiBieSB0aGUgZmlsZSBleHRlbnNpb24g
YW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBlLCBzbyBwYXNzIGEgbXV0YWJsZSBTdHJpbmcKKyAgICBT
dHJpbmcgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2lu
ID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+ZmluZFBsdWdpbih1cmwsIG1p
bWVUeXBlQ29weSk7CisgICAgCisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJl
c2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICBpZiAoIXBsdWdpbiAm
JiByZWZyZXNoKCkpIHsKKyAgICAgICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7CisgICAgICAg
IHBsdWdpbiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4o
dXJsLCBtaW1lVHlwZUNvcHkpOworICAgIH0KKyAgICAgICAgCisgICAgcmV0dXJuIG5ldyBQbHVn
aW5WaWV3V2luKHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVsZW1lbnQsIHVybCwgcGFyYW1O
YW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9hZE1hbnVhbGx5KTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3
V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmgJ
KHJldmlzaW9uIDI5NjM2KQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIE1vdXNlRXZlbnQ7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOwotICAgIGNsYXNzIFBsdWdpblBhY2thZ2VXaW47CisgICAgY2xhc3Mg
UGx1Z2luUGFja2FnZTsKICAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0V2luOwogICAgIGNsYXNzIFBs
dWdpblN0cmVhbTsKICAgICBjbGFzcyBSZXNvdXJjZUVycm9yOwpAQCAtODYsMTAgKzg2LDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBmcmllbmQgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sg
UGx1Z2luVmlld1duZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogCiAgICAgcHVi
bGljOgotICAgICAgICBQbHVnaW5WaWV3V2luKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50
U2l6ZSYsIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7Cisg
ICAgICAgIFBsdWdpblZpZXdXaW4qIFBsdWdpblZpZXdXaW46OmNyZWF0ZVBsdWdpblZpZXcoRnJh
bWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wg
bG9hZE1hbnVhbGx5KTsKKworICAgICAgICBQbHVnaW5WaWV3V2luKEZyYW1lKiBwYXJlbnRGcmFt
ZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2thZ2UqIHBsdWdpbiwgRWxlbWVudCosIGNvbnN0
IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51
YWxseSk7CiAgICAgICAgIHZpcnR1YWwgflBsdWdpblZpZXdXaW4oKTsKIAotICAgICAgICBQbHVn
aW5QYWNrYWdlV2luKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5nZXQoKTsgfQor
ICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5n
ZXQoKTsgfQogICAgICAgICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNl
OyB9CiAKICAgICAgICAgdm9pZCBzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpOwpAQCAt
MTU2LDcgKzE1OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgTlBFcnJvciBsb2Fk
KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5v
dGlmeURhdGEpOwogICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBj
b25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxl
LCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFk
ZXJzKTsKICAgICAgICAgdm9pZCBzZXRDYWxsaW5nUGx1Z2luKGJvb2wpIGNvbnN0OwotICAgICAg
ICBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4gbV9wbHVnaW47CisgICAgICAgIFJlZlB0cjxQbHVn
aW5QYWNrYWdlPiBtX3BsdWdpbjsKICAgICAgICAgRWxlbWVudCogbV9lbGVtZW50OwogICAgICAg
ICBGcmFtZSogbV9wYXJlbnRGcmFtZTsKICAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18531</attachid>
            <date>2008-01-18 13:24:11 -0800</date>
            <delta_ts>2008-01-22 13:17:48 -0800</delta_ts>
            <desc>Updated to use String::fromUTF8 with glib strings</desc>
            <filename>webkit-more-shared-plugin-api.patch</filename>
            <type>text/plain</type>
            <size>122963</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTYzNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDgtMDEtMTggIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBTaGFyZWQgY2xhc3NlcyBmb3IgUGx1Z2luRGF0YWJhc2UgYW5kIFBsdWdpblBhY2thZ2UK
KyAgICAgICAgU2hhcmVkIGltcGxlbWVudGF0aW9uIG9mIFBsdWdpbkluZm9TdG9yZSBBUEkKKyAg
ICAgICAgQWRkIHRoZSBuZXcgc2hhcmVkIGNsYXNzIGltcGxlbWVudGF0aW9ucyB0byBhdXRvdG9v
bHMgYW5kIHFtYWtlIGJ1aWxkcworICAgICAgICBNb3ZlIHRoZSBjcmVhdGVQbHVnaW5WaWV3IEFQ
SSB0byBQbHVnaW5WaWV3V2luLCB0byBhdm9pZCBhCisgICAgICAgIGNpcmN1bGFyIGRlcGVuZGVu
Y3kgd2l0aCBQbHVnaW5EYXRhYmFzZQorICAgICAgICBVc2Ugc3RhdGljIGdsb2JhbHMgZm9yIHRo
ZSBtX2ZpbGVWZXJzaW9ue01TLExTfSB2YXJpYWJsZXMgb24gV2luMzIKKyAgICAgICAgTWFrZSBz
dG9yZUZpbGVWZXJzaW9uIGFuZCBpc1BsdWdpbkJsYWNrbGlzdGVkIHN0YXRpYyBpbnRlcm5hbCBD
IG1ldGhvZHMKKyAgICAgICAgRGVmaW5lIFBsYXRmb3JtRmlsZVRpbWUgYW5kIFBsYXRmb3JtTW9k
dWxlIHR5cGVzCisgICAgICAgIEltcGxlbWVudCBwYXRoR2V0RmlsZU5hbWUgZm9yIFdpbjMyIGFu
ZCBHVEsrCisgICAgICAgIEltcGxlbWVudCB1bmxvYWRNb2R1bGUgZm9yIFdpbjMyIGFuZCBHVEsr
CisgICAgICAgIEFkZCBub3RJbXBsZW1lbnRlZCgpcyBmb3IgcGF0aEdldEZpbGVOYW1lIGFuZCB1
bmxvYWRNb2R1bGUgb24gUXQKKyAgICAgICAgVXBkYXRlIHRoZSBXaW4zMiB2Y3Byb2ogZm9yIHRo
ZSBwbHVnLWluIEFQSSBjaGFuZ2VzCisgICAgICAgIEFkZCB0ZW1wb3Jhcnkgc3R1YnMgZm9yIFBs
dWdpbkRhdGFiYXNlIGFuZCBQbHVnaW5QYWNrYWdlIG1ldGhvZHMsCisgICAgICAgIG9uIEdUSysg
YW5kIFF0CisgICAgICAgIFJlbW92ZSB0ZW1wb3Jhcnkgc3R1YnMgZm9yIFBsdWdJbkluZm9TdG9y
ZSBvbiBHVEsrIGFuZCBRdAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICog
V2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9G
aWxlU3lzdGVtR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6CisgICAgICAgICogcGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5o
OgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcDoKKyAgICAgICAgKiBwbHVn
aW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5o
OgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdJbkluZm9TdG9yZVdpbi5jcHA6CisgICAgICAg
ICogcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwOgorICAgICAgICAqIHBsdWdpbnMv
d2luL1BsdWdpbkRhdGFiYXNlV2luLmg6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFj
a2FnZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5oOgor
ICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwOgorICAgICAgICAqIHBsdWdp
bnMvd2luL1BsdWdpblZpZXdXaW4uaDoKKwogMjAwOC0wMS0xOCAgQmV0aCBEYWtpbiAgPGJkYWtp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyLgpJbmRleDogV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShy
ZXZpc2lvbiAyOTYzNikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkK
QEAgLTg0NSw2ICs4NDUsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZv
cm0vVGltZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YWJhc2UuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCisJ
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luU3RyZWFtLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBc
CiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBy
bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyOTYzNikKKysr
IFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTc3OSw2ICs3NzksOSBAQCBT
T1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9UaW1lci5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQv
VW5pY29kZVJhbmdlLmNwcCBcCiAgICAgcGxhdGZvcm0vV2lkZ2V0LmNwcCBcCisgICAgcGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHAgXAorICAgIHBsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBc
CisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBcCiAgICAgcGx1Z2lucy9QbHVnaW5TdHJl
YW0uY3BwIFwKICAgICByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAgICAgcmVuZGVy
aW5nL2JpZGkuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
cmV2aXNpb24gMjk2MzYpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC03OTMzLDEwICs3OTMzLDMwIEBACiAJCQkJPg0KIAkJCTwvRmls
ZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YWJh
c2UuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2lu
c1xQbHVnaW5JbmZvU3RvcmUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5QYWNrYWdlLmNwcCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1
Z2luUGFja2FnZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5TdHJlYW0uY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxl
Pg0KQEAgLTc5NTYsMjIgKzc5NzYsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxG
aWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbkRhdGFiYXNlV2lu
LmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGx1Z2luc1x3aW5cUGx1Z0luSW5mb1N0b3JlV2luLmNwcCINCi0JCQkJCT4NCi0JCQkJ
PC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQ
bHVnaW5QYWNrYWdlV2luLmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0K
LQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmgiDQot
CQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGx1Z2luc1x3aW5cUGx1Z2luVmlld1dpbi5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMjk2MzYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0ZpbGVTeXN0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTAgQEAKICNpZm5k
ZWYgRmlsZVN5c3RlbV9oCiAjZGVmaW5lIEZpbGVTeXN0ZW1faAogCisjaWYgUExBVEZPUk0oR1RL
KQorI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00Miw5ICs0NiwxNyBAQCBjbGFzcyBT
dHJpbmc7CiAKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIEhBTkRMRSBQbGF0Zm9ybUZpbGVI
YW5kbGU7Cit0eXBlZGVmIEZJTEVUSU1FIFBsYXRmb3JtRmlsZVRpbWU7Cit0eXBlZGVmIEhNT0RV
TEUgUGxhdGZvcm1Nb2R1bGU7CiBjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUgaW52YWxpZFBsYXRm
b3JtRmlsZUhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogI2Vsc2UKIHR5cGVkZWYgaW50
IFBsYXRmb3JtRmlsZUhhbmRsZTsKK3R5cGVkZWYgdGltZV90IFBsYXRmb3JtRmlsZVRpbWU7Cisj
aWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBHTW9kdWxlKiBQbGF0Zm9ybU1vZHVsZTsKKyNlbHNl
Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtTW9kdWxlOworI2VuZGlmCiBjb25zdCBQbGF0Zm9ybUZp
bGVIYW5kbGUgaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IC0xOwogI2VuZGlmCiAKQEAgLTU0
LDYgKzY2LDcgQEAgYm9vbCBmaWxlU2l6ZShjb25zdCBTdHJpbmcmLCBsb25nIGxvbmcmIAogU3Ry
aW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgY29tcG9uZW50KTsKIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYg
cGF0aCk7CiBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKTsKK1N0cmluZyBwYXRoR2V0RmlsZU5h
bWUoY29uc3QgU3RyaW5nJik7CiAKIENTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNv
bnN0IFN0cmluZyYpOwogCkBAIC02NCw2ICs3Nyw5IEBAIENTdHJpbmcgb3BlblRlbXBvcmFyeUZp
bGUoY29uc3QgY2hhciogcHIKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYpOwog
aW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCk7CiAKKy8qIE1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBsb2FkYWJsZSBtb2R1bGVz
ICovCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSk7CisKICNpZiBQTEFURk9STShX
SU4pCiBTdHJpbmcgbG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCk7CiBTdHJpbmcg
cm9hbWluZ1VzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCShyZXZpc2lvbiAyOTYzNikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miwy
MCBAQCBib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhCiAgICAgcmV0dXJu
IHJlc3VsdCA9PSAwOwogfQogCitTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KGdfZ2V0X2hvbWVfZGlyKCkpOworfQorCitTdHJpbmcgcGF0
aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aE5hbWUpCit7CisgICAgY2hhciogYmFzZU5h
bWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lKHBhdGhOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIFN0
cmluZyBmaWxlTmFtZSA9IFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUpOworICAgIGdfZnJlZShi
YXNlTmFtZSk7CisKKyAgICByZXR1cm4gZmlsZU5hbWU7Cit9CisKIENTdHJpbmcgb3BlblRlbXBv
cmFyeUZpbGUoY29uc3QgY2hhciogcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkK
IHsKICAgICBnY2hhciogZmlsZW5hbWUgPSBnX3N0cmR1cF9wcmludGYoIiVzWFhYWFhYIiwgcHJl
Zml4KTsKQEAgLTEzMSw0ICsxNDUsOSBAQCBpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFu
ZGxlIGhhbmRsCiAKICAgICByZXR1cm4gdG90YWxCeXRlc1dyaXR0ZW47CiB9CisKK2Jvb2wgdW5s
b2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKK3sKKyAgICByZXR1cm4gZ19tb2R1bGVf
Y2xvc2UobW9kdWxlKTsKK30KIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9y
YXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMjk2MzYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4IEBA
CiAjaW5jbHVkZSAiRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCIKICNpbmNsdWRlICJHbG9iYWxIaXN0
b3J5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbHVnSW5JbmZv
U3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBh
Y2thZ2UuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTU3LDEyICs1OCw5IEBA
IFZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QKIAogYm9vbCBXZWJDb3Jl
OjpoaXN0b3J5Q29udGFpbnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7
IH0KIAotUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1
Z2luQXRJbmRleCh1bnNpZ25lZCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDt9Ci11bnNp
Z25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gMDsgfQotU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IFN0cmluZygpOyB9IAotYm9vbCBXZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlN
RVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
ZmFsc2U7IH0KLXZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Ci0KK1BsdWdpblNldCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMo
KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IH0KK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFi
YXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK2Jvb2wgUGx1
Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiAKIENvbG9yIFdl
YkNvcmU6OmZvY3VzUmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBXZWJD
b3JlOjpzZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0LmNwcAkocmV2aXNpb24gMjk2MzYpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3F0L0ZpbGVTeXN0ZW1RdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDYgKzYyLDE4IEBAIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3QKICAg
ICByZXR1cm4gUURpcihwYXRoKS5maWxlUGF0aChjb21wb25lbnQpOwogfQogCitTdHJpbmcgcGF0
aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBt
b2R1bGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IH0KIAogLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDI5NjM2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw4
IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgi
CisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAjaW5j
bHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKQEAgLTY5LDYgKzcwLDEwIEBACiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBh
dGhzKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyB9CitWZWN0b3I8U3RyaW5nPiBQbHVnaW5E
YXRhYmFzZTo6ZGVmYXVsdFBsdWdpblBhdGhzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Citib29s
IFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFZlY3RvcjxTdHJpbmc+IHN1cHBvcnRlZEtleVNpemVzKCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsgfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDI5NjM2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2
ICsxMDgsMTEgQEAgU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKICAgICByZXR1cm4gIiI7CiB9
CiAKK1N0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJl
dHVybiBTdHJpbmcoUGF0aEZpbmRGaWxlTmFtZShtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKSkpOworfQorCiBzdGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWUoKQogewogICAgIHN0
YXRpYyBib29sIGluaXRpYWxpemVkOwpAQCAtMTk2LDYgKzIwMSwxMiBAQCBpbnQgd3JpdGVUb0Zp
bGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsCiAgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50PihieXRlc1dyaXR0ZW4pOwogfQorCitib29sIHVubG9hZE1vZHVs
ZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUpCit7CisgICAgcmV0dXJuIDo6RnJlZUxpYnJhcnkobW9k
dWxlKTsKK30KKwogU3RyaW5nIGxvY2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpCiB7
CiAgICAgcmV0dXJuIGNhY2hlZFN0b3JhZ2VEaXJlY3RvcnkoQ1NJRExfTE9DQUxfQVBQREFUQSk7
CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI5NjI2KQkoZnJv
bSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcDoyOTYyNikKKysrIFdl
YkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpbkRhdGFiYXNlV2luLmgiCisKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisj
aW5jbHVkZSAiUGx1Z2luVmlld1dpbi5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSA8
d2luZG93cy5oPgorI2luY2x1ZGUgPHNobHdhcGkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQbHVnaW5EYXRhYmFzZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMo
KQoreworICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZVdpbiogcGx1Z2lucyA9IDA7CisgICAgCisg
ICAgaWYgKCFwbHVnaW5zKSB7CisgICAgICAgIHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2VX
aW47CisgICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBsdWdpbkRhdGFiYXNlV2luOjpk
ZWZhdWx0UGx1Z2luUGF0aHMoKSk7CisgICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKKyAgICB9
CisKKyAgICByZXR1cm4gcGx1Z2luczsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZVdpbjo6YWRk
RXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBtX3BsdWdpblBhdGhz
LmFwcGVuZChwYXRoKTsKKyAgICByZWZyZXNoKCk7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2VX
aW46OnJlZnJlc2goKQoreyAgIAorICAgIFBsdWdpblNldCBuZXdQbHVnaW5zOworCisgICAgYm9v
bCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgc2V0IG9m
IHBsdWdpbnMKKyAgICBuZXdQbHVnaW5zID0gZ2V0UGx1Z2luc0luUGF0aHMoKTsKKworICAgIGlm
ICghbV9wbHVnaW5zLmlzRW1wdHkoKSkgeworICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMu
Y2xlYXIoKTsKKworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkID0gbV9wbHVnaW5z
OworCisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5l
bmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1
Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBwbHVnaW5zVG9Vbmxv
YWQucmVtb3ZlKCppdCk7CisKKyAgICAgICAgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgICAg
ICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbmV3UGx1Z2lucy5yZW1vdmUoKml0KTsKKwor
ICAgICAgICAvLyBVbmxvYWQgcGx1Z2lucworICAgICAgICBlbmQgPSBwbHVnaW5zVG9VbmxvYWQu
ZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsdWdp
bnNUb1VubG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdp
bnMucmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gQWRkIG5ldyBwbHVnaW5zCisgICAgICAgIGVu
ZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAg
ICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhcGx1
Z2luc1RvVW5sb2FkLmlzRW1wdHkoKSB8fCAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9wbHVnaW5zID0gbmV3UGx1Z2luczsKKyAgICAgICAgUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBs
dWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVn
aW5TZXRDaGFuZ2VkID0gIW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAgIH0KKworICAgIC8vIFJl
Z2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8g
R2V0IE1JTUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOworICAgICAg
ICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCpp
dCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21h
cF9pdCkgeworICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZp
cnN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW5TZXRDaGFuZ2VkOwor
fQorCitWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IFBsdWdpbkRhdGFiYXNlV2luOjpwbHVnaW5z
KCkgY29uc3QKK3sKKyAgICBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IHJlc3VsdDsKKworICAg
IFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZv
ciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoKCppdCkuZ2V0KCkpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVn
aXN0cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMpCit7CisgICAgSEtFWSBrZXk7
CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29mdHdhcmVc
XE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywgJmtleSk7CisKKyAg
ICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIHdj
aGFyX3QgbmFtZVsxMjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKKworICAgIC8vIEVu
dW1lcmF0ZSBzdWJrZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKKyAgICAgICAgRFdP
UkQgbmFtZUxlbiA9IF9jb3VudG9mKG5hbWUpOworICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5
RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOworCisg
ICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdPUkQgcGF0aFN0
clNpemUgPSBzaXplb2YocGF0aFN0cik7CisgICAgICAgIERXT1JEIHR5cGU7CisKKyAgICAgICAg
cmVzdWx0ID0gU0hHZXRWYWx1ZShrZXksIG5hbWUsIFRFWFQoIlBhdGgiKSwgJnR5cGUsIChMUEJZ
VEUpcGF0aFN0ciwgJnBhdGhTdHJTaXplKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9T
VUNDRVNTIHx8IHR5cGUgIT0gUkVHX1NaKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyaWJ1dGVzOworICAgICAgICBpZiAoR2V0
RmlsZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRyaWJ1
dGVzKSA9PSAwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUGx1Z2luUGFja2Fn
ZVdpbiogcGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBhY2thZ2UoU3RyaW5nKHBh
dGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBhdHRyaWJ1dGVzLmZ0TGFz
dFdyaXRlVGltZSk7CisKKyAgICAgICAgaWYgKHBhY2thZ2UpCisgICAgICAgICAgICBwbHVnaW5z
LmFkZChwYWNrYWdlKTsKKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitQbHVn
aW5TZXQgUGx1Z2luRGF0YWJhc2VXaW46OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KKyAgICBI
YXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOworICAgIFBsdWdpblNldCBwbHVnaW5zOwor
CisgICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgV0lOMzJfRklO
RF9EQVRBVyBmaW5kRmlsZURhdGE7CisKKyAgICBQbHVnaW5QYWNrYWdlV2luKiBvbGRXTVBQbHVn
aW4gPSAwOworICAgIFBsdWdpblBhY2thZ2VXaW4qIG5ld1dNUFBsdWdpbiA9IDA7CisKKyAgICBW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQoKTsK
KyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luUGF0
aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuID0g
Kml0ICsgIlxcKiI7CisKKyAgICAgICAgaEZpbmQgPSBGaW5kRmlyc3RGaWxlVyhwYXR0ZXJuLmNo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZmaW5kRmlsZURhdGEpOworCisgICAgICAg
IGlmIChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0
cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0
YS5jRmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7CisgICAgICAgICAg
ICBpZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5k
c1dpdGgoImRsbCIsIGZhbHNlKSkgJiYKKyAgICAgICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdD
YXNlKGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAx
MCIsIGZhbHNlKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFN0
cmluZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBmaWxlbmFtZTsKKyAgICAgICAgICAgIGlmICgh
dW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCkuc2Vjb25kKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAKKyAgICAgICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpblBh
Y2thZ2UgPSBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmls
ZURhdGEuZnRMYXN0V3JpdGVUaW1lKTsKKworICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2Up
IHsKKyAgICAgICAgICAgICAgICBwbHVnaW5zLmFkZChwbHVnaW5QYWNrYWdlKTsKKworICAgICAg
ICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wZHNwbGF5LmRsbCIp
KQorICAgICAgICAgICAgICAgICAgICBvbGRXTVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdlOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAibnAtbXN3
bXAuZGxsIikpCisgICAgICAgICAgICAgICAgICAgIG5ld1dNUFBsdWdpbiA9IHBsdWdpblBhY2th
Z2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSB3aGlsZSAoRmluZE5leHRGaWxlVyhoRmlu
ZCwgJmZpbmRGaWxlRGF0YSkgIT0gMCk7CisKKyAgICAgICAgRmluZENsb3NlKGhGaW5kKTsKKyAg
ICB9CisKKyAgICBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVlfTE9DQUxfTUFDSElORSwgcGx1
Z2lucyk7CisgICAgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGx1
Z2lucyk7CisKKyAgICAvLyBJZiBib3RoIHRoZSBvbGQgYW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBw
cmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwgCisgICAgLy8gd2UgcmVtb3ZlIHRoZSBvbGQgb25l
IHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2luZyB0aGUgb2xkIG9uZS4KKyAgICBpZiAob2xkV01Q
UGx1Z2luICYmIG5ld1dNUFBsdWdpbikKKyAgICAgICAgcGx1Z2lucy5yZW1vdmUob2xkV01QUGx1
Z2luKTsKKworICAgIHJldHVybiBwbHVnaW5zOworfQorCitzdGF0aWMgaW5saW5lIFZlY3Rvcjxp
bnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCit7Cisg
ICAgVmVjdG9yPGludD4gdmVyc2lvbjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAg
ICB1bnNpZ25lZCBlbmRQb3M7CisgICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0
cmluZy5sZW5ndGgoKSkgeworICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3Mg
PCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAgIGlmICh2ZXJz
aW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQg
PSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRv
SW50KCk7CisgICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOworCisgICAg
ICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVyc2lvbjsK
K30KKworLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVy
c2lvbkIKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGlu
dD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChp
ID49IHZlcnNpb25CLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVy
c2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9u
ZW50LCBqdXN0IHJldHVybiBmYWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGFkZE1vemlsbGFQbHVnaW5QYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit7
CisgICAgLy8gRW51bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBkaXJlY3RvcmllcyBpbiB0aGUg
cmVnaXN0cnkKKyAgICBIS0VZIGtleTsKKyAgICBMT05HIHJlc3VsdDsKKyAgICAKKyAgICByZXN1
bHQgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96
aWxsYSIpLCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUND
RVNTKSB7CisgICAgICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICAgICAgRklMRVRJTUUgbGFzdE1v
ZGlmaWVkOworCisgICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgICAgIGZvciAoaW50
IGkgPSAwOzsgaSsrKSB7CisgICAgICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUp
IC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5
LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAg
ICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKG5hbWUsIG5hbWVM
ZW4pICsgIlxcRXh0ZW5zaW9ucyI7CisgICAgICAgICAgICBIS0VZIGV4dGVuc2lvbnNLZXk7CisK
KyAgICAgICAgICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKKyAgICAgICAgICAgIHJlc3VsdCA9
IFJlZ09wZW5LZXlFeChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIDAsIEtFWV9SRUFELCAmZXh0ZW5zaW9uc0tleSk7CisKKyAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIC8vIE5vdyBnZXQg
dGhlIHBsdWdpbnMgcGF0aAorICAgICAgICAgICAgICAgIFdDSEFSIHBsdWdpbnNQYXRoU3RyW19N
QVhfUEFUSF07CisgICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2luc1BhdGhTaXplID0gc2l6ZW9m
KHBsdWdpbnNQYXRoU3RyKTsKKyAgICAgICAgICAgICAgICBEV09SRCB0eXBlOworCisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4dGVuc2lvbnNLZXksIFRFWFQoIlBs
dWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNQYXRoU3RyLCAmcGx1Z2luc1BhdGhT
aXplKTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0
eXBlID09IFJFR19TWikKKyAgICAgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhw
bHVnaW5zUGF0aFN0ciwgcGx1Z2luc1BhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKKwor
ICAgICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZWdDbG9zZUtleShrZXkpOworICAgIH0K
K30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpblBhdGgo
VmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIC8vIFRoZSBuZXcgV01QIEZpcmVmb3ggcGx1
Z2luIGlzIGluc3RhbGxlZCBpbiBcUEZpbGVzXFBsdWdpbnMgaWYgaXQgY2FuJ3QgZmluZCBhbnkg
RmlyZWZveCBpbnN0YWxscworICAgIFdDSEFSIHBsdWdpbkRpcmVjdG9yeVN0cltfTUFYX1BBVEgg
KyAxXTsKKyAgICBEV09SRCBwbHVnaW5EaXJlY3RvcnlTaXplID0gOjpFeHBhbmRFbnZpcm9ubWVu
dFN0cmluZ3NXKFRFWFQoIiVTWVNURU1EUklWRSVcXFBGaWxlc1xcUGx1Z2lucyIpLCBwbHVnaW5E
aXJlY3RvcnlTdHIsIF9jb3VudG9mKHBsdWdpbkRpcmVjdG9yeVN0cikpOworCisgICAgaWYgKHBs
dWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0gX2NvdW50b2Yo
cGx1Z2luRGlyZWN0b3J5U3RyKSkKKyAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5E
aXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7CisKKyAgICBEV09SRCB0eXBl
OworICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOworICAgIERX
T1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0
b3J5U3RyKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01B
Q0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxNaWNyb3NvZnRcXE1lZGlhUGxheWVyIiksIFRFWFQoIklu
c3RhbGxhdGlvbiBEaXJlY3RvcnkiKSwgJnR5cGUsIChMUEJZVEUpJmluc3RhbGxhdGlvbkRpcmVj
dG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOworCisgICAgaWYgKHJlc3VsdCA9
PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQorICAgICAgICBwYXRocy5hcHBlbmQo
U3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6
ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRRdWlj
a1RpbWVQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBEV09SRCB0eXBl
OworICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOworICAgIERX
T1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0
b3J5U3RyKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01B
Q0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxBcHBsZSBDb21wdXRlciwgSW5jLlxcUXVpY2tUaW1lIiks
IFRFWFQoIkluc3RhbGxEaXIiKSwgJnR5cGUsIChMUEJZVEUpJmluc3RhbGxhdGlvbkRpcmVjdG9y
eVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOworCisgICAgaWYgKHJlc3VsdCA9PSBF
UlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKSB7CisgICAgICAgIFN0cmluZyBwbHVnaW5E
aXIgPSBTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxsYXRpb25EaXJlY3Rv
cnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxccGx1Z2lucyI7CisgICAgICAgIHBhdGhz
LmFwcGVuZChwbHVnaW5EaXIpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZEFk
b2JlQWNyb2JhdFBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIEhLRVkg
a2V5OworICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElO
RSwgVEVYVCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlciIpLCAwLCBLRVlfUkVBRCwg
JmtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICByZXR1cm47
CisKKyAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOworCisg
ICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247CisgICAgU3RyaW5nIGxhdGVzdEFj
cm9iYXRWZXJzaW9uU3RyaW5nOworCisgICAgLy8gRW51bWVyYXRlIHN1YmtleXMKKyAgICBmb3Ig
KGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUp
IC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGks
IG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKKworICAgICAgICBpZiAo
cmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBW
ZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmluZyhTdHJpbmcobmFt
ZSwgbmFtZUxlbikpOworICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGFjcm9iYXRWZXJzaW9u
LCBsYXRlc3RBY3JvYmF0VmVyc2lvbikpIHsKKyAgICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJz
aW9uID0gYWNyb2JhdFZlcnNpb247CisgICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvblN0
cmluZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgRFdPUkQg
dHlwZTsKKyAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQYXRoU3RyW19NQVhfUEFUSF07Cisg
ICAgICAgIERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgPSBzaXplb2YoYWNyb2JhdEluc3Rh
bGxQYXRoU3RyKTsKKworICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpbktleVBhdGggPSAiU29m
dHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3Ry
aW5nICsgIlxcSW5zdGFsbFBhdGgiOworICAgICAgICByZXN1bHQgPSBTSEdldFZhbHVlKEhLRVlf
TE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKSwgMCwgJnR5cGUsIChMUEJZVEUpYWNyb2JhdEluc3RhbGxQYXRoU3RyLCAmYWNy
b2JhdEluc3RhbGxQYXRoU2l6ZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUND
RVNTKSB7CisgICAgICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpblBhdGggPSBTdHJpbmcoYWNy
b2JhdEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFS
KSAtIDEpICsgIlxcYnJvd3NlciI7CisgICAgICAgICAgICBwYXRocy5hcHBlbmQoYWNyb2JhdFBs
dWdpblBhdGgpOworICAgICAgICB9CisgICAgfQorCisgICAgUmVnQ2xvc2VLZXkoa2V5KTsKK30K
Kworc3RhdGljIGlubGluZSBTdHJpbmcgc2FmYXJpUGx1Z2luc1BhdGgoKQoreworICAgIFdDSEFS
IG1vZHVsZUZpbGVOYW1lU3RyW19NQVhfUEFUSF07CisgICAgc3RhdGljIFN0cmluZyBwbHVnaW5z
UGF0aDsKKyAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5QYXRoID0gZmFsc2U7CisKKyAgICBp
ZiAoIWNhY2hlZFBsdWdpblBhdGgpIHsKKyAgICAgICAgY2FjaGVkUGx1Z2luUGF0aCA9IHRydWU7
CisKKyAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9kdWxlRmlsZU5hbWUoMCwg
bW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7CisKKyAgICAgICAgaWYgKCFtb2R1bGVGaWxl
TmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgpCisgICAgICAgICAgICBn
b3RvIGV4aXQ7CisKKyAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNwZWMobW9kdWxlRmlsZU5h
bWVTdHIpKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIHBsdWdpbnNQYXRoID0g
U3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMiOworICAgIH0KK2V4aXQ6Cisg
ICAgcmV0dXJuIHBsdWdpbnNQYXRoOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9t
ZWRpYVBsdWdpblBhdGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBXQ0hBUiBzeXN0
ZW1EaXJlY3RvcnlTdHJbTUFYX1BBVEhdOworCisgICAgaWYgKEdldFN5c3RlbURpcmVjdG9yeShz
eXN0ZW1EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHN5c3RlbURpcmVjdG9yeVN0cikpID09IDApCisg
ICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFYX1BB
VEhdOworCisgICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGly
ZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcRmxhc2giKSk7CisgICAgcGF0aHMuYXBwZW5kKG1h
Y3JvbWVkaWFEaXJlY3RvcnlTdHIpOworCisgICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVj
dG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEw
IikpOworICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKK30KKworVmVj
dG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQbHVnaW5QYXRocygpCit7Cisg
ICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7CisgICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVn
aW5zUGF0aCgpOworCisgICAgaWYgKCFvdXJQYXRoLmlzTnVsbCgpKQorICAgICAgICBwYXRocy5h
cHBlbmQob3VyUGF0aCk7CisgICAgYWRkUXVpY2tUaW1lUGx1Z2luUGF0aChwYXRocyk7CisgICAg
YWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChwYXRocyk7CisgICAgYWRkTW96aWxsYVBsdWdpblBh
dGhzKHBhdGhzKTsKKyAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRoKHBhdGhzKTsK
KyAgICBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMocGF0aHMpOworCisgICAgcmV0dXJuIHBhdGhz
OworfQorCitib29sIFBsdWdpbkRhdGFiYXNlV2luOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMo
bWltZVR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZv
dW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAg
IHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1l
VHlwZSkpOworfQorCitQbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6cGx1Z2lu
Rm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZyBrZXkgPSBtaW1lVHlw
ZS5sb3dlcigpOworICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKKyAg
ICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSAwOworICAgIFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworCisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKKyAg
ICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOworICAgICAgICAgICAgLy8gcHJlZmVyIHBs
dWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQorICAgICAgICAgICAgaWYgKHBsdWdp
bi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW47Cit9CisKK1N0cmluZyBQbHVn
aW5EYXRhYmFzZVdpbjo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNp
b24pIGNvbnN0Cit7CisgICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVn
aW5zLmVuZCgpOworICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKKyAg
ICBTdHJpbmcgbWltZVR5cGU7CisgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gMDsKKwor
ICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOworCisg
ICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9
ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsg
KyttaW1lX2l0KSB7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9u
cyA9IG1pbWVfaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKKyAgICAgICAgICAgICAgICAgICAgcGx1Z2lu
ID0gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGlu
IG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdp
bi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBtaW1lVHlwZTsKK30KKworUGx1Z2luUGFja2FnZVdpbiogUGx1Z2lu
RGF0YWJhc2VXaW46OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBl
KQoreyAgIAorICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBl
KG1pbWVUeXBlKTsKKyAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwuc3RyaW5nKCk7CisgICAgCisg
ICAgaWYgKCFwbHVnaW4pIHsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLmxhc3RQYXRo
Q29tcG9uZW50KCk7CisgICAgICAgIGlmICghZmlsZW5hbWUuZW5kc1dpdGgoIi8iKSkgeworICAg
ICAgICAgICAgaW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7Cisg
ICAgICAgICAgICBpZiAoZXh0ZW5zaW9uUG9zICE9IC0xKSB7CisgICAgICAgICAgICAgICAgU3Ry
aW5nIGV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhleHRlbnNpb25Qb3MgKyAxKTsKKwor
ICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9u
KTsKKyAgICAgICAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGSVhNRTogaWYgbm8g
cGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSBXaW5kb3dzIGZvciB0aGUgbWltZSB0eXBlIAor
ICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbi4KKworICAgIHJldHVybiBwbHVn
aW47Cit9CisKK1BsdWdpblZpZXdXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpjcmVhdGVQbHVnaW5W
aWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSkKK3sKKyAgICAvLyBpZiB3ZSBmYWlsIHRvIGZpbmQgYSBwbHVn
aW4gZm9yIHRoaXMgTUlNRSB0eXBlLCBmaW5kUGx1Z2luIHdpbGwgc2VhcmNoIGZvcgorICAgIC8v
IGEgcGx1Z2luIGJ5IHRoZSBmaWxlIGV4dGVuc2lvbiBhbmQgdXBkYXRlIHRoZSBNSU1FIHR5cGUs
IHNvIHBhc3MgYSBtdXRhYmxlIFN0cmluZworICAgIFN0cmluZyBtaW1lVHlwZUNvcHkgPSBtaW1l
VHlwZTsKKyAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWlt
ZVR5cGVDb3B5KTsKKyAgICAKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVz
aGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIGlmICghcGx1Z2luICYm
IHJlZnJlc2goKSkgeworICAgICAgICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICAgICAg
cGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7CisgICAgfQorICAgICAgICAK
KyAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdXaW4ocGFyZW50RnJhbWUsIHNpemUsIHBsdWdpbiwg
ZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGVDb3B5LCBsb2Fk
TWFudWFsbHkpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHJl
dmlzaW9uIDI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDM2ICsyNSw0MyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpbkRh
dGFiYXNlLmgiCiAKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCi0jaW5jbHVkZSAiUGx1
Z2luVmlld1dpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxzaGx3YXBpLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGx1Z2luRGF0YWJhc2VXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpp
bnN0YWxsZWRQbHVnaW5zKCkKK1BsdWdpbkRhdGFiYXNlKiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFs
bGVkUGx1Z2lucygpCiB7Ci0gICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlV2luKiBwbHVnaW5zID0g
MDsKKyAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIHBsdWdpbnMgPSAwOwogICAgIAogICAgIGlm
ICghcGx1Z2lucykgewotICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlV2luOwot
ICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRhYmFzZVdpbjo6ZGVmYXVs
dFBsdWdpblBhdGhzKCkpOworICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlOwor
ICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBs
dWdpblBhdGhzKCkpOwogICAgICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHBsdWdpbnM7CiB9CiAKLXZvaWQgUGx1Z2luRGF0YWJhc2VXaW46OmFkZEV4dHJhUGx1
Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCitib29sIFBsdWdpbkRhdGFiYXNlOjppc01JTUVU
eXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlw
ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JlZ2lzdGVyZWRN
SU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAv
LyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNl
YXJjaGluZyBhZ2FpbgorICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVU
eXBlcy5jb250YWlucyhtaW1lVHlwZSkpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjphZGRF
eHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIG1fcGx1Z2luUGF0aHMu
YXBwZW5kKHBhdGgpOwogICAgIHJlZnJlc2goKTsKIH0KIAotYm9vbCBQbHVnaW5EYXRhYmFzZVdp
bjo6cmVmcmVzaCgpCitib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKIHsgICAKICAgICBQ
bHVnaW5TZXQgbmV3UGx1Z2luczsKIApAQCAtMTA4LDkgKzExNiw5IEBAIGJvb2wgUGx1Z2luRGF0
YWJhc2VXaW46OnJlZnJlc2goKQogICAgIHJldHVybiBwbHVnaW5TZXRDaGFuZ2VkOwogfQogCi1W
ZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IFBsdWdpbkRhdGFiYXNlV2luOjpwbHVnaW5zKCkgY29u
c3QKK1ZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gUGx1Z2luRGF0YWJhc2U6OnBsdWdpbnMoKSBjb25z
dAogewotICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gcmVzdWx0OworICAgIFZlY3RvcjxQ
bHVnaW5QYWNrYWdlKj4gcmVzdWx0OwogCiAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BsdWdpbnMuZW5kKCk7CiAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKQEAgLTExOSwzNjMgKzEy
NywzMiBAQCBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IFBsdWdpbkRhdGFiYXNlCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVnaXN0
cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMpCi17Ci0gICAgSEtFWSBrZXk7Ci0g
ICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29mdHdhcmVcXE1v
emlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywgJmtleSk7Ci0KLSAgICBp
ZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdjaGFy
X3QgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgIC8vIEVudW1l
cmF0ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKLSAgICAgICAgRFdPUkQg
bmFtZUxlbiA9IF9jb3VudG9mKG5hbWUpOwotICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhX
KGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAg
ICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgcGF0aFN0clNp
emUgPSBzaXplb2YocGF0aFN0cik7Ci0gICAgICAgIERXT1JEIHR5cGU7Ci0KLSAgICAgICAgcmVz
dWx0ID0gU0hHZXRWYWx1ZShrZXksIG5hbWUsIFRFWFQoIlBhdGgiKSwgJnR5cGUsIChMUEJZVEUp
cGF0aFN0ciwgJnBhdGhTdHJTaXplKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUND
RVNTIHx8IHR5cGUgIT0gUkVHX1NaKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
V0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyaWJ1dGVzOwotICAgICAgICBpZiAoR2V0Rmls
ZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRyaWJ1dGVz
KSA9PSAwKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUGx1Z2luUGFja2FnZVdp
biogcGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBhY2thZ2UoU3RyaW5nKHBhdGhT
dHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBhdHRyaWJ1dGVzLmZ0TGFzdFdy
aXRlVGltZSk7Ci0KLSAgICAgICAgaWYgKHBhY2thZ2UpCi0gICAgICAgICAgICBwbHVnaW5zLmFk
ZChwYWNrYWdlKTsKLSAgICB9Ci0KLSAgICBSZWdDbG9zZUtleShrZXkpOwotfQotCi1QbHVnaW5T
ZXQgUGx1Z2luRGF0YWJhc2VXaW46OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KLSAgICBIYXNo
U2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOwotICAgIFBsdWdpblNldCBwbHVnaW5zOwotCi0g
ICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0gICAgV0lOMzJfRklORF9E
QVRBVyBmaW5kRmlsZURhdGE7Ci0KLSAgICBQbHVnaW5QYWNrYWdlV2luKiBvbGRXTVBQbHVnaW4g
PSAwOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIG5ld1dNUFBsdWdpbiA9IDA7Ci0KLSAgICBWZWN0
b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQoKTsKLSAg
ICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luUGF0aHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFN0cmluZyBwYXR0ZXJuID0gKml0
ICsgIlxcKiI7Ci0KLSAgICAgICAgaEZpbmQgPSBGaW5kRmlyc3RGaWxlVyhwYXR0ZXJuLmNoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZmaW5kRmlsZURhdGEpOwotCi0gICAgICAgIGlm
IChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmli
dXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0YS5j
RmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7Ci0gICAgICAgICAgICBp
ZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5kc1dp
dGgoImRsbCIsIGZhbHNlKSkgJiYKLSAgICAgICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdDYXNl
KGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAxMCIs
IGZhbHNlKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmlu
ZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBmaWxlbmFtZTsKLSAgICAgICAgICAgIGlmICghdW5p
cXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCkuc2Vjb25kKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAKLSAgICAgICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpblBhY2th
Z2UgPSBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmlsZURh
dGEuZnRMYXN0V3JpdGVUaW1lKTsKLQotICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsK
LSAgICAgICAgICAgICAgICBwbHVnaW5zLmFkZChwbHVnaW5QYWNrYWdlKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wZHNwbGF5LmRsbCIpKQot
ICAgICAgICAgICAgICAgICAgICBvbGRXTVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdlOwotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAibnAtbXN3bXAu
ZGxsIikpCi0gICAgICAgICAgICAgICAgICAgIG5ld1dNUFBsdWdpbiA9IHBsdWdpblBhY2thZ2U7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSB3aGlsZSAoRmluZE5leHRGaWxlVyhoRmluZCwg
JmZpbmRGaWxlRGF0YSkgIT0gMCk7Ci0KLSAgICAgICAgRmluZENsb3NlKGhGaW5kKTsKLSAgICB9
Ci0KLSAgICBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVlfTE9DQUxfTUFDSElORSwgcGx1Z2lu
cyk7Ci0gICAgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGx1Z2lu
cyk7Ci0KLSAgICAvLyBJZiBib3RoIHRoZSBvbGQgYW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBwcmVz
ZW50IGluIHRoZSBwbHVnaW5zIHNldCwgCi0gICAgLy8gd2UgcmVtb3ZlIHRoZSBvbGQgb25lIHNv
IHdlIGRvbid0IGVuZCB1cCBjaG9vc2luZyB0aGUgb2xkIG9uZS4KLSAgICBpZiAob2xkV01QUGx1
Z2luICYmIG5ld1dNUFBsdWdpbikKLSAgICAgICAgcGx1Z2lucy5yZW1vdmUob2xkV01QUGx1Z2lu
KTsKLQotICAgIHJldHVybiBwbHVnaW5zOwotfQotCi1zdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+
IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCi17Ci0gICAg
VmVjdG9yPGludD4gdmVyc2lvbjsKLQotICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKLSAgICB1
bnNpZ25lZCBlbmRQb3M7Ci0gICAgCi0gICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmlu
Zy5sZW5ndGgoKSkgewotICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2
ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKLSAgICAgICAgICAgIGlmICh2ZXJzaW9u
U3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2
ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50
KCk7Ci0gICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOwotCi0gICAgICAg
IHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmVyc2lvbjsKLX0K
LQotLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lv
bkIKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4m
IHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCi17Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpID49
IHZlcnNpb25CLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlm
ICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lv
bnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50
LCBqdXN0IHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGlu
ZSB2b2lkIGFkZE1vemlsbGFQbHVnaW5QYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0g
ICAgLy8gRW51bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBkaXJlY3RvcmllcyBpbiB0aGUgcmVn
aXN0cnkKLSAgICBIS0VZIGtleTsKLSAgICBMT05HIHJlc3VsdDsKLSAgICAKLSAgICByZXN1bHQg
PSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96aWxs
YSIpLCAwLCBLRVlfUkVBRCwgJmtleSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNT
KSB7Ci0gICAgICAgIFdDSEFSIG5hbWVbMTI4XTsKLSAgICAgICAgRklMRVRJTUUgbGFzdE1vZGlm
aWVkOwotCi0gICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOzsgaSsrKSB7Ci0gICAgICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8g
c2l6ZW9mKFdDSEFSKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBp
LCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgICAg
IGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4p
ICsgIlxcRXh0ZW5zaW9ucyI7Ci0gICAgICAgICAgICBIS0VZIGV4dGVuc2lvbnNLZXk7Ci0KLSAg
ICAgICAgICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKLSAgICAgICAgICAgIHJlc3VsdCA9IFJl
Z09wZW5LZXlFeChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCksIDAsIEtFWV9SRUFELCAmZXh0ZW5zaW9uc0tleSk7Ci0KLSAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIC8vIE5vdyBnZXQgdGhl
IHBsdWdpbnMgcGF0aAotICAgICAgICAgICAgICAgIFdDSEFSIHBsdWdpbnNQYXRoU3RyW19NQVhf
UEFUSF07Ci0gICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2luc1BhdGhTaXplID0gc2l6ZW9mKHBs
dWdpbnNQYXRoU3RyKTsKLSAgICAgICAgICAgICAgICBEV09SRCB0eXBlOwotCi0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4dGVuc2lvbnNLZXksIFRFWFQoIlBsdWdp
bnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNQYXRoU3RyLCAmcGx1Z2luc1BhdGhTaXpl
KTsKLQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBl
ID09IFJFR19TWikKLSAgICAgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhwbHVn
aW5zUGF0aFN0ciwgcGx1Z2luc1BhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLQotICAg
ICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZWdDbG9zZUtleShrZXkpOwotICAgIH0KLX0K
LQotc3RhdGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpblBhdGgoVmVj
dG9yPFN0cmluZz4mIHBhdGhzKQotewotICAgIC8vIFRoZSBuZXcgV01QIEZpcmVmb3ggcGx1Z2lu
IGlzIGluc3RhbGxlZCBpbiBcUEZpbGVzXFBsdWdpbnMgaWYgaXQgY2FuJ3QgZmluZCBhbnkgRmly
ZWZveCBpbnN0YWxscwotICAgIFdDSEFSIHBsdWdpbkRpcmVjdG9yeVN0cltfTUFYX1BBVEggKyAx
XTsKLSAgICBEV09SRCBwbHVnaW5EaXJlY3RvcnlTaXplID0gOjpFeHBhbmRFbnZpcm9ubWVudFN0
cmluZ3NXKFRFWFQoIiVTWVNURU1EUklWRSVcXFBGaWxlc1xcUGx1Z2lucyIpLCBwbHVnaW5EaXJl
Y3RvcnlTdHIsIF9jb3VudG9mKHBsdWdpbkRpcmVjdG9yeVN0cikpOwotCi0gICAgaWYgKHBsdWdp
bkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0gX2NvdW50b2YocGx1
Z2luRGlyZWN0b3J5U3RyKSkKLSAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5EaXJl
Y3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7Ci0KLSAgICBEV09SRCB0eXBlOwot
ICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JE
IGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U3RyKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJ
TkUsIFRFWFQoIlNvZnR3YXJlXFxNaWNyb3NvZnRcXE1lZGlhUGxheWVyIiksIFRFWFQoIkluc3Rh
bGxhdGlvbiBEaXJlY3RvcnkiKSwgJnR5cGUsIChMUEJZVEUpJmluc3RhbGxhdGlvbkRpcmVjdG9y
eVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBF
UlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAgICAgICBwYXRocy5hcHBlbmQoU3Ry
aW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAv
IHNpemVvZihXQ0hBUikgLSAxKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRRdWlja1Rp
bWVQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBEV09SRCB0eXBlOwot
ICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JE
IGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U3RyKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJ
TkUsIFRFWFQoIlNvZnR3YXJlXFxBcHBsZSBDb21wdXRlciwgSW5jLlxcUXVpY2tUaW1lIiksIFRF
WFQoIkluc3RhbGxEaXIiKSwgJnR5cGUsIChMUEJZVEUpJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0
ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBFUlJP
Ul9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKSB7Ci0gICAgICAgIFN0cmluZyBwbHVnaW5EaXIg
PSBTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxsYXRpb25EaXJlY3RvcnlT
aXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxccGx1Z2lucyI7Ci0gICAgICAgIHBhdGhzLmFw
cGVuZChwbHVnaW5EaXIpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZEFkb2Jl
QWNyb2JhdFBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQotewotICAgIEhLRVkga2V5
OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwg
VEVYVCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlciIpLCAwLCBLRVlfUkVBRCwgJmtl
eSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAg
VmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247Ci0gICAgU3RyaW5nIGxhdGVzdEFjcm9i
YXRWZXJzaW9uU3RyaW5nOwotCi0gICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBmb3IgKGlu
dCBpID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8g
c2l6ZW9mKFdDSEFSKTsKLSAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5h
bWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVz
dWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBWZWN0
b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmluZyhTdHJpbmcobmFtZSwg
bmFtZUxlbikpOwotICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGFjcm9iYXRWZXJzaW9uLCBs
YXRlc3RBY3JvYmF0VmVyc2lvbikpIHsKLSAgICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9u
ID0gYWNyb2JhdFZlcnNpb247Ci0gICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmlu
ZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
bGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgRFdPUkQgdHlw
ZTsKLSAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQYXRoU3RyW19NQVhfUEFUSF07Ci0gICAg
ICAgIERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgPSBzaXplb2YoYWNyb2JhdEluc3RhbGxQ
YXRoU3RyKTsKLQotICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpbktleVBhdGggPSAiU29mdHdh
cmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5n
ICsgIlxcSW5zdGFsbFBhdGgiOwotICAgICAgICByZXN1bHQgPSBTSEdldFZhbHVlKEhLRVlfTE9D
QUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWlu
YXRpb24oKSwgMCwgJnR5cGUsIChMUEJZVEUpYWNyb2JhdEluc3RhbGxQYXRoU3RyLCAmYWNyb2Jh
dEluc3RhbGxQYXRoU2l6ZSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNT
KSB7Ci0gICAgICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpblBhdGggPSBTdHJpbmcoYWNyb2Jh
dEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAt
IDEpICsgIlxcYnJvd3NlciI7Ci0gICAgICAgICAgICBwYXRocy5hcHBlbmQoYWNyb2JhdFBsdWdp
blBhdGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQot
c3RhdGljIGlubGluZSBTdHJpbmcgc2FmYXJpUGx1Z2luc1BhdGgoKQotewotICAgIFdDSEFSIG1v
ZHVsZUZpbGVOYW1lU3RyW19NQVhfUEFUSF07Ci0gICAgc3RhdGljIFN0cmluZyBwbHVnaW5zUGF0
aDsKLSAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5QYXRoID0gZmFsc2U7Ci0KLSAgICBpZiAo
IWNhY2hlZFBsdWdpblBhdGgpIHsKLSAgICAgICAgY2FjaGVkUGx1Z2luUGF0aCA9IHRydWU7Ci0K
LSAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9kdWxlRmlsZU5hbWUoMCwgbW9k
dWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7Ci0KLSAgICAgICAgaWYgKCFtb2R1bGVGaWxlTmFt
ZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgpCi0gICAgICAgICAgICBnb3Rv
IGV4aXQ7Ci0KLSAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNwZWMobW9kdWxlRmlsZU5hbWVT
dHIpKQotICAgICAgICAgICAgZ290byBleGl0OwotCi0gICAgICAgIHBsdWdpbnNQYXRoID0gU3Ry
aW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMiOwotICAgIH0KLWV4aXQ6Ci0gICAg
cmV0dXJuIHBsdWdpbnNQYXRoOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRp
YVBsdWdpblBhdGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBXQ0hBUiBzeXN0ZW1E
aXJlY3RvcnlTdHJbTUFYX1BBVEhdOwotCi0gICAgaWYgKEdldFN5c3RlbURpcmVjdG9yeShzeXN0
ZW1EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHN5c3RlbURpcmVjdG9yeVN0cikpID09IDApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFdDSEFSIG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFYX1BBVEhd
OwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0
b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcRmxhc2giKSk7Ci0gICAgcGF0aHMuYXBwZW5kKG1hY3Jv
bWVkaWFEaXJlY3RvcnlTdHIpOwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9y
eVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikp
OwotICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKLX0KLQotVmVjdG9y
PFN0cmluZz4gUGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQbHVnaW5QYXRocygpCi17Ci0gICAg
VmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0gICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5z
UGF0aCgpOwotCi0gICAgaWYgKCFvdXJQYXRoLmlzTnVsbCgpKQotICAgICAgICBwYXRocy5hcHBl
bmQob3VyUGF0aCk7Ci0gICAgYWRkUXVpY2tUaW1lUGx1Z2luUGF0aChwYXRocyk7Ci0gICAgYWRk
QWRvYmVBY3JvYmF0UGx1Z2luUGF0aChwYXRocyk7Ci0gICAgYWRkTW96aWxsYVBsdWdpblBhdGhz
KHBhdGhzKTsKLSAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRoKHBhdGhzKTsKLSAg
ICBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMocGF0aHMpOwotCi0gICAgcmV0dXJuIHBhdGhzOwot
fQotCi1ib29sIFBsdWdpbkRhdGFiYXNlV2luOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQotewotICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWlt
ZVR5cGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5k
LCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIHJl
dHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlw
ZSkpOwotfQotCi1QbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6cGx1Z2luRm9y
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK1BsdWdpblBhY2thZ2UqIFBsdWdpbkRh
dGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAg
IGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgU3RyaW5n
IGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7Ci0gICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVn
aW5zUGF0aCgpOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IDA7CisgICAgUGx1Z2lu
UGFja2FnZSogcGx1Z2luID0gMDsKICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fcGx1Z2lucy5lbmQoKTsKIAogICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKCgq
aXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CiAgICAgICAgICAgICBw
bHVnaW4gPSAoKml0KS5nZXQoKTsKLSAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91
ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgIGlmIChwbHVnaW4tPnBhcmVudERp
cmVjdG9yeSgpID09IG91clBhdGgpCi0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICByZXR1cm4gcGx1Z2luOwogfQogCi1TdHJpbmcgUGx1Z2luRGF0YWJhc2VX
aW46Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdAor
U3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcm
IGV4dGVuc2lvbikgY29uc3QKIHsKICAgICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0
aCgpOwogICAgIFN0cmluZyBtaW1lVHlwZTsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4g
PSAwOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IDA7CiAKICAgICBmb3IgKFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5k
ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKQEAgLTQ4Niw5ICsxNjMsNiBAQCBT
dHJpbmcgUGx1Z2luRGF0YWJhc2VXaW46Ok1JTUVUeXBlRm9yRXh0CiAgICAgICAgICAgICAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKICAgICAg
ICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKICAgICAgICAgICAgICAg
ICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByZWZl
ciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpAQCAtNDk3LDkgKzE3MSw5IEBAIFN0cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6TUlN
RVR5cGVGb3JFeHQKICAgICByZXR1cm4gbWltZVR5cGU7CiB9CiAKLVBsdWdpblBhY2thZ2VXaW4q
IFBsdWdpbkRhdGFiYXNlV2luOjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBt
aW1lVHlwZSkKK1BsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKGNvbnN0
IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSkKIHsgICAKLSAgICBQbHVnaW5QYWNrYWdlV2lu
KiBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgUGx1Z2luUGFja2Fn
ZSogcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOwogICAgIFN0cmluZyBmaWxl
bmFtZSA9IHVybC5zdHJpbmcoKTsKICAgICAKICAgICBpZiAoIXBsdWdpbikgewpAQCAtNTIxLDIw
ICsxOTUsNCBAQCBQbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6ZmluCiAgICAg
cmV0dXJuIHBsdWdpbjsKIH0KIAotUGx1Z2luVmlld1dpbiogUGx1Z2luRGF0YWJhc2VXaW46OmNy
ZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQotewotICAgIC8vIGlmIHdlIGZhaWwgdG8g
ZmluZCBhIHBsdWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZpbmRQbHVnaW4gd2lsbCBzZWFyY2gg
Zm9yCi0gICAgLy8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGFuZCB1cGRhdGUgdGhl
IE1JTUUgdHlwZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5nCi0gICAgU3RyaW5nIG1pbWVUeXBl
Q29weSA9IG1pbWVUeXBlOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IGZpbmRQbHVn
aW4odXJsLCBtaW1lVHlwZUNvcHkpOwotICAgIAotICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQs
IHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCi0gICAgaWYg
KCFwbHVnaW4gJiYgcmVmcmVzaCgpKSB7Ci0gICAgICAgIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBl
OwotICAgICAgICBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKLSAgICB9
Ci0gICAgICAgIAotICAgIHJldHVybiBuZXcgUGx1Z2luVmlld1dpbihwYXJlbnRGcmFtZSwgc2l6
ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlw
ZUNvcHksIGxvYWRNYW51YWxseSk7Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFz
ZS5oCShyZXZpc2lvbiAyOTYyNikJKGZyb20gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRh
YmFzZVdpbi5oOjI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBs
dWdpbkRhdGFiYXNlV2luX0gKKyNkZWZpbmUgUGx1Z2luRGF0YWJhc2VXaW5fSAorCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKyNpbmNsdWRl
ICJTdHJpbmdIYXNoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBFbGVtZW50
OworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIEludFNpemU7CisgICAgY2xhc3MgS1VSTDsK
KyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlV2luOworICAgIGNsYXNzIFBsdWdpblZpZXdXaW47CisK
KyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+LCBQbHVnaW5QYWNr
YWdlV2luSGFzaD4gUGx1Z2luU2V0OworICAKKyAgICBjbGFzcyBQbHVnaW5EYXRhYmFzZVdpbiB7
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VXaW4qIGluc3RhbGxl
ZFBsdWdpbnMoKTsKKyAgICAgICAgUGx1Z2luVmlld1dpbiogY3JlYXRlUGx1Z2luVmlldyhGcmFt
ZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1h
bnVhbGx5KTsKKworICAgICAgICBib29sIHJlZnJlc2goKTsKKyAgICAgICAgVmVjdG9yPFBsdWdp
blBhY2thZ2VXaW4qPiBwbHVnaW5zKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNNSU1FVHlwZVJl
Z2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIHZvaWQgYWRkRXh0cmFQ
bHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc2V0
UGx1Z2luUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1fcGx1Z2luUGF0aHMg
PSBwYXRoczsgfQorICAgICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdDsK
KworICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwg
U3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbkZvck1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBTdHJpbmcgTUlNRVR5cGVG
b3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0OworCisgICAgICAgIHN0
YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsKKworICAgICAgICBWZWN0
b3I8U3RyaW5nPiBtX3BsdWdpblBhdGhzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdp
c3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOworICAgIH07CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0
YWJhc2UuaAkocmV2aXNpb24gMjk2MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDQxICsyNCwzOSBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBQbHVnaW5EYXRhYmFzZVdpbl9ICi0jZGVmaW5lIFBsdWdpbkRh
dGFiYXNlV2luX0gKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2lmbmRlZiBQbHVnaW5EYXRhYmFzZV9ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNl
X0gKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2Fn
ZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNo
LmgiCiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRnJh
bWU7CiAgICAgY2xhc3MgSW50U2l6ZTsKICAgICBjbGFzcyBLVVJMOwotICAgIGNsYXNzIFBsdWdp
blBhY2thZ2VXaW47Ci0gICAgY2xhc3MgUGx1Z2luVmlld1dpbjsKKyAgICBjbGFzcyBQbHVnaW5Q
YWNrYWdlOwogCi0gICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiwg
UGx1Z2luUGFja2FnZVdpbkhhc2g+IFBsdWdpblNldDsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVm
UHRyPFBsdWdpblBhY2thZ2U+LCBQbHVnaW5QYWNrYWdlSGFzaD4gUGx1Z2luU2V0OwogICAKLSAg
ICBjbGFzcyBQbHVnaW5EYXRhYmFzZVdpbiB7CisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2Ugewog
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlV2luKiBpbnN0YWxsZWRQ
bHVnaW5zKCk7Ci0gICAgICAgIFBsdWdpblZpZXdXaW4qIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUq
IHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51
YWxseSk7CisgICAgICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZSogaW5zdGFsbGVkUGx1Z2lucygp
OwogCiAgICAgICAgIGJvb2wgcmVmcmVzaCgpOwotICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2Fn
ZVdpbio+IHBsdWdpbnMoKSBjb25zdDsKKyAgICAgICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBw
bHVnaW5zKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSk7CiAgICAgICAgIHZvaWQgYWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0
IFN0cmluZyYpOwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0UGx1Z2luUGF0aHMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1fcGx1Z2luUGF0aHMgPSBwYXRoczsgfQogICAg
ICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdDsKIAotICAgICAgICBQbHVn
aW5QYWNrYWdlV2luKiBmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlw
ZSk7Ci0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpOworICAgICAgICBQbHVnaW5QYWNrYWdlKiBmaW5kUGx1Z2luKGNvbnN0
IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBs
dWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogICAgICAgICBTdHJpbmcg
TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0OwogCiAg
ICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsKSW5kZXg6
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCShyZXZpc2lvbiAyOTYyNikJKGZyb20gV2Vi
Q29yZS9wbHVnaW5zL3dpbi9QbHVnSW5JbmZvU3RvcmVXaW4uY3BwOjI5NjI2KQorKysgV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1
Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VXaW4uaCIKKyNpbmNsdWRl
ICJQbHVnaW5QYWNrYWdlV2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luSW5m
byogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNp
Z25lZCBpKSAKK3sgCisgICAgUGx1Z2luRGF0YWJhc2VXaW4gKmRiID0gUGx1Z2luRGF0YWJhc2VX
aW46Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdp
bkluZm87CisgICAgUGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IGRiLT5wbHVnaW5zKClbaV07
CisKKyAgICBpbmZvLT5uYW1lID0gcGFja2FnZS0+bmFtZSgpOworICAgIGluZm8tPmZpbGUgPSBw
YWNrYWdlLT5maWxlTmFtZSgpOworICAgIGluZm8tPmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlv
bigpOworCisgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlv
bnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICBNSU1FVG9EZXNjcmlwdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAg
ICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9E
ZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1pbWVDbGFz
c0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgaW5mby0+bWltZXMuYXBw
ZW5kKG1pbWUpOworICAgICAgICAKKyAgICAgICAgbWltZS0+dHlwZSA9IGl0LT5maXJzdDsKKyAg
ICAgICAgbWltZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIG1pbWUtPnBsdWdpbiA9IGlu
Zm87CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVU
b0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlwZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAg
aWYgKGkgPiAwKQorICAgICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9ICIsIjsKKworICAg
ICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBpbmZvOworfQorCit1bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6OnBs
dWdpbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VXaW46Omluc3Rh
bGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKK30KKworCitTdHJpbmcgUGx1Z0luSW5m
b1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sK
KyAgICAvLyBGSVhNRSA1NjI5MTM5OiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb24gV2luZG93cy4K
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKKyAgICAKK2Jvb2wgUGx1Z0luSW5mb1N0b3JlOjpz
dXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWltZVR5cGUpIAoreworICAg
IHJldHVybiBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBl
UmVnaXN0ZXJlZChtaW1lVHlwZSk7Cit9CisKK3ZvaWQgcmVmcmVzaFBsdWdpbnMoYm9vbCByZWxv
YWRPcGVuUGFnZXMpCit7CisgICAgUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMo
KS0+cmVmcmVzaCgpOworCisgICAgaWYgKHJlbG9hZE9wZW5QYWdlcykgeworICAgICAgICAvLyBG
SVhNRTogcmVsb2FkIG9wZW4gcGFnZXMKKyAgICB9Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5JbmZvU3RvcmUuY3BwCShyZXZpc2lvbiAyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5JbmZvU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMTYgKzI2LDE2IEBA
CiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKLSNp
bmNsdWRlICJQbHVnaW5EYXRhYmFzZVdpbi5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4u
aCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2Uu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6
OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkIGkpIAogeyAKLSAgICBQ
bHVnaW5EYXRhYmFzZVdpbiAqZGIgPSBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lu
cygpOworICAgIFBsdWdpbkRhdGFiYXNlICpkYiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQ
bHVnaW5zKCk7CiAgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5JbmZvOwotICAgIFBs
dWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBkYi0+cGx1Z2lucygpW2ldOworICAgIFBsdWdpblBh
Y2thZ2UqIHBhY2thZ2UgPSBkYi0+cGx1Z2lucygpW2ldOwogCiAgICAgaW5mby0+bmFtZSA9IHBh
Y2thZ2UtPm5hbWUoKTsKICAgICBpbmZvLT5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKQEAg
LTY1LDI1ICs2NiwyNSBAQCBQbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdp
CiAKIHVuc2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdAogewotICAg
IHJldHVybiBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCku
c2l6ZSgpOworICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5w
bHVnaW5zKCkuc2l6ZSgpOwogfQogCiAKIFN0cmluZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5h
bWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewotICAgIC8vIEZJWE1FIDU2
MjkxMzk6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBvbiBXaW5kb3dzLgorICAgIC8vIEZJWE1FIDU2
MjkxMzk6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAK
ICAgICAKIGJvb2wgUGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYgbWltZVR5cGUpIAogewotICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZVdpbjo6
aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJlZChtaW1lVHlwZSk7CisgICAg
cmV0dXJuIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdp
c3RlcmVkKG1pbWVUeXBlKTsKIH0KIAogdm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9w
ZW5QYWdlcykKIHsKLSAgICBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5y
ZWZyZXNoKCk7CisgICAgUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVz
aCgpOwogCiAgICAgaWYgKHJlbG9hZE9wZW5QYWdlcykgewogICAgICAgICAvLyBGSVhNRTogcmVs
b2FkIG9wZW4gcGFnZXMKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHJldmlzaW9u
IDI5NjI2KQkoZnJvbSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwOjI5
NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlIDxzaGx3YXBpLmg+
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisK
KyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNs
dWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGx1Z2luUGFja2FnZVdpbjo6flBsdWdpblBhY2thZ2VXaW4oKQor
eworICAgIEFTU0VSVCghbV9pc0xvYWRlZCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0VmVyc2lv
bkluZm8oY29uc3QgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSwgY29uc3QgU3RyaW5nJiBpbmZvKQor
eworICAgIExQVk9JRCBidWZmZXI7CisgICAgVUlOVCBidWZmZXJMZW5ndGg7CisgICAgU3RyaW5n
IHN1YkluZm8gPSAiXFxTdHJpbmdmaWxlSW5mb1xcMDQwOTA0RTRcXCIgKyBpbmZvOworCisgICAg
Ym9vbCByZXR2YWwgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEsIGNvbnN0X2Nhc3Q8
VUNoYXIqPihzdWJJbmZvLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZmZXIsICZidWZmZXJMZW5ndGgpOworICAg
IGlmICghcmV0dmFsIHx8IGJ1ZmZlckxlbmd0aCA9PSAwKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisKKyAgICAvLyBTdWJ0cmFjdCAxIGZyb20gdGhlIGxlbmd0aDsgd2UgZG9uJ3Qgd2FudCB0
aGUgdHJhaWxpbmcgMAorICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+
KGJ1ZmZlciksIGJ1ZmZlckxlbmd0aCAtIDEpOworfQorCitzdGF0aWMgVmVjdG9yPFN0cmluZz4g
c3BsaXRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIGNoYXIgZGVsaW1pdGVyLCBpbnQgcGFkVG8p
Cit7CisgICAgaW50IHBvcyA9IDA7CisgICAgaW50IG5ld1BvczsKKyAgICBWZWN0b3I8U3RyaW5n
PiByZXN1bHQ7CisgICAgRGVwcmVjYXRlZFN0cmluZyBkcyA9IHN0ci5kZXByZWNhdGVkU3RyaW5n
KCk7CisgICAgU3RyaW5nIHM7CisgICAgZG8geworCisgICAgICAgIG5ld1BvcyA9IGRzLmZpbmQo
ZGVsaW1pdGVyLCBwb3MpOworCisgICAgICAgIGlmIChuZXdQb3MgPT0gLTEpCisgICAgICAgICAg
ICBzID0gZHMubWlkKHBvcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHMgPSBkcy5taWQo
cG9zLCBuZXdQb3MgLSBwb3MpOworICAgICAgICAKKyAgICAgICAgaWYgKCFzLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocyk7CisKKyAgICAgICAgcG9zID0gbmV3UG9zICsg
MTsKKyAgICB9IHdoaWxlIChuZXdQb3MgIT0gLTEpOworCisgICAgd2hpbGUgKHBhZFRvICE9IC0x
ICYmIHN0YXRpY19jYXN0PGludD4ocmVzdWx0LnNpemUoKSkgPCBwYWRUbykKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgiIik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFBsdWdpblBh
Y2thZ2VXaW46OmZyZWVMaWJyYXJ5U29vbigpCit7CisgICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5
VGltZXIuaXNBY3RpdmUoKSk7CisgICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAgICBBU1NFUlQobV9s
b2FkQ291bnQgPT0gMCk7CisKKyAgICBtX2ZyZWVMaWJyYXJ5VGltZXIuc3RhcnRPbmVTaG90KDAp
OworfQorCit2b2lkIFBsdWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1l
cjxQbHVnaW5QYWNrYWdlV2luPiogLyp0aW1lciovKQoreworICAgIEFTU0VSVChtX21vZHVsZSk7
CisgICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOworCisgICAgOjpGcmVlTGlicmFyeShtX21v
ZHVsZSk7CisgICAgbV9tb2R1bGUgPSAwOworfQorCitQbHVnaW5QYWNrYWdlV2luOjpQbHVnaW5Q
YWNrYWdlV2luKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmll
ZCkKKyAgICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9tb2R1bGUoMCkKKyAgICAsIG1fbGFzdE1v
ZGlmaWVkKGxhc3RNb2RpZmllZCkKKyAgICAsIG1faXNMb2FkZWQoZmFsc2UpCisgICAgLCBtX2xv
YWRDb3VudCgwKQorICAgICwgbV9mcmVlTGlicmFyeVRpbWVyKHRoaXMsICZQbHVnaW5QYWNrYWdl
V2luOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQpCisgICAgLCBtX2ZpbGVWZXJzaW9uTFMoMCkKKyAg
ICAsIG1fZmlsZVZlcnNpb25NUygwKQoreworICAgIG1fZmlsZU5hbWUgPSBTdHJpbmcoUGF0aEZp
bmRGaWxlTmFtZShtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSkpOworICAg
IG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxlbmd0aCgpIC0gbV9maWxl
TmFtZS5sZW5ndGgoKSAtIDEpOworfQorCit2b2lkIFBsdWdpblBhY2thZ2VXaW46OnN0b3JlRmls
ZVZlcnNpb24oTFBWT0lEIHZlcnNpb25JbmZvRGF0YSkKK3sKKyAgICBWU19GSVhFREZJTEVJTkZP
KiBpbmZvOworICAgIFVJTlQgaW5mb1NpemU7CisgICAgaWYgKCFWZXJRdWVyeVZhbHVlKHZlcnNp
b25JbmZvRGF0YSwgVEVYVCgiXFwiKSwgKExQVk9JRCopICZpbmZvLCAmaW5mb1NpemUpIHx8IGlu
Zm9TaXplIDwgc2l6ZW9mKFZTX0ZJWEVERklMRUlORk8pKQorICAgICAgICByZXR1cm47CisgICAg
bV9maWxlVmVyc2lvbkxTID0gaW5mby0+ZHdGaWxlVmVyc2lvbkxTOworICAgIG1fZmlsZVZlcnNp
b25NUyA9IGluZm8tPmR3RmlsZVZlcnNpb25NUzsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlV2lu
Ojppc1BsdWdpbkJsYWNrbGlzdGVkKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgRFdPUkQgc2lsdmVy
bGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEID0gMHgwMDAxMDAwMDsKKyAgICBz
dGF0aWMgY29uc3QgRFdPUkQgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25MU0RX
T1JEID0gMHg1MUJFMDAwMDsKKworICAgIGlmIChuYW1lKCkgPT0gIlNpbHZlcmxpZ2h0IFBsdWct
SW4iKSB7CisgICAgICAgIC8vIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vNTU1NzM3OT4gQ3Jhc2gg
aW4gU2lsdmVybGlnaHQgd2hlbiBvcGVuaW5nIG1pY3Jvc29mdC5jb20uCisgICAgICAgIC8vIHRo
ZSBsYXRlc3QgMS4wIHZlcnNpb24gb2YgU2lsdmVybGlnaHQgZG9lcyBub3QgcmVwcm9kdWNlIHRo
aXMgY3Jhc2gsIHNvIGFsbG93IGl0CisgICAgICAgIC8vIGFuZCBhbnkgbmV3ZXIgdmVyc2lvbnMK
KyAgICAgICAgaWYgKG1fZmlsZVZlcnNpb25NUyA8IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWly
ZWRWZXJzaW9uTVNEV09SRCB8fAorICAgICAgICAgICAgKG1fZmlsZVZlcnNpb25NUyA9PSBzaWx2
ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgJiYgbV9maWxlVmVyc2lvbkxT
IDwgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25MU0RXT1JEKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAoZmlsZU5hbWUoKSA9PSAibnBtb3pheC5k
bGwiKQorICAgICAgICAvLyBCdWcgMTUyMTc6IE1vemlsbGEgQWN0aXZlWCBjb250cm9sIGNvbXBs
YWlucyBhYm91dCBtaXNzaW5nIHhwY29tX2NvcmUuZGxsCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBsdWdpblBhY2thZ2VXaW46OmZldGNoSW5m
bygpCit7CisgICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJvSGFuZGxlOworICAgIHZlcnNp
b25JbmZvU2l6ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLCAmemVyb0hhbmRsZSk7IAorCisgICAgaWYgKHZlcnNpb25JbmZv
U2l6ZSA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMUFZPSUQgdmVyc2lvbklu
Zm9EYXRhID0gZmFzdE1hbGxvYyh2ZXJzaW9uSW5mb1NpemUpOworCisgICAgaWYgKCFHZXRGaWxl
VmVyc2lvbkluZm9XKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2
ZXJzaW9uSW5mb1NpemUsIHZlcnNpb25JbmZvRGF0YSkpIHsKKyAgICAgICAgZmFzdEZyZWUodmVy
c2lvbkluZm9EYXRhKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1fbmFt
ZSA9IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIlByb2R1Y3ROYW1lIik7CisgICAg
bV9kZXNjcmlwdGlvbiA9IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIkZpbGVEZXNj
cmlwdGlvbiIpOworCisgICAgaWYgKG1fbmFtZS5pc051bGwoKSB8fCBtX2Rlc2NyaXB0aW9uLmlz
TnVsbCgpKSB7CisgICAgICAgIGZhc3RGcmVlKHZlcnNpb25JbmZvRGF0YSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdG9yZUZpbGVWZXJzaW9uKHZlcnNpb25JbmZvRGF0
YSk7CisKKyAgICBpZiAoaXNQbHVnaW5CbGFja2xpc3RlZCgpKSB7CisgICAgICAgIGZhc3RGcmVl
KHZlcnNpb25JbmZvRGF0YSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBW
ZWN0b3I8U3RyaW5nPiBtaW1lVHlwZXMgPSBzcGxpdFN0cmluZyhnZXRWZXJzaW9uSW5mbyh2ZXJz
aW9uSW5mb0RhdGEsICJNSU1FVHlwZSIpLCAnfCcsIC0xKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBm
aWxlRXh0ZW50cyA9IHNwbGl0U3RyaW5nKGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwg
IkZpbGVFeHRlbnRzIiksICd8JywgbWltZVR5cGVzLnNpemUoKSk7CisgICAgVmVjdG9yPFN0cmlu
Zz4gZGVzY3JpcHRpb25zID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9E
YXRhLCAiRmlsZU9wZW5OYW1lIiksICd8JywgbWltZVR5cGVzLnNpemUoKSk7CisKKyAgICBmYXN0
RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1p
bWVUeXBlcy5zaXplKCk7IGkrKykgeworICAgICAgICAvLyBHZXQgcmlkIG9mIHRoZSBleHRlbnNp
b24gbGlzdCBpbiB0aGUgZGVzY3JpcHRpb24gc3RyaW5nCisgICAgICAgIFN0cmluZyBkZXNjcmlw
dGlvbiA9IGRlc2NyaXB0aW9uc1tpXTsgICAgCisgICAgICAgIGludCBwb3MgPSBkZXNjcmlwdGlv
bi5maW5kKCIoKiIpOworICAgICAgICBpZiAocG9zICE9IC0xKSB7CisgICAgICAgICAgICAvLyBU
aGVyZSBtaWdodCBiZSBhIHNwYWNlIHRoYXQgd2UgbmVlZCB0byBnZXQgcmlkIG9mCisgICAgICAg
ICAgICBpZiAocG9zID4gMSAmJiBkZXNjcmlwdGlvbltwb3MgLSAxXSA9PSAnICcpCisgICAgICAg
ICAgICAgICAgcG9zLS07CisKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24u
bGVmdChwb3MpOworICAgICAgICB9CisKKyAgICAgICAgbWltZVR5cGVzW2ldID0gbWltZVR5cGVz
W2ldLmxvd2VyKCk7CisKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lVHlwZXNb
aV0sIHNwbGl0U3RyaW5nKGZpbGVFeHRlbnRzW2ldLCAnLCcsIC0xKSk7CisgICAgICAgIG1fbWlt
ZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lVHlwZXNbaV0sIGRlc2NyaXB0aW9uKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpsb2FkKCkKK3sK
KyAgICBpZiAobV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgQVNTRVJU
KG1fbW9kdWxlKTsKKyAgICAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0b3AoKTsKKyAgICB9IGVs
c2UgaWYgKG1faXNMb2FkZWQpIHsKKyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgV0NIQVIgY3VycmVudFBhdGhbTUFYX1BB
VEhdOworCisgICAgICAgIGlmICghOjpHZXRDdXJyZW50RGlyZWN0b3J5VyhNQVhfUEFUSCwgY3Vy
cmVudFBhdGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFN0cmluZyBw
YXRoID0gbV9wYXRoLnN1YnN0cmluZygwLCBtX3BhdGgucmV2ZXJzZUZpbmQoJ1xcJykpOworCisg
ICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhwYXRoLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8v
IExvYWQgdGhlIGxpYnJhcnkKKyAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5VyhtX3Bh
dGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CisKKyAgICAgICAgaWYgKCE6OlNl
dEN1cnJlbnREaXJlY3RvcnlXKGN1cnJlbnRQYXRoKSkgeworICAgICAgICAgICAgaWYgKG1fbW9k
dWxlKQorICAgICAgICAgICAgICAgIDo6RnJlZUxpYnJhcnkobV9tb2R1bGUpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX21vZHVsZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBO
UF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIgTlBfR2V0RW50cnlQb2ludHMgPSAwOworICAgIE5QX0lu
aXRpYWxpemVGdW5jUHRyIE5QX0luaXRpYWxpemUgPSAwOworICAgIE5QRXJyb3IgbnBFcnI7CisK
KyAgICBOUF9Jbml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKUdldFByb2NBZGRyZXNz
KG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6ZSIpOworICAgIE5QX0dldEVudHJ5UG9pbnRzID0gKE5Q
X0dldEVudHJ5UG9pbnRzRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0dldEVu
dHJ5UG9pbnRzIik7CisgICAgbV9OUFBfU2h1dGRvd24gPSAoTlBQX1NodXRkb3duUHJvY1B0cilH
ZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX1NodXRkb3duIik7CisKKyAgICBpZiAoIU5QX0lu
aXRpYWxpemUgfHwgIU5QX0dldEVudHJ5UG9pbnRzIHx8ICFtX05QUF9TaHV0ZG93bikKKyAgICAg
ICAgZ290byBhYm9ydDsKKyAgCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2Yo
bV9wbHVnaW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdp
bkZ1bmNzKTsKKworICAgIG5wRXJyID0gTlBfR2V0RW50cnlQb2ludHMoJm1fcGx1Z2luRnVuY3Mp
OworICAgIExPR19OUEVSUk9SKG5wRXJyKTsKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJS
T1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fYnJvd3NlckZ1bmNzLCAw
LCBzaXplb2YobV9icm93c2VyRnVuY3MpKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6
ZW9mIChtX2Jyb3dzZXJGdW5jcyk7CisgICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QX1ZF
UlNJT05fTUlOT1I7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7CisgICAgbV9icm93c2VyRnVu
Y3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7CisgICAgbV9icm93c2VyRnVuY3MubmV3
c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9X
cml0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJl
YW07CisgICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50OworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFs
bG9jID0gTlBOX01lbUFsbG9jOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVt
RnJlZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7CisgICAgbV9i
cm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFs
dWUgPSBOUE5fU2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBO
UE5fSW52YWxpZGF0ZVJlY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9
IE5QTl9JbnZhbGlkYXRlUmVnaW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0g
TlBOX0ZvcmNlUmVkcmF3OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0
SmF2YUVudjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVl
cjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQ
b3B1cHNFbmFibGVkU3RhdGU7CisgICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0
YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnJl
bGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7CisgICAgbV9icm93
c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5n
SWRlbnRpZmllcnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5f
R2V0SW50SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcg
PSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKKyAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlk
ZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5p
bnRmcm9taWRlbnRpZmllciA9IF9OUE5fSW50RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2Vy
RnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVu
Y3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3Mu
cmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5p
bnZva2UgPSBfTlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0g
X05QTl9JbnZva2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9F
dmFsdWF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVy
dHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5Owor
ICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAgIG1f
YnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93c2Vy
RnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgbV9icm93c2VyRnVu
Y3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxp
emUoJm1fYnJvd3NlckZ1bmNzKTsKKyAgICBMT0dfTlBFUlJPUihucEVycik7CisKKyAgICBpZiAo
bnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtX2xv
YWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworYWJvcnQ6CisgICAgdW5sb2FkV2l0aG91dFNo
dXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2VXaW46
OnVubG9hZCgpCit7CisgICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoLS1tX2xvYWRDb3VudCA+IDApCisgICAgICAgIHJldHVybjsKKworICAgIG1fTlBQX1No
dXRkb3duKCk7CisKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKK30KKwordm9pZCBQbHVn
aW5QYWNrYWdlV2luOjp1bmxvYWRXaXRob3V0U2h1dGRvd24oKQoreworICAgIGlmICghbV9pc0xv
YWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOwor
ICAgIEFTU0VSVChtX21vZHVsZSk7CisKKyAgICAvLyA8cmRhcjovLzU1MzA1MTk+OiBDcmFzaCB3
aGVuIGNsb3NpbmcgdGFiIHdpdGggcGRmIGZpbGUgKFJlYWRlciA3IG9ubHkpCisgICAgLy8gSWYg
dGhlIHBsdWdpbiBoYXMgc3ViY2xhc3NlZCBpdHMgcGFyZW50IHdpbmRvdywgYXMgd2l0aCBSZWFk
ZXIgNywgd2UgbWF5IGhhdmUKKyAgICAvLyBnb3R0ZW4gaGVyZSBieSB3YXkgb2YgdGhlIHBsdWdp
bidzIGludGVybmFsIHdpbmRvdyBwcm9jIGZvcndhcmRpbmcgYSBtZXNzYWdlIHRvIG91cgorICAg
IC8vIG9yaWdpbmFsIHdpbmRvdyBwcm9jLiBJZiB3ZSBmcmVlIHRoZSBwbHVnaW4gbGlicmFyeSBm
cm9tIGhlcmUsIHdlIHdpbGwganVtcCBiYWNrCisgICAgLy8gdG8gY29kZSB3ZSBqdXN0IGZyZWVk
IHdoZW4gd2UgcmV0dXJuLCBzbyBkZWxheSBjYWxsaW5nIEZyZWVMaWJyYXJ5IGF0IGxlYXN0IHVu
dGlsCisgICAgLy8gdGhlIG5leHQgbWVzc2FnZSBsb29wCisgICAgZnJlZUxpYnJhcnlTb29uKCk7
CisKKyAgICBtX2lzTG9hZGVkID0gZmFsc2U7Cit9CisKK1BsdWdpblBhY2thZ2VXaW4qIFBsdWdp
blBhY2thZ2VXaW46OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxF
VElNRSYgbGFzdE1vZGlmaWVkKQoreworICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBu
ZXcgUGx1Z2luUGFja2FnZVdpbihwYXRoLCBsYXN0TW9kaWZpZWQpOworCisgICAgaWYgKCFwYWNr
YWdlLT5mZXRjaEluZm8oKSkgeworICAgICAgICBkZWxldGUgcGFja2FnZTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIAorICAgIHJldHVybiBwYWNrYWdlOworfQorCit1bnNpZ25lZCBQ
bHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5zaWduZWQgaGFzaENvZGVz
WzNdID0geworICAgICAgICBtX2Rlc2NyaXB0aW9uLmltcGwoKS0+aGFzaCgpLAorICAgICAgICBt
X2xhc3RNb2RpZmllZC5kd0xvd0RhdGVUaW1lLAorICAgICAgICBtX2xhc3RNb2RpZmllZC5kd0hp
Z2hEYXRlVGltZQorICAgIH07CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2go
cmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIDMgKiBzaXplb2YodW5zaWduZWQp
IC8gc2l6ZW9mKFVDaGFyKSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZXF1YWwoY29u
c3QgUGx1Z2luUGFja2FnZVdpbiYgYSwgY29uc3QgUGx1Z2luUGFja2FnZVdpbiYgYikKK3sKKyAg
ICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbiAmJiAoQ29tcGFyZUZp
bGVUaW1lKCZhLm1fbGFzdE1vZGlmaWVkLCAmYi5tX2xhc3RNb2RpZmllZCkgPT0gMCk7Cit9CisK
K30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHJldmlzaW9uIDI5NjI2KQorKysg
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjMsMTAgKzI0LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpbmNsdWRlIDxzaGx3YXBp
Lmg+Ci0KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgi
CisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNs
dWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCkBAIC0zNSw1NSArMzQsMTIgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QbHVnaW5QYWNrYWdlV2luOjp+UGx1Z2luUGFja2FnZVdpbigpCitQbHVn
aW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpCiB7CiAgICAgQVNTRVJUKCFtX2lzTG9hZGVkKTsK
IH0KIAotc3RhdGljIFN0cmluZyBnZXRWZXJzaW9uSW5mbyhjb25zdCBMUFZPSUQgdmVyc2lvbklu
Zm9EYXRhLCBjb25zdCBTdHJpbmcmIGluZm8pCi17Ci0gICAgTFBWT0lEIGJ1ZmZlcjsKLSAgICBV
SU5UIGJ1ZmZlckxlbmd0aDsKLSAgICBTdHJpbmcgc3ViSW5mbyA9ICJcXFN0cmluZ2ZpbGVJbmZv
XFwwNDA5MDRFNFxcIiArIGluZm87Ci0KLSAgICBib29sIHJldHZhbCA9IFZlclF1ZXJ5VmFsdWVX
KHZlcnNpb25JbmZvRGF0YSwgY29uc3RfY2FzdDxVQ2hhcio+KHN1YkluZm8uY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JmJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCk7Ci0gICAgaWYgKCFyZXR2YWwgfHwgYnVmZmVyTGVuZ3Ro
ID09IDApCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8vIFN1YnRyYWN0IDEgZnJv
bSB0aGUgbGVuZ3RoOyB3ZSBkb24ndCB3YW50IHRoZSB0cmFpbGluZyAwCi0gICAgcmV0dXJuIFN0
cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFyKj4oYnVmZmVyKSwgYnVmZmVyTGVuZ3RoIC0gMSk7
Ci19Ci0KLXN0YXRpYyBWZWN0b3I8U3RyaW5nPiBzcGxpdFN0cmluZyhjb25zdCBTdHJpbmcmIHN0
ciwgY2hhciBkZWxpbWl0ZXIsIGludCBwYWRUbykKLXsKLSAgICBpbnQgcG9zID0gMDsKLSAgICBp
bnQgbmV3UG9zOwotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLSAgICBEZXByZWNhdGVkU3Ry
aW5nIGRzID0gc3RyLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICBTdHJpbmcgczsKLSAgICBkbyB7
Ci0KLSAgICAgICAgbmV3UG9zID0gZHMuZmluZChkZWxpbWl0ZXIsIHBvcyk7Ci0KLSAgICAgICAg
aWYgKG5ld1BvcyA9PSAtMSkKLSAgICAgICAgICAgIHMgPSBkcy5taWQocG9zKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcyA9IGRzLm1pZChwb3MsIG5ld1BvcyAtIHBvcyk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoIXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChz
KTsKLQotICAgICAgICBwb3MgPSBuZXdQb3MgKyAxOwotICAgIH0gd2hpbGUgKG5ld1BvcyAhPSAt
MSk7Ci0KLSAgICB3aGlsZSAocGFkVG8gIT0gLTEgJiYgc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQu
c2l6ZSgpKSA8IHBhZFRvKQotICAgICAgICByZXN1bHQuYXBwZW5kKCIiKTsKLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlTb29uKCkK
K3ZvaWQgUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlTb29uKCkKIHsKICAgICBBU1NFUlQoIW1f
ZnJlZUxpYnJhcnlUaW1lci5pc0FjdGl2ZSgpKTsKICAgICBBU1NFUlQobV9tb2R1bGUpOwpAQCAt
OTIsMjMwICs0OCwyOCBAQCB2b2lkIFBsdWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5U29vbigp
CiAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBQbHVn
aW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luUGFja2FnZVdp
bj4qIC8qdGltZXIqLykKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVk
KFRpbWVyPFBsdWdpblBhY2thZ2U+KiAvKnRpbWVyKi8pCiB7CiAgICAgQVNTRVJUKG1fbW9kdWxl
KTsKICAgICBBU1NFUlQobV9sb2FkQ291bnQgPT0gMCk7CiAKLSAgICA6OkZyZWVMaWJyYXJ5KG1f
bW9kdWxlKTsKKyAgICB1bmxvYWRNb2R1bGUobV9tb2R1bGUpOwogICAgIG1fbW9kdWxlID0gMDsK
IH0KIAotUGx1Z2luUGFja2FnZVdpbjo6UGx1Z2luUGFja2FnZVdpbihjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpCi0gICAgOiBtX3BhdGgocGF0aCkKK1Bs
dWdpblBhY2thZ2U6OlBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBQbGF0
Zm9ybUZpbGVUaW1lJiBsYXN0TW9kaWZpZWQpCisgICAgOiBtX2lzTG9hZGVkKGZhbHNlKQorICAg
ICwgbV9sb2FkQ291bnQoMCkKKyAgICAsIG1fcGF0aChwYXRoKQogICAgICwgbV9tb2R1bGUoMCkK
ICAgICAsIG1fbGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCkKLSAgICAsIG1faXNMb2FkZWQoZmFs
c2UpCi0gICAgLCBtX2xvYWRDb3VudCgwKQotICAgICwgbV9mcmVlTGlicmFyeVRpbWVyKHRoaXMs
ICZQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQpCi0gICAgLCBtX2ZpbGVW
ZXJzaW9uTFMoMCkKLSAgICAsIG1fZmlsZVZlcnNpb25NUygwKQorICAgICwgbV9mcmVlTGlicmFy
eVRpbWVyKHRoaXMsICZQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQpCiB7Ci0g
ICAgbV9maWxlTmFtZSA9IFN0cmluZyhQYXRoRmluZEZpbGVOYW1lKG1fcGF0aC5jaGFyYWN0ZXJz
V2l0aE51bGxUZXJtaW5hdGlvbigpKSk7CisgICAgbV9maWxlTmFtZSA9IHBhdGhHZXRGaWxlTmFt
ZShtX3BhdGgpOwogICAgIG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxl
bmd0aCgpIC0gbV9maWxlTmFtZS5sZW5ndGgoKSAtIDEpOwogfQogCi12b2lkIFBsdWdpblBhY2th
Z2VXaW46OnN0b3JlRmlsZVZlcnNpb24oTFBWT0lEIHZlcnNpb25JbmZvRGF0YSkKLXsKLSAgICBW
U19GSVhFREZJTEVJTkZPKiBpbmZvOwotICAgIFVJTlQgaW5mb1NpemU7Ci0gICAgaWYgKCFWZXJR
dWVyeVZhbHVlKHZlcnNpb25JbmZvRGF0YSwgVEVYVCgiXFwiKSwgKExQVk9JRCopICZpbmZvLCAm
aW5mb1NpemUpIHx8IGluZm9TaXplIDwgc2l6ZW9mKFZTX0ZJWEVERklMRUlORk8pKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9maWxlVmVyc2lvbkxTID0gaW5mby0+ZHdGaWxlVmVyc2lvbkxTOwot
ICAgIG1fZmlsZVZlcnNpb25NUyA9IGluZm8tPmR3RmlsZVZlcnNpb25NUzsKLX0KLQotYm9vbCBQ
bHVnaW5QYWNrYWdlV2luOjppc1BsdWdpbkJsYWNrbGlzdGVkKCkKLXsKLSAgICBzdGF0aWMgY29u
c3QgRFdPUkQgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEID0gMHgw
MDAxMDAwMDsKLSAgICBzdGF0aWMgY29uc3QgRFdPUkQgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1
aXJlZFZlcnNpb25MU0RXT1JEID0gMHg1MUJFMDAwMDsKLQotICAgIGlmIChuYW1lKCkgPT0gIlNp
bHZlcmxpZ2h0IFBsdWctSW4iKSB7Ci0gICAgICAgIC8vIHdvcmthcm91bmQgZm9yIDxyZGFyOi8v
NTU1NzM3OT4gQ3Jhc2ggaW4gU2lsdmVybGlnaHQgd2hlbiBvcGVuaW5nIG1pY3Jvc29mdC5jb20u
Ci0gICAgICAgIC8vIHRoZSBsYXRlc3QgMS4wIHZlcnNpb24gb2YgU2lsdmVybGlnaHQgZG9lcyBu
b3QgcmVwcm9kdWNlIHRoaXMgY3Jhc2gsIHNvIGFsbG93IGl0Ci0gICAgICAgIC8vIGFuZCBhbnkg
bmV3ZXIgdmVyc2lvbnMKLSAgICAgICAgaWYgKG1fZmlsZVZlcnNpb25NUyA8IHNpbHZlcmxpZ2h0
UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCB8fAotICAgICAgICAgICAgKG1fZmlsZVZl
cnNpb25NUyA9PSBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgJiYg
bV9maWxlVmVyc2lvbkxTIDwgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25MU0RX
T1JEKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoZmlsZU5hbWUo
KSA9PSAibnBtb3pheC5kbGwiKQotICAgICAgICAvLyBCdWcgMTUyMTc6IE1vemlsbGEgQWN0aXZl
WCBjb250cm9sIGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHhwY29tX2NvcmUuZGxsCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBsdWdpblBhY2th
Z2VXaW46OmZldGNoSW5mbygpCi17Ci0gICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJvSGFu
ZGxlOwotICAgIHZlcnNpb25JbmZvU2l6ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKG1fcGF0
aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAmemVyb0hhbmRsZSk7IAotCi0gICAg
aWYgKHZlcnNpb25JbmZvU2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBM
UFZPSUQgdmVyc2lvbkluZm9EYXRhID0gZmFzdE1hbGxvYyh2ZXJzaW9uSW5mb1NpemUpOwotCi0g
ICAgaWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpLCAwLCB2ZXJzaW9uSW5mb1NpemUsIHZlcnNpb25JbmZvRGF0YSkpIHsKLSAgICAg
ICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIG1fbmFtZSA9IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIlByb2R1
Y3ROYW1lIik7Ci0gICAgbV9kZXNjcmlwdGlvbiA9IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZv
RGF0YSwgIkZpbGVEZXNjcmlwdGlvbiIpOwotCi0gICAgaWYgKG1fbmFtZS5pc051bGwoKSB8fCBt
X2Rlc2NyaXB0aW9uLmlzTnVsbCgpKSB7Ci0gICAgICAgIGZhc3RGcmVlKHZlcnNpb25JbmZvRGF0
YSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzdG9yZUZpbGVWZXJzaW9u
KHZlcnNpb25JbmZvRGF0YSk7Ci0KLSAgICBpZiAoaXNQbHVnaW5CbGFja2xpc3RlZCgpKSB7Ci0g
ICAgICAgIGZhc3RGcmVlKHZlcnNpb25JbmZvRGF0YSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBtaW1lVHlwZXMgPSBzcGxpdFN0cmluZyhnZXRW
ZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJNSU1FVHlwZSIpLCAnfCcsIC0xKTsKLSAgICBW
ZWN0b3I8U3RyaW5nPiBmaWxlRXh0ZW50cyA9IHNwbGl0U3RyaW5nKGdldFZlcnNpb25JbmZvKHZl
cnNpb25JbmZvRGF0YSwgIkZpbGVFeHRlbnRzIiksICd8JywgbWltZVR5cGVzLnNpemUoKSk7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gZGVzY3JpcHRpb25zID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbklu
Zm8odmVyc2lvbkluZm9EYXRhLCAiRmlsZU9wZW5OYW1lIiksICd8JywgbWltZVR5cGVzLnNpemUo
KSk7Ci0KLSAgICBmYXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1pbWVUeXBlcy5zaXplKCk7IGkrKykgewotICAgICAgICAvLyBHZXQgcmlk
IG9mIHRoZSBleHRlbnNpb24gbGlzdCBpbiB0aGUgZGVzY3JpcHRpb24gc3RyaW5nCi0gICAgICAg
IFN0cmluZyBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uc1tpXTsgICAgCi0gICAgICAgIGludCBw
b3MgPSBkZXNjcmlwdGlvbi5maW5kKCIoKiIpOwotICAgICAgICBpZiAocG9zICE9IC0xKSB7Ci0g
ICAgICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBhIHNwYWNlIHRoYXQgd2UgbmVlZCB0byBnZXQg
cmlkIG9mCi0gICAgICAgICAgICBpZiAocG9zID4gMSAmJiBkZXNjcmlwdGlvbltwb3MgLSAxXSA9
PSAnICcpCi0gICAgICAgICAgICAgICAgcG9zLS07Ci0KLSAgICAgICAgICAgIGRlc2NyaXB0aW9u
ID0gZGVzY3JpcHRpb24ubGVmdChwb3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgbWltZVR5cGVz
W2ldID0gbWltZVR5cGVzW2ldLmxvd2VyKCk7Ci0KLSAgICAgICAgbV9taW1lVG9FeHRlbnNpb25z
LmFkZChtaW1lVHlwZXNbaV0sIHNwbGl0U3RyaW5nKGZpbGVFeHRlbnRzW2ldLCAnLCcsIC0xKSk7
Ci0gICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lVHlwZXNbaV0sIGRlc2NyaXB0
aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdl
V2luOjpsb2FkKCkKLXsKLSAgICBpZiAobV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpIHsK
LSAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0
b3AoKTsKLSAgICB9IGVsc2UgaWYgKG1faXNMb2FkZWQpIHsKLSAgICAgICAgbV9sb2FkQ291bnQr
KzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgV0NIQVIgY3Vy
cmVudFBhdGhbTUFYX1BBVEhdOwotCi0gICAgICAgIGlmICghOjpHZXRDdXJyZW50RGlyZWN0b3J5
VyhNQVhfUEFUSCwgY3VycmVudFBhdGgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIFN0cmluZyBwYXRoID0gbV9wYXRoLnN1YnN0cmluZygwLCBtX3BhdGgucmV2ZXJzZUZp
bmQoJ1xcJykpOwotCi0gICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhwYXRoLmNo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIC8vIExvYWQgdGhlIGxpYnJhcnkKLSAgICAgICAgbV9tb2R1bGUgPSA6Okxv
YWRMaWJyYXJ5VyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7Ci0KLSAg
ICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKGN1cnJlbnRQYXRoKSkgewotICAgICAg
ICAgICAgaWYgKG1fbW9kdWxlKQotICAgICAgICAgICAgICAgIDo6RnJlZUxpYnJhcnkobV9tb2R1
bGUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKCFtX21vZHVsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9pc0xvYWRlZCA9
IHRydWU7Ci0KLSAgICBOUF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIgTlBfR2V0RW50cnlQb2ludHMg
PSAwOwotICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIE5QX0luaXRpYWxpemUgPSAwOwotICAgIE5Q
RXJyb3IgbnBFcnI7Ci0KLSAgICBOUF9Jbml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRy
KUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6ZSIpOwotICAgIE5QX0dldEVu
dHJ5UG9pbnRzID0gKE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21v
ZHVsZSwgIk5QX0dldEVudHJ5UG9pbnRzIik7Ci0gICAgbV9OUFBfU2h1dGRvd24gPSAoTlBQX1No
dXRkb3duUHJvY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX1NodXRkb3duIik7Ci0K
LSAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIU5QX0dldEVudHJ5UG9pbnRzIHx8ICFtX05QUF9T
aHV0ZG93bikKLSAgICAgICAgZ290byBhYm9ydDsKLSAgCi0gICAgbWVtc2V0KCZtX3BsdWdpbkZ1
bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOwotICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9
IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKLQotICAgIG5wRXJyID0gTlBfR2V0RW50cnlQb2ludHMo
Jm1fcGx1Z2luRnVuY3MpOwotICAgIExPR19OUEVSUk9SKG5wRXJyKTsKLSAgICBpZiAobnBFcnIg
IT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSAgICBtZW1zZXQoJm1f
YnJvd3NlckZ1bmNzLCAwLCBzaXplb2YobV9icm93c2VyRnVuY3MpKTsKLSAgICBtX2Jyb3dzZXJG
dW5jcy5zaXplID0gc2l6ZW9mIChtX2Jyb3dzZXJGdW5jcyk7Ci0gICAgbV9icm93c2VyRnVuY3Mu
dmVyc2lvbiA9IE5QX1ZFUlNJT05fTUlOT1I7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0g
TlBOX0dldFVSTDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7Ci0g
ICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7Ci0gICAgbV9i
cm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKLSAgICBtX2Jyb3dzZXJGdW5j
cy53cml0ZSA9IE5QTl9Xcml0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0g
TlBOX0Rlc3Ryb3lTdHJlYW07Ci0gICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1
czsKLSAgICBtX2Jyb3dzZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50OwotICAgIG1fYnJv
d3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01lbUFsbG9jOwotICAgIG1fYnJvd3NlckZ1bmNzLm1l
bWZyZWUgPSBOUE5fTWVtRnJlZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9N
ZW1GbHVzaDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBs
dWdpbnM7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlm
eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7
Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWU7Ci0gICAgbV9icm93
c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52
YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52
YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRlUmVnaW9uOwotICAgIG1fYnJvd3NlckZ1bmNz
LmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldEph
dmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9
IE5QTl9HZXRKYXZhUGVlcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0
YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MucG9w
cG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKLQotICAgIG1f
YnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFs
dWU7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3Ry
aW5nSWRlbnRpZmllcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9
IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRl
bnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRpZmllcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pZGVu
dGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKLSAgICBtX2Jyb3dzZXJG
dW5jcy51dGY4ZnJvbWlkZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5pbnRmcm9taWRlbnRpZmllciA9IF9OUE5fSW50RnJvbUlkZW50aWZpZXI7
Ci0gICAgbV9icm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7Ci0g
ICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7Ci0gICAg
bV9icm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBfTlBOX0ludm9rZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5p
bnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0OwotICAgIG1fYnJvd3NlckZ1bmNzLmV2
YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9
IF9OUE5fR2V0UHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBO
X1NldFByb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9S
ZW1vdmVQcm9wZXJ0eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFz
TWV0aG9kOwotICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7
Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247Ci0g
ICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7Ci0KLSAgICBucEVy
ciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzKTsKLSAgICBMT0dfTlBFUlJPUihucEVy
cik7Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIGdvdG8gYWJv
cnQ7Ci0KLSAgICBtX2xvYWRDb3VudCsrOwotICAgIHJldHVybiB0cnVlOwotYWJvcnQ6Ci0gICAg
dW5sb2FkV2l0aG91dFNodXRkb3duKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFBs
dWdpblBhY2thZ2VXaW46OnVubG9hZCgpCit2b2lkIFBsdWdpblBhY2thZ2U6OnVubG9hZCgpCiB7
CiAgICAgaWYgKCFtX2lzTG9hZGVkKQogICAgICAgICByZXR1cm47CkBAIC0zMjgsNyArODIsNyBA
QCB2b2lkIFBsdWdpblBhY2thZ2VXaW46OnVubG9hZCgpCiAgICAgdW5sb2FkV2l0aG91dFNodXRk
b3duKCk7CiB9CiAKLXZvaWQgUGx1Z2luUGFja2FnZVdpbjo6dW5sb2FkV2l0aG91dFNodXRkb3du
KCkKK3ZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKIHsKICAgICBp
ZiAoIW1faXNMb2FkZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTM0Nyw5ICsxMDEsOSBAQCB2b2lk
IFBsdWdpblBhY2thZ2VXaW46OnVubG9hZFdpdGhvdXRTaHV0CiAgICAgbV9pc0xvYWRlZCA9IGZh
bHNlOwogfQogCi1QbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNr
YWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCkKK1Bs
dWdpblBhY2thZ2UqIFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBQbGF0Zm9ybUZpbGVUaW1lJiBsYXN0TW9kaWZpZWQpCiB7Ci0gICAgUGx1Z2lu
UGFja2FnZVdpbiogcGFja2FnZSA9IG5ldyBQbHVnaW5QYWNrYWdlV2luKHBhdGgsIGxhc3RNb2Rp
ZmllZCk7CisgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IG5ldyBQbHVnaW5QYWNrYWdlKHBh
dGgsIGxhc3RNb2RpZmllZCk7CiAKICAgICBpZiAoIXBhY2thZ2UtPmZldGNoSW5mbygpKSB7CiAg
ICAgICAgIGRlbGV0ZSBwYWNrYWdlOwpAQCAtMzU5LDIwICsxMTMsNCBAQCBQbHVnaW5QYWNrYWdl
V2luKiBQbHVnaW5QYWNrYWdlV2luOjpjcmVhCiAgICAgcmV0dXJuIHBhY2thZ2U7CiB9CiAKLXVu
c2lnbmVkIFBsdWdpblBhY2thZ2VXaW46Omhhc2goKSBjb25zdAoteyAKLSAgICB1bnNpZ25lZCBo
YXNoQ29kZXNbM10gPSB7Ci0gICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCi0g
ICAgICAgIG1fbGFzdE1vZGlmaWVkLmR3TG93RGF0ZVRpbWUsCi0gICAgICAgIG1fbGFzdE1vZGlm
aWVkLmR3SGlnaERhdGVUaW1lCi0gICAgfTsKLQotICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21w
dXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMyAqIHNpemVvZih1
bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpl
cXVhbChjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBi
KQotewotICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uICYmIChD
b21wYXJlRmlsZVRpbWUoJmEubV9sYXN0TW9kaWZpZWQsICZiLm1fbGFzdE1vZGlmaWVkKSA9PSAw
KTsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCShyZXZpc2lvbiAyOTYyNikJ
KGZyb20gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmg6Mjk2MjYpCisrKyBX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luUGFja2FnZVdpbl9ICisjZGVm
aW5lIFBsdWdpblBhY2thZ2VXaW5fSAorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRl
IDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVj
dG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOworCisgICAgY2xhc3MgUGx1Z2luUGFj
a2FnZVdpbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2VXaW4+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIH5QbHVnaW5QYWNrYWdlV2luKCk7CisgICAgICAgIHN0YXRpYyBQbHVnaW5Q
YWNrYWdlV2luKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJ
TUUmIGxhc3RNb2RpZmllZCk7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdCB7
IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CisgICAgICAgIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsZU5hbWU7IH0KKyAgICAgICAgU3RyaW5nIHBhcmVudERpcmVjdG9yeSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RGlyZWN0b3J5OyB9CisKKyAgICAgICAgY29uc3QgTUlN
RVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBt
X21pbWVUb0Rlc2NyaXB0aW9uczsgfQorICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFw
JiBtaW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9
CisKKyAgICAgICAgdW5zaWduZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0OworICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQ
bHVnaW5QYWNrYWdlV2luJiBiKTsKKworICAgICAgICBib29sIGxvYWQoKTsKKyAgICAgICAgdm9p
ZCB1bmxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKworICAg
ICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZt
X3BsdWdpbkZ1bmNzOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luUGFja2FnZVdpbihj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpOworICAgICAg
ICBib29sIGZldGNoSW5mbygpOworICAgICAgICB2b2lkIHN0b3JlRmlsZVZlcnNpb24oTFBWT0lE
IHZlcnNpb25JbmZvRGF0YSk7CisgICAgICAgIGJvb2wgaXNQbHVnaW5CbGFja2xpc3RlZCgpOwor
CisgICAgICAgIGJvb2wgbV9pc0xvYWRlZDsKKyAgICAgICAgaW50IG1fbG9hZENvdW50OworCisg
ICAgICAgIERXT1JEIG1fZmlsZVZlcnNpb25NUzsKKyAgICAgICAgRFdPUkQgbV9maWxlVmVyc2lv
bkxTOworCisgICAgICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9uOworICAgICAgICBTdHJpbmcgbV9w
YXRoOworICAgICAgICBTdHJpbmcgbV9maWxlTmFtZTsKKyAgICAgICAgU3RyaW5nIG1fbmFtZTsK
KyAgICAgICAgU3RyaW5nIG1fcGFyZW50RGlyZWN0b3J5OworCisgICAgICAgIE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcCBtX21pbWVUb0Rlc2NyaXB0aW9uczsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9u
c01hcCBtX21pbWVUb0V4dGVuc2lvbnM7CisKKyAgICAgICAgSE1PRFVMRSBtX21vZHVsZTsKKyAg
ICAgICAgRklMRVRJTUUgbV9sYXN0TW9kaWZpZWQ7CisKKyAgICAgICAgTlBQX1NodXRkb3duUHJv
Y1B0ciBtX05QUF9TaHV0ZG93bjsKKyAgICAgICAgTlBQbHVnaW5GdW5jcyBtX3BsdWdpbkZ1bmNz
OworICAgICAgICBOUE5ldHNjYXBlRnVuY3MgbV9icm93c2VyRnVuY3M7CisKKyAgICAgICAgdm9p
ZCBmcmVlTGlicmFyeVNvb24oKTsKKyAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVyRmlyZWQo
VGltZXI8UGx1Z2luUGFja2FnZVdpbj4qKTsKKyAgICAgICAgVGltZXI8UGx1Z2luUGFja2FnZVdp
bj4gbV9mcmVlTGlicmFyeVRpbWVyOworICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1Z2luUGFja2Fn
ZVdpbkhhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihrZXkpLT5oYXNoKCk7
IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2th
Z2VXaW4+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CisKKyAgICAgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGludCBiKSB7IHJldHVybiBlcXVhbChyZWludGVy
cHJldF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5Q
YWNrYWdlV2luKj4oYikpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0
cjxQbHVnaW5QYWNrYWdlV2luPiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+JiBi
KSB7IHJldHVybiBQbHVnaW5QYWNrYWdlV2luOjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9
CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVk
ID0gZmFsc2U7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisvLyBGSVhNRTog
VGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIFdURiwgd2hlcmUgaXQncyBpbXBvc3Np
YmxlIHRvIHVzZSBhIGN1c3RvbSBIYXNoIGZ1bmN0aW9uIGJ1dCB3aXRoIGRlZmF1bHQgdHJhaXRz
LgorLy8gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBhIFN0b3JhZ2VU
cmFpdHMgc3BlY2lhbGl6YXRpb24uCituYW1lc3BhY2UgV1RGIHsKKyAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBIYXNoS2V5U3RvcmFnZVRyYWl0czxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luSGFzaCwg
SGFzaFRyYWl0czxSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbj4gPiA+IHsKKyAgICAg
ICAgdHlwZWRlZiBJbnRUeXBlczxzaXplb2YoUmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VX
aW4+KT46OlNpZ25lZFR5cGUgSW50VHlwZTsKKyAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVn
aW5QYWNrYWdlV2luSGFzaCBIYXNoOworICAgICAgICB0eXBlZGVmIEhhc2hUcmFpdHM8SW50VHlw
ZT4gVHJhaXRzOworICAgIH07Cit9CisKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luUGFja2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNr
YWdlLmgJKHJldmlzaW9uIDI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTIgKzIzLDExIEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCi0jaWZuZGVmIFBsdWdpblBhY2thZ2VXaW5fSAotI2RlZmluZSBQbHVnaW5QYWNrYWdlV2lu
X0gKLQotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgorI2lmbmRl
ZiBQbHVnaW5QYWNrYWdlX0gKKyNkZWZpbmUgUGx1Z2luUGFja2FnZV9ICiAKKyNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5j
bHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC00MCwx
MCArMzksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKIAotICAgIGNsYXNz
IFBsdWdpblBhY2thZ2VXaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlV2luPiB7
CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2th
Z2U+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIH5QbHVnaW5QYWNrYWdlV2luKCk7Ci0gICAgICAg
IHN0YXRpYyBQbHVnaW5QYWNrYWdlV2luKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7CisgICAgICAgIH5QbHVnaW5QYWNrYWdl
KCk7CisgICAgICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgUGxhdGZvcm1GaWxlVGltZSYgbGFzdE1vZGlmaWVkKTsKICAgICAg
ICAgCiAgICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAg
ICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0K
QEAgLTUzLDggKzUyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBNSU1F
VG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
bWltZVRvRGVzY3JpcHRpb25zOyB9CiAgICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAm
IG1pbWVUb0V4dGVuc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0K
IAotICAgICAgICB1bnNpZ25lZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3Q7Ci0gICAg
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0IFBs
dWdpblBhY2thZ2VXaW4mIGIpOworICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1
cm4gMDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBh
LCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAgIGJv
b2wgbG9hZCgpOwogICAgICAgICB2b2lkIHVubG9hZCgpOwpAQCAtNjIsMTcgKzYxLDEyIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5G
dW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9CiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgUGx1Z2luUGFja2FnZVdpbihjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1F
JiBsYXN0TW9kaWZpZWQpOworICAgICAgICBQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgUGxhdGZvcm1GaWxlVGltZSYgbGFzdE1vZGlmaWVkKTsKICAgICAgICAgYm9vbCBm
ZXRjaEluZm8oKTsKLSAgICAgICAgdm9pZCBzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9u
SW5mb0RhdGEpOwotICAgICAgICBib29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKTsKIAogICAgICAg
ICBib29sIG1faXNMb2FkZWQ7CiAgICAgICAgIGludCBtX2xvYWRDb3VudDsKIAotICAgICAgICBE
V09SRCBtX2ZpbGVWZXJzaW9uTVM7Ci0gICAgICAgIERXT1JEIG1fZmlsZVZlcnNpb25MUzsKLQog
ICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKICAgICAgICAgU3RyaW5nIG1fcGF0aDsKICAg
ICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CkBAIC04MiwyNCArNzYsMjQgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXAgbV9taW1lVG9EZXNjcmlwdGlv
bnM7CiAgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXAgbV9taW1lVG9FeHRlbnNpb25zOwogCi0g
ICAgICAgIEhNT0RVTEUgbV9tb2R1bGU7Ci0gICAgICAgIEZJTEVUSU1FIG1fbGFzdE1vZGlmaWVk
OworICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtX21vZHVsZTsKKyAgICAgICAgUGxhdGZvcm1GaWxl
VGltZSBtX2xhc3RNb2RpZmllZDsKIAogICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQ
X1NodXRkb3duOwogICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CiAgICAgICAg
IE5QTmV0c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKIAogICAgICAgICB2b2lkIGZyZWVMaWJy
YXJ5U29vbigpOwotICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVn
aW5QYWNrYWdlV2luPiopOwotICAgICAgICBUaW1lcjxQbHVnaW5QYWNrYWdlV2luPiBtX2ZyZWVM
aWJyYXJ5VGltZXI7CisgICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBs
dWdpblBhY2thZ2U+Kik7CisgICAgICAgIFRpbWVyPFBsdWdpblBhY2thZ2U+IG1fZnJlZUxpYnJh
cnlUaW1lcjsKICAgICB9OwogCi0gICAgc3RydWN0IFBsdWdpblBhY2thZ2VXaW5IYXNoIHsKLSAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlV2luKj4oa2V5KS0+aGFzaCgpOyB9Ci0gICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYga2V5KSB7
IHJldHVybiBrZXktPmhhc2goKTsgfQorICAgIHN0cnVjdCBQbHVnaW5QYWNrYWdlSGFzaCB7Cisg
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IGludCBrZXkpIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGtleSktPmhhc2goKTsgfQorICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGtleSkgeyByZXR1
cm4ga2V5LT5oYXNoKCk7IH0KIAotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBpbnQg
YSwgY29uc3QgaW50IGIpIHsgcmV0dXJuIGVxdWFsKHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFj
a2FnZVdpbio+KGEpLCByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihiKSk7IH0K
LSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+
JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4mIGIpIHsgcmV0dXJuIFBsdWdpblBh
Y2thZ2VXaW46OmVxdWFsKCphLmdldCgpLCAqYi5nZXQoKSk7IH0KKyAgICAgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGludCBiKSB7IHJldHVybiBlcXVhbChyZWludGVy
cHJldF9jYXN0PFBsdWdpblBhY2thZ2UqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNr
YWdlKj4oYikpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVn
aW5QYWNrYWdlPiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBiKSB7IHJldHVybiBQ
bHVnaW5QYWNrYWdlOjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9CiAgICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiAgICAg
fTsKIApAQCAtMTA4LDkgKzEwMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZJWE1FOiBU
aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gV1RGLCB3aGVyZSBpdCdzIGltcG9zc2li
bGUgdG8gdXNlIGEgY3VzdG9tIEhhc2ggZnVuY3Rpb24gYnV0IHdpdGggZGVmYXVsdCB0cmFpdHMu
CiAvLyBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZG8gdGhpcyB3aXRob3V0IGEgU3RvcmFnZVRy
YWl0cyBzcGVjaWFsaXphdGlvbi4KIG5hbWVzcGFjZSBXVEYgewotICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IEhhc2hLZXlTdG9yYWdlVHJhaXRzPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW5IYXNoLCBI
YXNoVHJhaXRzPFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPiA+ID4gewotICAgICAg
ICB0eXBlZGVmIEludFR5cGVzPHNpemVvZihSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdp
bj4pPjo6U2lnbmVkVHlwZSBJbnRUeXBlOwotICAgICAgICB0eXBlZGVmIFdlYkNvcmU6OlBsdWdp
blBhY2thZ2VXaW5IYXNoIEhhc2g7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtleVN0b3Jh
Z2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZUhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdl
YkNvcmU6OlBsdWdpblBhY2thZ2U+ID4gPiB7CisgICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6
ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlPik+OjpTaWduZWRUeXBlIEludFR5cGU7
CisgICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1Z2luUGFja2FnZUhhc2ggSGFzaDsKICAgICAg
ICAgdHlwZWRlZiBIYXNoVHJhaXRzPEludFR5cGU+IFRyYWl0czsKICAgICB9OwogfQpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnSW5JbmZvU3RvcmVXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z0luSW5mb1N0b3JlV2luLmNwcAkocmV2aXNpb24gMjk2
MzYpCisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdJbkluZm9TdG9yZVdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0
YWJhc2VXaW4uaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZv
Rm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKSAKLXsgCi0gICAgUGx1Z2luRGF0YWJhc2VXaW4g
KmRiID0gUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKTsKLSAgICBQbHVnaW5J
bmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGFja2Fn
ZSA9IGRiLT5wbHVnaW5zKClbaV07Ci0KLSAgICBpbmZvLT5uYW1lID0gcGFja2FnZS0+bmFtZSgp
OwotICAgIGluZm8tPmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOwotICAgIGluZm8tPmRlc2Mg
PSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOwotCi0gICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25z
TWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsK
LSAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rl
c2NyaXB0aW9ucy5lbmQoKTsKLSAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIE1pbWVDbGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKLSAg
ICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOwotICAgICAgICAKLSAgICAgICAgbWltZS0+
dHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgbWltZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7Ci0gICAg
ICAgIG1pbWUtPnBsdWdpbiA9IGluZm87Ci0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5z
aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlwZSk7Ci0gICAg
ICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7
IGkrKykgewotICAgICAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgICAgIG1pbWUtPnN1
ZmZpeGVzICs9ICIsIjsKLQotICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9u
c1tpXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBpbmZvOwotfQotCi11bnNpZ25l
ZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gUGx1
Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKLX0K
LQotCi1TdHJpbmcgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICAvLyBGSVhNRSA1NjI5MTM5OiBJbXBsZW1lbnQgdGhp
cyBtZXRob2Qgb24gV2luZG93cy4KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLSAgICAKLWJv
b2wgUGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYgbWltZVR5cGUpIAotewotICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVk
UGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJlZChtaW1lVHlwZSk7Ci19Ci0KLXZvaWQgcmVm
cmVzaFBsdWdpbnMoYm9vbCByZWxvYWRPcGVuUGFnZXMpCi17Ci0gICAgUGx1Z2luRGF0YWJhc2VX
aW46Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOwotCi0gICAgaWYgKHJlbG9hZE9wZW5Q
YWdlcykgewotICAgICAgICAvLyBGSVhNRTogcmVsb2FkIG9wZW4gcGFnZXMKLSAgICB9Ci19Ci0K
LX0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCShyZXZp
c2lvbiAyOTYzNikKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw5ICsyNCw5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0
YWJhc2UuaCIKIAotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKyNpbmNsdWRlICJQbHVn
aW5QYWNrYWdlLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlld1dpbi5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgpAQCAtMzQsOTEgKzM0LDYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QbHVnaW5EYXRhYmFzZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46Omluc3Rh
bGxlZFBsdWdpbnMoKQotewotICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZVdpbiogcGx1Z2lucyA9
IDA7Ci0gICAgCi0gICAgaWYgKCFwbHVnaW5zKSB7Ci0gICAgICAgIHBsdWdpbnMgPSBuZXcgUGx1
Z2luRGF0YWJhc2VXaW47Ci0gICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBsdWdpbkRh
dGFiYXNlV2luOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSk7Ci0gICAgICAgIHBsdWdpbnMtPnJlZnJl
c2goKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGx1Z2luczsKLX0KLQotdm9pZCBQbHVnaW5EYXRh
YmFzZVdpbjo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBt
X3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsKLSAgICByZWZyZXNoKCk7Ci19Ci0KLWJvb2wgUGx1
Z2luRGF0YWJhc2VXaW46OnJlZnJlc2goKQoteyAgIAotICAgIFBsdWdpblNldCBuZXdQbHVnaW5z
OwotCi0gICAgYm9vbCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7Ci0KLSAgICAvLyBDcmVhdGUg
YSBuZXcgc2V0IG9mIHBsdWdpbnMKLSAgICBuZXdQbHVnaW5zID0gZ2V0UGx1Z2luc0luUGF0aHMo
KTsKLQotICAgIGlmICghbV9wbHVnaW5zLmlzRW1wdHkoKSkgewotICAgICAgICBtX3JlZ2lzdGVy
ZWRNSU1FVHlwZXMuY2xlYXIoKTsKLQotICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2Fk
ID0gbV9wbHVnaW5zOwotCi0gICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bmV3UGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBw
bHVnaW5zVG9VbmxvYWQucmVtb3ZlKCppdCk7Ci0KLSAgICAgICAgZW5kID0gbV9wbHVnaW5zLmVu
ZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdp
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgbmV3UGx1Z2lucy5yZW1v
dmUoKml0KTsKLQotICAgICAgICAvLyBVbmxvYWQgcGx1Z2lucwotICAgICAgICBlbmQgPSBwbHVn
aW5zVG9VbmxvYWQuZW5kKCk7Ci0gICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBtX3BsdWdpbnMucmVtb3ZlKCppdCk7Ci0KLSAgICAgICAgLy8gQWRkIG5ldyBwbHVnaW5z
Ci0gICAgICAgIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7Ci0gICAgICAgIGZvciAoUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOwotCi0gICAgICAgIHBsdWdpblNldENo
YW5nZWQgPSAhcGx1Z2luc1RvVW5sb2FkLmlzRW1wdHkoKSB8fCAhbmV3UGx1Z2lucy5pc0VtcHR5
KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9wbHVnaW5zID0gbmV3UGx1Z2luczsKLSAgICAg
ICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOwotICAg
ICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKLQot
ICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIW5ld1BsdWdpbnMuaXNFbXB0eSgpOwotICAgIH0K
LQotICAgIC8vIFJlZ2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcwotICAgIFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgLy8gR2V0IE1JTUUgdHlwZXMKLSAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVu
ZCgpOwotICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
bWFwX2l0ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7IG1hcF9pdCAhPSBt
YXBfZW5kOyArK21hcF9pdCkgewotICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFk
ZChtYXBfaXQtPmZpcnN0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW5T
ZXRDaGFuZ2VkOwotfQotCi1WZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IFBsdWdpbkRhdGFiYXNl
V2luOjpwbHVnaW5zKCkgY29uc3QKLXsKLSAgICBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IHJl
c3VsdDsKLQotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVu
ZCgpOwotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoKCppdCkuZ2V0
KCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGFkZFBs
dWdpbnNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMpCiB7CiAg
ICAgSEtFWSBrZXk7CkBAIC0xNTAsNyArNjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkUGx1
Z2luc0Zyb21SZWdpc3RyCiAgICAgICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0V4KHBhdGhTdHIs
IEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmF0dHJpYnV0ZXMpID09IDApCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gUGx1Z2luUGFj
a2FnZVdpbjo6Y3JlYXRlUGFja2FnZShTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBzaXpl
b2YoV0NIQVIpIC0gMSksIGF0dHJpYnV0ZXMuZnRMYXN0V3JpdGVUaW1lKTsKKyAgICAgICAgUGx1
Z2luUGFja2FnZSogcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoU3RyaW5n
KHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBhdHRyaWJ1dGVzLmZ0
TGFzdFdyaXRlVGltZSk7CiAKICAgICAgICAgaWYgKHBhY2thZ2UpCiAgICAgICAgICAgICBwbHVn
aW5zLmFkZChwYWNrYWdlKTsKQEAgLTE1OSw3ICs3NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRQbHVnaW5zRnJvbVJlZ2lzdHIKICAgICBSZWdDbG9zZUtleShrZXkpOwogfQogCi1QbHVnaW5T
ZXQgUGx1Z2luRGF0YWJhc2VXaW46OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QKK1BsdWdpblNl
dCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0LgogICAgIEhhc2hTZXQ8
U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CkBAIC0xNjgsOCArODMsOCBAQCBQbHVnaW5TZXQgUGx1
Z2luRGF0YWJhc2VXaW46OmdldFBsdWdpbnNJCiAgICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9I
QU5ETEVfVkFMVUU7CiAgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7CiAKLSAgICBQ
bHVnaW5QYWNrYWdlV2luKiBvbGRXTVBQbHVnaW4gPSAwOwotICAgIFBsdWdpblBhY2thZ2VXaW4q
IG5ld1dNUFBsdWdpbiA9IDA7CisgICAgUGx1Z2luUGFja2FnZSogb2xkV01QUGx1Z2luID0gMDsK
KyAgICBQbHVnaW5QYWNrYWdlKiBuZXdXTVBQbHVnaW4gPSAwOwogCiAgICAgVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7CiAgICAgZm9yIChW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtMTkzLDcgKzEwOCw3IEBAIFBsdWdpblNldCBQbHVnaW5E
YXRhYmFzZVdpbjo6Z2V0UGx1Z2luc0kKICAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVz
LmFkZChmdWxsUGF0aCkuc2Vjb25kKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKLSAgICAgICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5Q
YWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3Jp
dGVUaW1lKTsKKyAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpblBhY2thZ2UgPSBQbHVn
aW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3Jp
dGVUaW1lKTsKIAogICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKICAgICAgICAgICAg
ICAgICBwbHVnaW5zLmFkZChwbHVnaW5QYWNrYWdlKTsKQEAgLTQxOSw3ICszMzQsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpblBhCiAgICAgcGF0aHMuYXBwZW5kKG1h
Y3JvbWVkaWFEaXJlY3RvcnlTdHIpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFz
ZVdpbjo6ZGVmYXVsdFBsdWdpblBhdGhzKCkKK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNl
OjpkZWZhdWx0UGx1Z2luUGF0aHMoKQogewogICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwogICAg
IFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKQEAgLTQzNSwxMDYgKzM1MCw0
IEBAIFZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlV2luOjpkZWZhdWwKICAgICByZXR1cm4g
cGF0aHM7CiB9CiAKLWJvb2wgUGx1Z2luRGF0YWJhc2VXaW46OmlzTUlNRVR5cGVSZWdpc3RlcmVk
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250
YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIE5vIHBsdWdpbiB3
YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWlu
Ci0gICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5z
KG1pbWVUeXBlKSk7Ci19Ci0KLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpw
bHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIGlmIChtaW1l
VHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5nIGtleSA9IG1p
bWVUeXBlLmxvd2VyKCk7Ci0gICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgp
OwotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IDA7Ci0gICAgUGx1Z2luU2V0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0KLSAgICBmb3IgKFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIGlmICgoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkg
ewotICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAgICAgICAvLyBwcmVm
ZXIgcGx1Z2lucyBpbiBvdXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5Ci0gICAgICAgICAgICBpZiAo
cGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSA9PSBvdXJQYXRoKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpbjsKLX0KLQotU3RyaW5n
IFBsdWdpbkRhdGFiYXNlV2luOjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4
dGVuc2lvbikgY29uc3QKLXsKLSAgICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3BsdWdpbnMuZW5kKCk7Ci0gICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgp
OwotICAgIFN0cmluZyBtaW1lVHlwZTsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSAw
OwotCi0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7
Ci0KLSAgICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1l
X2l0ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVf
ZW5kOyArK21pbWVfaXQpIHsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRl
bnNpb25zID0gbWltZV9pdC0+c2Vjb25kOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkgewotICAgICAgICAgICAg
ICAgICAgICBtaW1lVHlwZSA9IG1pbWVfaXQtPmZpcnN0OwotICAgICAgICAgICAgICAgICAgICBw
bHVnaW4gPSAoKml0KS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gcHJlZmVyIHBsdWdp
bnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICBpZiAo
cGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSA9PSBvdXJQYXRoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVUeXBlOwotfQotCi1QbHVnaW5QYWNrYWdlV2luKiBQ
bHVnaW5EYXRhYmFzZVdpbjo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWlt
ZVR5cGUpCi17ICAgCi0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gcGx1Z2luRm9yTUlN
RVR5cGUobWltZVR5cGUpOwotICAgIFN0cmluZyBmaWxlbmFtZSA9IHVybC5zdHJpbmcoKTsKLSAg
ICAKLSAgICBpZiAoIXBsdWdpbikgewotICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwubGFz
dFBhdGhDb21wb25lbnQoKTsKLSAgICAgICAgaWYgKCFmaWxlbmFtZS5lbmRzV2l0aCgiLyIpKSB7
Ci0gICAgICAgICAgICBpbnQgZXh0ZW5zaW9uUG9zID0gZmlsZW5hbWUucmV2ZXJzZUZpbmQoJy4n
KTsKLSAgICAgICAgICAgIGlmIChleHRlbnNpb25Qb3MgIT0gLTEpIHsKLSAgICAgICAgICAgICAg
ICBTdHJpbmcgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGV4dGVuc2lvblBvcyArIDEp
OwotCi0gICAgICAgICAgICAgICAgbWltZVR5cGUgPSBNSU1FVHlwZUZvckV4dGVuc2lvbihleHRl
bnNpb24pOwotICAgICAgICAgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVU
eXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZJWE1FOiBp
ZiBubyBwbHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IFdpbmRvd3MgZm9yIHRoZSBtaW1lIHR5
cGUgCi0gICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0ZW5zaW9uLgotCi0gICAgcmV0dXJu
IHBsdWdpbjsKLX0KLQotUGx1Z2luVmlld1dpbiogUGx1Z2luRGF0YWJhc2VXaW46OmNyZWF0ZVBs
dWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQotewotICAgIC8vIGlmIHdlIGZhaWwgdG8gZmluZCBh
IHBsdWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZpbmRQbHVnaW4gd2lsbCBzZWFyY2ggZm9yCi0g
ICAgLy8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGFuZCB1cGRhdGUgdGhlIE1JTUUg
dHlwZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5nCi0gICAgU3RyaW5nIG1pbWVUeXBlQ29weSA9
IG1pbWVUeXBlOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJs
LCBtaW1lVHlwZUNvcHkpOwotICAgIAotICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSBy
ZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCi0gICAgaWYgKCFwbHVn
aW4gJiYgcmVmcmVzaCgpKSB7Ci0gICAgICAgIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOwotICAg
ICAgICBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKLSAgICB9Ci0gICAg
ICAgIAotICAgIHJldHVybiBuZXcgUGx1Z2luVmlld1dpbihwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1
Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZUNvcHks
IGxvYWRNYW51YWxseSk7Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
RGF0YWJhc2VXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRh
dGFiYXNlV2luLmgJKHJldmlzaW9uIDI5NjM2KQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVn
aW5EYXRhYmFzZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBQbHVnaW5EYXRhYmFzZVdpbl9ICi0jZGVmaW5lIFBsdWdpbkRhdGFi
YXNlV2luX0gKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNr
YWdlV2luLmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0gICAgY2xhc3MgRWxlbWVudDsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBJbnRTaXpl
OwotICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgUGx1Z2luUGFja2FnZVdpbjsKLSAgICBjbGFz
cyBQbHVnaW5WaWV3V2luOwotCi0gICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNr
YWdlV2luPiwgUGx1Z2luUGFja2FnZVdpbkhhc2g+IFBsdWdpblNldDsKLSAgCi0gICAgY2xhc3Mg
UGx1Z2luRGF0YWJhc2VXaW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBsdWdpbkRh
dGFiYXNlV2luKiBpbnN0YWxsZWRQbHVnaW5zKCk7Ci0gICAgICAgIFBsdWdpblZpZXdXaW4qIGNy
ZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1O
YW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7Ci0KLSAgICAgICAgYm9vbCByZWZyZXNoKCk7Ci0g
ICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gcGx1Z2lucygpIGNvbnN0OwotICAgICAg
ICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAg
ICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKLSAgICBwcml2YXRl
OgotICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRo
cykgeyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KLSAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdp
bnNJblBhdGhzKCkgY29uc3Q7Ci0KLSAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogZmluZFBsdWdp
bihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICBQbHVnaW5QYWNr
YWdlV2luKiBwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAg
ICAgU3RyaW5nIE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBj
b25zdDsKLQotICAgICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZGVmYXVsdFBsdWdpblBhdGhz
KCk7Ci0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gbV9wbHVnaW5QYXRoczsKLSAgICAgICAgSGFz
aFNldDxTdHJpbmc+IG1fcmVnaXN0ZXJlZE1JTUVUeXBlczsKLSAgICAgICAgUGx1Z2luU2V0IG1f
cGx1Z2luczsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRl
eDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCShyZXZpc2lvbiAyOTYz
NikKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxzaGx3YXBpLmg+CiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZS5oIgogCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJEZXByZWNhdGVk
U3RyaW5nLmgiCkBAIC0zNSwxMSArMzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBs
dWdpblBhY2thZ2VXaW46On5QbHVnaW5QYWNrYWdlV2luKCkKLXsKLSAgICBBU1NFUlQoIW1faXNM
b2FkZWQpOwotfQotCiBzdGF0aWMgU3RyaW5nIGdldFZlcnNpb25JbmZvKGNvbnN0IExQVk9JRCB2
ZXJzaW9uSW5mb0RhdGEsIGNvbnN0IFN0cmluZyYgaW5mbykKIHsKICAgICBMUFZPSUQgYnVmZmVy
OwpAQCAtODMsMzkgKzc4LDEwIEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBzcGxpdFN0cmluZyhj
b25zdCAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBsdWdpblBhY2thZ2VXaW46OmZy
ZWVMaWJyYXJ5U29vbigpCi17Ci0gICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3Rp
dmUoKSk7Ci0gICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICBBU1NFUlQobV9sb2FkQ291bnQgPT0g
MCk7CitzdGF0aWMgRFdPUkQgbV9maWxlVmVyc2lvbkxTID0gMDsKK3N0YXRpYyBEV09SRCBtX2Zp
bGVWZXJzaW9uTVMgPSAwOwogCi0gICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGlt
ZXI8UGx1Z2luUGFja2FnZVdpbj4qIC8qdGltZXIqLykKLXsKLSAgICBBU1NFUlQobV9tb2R1bGUp
OwotICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsKLQotICAgIDo6RnJlZUxpYnJhcnkobV9t
b2R1bGUpOwotICAgIG1fbW9kdWxlID0gMDsKLX0KLQotUGx1Z2luUGFja2FnZVdpbjo6UGx1Z2lu
UGFja2FnZVdpbihjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZp
ZWQpCi0gICAgOiBtX3BhdGgocGF0aCkKLSAgICAsIG1fbW9kdWxlKDApCi0gICAgLCBtX2xhc3RN
b2RpZmllZChsYXN0TW9kaWZpZWQpCi0gICAgLCBtX2lzTG9hZGVkKGZhbHNlKQotICAgICwgbV9s
b2FkQ291bnQoMCkKLSAgICAsIG1fZnJlZUxpYnJhcnlUaW1lcih0aGlzLCAmUGx1Z2luUGFja2Fn
ZVdpbjo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKQotICAgICwgbV9maWxlVmVyc2lvbkxTKDApCi0g
ICAgLCBtX2ZpbGVWZXJzaW9uTVMoMCkKLXsKLSAgICBtX2ZpbGVOYW1lID0gU3RyaW5nKFBhdGhG
aW5kRmlsZU5hbWUobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpKTsKLSAg
ICBtX3BhcmVudERpcmVjdG9yeSA9IG1fcGF0aC5sZWZ0KG1fcGF0aC5sZW5ndGgoKSAtIG1fZmls
ZU5hbWUubGVuZ3RoKCkgLSAxKTsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpzdG9yZUZp
bGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpCitzdGF0aWMgdm9pZCBzdG9yZUZpbGVW
ZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpCiB7CiAgICAgVlNfRklYRURGSUxFSU5GTyog
aW5mbzsKICAgICBVSU5UIGluZm9TaXplOwpAQCAtMTI1LDcgKzkxLDcgQEAgdm9pZCBQbHVnaW5Q
YWNrYWdlV2luOjpzdG9yZUZpbGVWZXJzaW9uKAogICAgIG1fZmlsZVZlcnNpb25NUyA9IGluZm8t
PmR3RmlsZVZlcnNpb25NUzsKIH0KIAotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjppc1BsdWdpbkJs
YWNrbGlzdGVkKCkKK3N0YXRpYyBib29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKQogewogICAgIHN0
YXRpYyBjb25zdCBEV09SRCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdP
UkQgPSAweDAwMDEwMDAwOwogICAgIHN0YXRpYyBjb25zdCBEV09SRCBzaWx2ZXJsaWdodFBsdWdp
bk1pblJlcXVpcmVkVmVyc2lvbkxTRFdPUkQgPSAweDUxQkUwMDAwOwpAQCAtMTQ0LDcgKzExMCw3
IEBAIGJvb2wgUGx1Z2luUGFja2FnZVdpbjo6aXNQbHVnaW5CbGFja2xpc3QKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZmV0Y2hJbmZvKCkKK2Jvb2wgUGx1
Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKIHsKICAgICBEV09SRCB2ZXJzaW9uSW5mb1NpemUsIHpl
cm9IYW5kbGU7CiAgICAgdmVyc2lvbkluZm9TaXplID0gR2V0RmlsZVZlcnNpb25JbmZvU2l6ZVco
bV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZ6ZXJvSGFuZGxlKTsgCkBA
IC0yMDEsNyArMTY3LDcgQEAgYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpmZXRjaEluZm8oKQogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFBsdWdpblBhY2thZ2VXaW46OmxvYWQoKQorYm9vbCBQ
bHVnaW5QYWNrYWdlOjpsb2FkKCkKIHsKICAgICBpZiAobV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0
aXZlKCkpIHsKICAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsKQEAgLTMxNSw1MSArMjgxLDcgQEAg
YWJvcnQ6CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFBsdWdpblBhY2thZ2VXaW46OnVu
bG9hZCgpCi17Ci0gICAgaWYgKCFtX2lzTG9hZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoLS1tX2xvYWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fTlBQX1NodXRk
b3duKCk7Ci0KLSAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKLX0KLQotdm9pZCBQbHVnaW5Q
YWNrYWdlV2luOjp1bmxvYWRXaXRob3V0U2h1dGRvd24oKQotewotICAgIGlmICghbV9pc0xvYWRl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOwotICAg
IEFTU0VSVChtX21vZHVsZSk7Ci0KLSAgICAvLyA8cmRhcjovLzU1MzA1MTk+OiBDcmFzaCB3aGVu
IGNsb3NpbmcgdGFiIHdpdGggcGRmIGZpbGUgKFJlYWRlciA3IG9ubHkpCi0gICAgLy8gSWYgdGhl
IHBsdWdpbiBoYXMgc3ViY2xhc3NlZCBpdHMgcGFyZW50IHdpbmRvdywgYXMgd2l0aCBSZWFkZXIg
Nywgd2UgbWF5IGhhdmUKLSAgICAvLyBnb3R0ZW4gaGVyZSBieSB3YXkgb2YgdGhlIHBsdWdpbidz
IGludGVybmFsIHdpbmRvdyBwcm9jIGZvcndhcmRpbmcgYSBtZXNzYWdlIHRvIG91cgotICAgIC8v
IG9yaWdpbmFsIHdpbmRvdyBwcm9jLiBJZiB3ZSBmcmVlIHRoZSBwbHVnaW4gbGlicmFyeSBmcm9t
IGhlcmUsIHdlIHdpbGwganVtcCBiYWNrCi0gICAgLy8gdG8gY29kZSB3ZSBqdXN0IGZyZWVkIHdo
ZW4gd2UgcmV0dXJuLCBzbyBkZWxheSBjYWxsaW5nIEZyZWVMaWJyYXJ5IGF0IGxlYXN0IHVudGls
Ci0gICAgLy8gdGhlIG5leHQgbWVzc2FnZSBsb29wCi0gICAgZnJlZUxpYnJhcnlTb29uKCk7Ci0K
LSAgICBtX2lzTG9hZGVkID0gZmFsc2U7Ci19Ci0KLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpblBh
Y2thZ2VXaW46OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElN
RSYgbGFzdE1vZGlmaWVkKQotewotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBuZXcg
UGx1Z2luUGFja2FnZVdpbihwYXRoLCBsYXN0TW9kaWZpZWQpOwotCi0gICAgaWYgKCFwYWNrYWdl
LT5mZXRjaEluZm8oKSkgewotICAgICAgICBkZWxldGUgcGFja2FnZTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwYWNrYWdlOwotfQotCi11bnNpZ25lZCBQbHVn
aW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3QKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2go
KSBjb25zdAogeyAKICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbM10gPSB7CiAgICAgICAgIG1fZGVz
Y3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCkBAIC0zNzAsNyArMjkyLDcgQEAgdW5zaWduZWQgUGx1
Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1
dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCAzICogc2l6ZW9mKHVu
c2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOwogfQogCi1ib29sIFBsdWdpblBhY2thZ2VXaW46OmVx
dWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGIp
Citib29sIFBsdWdpblBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0
IFBsdWdpblBhY2thZ2UmIGIpCiB7CiAgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1f
ZGVzY3JpcHRpb24gJiYgKENvbXBhcmVGaWxlVGltZSgmYS5tX2xhc3RNb2RpZmllZCwgJmIubV9s
YXN0TW9kaWZpZWQpID09IDApOwogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5Q
YWNrYWdlV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNr
YWdlV2luLmgJKHJldmlzaW9uIDI5NjM2KQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5Q
YWNrYWdlV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmbmRlZiBQbHVnaW5QYWNrYWdlV2luX0gKLSNkZWZpbmUgUGx1Z2luUGFja2FnZVdp
bl9ICi0KLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotI2lu
Y2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+IE1JTUVU
b0V4dGVuc2lvbnNNYXA7Ci0KLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdlV2luIDogcHVibGljIFJl
ZkNvdW50ZWQ8UGx1Z2luUGFja2FnZVdpbj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgflBsdWdp
blBhY2thZ2VXaW4oKTsKLSAgICAgICAgc3RhdGljIFBsdWdpblBhY2thZ2VXaW4qIGNyZWF0ZVBh
Y2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKTsK
LSAgICAgICAgCi0gICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
Ci0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRp
b247IH0KLSAgICAgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFt
ZTsgfQotICAgICAgICBTdHJpbmcgcGFyZW50RGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9w
YXJlbnREaXJlY3Rvcnk7IH0KLQotICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAm
IG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRGVzY3JpcHRpb25z
OyB9Ci0gICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1pbWVUb0V4dGVuc2lvbnMo
KSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KLQotICAgICAgICB1bnNpZ25l
ZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3Q7Ci0gICAgICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGIp
OwotCi0gICAgICAgIGJvb2wgbG9hZCgpOwotICAgICAgICB2b2lkIHVubG9hZCgpOwotICAgICAg
ICB2b2lkIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotCi0gICAgICAgIGNvbnN0IE5QUGx1Z2lu
RnVuY3MqIHBsdWdpbkZ1bmNzKCkgY29uc3QgeyByZXR1cm4gJm1fcGx1Z2luRnVuY3M7IH0KLSAg
ICBwcml2YXRlOgotICAgICAgICBQbHVnaW5QYWNrYWdlV2luKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7Ci0gICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7
Ci0gICAgICAgIHZvaWQgc3RvcmVGaWxlVmVyc2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKTsK
LSAgICAgICAgYm9vbCBpc1BsdWdpbkJsYWNrbGlzdGVkKCk7Ci0KLSAgICAgICAgYm9vbCBtX2lz
TG9hZGVkOwotICAgICAgICBpbnQgbV9sb2FkQ291bnQ7Ci0KLSAgICAgICAgRFdPUkQgbV9maWxl
VmVyc2lvbk1TOwotICAgICAgICBEV09SRCBtX2ZpbGVWZXJzaW9uTFM7Ci0KLSAgICAgICAgU3Ry
aW5nIG1fZGVzY3JpcHRpb247Ci0gICAgICAgIFN0cmluZyBtX3BhdGg7Ci0gICAgICAgIFN0cmlu
ZyBtX2ZpbGVOYW1lOwotICAgICAgICBTdHJpbmcgbV9uYW1lOwotICAgICAgICBTdHJpbmcgbV9w
YXJlbnREaXJlY3Rvcnk7Ci0KLSAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRv
RGVzY3JpcHRpb25zOwotICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5z
aW9uczsKLQotICAgICAgICBITU9EVUxFIG1fbW9kdWxlOwotICAgICAgICBGSUxFVElNRSBtX2xh
c3RNb2RpZmllZDsKLQotICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQX1NodXRkb3du
OwotICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7Ci0gICAgICAgIE5QTmV0c2Nh
cGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKLQotICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5U29vbigp
OwotICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdl
V2luPiopOwotICAgICAgICBUaW1lcjxQbHVnaW5QYWNrYWdlV2luPiBtX2ZyZWVMaWJyYXJ5VGlt
ZXI7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQbHVnaW5QYWNrYWdlV2luSGFzaCB7Ci0gICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IGludCBrZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGtleSktPmhhc2goKTsgfQotICAgICAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4mIGtleSkgeyByZXR1
cm4ga2V5LT5oYXNoKCk7IH0KLQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBpbnQg
YSwgY29uc3QgaW50IGIpIHsgcmV0dXJuIGVxdWFsKHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFj
a2FnZVdpbio+KGEpLCByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihiKSk7IH0K
LSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+
JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4mIGIpIHsgcmV0dXJuIFBsdWdpblBh
Y2thZ2VXaW46OmVxdWFsKCphLmdldCgpLCAqYi5nZXQoKSk7IH0KLSAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKLSAgICB9Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLS8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3Vu
ZCBmb3IgYSBidWcgaW4gV1RGLCB3aGVyZSBpdCdzIGltcG9zc2libGUgdG8gdXNlIGEgY3VzdG9t
IEhhc2ggZnVuY3Rpb24gYnV0IHdpdGggZGVmYXVsdCB0cmFpdHMuCi0vLyBJdCBzaG91bGQgYmUg
cG9zc2libGUgdG8gZG8gdGhpcyB3aXRob3V0IGEgU3RvcmFnZVRyYWl0cyBzcGVjaWFsaXphdGlv
bi4KLW5hbWVzcGFjZSBXVEYgewotICAgIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hLZXlTdG9yYWdl
VHJhaXRzPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW5IYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPiA+ID4gewotICAgICAgICB0eXBlZGVmIEludFR5cGVz
PHNpemVvZihSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbj4pPjo6U2lnbmVkVHlwZSBJ
bnRUeXBlOwotICAgICAgICB0eXBlZGVmIFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW5IYXNoIEhh
c2g7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0czxJbnRUeXBlPiBUcmFpdHM7Ci0gICAgfTsK
LX0KLQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAko
cmV2aXNpb24gMjk2MzYpCisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjY0LDQgKzE2NjQsMjAgQEAgYm9vbCBQbHVnaW5WaWV3V2lu
Ojppc0NhbGxpbmdQbHVnaW4oKQogICAgIHJldHVybiBzX2NhbGxpbmdQbHVnaW4gPiAwOwogfQog
CitQbHVnaW5WaWV3V2luKiBQbHVnaW5WaWV3V2luOjpjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBw
YXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSkKK3sKKyAgICAvLyBpZiB3ZSBmYWlsIHRvIGZpbmQgYSBwbHVnaW4gZm9yIHRoaXMg
TUlNRSB0eXBlLCBmaW5kUGx1Z2luIHdpbGwgc2VhcmNoIGZvcgorICAgIC8vIGEgcGx1Z2luIGJ5
IHRoZSBmaWxlIGV4dGVuc2lvbiBhbmQgdXBkYXRlIHRoZSBNSU1FIHR5cGUsIHNvIHBhc3MgYSBt
dXRhYmxlIFN0cmluZworICAgIFN0cmluZyBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICBQ
bHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygp
LT5maW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKKyAgICAKKyAgICAvLyBObyBwbHVnaW4g
d2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2Fp
bgorICAgIGlmICghcGx1Z2luICYmIHJlZnJlc2goKSkgeworICAgICAgICBtaW1lVHlwZUNvcHkg
PSBtaW1lVHlwZTsKKyAgICAgICAgcGx1Z2luID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBs
dWdpbnMoKS0+ZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7CisgICAgfQorICAgICAgICAK
KyAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdXaW4ocGFyZW50RnJhbWUsIHNpemUsIHBsdWdpbiwg
ZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGVDb3B5LCBsb2Fk
TWFudWFsbHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvd2luL1BsdWdpblZpZXdXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpblZpZXdXaW4uaAkocmV2aXNpb24gMjk2MzYpCisrKyBXZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpblZpZXdXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTW91c2VFdmVudDsKICAgICBjbGFzcyBLVVJMOwog
ICAgIGNsYXNzIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW47Ci0gICAgY2xhc3MgUGx1Z2luUGFj
a2FnZVdpbjsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlOwogICAgIGNsYXNzIFBsdWdpblJlcXVl
c3RXaW47CiAgICAgY2xhc3MgUGx1Z2luU3RyZWFtOwogICAgIGNsYXNzIFJlc291cmNlRXJyb3I7
CkBAIC04NiwxMCArODYsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGZyaWVuZCBzdGF0
aWMgTFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0s
IExQQVJBTSk7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpblZpZXdXaW4oRnJhbWUqIHBh
cmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luLCBFbGVt
ZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wgbG9hZE1hbnVhbGx5KTsKKyAgICAgICAgUGx1Z2luVmlld1dpbiogUGx1Z2luVmlld1dpbjo6
Y3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUs
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworCisgICAgICAgIFBsdWdpblZpZXdX
aW4oRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZSogcGx1
Z2luLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKICAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlld1dp
bigpOwogCi0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fcGx1Z2luLmdldCgpOyB9CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9CiAgICAgICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KIAogICAgICAgICB2b2lkIHNldE5QV2luZG93UmVjdChj
b25zdCBJbnRSZWN0Jik7CkBAIC0xNTYsNyArMTU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBOUEVycm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJvb2wgc2VuZE5v
dGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7CiAgICAgICAgIE5QRXJyb3IgaGFuZGxlUG9z
dChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3Qg
Y2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNh
dGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOwogICAgICAgICB2b2lkIHNldENhbGxpbmdQbHVnaW4o
Ym9vbCkgY29uc3Q7Ci0gICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiBtX3BsdWdpbjsK
KyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IG1fcGx1Z2luOwogICAgICAgICBFbGVtZW50
KiBtX2VsZW1lbnQ7CiAgICAgICAgIEZyYW1lKiBtX3BhcmVudEZyYW1lOwogICAgICAgICBib29s
IG1faXNTdGFydGVkOwo=
</data>
<flag name="review"
          id="8108"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18604</attachid>
            <date>2008-01-22 13:17:48 -0800</date>
            <delta_ts>2008-01-23 08:43:26 -0800</delta_ts>
            <desc>Updated patch to fix issues</desc>
            <filename>webkit-more-shared-plugin-api.patch</filename>
            <type>text/plain</type>
            <size>124925</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTcyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMDgtMDEtMjIgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBTaGFyZWQgY2xhc3NlcyBmb3IgUGx1Z2luRGF0YWJhc2UgYW5kIFBsdWdpblBhY2thZ2UK
KyAgICAgICAgU2hhcmVkIGltcGxlbWVudGF0aW9uIG9mIFBsdWdpbkluZm9TdG9yZSBBUEkKKyAg
ICAgICAgQWRkIGlzUHJlZmVycmVkUGx1Z2luUGF0aCgpIG1ldGhvZCBmb3IgYSBwcmVmZXJyZWQg
cGx1Zy1pbiBkaXJlY3RvcnkKKyAgICAgICAgQWRkIHRoZSBuZXcgc2hhcmVkIGNsYXNzIGltcGxl
bWVudGF0aW9ucyB0byBhdXRvdG9vbHMgYW5kIHFtYWtlIGJ1aWxkcworICAgICAgICBNb3ZlIHRo
ZSBjcmVhdGVQbHVnaW5WaWV3IEFQSSB0byBQbHVnaW5WaWV3V2luLCB0byBhdm9pZCBhCisgICAg
ICAgIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2l0aCBQbHVnaW5EYXRhYmFzZQorICAgICAgICBVc2Ug
c3RhdGljIGdsb2JhbHMgZm9yIHRoZSBtX2ZpbGVWZXJzaW9ue01TLExTfSB2YXJpYWJsZXMgb24g
V2luMzIKKyAgICAgICAgTWFrZSBzdG9yZUZpbGVWZXJzaW9uIGFuZCBpc1BsdWdpbkJsYWNrbGlz
dGVkIHN0YXRpYyBpbnRlcm5hbCBDIG1ldGhvZHMKKyAgICAgICAgRGVmaW5lIFBsYXRmb3JtRmls
ZVRpbWUgYW5kIFBsYXRmb3JtTW9kdWxlIHR5cGVzCisgICAgICAgIEltcGxlbWVudCBwYXRoR2V0
RmlsZU5hbWUgZm9yIFdpbjMyIGFuZCBHVEsrCisgICAgICAgIEltcGxlbWVudCB1bmxvYWRNb2R1
bGUgZm9yIFdpbjMyIGFuZCBHVEsrCisgICAgICAgIEFkZCBub3RJbXBsZW1lbnRlZCgpcyBmb3Ig
cGF0aEdldEZpbGVOYW1lIGFuZCB1bmxvYWRNb2R1bGUgb24gUXQKKyAgICAgICAgVXBkYXRlIHRo
ZSBXaW4zMiB2Y3Byb2ogZm9yIHRoZSBwbHVnLWluIEFQSSBjaGFuZ2VzCisgICAgICAgIEFkZCB0
ZW1wb3Jhcnkgc3R1YnMgZm9yIFBsdWdpbkRhdGFiYXNlIGFuZCBQbHVnaW5QYWNrYWdlIG1ldGhv
ZHMsCisgICAgICAgIG9uIEdUSysgYW5kIFF0CisgICAgICAgIFJlbW92ZSB0ZW1wb3Jhcnkgc3R1
YnMgZm9yIFBsdWdJbkluZm9TdG9yZSBvbiBHVEsrIGFuZCBRdAorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9GaWxl
U3lzdGVtUXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5j
cHA6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgICogcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5oOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luSW5mb1N0b3Jl
LmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAgICAgICAqIHBs
dWdpbnMvUGx1Z2luUGFja2FnZS5oOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdJbkluZm9T
dG9yZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3Bw
OgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmg6CisgICAgICAgICog
cGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy93aW4v
UGx1Z2luUGFja2FnZVdpbi5oOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uaDoKKwogMjAwOC0wMS0y
MiAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEhUTUxGcmFt
ZU93bmVyRWxlbWVudDo6c2Nyb2xsaW5nTW9kZQpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAyOTcyNCkK
KysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTg0NSw2ICs4NDUs
OSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vVGltZXIuY3BwIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9XaWRnZXQuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIFwK
KwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblBhY2thZ2UuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBc
CiAJV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5k
ZXJpbmcvYmlkaS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyOTcyNCkKKysrIFdlYkNvcmUvV2ViQ29y
ZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTc3OSw2ICs3NzksOSBAQCBTT1VSQ0VTICs9IFwKICAg
ICBwbGF0Zm9ybS9UaW1lci5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNw
cCBcCiAgICAgcGxhdGZvcm0vV2lkZ2V0LmNwcCBcCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhYmFz
ZS5jcHAgXAorICAgIHBsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCisgICAgcGx1Z2lucy9Q
bHVnaW5QYWNrYWdlLmNwcCBcCiAgICAgcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKICAgICBy
ZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAgICAgcmVuZGVyaW5nL2JpZGkuY3BwIFwK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMjk3MjQp
CisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC03OTI5LDEwICs3OTI5LDMwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuY3BwIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQ
bHVnaW5EYXRhYmFzZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIg0KIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5JbmZvU3Rv
cmUuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGx1Z2luc1xQbHVnaW5QYWNrYWdlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2FnZS5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1
Z2luc1xQbHVnaW5TdHJlYW0uY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTc5NTIsMjIg
Kzc5NzIsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbkRhdGFiYXNlV2luLmgiDQotCQkJCQk+DQot
CQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1x3
aW5cUGx1Z0luSW5mb1N0b3JlV2luLmNwcCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8
RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5QYWNrYWdlV2lu
LmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmgiDQotCQkJCQk+DQotCQkJCTwv
RmlsZT4NCi0JCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1x3aW5cUGx1
Z2luVmlld1dpbi5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL0ZpbGVTeXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVT
eXN0ZW0uaAkocmV2aXNpb24gMjk3MjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0u
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTAgQEAKICNpZm5kZWYgRmlsZVN5c3RlbV9o
CiAjZGVmaW5lIEZpbGVTeXN0ZW1faAogCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGdt
b2R1bGUuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKIHR5cGVkZWYg
Y29uc3Qgc3RydWN0IF9fQ0ZEYXRhKiBDRkRhdGFSZWY7CkBAIC00MSw5ICs0NSwxNyBAQCBjbGFz
cyBTdHJpbmc7CiAKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIEhBTkRMRSBQbGF0Zm9ybUZp
bGVIYW5kbGU7Cit0eXBlZGVmIEZJTEVUSU1FIFBsYXRmb3JtRmlsZVRpbWU7Cit0eXBlZGVmIEhN
T0RVTEUgUGxhdGZvcm1Nb2R1bGU7CiBjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUgaW52YWxpZFBs
YXRmb3JtRmlsZUhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogI2Vsc2UKIHR5cGVkZWYg
aW50IFBsYXRmb3JtRmlsZUhhbmRsZTsKK3R5cGVkZWYgdGltZV90IFBsYXRmb3JtRmlsZVRpbWU7
CisjaWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBHTW9kdWxlKiBQbGF0Zm9ybU1vZHVsZTsKKyNl
bHNlCit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtTW9kdWxlOworI2VuZGlmCiBjb25zdCBQbGF0Zm9y
bUZpbGVIYW5kbGUgaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IC0xOwogI2VuZGlmCiAKQEAg
LTU0LDYgKzY2LDcgQEAgYm9vbCBmaWxlU2l6ZShjb25zdCBTdHJpbmcmLCBsb25nIGxvbmcmIAog
U3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFN0cmluZyYgY29tcG9uZW50KTsKIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmlu
ZyYgcGF0aCk7CiBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKTsKK1N0cmluZyBwYXRoR2V0Rmls
ZU5hbWUoY29uc3QgU3RyaW5nJik7CiAKIENTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGNvbnN0IFN0cmluZyYpOwogCkBAIC02NCw2ICs3Nyw5IEBAIENTdHJpbmcgb3BlblRlbXBvcmFy
eUZpbGUoY29uc3QgY2hhciogcHIKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYp
OwogaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCk7CiAKKy8qIE1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBsb2FkYWJsZSBtb2R1
bGVzICovCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSk7CisKICNpZiBQTEFURk9S
TShXSU4pCiBTdHJpbmcgbG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCk7CiBTdHJp
bmcgcm9hbWluZ1VzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCShyZXZpc2lvbiAyOTcyNCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiAr
MTA2LDIwIEBAIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGEKICAgICBy
ZXR1cm4gcmVzdWx0ID09IDA7CiB9CiAKK1N0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCit7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZ19nZXRfaG9tZV9kaXIoKSk7Cit9CisKK1N0cmlu
ZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoTmFtZSkKK3sKKyAgICBjaGFyKiBi
YXNlTmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUocGF0aE5hbWUudXRmOCgpLmRhdGEoKSk7Cisg
ICAgU3RyaW5nIGZpbGVOYW1lID0gU3RyaW5nOjpmcm9tVVRGOChiYXNlTmFtZSk7CisgICAgZ19m
cmVlKGJhc2VOYW1lKTsKKworICAgIHJldHVybiBmaWxlTmFtZTsKK30KKwogQ1N0cmluZyBvcGVu
VGVtcG9yYXJ5RmlsZShjb25zdCBjaGFyKiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFu
ZGxlKQogewogICAgIGdjaGFyKiBmaWxlbmFtZSA9IGdfc3RyZHVwX3ByaW50ZigiJXNYWFhYWFgi
LCBwcmVmaXgpOwpAQCAtMTQ1LDQgKzE1OSw5IEBAIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGwKIAogICAgIHJldHVybiB0b3RhbEJ5dGVzV3JpdHRlbjsKIH0KKworYm9v
bCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQoreworICAgIHJldHVybiBnX21v
ZHVsZV9jbG9zZShtb2R1bGUpOworfQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAyOTcyNCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMz
LDggQEAKICNpbmNsdWRlICJGVFBEaXJlY3RvcnlEb2N1bWVudC5oIgogI2luY2x1ZGUgIkdsb2Jh
bEhpc3RvcnkuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsdWdJ
bkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTcsMTIgKzU4
LDEwIEBAIFZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QKIAogYm9vbCBX
ZWJDb3JlOjpoaXN0b3J5Q29udGFpbnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4g
ZmFsc2U7IH0KIAotUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZv
Rm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDt9
Ci11bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFt
ZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIFN0cmluZygpOyB9IAotYm9vbCBXZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBv
cnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gZmFsc2U7IH0KLXZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9Ci0KK1BsdWdpblNldCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0lu
UGF0aHMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IH0KK1ZlY3RvcjxTdHJpbmc+IFBsdWdp
bkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK2Jv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKSB7
IG5vdEltcGxlbWVudGVkKCk7IH0KIAogQ29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7
IHJldHVybiAweEZGMDAwMEZGOyB9CiB2b2lkIFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hh
bmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0Zp
bGVTeXN0ZW1RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxlU3lz
dGVtUXQuY3BwCShyZXZpc2lvbiAyOTcyNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvRmlsZVN5
c3RlbVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsMTggQEAgU3RyaW5nIHBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdAogICAgIHJldHVybiBRRGlyKHBhdGgpLmZpbGVQ
YXRoKGNvbXBvbmVudCk7CiB9CiAKK1N0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5n
JiBwYXRoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jv
b2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBl
dApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2
aXNpb24gMjk3MjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDggQEAKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKLSNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKICNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5oIgpA
QCAtNjksNiArNzAsMTAgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK1BsdWdpblNl
dCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IH0KK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0
aHMoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZv
KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVmVjdG9y
PFN0cmluZz4gc3VwcG9ydGVkS2V5U2l6ZXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBW
ZWN0b3I8U3RyaW5nPigpOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVt
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2lu
LmNwcAkocmV2aXNpb24gMjk3MjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVt
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCwxMSBAQCBTdHJpbmcgaG9tZURp
cmVjdG9yeVBhdGgoKQogICAgIHJldHVybiAiIjsKIH0KIAorU3RyaW5nIHBhdGhHZXRGaWxlTmFt
ZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIFN0cmluZyhQYXRoRmluZEZpbGVO
YW1lKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSk7Cit9CisKIHN0YXRp
YyBTdHJpbmcgYnVuZGxlTmFtZSgpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CkBA
IC0yMDIsNiArMjA3LDEyIEBAIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFu
ZGwKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVz
V3JpdHRlbik7CiB9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkK
K3sKKyAgICByZXR1cm4gOjpGcmVlTGlicmFyeShtb2R1bGUpOworfQorCiBTdHJpbmcgbG9jYWxV
c2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCkKIHsKICAgICByZXR1cm4gY2FjaGVkU3RvcmFn
ZURpcmVjdG9yeShDU0lETF9MT0NBTF9BUFBEQVRBKTsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRh
dGFiYXNlLmNwcAkocmV2aXNpb24gMjk2MjYpCShmcm9tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luRGF0YWJhc2VXaW4uY3BwOjI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFi
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VXaW4uaCIKKwor
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3V2luLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8c2hs
d2FwaS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkRhdGFiYXNlV2luKiBQbHVn
aW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpCit7CisgICAgc3RhdGljIFBsdWdpbkRh
dGFiYXNlV2luKiBwbHVnaW5zID0gMDsKKyAgICAKKyAgICBpZiAoIXBsdWdpbnMpIHsKKyAgICAg
ICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZVdpbjsKKyAgICAgICAgcGx1Z2lucy0+c2V0
UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKKyAg
ICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOworICAgIH0KKworICAgIHJldHVybiBwbHVnaW5zOwor
fQorCit2b2lkIFBsdWdpbkRhdGFiYXNlV2luOjphZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3Ry
aW5nJiBwYXRoKQoreworICAgIG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBhdGgpOworICAgIHJlZnJl
c2goKTsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZVdpbjo6cmVmcmVzaCgpCit7ICAgCisgICAg
UGx1Z2luU2V0IG5ld1BsdWdpbnM7CisKKyAgICBib29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxz
ZTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQgb2YgcGx1Z2lucworICAgIG5ld1BsdWdpbnMg
PSBnZXRQbHVnaW5zSW5QYXRocygpOworCisgICAgaWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7
CisgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOworCisgICAgICAgIFBsdWdp
blNldCBwbHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdpbnM7CisKKyAgICAgICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgICAgIHBsdWdpbnNUb1VubG9hZC5yZW1vdmUoKml0KTsKKworICAgICAg
ICBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
ICAgICBuZXdQbHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIFVubG9hZCBwbHVnaW5z
CisgICAgICAgIGVuZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5yZW1vdmUoKml0KTsKKworICAgICAg
ICAvLyBBZGQgbmV3IHBsdWdpbnMKKyAgICAgICAgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAg
ICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisK
KyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpIHx8
ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3BsdWdpbnMg
PSBuZXdQbHVnaW5zOworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5l
d1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9w
bHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhbmV3UGx1Z2lu
cy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVz
CisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Cisg
ICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyBHZXQgTUlNRSB0eXBlcworICAgICAgICBN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWlt
ZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCku
YmVnaW4oKTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KSB7CisgICAgICAgICAgICBtX3Jl
Z2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHBsdWdpblNldENoYW5nZWQ7Cit9CisKK1ZlY3RvcjxQbHVnaW5QYWNrYWdl
V2luKj4gUGx1Z2luRGF0YWJhc2VXaW46OnBsdWdpbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxQ
bHVnaW5QYWNrYWdlV2luKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZIHJvb3RLZXksIFBsdWdp
blNldCYgcGx1Z2lucykKK3sKKyAgICBIS0VZIGtleTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IFJl
Z09wZW5LZXlFeFcocm9vdEtleSwgTCJTb2Z0d2FyZVxcTW96aWxsYVBsdWdpbnMiLCAwLCBLRVlf
RU5VTUVSQVRFX1NVQl9LRVlTLCAma2V5KTsKKworICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VD
Q0VTUykKKyAgICAgICAgcmV0dXJuOworCisgICAgd2NoYXJfdCBuYW1lWzEyOF07CisgICAgRklM
RVRJTUUgbGFzdE1vZGlmaWVkOworCisgICAgLy8gRW51bWVyYXRlIHN1YmtleXMKKyAgICBmb3Ig
KGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09SRCBuYW1lTGVuID0gX2NvdW50b2YobmFt
ZSk7CisgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxl
biwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJP
Ul9TVUNDRVNTKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgV0NIQVIgcGF0aFN0cltf
TUFYX1BBVEhdOworICAgICAgICBEV09SRCBwYXRoU3RyU2l6ZSA9IHNpemVvZihwYXRoU3RyKTsK
KyAgICAgICAgRFdPUkQgdHlwZTsKKworICAgICAgICByZXN1bHQgPSBTSEdldFZhbHVlKGtleSwg
bmFtZSwgVEVYVCgiUGF0aCIpLCAmdHlwZSwgKExQQllURSlwYXRoU3RyLCAmcGF0aFN0clNpemUp
OworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MgfHwgdHlwZSAhPSBSRUdfU1op
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9E
QVRBIGF0dHJpYnV0ZXM7CisgICAgICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0V4KHBhdGhTdHIs
IEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmF0dHJpYnV0ZXMpID09IDApCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gUGx1Z2luUGFj
a2FnZVdpbjo6Y3JlYXRlUGFja2FnZShTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBzaXpl
b2YoV0NIQVIpIC0gMSksIGF0dHJpYnV0ZXMuZnRMYXN0V3JpdGVUaW1lKTsKKworICAgICAgICBp
ZiAocGFja2FnZSkKKyAgICAgICAgICAgIHBsdWdpbnMuYWRkKHBhY2thZ2UpOworICAgIH0KKwor
ICAgIFJlZ0Nsb3NlS2V5KGtleSk7Cit9CisKK1BsdWdpblNldCBQbHVnaW5EYXRhYmFzZVdpbjo6
Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxl
bmFtZXM7CisgICAgUGx1Z2luU2V0IHBsdWdpbnM7CisKKyAgICBIQU5ETEUgaEZpbmQgPSBJTlZB
TElEX0hBTkRMRV9WQUxVRTsKKyAgICBXSU4zMl9GSU5EX0RBVEFXIGZpbmRGaWxlRGF0YTsKKwor
ICAgIFBsdWdpblBhY2thZ2VXaW4qIG9sZFdNUFBsdWdpbiA9IDA7CisgICAgUGx1Z2luUGFja2Fn
ZVdpbiogbmV3V01QUGx1Z2luID0gMDsKKworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3BsdWdpblBhdGhzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5QYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAqaXQgKyAiXFwqIjsKKworICAgICAgICBo
RmluZCA9IEZpbmRGaXJzdEZpbGVXKHBhdHRlcm4uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKSwgJmZpbmRGaWxlRGF0YSk7CisKKyAgICAgICAgaWYgKGhGaW5kID09IElOVkFMSURfSEFO
RExFX1ZBTFVFKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgaWYgKGZpbmRGaWxlRGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVf
RElSRUNUT1JZKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBTdHJp
bmcgZmlsZW5hbWUgPSBTdHJpbmcoZmluZEZpbGVEYXRhLmNGaWxlTmFtZSwgd2NzbGVuKGZpbmRG
aWxlRGF0YS5jRmlsZU5hbWUpKTsKKyAgICAgICAgICAgIGlmICgoIWZpbGVuYW1lLnN0YXJ0c1dp
dGgoIm5wIiwgZmFsc2UpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aCgiZGxsIiwgZmFsc2UpKSAmJgor
ICAgICAgICAgICAgICAgICghZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJQbHVnaW4uZGxs
IikgfHwgIWl0LT5lbmRzV2l0aCgiU2hvY2t3YXZlIDEwIiwgZmFsc2UpKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgU3RyaW5nIGZ1bGxQYXRoID0gKml0ICsgIlxc
IiArIGZpbGVuYW1lOworICAgICAgICAgICAgaWYgKCF1bmlxdWVGaWxlbmFtZXMuYWRkKGZ1bGxQ
YXRoKS5zZWNvbmQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAg
ICAgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luUGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46
OmNyZWF0ZVBhY2thZ2UoZnVsbFBhdGgsIGZpbmRGaWxlRGF0YS5mdExhc3RXcml0ZVRpbWUpOwor
CisgICAgICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkgeworICAgICAgICAgICAgICAgIHBsdWdp
bnMuYWRkKHBsdWdpblBhY2thZ2UpOworCisgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGZpbGVuYW1lLCAibnBkc3BsYXkuZGxsIikpCisgICAgICAgICAgICAgICAgICAgIG9s
ZFdNUFBsdWdpbiA9IHBsdWdpblBhY2thZ2U7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucC1tc3dtcC5kbGwiKSkKKyAgICAgICAgICAgICAg
ICAgICAgbmV3V01QUGx1Z2luID0gcGx1Z2luUGFja2FnZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICB9IHdoaWxlIChGaW5kTmV4dEZpbGVXKGhGaW5kLCAmZmluZEZpbGVEYXRhKSAhPSAwKTsK
KworICAgICAgICBGaW5kQ2xvc2UoaEZpbmQpOworICAgIH0KKworICAgIGFkZFBsdWdpbnNGcm9t
UmVnaXN0cnkoSEtFWV9MT0NBTF9NQUNISU5FLCBwbHVnaW5zKTsKKyAgICBhZGRQbHVnaW5zRnJv
bVJlZ2lzdHJ5KEhLRVlfQ1VSUkVOVF9VU0VSLCBwbHVnaW5zKTsKKworICAgIC8vIElmIGJvdGgg
dGhlIG9sZCBhbmQgbmV3IFdNUCBwbHVnaW4gYXJlIHByZXNlbnQgaW4gdGhlIHBsdWdpbnMgc2V0
LCAKKyAgICAvLyB3ZSByZW1vdmUgdGhlIG9sZCBvbmUgc28gd2UgZG9uJ3QgZW5kIHVwIGNob29z
aW5nIHRoZSBvbGQgb25lLgorICAgIGlmIChvbGRXTVBQbHVnaW4gJiYgbmV3V01QUGx1Z2luKQor
ICAgICAgICBwbHVnaW5zLnJlbW92ZShvbGRXTVBQbHVnaW4pOworCisgICAgcmV0dXJuIHBsdWdp
bnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmVjdG9yPGludD4gcGFyc2VWZXJzaW9uU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmVyc2lvblN0cmluZykKK3sKKyAgICBWZWN0b3I8aW50PiB2ZXJzaW9uOwor
CisgICAgdW5zaWduZWQgc3RhcnRQb3MgPSAwOworICAgIHVuc2lnbmVkIGVuZFBvczsKKyAgICAK
KyAgICB3aGlsZSAoc3RhcnRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAg
IGZvciAoZW5kUG9zID0gc3RhcnRQb3M7IGVuZFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCk7
ICsrZW5kUG9zKQorICAgICAgICAgICAgaWYgKHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnLicg
fHwgdmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICdfJykKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBpbnQgdmVyc2lvbkNvbXBvbmVudCA9IHZlcnNpb25TdHJpbmcuc3Vic3RyaW5n
KHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcykudG9JbnQoKTsKKyAgICAgICAgdmVyc2lvbi5h
cHBlbmQodmVyc2lvbkNvbXBvbmVudCk7CisKKyAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAx
OworICAgIH0KKworICAgIHJldHVybiB2ZXJzaW9uOworfQorCisvLyBUaGlzIHJldHVybnMgd2hl
dGhlciB2ZXJzaW9uQSBpcyBoaWdoZXIgdGhhbiB2ZXJzaW9uQgorc3RhdGljIGlubGluZSBib29s
IGNvbXBhcmVWZXJzaW9ucyhjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkEsIGNvbnN0IFZlY3Rv
cjxpbnQ+JiB2ZXJzaW9uQikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVyc2lv
bkEuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGkgPj0gdmVyc2lvbkIuc2l6ZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHZlcnNpb25BW2ldID4gdmVyc2lv
bkJbaV0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmVyc2lv
bkFbaV0gPCB2ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBJZiB3ZSBjb21lIGhlcmUsIHRoZSB2ZXJzaW9ucyBhcmUgZWl0aGVyIHRoZSBzYW1l
IG9yIHZlcnNpb25CIGhhcyBhbiBleHRyYSBjb21wb25lbnQsIGp1c3QgcmV0dXJuIGZhbHNlCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkTW96aWxsYVBsdWdp
blBhdGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICAvLyBFbnVtZXJhdGUgYWxsIE1v
emlsbGEgcGx1Z2luIGRpcmVjdG9yaWVzIGluIHRoZSByZWdpc3RyeQorICAgIEhLRVkga2V5Owor
ICAgIExPTkcgcmVzdWx0OworICAgIAorICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xP
Q0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxNb3ppbGxhIiksIDAsIEtFWV9SRUFELCAma2V5
KTsKKyAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgV0NIQVIgbmFt
ZVsxMjhdOworICAgICAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7CisKKyAgICAgICAgLy8gRW51
bWVyYXRlIHN1YmtleXMKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKKyAgICAgICAg
ICAgIERXT1JEIG5hbWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOworICAgICAg
ICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAw
LCAwLCAmbGFzdE1vZGlmaWVkKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9T
VUNDRVNTKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBTdHJpbmcgZXh0
ZW5zaW9uc1BhdGggPSBTdHJpbmcobmFtZSwgbmFtZUxlbikgKyAiXFxFeHRlbnNpb25zIjsKKyAg
ICAgICAgICAgIEhLRVkgZXh0ZW5zaW9uc0tleTsKKworICAgICAgICAgICAgLy8gVHJ5IG9wZW5p
bmcgdGhlIGtleQorICAgICAgICAgICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KGtleSwgZXh0ZW5z
aW9uc1BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgS0VZX1JFQUQsICZl
eHRlbnNpb25zS2V5KTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNT
KSB7CisgICAgICAgICAgICAgICAgLy8gTm93IGdldCB0aGUgcGx1Z2lucyBwYXRoCisgICAgICAg
ICAgICAgICAgV0NIQVIgcGx1Z2luc1BhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgICAgICAg
ICBEV09SRCBwbHVnaW5zUGF0aFNpemUgPSBzaXplb2YocGx1Z2luc1BhdGhTdHIpOworICAgICAg
ICAgICAgICAgIERXT1JEIHR5cGU7CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBSZWdRdWVy
eVZhbHVlRXgoZXh0ZW5zaW9uc0tleSwgVEVYVCgiUGx1Z2lucyIpLCAwLCAmdHlwZSwgKExQQllU
RSkmcGx1Z2luc1BhdGhTdHIsICZwbHVnaW5zUGF0aFNpemUpOworCisgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQorICAgICAgICAg
ICAgICAgICAgICBwYXRocy5hcHBlbmQoU3RyaW5nKHBsdWdpbnNQYXRoU3RyLCBwbHVnaW5zUGF0
aFNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkpOworCisgICAgICAgICAgICAgICAgUmVnQ2xvc2VL
ZXkoZXh0ZW5zaW9uc0tleSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQg
YWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luUGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit7
CisgICAgLy8gVGhlIG5ldyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmls
ZXNcUGx1Z2lucyBpZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3RhbGxzCisgICAgV0NI
QVIgcGx1Z2luRGlyZWN0b3J5U3RyW19NQVhfUEFUSCArIDFdOworICAgIERXT1JEIHBsdWdpbkRp
cmVjdG9yeVNpemUgPSA6OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURS
SVZFJVxcUEZpbGVzXFxQbHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwgX2NvdW50b2YocGx1
Z2luRGlyZWN0b3J5U3RyKSk7CisKKyAgICBpZiAocGx1Z2luRGlyZWN0b3J5U2l6ZSA+IDAgJiYg
cGx1Z2luRGlyZWN0b3J5U2l6ZSA8PSBfY291bnRvZihwbHVnaW5EaXJlY3RvcnlTdHIpKQorICAg
ICAgICBwYXRocy5hcHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0
b3J5U2l6ZSAtIDEpKTsKKworICAgIERXT1JEIHR5cGU7CisgICAgV0NIQVIgaW5zdGFsbGF0aW9u
RGlyZWN0b3J5U3RyW19NQVhfUEFUSF07CisgICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U2l6ZSA9IHNpemVvZihpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOworCisgICAgSFJFU1VMVCBy
ZXN1bHQgPSBTSEdldFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1p
Y3Jvc29mdFxcTWVkaWFQbGF5ZXIiKSwgVEVYVCgiSW5zdGFsbGF0aW9uIERpcmVjdG9yeSIpLCAm
dHlwZSwgKExQQllURSkmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGly
ZWN0b3J5U2l6ZSk7CisKKyAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9
PSBSRUdfU1opCisgICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0
b3J5U3RyLCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZFF1aWNrVGltZVBsdWdpblBhdGgoVmVjdG9yPFN0
cmluZz4mIHBhdGhzKQoreworICAgIERXT1JEIHR5cGU7CisgICAgV0NIQVIgaW5zdGFsbGF0aW9u
RGlyZWN0b3J5U3RyW19NQVhfUEFUSF07CisgICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U2l6ZSA9IHNpemVvZihpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOworCisgICAgSFJFU1VMVCBy
ZXN1bHQgPSBTSEdldFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFw
cGxlIENvbXB1dGVyLCBJbmMuXFxRdWlja1RpbWUiKSwgVEVYVCgiSW5zdGFsbERpciIpLCAmdHlw
ZSwgKExQQllURSkmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0
b3J5U2l6ZSk7CisKKyAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBS
RUdfU1opIHsKKyAgICAgICAgU3RyaW5nIHBsdWdpbkRpciA9IFN0cmluZyhpbnN0YWxsYXRpb25E
aXJlY3RvcnlTdHIsIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0g
MSkgKyAiXFxwbHVnaW5zIjsKKyAgICAgICAgcGF0aHMuYXBwZW5kKHBsdWdpbkRpcik7CisgICAg
fQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChWZWN0
b3I8U3RyaW5nPiYgcGF0aHMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQg
PSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcQWRvYmVc
XEFjcm9iYXQgUmVhZGVyIiksIDAsIEtFWV9SRUFELCAma2V5KTsKKyAgICBpZiAocmVzdWx0ICE9
IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG5hbWVbMTI4XTsK
KyAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7CisKKyAgICBWZWN0b3I8aW50PiBsYXRlc3RBY3Jv
YmF0VmVyc2lvbjsKKyAgICBTdHJpbmcgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmc7CisKKyAg
ICAvLyBFbnVtZXJhdGUgc3Via2V5cworICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAg
ICAgIERXT1JEIG5hbWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOworICAgICAg
ICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAs
ICZsYXN0TW9kaWZpZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIFZlY3RvcjxpbnQ+IGFjcm9iYXRWZXJzaW9u
ID0gcGFyc2VWZXJzaW9uU3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7CisgICAgICAgIGlm
IChjb21wYXJlVmVyc2lvbnMoYWNyb2JhdFZlcnNpb24sIGxhdGVzdEFjcm9iYXRWZXJzaW9uKSkg
eworICAgICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb24gPSBhY3JvYmF0VmVyc2lvbjsKKyAg
ICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5hbWUsIG5hbWVM
ZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFsYXRlc3RBY3JvYmF0VmVyc2lvblN0
cmluZy5pc051bGwoKSkgeworICAgICAgICBEV09SRCB0eXBlOworICAgICAgICBXQ0hBUiBhY3Jv
YmF0SW5zdGFsbFBhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdPUkQgYWNyb2JhdEluc3Rh
bGxQYXRoU2l6ZSA9IHNpemVvZihhY3JvYmF0SW5zdGFsbFBhdGhTdHIpOworCisgICAgICAgIFN0
cmluZyBhY3JvYmF0UGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVh
ZGVyXFwiICsgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgKyAiXFxJbnN0YWxsUGF0aCI7Cisg
ICAgICAgIHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBhY3JvYmF0UGx1
Z2luS2V5UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCAmdHlwZSwgKExQ
QllURSlhY3JvYmF0SW5zdGFsbFBhdGhTdHIsICZhY3JvYmF0SW5zdGFsbFBhdGhTaXplKTsKKwor
ICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIFN0cmlu
ZyBhY3JvYmF0UGx1Z2luUGF0aCA9IFN0cmluZyhhY3JvYmF0SW5zdGFsbFBhdGhTdHIsIGFjcm9i
YXRJbnN0YWxsUGF0aFNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkgKyAiXFxicm93c2VyIjsKKyAg
ICAgICAgICAgIHBhdGhzLmFwcGVuZChhY3JvYmF0UGx1Z2luUGF0aCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBz
YWZhcmlQbHVnaW5zUGF0aCgpCit7CisgICAgV0NIQVIgbW9kdWxlRmlsZU5hbWVTdHJbX01BWF9Q
QVRIXTsKKyAgICBzdGF0aWMgU3RyaW5nIHBsdWdpbnNQYXRoOworICAgIHN0YXRpYyBib29sIGNh
Y2hlZFBsdWdpblBhdGggPSBmYWxzZTsKKworICAgIGlmICghY2FjaGVkUGx1Z2luUGF0aCkgewor
ICAgICAgICBjYWNoZWRQbHVnaW5QYXRoID0gdHJ1ZTsKKworICAgICAgICBpbnQgbW9kdWxlRmls
ZU5hbWVMZW4gPSBHZXRNb2R1bGVGaWxlTmFtZSgwLCBtb2R1bGVGaWxlTmFtZVN0ciwgX01BWF9Q
QVRIKTsKKworICAgICAgICBpZiAoIW1vZHVsZUZpbGVOYW1lTGVuIHx8IG1vZHVsZUZpbGVOYW1l
TGVuID09IF9NQVhfUEFUSCkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBpZiAo
IVBhdGhSZW1vdmVGaWxlU3BlYyhtb2R1bGVGaWxlTmFtZVN0cikpCisgICAgICAgICAgICBnb3Rv
IGV4aXQ7CisKKyAgICAgICAgcGx1Z2luc1BhdGggPSBTdHJpbmcobW9kdWxlRmlsZU5hbWVTdHIp
ICsgIlxcUGx1Z2lucyI7CisgICAgfQorZXhpdDoKKyAgICByZXR1cm4gcGx1Z2luc1BhdGg7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMoVmVjdG9yPFN0
cmluZz4mIHBhdGhzKQoreworICAgIFdDSEFSIHN5c3RlbURpcmVjdG9yeVN0cltNQVhfUEFUSF07
CisKKyAgICBpZiAoR2V0U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwgX2NvdW50
b2Yoc3lzdGVtRGlyZWN0b3J5U3RyKSkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0NI
QVIgbWFjcm9tZWRpYURpcmVjdG9yeVN0cltNQVhfUEFUSF07CisKKyAgICBQYXRoQ29tYmluZSht
YWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1hY3JvbWVk
XFxGbGFzaCIpKTsKKyAgICBwYXRocy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7CisK
KyAgICBQYXRoQ29tYmluZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlT
dHIsIFRFWFQoIm1hY3JvbWVkXFxTaG9ja3dhdmUgMTAiKSk7CisgICAgcGF0aHMuYXBwZW5kKG1h
Y3JvbWVkaWFEaXJlY3RvcnlTdHIpOworfQorCitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFz
ZVdpbjo6ZGVmYXVsdFBsdWdpblBhdGhzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsK
KyAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7CisKKyAgICBpZiAoIW91
clBhdGguaXNOdWxsKCkpCisgICAgICAgIHBhdGhzLmFwcGVuZChvdXJQYXRoKTsKKyAgICBhZGRR
dWlja1RpbWVQbHVnaW5QYXRoKHBhdGhzKTsKKyAgICBhZGRBZG9iZUFjcm9iYXRQbHVnaW5QYXRo
KHBhdGhzKTsKKyAgICBhZGRNb3ppbGxhUGx1Z2luUGF0aHMocGF0aHMpOworICAgIGFkZFdpbmRv
d3NNZWRpYVBsYXllclBsdWdpblBhdGgocGF0aHMpOworICAgIGFkZE1hY3JvbWVkaWFQbHVnaW5Q
YXRocyhwYXRocyk7CisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJh
c2VXaW46OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7Cisg
ICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBk
YXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCisgICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9y
ZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSk7Cit9CisKK1BsdWdpblBhY2th
Z2VXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgU3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7CisgICAgU3RyaW5nIG91
clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOworICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdp
biA9IDA7CisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5k
KCk7CisKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS0+bWltZVRvRGVz
Y3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkgeworICAgICAgICAgICAgcGx1Z2luID0gKCppdCku
Z2V0KCk7CisgICAgICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBpbiBvdXIgb3duIHBsdWdpbnMg
ZGlyZWN0b3J5CisgICAgICAgICAgICBpZiAocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSA9PSBv
dXJQYXRoKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHBsdWdpbjsKK30KKworU3RyaW5nIFBsdWdpbkRhdGFiYXNlV2luOjpNSU1FVHlwZUZv
ckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QKK3sKKyAgICBpZiAoZXh0
ZW5zaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgU3RyaW5nIG91
clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOworICAgIFN0cmluZyBtaW1lVHlwZTsKKyAgICBQ
bHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSAwOworCisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQp
LT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CisKKyAgICAgICAgZm9yIChNSU1FVG9FeHRlbnNp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMo
KS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyArK21pbWVfaXQpIHsKKyAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+c2Vjb25kOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwg
ZXh0ZW5zaW9uKSkgeworICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVfaXQtPmZp
cnN0OworICAgICAgICAgICAgICAgICAgICBwbHVnaW4gPSAoKml0KS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9y
eQorICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSA9PSBv
dXJQYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1pbWVUeXBl
OworfQorCitQbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6ZmluZFBsdWdpbihj
b25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCit7ICAgCisgICAgUGx1Z2luUGFja2Fn
ZVdpbiogcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOworICAgIFN0cmluZyBm
aWxlbmFtZSA9IHVybC5zdHJpbmcoKTsKKyAgICAKKyAgICBpZiAoIXBsdWdpbikgeworICAgICAg
ICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwubGFzdFBhdGhDb21wb25lbnQoKTsKKyAgICAgICAgaWYg
KCFmaWxlbmFtZS5lbmRzV2l0aCgiLyIpKSB7CisgICAgICAgICAgICBpbnQgZXh0ZW5zaW9uUG9z
ID0gZmlsZW5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICAgICAgICAgIGlmIChleHRlbnNpb25Q
b3MgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gZmlsZW5hbWUu
c3Vic3RyaW5nKGV4dGVuc2lvblBvcyArIDEpOworCisgICAgICAgICAgICAgICAgbWltZVR5cGUg
PSBNSU1FVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24pOworICAgICAgICAgICAgICAgIHBsdWdp
biA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQgYmUgZm91bmQsIHF1
ZXJ5IFdpbmRvd3MgZm9yIHRoZSBtaW1lIHR5cGUgCisgICAgLy8gY29ycmVzcG9uZGluZyB0byB0
aGUgZXh0ZW5zaW9uLgorCisgICAgcmV0dXJuIHBsdWdpbjsKK30KKworUGx1Z2luVmlld1dpbiog
UGx1Z2luRGF0YWJhc2VXaW46OmNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBj
b25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQorewor
ICAgIC8vIGlmIHdlIGZhaWwgdG8gZmluZCBhIHBsdWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZp
bmRQbHVnaW4gd2lsbCBzZWFyY2ggZm9yCisgICAgLy8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0
ZW5zaW9uIGFuZCB1cGRhdGUgdGhlIE1JTUUgdHlwZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5n
CisgICAgU3RyaW5nIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOworICAgIFBsdWdpblBhY2thZ2VX
aW4qIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOworICAgIAorICAgIC8v
IE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2Vh
cmNoaW5nIGFnYWluCisgICAgaWYgKCFwbHVnaW4gJiYgcmVmcmVzaCgpKSB7CisgICAgICAgIG1p
bWVUeXBlQ29weSA9IG1pbWVUeXBlOworICAgICAgICBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwg
bWltZVR5cGVDb3B5KTsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVybiBuZXcgUGx1Z2luVmll
d1dpbihwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMs
IHBhcmFtVmFsdWVzLCBtaW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSk7Cit9CisKK30KSW5kZXg6
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMjk2MjYpCisrKyBXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsMzYg
KzI1LDQzIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpbkRh
dGFiYXNlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKIAotI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2VXaW4uaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3V2luLmgiCisjaW5jbHVkZSAi
UGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSA8d2luZG93cy5o
PgotI2luY2x1ZGUgPHNobHdhcGkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QbHVnaW5E
YXRhYmFzZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKQorUGx1Z2lu
RGF0YWJhc2UqIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCkKIHsKLSAgICBzdGF0
aWMgUGx1Z2luRGF0YWJhc2VXaW4qIHBsdWdpbnMgPSAwOworICAgIHN0YXRpYyBQbHVnaW5EYXRh
YmFzZSogcGx1Z2lucyA9IDA7CiAgICAgCiAgICAgaWYgKCFwbHVnaW5zKSB7Ci0gICAgICAgIHBs
dWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2VXaW47Ci0gICAgICAgIHBsdWdpbnMtPnNldFBsdWdp
blBhdGhzKFBsdWdpbkRhdGFiYXNlV2luOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSk7CisgICAgICAg
IHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2U7CisgICAgICAgIHBsdWdpbnMtPnNldFBsdWdp
blBhdGhzKFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSk7CiAgICAgICAgIHBs
dWdpbnMtPnJlZnJlc2goKTsKICAgICB9CiAKICAgICByZXR1cm4gcGx1Z2luczsKIH0KIAotdm9p
ZCBQbHVnaW5EYXRhYmFzZVdpbjo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0
aCkKK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlw
ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRy
eSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCisgICAgcmV0dXJu
IChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSk7
Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJp
bmcmIHBhdGgpCiB7CiAgICAgbV9wbHVnaW5QYXRocy5hcHBlbmQocGF0aCk7CiAgICAgcmVmcmVz
aCgpOwogfQogCi1ib29sIFBsdWdpbkRhdGFiYXNlV2luOjpyZWZyZXNoKCkKK2Jvb2wgUGx1Z2lu
RGF0YWJhc2U6OnJlZnJlc2goKQogeyAgIAogICAgIFBsdWdpblNldCBuZXdQbHVnaW5zOwogCkBA
IC0xMDgsOSArMTE2LDkgQEAgYm9vbCBQbHVnaW5EYXRhYmFzZVdpbjo6cmVmcmVzaCgpCiAgICAg
cmV0dXJuIHBsdWdpblNldENoYW5nZWQ7CiB9CiAKLVZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4g
UGx1Z2luRGF0YWJhc2VXaW46OnBsdWdpbnMoKSBjb25zdAorVmVjdG9yPFBsdWdpblBhY2thZ2Uq
PiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFBsdWdpblBh
Y2thZ2VXaW4qPiByZXN1bHQ7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiByZXN1bHQ7CiAK
ICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKICAg
ICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQpAQCAtMTE5LDM0NyArMTI3LDE5IEBAIFZlY3RvcjxQbHVnaW5QYWNr
YWdlV2luKj4gUGx1Z2luRGF0YWJhc2UKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMg
aW5saW5lIHZvaWQgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZIHJvb3RLZXksIFBsdWdpblNl
dCYgcGx1Z2lucykKLXsKLSAgICBIS0VZIGtleTsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IFJlZ09w
ZW5LZXlFeFcocm9vdEtleSwgTCJTb2Z0d2FyZVxcTW96aWxsYVBsdWdpbnMiLCAwLCBLRVlfRU5V
TUVSQVRFX1NVQl9LRVlTLCAma2V5KTsKLQotICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VT
UykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2NoYXJfdCBuYW1lWzEyOF07Ci0gICAgRklMRVRJ
TUUgbGFzdE1vZGlmaWVkOwotCi0gICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBmb3IgKGlu
dCBpID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBuYW1lTGVuID0gX2NvdW50b2YobmFtZSk7
Ci0gICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwg
MCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9T
VUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgV0NIQVIgcGF0aFN0cltfTUFY
X1BBVEhdOwotICAgICAgICBEV09SRCBwYXRoU3RyU2l6ZSA9IHNpemVvZihwYXRoU3RyKTsKLSAg
ICAgICAgRFdPUkQgdHlwZTsKLQotICAgICAgICByZXN1bHQgPSBTSEdldFZhbHVlKGtleSwgbmFt
ZSwgVEVYVCgiUGF0aCIpLCAmdHlwZSwgKExQQllURSlwYXRoU3RyLCAmcGF0aFN0clNpemUpOwot
ICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MgfHwgdHlwZSAhPSBSRUdfU1opCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRB
IGF0dHJpYnV0ZXM7Ci0gICAgICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0V4KHBhdGhTdHIsIEdl
dEZpbGVFeEluZm9TdGFuZGFyZCwgJmF0dHJpYnV0ZXMpID09IDApCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gUGx1Z2luUGFja2Fn
ZVdpbjo6Y3JlYXRlUGFja2FnZShTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBzaXplb2Yo
V0NIQVIpIC0gMSksIGF0dHJpYnV0ZXMuZnRMYXN0V3JpdGVUaW1lKTsKLQotICAgICAgICBpZiAo
cGFja2FnZSkKLSAgICAgICAgICAgIHBsdWdpbnMuYWRkKHBhY2thZ2UpOwotICAgIH0KLQotICAg
IFJlZ0Nsb3NlS2V5KGtleSk7Ci19Ci0KLVBsdWdpblNldCBQbHVnaW5EYXRhYmFzZVdpbjo6Z2V0
UGx1Z2luc0luUGF0aHMoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBh
IGNhc2UgaW5zZW5zaXRpdmUgc2V0LgotICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFt
ZXM7Ci0gICAgUGx1Z2luU2V0IHBsdWdpbnM7Ci0KLSAgICBIQU5ETEUgaEZpbmQgPSBJTlZBTElE
X0hBTkRMRV9WQUxVRTsKLSAgICBXSU4zMl9GSU5EX0RBVEFXIGZpbmRGaWxlRGF0YTsKLQotICAg
IFBsdWdpblBhY2thZ2VXaW4qIG9sZFdNUFBsdWdpbiA9IDA7Ci0gICAgUGx1Z2luUGFja2FnZVdp
biogbmV3V01QUGx1Z2luID0gMDsKLQotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpblBhdGhzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5QYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAqaXQgKyAiXFwqIjsKLQotICAgICAgICBoRmlu
ZCA9IEZpbmRGaXJzdEZpbGVXKHBhdHRlcm4uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24o
KSwgJmZpbmRGaWxlRGF0YSk7Ci0KLSAgICAgICAgaWYgKGhGaW5kID09IElOVkFMSURfSEFORExF
X1ZBTFVFKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZG8gewotICAgICAgICAg
ICAgaWYgKGZpbmRGaWxlRGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElS
RUNUT1JZKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBTdHJpbmcg
ZmlsZW5hbWUgPSBTdHJpbmcoZmluZEZpbGVEYXRhLmNGaWxlTmFtZSwgd2NzbGVuKGZpbmRGaWxl
RGF0YS5jRmlsZU5hbWUpKTsKLSAgICAgICAgICAgIGlmICgoIWZpbGVuYW1lLnN0YXJ0c1dpdGgo
Im5wIiwgZmFsc2UpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aCgiZGxsIiwgZmFsc2UpKSAmJgotICAg
ICAgICAgICAgICAgICghZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJQbHVnaW4uZGxsIikg
fHwgIWl0LT5lbmRzV2l0aCgiU2hvY2t3YXZlIDEwIiwgZmFsc2UpKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGZ1bGxQYXRoID0gKml0ICsgIlxcIiAr
IGZpbGVuYW1lOwotICAgICAgICAgICAgaWYgKCF1bmlxdWVGaWxlbmFtZXMuYWRkKGZ1bGxQYXRo
KS5zZWNvbmQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICAg
ICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luUGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNy
ZWF0ZVBhY2thZ2UoZnVsbFBhdGgsIGZpbmRGaWxlRGF0YS5mdExhc3RXcml0ZVRpbWUpOwotCi0g
ICAgICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkgewotICAgICAgICAgICAgICAgIHBsdWdpbnMu
YWRkKHBsdWdpblBhY2thZ2UpOwotCi0gICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGZpbGVuYW1lLCAibnBkc3BsYXkuZGxsIikpCi0gICAgICAgICAgICAgICAgICAgIG9sZFdN
UFBsdWdpbiA9IHBsdWdpblBhY2thZ2U7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucC1tc3dtcC5kbGwiKSkKLSAgICAgICAgICAgICAgICAg
ICAgbmV3V01QUGx1Z2luID0gcGx1Z2luUGFja2FnZTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICB9IHdoaWxlIChGaW5kTmV4dEZpbGVXKGhGaW5kLCAmZmluZEZpbGVEYXRhKSAhPSAwKTsKLQot
ICAgICAgICBGaW5kQ2xvc2UoaEZpbmQpOwotICAgIH0KLQotICAgIGFkZFBsdWdpbnNGcm9tUmVn
aXN0cnkoSEtFWV9MT0NBTF9NQUNISU5FLCBwbHVnaW5zKTsKLSAgICBhZGRQbHVnaW5zRnJvbVJl
Z2lzdHJ5KEhLRVlfQ1VSUkVOVF9VU0VSLCBwbHVnaW5zKTsKLQotICAgIC8vIElmIGJvdGggdGhl
IG9sZCBhbmQgbmV3IFdNUCBwbHVnaW4gYXJlIHByZXNlbnQgaW4gdGhlIHBsdWdpbnMgc2V0LCAK
LSAgICAvLyB3ZSByZW1vdmUgdGhlIG9sZCBvbmUgc28gd2UgZG9uJ3QgZW5kIHVwIGNob29zaW5n
IHRoZSBvbGQgb25lLgotICAgIGlmIChvbGRXTVBQbHVnaW4gJiYgbmV3V01QUGx1Z2luKQotICAg
ICAgICBwbHVnaW5zLnJlbW92ZShvbGRXTVBQbHVnaW4pOwotCi0gICAgcmV0dXJuIHBsdWdpbnM7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVmVjdG9yPGludD4gcGFyc2VWZXJzaW9uU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmVyc2lvblN0cmluZykKLXsKLSAgICBWZWN0b3I8aW50PiB2ZXJzaW9uOwotCi0g
ICAgdW5zaWduZWQgc3RhcnRQb3MgPSAwOwotICAgIHVuc2lnbmVkIGVuZFBvczsKLSAgICAKLSAg
ICB3aGlsZSAoc3RhcnRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpKSB7Ci0gICAgICAgIGZv
ciAoZW5kUG9zID0gc3RhcnRQb3M7IGVuZFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCk7ICsr
ZW5kUG9zKQotICAgICAgICAgICAgaWYgKHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnLicgfHwg
dmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICdfJykKLSAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBpbnQgdmVyc2lvbkNvbXBvbmVudCA9IHZlcnNpb25TdHJpbmcuc3Vic3RyaW5nKHN0
YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcykudG9JbnQoKTsKLSAgICAgICAgdmVyc2lvbi5hcHBl
bmQodmVyc2lvbkNvbXBvbmVudCk7Ci0KLSAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOwot
ICAgIH0KLQotICAgIHJldHVybiB2ZXJzaW9uOwotfQotCi0vLyBUaGlzIHJldHVybnMgd2hldGhl
ciB2ZXJzaW9uQSBpcyBoaWdoZXIgdGhhbiB2ZXJzaW9uQgotc3RhdGljIGlubGluZSBib29sIGNv
bXBhcmVWZXJzaW9ucyhjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkEsIGNvbnN0IFZlY3Rvcjxp
bnQ+JiB2ZXJzaW9uQikKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVyc2lvbkEu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGkgPj0gdmVyc2lvbkIuc2l6ZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKHZlcnNpb25BW2ldID4gdmVyc2lvbkJb
aV0pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmVyc2lvbkFb
aV0gPCB2ZXJzaW9uQltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBJZiB3ZSBjb21lIGhlcmUsIHRoZSB2ZXJzaW9ucyBhcmUgZWl0aGVyIHRoZSBzYW1lIG9y
IHZlcnNpb25CIGhhcyBhbiBleHRyYSBjb21wb25lbnQsIGp1c3QgcmV0dXJuIGZhbHNlCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkTW96aWxsYVBsdWdpblBh
dGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICAvLyBFbnVtZXJhdGUgYWxsIE1vemls
bGEgcGx1Z2luIGRpcmVjdG9yaWVzIGluIHRoZSByZWdpc3RyeQotICAgIEhLRVkga2V5OwotICAg
IExPTkcgcmVzdWx0OwotICAgIAotICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FM
X01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxNb3ppbGxhIiksIDAsIEtFWV9SRUFELCAma2V5KTsK
LSAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgV0NIQVIgbmFtZVsx
MjhdOwotICAgICAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICAgICAgLy8gRW51bWVy
YXRlIHN1YmtleXMKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKLSAgICAgICAgICAg
IERXT1JEIG5hbWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOwotICAgICAgICAg
ICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAw
LCAmbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUND
RVNTKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBTdHJpbmcgZXh0ZW5z
aW9uc1BhdGggPSBTdHJpbmcobmFtZSwgbmFtZUxlbikgKyAiXFxFeHRlbnNpb25zIjsKLSAgICAg
ICAgICAgIEhLRVkgZXh0ZW5zaW9uc0tleTsKLQotICAgICAgICAgICAgLy8gVHJ5IG9wZW5pbmcg
dGhlIGtleQotICAgICAgICAgICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KGtleSwgZXh0ZW5zaW9u
c1BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgS0VZX1JFQUQsICZleHRl
bnNpb25zS2V5KTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7
Ci0gICAgICAgICAgICAgICAgLy8gTm93IGdldCB0aGUgcGx1Z2lucyBwYXRoCi0gICAgICAgICAg
ICAgICAgV0NIQVIgcGx1Z2luc1BhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgICAgICAgICBE
V09SRCBwbHVnaW5zUGF0aFNpemUgPSBzaXplb2YocGx1Z2luc1BhdGhTdHIpOwotICAgICAgICAg
ICAgICAgIERXT1JEIHR5cGU7Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBSZWdRdWVyeVZh
bHVlRXgoZXh0ZW5zaW9uc0tleSwgVEVYVCgiUGx1Z2lucyIpLCAwLCAmdHlwZSwgKExQQllURSkm
cGx1Z2luc1BhdGhTdHIsICZwbHVnaW5zUGF0aFNpemUpOwotCi0gICAgICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAgICAgICAgICAg
ICAgICAgICBwYXRocy5hcHBlbmQoU3RyaW5nKHBsdWdpbnNQYXRoU3RyLCBwbHVnaW5zUGF0aFNp
emUgLyBzaXplb2YoV0NIQVIpIC0gMSkpOwotCi0gICAgICAgICAgICAgICAgUmVnQ2xvc2VLZXko
ZXh0ZW5zaW9uc0tleSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFJlZ0Nsb3NlS2V5KGtleSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRk
V2luZG93c01lZGlhUGxheWVyUGx1Z2luUGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0g
ICAgLy8gVGhlIG5ldyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmlsZXNc
UGx1Z2lucyBpZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3RhbGxzCi0gICAgV0NIQVIg
cGx1Z2luRGlyZWN0b3J5U3RyW19NQVhfUEFUSCArIDFdOwotICAgIERXT1JEIHBsdWdpbkRpcmVj
dG9yeVNpemUgPSA6OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURSSVZF
JVxcUEZpbGVzXFxQbHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwgX2NvdW50b2YocGx1Z2lu
RGlyZWN0b3J5U3RyKSk7Ci0KLSAgICBpZiAocGx1Z2luRGlyZWN0b3J5U2l6ZSA+IDAgJiYgcGx1
Z2luRGlyZWN0b3J5U2l6ZSA8PSBfY291bnRvZihwbHVnaW5EaXJlY3RvcnlTdHIpKQotICAgICAg
ICBwYXRocy5hcHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5
U2l6ZSAtIDEpKTsKLQotICAgIERXT1JEIHR5cGU7Ci0gICAgV0NIQVIgaW5zdGFsbGF0aW9uRGly
ZWN0b3J5U3RyW19NQVhfUEFUSF07Ci0gICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6
ZSA9IHNpemVvZihpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOwotCi0gICAgSFJFU1VMVCByZXN1
bHQgPSBTSEdldFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1pY3Jv
c29mdFxcTWVkaWFQbGF5ZXIiKSwgVEVYVCgiSW5zdGFsbGF0aW9uIERpcmVjdG9yeSIpLCAmdHlw
ZSwgKExQQllURSkmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0
b3J5U2l6ZSk7Ci0KLSAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBS
RUdfU1opCi0gICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U3RyLCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLX0K
LQotc3RhdGljIGlubGluZSB2b2lkIGFkZFF1aWNrVGltZVBsdWdpblBhdGgoVmVjdG9yPFN0cmlu
Zz4mIHBhdGhzKQotewotICAgIERXT1JEIHR5cGU7Ci0gICAgV0NIQVIgaW5zdGFsbGF0aW9uRGly
ZWN0b3J5U3RyW19NQVhfUEFUSF07Ci0gICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6
ZSA9IHNpemVvZihpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOwotCi0gICAgSFJFU1VMVCByZXN1
bHQgPSBTSEdldFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFwcGxl
IENvbXB1dGVyLCBJbmMuXFxRdWlja1RpbWUiKSwgVEVYVCgiSW5zdGFsbERpciIpLCAmdHlwZSwg
KExQQllURSkmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U2l6ZSk7Ci0KLSAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdf
U1opIHsKLSAgICAgICAgU3RyaW5nIHBsdWdpbkRpciA9IFN0cmluZyhpbnN0YWxsYXRpb25EaXJl
Y3RvcnlTdHIsIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkg
KyAiXFxwbHVnaW5zIjsKLSAgICAgICAgcGF0aHMuYXBwZW5kKHBsdWdpbkRpcik7Ci0gICAgfQot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChWZWN0b3I8
U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgSEtFWSBrZXk7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBS
ZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcQWRvYmVcXEFj
cm9iYXQgUmVhZGVyIiksIDAsIEtFWV9SRUFELCAma2V5KTsKLSAgICBpZiAocmVzdWx0ICE9IEVS
Uk9SX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFSIG5hbWVbMTI4XTsKLSAg
ICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICBWZWN0b3I8aW50PiBsYXRlc3RBY3JvYmF0
VmVyc2lvbjsKLSAgICBTdHJpbmcgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmc7Ci0KLSAgICAv
LyBFbnVtZXJhdGUgc3Via2V5cwotICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAg
IERXT1JEIG5hbWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOwotICAgICAgICBy
ZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZs
YXN0TW9kaWZpZWQpOwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFZlY3RvcjxpbnQ+IGFjcm9iYXRWZXJzaW9uID0g
cGFyc2VWZXJzaW9uU3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7Ci0gICAgICAgIGlmIChj
b21wYXJlVmVyc2lvbnMoYWNyb2JhdFZlcnNpb24sIGxhdGVzdEFjcm9iYXRWZXJzaW9uKSkgewot
ICAgICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb24gPSBhY3JvYmF0VmVyc2lvbjsKLSAgICAg
ICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4p
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmlu
Zy5pc051bGwoKSkgewotICAgICAgICBEV09SRCB0eXBlOwotICAgICAgICBXQ0hBUiBhY3JvYmF0
SW5zdGFsbFBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgYWNyb2JhdEluc3RhbGxQ
YXRoU2l6ZSA9IHNpemVvZihhY3JvYmF0SW5zdGFsbFBhdGhTdHIpOwotCi0gICAgICAgIFN0cmlu
ZyBhY3JvYmF0UGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVhZGVy
XFwiICsgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgKyAiXFxJbnN0YWxsUGF0aCI7Ci0gICAg
ICAgIHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBhY3JvYmF0UGx1Z2lu
S2V5UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCAmdHlwZSwgKExQQllU
RSlhY3JvYmF0SW5zdGFsbFBhdGhTdHIsICZhY3JvYmF0SW5zdGFsbFBhdGhTaXplKTsKLQotICAg
ICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIFN0cmluZyBh
Y3JvYmF0UGx1Z2luUGF0aCA9IFN0cmluZyhhY3JvYmF0SW5zdGFsbFBhdGhTdHIsIGFjcm9iYXRJ
bnN0YWxsUGF0aFNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkgKyAiXFxicm93c2VyIjsKLSAgICAg
ICAgICAgIHBhdGhzLmFwcGVuZChhY3JvYmF0UGx1Z2luUGF0aCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBSZWdDbG9zZUtleShrZXkpOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBzYWZh
cmlQbHVnaW5zUGF0aCgpCi17Ci0gICAgV0NIQVIgbW9kdWxlRmlsZU5hbWVTdHJbX01BWF9QQVRI
XTsKLSAgICBzdGF0aWMgU3RyaW5nIHBsdWdpbnNQYXRoOwotICAgIHN0YXRpYyBib29sIGNhY2hl
ZFBsdWdpblBhdGggPSBmYWxzZTsKLQotICAgIGlmICghY2FjaGVkUGx1Z2luUGF0aCkgewotICAg
ICAgICBjYWNoZWRQbHVnaW5QYXRoID0gdHJ1ZTsKLQotICAgICAgICBpbnQgbW9kdWxlRmlsZU5h
bWVMZW4gPSBHZXRNb2R1bGVGaWxlTmFtZSgwLCBtb2R1bGVGaWxlTmFtZVN0ciwgX01BWF9QQVRI
KTsKLQotICAgICAgICBpZiAoIW1vZHVsZUZpbGVOYW1lTGVuIHx8IG1vZHVsZUZpbGVOYW1lTGVu
ID09IF9NQVhfUEFUSCkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBpZiAoIVBh
dGhSZW1vdmVGaWxlU3BlYyhtb2R1bGVGaWxlTmFtZVN0cikpCi0gICAgICAgICAgICBnb3RvIGV4
aXQ7Ci0KLSAgICAgICAgcGx1Z2luc1BhdGggPSBTdHJpbmcobW9kdWxlRmlsZU5hbWVTdHIpICsg
IlxcUGx1Z2lucyI7Ci0gICAgfQotZXhpdDoKLSAgICByZXR1cm4gcGx1Z2luc1BhdGg7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMoVmVjdG9yPFN0cmlu
Zz4mIHBhdGhzKQotewotICAgIFdDSEFSIHN5c3RlbURpcmVjdG9yeVN0cltNQVhfUEFUSF07Ci0K
LSAgICBpZiAoR2V0U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwgX2NvdW50b2Yo
c3lzdGVtRGlyZWN0b3J5U3RyKSkgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV0NIQVIg
bWFjcm9tZWRpYURpcmVjdG9yeVN0cltNQVhfUEFUSF07Ci0KLSAgICBQYXRoQ29tYmluZShtYWNy
b21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxG
bGFzaCIpKTsKLSAgICBwYXRocy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7Ci0KLSAg
ICBQYXRoQ29tYmluZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIs
IFRFWFQoIm1hY3JvbWVkXFxTaG9ja3dhdmUgMTAiKSk7Ci0gICAgcGF0aHMuYXBwZW5kKG1hY3Jv
bWVkaWFEaXJlY3RvcnlTdHIpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZVdp
bjo6ZGVmYXVsdFBsdWdpblBhdGhzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKLSAg
ICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7Ci0KLSAgICBpZiAoIW91clBh
dGguaXNOdWxsKCkpCi0gICAgICAgIHBhdGhzLmFwcGVuZChvdXJQYXRoKTsKLSAgICBhZGRRdWlj
a1RpbWVQbHVnaW5QYXRoKHBhdGhzKTsKLSAgICBhZGRBZG9iZUFjcm9iYXRQbHVnaW5QYXRoKHBh
dGhzKTsKLSAgICBhZGRNb3ppbGxhUGx1Z2luUGF0aHMocGF0aHMpOwotICAgIGFkZFdpbmRvd3NN
ZWRpYVBsYXllclBsdWdpblBhdGgocGF0aHMpOwotICAgIGFkZE1hY3JvbWVkaWFQbHVnaW5QYXRo
cyhwYXRocyk7Ci0KLSAgICByZXR1cm4gcGF0aHM7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2VX
aW46OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAg
aWYgKG1pbWVUeXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1f
cmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRh
YmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCi0gICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdp
c3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSk7Ci19Ci0KLVBsdWdpblBhY2thZ2VX
aW4qIFBsdWdpbkRhdGFiYXNlV2luOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQorUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OnBsdWdpbkZvck1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsK
LSAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7Ci0gICAgUGx1Z2luUGFj
a2FnZVdpbiogcGx1Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAwOwogICAg
IFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwogCiAgICAg
Zm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygp
LmNvbnRhaW5zKGtleSkpIHsKICAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOwotICAg
ICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQot
ICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAg
ICAgICAgICAgIGlmIChpc1ByZWZlcnJlZFBsdWdpblBhdGgocGx1Z2luLT5wYXJlbnREaXJlY3Rv
cnkoKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC00Njcs
MTUgKzE0NywxNCBAQCBQbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6cGx1CiAg
ICAgcmV0dXJuIHBsdWdpbjsKIH0KIAotU3RyaW5nIFBsdWdpbkRhdGFiYXNlV2luOjpNSU1FVHlw
ZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QKK1N0cmluZyBQbHVn
aW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24p
IGNvbnN0CiB7CiAgICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAogICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5z
LmVuZCgpOwotICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKICAgICBT
dHJpbmcgbWltZVR5cGU7Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gMDsKKyAgICBQ
bHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAwOwogCiAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5t
aW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CkBAIC00ODYsOCArMTY1LDcgQEAgU3RyaW5nIFBsdWdp
bkRhdGFiYXNlV2luOjpNSU1FVHlwZUZvckV4dAogICAgICAgICAgICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CiAgICAgICAgICAgICAgICAg
ICAgIG1pbWVUeXBlID0gbWltZV9pdC0+Zmlyc3Q7CiAgICAgICAgICAgICAgICAgICAgIHBsdWdp
biA9ICgqaXQpLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBp
biBvdXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwbHVn
aW4tPnBhcmVudERpcmVjdG9yeSgpID09IG91clBhdGgpCisgICAgICAgICAgICAgICAgICAgIGlm
IChpc1ByZWZlcnJlZFBsdWdpblBhdGgocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CkBAIC00OTcsOSArMTc1LDkgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlV2luOjpNSU1FVHlw
ZUZvckV4dAogICAgIHJldHVybiBtaW1lVHlwZTsKIH0KIAotUGx1Z2luUGFja2FnZVdpbiogUGx1
Z2luRGF0YWJhc2VXaW46OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1pbWVU
eXBlKQorUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29uc3QgS1VS
TCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBlKQogeyAgIAotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBs
dWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBQbHVnaW5QYWNrYWdlKiBw
bHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CiAgICAgU3RyaW5nIGZpbGVuYW1l
ID0gdXJsLnN0cmluZygpOwogICAgIAogICAgIGlmICghcGx1Z2luKSB7CkBAIC01MjEsMjAgKzE5
OSw0IEBAIFBsdWdpblBhY2thZ2VXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpmaW4KICAgICByZXR1
cm4gcGx1Z2luOwogfQogCi1QbHVnaW5WaWV3V2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6Y3JlYXRl
UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
TmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCi17Ci0gICAgLy8gaWYgd2UgZmFpbCB0byBmaW5k
IGEgcGx1Z2luIGZvciB0aGlzIE1JTUUgdHlwZSwgZmluZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IK
LSAgICAvLyBhIHBsdWdpbiBieSB0aGUgZmlsZSBleHRlbnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlN
RSB0eXBlLCBzbyBwYXNzIGEgbXV0YWJsZSBTdHJpbmcKLSAgICBTdHJpbmcgbWltZVR5cGVDb3B5
ID0gbWltZVR5cGU7Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gZmluZFBsdWdpbih1
cmwsIG1pbWVUeXBlQ29weSk7Ci0gICAgCi0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5
IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICBpZiAoIXBs
dWdpbiAmJiByZWZyZXNoKCkpIHsKLSAgICAgICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7Ci0g
ICAgICAgIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOwotICAgIH0KLSAg
ICAgICAgCi0gICAgcmV0dXJuIG5ldyBQbHVnaW5WaWV3V2luKHBhcmVudEZyYW1lLCBzaXplLCBw
bHVnaW4sIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29w
eSwgbG9hZE1hbnVhbGx5KTsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRh
dGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJ
KHJldmlzaW9uIDI5NjI2KQkoZnJvbSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNl
V2luLmg6Mjk2MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2lu
RGF0YWJhc2VXaW5fSAorI2RlZmluZSBQbHVnaW5EYXRhYmFzZVdpbl9ICisKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1ZGUgIlN0
cmluZ0hhc2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7Cisg
ICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgSW50U2l6ZTsKKyAgICBjbGFzcyBLVVJMOworICAg
IGNsYXNzIFBsdWdpblBhY2thZ2VXaW47CisgICAgY2xhc3MgUGx1Z2luVmlld1dpbjsKKworICAg
IHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4sIFBsdWdpblBhY2thZ2VX
aW5IYXNoPiBQbHVnaW5TZXQ7CisgIAorICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlV2luIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZVdpbiogaW5zdGFsbGVkUGx1
Z2lucygpOworICAgICAgICBQbHVnaW5WaWV3V2luKiBjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBw
YXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFs
bHkpOworCisgICAgICAgIGJvb2wgcmVmcmVzaCgpOworICAgICAgICBWZWN0b3I8UGx1Z2luUGFj
a2FnZVdpbio+IHBsdWdpbnMoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0
ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgdm9pZCBhZGRFeHRyYVBsdWdp
blBhdGgoY29uc3QgU3RyaW5nJik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRQbHVn
aW5QYXRocyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsgbV9wbHVnaW5QYXRocyA9IHBh
dGhzOyB9CisgICAgICAgIFBsdWdpblNldCBnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0OworCisg
ICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIGZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJp
bmcmIG1pbWVUeXBlKTsKKyAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luRm9yTUlNRVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIFN0cmluZyBNSU1FVHlwZUZvckV4
dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3Q7CisKKyAgICAgICAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5QYXRocygpOworCisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IG1fcGx1Z2luUGF0aHM7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlZ2lzdGVy
ZWRNSU1FVHlwZXM7CisgICAgICAgIFBsdWdpblNldCBtX3BsdWdpbnM7CisgICAgfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFz
ZS5oCShyZXZpc2lvbiAyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsNDEgKzI0LDQwIEBACiAgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
ICAqLwogCi0jaWZuZGVmIFBsdWdpbkRhdGFiYXNlV2luX0gKLSNkZWZpbmUgUGx1Z2luRGF0YWJh
c2VXaW5fSAotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaWZuZGVmIFBsdWdpbkRhdGFiYXNlX0gKKyNkZWZpbmUgUGx1Z2luRGF0YWJhc2VfSAog
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2lu
LmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIK
IAorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRWxlbWVudDsKICAgICBjbGFzcyBGcmFtZTsK
ICAgICBjbGFzcyBJbnRTaXplOwogICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgUGx1Z2luUGFj
a2FnZVdpbjsKLSAgICBjbGFzcyBQbHVnaW5WaWV3V2luOworICAgIGNsYXNzIFBsdWdpblBhY2th
Z2U7CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+LCBQbHVn
aW5QYWNrYWdlV2luSGFzaD4gUGx1Z2luU2V0OworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8
UGx1Z2luUGFja2FnZT4sIFBsdWdpblBhY2thZ2VIYXNoPiBQbHVnaW5TZXQ7CiAgIAotICAgIGNs
YXNzIFBsdWdpbkRhdGFiYXNlV2luIHsKKyAgICBjbGFzcyBQbHVnaW5EYXRhYmFzZSB7CiAgICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VXaW4qIGluc3RhbGxlZFBsdWdp
bnMoKTsKLSAgICAgICAgUGx1Z2luVmlld1dpbiogY3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFy
ZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5
KTsKKyAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBpbnN0YWxsZWRQbHVnaW5zKCk7CiAK
ICAgICAgICAgYm9vbCByZWZyZXNoKCk7Ci0gICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2lu
Kj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IHBsdWdp
bnMoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKTsKICAgICAgICAgdm9pZCBhZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3Ry
aW5nJik7CisgICAgICAgIGJvb2wgaXNQcmVmZXJyZWRQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYg
cGF0aCkgY29uc3Q7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzZXRQbHVnaW5QYXRocyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsgbV9wbHVnaW5QYXRocyA9IHBhdGhzOyB9CiAg
ICAgICAgIFBsdWdpblNldCBnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0OwogCi0gICAgICAgIFBs
dWdpblBhY2thZ2VXaW4qIGZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1pbWVU
eXBlKTsKLSAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIFBsdWdpblBhY2thZ2UqIGZpbmRQbHVnaW4oY29u
c3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgUGx1Z2luUGFja2FnZSog
cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAgICAgICAgIFN0cmlu
ZyBNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3Q7CiAK
ICAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5QYXRocygpOwpJbmRl
eDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAJKHJldmlzaW9uIDI5NjI2KQkoZnJvbSBX
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdJbkluZm9TdG9yZVdpbi5jcHA6Mjk2MjYpCisrKyBXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
bHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZVdpbi5oIgorI2luY2x1
ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5J
bmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVu
c2lnbmVkIGkpIAoreyAKKyAgICBQbHVnaW5EYXRhYmFzZVdpbiAqZGIgPSBQbHVnaW5EYXRhYmFz
ZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIFBsdWdpbkluZm8qIGluZm8gPSBuZXcgUGx1
Z2luSW5mbzsKKyAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gZGItPnBsdWdpbnMoKVtp
XTsKKworICAgIGluZm8tPm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7CisgICAgaW5mby0+ZmlsZSA9
IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgaW5mby0+ZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0
aW9uKCk7CisKKyAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0
aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAgIE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOwor
ICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVU
b0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTWltZUNs
YXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOworICAgICAgICBpbmZvLT5taW1lcy5h
cHBlbmQobWltZSk7CisgICAgICAgIAorICAgICAgICBtaW1lLT50eXBlID0gaXQtPmZpcnN0Owor
ICAgICAgICBtaW1lLT5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgbWltZS0+cGx1Z2luID0g
aW5mbzsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcGFja2FnZS0+bWlt
ZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLT50eXBlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAg
ICBpZiAoaSA+IDApCisgICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOworCisg
ICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSBleHRlbnNpb25zW2ldOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIGluZm87Cit9CisKK3Vuc2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6
cGx1Z2luQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZVdpbjo6aW5z
dGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCkuc2l6ZSgpOworfQorCisKK1N0cmluZyBQbHVnSW5J
bmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQor
eworICAgIC8vIEZJWE1FIDU2MjkxMzk6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBvbiBXaW5kb3dz
LgorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworICAgIAorYm9vbCBQbHVnSW5JbmZvU3RvcmU6
OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCit7Cisg
ICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5
cGVSZWdpc3RlcmVkKG1pbWVUeXBlKTsKK30KKwordm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJl
bG9hZE9wZW5QYWdlcykKK3sKKyAgICBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lu
cygpLT5yZWZyZXNoKCk7CisKKyAgICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7CisgICAgICAgIC8v
IEZJWE1FOiByZWxvYWQgb3BlbiBwYWdlcworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkluZm9TdG9yZS5jcHAJKHJldmlzaW9uIDI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkluZm9TdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSwxNiArMjYsMTYg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgot
I2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlV2luLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdp
bi5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2Fn
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9y
ZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQgaSkgCiB7IAotICAg
IFBsdWdpbkRhdGFiYXNlV2luICpkYiA9IFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVn
aW5zKCk7CisgICAgUGx1Z2luRGF0YWJhc2UgKmRiID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxl
ZFBsdWdpbnMoKTsKICAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87Ci0gICAg
UGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IGRiLT5wbHVnaW5zKClbaV07CisgICAgUGx1Z2lu
UGFja2FnZSogcGFja2FnZSA9IGRiLT5wbHVnaW5zKClbaV07CiAKICAgICBpbmZvLT5uYW1lID0g
cGFja2FnZS0+bmFtZSgpOwogICAgIGluZm8tPmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOwpA
QCAtNjUsMjUgKzY2LDI1IEBAIFBsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1
Z2kKIAogdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMo
KS5zaXplKCk7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCkt
PnBsdWdpbnMoKS5zaXplKCk7CiB9CiAKIAogU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2lu
TmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgLy8gRklYTUUg
NTYyOTEzOTogSW1wbGVtZW50IHRoaXMgbWV0aG9kIG9uIFdpbmRvd3MuCisgICAgLy8gRklYTUUg
NTYyOTEzOTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0K
IAogICAgIAogYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCiB7Ci0gICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlV2lu
OjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKTsKKyAg
ICByZXR1cm4gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJl
Z2lzdGVyZWQobWltZVR5cGUpOwogfQogCiB2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2Fk
T3BlblBhZ2VzKQogewotICAgIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCkt
PnJlZnJlc2goKTsKKyAgICBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZy
ZXNoKCk7CiAKICAgICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7CiAgICAgICAgIC8vIEZJWE1FOiBy
ZWxvYWQgb3BlbiBwYWdlcwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2aXNp
b24gMjk2MjYpCShmcm9tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6
Mjk2MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgPHNobHdhcGku
aD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIK
KworI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2lu
Y2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5QYWNrYWdlV2luOjp+UGx1Z2luUGFja2FnZVdpbigp
Cit7CisgICAgQVNTRVJUKCFtX2lzTG9hZGVkKTsKK30KKworc3RhdGljIFN0cmluZyBnZXRWZXJz
aW9uSW5mbyhjb25zdCBMUFZPSUQgdmVyc2lvbkluZm9EYXRhLCBjb25zdCBTdHJpbmcmIGluZm8p
Cit7CisgICAgTFBWT0lEIGJ1ZmZlcjsKKyAgICBVSU5UIGJ1ZmZlckxlbmd0aDsKKyAgICBTdHJp
bmcgc3ViSW5mbyA9ICJcXFN0cmluZ2ZpbGVJbmZvXFwwNDA5MDRFNFxcIiArIGluZm87CisKKyAg
ICBib29sIHJldHZhbCA9IFZlclF1ZXJ5VmFsdWVXKHZlcnNpb25JbmZvRGF0YSwgY29uc3RfY2Fz
dDxVQ2hhcio+KHN1YkluZm8uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSksIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCk7Cisg
ICAgaWYgKCFyZXR2YWwgfHwgYnVmZmVyTGVuZ3RoID09IDApCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIC8vIFN1YnRyYWN0IDEgZnJvbSB0aGUgbGVuZ3RoOyB3ZSBkb24ndCB3YW50
IHRoZSB0cmFpbGluZyAwCisgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFy
Kj4oYnVmZmVyKSwgYnVmZmVyTGVuZ3RoIC0gMSk7Cit9CisKK3N0YXRpYyBWZWN0b3I8U3RyaW5n
PiBzcGxpdFN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY2hhciBkZWxpbWl0ZXIsIGludCBwYWRU
bykKK3sKKyAgICBpbnQgcG9zID0gMDsKKyAgICBpbnQgbmV3UG9zOworICAgIFZlY3RvcjxTdHJp
bmc+IHJlc3VsdDsKKyAgICBEZXByZWNhdGVkU3RyaW5nIGRzID0gc3RyLmRlcHJlY2F0ZWRTdHJp
bmcoKTsKKyAgICBTdHJpbmcgczsKKyAgICBkbyB7CisKKyAgICAgICAgbmV3UG9zID0gZHMuZmlu
ZChkZWxpbWl0ZXIsIHBvcyk7CisKKyAgICAgICAgaWYgKG5ld1BvcyA9PSAtMSkKKyAgICAgICAg
ICAgIHMgPSBkcy5taWQocG9zKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcyA9IGRzLm1p
ZChwb3MsIG5ld1BvcyAtIHBvcyk7CisgICAgICAgIAorICAgICAgICBpZiAoIXMuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzKTsKKworICAgICAgICBwb3MgPSBuZXdQb3Mg
KyAxOworICAgIH0gd2hpbGUgKG5ld1BvcyAhPSAtMSk7CisKKyAgICB3aGlsZSAocGFkVG8gIT0g
LTEgJiYgc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQuc2l6ZSgpKSA8IHBhZFRvKQorICAgICAgICBy
ZXN1bHQuYXBwZW5kKCIiKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUGx1Z2lu
UGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlTb29uKCkKK3sKKyAgICBBU1NFUlQoIW1fZnJlZUxpYnJh
cnlUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICBBU1NFUlQobV9tb2R1bGUpOworICAgIEFTU0VSVCht
X2xvYWRDb3VudCA9PSAwKTsKKworICAgIG1fZnJlZUxpYnJhcnlUaW1lci5zdGFydE9uZVNob3Qo
MCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRp
bWVyPFBsdWdpblBhY2thZ2VXaW4+KiAvKnRpbWVyKi8pCit7CisgICAgQVNTRVJUKG1fbW9kdWxl
KTsKKyAgICBBU1NFUlQobV9sb2FkQ291bnQgPT0gMCk7CisKKyAgICA6OkZyZWVMaWJyYXJ5KG1f
bW9kdWxlKTsKKyAgICBtX21vZHVsZSA9IDA7Cit9CisKK1BsdWdpblBhY2thZ2VXaW46OlBsdWdp
blBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlm
aWVkKQorICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBtX21vZHVsZSgwKQorICAgICwgbV9sYXN0
TW9kaWZpZWQobGFzdE1vZGlmaWVkKQorICAgICwgbV9pc0xvYWRlZChmYWxzZSkKKyAgICAsIG1f
bG9hZENvdW50KDApCisgICAgLCBtX2ZyZWVMaWJyYXJ5VGltZXIodGhpcywgJlBsdWdpblBhY2th
Z2VXaW46OmZyZWVMaWJyYXJ5VGltZXJGaXJlZCkKKyAgICAsIG1fZmlsZVZlcnNpb25MUygwKQor
ICAgICwgbV9maWxlVmVyc2lvbk1TKDApCit7CisgICAgbV9maWxlTmFtZSA9IFN0cmluZyhQYXRo
RmluZEZpbGVOYW1lKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSk7Cisg
ICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3RoKCkgLSBtX2Zp
bGVOYW1lLmxlbmd0aCgpIC0gMSk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZVdpbjo6c3RvcmVG
aWxlVmVyc2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKQoreworICAgIFZTX0ZJWEVERklMRUlO
Rk8qIGluZm87CisgICAgVUlOVCBpbmZvU2l6ZTsKKyAgICBpZiAoIVZlclF1ZXJ5VmFsdWUodmVy
c2lvbkluZm9EYXRhLCBURVhUKCJcXCIpLCAoTFBWT0lEKikgJmluZm8sICZpbmZvU2l6ZSkgfHwg
aW5mb1NpemUgPCBzaXplb2YoVlNfRklYRURGSUxFSU5GTykpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2ZpbGVWZXJzaW9uTFMgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTFM7CisgICAgbV9maWxlVmVy
c2lvbk1TID0gaW5mby0+ZHdGaWxlVmVyc2lvbk1TOworfQorCitib29sIFBsdWdpblBhY2thZ2VX
aW46OmlzUGx1Z2luQmxhY2tsaXN0ZWQoKQoreworICAgIHN0YXRpYyBjb25zdCBEV09SRCBzaWx2
ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgPSAweDAwMDEwMDAwOworICAg
IHN0YXRpYyBjb25zdCBEV09SRCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxT
RFdPUkQgPSAweDUxQkUwMDAwOworCisgICAgaWYgKG5hbWUoKSA9PSAiU2lsdmVybGlnaHQgUGx1
Zy1JbiIpIHsKKyAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly81NTU3Mzc5PiBDcmFz
aCBpbiBTaWx2ZXJsaWdodCB3aGVuIG9wZW5pbmcgbWljcm9zb2Z0LmNvbS4KKyAgICAgICAgLy8g
dGhlIGxhdGVzdCAxLjAgdmVyc2lvbiBvZiBTaWx2ZXJsaWdodCBkb2VzIG5vdCByZXByb2R1Y2Ug
dGhpcyBjcmFzaCwgc28gYWxsb3cgaXQKKyAgICAgICAgLy8gYW5kIGFueSBuZXdlciB2ZXJzaW9u
cworICAgICAgICBpZiAobV9maWxlVmVyc2lvbk1TIDwgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1
aXJlZFZlcnNpb25NU0RXT1JEIHx8CisgICAgICAgICAgICAobV9maWxlVmVyc2lvbk1TID09IHNp
bHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCAmJiBtX2ZpbGVWZXJzaW9u
TFMgPCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxTRFdPUkQpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChmaWxlTmFtZSgpID09ICJucG1vemF4
LmRsbCIpCisgICAgICAgIC8vIEJ1ZyAxNTIxNzogTW96aWxsYSBBY3RpdmVYIGNvbnRyb2wgY29t
cGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb21fY29yZS5kbGwKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZmV0Y2hJ
bmZvKCkKK3sKKyAgICBEV09SRCB2ZXJzaW9uSW5mb1NpemUsIHplcm9IYW5kbGU7CisgICAgdmVy
c2lvbkluZm9TaXplID0gR2V0RmlsZVZlcnNpb25JbmZvU2l6ZVcobV9wYXRoLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCksICZ6ZXJvSGFuZGxlKTsgCisKKyAgICBpZiAodmVyc2lvbklu
Zm9TaXplID09IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIExQVk9JRCB2ZXJzaW9u
SW5mb0RhdGEgPSBmYXN0TWFsbG9jKHZlcnNpb25JbmZvU2l6ZSk7CisKKyAgICBpZiAoIUdldEZp
bGVWZXJzaW9uSW5mb1cobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAs
IHZlcnNpb25JbmZvU2l6ZSwgdmVyc2lvbkluZm9EYXRhKSkgeworICAgICAgICBmYXN0RnJlZSh2
ZXJzaW9uSW5mb0RhdGEpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9u
YW1lID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLCAiUHJvZHVjdE5hbWUiKTsKKyAg
ICBtX2Rlc2NyaXB0aW9uID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLCAiRmlsZURl
c2NyaXB0aW9uIik7CisKKyAgICBpZiAobV9uYW1lLmlzTnVsbCgpIHx8IG1fZGVzY3JpcHRpb24u
aXNOdWxsKCkpIHsKKyAgICAgICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0b3JlRmlsZVZlcnNpb24odmVyc2lvbkluZm9E
YXRhKTsKKworICAgIGlmIChpc1BsdWdpbkJsYWNrbGlzdGVkKCkpIHsKKyAgICAgICAgZmFzdEZy
ZWUodmVyc2lvbkluZm9EYXRhKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFZlY3RvcjxTdHJpbmc+IG1pbWVUeXBlcyA9IHNwbGl0U3RyaW5nKGdldFZlcnNpb25JbmZvKHZl
cnNpb25JbmZvRGF0YSwgIk1JTUVUeXBlIiksICd8JywgLTEpOworICAgIFZlY3RvcjxTdHJpbmc+
IGZpbGVFeHRlbnRzID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRh
LCAiRmlsZUV4dGVudHMiKSwgJ3wnLCBtaW1lVHlwZXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8U3Ry
aW5nPiBkZXNjcmlwdGlvbnMgPSBzcGxpdFN0cmluZyhnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5m
b0RhdGEsICJGaWxlT3Blbk5hbWUiKSwgJ3wnLCBtaW1lVHlwZXMuc2l6ZSgpKTsKKworICAgIGZh
c3RGcmVlKHZlcnNpb25JbmZvRGF0YSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bWltZVR5cGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIC8vIEdldCByaWQgb2YgdGhlIGV4dGVu
c2lvbiBsaXN0IGluIHRoZSBkZXNjcmlwdGlvbiBzdHJpbmcKKyAgICAgICAgU3RyaW5nIGRlc2Ny
aXB0aW9uID0gZGVzY3JpcHRpb25zW2ldOyAgICAKKyAgICAgICAgaW50IHBvcyA9IGRlc2NyaXB0
aW9uLmZpbmQoIigqIik7CisgICAgICAgIGlmIChwb3MgIT0gLTEpIHsKKyAgICAgICAgICAgIC8v
IFRoZXJlIG1pZ2h0IGJlIGEgc3BhY2UgdGhhdCB3ZSBuZWVkIHRvIGdldCByaWQgb2YKKyAgICAg
ICAgICAgIGlmIChwb3MgPiAxICYmIGRlc2NyaXB0aW9uW3BvcyAtIDFdID09ICcgJykKKyAgICAg
ICAgICAgICAgICBwb3MtLTsKKworICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlv
bi5sZWZ0KHBvcyk7CisgICAgICAgIH0KKworICAgICAgICBtaW1lVHlwZXNbaV0gPSBtaW1lVHlw
ZXNbaV0ubG93ZXIoKTsKKworICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1pbWVUeXBl
c1tpXSwgc3BsaXRTdHJpbmcoZmlsZUV4dGVudHNbaV0sICcsJywgLTEpKTsKKyAgICAgICAgbV9t
aW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVUeXBlc1tpXSwgZGVzY3JpcHRpb24pOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsdWdpblBhY2thZ2VXaW46OmxvYWQoKQor
eworICAgIGlmIChtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBBU1NF
UlQobV9tb2R1bGUpOworICAgICAgICBtX2ZyZWVMaWJyYXJ5VGltZXIuc3RvcCgpOworICAgIH0g
ZWxzZSBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBXQ0hBUiBjdXJyZW50UGF0aFtNQVhf
UEFUSF07CisKKyAgICAgICAgaWYgKCE6OkdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCBj
dXJyZW50UGF0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU3RyaW5n
IHBhdGggPSBtX3BhdGguc3Vic3RyaW5nKDAsIG1fcGF0aC5yZXZlcnNlRmluZCgnXFwnKSk7CisK
KyAgICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGguY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
Ly8gTG9hZCB0aGUgbGlicmFyeQorICAgICAgICBtX21vZHVsZSA9IDo6TG9hZExpYnJhcnlXKG1f
cGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKKworICAgICAgICBpZiAoITo6
U2V0Q3VycmVudERpcmVjdG9yeVcoY3VycmVudFBhdGgpKSB7CisgICAgICAgICAgICBpZiAobV9t
b2R1bGUpCisgICAgICAgICAgICAgICAgOjpGcmVlTGlicmFyeShtX21vZHVsZSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fbW9kdWxl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAg
IE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0ciBOUF9HZXRFbnRyeVBvaW50cyA9IDA7CisgICAgTlBf
SW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7CisgICAgTlBFcnJvciBucEVycjsK
KworICAgIE5QX0luaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpR2V0UHJvY0FkZHJl
c3MobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7CisgICAgTlBfR2V0RW50cnlQb2ludHMgPSAo
TlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfR2V0
RW50cnlQb2ludHMiKTsKKyAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRy
KUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKKworICAgIGlmICghTlBf
SW5pdGlhbGl6ZSB8fCAhTlBfR2V0RW50cnlQb2ludHMgfHwgIW1fTlBQX1NodXRkb3duKQorICAg
ICAgICBnb3RvIGFib3J0OworICAKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVv
ZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1
Z2luRnVuY3MpOworCisgICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50cygmbV9wbHVnaW5GdW5j
cyk7CisgICAgTE9HX05QRVJST1IobnBFcnIpOworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19F
UlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1lbXNldCgmbV9icm93c2VyRnVuY3Ms
IDAsIHNpemVvZihtX2Jyb3dzZXJGdW5jcykpOworICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBz
aXplb2YgKG1fYnJvd3NlckZ1bmNzKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBf
VkVSU0lPTl9NSU5PUjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOwor
ICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5u
ZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBO
X1dyaXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0
cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJv
d3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdlbnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVt
YWxsb2MgPSBOUE5fTWVtQWxsb2M7CisgICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9N
ZW1GcmVlOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOworICAg
IG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJv
d3NlckZ1bmNzLnBvc3R1cmxub3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2
YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9
IE5QTl9JbnZhbGlkYXRlUmVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9u
ID0gTlBOX0ludmFsaWRhdGVSZWdpb247CisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcg
PSBOUE5fRm9yY2VSZWRyYXc7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9H
ZXRKYXZhRW52OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQ
ZWVyOworICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVz
aFBvcHVwc0VuYWJsZWRTdGF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVk
c3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlOworCisgICAgbV9icm93c2VyRnVuY3Mu
cmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVy
OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVyczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05Q
Tl9HZXRJbnRJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmlu
ZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOworICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9t
aWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNz
LmludGZyb21pZGVudGlmaWVyID0gX05QTl9JbnRGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNz
Lmludm9rZSA9IF9OUE5fSW52b2tlOworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1bHQg
PSBfTlBOX0ludm9rZURlZmF1bHQ7CisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBfTlBO
X0V2YWx1YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9HZXRQcm9w
ZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5fU2V0UHJvcGVydHk7
CisgICAgbV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5
OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05QTl9IYXNNZXRob2Q7CisgICAg
bV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNQcm9wZXJ0eTsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKKworICAgIG5wRXJyID0gTlBfSW5pdGlh
bGl6ZSgmbV9icm93c2VyRnVuY3MpOworICAgIExPR19OUEVSUk9SKG5wRXJyKTsKKworICAgIGlm
IChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1f
bG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CithYm9ydDoKKyAgICB1bmxvYWRXaXRob3V0
U2h1dGRvd24oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZVdp
bjo6dW5sb2FkKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9OUFBf
U2h1dGRvd24oKTsKKworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworfQorCit2b2lkIFBs
dWdpblBhY2thZ2VXaW46OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCit7CisgICAgaWYgKCFtX2lz
TG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9sb2FkQ291bnQgPT0gMCk7
CisgICAgQVNTRVJUKG1fbW9kdWxlKTsKKworICAgIC8vIDxyZGFyOi8vNTUzMDUxOT46IENyYXNo
IHdoZW4gY2xvc2luZyB0YWIgd2l0aCBwZGYgZmlsZSAoUmVhZGVyIDcgb25seSkKKyAgICAvLyBJ
ZiB0aGUgcGx1Z2luIGhhcyBzdWJjbGFzc2VkIGl0cyBwYXJlbnQgd2luZG93LCBhcyB3aXRoIFJl
YWRlciA3LCB3ZSBtYXkgaGF2ZQorICAgIC8vIGdvdHRlbiBoZXJlIGJ5IHdheSBvZiB0aGUgcGx1
Z2luJ3MgaW50ZXJuYWwgd2luZG93IHByb2MgZm9yd2FyZGluZyBhIG1lc3NhZ2UgdG8gb3VyCisg
ICAgLy8gb3JpZ2luYWwgd2luZG93IHByb2MuIElmIHdlIGZyZWUgdGhlIHBsdWdpbiBsaWJyYXJ5
IGZyb20gaGVyZSwgd2Ugd2lsbCBqdW1wIGJhY2sKKyAgICAvLyB0byBjb2RlIHdlIGp1c3QgZnJl
ZWQgd2hlbiB3ZSByZXR1cm4sIHNvIGRlbGF5IGNhbGxpbmcgRnJlZUxpYnJhcnkgYXQgbGVhc3Qg
dW50aWwKKyAgICAvLyB0aGUgbmV4dCBtZXNzYWdlIGxvb3AKKyAgICBmcmVlTGlicmFyeVNvb24o
KTsKKworICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKK30KKworUGx1Z2luUGFja2FnZVdpbiogUGx1
Z2luUGFja2FnZVdpbjo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJ
TEVUSU1FJiBsYXN0TW9kaWZpZWQpCit7CisgICAgUGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9
IG5ldyBQbHVnaW5QYWNrYWdlV2luKHBhdGgsIGxhc3RNb2RpZmllZCk7CisKKyAgICBpZiAoIXBh
Y2thZ2UtPmZldGNoSW5mbygpKSB7CisgICAgICAgIGRlbGV0ZSBwYWNrYWdlOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHBhY2thZ2U7Cit9CisKK3Vuc2lnbmVk
IFBsdWdpblBhY2thZ2VXaW46Omhhc2goKSBjb25zdAoreyAKKyAgICB1bnNpZ25lZCBoYXNoQ29k
ZXNbM10gPSB7CisgICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCisgICAgICAg
IG1fbGFzdE1vZGlmaWVkLmR3TG93RGF0ZVRpbWUsCisgICAgICAgIG1fbGFzdE1vZGlmaWVkLmR3
SGlnaERhdGVUaW1lCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFz
aChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMyAqIHNpemVvZih1bnNpZ25l
ZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlV2luOjplcXVhbChj
b25zdCBQbHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBiKQorewor
ICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uICYmIChDb21wYXJl
RmlsZVRpbWUoJmEubV9sYXN0TW9kaWZpZWQsICZiLm1fbGFzdE1vZGlmaWVkKSA9PSAwKTsKK30K
KworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2aXNpb24gMjk2MjYpCisr
KyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMywxMCArMjQsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2luY2x1ZGUgPHNobHdh
cGkuaD4KLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4u
aCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAKICNpbmNsdWRlICJUaW1lci5oIgogI2lu
Y2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKQEAgLTM1LDU1ICszNCwxMiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVBsdWdpblBhY2thZ2VXaW46On5QbHVnaW5QYWNrYWdlV2luKCkKK1Bs
dWdpblBhY2thZ2U6On5QbHVnaW5QYWNrYWdlKCkKIHsKICAgICBBU1NFUlQoIW1faXNMb2FkZWQp
OwogfQogCi1zdGF0aWMgU3RyaW5nIGdldFZlcnNpb25JbmZvKGNvbnN0IExQVk9JRCB2ZXJzaW9u
SW5mb0RhdGEsIGNvbnN0IFN0cmluZyYgaW5mbykKLXsKLSAgICBMUFZPSUQgYnVmZmVyOwotICAg
IFVJTlQgYnVmZmVyTGVuZ3RoOwotICAgIFN0cmluZyBzdWJJbmZvID0gIlxcU3RyaW5nZmlsZUlu
Zm9cXDA0MDkwNEU0XFwiICsgaW5mbzsKLQotICAgIGJvb2wgcmV0dmFsID0gVmVyUXVlcnlWYWx1
ZVcodmVyc2lvbkluZm9EYXRhLCBjb25zdF9jYXN0PFVDaGFyKj4oc3ViSW5mby5jaGFyYWN0ZXJz
V2l0aE51bGxUZXJtaW5hdGlvbigpKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmYnVmZmVyLCAmYnVmZmVyTGVuZ3RoKTsKLSAgICBpZiAoIXJldHZhbCB8fCBidWZmZXJMZW5n
dGggPT0gMCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgLy8gU3VidHJhY3QgMSBm
cm9tIHRoZSBsZW5ndGg7IHdlIGRvbid0IHdhbnQgdGhlIHRyYWlsaW5nIDAKLSAgICByZXR1cm4g
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIpLCBidWZmZXJMZW5ndGggLSAx
KTsKLX0KLQotc3RhdGljIFZlY3RvcjxTdHJpbmc+IHNwbGl0U3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyLCBjaGFyIGRlbGltaXRlciwgaW50IHBhZFRvKQotewotICAgIGludCBwb3MgPSAwOwotICAg
IGludCBuZXdQb3M7Ci0gICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwotICAgIERlcHJlY2F0ZWRT
dHJpbmcgZHMgPSBzdHIuZGVwcmVjYXRlZFN0cmluZygpOwotICAgIFN0cmluZyBzOwotICAgIGRv
IHsKLQotICAgICAgICBuZXdQb3MgPSBkcy5maW5kKGRlbGltaXRlciwgcG9zKTsKLQotICAgICAg
ICBpZiAobmV3UG9zID09IC0xKQotICAgICAgICAgICAgcyA9IGRzLm1pZChwb3MpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBzID0gZHMubWlkKHBvcywgbmV3UG9zIC0gcG9zKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmICghcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHMpOwotCi0gICAgICAgIHBvcyA9IG5ld1BvcyArIDE7Ci0gICAgfSB3aGlsZSAobmV3UG9zICE9
IC0xKTsKLQotICAgIHdoaWxlIChwYWRUbyAhPSAtMSAmJiBzdGF0aWNfY2FzdDxpbnQ+KHJlc3Vs
dC5zaXplKCkpIDwgcGFkVG8pCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiIpOwotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVNvb24o
KQordm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVNvb24oKQogewogICAgIEFTU0VSVCgh
bV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpOwogICAgIEFTU0VSVChtX21vZHVsZSk7CkBA
IC05MiwyMzAgKzQ4LDI4IEBAIHZvaWQgUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlTb29u
KCkKICAgICBtX2ZyZWVMaWJyYXJ5VGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIFBs
dWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdl
V2luPiogLyp0aW1lciovKQordm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmly
ZWQoVGltZXI8UGx1Z2luUGFja2FnZT4qIC8qdGltZXIqLykKIHsKICAgICBBU1NFUlQobV9tb2R1
bGUpOwogICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsKIAotICAgIDo6RnJlZUxpYnJhcnko
bV9tb2R1bGUpOworICAgIHVubG9hZE1vZHVsZShtX21vZHVsZSk7CiAgICAgbV9tb2R1bGUgPSAw
OwogfQogCi1QbHVnaW5QYWNrYWdlV2luOjpQbHVnaW5QYWNrYWdlV2luKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCkKLSAgICA6IG1fcGF0aChwYXRoKQor
UGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFBs
YXRmb3JtRmlsZVRpbWUmIGxhc3RNb2RpZmllZCkKKyAgICA6IG1faXNMb2FkZWQoZmFsc2UpCisg
ICAgLCBtX2xvYWRDb3VudCgwKQorICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBtX21vZHVsZSgw
KQogICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQotICAgICwgbV9pc0xvYWRlZChm
YWxzZSkKLSAgICAsIG1fbG9hZENvdW50KDApCi0gICAgLCBtX2ZyZWVMaWJyYXJ5VGltZXIodGhp
cywgJlBsdWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5VGltZXJGaXJlZCkKLSAgICAsIG1fZmls
ZVZlcnNpb25MUygwKQotICAgICwgbV9maWxlVmVyc2lvbk1TKDApCisgICAgLCBtX2ZyZWVMaWJy
YXJ5VGltZXIodGhpcywgJlBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5VGltZXJGaXJlZCkKIHsK
LSAgICBtX2ZpbGVOYW1lID0gU3RyaW5nKFBhdGhGaW5kRmlsZU5hbWUobV9wYXRoLmNoYXJhY3Rl
cnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpKTsKKyAgICBtX2ZpbGVOYW1lID0gcGF0aEdldEZpbGVO
YW1lKG1fcGF0aCk7CiAgICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgu
bGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7CiB9CiAKLXZvaWQgUGx1Z2luUGFj
a2FnZVdpbjo6c3RvcmVGaWxlVmVyc2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKQotewotICAg
IFZTX0ZJWEVERklMRUlORk8qIGluZm87Ci0gICAgVUlOVCBpbmZvU2l6ZTsKLSAgICBpZiAoIVZl
clF1ZXJ5VmFsdWUodmVyc2lvbkluZm9EYXRhLCBURVhUKCJcXCIpLCAoTFBWT0lEKikgJmluZm8s
ICZpbmZvU2l6ZSkgfHwgaW5mb1NpemUgPCBzaXplb2YoVlNfRklYRURGSUxFSU5GTykpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2ZpbGVWZXJzaW9uTFMgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTFM7
Ci0gICAgbV9maWxlVmVyc2lvbk1TID0gaW5mby0+ZHdGaWxlVmVyc2lvbk1TOwotfQotCi1ib29s
IFBsdWdpblBhY2thZ2VXaW46OmlzUGx1Z2luQmxhY2tsaXN0ZWQoKQotewotICAgIHN0YXRpYyBj
b25zdCBEV09SRCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgPSAw
eDAwMDEwMDAwOwotICAgIHN0YXRpYyBjb25zdCBEV09SRCBzaWx2ZXJsaWdodFBsdWdpbk1pblJl
cXVpcmVkVmVyc2lvbkxTRFdPUkQgPSAweDUxQkUwMDAwOwotCi0gICAgaWYgKG5hbWUoKSA9PSAi
U2lsdmVybGlnaHQgUGx1Zy1JbiIpIHsKLSAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgPHJkYXI6
Ly81NTU3Mzc5PiBDcmFzaCBpbiBTaWx2ZXJsaWdodCB3aGVuIG9wZW5pbmcgbWljcm9zb2Z0LmNv
bS4KLSAgICAgICAgLy8gdGhlIGxhdGVzdCAxLjAgdmVyc2lvbiBvZiBTaWx2ZXJsaWdodCBkb2Vz
IG5vdCByZXByb2R1Y2UgdGhpcyBjcmFzaCwgc28gYWxsb3cgaXQKLSAgICAgICAgLy8gYW5kIGFu
eSBuZXdlciB2ZXJzaW9ucwotICAgICAgICBpZiAobV9maWxlVmVyc2lvbk1TIDwgc2lsdmVybGln
aHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEIHx8Ci0gICAgICAgICAgICAobV9maWxl
VmVyc2lvbk1TID09IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCAm
JiBtX2ZpbGVWZXJzaW9uTFMgPCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxT
RFdPUkQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChmaWxlTmFt
ZSgpID09ICJucG1vemF4LmRsbCIpCi0gICAgICAgIC8vIEJ1ZyAxNTIxNzogTW96aWxsYSBBY3Rp
dmVYIGNvbnRyb2wgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb21fY29yZS5kbGwKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUGx1Z2luUGFj
a2FnZVdpbjo6ZmV0Y2hJbmZvKCkKLXsKLSAgICBEV09SRCB2ZXJzaW9uSW5mb1NpemUsIHplcm9I
YW5kbGU7Ci0gICAgdmVyc2lvbkluZm9TaXplID0gR2V0RmlsZVZlcnNpb25JbmZvU2l6ZVcobV9w
YXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZ6ZXJvSGFuZGxlKTsgCi0KLSAg
ICBpZiAodmVyc2lvbkluZm9TaXplID09IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEgPSBmYXN0TWFsbG9jKHZlcnNpb25JbmZvU2l6ZSk7Ci0K
LSAgICBpZiAoIUdldEZpbGVWZXJzaW9uSW5mb1cobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCksIDAsIHZlcnNpb25JbmZvU2l6ZSwgdmVyc2lvbkluZm9EYXRhKSkgewotICAg
ICAgICBmYXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgbV9uYW1lID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLCAiUHJv
ZHVjdE5hbWUiKTsKLSAgICBtX2Rlc2NyaXB0aW9uID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbklu
Zm9EYXRhLCAiRmlsZURlc2NyaXB0aW9uIik7Ci0KLSAgICBpZiAobV9uYW1lLmlzTnVsbCgpIHx8
IG1fZGVzY3JpcHRpb24uaXNOdWxsKCkpIHsKLSAgICAgICAgZmFzdEZyZWUodmVyc2lvbkluZm9E
YXRhKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN0b3JlRmlsZVZlcnNp
b24odmVyc2lvbkluZm9EYXRhKTsKLQotICAgIGlmIChpc1BsdWdpbkJsYWNrbGlzdGVkKCkpIHsK
LSAgICAgICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFZlY3RvcjxTdHJpbmc+IG1pbWVUeXBlcyA9IHNwbGl0U3RyaW5nKGdl
dFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIk1JTUVUeXBlIiksICd8JywgLTEpOwotICAg
IFZlY3RvcjxTdHJpbmc+IGZpbGVFeHRlbnRzID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbkluZm8o
dmVyc2lvbkluZm9EYXRhLCAiRmlsZUV4dGVudHMiKSwgJ3wnLCBtaW1lVHlwZXMuc2l6ZSgpKTsK
LSAgICBWZWN0b3I8U3RyaW5nPiBkZXNjcmlwdGlvbnMgPSBzcGxpdFN0cmluZyhnZXRWZXJzaW9u
SW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJGaWxlT3Blbk5hbWUiKSwgJ3wnLCBtaW1lVHlwZXMuc2l6
ZSgpKTsKLQotICAgIGZhc3RGcmVlKHZlcnNpb25JbmZvRGF0YSk7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbWltZVR5cGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIC8vIEdldCBy
aWQgb2YgdGhlIGV4dGVuc2lvbiBsaXN0IGluIHRoZSBkZXNjcmlwdGlvbiBzdHJpbmcKLSAgICAg
ICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb25zW2ldOyAgICAKLSAgICAgICAgaW50
IHBvcyA9IGRlc2NyaXB0aW9uLmZpbmQoIigqIik7Ci0gICAgICAgIGlmIChwb3MgIT0gLTEpIHsK
LSAgICAgICAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIGEgc3BhY2UgdGhhdCB3ZSBuZWVkIHRvIGdl
dCByaWQgb2YKLSAgICAgICAgICAgIGlmIChwb3MgPiAxICYmIGRlc2NyaXB0aW9uW3BvcyAtIDFd
ID09ICcgJykKLSAgICAgICAgICAgICAgICBwb3MtLTsKLQotICAgICAgICAgICAgZGVzY3JpcHRp
b24gPSBkZXNjcmlwdGlvbi5sZWZ0KHBvcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBtaW1lVHlw
ZXNbaV0gPSBtaW1lVHlwZXNbaV0ubG93ZXIoKTsKLQotICAgICAgICBtX21pbWVUb0V4dGVuc2lv
bnMuYWRkKG1pbWVUeXBlc1tpXSwgc3BsaXRTdHJpbmcoZmlsZUV4dGVudHNbaV0sICcsJywgLTEp
KTsKLSAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVUeXBlc1tpXSwgZGVzY3Jp
cHRpb24pOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBsdWdpblBhY2th
Z2VXaW46OmxvYWQoKQotewotICAgIGlmIChtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSkg
ewotICAgICAgICBBU1NFUlQobV9tb2R1bGUpOwotICAgICAgICBtX2ZyZWVMaWJyYXJ5VGltZXIu
c3RvcCgpOwotICAgIH0gZWxzZSBpZiAobV9pc0xvYWRlZCkgewotICAgICAgICBtX2xvYWRDb3Vu
dCsrOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBXQ0hBUiBj
dXJyZW50UGF0aFtNQVhfUEFUSF07Ci0KLSAgICAgICAgaWYgKCE6OkdldEN1cnJlbnREaXJlY3Rv
cnlXKE1BWF9QQVRILCBjdXJyZW50UGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgU3RyaW5nIHBhdGggPSBtX3BhdGguc3Vic3RyaW5nKDAsIG1fcGF0aC5yZXZlcnNl
RmluZCgnXFwnKSk7Ci0KLSAgICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGgu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgLy8gTG9hZCB0aGUgbGlicmFyeQotICAgICAgICBtX21vZHVsZSA9IDo6
TG9hZExpYnJhcnlXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKLQot
ICAgICAgICBpZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVcoY3VycmVudFBhdGgpKSB7Ci0gICAg
ICAgICAgICBpZiAobV9tb2R1bGUpCi0gICAgICAgICAgICAgICAgOjpGcmVlTGlicmFyeShtX21v
ZHVsZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoIW1fbW9kdWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2lzTG9hZGVk
ID0gdHJ1ZTsKLQotICAgIE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0ciBOUF9HZXRFbnRyeVBvaW50
cyA9IDA7Ci0gICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7Ci0gICAg
TlBFcnJvciBucEVycjsKLQotICAgIE5QX0luaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQ
dHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7Ci0gICAgTlBfR2V0
RW50cnlQb2ludHMgPSAoTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1f
bW9kdWxlLCAiTlBfR2V0RW50cnlQb2ludHMiKTsKLSAgICBtX05QUF9TaHV0ZG93biA9IChOUFBf
U2h1dGRvd25Qcm9jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsK
LQotICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhTlBfR2V0RW50cnlQb2ludHMgfHwgIW1fTlBQ
X1NodXRkb3duKQotICAgICAgICBnb3RvIGFib3J0OwotICAKLSAgICBtZW1zZXQoJm1fcGx1Z2lu
RnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7Ci0gICAgbV9wbHVnaW5GdW5jcy5zaXpl
ID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOwotCi0gICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50
cygmbV9wbHVnaW5GdW5jcyk7Ci0gICAgTE9HX05QRVJST1IobnBFcnIpOwotICAgIGlmIChucEVy
ciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIG1lbXNldCgm
bV9icm93c2VyRnVuY3MsIDAsIHNpemVvZihtX2Jyb3dzZXJGdW5jcykpOwotICAgIG1fYnJvd3Nl
ckZ1bmNzLnNpemUgPSBzaXplb2YgKG1fYnJvd3NlckZ1bmNzKTsKLSAgICBtX2Jyb3dzZXJGdW5j
cy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwg
PSBOUE5fR2V0VVJMOwotICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOwotICAgIG1fYnJvd3NlckZ1
bmNzLndyaXRlID0gTlBOX1dyaXRlOwotICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0g
PSBOUE5fRGVzdHJveVN0cmVhbTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3Rh
dHVzOwotICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdlbnQ7Ci0gICAgbV9i
cm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7Ci0gICAgbV9icm93c2VyRnVuY3Mu
bWVtZnJlZSA9IE5QTl9NZW1GcmVlOwotICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNoID0gTlBO
X01lbUZsdXNoOwotICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2Fk
UGx1Z2luczsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90
aWZ5OwotICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlm
eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5p
bnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5p
bnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247Ci0gICAgbV9icm93c2VyRnVu
Y3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0
SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVy
ID0gTlBOX0dldEphdmFQZWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVk
c3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5w
b3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlOwotCi0gICAg
bV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRW
YWx1ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRT
dHJpbmdJZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJz
ID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRp
ZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmlk
ZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOwotICAgIG1fYnJvd3Nl
ckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOwotICAg
IG1fYnJvd3NlckZ1bmNzLmludGZyb21pZGVudGlmaWVyID0gX05QTl9JbnRGcm9tSWRlbnRpZmll
cjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OwotICAg
IG1fYnJvd3NlckZ1bmNzLmludm9rZSA9IF9OUE5fSW52b2tlOwotICAgIG1fYnJvd3NlckZ1bmNz
Lmludm9rZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7Ci0gICAgbV9icm93c2VyRnVuY3Mu
ZXZhbHVhdGUgPSBfTlBOX0V2YWx1YXRlOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3BlcnR5
ID0gX05QTl9HZXRQcm9wZXJ0eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9IF9O
UE5fU2V0UHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBfTlBO
X1JlbW92ZVByb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05QTl9I
YXNNZXRob2Q7Ci0gICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNQcm9wZXJ0
eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKLQotICAgIG5w
RXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOwotICAgIExPR19OUEVSUk9SKG5w
RXJyKTsKLQotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBh
Ym9ydDsKLQotICAgIG1fbG9hZENvdW50Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci1hYm9ydDoKLSAg
ICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
UGx1Z2luUGFja2FnZVdpbjo6dW5sb2FkKCkKK3ZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkKCkK
IHsKICAgICBpZiAoIW1faXNMb2FkZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3ICs4Miw3
IEBAIHZvaWQgUGx1Z2luUGFja2FnZVdpbjo6dW5sb2FkKCkKICAgICB1bmxvYWRXaXRob3V0U2h1
dGRvd24oKTsKIH0KIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxvYWRXaXRob3V0U2h1dGRv
d24oKQordm9pZCBQbHVnaW5QYWNrYWdlOjp1bmxvYWRXaXRob3V0U2h1dGRvd24oKQogewogICAg
IGlmICghbV9pc0xvYWRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzQ3LDkgKzEwMSw5IEBAIHZv
aWQgUGx1Z2luUGFja2FnZVdpbjo6dW5sb2FkV2l0aG91dFNodXQKICAgICBtX2lzTG9hZGVkID0g
ZmFsc2U7CiB9CiAKLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBh
Y2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKQor
UGx1Z2luUGFja2FnZSogUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IFBsYXRmb3JtRmlsZVRpbWUmIGxhc3RNb2RpZmllZCkKIHsKLSAgICBQbHVn
aW5QYWNrYWdlV2luKiBwYWNrYWdlID0gbmV3IFBsdWdpblBhY2thZ2VXaW4ocGF0aCwgbGFzdE1v
ZGlmaWVkKTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gbmV3IFBsdWdpblBhY2thZ2Uo
cGF0aCwgbGFzdE1vZGlmaWVkKTsKIAogICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpIHsK
ICAgICAgICAgZGVsZXRlIHBhY2thZ2U7CkBAIC0zNTksMjAgKzExMyw0IEBAIFBsdWdpblBhY2th
Z2VXaW4qIFBsdWdpblBhY2thZ2VXaW46OmNyZWEKICAgICByZXR1cm4gcGFja2FnZTsKIH0KIAot
dW5zaWduZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0Ci17IAotICAgIHVuc2lnbmVk
IGhhc2hDb2Rlc1szXSA9IHsKLSAgICAgICAgbV9kZXNjcmlwdGlvbi5pbXBsKCktPmhhc2goKSwK
LSAgICAgICAgbV9sYXN0TW9kaWZpZWQuZHdMb3dEYXRlVGltZSwKLSAgICAgICAgbV9sYXN0TW9k
aWZpZWQuZHdIaWdoRGF0ZVRpbWUKLSAgICB9OwotCi0gICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNv
bXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCAzICogc2l6ZW9m
KHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOwotfQotCi1ib29sIFBsdWdpblBhY2thZ2VXaW46
OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0IFBsdWdpblBhY2thZ2VXaW4m
IGIpCi17Ci0gICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb24gJiYg
KENvbXBhcmVGaWxlVGltZSgmYS5tX2xhc3RNb2RpZmllZCwgJmIubV9sYXN0TW9kaWZpZWQpID09
IDApOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHJldmlzaW9uIDI5NjI2
KQkoZnJvbSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uaDoyOTYyNikKKysr
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5QYWNrYWdlV2luX0gKKyNk
ZWZpbmUgUGx1Z2luUGFja2FnZVdpbl9ICisKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1
ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFz
aC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IE1JTUVUb0Rlc2NyaXB0aW9uc01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBW
ZWN0b3I8U3RyaW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7CisKKyAgICBjbGFzcyBQbHVnaW5Q
YWNrYWdlV2luIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZVdpbj4geworICAgIHB1
YmxpYzoKKyAgICAgICAgflBsdWdpblBhY2thZ2VXaW4oKTsKKyAgICAgICAgc3RhdGljIFBsdWdp
blBhY2thZ2VXaW4qIGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxF
VElNRSYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0KKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQorICAgICAgICBTdHJpbmcgcGFyZW50RGlyZWN0b3J5
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnREaXJlY3Rvcnk7IH0KKworICAgICAgICBjb25zdCBN
SU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1fbWltZVRvRGVzY3JpcHRpb25zOyB9CisgICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNN
YXAmIG1pbWVUb0V4dGVuc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7
IH0KKworICAgICAgICB1bnNpZ25lZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3Q7Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0
IFBsdWdpblBhY2thZ2VXaW4mIGIpOworCisgICAgICAgIGJvb2wgbG9hZCgpOworICAgICAgICB2
b2lkIHVubG9hZCgpOworICAgICAgICB2b2lkIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworCisg
ICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzKCkgY29uc3QgeyByZXR1cm4g
Jm1fcGx1Z2luRnVuY3M7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBQbHVnaW5QYWNrYWdlV2lu
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7CisgICAg
ICAgIGJvb2wgZmV0Y2hJbmZvKCk7CisgICAgICAgIHZvaWQgc3RvcmVGaWxlVmVyc2lvbihMUFZP
SUQgdmVyc2lvbkluZm9EYXRhKTsKKyAgICAgICAgYm9vbCBpc1BsdWdpbkJsYWNrbGlzdGVkKCk7
CisKKyAgICAgICAgYm9vbCBtX2lzTG9hZGVkOworICAgICAgICBpbnQgbV9sb2FkQ291bnQ7CisK
KyAgICAgICAgRFdPUkQgbV9maWxlVmVyc2lvbk1TOworICAgICAgICBEV09SRCBtX2ZpbGVWZXJz
aW9uTFM7CisKKyAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247CisgICAgICAgIFN0cmluZyBt
X3BhdGg7CisgICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOworICAgICAgICBTdHJpbmcgbV9uYW1l
OworICAgICAgICBTdHJpbmcgbV9wYXJlbnREaXJlY3Rvcnk7CisKKyAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOworICAgICAgICBNSU1FVG9FeHRlbnNp
b25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKKworICAgICAgICBITU9EVUxFIG1fbW9kdWxlOwor
ICAgICAgICBGSUxFVElNRSBtX2xhc3RNb2RpZmllZDsKKworICAgICAgICBOUFBfU2h1dGRvd25Q
cm9jUHRyIG1fTlBQX1NodXRkb3duOworICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVu
Y3M7CisgICAgICAgIE5QTmV0c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKKworICAgICAgICB2
b2lkIGZyZWVMaWJyYXJ5U29vbigpOworICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5VGltZXJGaXJl
ZChUaW1lcjxQbHVnaW5QYWNrYWdlV2luPiopOworICAgICAgICBUaW1lcjxQbHVnaW5QYWNrYWdl
V2luPiBtX2ZyZWVMaWJyYXJ5VGltZXI7CisgICAgfTsKKworICAgIHN0cnVjdCBQbHVnaW5QYWNr
YWdlV2luSGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IGludCBrZXkp
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGtleSktPmhhc2go
KTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8UGx1Z2luUGFj
a2FnZVdpbj4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7IH0KKworICAgICAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBpbnQgYSwgY29uc3QgaW50IGIpIHsgcmV0dXJuIGVxdWFsKHJlaW50
ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGEpLCByZWludGVycHJldF9jYXN0PFBsdWdp
blBhY2thZ2VXaW4qPihiKSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVm
UHRyPFBsdWdpblBhY2thZ2VXaW4+JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4m
IGIpIHsgcmV0dXJuIFBsdWdpblBhY2thZ2VXaW46OmVxdWFsKCphLmdldCgpLCAqYi5nZXQoKSk7
IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSBmYWxzZTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKy8vIEZJWE1F
OiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gV1RGLCB3aGVyZSBpdCdzIGltcG9z
c2libGUgdG8gdXNlIGEgY3VzdG9tIEhhc2ggZnVuY3Rpb24gYnV0IHdpdGggZGVmYXVsdCB0cmFp
dHMuCisvLyBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZG8gdGhpcyB3aXRob3V0IGEgU3RvcmFn
ZVRyYWl0cyBzcGVjaWFsaXphdGlvbi4KK25hbWVzcGFjZSBXVEYgeworICAgIHRlbXBsYXRlPD4g
c3RydWN0IEhhc2hLZXlTdG9yYWdlVHJhaXRzPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW5IYXNo
LCBIYXNoVHJhaXRzPFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPiA+ID4geworICAg
ICAgICB0eXBlZGVmIEludFR5cGVzPHNpemVvZihSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2Fn
ZVdpbj4pPjo6U2lnbmVkVHlwZSBJbnRUeXBlOworICAgICAgICB0eXBlZGVmIFdlYkNvcmU6OlBs
dWdpblBhY2thZ2VXaW5IYXNoIEhhc2g7CisgICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0czxJbnRU
eXBlPiBUcmFpdHM7CisgICAgfTsKK30KKworCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBh
Y2thZ2UuaAkocmV2aXNpb24gMjk2MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2Fn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMiArMjMsMTEgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgUGx1Z2luUGFja2FnZVdpbl9ICi0jZGVmaW5lIFBsdWdpblBhY2thZ2VX
aW5fSAotCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaWZu
ZGVmIFBsdWdpblBhY2thZ2VfSAorI2RlZmluZSBQbHVnaW5QYWNrYWdlX0gKIAorI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTQw
LDEwICszOSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOwogCi0gICAgY2xh
c3MgUGx1Z2luUGFja2FnZVdpbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2VXaW4+
IHsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFj
a2FnZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgflBsdWdpblBhY2thZ2VXaW4oKTsKLSAgICAg
ICAgc3RhdGljIFBsdWdpblBhY2thZ2VXaW4qIGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgflBsdWdpblBhY2th
Z2UoKTsKKyAgICAgICAgc3RhdGljIFBsdWdpblBhY2thZ2UqIGNyZWF0ZVBhY2thZ2UoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBQbGF0Zm9ybUZpbGVUaW1lJiBsYXN0TW9kaWZpZWQpOwogICAg
ICAgICAKICAgICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAg
ICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsg
fQpAQCAtNTMsOCArNTIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IE1J
TUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KICAgICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01h
cCYgbWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsg
fQogCi0gICAgICAgIHVuc2lnbmVkIFBsdWdpblBhY2thZ2VXaW46Omhhc2goKSBjb25zdDsKLSAg
ICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZVdpbiYgYSwgY29uc3Qg
UGx1Z2luUGFja2FnZVdpbiYgYik7CisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJl
dHVybiAwOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2Um
IGEsIGNvbnN0IFBsdWdpblBhY2thZ2UmIGIpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAg
Ym9vbCBsb2FkKCk7CiAgICAgICAgIHZvaWQgdW5sb2FkKCk7CkBAIC02MiwxNyArNjEsMTMgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdp
bkZ1bmNzKCkgY29uc3QgeyByZXR1cm4gJm1fcGx1Z2luRnVuY3M7IH0KICAgICBwcml2YXRlOgot
ICAgICAgICBQbHVnaW5QYWNrYWdlV2luKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJ
TUUmIGxhc3RNb2RpZmllZCk7CisgICAgICAgIFBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBQbGF0Zm9ybUZpbGVUaW1lJiBsYXN0TW9kaWZpZWQpOworICAgICAgICBib29s
IGlzUGx1Z2luQmxhY2tsaXN0ZWQoKSBjb25zdDsKICAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsK
LSAgICAgICAgdm9pZCBzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpOwot
ICAgICAgICBib29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKTsKIAogICAgICAgICBib29sIG1faXNM
b2FkZWQ7CiAgICAgICAgIGludCBtX2xvYWRDb3VudDsKIAotICAgICAgICBEV09SRCBtX2ZpbGVW
ZXJzaW9uTVM7Ci0gICAgICAgIERXT1JEIG1fZmlsZVZlcnNpb25MUzsKLQogICAgICAgICBTdHJp
bmcgbV9kZXNjcmlwdGlvbjsKICAgICAgICAgU3RyaW5nIG1fcGF0aDsKICAgICAgICAgU3RyaW5n
IG1fZmlsZU5hbWU7CkBAIC04MiwyNCArNzcsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXAgbV9taW1lVG9EZXNjcmlwdGlvbnM7CiAgICAgICAg
IE1JTUVUb0V4dGVuc2lvbnNNYXAgbV9taW1lVG9FeHRlbnNpb25zOwogCi0gICAgICAgIEhNT0RV
TEUgbV9tb2R1bGU7Ci0gICAgICAgIEZJTEVUSU1FIG1fbGFzdE1vZGlmaWVkOworICAgICAgICBQ
bGF0Zm9ybU1vZHVsZSBtX21vZHVsZTsKKyAgICAgICAgUGxhdGZvcm1GaWxlVGltZSBtX2xhc3RN
b2RpZmllZDsKIAogICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQX1NodXRkb3duOwog
ICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CiAgICAgICAgIE5QTmV0c2NhcGVG
dW5jcyBtX2Jyb3dzZXJGdW5jczsKIAogICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5U29vbigpOwot
ICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdlV2lu
PiopOwotICAgICAgICBUaW1lcjxQbHVnaW5QYWNrYWdlV2luPiBtX2ZyZWVMaWJyYXJ5VGltZXI7
CisgICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2U+
Kik7CisgICAgICAgIFRpbWVyPFBsdWdpblBhY2thZ2U+IG1fZnJlZUxpYnJhcnlUaW1lcjsKICAg
ICB9OwogCi0gICAgc3RydWN0IFBsdWdpblBhY2thZ2VXaW5IYXNoIHsKLSAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQ
bHVnaW5QYWNrYWdlV2luKj4oa2V5KS0+aGFzaCgpOyB9Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYga2V5KSB7IHJldHVybiBrZXkt
Pmhhc2goKTsgfQorICAgIHN0cnVjdCBQbHVnaW5QYWNrYWdlSGFzaCB7CisgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IGludCBrZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
UGx1Z2luUGFja2FnZSo+KGtleSktPmhhc2goKTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNo
KCk7IH0KIAotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBpbnQgYSwgY29uc3QgaW50
IGIpIHsgcmV0dXJuIGVxdWFsKHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGEp
LCByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihiKSk7IH0KLSAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+JiBhLCBjb25zdCBS
ZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4mIGIpIHsgcmV0dXJuIFBsdWdpblBhY2thZ2VXaW46OmVx
dWFsKCphLmdldCgpLCAqYi5nZXQoKSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgaW50IGEsIGNvbnN0IGludCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBs
dWdpblBhY2thZ2UqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYikpOyB9
CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYg
YSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdl
OjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiAgICAgfTsKIApAQCAtMTA4
LDkgKzEwMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29y
a2Fyb3VuZCBmb3IgYSBidWcgaW4gV1RGLCB3aGVyZSBpdCdzIGltcG9zc2libGUgdG8gdXNlIGEg
Y3VzdG9tIEhhc2ggZnVuY3Rpb24gYnV0IHdpdGggZGVmYXVsdCB0cmFpdHMuCiAvLyBJdCBzaG91
bGQgYmUgcG9zc2libGUgdG8gZG8gdGhpcyB3aXRob3V0IGEgU3RvcmFnZVRyYWl0cyBzcGVjaWFs
aXphdGlvbi4KIG5hbWVzcGFjZSBXVEYgewotICAgIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hLZXlT
dG9yYWdlVHJhaXRzPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW5IYXNoLCBIYXNoVHJhaXRzPFJl
ZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPiA+ID4gewotICAgICAgICB0eXBlZGVmIElu
dFR5cGVzPHNpemVvZihSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbj4pPjo6U2lnbmVk
VHlwZSBJbnRUeXBlOwotICAgICAgICB0eXBlZGVmIFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW5I
YXNoIEhhc2g7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2Vi
Q29yZTo6UGx1Z2luUGFja2FnZUhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdp
blBhY2thZ2U+ID4gPiB7CisgICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlPik+OjpTaWduZWRUeXBlIEludFR5cGU7CisgICAgICAgIHR5
cGVkZWYgV2ViQ29yZTo6UGx1Z2luUGFja2FnZUhhc2ggSGFzaDsKICAgICAgICAgdHlwZWRlZiBI
YXNoVHJhaXRzPEludFR5cGU+IFRyYWl0czsKICAgICB9OwogfQpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnSW5JbmZvU3RvcmVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z0luSW5mb1N0b3JlV2luLmNwcAkocmV2aXNpb24gMjk3MjQpCisrKyBXZWJD
b3JlL3BsdWdpbnMvd2luL1BsdWdJbkluZm9TdG9yZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VXaW4uaCIK
LSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
UGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJ
bmRleCh1bnNpZ25lZCBpKSAKLXsgCi0gICAgUGx1Z2luRGF0YWJhc2VXaW4gKmRiID0gUGx1Z2lu
RGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKTsKLSAgICBQbHVnaW5JbmZvKiBpbmZvID0g
bmV3IFBsdWdpbkluZm87Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IGRiLT5wbHVn
aW5zKClbaV07Ci0KLSAgICBpbmZvLT5uYW1lID0gcGFja2FnZS0+bmFtZSgpOwotICAgIGluZm8t
PmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOwotICAgIGluZm8tPmRlc2MgPSBwYWNrYWdlLT5k
ZXNjcmlwdGlvbigpOwotCi0gICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9E
ZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKLSAgICBNSU1FVG9E
ZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5l
bmQoKTsKLSAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IE1pbWVDbGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKLSAgICAgICAgaW5mby0+
bWltZXMuYXBwZW5kKG1pbWUpOwotICAgICAgICAKLSAgICAgICAgbWltZS0+dHlwZSA9IGl0LT5m
aXJzdDsKLSAgICAgICAgbWltZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIG1pbWUtPnBs
dWdpbiA9IGluZm87Ci0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHBhY2th
Z2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlwZSk7Ci0gICAgICAgIAotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgewotICAg
ICAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9ICIs
IjsKLQotICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBpbmZvOwotfQotCi11bnNpZ25lZCBQbHVnSW5JbmZv
U3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VX
aW46Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKLX0KLQotCi1TdHJpbmcg
UGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKLXsKLSAgICAvLyBGSVhNRSA1NjI5MTM5OiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb24g
V2luZG93cy4KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLSAgICAKLWJvb2wgUGx1Z0luSW5m
b1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWltZVR5cGUp
IAotewotICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5p
c01JTUVUeXBlUmVnaXN0ZXJlZChtaW1lVHlwZSk7Ci19Ci0KLXZvaWQgcmVmcmVzaFBsdWdpbnMo
Ym9vbCByZWxvYWRPcGVuUGFnZXMpCi17Ci0gICAgUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxl
ZFBsdWdpbnMoKS0+cmVmcmVzaCgpOwotCi0gICAgaWYgKHJlbG9hZE9wZW5QYWdlcykgewotICAg
ICAgICAvLyBGSVhNRTogcmVsb2FkIG9wZW4gcGFnZXMKLSAgICB9Ci19Ci0KLX0KSW5kZXg6IFdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCShyZXZpc2lvbiAyOTcyNCkK
KysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw5ICsyNCw5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlBsdWdpbkRhdGFiYXNlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKIAot
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgi
CiAjaW5jbHVkZSAiUGx1Z2luVmlld1dpbi5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSA8d2luZG93cy5oPgpAQCAtMzQsOTEgKzM0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QbHVnaW5EYXRhYmFzZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMo
KQotewotICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZVdpbiogcGx1Z2lucyA9IDA7Ci0gICAgCi0g
ICAgaWYgKCFwbHVnaW5zKSB7Ci0gICAgICAgIHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2VX
aW47Ci0gICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBsdWdpbkRhdGFiYXNlV2luOjpk
ZWZhdWx0UGx1Z2luUGF0aHMoKSk7Ci0gICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcGx1Z2luczsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZVdpbjo6YWRk
RXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBtX3BsdWdpblBhdGhz
LmFwcGVuZChwYXRoKTsKLSAgICByZWZyZXNoKCk7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2VX
aW46OnJlZnJlc2goKQoteyAgIAotICAgIFBsdWdpblNldCBuZXdQbHVnaW5zOwotCi0gICAgYm9v
bCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7Ci0KLSAgICAvLyBDcmVhdGUgYSBuZXcgc2V0IG9m
IHBsdWdpbnMKLSAgICBuZXdQbHVnaW5zID0gZ2V0UGx1Z2luc0luUGF0aHMoKTsKLQotICAgIGlm
ICghbV9wbHVnaW5zLmlzRW1wdHkoKSkgewotICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMu
Y2xlYXIoKTsKLQotICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkID0gbV9wbHVnaW5z
OwotCi0gICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5l
bmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1
Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBwbHVnaW5zVG9Vbmxv
YWQucmVtb3ZlKCppdCk7Ci0KLSAgICAgICAgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgICAg
ICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgbmV3UGx1Z2lucy5yZW1vdmUoKml0KTsKLQot
ICAgICAgICAvLyBVbmxvYWQgcGx1Z2lucwotICAgICAgICBlbmQgPSBwbHVnaW5zVG9VbmxvYWQu
ZW5kKCk7Ci0gICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsdWdp
bnNUb1VubG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtX3BsdWdp
bnMucmVtb3ZlKCppdCk7Ci0KLSAgICAgICAgLy8gQWRkIG5ldyBwbHVnaW5zCi0gICAgICAgIGVu
ZCA9IG5ld1BsdWdpbnMuZW5kKCk7Ci0gICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgbV9wbHVnaW5zLmFkZCgqaXQpOwotCi0gICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhcGx1
Z2luc1RvVW5sb2FkLmlzRW1wdHkoKSB8fCAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbV9wbHVnaW5zID0gbmV3UGx1Z2luczsKLSAgICAgICAgUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOwotICAgICAgICBmb3IgKFBs
dWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKLQotICAgICAgICBwbHVn
aW5TZXRDaGFuZ2VkID0gIW5ld1BsdWdpbnMuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIC8vIFJl
Z2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcwotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgLy8g
R2V0IE1JTUUgdHlwZXMKLSAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOwotICAgICAg
ICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCpp
dCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21h
cF9pdCkgewotICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZp
cnN0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW5TZXRDaGFuZ2VkOwot
fQotCi1WZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IFBsdWdpbkRhdGFiYXNlV2luOjpwbHVnaW5z
KCkgY29uc3QKLXsKLSAgICBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IHJlc3VsdDsKLQotICAg
IFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIGZv
ciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoKCppdCkuZ2V0KCkpOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVn
aXN0cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMpCiB7CiAgICAgSEtFWSBrZXk7
CkBAIC0xNTAsNyArNjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkUGx1Z2luc0Zyb21SZWdp
c3RyCiAgICAgICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0V4KHBhdGhTdHIsIEdldEZpbGVFeElu
Zm9TdGFuZGFyZCwgJmF0dHJpYnV0ZXMpID09IDApCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gUGx1Z2luUGFja2FnZVdpbjo6Y3Jl
YXRlUGFja2FnZShTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBzaXplb2YoV0NIQVIpIC0g
MSksIGF0dHJpYnV0ZXMuZnRMYXN0V3JpdGVUaW1lKTsKKyAgICAgICAgUGx1Z2luUGFja2FnZSog
cGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoU3RyaW5nKHBhdGhTdHIsIHBh
dGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBhdHRyaWJ1dGVzLmZ0TGFzdFdyaXRlVGlt
ZSk7CiAKICAgICAgICAgaWYgKHBhY2thZ2UpCiAgICAgICAgICAgICBwbHVnaW5zLmFkZChwYWNr
YWdlKTsKQEAgLTE1OSw3ICs3NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5zRnJv
bVJlZ2lzdHIKICAgICBSZWdDbG9zZUtleShrZXkpOwogfQogCi1QbHVnaW5TZXQgUGx1Z2luRGF0
YWJhc2VXaW46OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QKK1BsdWdpblNldCBQbHVnaW5EYXRh
YmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0LgogICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlx
dWVGaWxlbmFtZXM7CkBAIC0xNjgsOCArODMsOCBAQCBQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VX
aW46OmdldFBsdWdpbnNJCiAgICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7
CiAgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7CiAKLSAgICBQbHVnaW5QYWNrYWdl
V2luKiBvbGRXTVBQbHVnaW4gPSAwOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIG5ld1dNUFBsdWdp
biA9IDA7CisgICAgUGx1Z2luUGFja2FnZSogb2xkV01QUGx1Z2luID0gMDsKKyAgICBQbHVnaW5Q
YWNrYWdlKiBuZXdXTVBQbHVnaW4gPSAwOwogCiAgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7CiAgICAgZm9yIChWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewpAQCAtMTkzLDcgKzEwOCw3IEBAIFBsdWdpblNldCBQbHVnaW5EYXRhYmFzZVdpbjo6
Z2V0UGx1Z2luc0kKICAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0
aCkuc2Vjb25kKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAg
ICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlV2luOjpj
cmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1lKTsKKyAg
ICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpj
cmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1lKTsKIAog
ICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKICAgICAgICAgICAgICAgICBwbHVnaW5z
LmFkZChwbHVnaW5QYWNrYWdlKTsKQEAgLTQxOSw3ICszMzQsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgYWRkTWFjcm9tZWRpYVBsdWdpblBhCiAgICAgcGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJl
Y3RvcnlTdHIpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZVdpbjo6ZGVmYXVs
dFBsdWdpblBhdGhzKCkKK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1
Z2luUGF0aHMoKQogewogICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwogICAgIFN0cmluZyBvdXJQ
YXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKQEAgLTQzNSwxMDYgKzM1MCwxNCBAQCBWZWN0b3I8
U3RyaW5nPiBQbHVnaW5EYXRhYmFzZVdpbjo6ZGVmYXVsCiAgICAgcmV0dXJuIHBhdGhzOwogfQog
Ci1ib29sIFBsdWdpbkRhdGFiYXNlV2luOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQotewotICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5
cGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0
cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIHJldHVy
biAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkp
OwotfQotCi1QbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6cGx1Z2luRm9yTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJl
ZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiB7Ci0gICAgaWYgKG1p
bWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTdHJpbmcga2V5ID0g
bWltZVR5cGUubG93ZXIoKTsKICAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRo
KCk7Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gMDsKLSAgICBQbHVnaW5TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLQotICAgIGZvciAoUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkp
KSB7Ci0gICAgICAgICAgICBwbHVnaW4gPSAoKml0KS5nZXQoKTsKLSAgICAgICAgICAgIC8vIHBy
ZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgIGlm
IChwbHVnaW4tPnBhcmVudERpcmVjdG9yeSgpID09IG91clBhdGgpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcGx1Z2luOwotfQogCi1TdHJp
bmcgUGx1Z2luRGF0YWJhc2VXaW46Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
ZXh0ZW5zaW9uKSBjb25zdAotewotICAgIGlmIChleHRlbnNpb24uaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRo
KCk7Ci0gICAgU3RyaW5nIG1pbWVUeXBlOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9
IDA7Ci0KLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQo
KTsKLQotICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1p
bWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7IG1pbWVfaXQgIT0gbWlt
ZV9lbmQ7ICsrbWltZV9pdCkgewotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4
dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+Zmlyc3Q7Ci0gICAgICAgICAgICAgICAgICAg
IHBsdWdpbiA9ICgqaXQpLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAvLyBwcmVmZXIgcGx1
Z2lucyBpbiBvdXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChwbHVnaW4tPnBhcmVudERpcmVjdG9yeSgpID09IG91clBhdGgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9CisgICAgaWYgKCFvdXJQYXRoLmlzTnVsbCgpICYmICFwYXRoLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gb3VyUGF0aCA9PSBwYXRoOwogCi0gICAgcmV0dXJuIG1pbWVUeXBlOwot
fQotCi1QbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6ZmluZFBsdWdpbihjb25z
dCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCi17ICAgCi0gICAgUGx1Z2luUGFja2FnZVdp
biogcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOwotICAgIFN0cmluZyBmaWxl
bmFtZSA9IHVybC5zdHJpbmcoKTsKLSAgICAKLSAgICBpZiAoIXBsdWdpbikgewotICAgICAgICBT
dHJpbmcgZmlsZW5hbWUgPSB1cmwubGFzdFBhdGhDb21wb25lbnQoKTsKLSAgICAgICAgaWYgKCFm
aWxlbmFtZS5lbmRzV2l0aCgiLyIpKSB7Ci0gICAgICAgICAgICBpbnQgZXh0ZW5zaW9uUG9zID0g
ZmlsZW5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKLSAgICAgICAgICAgIGlmIChleHRlbnNpb25Qb3Mg
IT0gLTEpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vi
c3RyaW5nKGV4dGVuc2lvblBvcyArIDEpOwotCi0gICAgICAgICAgICAgICAgbWltZVR5cGUgPSBN
SU1FVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24pOwotICAgICAgICAgICAgICAgIHBsdWdpbiA9
IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5
IFdpbmRvd3MgZm9yIHRoZSBtaW1lIHR5cGUgCi0gICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUg
ZXh0ZW5zaW9uLgotCi0gICAgcmV0dXJuIHBsdWdpbjsKLX0KLQotUGx1Z2luVmlld1dpbiogUGx1
Z2luRGF0YWJhc2VXaW46OmNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25z
dCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1W
YWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQotewotICAg
IC8vIGlmIHdlIGZhaWwgdG8gZmluZCBhIHBsdWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZpbmRQ
bHVnaW4gd2lsbCBzZWFyY2ggZm9yCi0gICAgLy8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0ZW5z
aW9uIGFuZCB1cGRhdGUgdGhlIE1JTUUgdHlwZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5nCi0g
ICAgU3RyaW5nIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOwotICAgIFBsdWdpblBhY2thZ2VXaW4q
IHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOwotICAgIAotICAgIC8vIE5v
IHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNo
aW5nIGFnYWluCi0gICAgaWYgKCFwbHVnaW4gJiYgcmVmcmVzaCgpKSB7Ci0gICAgICAgIG1pbWVU
eXBlQ29weSA9IG1pbWVUeXBlOwotICAgICAgICBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWlt
ZVR5cGVDb3B5KTsKLSAgICB9Ci0gICAgICAgIAotICAgIHJldHVybiBuZXcgUGx1Z2luVmlld1dp
bihwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBh
cmFtVmFsdWVzLCBtaW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSk7CisgICAgcmV0dXJuIGZhbHNl
OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5oCShy
ZXZpc2lvbiAyOTcyNCkKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgUGx1Z2luRGF0YWJhc2VXaW5fSAotI2RlZmluZSBQbHVnaW5EYXRhYmFzZVdpbl9ICi0KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgotI2lu
Y2x1ZGUgIlN0cmluZ0hhc2guaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEVs
ZW1lbnQ7Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgSW50U2l6ZTsKLSAgICBjbGFzcyBL
VVJMOwotICAgIGNsYXNzIFBsdWdpblBhY2thZ2VXaW47Ci0gICAgY2xhc3MgUGx1Z2luVmlld1dp
bjsKLQotICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4sIFBsdWdp
blBhY2thZ2VXaW5IYXNoPiBQbHVnaW5TZXQ7Ci0gIAotICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNl
V2luIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZVdpbiogaW5z
dGFsbGVkUGx1Z2lucygpOwotICAgICAgICBQbHVnaW5WaWV3V2luKiBjcmVhdGVQbHVnaW5WaWV3
KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBs
b2FkTWFudWFsbHkpOwotCi0gICAgICAgIGJvb2wgcmVmcmVzaCgpOwotICAgICAgICBWZWN0b3I8
UGx1Z2luUGFja2FnZVdpbio+IHBsdWdpbnMoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc01JTUVU
eXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgdm9pZCBhZGRF
eHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJik7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9p
ZCBzZXRQbHVnaW5QYXRocyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsgbV9wbHVnaW5Q
YXRocyA9IHBhdGhzOyB9Ci0gICAgICAgIFBsdWdpblNldCBnZXRQbHVnaW5zSW5QYXRocygpIGNv
bnN0OwotCi0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIGZpbmRQbHVnaW4oY29uc3QgS1VSTCYg
dXJsLCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2lu
Rm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIFN0cmluZyBNSU1F
VHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3Q7Ci0KLSAgICAg
ICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5QYXRocygpOwotCi0gICAgICAg
IFZlY3RvcjxTdHJpbmc+IG1fcGx1Z2luUGF0aHM7Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBt
X3JlZ2lzdGVyZWRNSU1FVHlwZXM7Ci0gICAgICAgIFBsdWdpblNldCBtX3BsdWdpbnM7Ci0gICAg
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAkocmV2aXNpb24gMjk3MjQpCisrKyBXZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3
ICsyNiw3IEBACiAjaW5jbHVkZSA8c2hsd2FwaS5oPgogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
IAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgpAQCAt
MzUsMTEgKzM1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QbHVnaW5QYWNrYWdlV2lu
Ojp+UGx1Z2luUGFja2FnZVdpbigpCi17Ci0gICAgQVNTRVJUKCFtX2lzTG9hZGVkKTsKLX0KLQog
c3RhdGljIFN0cmluZyBnZXRWZXJzaW9uSW5mbyhjb25zdCBMUFZPSUQgdmVyc2lvbkluZm9EYXRh
LCBjb25zdCBTdHJpbmcmIGluZm8pCiB7CiAgICAgTFBWT0lEIGJ1ZmZlcjsKQEAgLTgzLDU5ICs3
OCwyMiBAQCBzdGF0aWMgVmVjdG9yPFN0cmluZz4gc3BsaXRTdHJpbmcoY29uc3QgCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVNvb24o
KQotewotICAgIEFTU0VSVCghbV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpOwotICAgIEFT
U0VSVChtX21vZHVsZSk7Ci0gICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOwotCi0gICAgbV9m
cmVlTGlicmFyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdl
V2luOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luUGFja2FnZVdpbj4qIC8qdGlt
ZXIqLykKLXsKLSAgICBBU1NFUlQobV9tb2R1bGUpOwotICAgIEFTU0VSVChtX2xvYWRDb3VudCA9
PSAwKTsKLQotICAgIDo6RnJlZUxpYnJhcnkobV9tb2R1bGUpOwotICAgIG1fbW9kdWxlID0gMDsK
LX0KLQotUGx1Z2luUGFja2FnZVdpbjo6UGx1Z2luUGFja2FnZVdpbihjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpCi0gICAgOiBtX3BhdGgocGF0aCkKLSAg
ICAsIG1fbW9kdWxlKDApCi0gICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpCi0gICAg
LCBtX2lzTG9hZGVkKGZhbHNlKQotICAgICwgbV9sb2FkQ291bnQoMCkKLSAgICAsIG1fZnJlZUxp
YnJhcnlUaW1lcih0aGlzLCAmUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlUaW1lckZpcmVk
KQotICAgICwgbV9maWxlVmVyc2lvbkxTKDApCi0gICAgLCBtX2ZpbGVWZXJzaW9uTVMoMCkKK2Jv
b2wgUGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCgpIGNvbnN0CiB7Ci0gICAgbV9m
aWxlTmFtZSA9IFN0cmluZyhQYXRoRmluZEZpbGVOYW1lKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpKSk7Ci0gICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdCht
X3BhdGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7Ci19CisgICAgc3RhdGlj
IGNvbnN0IERXT1JEIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCA9
IDB4MDAwMTAwMDA7CisgICAgc3RhdGljIGNvbnN0IERXT1JEIHNpbHZlcmxpZ2h0UGx1Z2luTWlu
UmVxdWlyZWRWZXJzaW9uTFNEV09SRCA9IDB4NTFCRTAwMDA7CiAKLXZvaWQgUGx1Z2luUGFja2Fn
ZVdpbjo6c3RvcmVGaWxlVmVyc2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKQotewogICAgIFZT
X0ZJWEVERklMRUlORk8qIGluZm87CiAgICAgVUlOVCBpbmZvU2l6ZTsKICAgICBpZiAoIVZlclF1
ZXJ5VmFsdWUodmVyc2lvbkluZm9EYXRhLCBURVhUKCJcXCIpLCAoTFBWT0lEKikgJmluZm8sICZp
bmZvU2l6ZSkgfHwgaW5mb1NpemUgPCBzaXplb2YoVlNfRklYRURGSUxFSU5GTykpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2ZpbGVWZXJzaW9uTFMgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTFM7Ci0g
ICAgbV9maWxlVmVyc2lvbk1TID0gaW5mby0+ZHdGaWxlVmVyc2lvbk1TOwotfQotCi1ib29sIFBs
dWdpblBhY2thZ2VXaW46OmlzUGx1Z2luQmxhY2tsaXN0ZWQoKQotewotICAgIHN0YXRpYyBjb25z
dCBEV09SRCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgPSAweDAw
MDEwMDAwOwotICAgIHN0YXRpYyBjb25zdCBEV09SRCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVp
cmVkVmVyc2lvbkxTRFdPUkQgPSAweDUxQkUwMDAwOworICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIGlmIChuYW1lKCkgPT0gIlNpbHZlcmxpZ2h0IFBsdWctSW4iKSB7CiAgICAgICAgIC8vIHdv
cmthcm91bmQgZm9yIDxyZGFyOi8vNTU1NzM3OT4gQ3Jhc2ggaW4gU2lsdmVybGlnaHQgd2hlbiBv
cGVuaW5nIG1pY3Jvc29mdC5jb20uCiAgICAgICAgIC8vIHRoZSBsYXRlc3QgMS4wIHZlcnNpb24g
b2YgU2lsdmVybGlnaHQgZG9lcyBub3QgcmVwcm9kdWNlIHRoaXMgY3Jhc2gsIHNvIGFsbG93IGl0
CiAgICAgICAgIC8vIGFuZCBhbnkgbmV3ZXIgdmVyc2lvbnMKLSAgICAgICAgaWYgKG1fZmlsZVZl
cnNpb25NUyA8IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCB8fAot
ICAgICAgICAgICAgKG1fZmlsZVZlcnNpb25NUyA9PSBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVp
cmVkVmVyc2lvbk1TRFdPUkQgJiYgbV9maWxlVmVyc2lvbkxTIDwgc2lsdmVybGlnaHRQbHVnaW5N
aW5SZXF1aXJlZFZlcnNpb25MU0RXT1JEKSkKKyAgICAgICAgaWYgKGluZm8tPmR3RmlsZVZlcnNp
b25NUyA8IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCB8fAorICAg
ICAgICAgICAgKGluZm8tPmR3RmlsZVZlcnNpb25NUyA9PSBzaWx2ZXJsaWdodFBsdWdpbk1pblJl
cXVpcmVkVmVyc2lvbk1TRFdPUkQgJiYgaW5mby0+ZHdGaWxlVmVyc2lvbkxTIDwgc2lsdmVybGln
aHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25MU0RXT1JEKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0gZWxzZSBpZiAoZmlsZU5hbWUoKSA9PSAibnBtb3pheC5kbGwiKQogICAgICAg
ICAvLyBCdWcgMTUyMTc6IE1vemlsbGEgQWN0aXZlWCBjb250cm9sIGNvbXBsYWlucyBhYm91dCBt
aXNzaW5nIHhwY29tX2NvcmUuZGxsCkBAIC0xNDQsNyArMTAyLDcgQEAgYm9vbCBQbHVnaW5QYWNr
YWdlV2luOjppc1BsdWdpbkJsYWNrbGlzdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBQ
bHVnaW5QYWNrYWdlV2luOjpmZXRjaEluZm8oKQorYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaElu
Zm8oKQogewogICAgIERXT1JEIHZlcnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsKICAgICB2ZXJz
aW9uSW5mb1NpemUgPSBHZXRGaWxlVmVyc2lvbkluZm9TaXplVyhtX3BhdGguY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSwgJnplcm9IYW5kbGUpOyAKQEAgLTE2Nyw4ICsxMjUsNiBAQCBi
b29sIFBsdWdpblBhY2thZ2VXaW46OmZldGNoSW5mbygpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBzdG9yZUZpbGVWZXJzaW9uKHZlcnNpb25JbmZvRGF0YSk7Ci0KICAgICBp
ZiAoaXNQbHVnaW5CbGFja2xpc3RlZCgpKSB7CiAgICAgICAgIGZhc3RGcmVlKHZlcnNpb25JbmZv
RGF0YSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIwMSw3ICsxNTcsNyBAQCBib29sIFBs
dWdpblBhY2thZ2VXaW46OmZldGNoSW5mbygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
UGx1Z2luUGFja2FnZVdpbjo6bG9hZCgpCitib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQogewog
ICAgIGlmIChtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSkgewogICAgICAgICBBU1NFUlQo
bV9tb2R1bGUpOwpAQCAtMzE1LDUxICsyNzEsNyBAQCBhYm9ydDoKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgUGx1Z2luUGFja2FnZVdpbjo6dW5sb2FkKCkKLXsKLSAgICBpZiAoIW1faXNM
b2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9OUFBfU2h1dGRvd24oKTsKLQotICAgIHVubG9hZFdpdGhv
dXRTaHV0ZG93bigpOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2VXaW46OnVubG9hZFdpdGhvdXRT
aHV0ZG93bigpCi17Ci0gICAgaWYgKCFtX2lzTG9hZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQobV9sb2FkQ291bnQgPT0gMCk7Ci0gICAgQVNTRVJUKG1fbW9kdWxlKTsKLQotICAg
IC8vIDxyZGFyOi8vNTUzMDUxOT46IENyYXNoIHdoZW4gY2xvc2luZyB0YWIgd2l0aCBwZGYgZmls
ZSAoUmVhZGVyIDcgb25seSkKLSAgICAvLyBJZiB0aGUgcGx1Z2luIGhhcyBzdWJjbGFzc2VkIGl0
cyBwYXJlbnQgd2luZG93LCBhcyB3aXRoIFJlYWRlciA3LCB3ZSBtYXkgaGF2ZQotICAgIC8vIGdv
dHRlbiBoZXJlIGJ5IHdheSBvZiB0aGUgcGx1Z2luJ3MgaW50ZXJuYWwgd2luZG93IHByb2MgZm9y
d2FyZGluZyBhIG1lc3NhZ2UgdG8gb3VyCi0gICAgLy8gb3JpZ2luYWwgd2luZG93IHByb2MuIElm
IHdlIGZyZWUgdGhlIHBsdWdpbiBsaWJyYXJ5IGZyb20gaGVyZSwgd2Ugd2lsbCBqdW1wIGJhY2sK
LSAgICAvLyB0byBjb2RlIHdlIGp1c3QgZnJlZWQgd2hlbiB3ZSByZXR1cm4sIHNvIGRlbGF5IGNh
bGxpbmcgRnJlZUxpYnJhcnkgYXQgbGVhc3QgdW50aWwKLSAgICAvLyB0aGUgbmV4dCBtZXNzYWdl
IGxvb3AKLSAgICBmcmVlTGlicmFyeVNvb24oKTsKLQotICAgIG1faXNMb2FkZWQgPSBmYWxzZTsK
LX0KLQotUGx1Z2luUGFja2FnZVdpbiogUGx1Z2luUGFja2FnZVdpbjo6Y3JlYXRlUGFja2FnZShj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpCi17Ci0gICAg
UGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IG5ldyBQbHVnaW5QYWNrYWdlV2luKHBhdGgsIGxh
c3RNb2RpZmllZCk7Ci0KLSAgICBpZiAoIXBhY2thZ2UtPmZldGNoSW5mbygpKSB7Ci0gICAgICAg
IGRlbGV0ZSBwYWNrYWdlOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHBhY2thZ2U7Ci19Ci0KLXVuc2lnbmVkIFBsdWdpblBhY2thZ2VXaW46Omhhc2goKSBjb25z
dAordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0CiB7IAogICAgIHVuc2lnbmVk
IGhhc2hDb2Rlc1szXSA9IHsKICAgICAgICAgbV9kZXNjcmlwdGlvbi5pbXBsKCktPmhhc2goKSwK
QEAgLTM3MCw3ICsyODIsNyBAQCB1bnNpZ25lZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29u
c3QKICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxV
Q2hhcio+KGhhc2hDb2RlcyksIDMgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9mKFVDaGFyKSk7
CiB9CiAKLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZVdp
biYgYSwgY29uc3QgUGx1Z2luUGFja2FnZVdpbiYgYikKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZXF1
YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYikKIHsKICAg
ICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbiAmJiAoQ29tcGFyZUZp
bGVUaW1lKCZhLm1fbGFzdE1vZGlmaWVkLCAmYi5tX2xhc3RNb2RpZmllZCkgPT0gMCk7CiB9Cklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uaAkocmV2aXNpb24gMjk3MjQp
CisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBsdWdpblBhY2th
Z2VXaW5fSAotI2RlZmluZSBQbHVnaW5QYWNrYWdlV2luX0gKLQotI2luY2x1ZGUgPHdpbnNvY2sy
Lmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRl
ICJTdHJpbmdIYXNoLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJu
cGZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOwotICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKLQotICAgIGNs
YXNzIFBsdWdpblBhY2thZ2VXaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlV2lu
PiB7Ci0gICAgcHVibGljOgotICAgICAgICB+UGx1Z2luUGFja2FnZVdpbigpOwotICAgICAgICBz
dGF0aWMgUGx1Z2luUGFja2FnZVdpbiogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpOwotICAgICAgICAKLSAgICAgICAgU3RyaW5n
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICAgICAgU3RyaW5nIGRlc2NyaXB0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQotICAgICAgICBTdHJpbmcgZmls
ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9Ci0gICAgICAgIFN0cmluZyBwYXJl
bnREaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudERpcmVjdG9yeTsgfQotCi0gICAg
ICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KLSAgICAgICAgY29uc3QgTUlNRVRv
RXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRv
RXh0ZW5zaW9uczsgfQotCi0gICAgICAgIHVuc2lnbmVkIFBsdWdpblBhY2thZ2VXaW46Omhhc2go
KSBjb25zdDsKLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZVdp
biYgYSwgY29uc3QgUGx1Z2luUGFja2FnZVdpbiYgYik7Ci0KLSAgICAgICAgYm9vbCBsb2FkKCk7
Ci0gICAgICAgIHZvaWQgdW5sb2FkKCk7Ci0gICAgICAgIHZvaWQgdW5sb2FkV2l0aG91dFNodXRk
b3duKCk7Ci0KLSAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25z
dCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIFBsdWdp
blBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlm
aWVkKTsKLSAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKLSAgICAgICAgdm9pZCBzdG9yZUZpbGVW
ZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpOwotICAgICAgICBib29sIGlzUGx1Z2luQmxh
Y2tsaXN0ZWQoKTsKLQotICAgICAgICBib29sIG1faXNMb2FkZWQ7Ci0gICAgICAgIGludCBtX2xv
YWRDb3VudDsKLQotICAgICAgICBEV09SRCBtX2ZpbGVWZXJzaW9uTVM7Ci0gICAgICAgIERXT1JE
IG1fZmlsZVZlcnNpb25MUzsKLQotICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKLSAgICAg
ICAgU3RyaW5nIG1fcGF0aDsKLSAgICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7Ci0gICAgICAgIFN0
cmluZyBtX25hbWU7Ci0gICAgICAgIFN0cmluZyBtX3BhcmVudERpcmVjdG9yeTsKLQotICAgICAg
ICBNSU1FVG9EZXNjcmlwdGlvbnNNYXAgbV9taW1lVG9EZXNjcmlwdGlvbnM7Ci0gICAgICAgIE1J
TUVUb0V4dGVuc2lvbnNNYXAgbV9taW1lVG9FeHRlbnNpb25zOwotCi0gICAgICAgIEhNT0RVTEUg
bV9tb2R1bGU7Ci0gICAgICAgIEZJTEVUSU1FIG1fbGFzdE1vZGlmaWVkOwotCi0gICAgICAgIE5Q
UF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247Ci0gICAgICAgIE5QUGx1Z2luRnVuY3Mg
bV9wbHVnaW5GdW5jczsKLSAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOwot
Ci0gICAgICAgIHZvaWQgZnJlZUxpYnJhcnlTb29uKCk7Ci0gICAgICAgIHZvaWQgZnJlZUxpYnJh
cnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+Kik7Ci0gICAgICAgIFRpbWVyPFBs
dWdpblBhY2thZ2VXaW4+IG1fZnJlZUxpYnJhcnlUaW1lcjsKLSAgICB9OwotCi0gICAgc3RydWN0
IFBsdWdpblBhY2thZ2VXaW5IYXNoIHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgaW50IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlV2luKj4o
a2V5KS0+aGFzaCgpOyB9Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0
cjxQbHVnaW5QYWNrYWdlV2luPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQotCi0gICAg
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4g
ZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlV2luKj4oYSksIHJlaW50ZXJwcmV0
X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGIpKTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5Q
YWNrYWdlV2luPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZVdpbjo6ZXF1YWwoKmEuZ2V0KCks
ICpiLmdldCgpKTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IGZhbHNlOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJl
IGl0J3MgaW1wb3NzaWJsZSB0byB1c2UgYSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBk
ZWZhdWx0IHRyYWl0cy4KLS8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhv
dXQgYSBTdG9yYWdlVHJhaXRzIHNwZWNpYWxpemF0aW9uLgotbmFtZXNwYWNlIFdURiB7Ci0gICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFj
a2FnZVdpbkhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW4+
ID4gPiB7Ci0gICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlV2luPik+OjpTaWduZWRUeXBlIEludFR5cGU7Ci0gICAgICAgIHR5cGVkZWYg
V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbkhhc2ggSGFzaDsKLSAgICAgICAgdHlwZWRlZiBIYXNo
VHJhaXRzPEludFR5cGU+IFRyYWl0czsKLSAgICB9OwotfQotCi0KLSNlbmRpZgpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCShyZXZpc2lvbiAyOTcyNCkKKysrIFdlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NjQs
NCArMTY2NCwyMCBAQCBib29sIFBsdWdpblZpZXdXaW46OmlzQ2FsbGluZ1BsdWdpbigpCiAgICAg
cmV0dXJuIHNfY2FsbGluZ1BsdWdpbiA+IDA7CiB9CiAKK1BsdWdpblZpZXdXaW4qIFBsdWdpblZp
ZXdXaW46OmNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQoreworICAgIC8vIGlmIHdl
IGZhaWwgdG8gZmluZCBhIHBsdWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZpbmRQbHVnaW4gd2ls
bCBzZWFyY2ggZm9yCisgICAgLy8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGFuZCB1
cGRhdGUgdGhlIE1JTUUgdHlwZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5nCisgICAgU3RyaW5n
IG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IFBs
dWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4odXJsLCBtaW1lVHlw
ZUNvcHkpOworICAgIAorICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5n
IHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCisgICAgaWYgKCFwbHVnaW4gJiYgcmVm
cmVzaCgpKSB7CisgICAgICAgIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOworICAgICAgICBwbHVn
aW4gPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5maW5kUGx1Z2luKHVybCwg
bWltZVR5cGVDb3B5KTsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVybiBuZXcgUGx1Z2luVmll
d1dpbihwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMs
IHBhcmFtVmFsdWVzLCBtaW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5oCShyZXZp
c2lvbiAyOTcyNCkKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBNb3VzZUV2ZW50OwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbjsKLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdlV2luOworICAgIGNsYXNzIFBsdWdp
blBhY2thZ2U7CiAgICAgY2xhc3MgUGx1Z2luUmVxdWVzdFdpbjsKICAgICBjbGFzcyBQbHVnaW5T
dHJlYW07CiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKQEAgLTg2LDEwICs4NiwxMiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgZnJpZW5kIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFBsdWdp
blZpZXdXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKIAogICAgIHB1YmxpYzoK
LSAgICAgICAgUGx1Z2luVmlld1dpbihGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUm
LCBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4sIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZh
bHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworICAgICAg
ICBzdGF0aWMgUGx1Z2luVmlld1dpbiogY3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJh
bWUsIGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkp
OworCisgICAgICAgIFBsdWdpblZpZXdXaW4oRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRT
aXplJiwgUGx1Z2luUGFja2FnZSogcGx1Z2luLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1W
YWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKICAgICAg
ICAgdmlydHVhbCB+UGx1Z2luVmlld1dpbigpOwogCi0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4q
IHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9CisgICAgICAgIFBsdWdp
blBhY2thZ2UqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9CiAgICAg
ICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KIAogICAgICAg
ICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7CkBAIC0xNTYsNyArMTU4LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBOUEVycm9yIGxvYWQoY29uc3QgRnJhbWVM
b2FkUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7CiAg
ICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlm
eURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOwogICAgICAg
ICB2b2lkIHNldENhbGxpbmdQbHVnaW4oYm9vbCkgY29uc3Q7Ci0gICAgICAgIFJlZlB0cjxQbHVn
aW5QYWNrYWdlV2luPiBtX3BsdWdpbjsKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IG1f
cGx1Z2luOwogICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgICAgIEZyYW1lKiBtX3Bh
cmVudEZyYW1lOwogICAgICAgICBib29sIG1faXNTdGFydGVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18619</attachid>
            <date>2008-01-23 08:43:26 -0800</date>
            <delta_ts>2008-01-23 08:55:48 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>webkit-more-shared-plugin-api.patch</filename>
            <type>text/plain</type>
            <size>123013</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkocmV2aXNpb24gMjk3NDEpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC04NDUsNiArODQ1LDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNv
ZGVSYW5nZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcCBcCisJV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkluZm9T
dG9yZS5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBcCiAJV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJs
ZUxheW91dC5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNp
b24gMjk3NDEpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC03Nzks
NiArNzc5LDkgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vVGltZXIuY3BwIFwKICAgICBw
bGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5jcHAgXAogICAgIHBsYXRmb3JtL1dpZGdldC5jcHAg
XAorICAgIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIFwKKyAgICBwbHVnaW5zL1BsdWdpbklu
Zm9TdG9yZS5jcHAgXAorICAgIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAgXAogICAgIHBsdWdp
bnMvUGx1Z2luU3RyZWFtLmNwcCBcCiAgICAgcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAg
XAogICAgIHJlbmRlcmluZy9iaWRpLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHJldmlzaW9uIDI5NzQxKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNzkyOSwxMCArNzkyOSwzMCBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5z
XFBsdWdpbkRhdGFiYXNlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuaCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2lu
RGVidWcuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsdWdpbnNcUGx1Z2luSW5mb1N0b3JlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2FnZS5j
cHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luU3RyZWFtLmNwcCINCiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCkBAIC03OTUyLDIyICs3OTcyLDEwIEBACiAJCQkJCT4NCiAJCQkJPC9G
aWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQbHVn
aW5EYXRhYmFzZVdpbi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcd2luXFBsdWdJbkluZm9TdG9yZVdpbi5jcHAiDQot
CQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGx1Z2luc1x3aW5cUGx1Z2luUGFja2FnZVdpbi5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4N
CiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luUGFj
a2FnZVdpbi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQogCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblZpZXdXaW4uY3BwIg0KIAkJCQkJPg0KIAkJ
CQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHJldmlzaW9uIDI5NzQxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDEwIEBACiAjaWZuZGVmIEZpbGVTeXN0ZW1faAogI2RlZmluZSBGaWxlU3lzdGVtX2gKIAorI2lm
IFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDxnbW9kdWxlLmg+CisjZW5kaWYKKwogI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgogCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGF0YSogQ0ZEYXRh
UmVmOwpAQCAtNDEsOSArNDUsMTcgQEAgY2xhc3MgU3RyaW5nOwogCiAjaWYgUExBVEZPUk0oV0lO
KQogdHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1GaWxlSGFuZGxlOwordHlwZWRlZiBGSUxFVElNRSBQ
bGF0Zm9ybUZpbGVUaW1lOwordHlwZWRlZiBITU9EVUxFIFBsYXRmb3JtTW9kdWxlOwogY29uc3Qg
UGxhdGZvcm1GaWxlSGFuZGxlIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgPSBJTlZBTElEX0hB
TkRMRV9WQUxVRTsKICNlbHNlCiB0eXBlZGVmIGludCBQbGF0Zm9ybUZpbGVIYW5kbGU7Cit0eXBl
ZGVmIHRpbWVfdCBQbGF0Zm9ybUZpbGVUaW1lOworI2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYg
R01vZHVsZSogUGxhdGZvcm1Nb2R1bGU7CisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybU1v
ZHVsZTsKKyNlbmRpZgogY29uc3QgUGxhdGZvcm1GaWxlSGFuZGxlIGludmFsaWRQbGF0Zm9ybUZp
bGVIYW5kbGUgPSAtMTsKICNlbmRpZgogCkBAIC01NCw2ICs2Niw3IEBAIGJvb2wgZmlsZVNpemUo
Y29uc3QgU3RyaW5nJiwgbG9uZyBsb25nJiAKIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCk7CiBib29sIG1h
a2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpOwogU3RyaW5nIGhvbWVEaXJlY3Rv
cnlQYXRoKCk7CitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYpOwogCiBDU3Ry
aW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmKTsKIApAQCAtNjQsNiAr
NzcsOSBAQCBDU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IGNoYXIqIHByCiB2b2lkIGNs
b3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOwogCisvKiBNZXRob2RzIGZv
ciBkZWFsaW5nIHdpdGggbG9hZGFibGUgbW9kdWxlcyAqLworYm9vbCB1bmxvYWRNb2R1bGUoUGxh
dGZvcm1Nb2R1bGUpOworCiAjaWYgUExBVEZPUk0oV0lOKQogU3RyaW5nIGxvY2FsVXNlclNwZWNp
ZmljU3RvcmFnZURpcmVjdG9yeSgpOwogU3RyaW5nIHJvYW1pbmdVc2VyU3BlY2lmaWNTdG9yYWdl
RGlyZWN0b3J5KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcAko
cmV2aXNpb24gMjk3NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiwyMCBAQCBib29sIG1ha2VBbGxEaXJlY3Rv
cmllcyhjb25zdCBTdHJpbmcmIHBhCiAgICAgcmV0dXJuIHJlc3VsdCA9PSAwOwogfQogCitTdHJp
bmcgaG9tZURpcmVjdG9yeVBhdGgoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGdf
Z2V0X2hvbWVfZGlyKCkpOworfQorCitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmlu
ZyYgcGF0aE5hbWUpCit7CisgICAgY2hhciogYmFzZU5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1l
KHBhdGhOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIFN0cmluZyBmaWxlTmFtZSA9IFN0cmluZzo6
ZnJvbVVURjgoYmFzZU5hbWUpOworICAgIGdfZnJlZShiYXNlTmFtZSk7CisKKyAgICByZXR1cm4g
ZmlsZU5hbWU7Cit9CisKIENTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgY2hhciogcHJl
Zml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKIHsKICAgICBnY2hhciogZmlsZW5hbWUg
PSBnX3N0cmR1cF9wcmludGYoIiVzWFhYWFhYIiwgcHJlZml4KTsKQEAgLTE0NSw0ICsxNTksOSBA
QCBpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsCiAKICAgICByZXR1cm4g
dG90YWxCeXRlc1dyaXR0ZW47CiB9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxl
IG1vZHVsZSkKK3sKKyAgICByZXR1cm4gZ19tb2R1bGVfY2xvc2UobW9kdWxlKTsKK30KIH0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNp
b24gMjk3NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4IEBACiAjaW5jbHVkZSAiRlRQRGlyZWN0b3J5
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJHbG9iYWxIaXN0b3J5LmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVn
aW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKQEAgLTU3LDEyICs1OCwxMCBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291
cmNlSW50b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNvbnN0
IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbkluZm8qIFBsdWdJ
bkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpw
bHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVN0cmlu
ZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfSAKLWJvb2wgV2Vi
Q29yZTo6UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFdlYkNvcmU6
OnJlZnJlc2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCitQbHVnaW5TZXQg
UGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QgeyBub3RJbXBsZW1lbnRl
ZCgpOyBQbHVnaW5TZXQgcGx1Z2luczsgcmV0dXJuIHBsdWdpbnM7fQorVmVjdG9yPFN0cmluZz4g
UGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpIHsgbm90SW1wbGVtZW50ZWQoKTsg
VmVjdG9yPFN0cmluZz4gcGF0aHM7IHJldHVybiBwYXRoczt9Citib29sIFBsdWdpbkRhdGFiYXNl
Ojppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJikgY29uc3QgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7fQogCiBDb2xvciBXZWJDb3JlOjpmb2N1
c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9j
dXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3F0L0ZpbGVTeXN0ZW1RdC5jcHAJKHJldmlzaW9uIDI5NzQxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxOCBA
QCBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0CiAgICAgcmV0dXJuIFFE
aXIocGF0aCkuZmlsZVBhdGgoY29tcG9uZW50KTsKIH0KIAorU3RyaW5nIHBhdGhHZXRGaWxlTmFt
ZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9CiAKIC8vIHZp
bTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCShyZXZpc2lvbiAyOTc0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9y
YXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksOCBAQAogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUg
IlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUg
IlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUgIlRleHRC
b3VuZGFyaWVzLmgiCkBAIC02OSw2ICs3MCwxMSBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAorUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0
IHsgbm90SW1wbGVtZW50ZWQoKTsgUGx1Z2luU2V0IHBsdWdpbnM7IHJldHVybiBwbHVnaW5zO30K
K1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSB7IG5v
dEltcGxlbWVudGVkKCk7IFZlY3RvcjxTdHJpbmc+IHBhdGhzOyByZXR1cm4gcGF0aHM7fQorYm9v
bCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpIGNv
bnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Citib29sIFBsdWdpblBhY2th
Z2U6OmZldGNoSW5mbygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlO30KKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRLZXlTaXplcygpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCShyZXZpc2lvbiAyOTc0MSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQs
NiArMTE0LDExIEBAIFN0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCiAgICAgcmV0dXJuICIiOwog
fQogCitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nKFBhdGhGaW5kRmlsZU5hbWUobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkpKTsKK30KKwogc3RhdGljIFN0cmluZyBidW5kbGVOYW1lKCkKIHsKICAgICBz
dGF0aWMgYm9vbCBpbml0aWFsaXplZDsKQEAgLTIwMiw2ICsyMDcsMTIgQEAgaW50IHdyaXRlVG9G
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbAogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4oYnl0ZXNXcml0dGVuKTsKIH0KKworYm9vbCB1bmxvYWRNb2R1
bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQoreworICAgIHJldHVybiA6OkZyZWVMaWJyYXJ5KG1v
ZHVsZSk7Cit9CisKIFN0cmluZyBsb2NhbFVzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKQog
ewogICAgIHJldHVybiBjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KENTSURMX0xPQ0FMX0FQUERBVEEp
OwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyOTYyNikJKGZy
b20gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHA6Mjk2MjYpCisrKyBX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQbHVnaW5EYXRhYmFzZVdpbi5oIgorCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgor
I2luY2x1ZGUgIlBsdWdpblZpZXdXaW4uaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
PHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxzaGx3YXBpLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGx1Z2luRGF0YWJhc2VXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5z
KCkKK3sKKyAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VXaW4qIHBsdWdpbnMgPSAwOworICAgIAor
ICAgIGlmICghcGx1Z2lucykgeworICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNl
V2luOworICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRhYmFzZVdpbjo6
ZGVmYXVsdFBsdWdpblBhdGhzKCkpOworICAgICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7CisgICAg
fQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2VXaW46OmFk
ZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgbV9wbHVnaW5QYXRo
cy5hcHBlbmQocGF0aCk7CisgICAgcmVmcmVzaCgpOworfQorCitib29sIFBsdWdpbkRhdGFiYXNl
V2luOjpyZWZyZXNoKCkKK3sgICAKKyAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsKKworICAgIGJv
b2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZhbHNlOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IHNldCBv
ZiBwbHVnaW5zCisgICAgbmV3UGx1Z2lucyA9IGdldFBsdWdpbnNJblBhdGhzKCk7CisKKyAgICBp
ZiAoIW1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVz
LmNsZWFyKCk7CisKKyAgICAgICAgUGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZCA9IG1fcGx1Z2lu
czsKKworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMu
ZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1Bs
dWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgcGx1Z2luc1RvVW5s
b2FkLnJlbW92ZSgqaXQpOworCisgICAgICAgIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICAg
ICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG5ld1BsdWdpbnMucmVtb3ZlKCppdCk7CisK
KyAgICAgICAgLy8gVW5sb2FkIHBsdWdpbnMKKyAgICAgICAgZW5kID0gcGx1Z2luc1RvVW5sb2Fk
LmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVn
aW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVn
aW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIEFkZCBuZXcgcGx1Z2lucworICAgICAgICBl
bmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
ICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBs
dWdpbnNUb1VubG9hZC5pc0VtcHR5KCkgfHwgIW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIG1fcGx1Z2lucyA9IG5ld1BsdWdpbnM7CisgICAgICAgIFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1
Z2luU2V0Q2hhbmdlZCA9ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICAvLyBS
ZWdpc3RlciBwbHVnLWluIE1JTUUgdHlwZXMKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIC8v
IEdldCBNSU1FIHR5cGVzCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKKyAgICAg
ICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgq
aXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOyBtYXBfaXQgIT0gbWFwX2VuZDsgKytt
YXBfaXQpIHsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5m
aXJzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdlZDsK
K30KKworVmVjdG9yPFBsdWdpblBhY2thZ2VXaW4qPiBQbHVnaW5EYXRhYmFzZVdpbjo6cGx1Z2lu
cygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2VXaW4qPiByZXN1bHQ7CisKKyAg
ICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBm
b3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5zRnJvbVJl
Z2lzdHJ5KEhLRVkgcm9vdEtleSwgUGx1Z2luU2V0JiBwbHVnaW5zKQoreworICAgIEhLRVkga2V5
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNvZnR3YXJl
XFxNb3ppbGxhUGx1Z2lucyIsIDAsIEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkpOworCisg
ICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICByZXR1cm47CisKKyAgICB3
Y2hhcl90IG5hbWVbMTI4XTsKKyAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7CisKKyAgICAvLyBF
bnVtZXJhdGUgc3Via2V5cworICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgIERX
T1JEIG5hbWVMZW4gPSBfY291bnRvZihuYW1lKTsKKyAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtl
eUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKKwor
ICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBXQ0hBUiBwYXRoU3RyW19NQVhfUEFUSF07CisgICAgICAgIERXT1JEIHBhdGhT
dHJTaXplID0gc2l6ZW9mKHBhdGhTdHIpOworICAgICAgICBEV09SRCB0eXBlOworCisgICAgICAg
IHJlc3VsdCA9IFNIR2V0VmFsdWUoa2V5LCBuYW1lLCBURVhUKCJQYXRoIiksICZ0eXBlLCAoTFBC
WVRFKXBhdGhTdHIsICZwYXRoU3RyU2l6ZSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1Jf
U1VDQ0VTUyB8fCB0eXBlICE9IFJFR19TWikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgYXR0cmlidXRlczsKKyAgICAgICAgaWYgKEdl
dEZpbGVBdHRyaWJ1dGVzRXgocGF0aFN0ciwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmYXR0cmli
dXRlcykgPT0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFBsdWdpblBhY2th
Z2VXaW4qIHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKFN0cmluZyhw
YXRoU3RyLCBwYXRoU3RyU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSwgYXR0cmlidXRlcy5mdExh
c3RXcml0ZVRpbWUpOworCisgICAgICAgIGlmIChwYWNrYWdlKQorICAgICAgICAgICAgcGx1Z2lu
cy5hZGQocGFja2FnZSk7CisgICAgfQorCisgICAgUmVnQ2xvc2VLZXkoa2V5KTsKK30KKworUGx1
Z2luU2V0IFBsdWdpbkRhdGFiYXNlV2luOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0Cit7Cisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCisgICAg
SGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKKyAgICBQbHVnaW5TZXQgcGx1Z2luczsK
KworICAgIEhBTkRMRSBoRmluZCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIFdJTjMyX0ZJ
TkRfREFUQVcgZmluZEZpbGVEYXRhOworCisgICAgUGx1Z2luUGFja2FnZVdpbiogb2xkV01QUGx1
Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdlV2luKiBuZXdXTVBQbHVnaW4gPSAwOworCisgICAg
VmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7
CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBh
dGhzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTdHJpbmcgcGF0dGVybiA9
ICppdCArICJcXCoiOworCisgICAgICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVcocGF0dGVybi5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAmZmluZEZpbGVEYXRhKTsKKworICAgICAg
ICBpZiAoaEZpbmQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAoZmluZEZpbGVEYXRhLmR3RmlsZUF0
dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IFN0cmluZyhmaW5kRmlsZURh
dGEuY0ZpbGVOYW1lLCB3Y3NsZW4oZmluZEZpbGVEYXRhLmNGaWxlTmFtZSkpOworICAgICAgICAg
ICAgaWYgKCghZmlsZW5hbWUuc3RhcnRzV2l0aCgibnAiLCBmYWxzZSkgfHwgIWZpbGVuYW1lLmVu
ZHNXaXRoKCJkbGwiLCBmYWxzZSkpICYmCisgICAgICAgICAgICAgICAgKCFlcXVhbElnbm9yaW5n
Q2FzZShmaWxlbmFtZSwgIlBsdWdpbi5kbGwiKSB8fCAhaXQtPmVuZHNXaXRoKCJTaG9ja3dhdmUg
MTAiLCBmYWxzZSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBT
dHJpbmcgZnVsbFBhdGggPSAqaXQgKyAiXFwiICsgZmlsZW5hbWU7CisgICAgICAgICAgICBpZiAo
IXVuaXF1ZUZpbGVuYW1lcy5hZGQoZnVsbFBhdGgpLnNlY29uZCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgCisgICAgICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW5Q
YWNrYWdlID0gUGx1Z2luUGFja2FnZVdpbjo6Y3JlYXRlUGFja2FnZShmdWxsUGF0aCwgZmluZEZp
bGVEYXRhLmZ0TGFzdFdyaXRlVGltZSk7CisKKyAgICAgICAgICAgIGlmIChwbHVnaW5QYWNrYWdl
KSB7CisgICAgICAgICAgICAgICAgcGx1Z2lucy5hZGQocGx1Z2luUGFja2FnZSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucGRzcGxheS5kbGwi
KSkKKyAgICAgICAgICAgICAgICAgICAgb2xkV01QUGx1Z2luID0gcGx1Z2luUGFja2FnZTsKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wLW1z
d21wLmRsbCIpKQorICAgICAgICAgICAgICAgICAgICBuZXdXTVBQbHVnaW4gPSBwbHVnaW5QYWNr
YWdlOworICAgICAgICAgICAgfQorCisgICAgICAgIH0gd2hpbGUgKEZpbmROZXh0RmlsZVcoaEZp
bmQsICZmaW5kRmlsZURhdGEpICE9IDApOworCisgICAgICAgIEZpbmRDbG9zZShoRmluZCk7Cisg
ICAgfQorCisgICAgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBs
dWdpbnMpOworICAgIGFkZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtFWV9DVVJSRU5UX1VTRVIsIHBs
dWdpbnMpOworCisgICAgLy8gSWYgYm90aCB0aGUgb2xkIGFuZCBuZXcgV01QIHBsdWdpbiBhcmUg
cHJlc2VudCBpbiB0aGUgcGx1Z2lucyBzZXQsIAorICAgIC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9u
ZSBzbyB3ZSBkb24ndCBlbmQgdXAgY2hvb3NpbmcgdGhlIG9sZCBvbmUuCisgICAgaWYgKG9sZFdN
UFBsdWdpbiAmJiBuZXdXTVBQbHVnaW4pCisgICAgICAgIHBsdWdpbnMucmVtb3ZlKG9sZFdNUFBs
dWdpbik7CisKKyAgICByZXR1cm4gcGx1Z2luczsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8
aW50PiBwYXJzZVZlcnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQorewor
ICAgIFZlY3RvcjxpbnQ+IHZlcnNpb247CisKKyAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7Cisg
ICAgdW5zaWduZWQgZW5kUG9zOworICAgIAorICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25T
dHJpbmcubGVuZ3RoKCkpIHsKKyAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9z
IDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKTsgKytlbmRQb3MpCisgICAgICAgICAgICBpZiAodmVy
c2lvblN0cmluZ1tlbmRQb3NdID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18n
KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50
ID0gdmVyc2lvblN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50
b0ludCgpOworICAgICAgICB2ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKKworICAg
ICAgICBzdGFydFBvcyA9IGVuZFBvcyArIDE7CisgICAgfQorCisgICAgcmV0dXJuIHZlcnNpb247
Cit9CisKKy8vIFRoaXMgcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZl
cnNpb25CCitzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3Rvcjxp
bnQ+JiB2ZXJzaW9uQSwgY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQoreworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAo
aSA+PSB2ZXJzaW9uQi5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICBpZiAodmVyc2lvbkFbaV0gPiB2ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBlbHNlIGlmICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZl
cnNpb25zIGFyZSBlaXRoZXIgdGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBv
bmVudCwganVzdCByZXR1cm4gZmFsc2UKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1Z2luUGF0aHMoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQor
eworICAgIC8vIEVudW1lcmF0ZSBhbGwgTW96aWxsYSBwbHVnaW4gZGlyZWN0b3JpZXMgaW4gdGhl
IHJlZ2lzdHJ5CisgICAgSEtFWSBrZXk7CisgICAgTE9ORyByZXN1bHQ7CisgICAgCisgICAgcmVz
dWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1v
emlsbGEiKSwgMCwgS0VZX1JFQUQsICZrZXkpOworICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VD
Q0VTUykgeworICAgICAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgICAgIEZJTEVUSU1FIGxhc3RN
b2RpZmllZDsKKworICAgICAgICAvLyBFbnVtZXJhdGUgc3Via2V5cworICAgICAgICBmb3IgKGlu
dCBpID0gMDs7IGkrKykgeworICAgICAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1l
KSAvIHNpemVvZihXQ0hBUik7CisgICAgICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtl
eSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOworCisgICAgICAg
ICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb25zUGF0aCA9IFN0cmluZyhuYW1lLCBuYW1l
TGVuKSArICJcXEV4dGVuc2lvbnMiOworICAgICAgICAgICAgSEtFWSBleHRlbnNpb25zS2V5Owor
CisgICAgICAgICAgICAvLyBUcnkgb3BlbmluZyB0aGUga2V5CisgICAgICAgICAgICByZXN1bHQg
PSBSZWdPcGVuS2V5RXgoa2V5LCBleHRlbnNpb25zUGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpLCAwLCBLRVlfUkVBRCwgJmV4dGVuc2lvbnNLZXkpOworCisgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0
IHRoZSBwbHVnaW5zIHBhdGgKKyAgICAgICAgICAgICAgICBXQ0hBUiBwbHVnaW5zUGF0aFN0cltf
TUFYX1BBVEhdOworICAgICAgICAgICAgICAgIERXT1JEIHBsdWdpbnNQYXRoU2l6ZSA9IHNpemVv
ZihwbHVnaW5zUGF0aFN0cik7CisgICAgICAgICAgICAgICAgRFdPUkQgdHlwZTsKKworICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChleHRlbnNpb25zS2V5LCBURVhUKCJQ
bHVnaW5zIiksIDAsICZ0eXBlLCAoTFBCWVRFKSZwbHVnaW5zUGF0aFN0ciwgJnBsdWdpbnNQYXRo
U2l6ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYg
dHlwZSA9PSBSRUdfU1opCisgICAgICAgICAgICAgICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmco
cGx1Z2luc1BhdGhTdHIsIHBsdWdpbnNQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7CisK
KyAgICAgICAgICAgICAgICBSZWdDbG9zZUtleShleHRlbnNpb25zS2V5KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVnQ2xvc2VLZXkoa2V5KTsKKyAgICB9
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRo
KFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBs
dWdpbiBpcyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55
IEZpcmVmb3ggaW5zdGFsbHMKKyAgICBXQ0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRI
ICsgMV07CisgICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1l
bnRTdHJpbmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2lu
RGlyZWN0b3J5U3RyLCBfY291bnRvZihwbHVnaW5EaXJlY3RvcnlTdHIpKTsKKworICAgIGlmIChw
bHVnaW5EaXJlY3RvcnlTaXplID4gMCAmJiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9IF9jb3VudG9m
KHBsdWdpbkRpcmVjdG9yeVN0cikpCisgICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1Z2lu
RGlyZWN0b3J5U3RyLCBwbHVnaW5EaXJlY3RvcnlTaXplIC0gMSkpOworCisgICAgRFdPUkQgdHlw
ZTsKKyAgICBXQ0hBUiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKKyAgICBE
V09SRCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVj
dG9yeVN0cik7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9N
QUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTWljcm9zb2Z0XFxNZWRpYVBsYXllciIpLCBURVhUKCJJ
bnN0YWxsYXRpb24gRGlyZWN0b3J5IiksICZ0eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJl
Y3RvcnlTdHIsICZpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplKTsKKworICAgIGlmIChyZXN1bHQg
PT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikKKyAgICAgICAgcGF0aHMuYXBwZW5k
KFN0cmluZyhpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNp
emUgLyBzaXplb2YoV0NIQVIpIC0gMSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkUXVp
Y2tUaW1lUGx1Z2luUGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit7CisgICAgRFdPUkQgdHlw
ZTsKKyAgICBXQ0hBUiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKKyAgICBE
V09SRCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVj
dG9yeVN0cik7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9N
QUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcQXBwbGUgQ29tcHV0ZXIsIEluYy5cXFF1aWNrVGltZSIp
LCBURVhUKCJJbnN0YWxsRGlyIiksICZ0eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3Rv
cnlTdHIsICZpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplKTsKKworICAgIGlmIChyZXN1bHQgPT0g
RVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikgeworICAgICAgICBTdHJpbmcgcGx1Z2lu
RGlyID0gU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0
b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXHBsdWdpbnMiOworICAgICAgICBwYXRo
cy5hcHBlbmQocGx1Z2luRGlyKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRB
ZG9iZUFjcm9iYXRQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBIS0VZ
IGtleTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJ
TkUsIFRFWFQoIlNvZnR3YXJlXFxBZG9iZVxcQWNyb2JhdCBSZWFkZXIiKSwgMCwgS0VZX1JFQUQs
ICZrZXkpOworICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJu
OworCisgICAgV0NIQVIgbmFtZVsxMjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKKwor
ICAgIFZlY3RvcjxpbnQ+IGxhdGVzdEFjcm9iYXRWZXJzaW9uOworICAgIFN0cmluZyBsYXRlc3RB
Y3JvYmF0VmVyc2lvblN0cmluZzsKKworICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgZm9y
IChpbnQgaSA9IDA7OyBpKyspIHsKKyAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1l
KSAvIHNpemVvZihXQ0hBUik7CisgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBp
LCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgaWYg
KHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
VmVjdG9yPGludD4gYWNyb2JhdFZlcnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5h
bWUsIG5hbWVMZW4pKTsKKyAgICAgICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhhY3JvYmF0VmVyc2lv
biwgbGF0ZXN0QWNyb2JhdFZlcnNpb24pKSB7CisgICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVy
c2lvbiA9IGFjcm9iYXRWZXJzaW9uOworICAgICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb25T
dHJpbmcgPSBTdHJpbmcobmFtZSwgbmFtZUxlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIWxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIERXT1JE
IHR5cGU7CisgICAgICAgIFdDSEFSIGFjcm9iYXRJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOwor
ICAgICAgICBEV09SRCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGFjcm9iYXRJbnN0
YWxsUGF0aFN0cik7CisKKyAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5LZXlQYXRoID0gIlNv
ZnR3YXJlXFxBZG9iZVxcQWNyb2JhdCBSZWFkZXJcXCIgKyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0
cmluZyArICJcXEluc3RhbGxQYXRoIjsKKyAgICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZ
X0xPQ0FMX01BQ0hJTkUsIGFjcm9iYXRQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCksIDAsICZ0eXBlLCAoTFBCWVRFKWFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFj
cm9iYXRJbnN0YWxsUGF0aFNpemUpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VD
Q0VTUykgeworICAgICAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5QYXRoID0gU3RyaW5nKGFj
cm9iYXRJbnN0YWxsUGF0aFN0ciwgYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hB
UikgLSAxKSArICJcXGJyb3dzZXIiOworICAgICAgICAgICAgcGF0aHMuYXBwZW5kKGFjcm9iYXRQ
bHVnaW5QYXRoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlZ0Nsb3NlS2V5KGtleSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHNhZmFyaVBsdWdpbnNQYXRoKCkKK3sKKyAgICBXQ0hB
UiBtb2R1bGVGaWxlTmFtZVN0cltfTUFYX1BBVEhdOworICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2lu
c1BhdGg7CisgICAgc3RhdGljIGJvb2wgY2FjaGVkUGx1Z2luUGF0aCA9IGZhbHNlOworCisgICAg
aWYgKCFjYWNoZWRQbHVnaW5QYXRoKSB7CisgICAgICAgIGNhY2hlZFBsdWdpblBhdGggPSB0cnVl
OworCisgICAgICAgIGludCBtb2R1bGVGaWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1lKDAs
IG1vZHVsZUZpbGVOYW1lU3RyLCBfTUFYX1BBVEgpOworCisgICAgICAgIGlmICghbW9kdWxlRmls
ZU5hbWVMZW4gfHwgbW9kdWxlRmlsZU5hbWVMZW4gPT0gX01BWF9QQVRIKQorICAgICAgICAgICAg
Z290byBleGl0OworCisgICAgICAgIGlmICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZpbGVO
YW1lU3RyKSkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBwbHVnaW5zUGF0aCA9
IFN0cmluZyhtb2R1bGVGaWxlTmFtZVN0cikgKyAiXFxQbHVnaW5zIjsKKyAgICB9CitleGl0Ogor
ICAgIHJldHVybiBwbHVnaW5zUGF0aDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZE1hY3Jv
bWVkaWFQbHVnaW5QYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit7CisgICAgV0NIQVIgc3lz
dGVtRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKKworICAgIGlmIChHZXRTeXN0ZW1EaXJlY3Rvcnko
c3lzdGVtRGlyZWN0b3J5U3RyLCBfY291bnRvZihzeXN0ZW1EaXJlY3RvcnlTdHIpKSA9PSAwKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXQ0hBUiBtYWNyb21lZGlhRGlyZWN0b3J5U3RyW01BWF9Q
QVRIXTsKKworICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURp
cmVjdG9yeVN0ciwgVEVYVCgibWFjcm9tZWRcXEZsYXNoIikpOworICAgIHBhdGhzLmFwcGVuZCht
YWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKKworICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJl
Y3RvcnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0ciwgVEVYVCgibWFjcm9tZWRcXFNob2Nrd2F2ZSAx
MCIpKTsKKyAgICBwYXRocy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7Cit9CisKK1Zl
Y3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlV2luOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQorewor
ICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOworICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1
Z2luc1BhdGgoKTsKKworICAgIGlmICghb3VyUGF0aC5pc051bGwoKSkKKyAgICAgICAgcGF0aHMu
YXBwZW5kKG91clBhdGgpOworICAgIGFkZFF1aWNrVGltZVBsdWdpblBhdGgocGF0aHMpOworICAg
IGFkZEFkb2JlQWNyb2JhdFBsdWdpblBhdGgocGF0aHMpOworICAgIGFkZE1vemlsbGFQbHVnaW5Q
YXRocyhwYXRocyk7CisgICAgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luUGF0aChwYXRocyk7
CisgICAgYWRkTWFjcm9tZWRpYVBsdWdpblBhdGhzKHBhdGhzKTsKKworICAgIHJldHVybiBwYXRo
czsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZVdpbjo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5z
KG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gTm8gcGx1Z2luIHdhcyBm
b3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAg
ICByZXR1cm4gKHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWlt
ZVR5cGUpKTsKK30KKworUGx1Z2luUGFja2FnZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46OnBsdWdp
bkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVUeXBl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcga2V5ID0gbWltZVR5
cGUubG93ZXIoKTsKKyAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7Cisg
ICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gMDsKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7Cisg
ICAgICAgICAgICBwbHVnaW4gPSAoKml0KS5nZXQoKTsKKyAgICAgICAgICAgIC8vIHByZWZlciBw
bHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKKyAgICAgICAgICAgIGlmIChwbHVn
aW4tPnBhcmVudERpcmVjdG9yeSgpID09IG91clBhdGgpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luOworfQorCitTdHJpbmcgUGx1
Z2luRGF0YWJhc2VXaW46Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5z
aW9uKSBjb25zdAoreworICAgIGlmIChleHRlbnNpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1
Z2lucy5lbmQoKTsKKyAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7Cisg
ICAgU3RyaW5nIG1pbWVUeXBlOworICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IDA7CisK
KyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKKwor
ICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfaXQg
PSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7IG1pbWVfaXQgIT0gbWltZV9lbmQ7
ICsrbWltZV9pdCkgeworICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lv
bnMgPSBtaW1lX2l0LT5zZWNvbmQ7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1pbWVUeXBlID0gbWltZV9pdC0+Zmlyc3Q7CisgICAgICAgICAgICAgICAgICAgIHBsdWdp
biA9ICgqaXQpLmdldCgpOworICAgICAgICAgICAgICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBp
biBvdXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgIGlmIChwbHVn
aW4tPnBhcmVudERpcmVjdG9yeSgpID09IG91clBhdGgpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gbWltZVR5cGU7Cit9CisKK1BsdWdpblBhY2thZ2VXaW4qIFBsdWdp
bkRhdGFiYXNlV2luOjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlw
ZSkKK3sgICAKKyAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlw
ZShtaW1lVHlwZSk7CisgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLnN0cmluZygpOworICAgIAor
ICAgIGlmICghcGx1Z2luKSB7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IHVybC5sYXN0UGF0
aENvbXBvbmVudCgpOworICAgICAgICBpZiAoIWZpbGVuYW1lLmVuZHNXaXRoKCIvIikpIHsKKyAg
ICAgICAgICAgIGludCBleHRlbnNpb25Qb3MgPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOwor
ICAgICAgICAgICAgaWYgKGV4dGVuc2lvblBvcyAhPSAtMSkgeworICAgICAgICAgICAgICAgIFN0
cmluZyBleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZXh0ZW5zaW9uUG9zICsgMSk7CisK
KyAgICAgICAgICAgICAgICBtaW1lVHlwZSA9IE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lv
bik7CisgICAgICAgICAgICAgICAgcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gRklYTUU6IGlmIG5v
IHBsdWdpbiBjb3VsZCBiZSBmb3VuZCwgcXVlcnkgV2luZG93cyBmb3IgdGhlIG1pbWUgdHlwZSAK
KyAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCisKKyAgICByZXR1cm4gcGx1
Z2luOworfQorCitQbHVnaW5WaWV3V2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6Y3JlYXRlUGx1Z2lu
VmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgYm9vbCBsb2FkTWFudWFsbHkpCit7CisgICAgLy8gaWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1
Z2luIGZvciB0aGlzIE1JTUUgdHlwZSwgZmluZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IKKyAgICAv
LyBhIHBsdWdpbiBieSB0aGUgZmlsZSBleHRlbnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBl
LCBzbyBwYXNzIGEgbXV0YWJsZSBTdHJpbmcKKyAgICBTdHJpbmcgbWltZVR5cGVDb3B5ID0gbWlt
ZVR5cGU7CisgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1p
bWVUeXBlQ29weSk7CisgICAgCisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJl
c2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICBpZiAoIXBsdWdpbiAm
JiByZWZyZXNoKCkpIHsKKyAgICAgICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7CisgICAgICAg
IHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOworICAgIH0KKyAgICAgICAg
CisgICAgcmV0dXJuIG5ldyBQbHVnaW5WaWV3V2luKHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4s
IGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9h
ZE1hbnVhbGx5KTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCShy
ZXZpc2lvbiAyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNCwzNiArMjUsNDMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5E
YXRhYmFzZS5oIgogCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgotI2luY2x1ZGUgIlBs
dWdpblZpZXdXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVBsdWdpbkRhdGFiYXNlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6
aW5zdGFsbGVkUGx1Z2lucygpCitQbHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0YWJhc2U6Omluc3Rh
bGxlZFBsdWdpbnMoKQogewotICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZVdpbiogcGx1Z2lucyA9
IDA7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBwbHVnaW5zID0gMDsKICAgICAKICAgICBp
ZiAoIXBsdWdpbnMpIHsKLSAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZVdpbjsK
LSAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1
bHRQbHVnaW5QYXRocygpKTsKKyAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZTsK
KyAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQ
bHVnaW5QYXRocygpKTsKICAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOwogICAgIH0KIAogICAg
IHJldHVybiBwbHVnaW5zOwogfQogCi12b2lkIFBsdWdpbkRhdGFiYXNlV2luOjphZGRFeHRyYVBs
dWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQorYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1F
VHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5
cGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9yZWdpc3RlcmVk
TUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Ly8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBz
ZWFyY2hpbmcgYWdhaW4KKyAgICByZXR1cm4gKHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1F
VHlwZXMuY29udGFpbnMobWltZVR5cGUpKTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6YWRk
RXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBtX3BsdWdpblBhdGhz
LmFwcGVuZChwYXRoKTsKICAgICByZWZyZXNoKCk7CiB9CiAKLWJvb2wgUGx1Z2luRGF0YWJhc2VX
aW46OnJlZnJlc2goKQorYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCgpCiB7ICAgCiAgICAg
UGx1Z2luU2V0IG5ld1BsdWdpbnM7CiAKQEAgLTEwOCw5ICsxMTYsOSBAQCBib29sIFBsdWdpbkRh
dGFiYXNlV2luOjpyZWZyZXNoKCkKICAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdlZDsKIH0KIAot
VmVjdG9yPFBsdWdpblBhY2thZ2VXaW4qPiBQbHVnaW5EYXRhYmFzZVdpbjo6cGx1Z2lucygpIGNv
bnN0CitWZWN0b3I8UGx1Z2luUGFja2FnZSo+IFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5zKCkgY29u
c3QKIHsKLSAgICBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IHJlc3VsdDsKKyAgICBWZWN0b3I8
UGx1Z2luUGFja2FnZSo+IHJlc3VsdDsKIAogICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9wbHVnaW5zLmVuZCgpOwogICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCkBAIC0xMTksMzQ3ICsx
MjcsMTkgQEAgVmVjdG9yPFBsdWdpblBhY2thZ2VXaW4qPiBQbHVnaW5EYXRhYmFzZQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5zRnJvbVJlZ2lz
dHJ5KEhLRVkgcm9vdEtleSwgUGx1Z2luU2V0JiBwbHVnaW5zKQotewotICAgIEhLRVkga2V5Owot
ICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNvZnR3YXJlXFxN
b3ppbGxhUGx1Z2lucyIsIDAsIEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkpOwotCi0gICAg
aWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3Y2hh
cl90IG5hbWVbMTI4XTsKLSAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICAvLyBFbnVt
ZXJhdGUgc3Via2V5cwotICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgIERXT1JE
IG5hbWVMZW4gPSBfY291bnRvZihuYW1lKTsKLSAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4
VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKLQotICAg
ICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBXQ0hBUiBwYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIHBhdGhTdHJT
aXplID0gc2l6ZW9mKHBhdGhTdHIpOwotICAgICAgICBEV09SRCB0eXBlOwotCi0gICAgICAgIHJl
c3VsdCA9IFNIR2V0VmFsdWUoa2V5LCBuYW1lLCBURVhUKCJQYXRoIiksICZ0eXBlLCAoTFBCWVRF
KXBhdGhTdHIsICZwYXRoU3RyU2l6ZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VD
Q0VTUyB8fCB0eXBlICE9IFJFR19TWikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgYXR0cmlidXRlczsKLSAgICAgICAgaWYgKEdldEZp
bGVBdHRyaWJ1dGVzRXgocGF0aFN0ciwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmYXR0cmlidXRl
cykgPT0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFBsdWdpblBhY2thZ2VX
aW4qIHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKFN0cmluZyhwYXRo
U3RyLCBwYXRoU3RyU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSwgYXR0cmlidXRlcy5mdExhc3RX
cml0ZVRpbWUpOwotCi0gICAgICAgIGlmIChwYWNrYWdlKQotICAgICAgICAgICAgcGx1Z2lucy5h
ZGQocGFja2FnZSk7Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQotUGx1Z2lu
U2V0IFBsdWdpbkRhdGFiYXNlV2luOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0Ci17Ci0gICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCi0gICAgSGFz
aFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKLSAgICBQbHVnaW5TZXQgcGx1Z2luczsKLQot
ICAgIEhBTkRMRSBoRmluZCA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotICAgIFdJTjMyX0ZJTkRf
REFUQVcgZmluZEZpbGVEYXRhOwotCi0gICAgUGx1Z2luUGFja2FnZVdpbiogb2xkV01QUGx1Z2lu
ID0gMDsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBuZXdXTVBQbHVnaW4gPSAwOwotCi0gICAgVmVj
dG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7Ci0g
ICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICpp
dCArICJcXCoiOwotCi0gICAgICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVcocGF0dGVybi5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAmZmluZEZpbGVEYXRhKTsKLQotICAgICAgICBp
ZiAoaEZpbmQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoZmluZEZpbGVEYXRhLmR3RmlsZUF0dHJp
YnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IFN0cmluZyhmaW5kRmlsZURhdGEu
Y0ZpbGVOYW1lLCB3Y3NsZW4oZmluZEZpbGVEYXRhLmNGaWxlTmFtZSkpOwotICAgICAgICAgICAg
aWYgKCghZmlsZW5hbWUuc3RhcnRzV2l0aCgibnAiLCBmYWxzZSkgfHwgIWZpbGVuYW1lLmVuZHNX
aXRoKCJkbGwiLCBmYWxzZSkpICYmCi0gICAgICAgICAgICAgICAgKCFlcXVhbElnbm9yaW5nQ2Fz
ZShmaWxlbmFtZSwgIlBsdWdpbi5kbGwiKSB8fCAhaXQtPmVuZHNXaXRoKCJTaG9ja3dhdmUgMTAi
LCBmYWxzZSkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBTdHJp
bmcgZnVsbFBhdGggPSAqaXQgKyAiXFwiICsgZmlsZW5hbWU7Ci0gICAgICAgICAgICBpZiAoIXVu
aXF1ZUZpbGVuYW1lcy5hZGQoZnVsbFBhdGgpLnNlY29uZCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgCi0gICAgICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW5QYWNr
YWdlID0gUGx1Z2luUGFja2FnZVdpbjo6Y3JlYXRlUGFja2FnZShmdWxsUGF0aCwgZmluZEZpbGVE
YXRhLmZ0TGFzdFdyaXRlVGltZSk7Ci0KLSAgICAgICAgICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7
Ci0gICAgICAgICAgICAgICAgcGx1Z2lucy5hZGQocGx1Z2luUGFja2FnZSk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucGRzcGxheS5kbGwiKSkK
LSAgICAgICAgICAgICAgICAgICAgb2xkV01QUGx1Z2luID0gcGx1Z2luUGFja2FnZTsKLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wLW1zd21w
LmRsbCIpKQotICAgICAgICAgICAgICAgICAgICBuZXdXTVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdl
OwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gd2hpbGUgKEZpbmROZXh0RmlsZVcoaEZpbmQs
ICZmaW5kRmlsZURhdGEpICE9IDApOwotCi0gICAgICAgIEZpbmRDbG9zZShoRmluZCk7Ci0gICAg
fQotCi0gICAgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBsdWdp
bnMpOwotICAgIGFkZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtFWV9DVVJSRU5UX1VTRVIsIHBsdWdp
bnMpOwotCi0gICAgLy8gSWYgYm90aCB0aGUgb2xkIGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJl
c2VudCBpbiB0aGUgcGx1Z2lucyBzZXQsIAotICAgIC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBz
byB3ZSBkb24ndCBlbmQgdXAgY2hvb3NpbmcgdGhlIG9sZCBvbmUuCi0gICAgaWYgKG9sZFdNUFBs
dWdpbiAmJiBuZXdXTVBQbHVnaW4pCi0gICAgICAgIHBsdWdpbnMucmVtb3ZlKG9sZFdNUFBsdWdp
bik7Ci0KLSAgICByZXR1cm4gcGx1Z2luczsKLX0KLQotc3RhdGljIGlubGluZSBWZWN0b3I8aW50
PiBwYXJzZVZlcnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQotewotICAg
IFZlY3RvcjxpbnQ+IHZlcnNpb247Ci0KLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7Ci0gICAg
dW5zaWduZWQgZW5kUG9zOwotICAgIAotICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJp
bmcubGVuZ3RoKCkpIHsKLSAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwg
dmVyc2lvblN0cmluZy5sZW5ndGgoKTsgKytlbmRQb3MpCi0gICAgICAgICAgICBpZiAodmVyc2lv
blN0cmluZ1tlbmRQb3NdID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0g
dmVyc2lvblN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0lu
dCgpOwotICAgICAgICB2ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKLQotICAgICAg
ICBzdGFydFBvcyA9IGVuZFBvcyArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZlcnNpb247Ci19
Ci0KLS8vIFRoaXMgcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNp
b25CCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+
JiB2ZXJzaW9uQSwgY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQotewotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaSA+
PSB2ZXJzaW9uQi5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBp
ZiAodmVyc2lvbkFbaV0gPiB2ZXJzaW9uQltpXSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBlbHNlIGlmICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNp
b25zIGFyZSBlaXRoZXIgdGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVu
dCwganVzdCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRNb3ppbGxhUGx1Z2luUGF0aHMoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQotewot
ICAgIC8vIEVudW1lcmF0ZSBhbGwgTW96aWxsYSBwbHVnaW4gZGlyZWN0b3JpZXMgaW4gdGhlIHJl
Z2lzdHJ5Ci0gICAgSEtFWSBrZXk7Ci0gICAgTE9ORyByZXN1bHQ7Ci0gICAgCi0gICAgcmVzdWx0
ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1vemls
bGEiKSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VT
UykgewotICAgICAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgICAgIEZJTEVUSU1FIGxhc3RNb2Rp
ZmllZDsKLQotICAgICAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAgICAgICBmb3IgKGludCBp
ID0gMDs7IGkrKykgewotICAgICAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAv
IHNpemVvZihXQ0hBUik7Ci0gICAgICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwg
aSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgICAg
ICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb25zUGF0aCA9IFN0cmluZyhuYW1lLCBuYW1lTGVu
KSArICJcXEV4dGVuc2lvbnMiOwotICAgICAgICAgICAgSEtFWSBleHRlbnNpb25zS2V5OwotCi0g
ICAgICAgICAgICAvLyBUcnkgb3BlbmluZyB0aGUga2V5Ci0gICAgICAgICAgICByZXN1bHQgPSBS
ZWdPcGVuS2V5RXgoa2V5LCBleHRlbnNpb25zUGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLCAwLCBLRVlfUkVBRCwgJmV4dGVuc2lvbnNLZXkpOwotCi0gICAgICAgICAgICBpZiAo
cmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0IHRo
ZSBwbHVnaW5zIHBhdGgKLSAgICAgICAgICAgICAgICBXQ0hBUiBwbHVnaW5zUGF0aFN0cltfTUFY
X1BBVEhdOwotICAgICAgICAgICAgICAgIERXT1JEIHBsdWdpbnNQYXRoU2l6ZSA9IHNpemVvZihw
bHVnaW5zUGF0aFN0cik7Ci0gICAgICAgICAgICAgICAgRFdPUkQgdHlwZTsKLQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChleHRlbnNpb25zS2V5LCBURVhUKCJQbHVn
aW5zIiksIDAsICZ0eXBlLCAoTFBCWVRFKSZwbHVnaW5zUGF0aFN0ciwgJnBsdWdpbnNQYXRoU2l6
ZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlw
ZSA9PSBSRUdfU1opCi0gICAgICAgICAgICAgICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1
Z2luc1BhdGhTdHIsIHBsdWdpbnNQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci0KLSAg
ICAgICAgICAgICAgICBSZWdDbG9zZUtleShleHRlbnNpb25zS2V5KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUmVnQ2xvc2VLZXkoa2V5KTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRoKFZl
Y3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBsdWdp
biBpcyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55IEZp
cmVmb3ggaW5zdGFsbHMKLSAgICBXQ0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRIICsg
MV07Ci0gICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1lbnRT
dHJpbmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2luRGly
ZWN0b3J5U3RyLCBfY291bnRvZihwbHVnaW5EaXJlY3RvcnlTdHIpKTsKLQotICAgIGlmIChwbHVn
aW5EaXJlY3RvcnlTaXplID4gMCAmJiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9IF9jb3VudG9mKHBs
dWdpbkRpcmVjdG9yeVN0cikpCi0gICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1Z2luRGly
ZWN0b3J5U3RyLCBwbHVnaW5EaXJlY3RvcnlTaXplIC0gMSkpOwotCi0gICAgRFdPUkQgdHlwZTsK
LSAgICBXQ0hBUiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKLSAgICBEV09S
RCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9y
eVN0cik7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNI
SU5FLCBURVhUKCJTb2Z0d2FyZVxcTWljcm9zb2Z0XFxNZWRpYVBsYXllciIpLCBURVhUKCJJbnN0
YWxsYXRpb24gRGlyZWN0b3J5IiksICZ0eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3Rv
cnlTdHIsICZpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplKTsKLQotICAgIGlmIChyZXN1bHQgPT0g
RVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikKLSAgICAgICAgcGF0aHMuYXBwZW5kKFN0
cmluZyhpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUg
LyBzaXplb2YoV0NIQVIpIC0gMSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkUXVpY2tU
aW1lUGx1Z2luUGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgRFdPUkQgdHlwZTsK
LSAgICBXQ0hBUiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKLSAgICBEV09S
RCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9y
eVN0cik7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNI
SU5FLCBURVhUKCJTb2Z0d2FyZVxcQXBwbGUgQ29tcHV0ZXIsIEluYy5cXFF1aWNrVGltZSIpLCBU
RVhUKCJJbnN0YWxsRGlyIiksICZ0eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3RvcnlT
dHIsICZpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplKTsKLQotICAgIGlmIChyZXN1bHQgPT0gRVJS
T1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikgewotICAgICAgICBTdHJpbmcgcGx1Z2luRGly
ID0gU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXHBsdWdpbnMiOwotICAgICAgICBwYXRocy5h
cHBlbmQocGx1Z2luRGlyKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRBZG9i
ZUFjcm9iYXRQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBIS0VZIGtl
eTsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUs
IFRFWFQoIlNvZnR3YXJlXFxBZG9iZVxcQWNyb2JhdCBSZWFkZXIiKSwgMCwgS0VZX1JFQUQsICZr
ZXkpOwotICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgV0NIQVIgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAg
IFZlY3RvcjxpbnQ+IGxhdGVzdEFjcm9iYXRWZXJzaW9uOwotICAgIFN0cmluZyBsYXRlc3RBY3Jv
YmF0VmVyc2lvblN0cmluZzsKLQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChp
bnQgaSA9IDA7OyBpKyspIHsKLSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAv
IHNpemVvZihXQ0hBUik7Ci0gICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBu
YW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgaWYgKHJl
c3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVmVj
dG9yPGludD4gYWNyb2JhdFZlcnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5hbWUs
IG5hbWVMZW4pKTsKLSAgICAgICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhhY3JvYmF0VmVyc2lvbiwg
bGF0ZXN0QWNyb2JhdFZlcnNpb24pKSB7Ci0gICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lv
biA9IGFjcm9iYXRWZXJzaW9uOwotICAgICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJp
bmcgPSBTdHJpbmcobmFtZSwgbmFtZUxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IWxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIERXT1JEIHR5
cGU7Ci0gICAgICAgIFdDSEFSIGFjcm9iYXRJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOwotICAg
ICAgICBEV09SRCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGFjcm9iYXRJbnN0YWxs
UGF0aFN0cik7Ci0KLSAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5LZXlQYXRoID0gIlNvZnR3
YXJlXFxBZG9iZVxcQWNyb2JhdCBSZWFkZXJcXCIgKyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmlu
ZyArICJcXEluc3RhbGxQYXRoIjsKLSAgICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xP
Q0FMX01BQ0hJTkUsIGFjcm9iYXRQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIDAsICZ0eXBlLCAoTFBCWVRFKWFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFjcm9i
YXRJbnN0YWxsUGF0aFNpemUpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VT
UykgewotICAgICAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5QYXRoID0gU3RyaW5nKGFjcm9i
YXRJbnN0YWxsUGF0aFN0ciwgYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikg
LSAxKSArICJcXGJyb3dzZXIiOwotICAgICAgICAgICAgcGF0aHMuYXBwZW5kKGFjcm9iYXRQbHVn
aW5QYXRoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZ0Nsb3NlS2V5KGtleSk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgU3RyaW5nIHNhZmFyaVBsdWdpbnNQYXRoKCkKLXsKLSAgICBXQ0hBUiBt
b2R1bGVGaWxlTmFtZVN0cltfTUFYX1BBVEhdOwotICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc1Bh
dGg7Ci0gICAgc3RhdGljIGJvb2wgY2FjaGVkUGx1Z2luUGF0aCA9IGZhbHNlOwotCi0gICAgaWYg
KCFjYWNoZWRQbHVnaW5QYXRoKSB7Ci0gICAgICAgIGNhY2hlZFBsdWdpblBhdGggPSB0cnVlOwot
Ci0gICAgICAgIGludCBtb2R1bGVGaWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1lKDAsIG1v
ZHVsZUZpbGVOYW1lU3RyLCBfTUFYX1BBVEgpOwotCi0gICAgICAgIGlmICghbW9kdWxlRmlsZU5h
bWVMZW4gfHwgbW9kdWxlRmlsZU5hbWVMZW4gPT0gX01BWF9QQVRIKQotICAgICAgICAgICAgZ290
byBleGl0OwotCi0gICAgICAgIGlmICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZpbGVOYW1l
U3RyKSkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBwbHVnaW5zUGF0aCA9IFN0
cmluZyhtb2R1bGVGaWxlTmFtZVN0cikgKyAiXFxQbHVnaW5zIjsKLSAgICB9Ci1leGl0OgotICAg
IHJldHVybiBwbHVnaW5zUGF0aDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZE1hY3JvbWVk
aWFQbHVnaW5QYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgV0NIQVIgc3lzdGVt
RGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKLQotICAgIGlmIChHZXRTeXN0ZW1EaXJlY3Rvcnkoc3lz
dGVtRGlyZWN0b3J5U3RyLCBfY291bnRvZihzeXN0ZW1EaXJlY3RvcnlTdHIpKSA9PSAwKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBXQ0hBUiBtYWNyb21lZGlhRGlyZWN0b3J5U3RyW01BWF9QQVRI
XTsKLQotICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVj
dG9yeVN0ciwgVEVYVCgibWFjcm9tZWRcXEZsYXNoIikpOwotICAgIHBhdGhzLmFwcGVuZChtYWNy
b21lZGlhRGlyZWN0b3J5U3RyKTsKLQotICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3Rv
cnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0ciwgVEVYVCgibWFjcm9tZWRcXFNob2Nrd2F2ZSAxMCIp
KTsKLSAgICBwYXRocy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7Ci19Ci0KLVZlY3Rv
cjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlV2luOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQotewotICAg
IFZlY3RvcjxTdHJpbmc+IHBhdGhzOwotICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2lu
c1BhdGgoKTsKLQotICAgIGlmICghb3VyUGF0aC5pc051bGwoKSkKLSAgICAgICAgcGF0aHMuYXBw
ZW5kKG91clBhdGgpOwotICAgIGFkZFF1aWNrVGltZVBsdWdpblBhdGgocGF0aHMpOwotICAgIGFk
ZEFkb2JlQWNyb2JhdFBsdWdpblBhdGgocGF0aHMpOwotICAgIGFkZE1vemlsbGFQbHVnaW5QYXRo
cyhwYXRocyk7Ci0gICAgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luUGF0aChwYXRocyk7Ci0g
ICAgYWRkTWFjcm9tZWRpYVBsdWdpblBhdGhzKHBhdGhzKTsKLQotICAgIHJldHVybiBwYXRoczsK
LX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZVdpbjo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1p
bWVUeXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3Vu
ZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICBy
ZXR1cm4gKHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5
cGUpKTsKLX0KLQotUGx1Z2luUGFja2FnZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46OnBsdWdpbkZv
ck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5E
YXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAg
ICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFN0cmlu
ZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwotICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1
Z2luc1BhdGgoKTsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSAwOworICAgIFBsdWdp
blBhY2thZ2UqIHBsdWdpbiA9IDA7CiAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3BsdWdpbnMuZW5kKCk7CiAKICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmICgo
Kml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkgewogICAgICAgICAgICAg
cGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBpbiBv
dXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5Ci0gICAgICAgICAgICBpZiAocGx1Z2luLT5wYXJlbnRE
aXJlY3RvcnkoKSA9PSBvdXJQYXRoKQorICAgICAgICAgICAgaWYgKGlzUHJlZmVycmVkUGx1Z2lu
UGF0aChwbHVnaW4tPnBhcmVudERpcmVjdG9yeSgpKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgIH0KQEAgLTQ2NywxNSArMTQ3LDE0IEBAIFBsdWdpblBhY2thZ2VXaW4q
IFBsdWdpbkRhdGFiYXNlV2luOjpwbHUKICAgICByZXR1cm4gcGx1Z2luOwogfQogCi1TdHJpbmcg
UGx1Z2luRGF0YWJhc2VXaW46Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0
ZW5zaW9uKSBjb25zdAorU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QKIHsKICAgICBpZiAoZXh0ZW5zaW9uLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgUGx1Z2luU2V0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgU3RyaW5nIG91clBhdGggPSBz
YWZhcmlQbHVnaW5zUGF0aCgpOwogICAgIFN0cmluZyBtaW1lVHlwZTsKLSAgICBQbHVnaW5QYWNr
YWdlV2luKiBwbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IDA7CiAKICAg
ICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKQEAgLTQ4
Niw4ICsxNjUsNyBAQCBTdHJpbmcgUGx1Z2luRGF0YWJhc2VXaW46Ok1JTUVUeXBlRm9yRXh0CiAg
ICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVu
c2lvbikpIHsKICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsK
ICAgICAgICAgICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0
aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJlZmVycmVkUGx1Z2luUGF0aChwbHVnaW4t
PnBhcmVudERpcmVjdG9yeSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ5Nyw5ICsxNzUsOSBAQCBTdHJpbmcg
UGx1Z2luRGF0YWJhc2VXaW46Ok1JTUVUeXBlRm9yRXh0CiAgICAgcmV0dXJuIG1pbWVUeXBlOwog
fQogCi1QbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6ZmluZFBsdWdpbihjb25z
dCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRh
YmFzZTo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCiB7ICAg
Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5
cGUpOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVU
eXBlKTsKICAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwuc3RyaW5nKCk7CiAgICAgCiAgICAgaWYg
KCFwbHVnaW4pIHsKQEAgLTUyMSwyMCArMTk5LDQgQEAgUGx1Z2luUGFja2FnZVdpbiogUGx1Z2lu
RGF0YWJhc2VXaW46OmZpbgogICAgIHJldHVybiBwbHVnaW47CiB9CiAKLVBsdWdpblZpZXdXaW4q
IFBsdWdpbkRhdGFiYXNlV2luOjpjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKLXsK
LSAgICAvLyBpZiB3ZSBmYWlsIHRvIGZpbmQgYSBwbHVnaW4gZm9yIHRoaXMgTUlNRSB0eXBlLCBm
aW5kUGx1Z2luIHdpbGwgc2VhcmNoIGZvcgotICAgIC8vIGEgcGx1Z2luIGJ5IHRoZSBmaWxlIGV4
dGVuc2lvbiBhbmQgdXBkYXRlIHRoZSBNSU1FIHR5cGUsIHNvIHBhc3MgYSBtdXRhYmxlIFN0cmlu
ZwotICAgIFN0cmluZyBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKLSAgICBQbHVnaW5QYWNrYWdl
V2luKiBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKLSAgICAKLSAgICAv
LyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNl
YXJjaGluZyBhZ2FpbgotICAgIGlmICghcGx1Z2luICYmIHJlZnJlc2goKSkgewotICAgICAgICBt
aW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKLSAgICAgICAgcGx1Z2luID0gZmluZFBsdWdpbih1cmws
IG1pbWVUeXBlQ29weSk7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1cm4gbmV3IFBsdWdpblZp
ZXdXaW4ocGFyZW50RnJhbWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVz
LCBwYXJhbVZhbHVlcywgbWltZVR5cGVDb3B5LCBsb2FkTWFudWFsbHkpOwotfQotCiB9CkluZGV4
OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAkocmV2aXNpb24gMjk2MjYpCShmcm9tIFdlYkNvcmUv
cGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uaDoyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5EYXRhYmFzZVdpbl9ICisjZGVmaW5lIFBsdWdpbkRh
dGFiYXNlV2luX0gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5Q
YWNrYWdlV2luLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBJbnRT
aXplOworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZVdpbjsKKyAgICBj
bGFzcyBQbHVnaW5WaWV3V2luOworCisgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5Q
YWNrYWdlV2luPiwgUGx1Z2luUGFja2FnZVdpbkhhc2g+IFBsdWdpblNldDsKKyAgCisgICAgY2xh
c3MgUGx1Z2luRGF0YWJhc2VXaW4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBsdWdp
bkRhdGFiYXNlV2luKiBpbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgICAgIFBsdWdpblZpZXdXaW4q
IGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxl
bWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisKKyAgICAgICAgYm9vbCByZWZyZXNoKCk7
CisgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gcGx1Z2lucygpIGNvbnN0OworICAg
ICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwor
ICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBwcml2
YXRlOgorICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXRocykgeyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KKyAgICAgICAgUGx1Z2luU2V0IGdldFBs
dWdpbnNJblBhdGhzKCkgY29uc3Q7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogZmluZFBs
dWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBQbHVnaW5Q
YWNrYWdlV2luKiBwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAg
ICAgICAgU3RyaW5nIE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9u
KSBjb25zdDsKKworICAgICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZGVmYXVsdFBsdWdpblBh
dGhzKCk7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gbV9wbHVnaW5QYXRoczsKKyAgICAgICAg
SGFzaFNldDxTdHJpbmc+IG1fcmVnaXN0ZXJlZE1JTUVUeXBlczsKKyAgICAgICAgUGx1Z2luU2V0
IG1fcGx1Z2luczsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJ
bmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHJldmlzaW9uIDI5NjI2KQorKysgV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw0MSAr
MjQsNDAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUGx1Z2luRGF0YWJhc2VX
aW5fSAotI2RlZmluZSBQbHVnaW5EYXRhYmFzZVdpbl9ICi0KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpZm5kZWYgUGx1Z2luRGF0YWJhc2VfSAor
I2RlZmluZSBQbHVnaW5EYXRhYmFzZV9ICiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgot
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgi
CiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBF
bGVtZW50OwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEludFNpemU7CiAgICAgY2xhc3Mg
S1VSTDsKLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdlV2luOwotICAgIGNsYXNzIFBsdWdpblZpZXdX
aW47CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKIAotICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQ
dHI8UGx1Z2luUGFja2FnZVdpbj4sIFBsdWdpblBhY2thZ2VXaW5IYXNoPiBQbHVnaW5TZXQ7Cisg
ICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlPiwgUGx1Z2luUGFja2FnZUhh
c2g+IFBsdWdpblNldDsKICAgCi0gICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VXaW4geworICAgIGNs
YXNzIFBsdWdpbkRhdGFiYXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQbHVnaW5E
YXRhYmFzZVdpbiogaW5zdGFsbGVkUGx1Z2lucygpOwotICAgICAgICBQbHVnaW5WaWV3V2luKiBj
cmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
TmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJh
c2UqIGluc3RhbGxlZFBsdWdpbnMoKTsKIAogICAgICAgICBib29sIHJlZnJlc2goKTsKLSAgICAg
ICAgVmVjdG9yPFBsdWdpblBhY2thZ2VXaW4qPiBwbHVnaW5zKCkgY29uc3Q7CisgICAgICAgIFZl
Y3RvcjxQbHVnaW5QYWNrYWdlKj4gcGx1Z2lucygpIGNvbnN0OwogICAgICAgICBib29sIGlzTUlN
RVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogICAgICAgICB2b2lkIGFk
ZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgYm9vbCBpc1ByZWZlcnJl
ZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdDsKICAgICBwcml2YXRlOgogICAg
ICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykgeyBt
X3BsdWdpblBhdGhzID0gcGF0aHM7IH0KICAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdpbnNJblBh
dGhzKCkgY29uc3Q7CiAKLSAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogZmluZFBsdWdpbihjb25z
dCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICBQbHVnaW5QYWNrYWdlV2lu
KiBwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgUGx1
Z2luUGFja2FnZSogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUp
OworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKTsKICAgICAgICAgU3RyaW5nIE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgZXh0ZW5zaW9uKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4g
ZGVmYXVsdFBsdWdpblBhdGhzKCk7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0
b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNw
cAkocmV2aXNpb24gMjk2MjYpCShmcm9tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z0luSW5mb1N0
b3JlV2luLmNwcDoyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBs
dWdpbkRhdGFiYXNlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1
Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQgaSkgCit7IAorICAgIFBsdWdpbkRhdGFi
YXNlV2luICpkYiA9IFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAg
UGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5JbmZvOworICAgIFBsdWdpblBhY2thZ2VXaW4q
IHBhY2thZ2UgPSBkYi0+cGx1Z2lucygpW2ldOworCisgICAgaW5mby0+bmFtZSA9IHBhY2thZ2Ut
Pm5hbWUoKTsKKyAgICBpbmZvLT5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICBpbmZv
LT5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsKKworICAgIGNvbnN0IE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRp
b25zKCk7CisgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
aW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CisgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0lu
Zm87CisgICAgICAgIGluZm8tPm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgCisgICAgICAg
IG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25k
OworICAgICAgICBtaW1lLT5wbHVnaW4gPSBpbmZvOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+
IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUp
OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgICAgICBt
aW1lLT5zdWZmaXhlcyArPSAiLCI7CisKKyAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9IGV4
dGVuc2lvbnNbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwor
dW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKS5zaXpl
KCk7Cit9CisKKworU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8gRklYTUUgNTYyOTEzOTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kIG9uIFdpbmRvd3MuCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCisg
ICAgCitib29sIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmIG1pbWVUeXBlKSAKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VXaW46Omlu
c3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpOworfQorCit2
b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkT3BlblBhZ2VzKQoreworICAgIFBsdWdpbkRh
dGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKKworICAgIGlmIChyZWxv
YWRPcGVuUGFnZXMpIHsKKyAgICAgICAgLy8gRklYTUU6IHJlbG9hZCBvcGVuIHBhZ2VzCisgICAg
fQorfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcAkocmV2aXNpb24g
Mjk2MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI1LDE2ICsyNiwxNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VXaW4uaCIK
LSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
UGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJ
bmRleCh1bnNpZ25lZCBpKSAKIHsgCi0gICAgUGx1Z2luRGF0YWJhc2VXaW4gKmRiID0gUGx1Z2lu
RGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBQbHVnaW5EYXRhYmFzZSAqZGIg
PSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpOwogICAgIFBsdWdpbkluZm8qIGlu
Zm8gPSBuZXcgUGx1Z2luSW5mbzsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gZGIt
PnBsdWdpbnMoKVtpXTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gZGItPnBsdWdpbnMo
KVtpXTsKIAogICAgIGluZm8tPm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7CiAgICAgaW5mby0+Zmls
ZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CkBAIC02NSwyNSArNjYsMjUgQEAgUGx1Z2luSW5mbyog
UGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaQogCiB1bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6
OnBsdWdpbkNvdW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VXaW46Omlu
c3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKKyAgICByZXR1cm4gUGx1Z2luRGF0
YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKIH0KIAogCiBTdHJp
bmcgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKIHsKLSAgICAvLyBGSVhNRSA1NjI5MTM5OiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qg
b24gV2luZG93cy4KKyAgICAvLyBGSVhNRSA1NjI5MTM5OiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qu
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiAgICAgCiBib29sIFBsdWdJbkluZm9TdG9yZTo6
c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBlKSAKIHsKLSAg
ICByZXR1cm4gUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlw
ZVJlZ2lzdGVyZWQobWltZVR5cGUpOworICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFs
bGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJlZChtaW1lVHlwZSk7CiB9CiAKIHZvaWQg
cmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWRPcGVuUGFnZXMpCiB7Ci0gICAgUGx1Z2luRGF0YWJh
c2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOworICAgIFBsdWdpbkRhdGFiYXNl
OjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKIAogICAgIGlmIChyZWxvYWRPcGVuUGFn
ZXMpIHsKICAgICAgICAgLy8gRklYTUU6IHJlbG9hZCBvcGVuIHBhZ2VzCkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblBhY2thZ2UuY3BwCShyZXZpc2lvbiAyOTYyNikJKGZyb20gV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcDoyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5QYWNrYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSA8c2hsd2FwaS5oPgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRl
ICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNs
dWRlICJQbHVnaW5EZWJ1Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpblBhY2th
Z2VXaW46On5QbHVnaW5QYWNrYWdlV2luKCkKK3sKKyAgICBBU1NFUlQoIW1faXNMb2FkZWQpOwor
fQorCitzdGF0aWMgU3RyaW5nIGdldFZlcnNpb25JbmZvKGNvbnN0IExQVk9JRCB2ZXJzaW9uSW5m
b0RhdGEsIGNvbnN0IFN0cmluZyYgaW5mbykKK3sKKyAgICBMUFZPSUQgYnVmZmVyOworICAgIFVJ
TlQgYnVmZmVyTGVuZ3RoOworICAgIFN0cmluZyBzdWJJbmZvID0gIlxcU3RyaW5nZmlsZUluZm9c
XDA0MDkwNEU0XFwiICsgaW5mbzsKKworICAgIGJvb2wgcmV0dmFsID0gVmVyUXVlcnlWYWx1ZVco
dmVyc2lvbkluZm9EYXRhLCBjb25zdF9jYXN0PFVDaGFyKj4oc3ViSW5mby5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
YnVmZmVyLCAmYnVmZmVyTGVuZ3RoKTsKKyAgICBpZiAoIXJldHZhbCB8fCBidWZmZXJMZW5ndGgg
PT0gMCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gU3VidHJhY3QgMSBmcm9t
IHRoZSBsZW5ndGg7IHdlIGRvbid0IHdhbnQgdGhlIHRyYWlsaW5nIDAKKyAgICByZXR1cm4gU3Ry
aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIpLCBidWZmZXJMZW5ndGggLSAxKTsK
K30KKworc3RhdGljIFZlY3RvcjxTdHJpbmc+IHNwbGl0U3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
LCBjaGFyIGRlbGltaXRlciwgaW50IHBhZFRvKQoreworICAgIGludCBwb3MgPSAwOworICAgIGlu
dCBuZXdQb3M7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworICAgIERlcHJlY2F0ZWRTdHJp
bmcgZHMgPSBzdHIuZGVwcmVjYXRlZFN0cmluZygpOworICAgIFN0cmluZyBzOworICAgIGRvIHsK
KworICAgICAgICBuZXdQb3MgPSBkcy5maW5kKGRlbGltaXRlciwgcG9zKTsKKworICAgICAgICBp
ZiAobmV3UG9zID09IC0xKQorICAgICAgICAgICAgcyA9IGRzLm1pZChwb3MpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzID0gZHMubWlkKHBvcywgbmV3UG9zIC0gcG9zKTsKKyAgICAgICAg
CisgICAgICAgIGlmICghcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHMp
OworCisgICAgICAgIHBvcyA9IG5ld1BvcyArIDE7CisgICAgfSB3aGlsZSAobmV3UG9zICE9IC0x
KTsKKworICAgIHdoaWxlIChwYWRUbyAhPSAtMSAmJiBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC5z
aXplKCkpIDwgcGFkVG8pCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIiIpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVNvb24oKQor
eworICAgIEFTU0VSVCghbV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpOworICAgIEFTU0VS
VChtX21vZHVsZSk7CisgICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOworCisgICAgbV9mcmVl
TGlicmFyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlV2lu
OjpmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luUGFja2FnZVdpbj4qIC8qdGltZXIq
LykKK3sKKyAgICBBU1NFUlQobV9tb2R1bGUpOworICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAw
KTsKKworICAgIDo6RnJlZUxpYnJhcnkobV9tb2R1bGUpOworICAgIG1fbW9kdWxlID0gMDsKK30K
KworUGx1Z2luUGFja2FnZVdpbjo6UGx1Z2luUGFja2FnZVdpbihjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAs
IG1fbW9kdWxlKDApCisgICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpCisgICAgLCBt
X2lzTG9hZGVkKGZhbHNlKQorICAgICwgbV9sb2FkQ291bnQoMCkKKyAgICAsIG1fZnJlZUxpYnJh
cnlUaW1lcih0aGlzLCAmUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKQor
ICAgICwgbV9maWxlVmVyc2lvbkxTKDApCisgICAgLCBtX2ZpbGVWZXJzaW9uTVMoMCkKK3sKKyAg
ICBtX2ZpbGVOYW1lID0gU3RyaW5nKFBhdGhGaW5kRmlsZU5hbWUobV9wYXRoLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCkpKTsKKyAgICBtX3BhcmVudERpcmVjdG9yeSA9IG1fcGF0aC5s
ZWZ0KG1fcGF0aC5sZW5ndGgoKSAtIG1fZmlsZU5hbWUubGVuZ3RoKCkgLSAxKTsKK30KKwordm9p
ZCBQbHVnaW5QYWNrYWdlV2luOjpzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0Rh
dGEpCit7CisgICAgVlNfRklYRURGSUxFSU5GTyogaW5mbzsKKyAgICBVSU5UIGluZm9TaXplOwor
ICAgIGlmICghVmVyUXVlcnlWYWx1ZSh2ZXJzaW9uSW5mb0RhdGEsIFRFWFQoIlxcIiksIChMUFZP
SUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNpemVvZihWU19GSVhFREZJTEVJ
TkZPKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZmlsZVZlcnNpb25MUyA9IGluZm8tPmR3Rmls
ZVZlcnNpb25MUzsKKyAgICBtX2ZpbGVWZXJzaW9uTVMgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTVM7
Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZVdpbjo6aXNQbHVnaW5CbGFja2xpc3RlZCgpCit7Cisg
ICAgc3RhdGljIGNvbnN0IERXT1JEIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9u
TVNEV09SRCA9IDB4MDAwMTAwMDA7CisgICAgc3RhdGljIGNvbnN0IERXT1JEIHNpbHZlcmxpZ2h0
UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFNEV09SRCA9IDB4NTFCRTAwMDA7CisKKyAgICBpZiAo
bmFtZSgpID09ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgeworICAgICAgICAvLyB3b3JrYXJvdW5k
IGZvciA8cmRhcjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZlcmxpZ2h0IHdoZW4gb3BlbmluZyBt
aWNyb3NvZnQuY29tLgorICAgICAgICAvLyB0aGUgbGF0ZXN0IDEuMCB2ZXJzaW9uIG9mIFNpbHZl
cmxpZ2h0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNoLCBzbyBhbGxvdyBpdAorICAgICAg
ICAvLyBhbmQgYW55IG5ld2VyIHZlcnNpb25zCisgICAgICAgIGlmIChtX2ZpbGVWZXJzaW9uTVMg
PCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgfHwKKyAgICAgICAg
ICAgIChtX2ZpbGVWZXJzaW9uTVMgPT0gc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNp
b25NU0RXT1JEICYmIG1fZmlsZVZlcnNpb25MUyA8IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWly
ZWRWZXJzaW9uTFNEV09SRCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2Ug
aWYgKGZpbGVOYW1lKCkgPT0gIm5wbW96YXguZGxsIikKKyAgICAgICAgLy8gQnVnIDE1MjE3OiBN
b3ppbGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyB4cGNvbV9jb3Jl
LmRsbAorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBQbHVnaW5QYWNrYWdlV2luOjpmZXRjaEluZm8oKQoreworICAgIERXT1JEIHZlcnNpb25JbmZv
U2l6ZSwgemVyb0hhbmRsZTsKKyAgICB2ZXJzaW9uSW5mb1NpemUgPSBHZXRGaWxlVmVyc2lvbklu
Zm9TaXplVyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgJnplcm9IYW5k
bGUpOyAKKworICAgIGlmICh2ZXJzaW9uSW5mb1NpemUgPT0gMCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSA9IGZhc3RNYWxsb2ModmVyc2lvbklu
Zm9TaXplKTsKKworICAgIGlmICghR2V0RmlsZVZlcnNpb25JbmZvVyhtX3BhdGguY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJzaW9uSW5mb0Rh
dGEpKSB7CisgICAgICAgIGZhc3RGcmVlKHZlcnNpb25JbmZvRGF0YSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBtX25hbWUgPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5m
b0RhdGEsICJQcm9kdWN0TmFtZSIpOworICAgIG1fZGVzY3JpcHRpb24gPSBnZXRWZXJzaW9uSW5m
byh2ZXJzaW9uSW5mb0RhdGEsICJGaWxlRGVzY3JpcHRpb24iKTsKKworICAgIGlmIChtX25hbWUu
aXNOdWxsKCkgfHwgbV9kZXNjcmlwdGlvbi5pc051bGwoKSkgeworICAgICAgICBmYXN0RnJlZSh2
ZXJzaW9uSW5mb0RhdGEpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3Rv
cmVGaWxlVmVyc2lvbih2ZXJzaW9uSW5mb0RhdGEpOworCisgICAgaWYgKGlzUGx1Z2luQmxhY2ts
aXN0ZWQoKSkgeworICAgICAgICBmYXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVmVjdG9yPFN0cmluZz4gbWltZVR5cGVzID0gc3Bs
aXRTdHJpbmcoZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLCAiTUlNRVR5cGUiKSwgJ3wn
LCAtMSk7CisgICAgVmVjdG9yPFN0cmluZz4gZmlsZUV4dGVudHMgPSBzcGxpdFN0cmluZyhnZXRW
ZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJGaWxlRXh0ZW50cyIpLCAnfCcsIG1pbWVUeXBl
cy5zaXplKCkpOworICAgIFZlY3RvcjxTdHJpbmc+IGRlc2NyaXB0aW9ucyA9IHNwbGl0U3RyaW5n
KGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIkZpbGVPcGVuTmFtZSIpLCAnfCcsIG1p
bWVUeXBlcy5zaXplKCkpOworCisgICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lVHlwZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgLy8gR2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxpc3QgaW4gdGhlIGRlc2NyaXB0aW9uIHN0
cmluZworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbnNbaV07ICAgIAor
ICAgICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24uZmluZCgiKCoiKTsKKyAgICAgICAgaWYgKHBv
cyAhPSAtMSkgeworICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgYSBzcGFjZSB0aGF0IHdl
IG5lZWQgdG8gZ2V0IHJpZCBvZgorICAgICAgICAgICAgaWYgKHBvcyA+IDEgJiYgZGVzY3JpcHRp
b25bcG9zIC0gMV0gPT0gJyAnKQorICAgICAgICAgICAgICAgIHBvcy0tOworCisgICAgICAgICAg
ICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmxlZnQocG9zKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1pbWVUeXBlc1tpXSA9IG1pbWVUeXBlc1tpXS5sb3dlcigpOworCisgICAgICAgIG1fbWlt
ZVRvRXh0ZW5zaW9ucy5hZGQobWltZVR5cGVzW2ldLCBzcGxpdFN0cmluZyhmaWxlRXh0ZW50c1tp
XSwgJywnLCAtMSkpOworICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZVR5cGVz
W2ldLCBkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UGx1Z2luUGFja2FnZVdpbjo6bG9hZCgpCit7CisgICAgaWYgKG1fZnJlZUxpYnJhcnlUaW1lci5p
c0FjdGl2ZSgpKSB7CisgICAgICAgIEFTU0VSVChtX21vZHVsZSk7CisgICAgICAgIG1fZnJlZUxp
YnJhcnlUaW1lci5zdG9wKCk7CisgICAgfSBlbHNlIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAg
IG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFdDSEFSIGN1cnJlbnRQYXRoW01BWF9QQVRIXTsKKworICAgICAgICBpZiAoITo6R2V0Q3Vy
cmVudERpcmVjdG9yeVcoTUFYX1BBVEgsIGN1cnJlbnRQYXRoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBTdHJpbmcgcGF0aCA9IG1fcGF0aC5zdWJzdHJpbmcoMCwgbV9w
YXRoLnJldmVyc2VGaW5kKCdcXCcpKTsKKworICAgICAgICBpZiAoITo6U2V0Q3VycmVudERpcmVj
dG9yeVcocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBMb2FkIHRoZSBsaWJyYXJ5CisgICAgICAgIG1f
bW9kdWxlID0gOjpMb2FkTGlicmFyeVcobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkpOworCisgICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0
aCkpIHsKKyAgICAgICAgICAgIGlmIChtX21vZHVsZSkKKyAgICAgICAgICAgICAgICA6OkZyZWVM
aWJyYXJ5KG1fbW9kdWxlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICghbV9tb2R1bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyIE5QX0dl
dEVudHJ5UG9pbnRzID0gMDsKKyAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXpl
ID0gMDsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAgTlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0
aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiKTsK
KyAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJv
Y0FkZHJlc3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBvaW50cyIpOworICAgIG1fTlBQX1NodXRk
b3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9T
aHV0ZG93biIpOworCisgICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFOUF9HZXRFbnRyeVBvaW50
cyB8fCAhbV9OUFBfU2h1dGRvd24pCisgICAgICAgIGdvdG8gYWJvcnQ7CisgIAorICAgIG1lbXNl
dCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdp
bkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisKKyAgICBucEVyciA9IE5QX0dl
dEVudHJ5UG9pbnRzKCZtX3BsdWdpbkZ1bmNzKTsKKyAgICBMT0dfTlBFUlJPUihucEVycik7Cisg
ICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisg
ICAgbWVtc2V0KCZtX2Jyb3dzZXJGdW5jcywgMCwgc2l6ZW9mKG1fYnJvd3NlckZ1bmNzKSk7Cisg
ICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAobV9icm93c2VyRnVuY3MpOworICAgIG1f
YnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9SOworICAgIG1fYnJvd3NlckZ1
bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5Q
Tl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RS
ZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07CisgICAg
bV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAgbV9icm93c2VyRnVuY3MuZGVz
dHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1
cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2Vu
dDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAgbV9icm93c2VyRnVuY3MubWVt
Zmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9
IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5Q
Tl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Q
b3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVl
OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOworICAgIG1fYnJv
d3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OworICAgIG1fYnJv
d3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7CisgICAgbV9icm93c2VyRnVuY3Mu
Z2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9icm93c2VyRnVuY3MucHVzaHBv
cHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJv
d3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3Rh
dGU7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxl
YXNlVmFyaWFudFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIg
PSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5n
aWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1
bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50aWZpZXI7CisgICAgbV9icm93
c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7Cisg
ICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50
aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaW50ZnJvbWlkZW50aWZpZXIgPSBfTlBOX0ludEZy
b21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3Jl
YXRlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWlu
T2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VP
YmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7CisgICAgbV9i
cm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVuY3Mu
Z2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHBy
b3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9w
ZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVy
dHkgPSBfTlBOX0hhc01ldGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBO
X0hhc1Byb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0
RXhjZXB0aW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRl
OworCisgICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcyk7CisgICAgTE9H
X05QRVJST1IobnBFcnIpOworCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAg
ICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsK
K2Fib3J0OgorICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxvYWQoKQoreworICAgIGlmICghbV9pc0xv
YWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX05QUF9TaHV0ZG93bigpOworCisgICAgdW5sb2FkV2l0aG91
dFNodXRkb3duKCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZVdpbjo6dW5sb2FkV2l0aG91dFNo
dXRkb3duKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsKKyAgICBBU1NFUlQobV9tb2R1bGUpOworCisgICAg
Ly8gPHJkYXI6Ly81NTMwNTE5PjogQ3Jhc2ggd2hlbiBjbG9zaW5nIHRhYiB3aXRoIHBkZiBmaWxl
IChSZWFkZXIgNyBvbmx5KQorICAgIC8vIElmIHRoZSBwbHVnaW4gaGFzIHN1YmNsYXNzZWQgaXRz
IHBhcmVudCB3aW5kb3csIGFzIHdpdGggUmVhZGVyIDcsIHdlIG1heSBoYXZlCisgICAgLy8gZ290
dGVuIGhlcmUgYnkgd2F5IG9mIHRoZSBwbHVnaW4ncyBpbnRlcm5hbCB3aW5kb3cgcHJvYyBmb3J3
YXJkaW5nIGEgbWVzc2FnZSB0byBvdXIKKyAgICAvLyBvcmlnaW5hbCB3aW5kb3cgcHJvYy4gSWYg
d2UgZnJlZSB0aGUgcGx1Z2luIGxpYnJhcnkgZnJvbSBoZXJlLCB3ZSB3aWxsIGp1bXAgYmFjawor
ICAgIC8vIHRvIGNvZGUgd2UganVzdCBmcmVlZCB3aGVuIHdlIHJldHVybiwgc28gZGVsYXkgY2Fs
bGluZyBGcmVlTGlicmFyeSBhdCBsZWFzdCB1bnRpbAorICAgIC8vIHRoZSBuZXh0IG1lc3NhZ2Ug
bG9vcAorICAgIGZyZWVMaWJyYXJ5U29vbigpOworCisgICAgbV9pc0xvYWRlZCA9IGZhbHNlOwor
fQorCitQbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCkKK3sKKyAgICBQ
bHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gbmV3IFBsdWdpblBhY2thZ2VXaW4ocGF0aCwgbGFz
dE1vZGlmaWVkKTsKKworICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpIHsKKyAgICAgICAg
ZGVsZXRlIHBhY2thZ2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gcGFja2FnZTsKK30KKwordW5zaWduZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0
Cit7IAorICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1szXSA9IHsKKyAgICAgICAgbV9kZXNjcmlwdGlv
bi5pbXBsKCktPmhhc2goKSwKKyAgICAgICAgbV9sYXN0TW9kaWZpZWQuZHdMb3dEYXRlVGltZSwK
KyAgICAgICAgbV9sYXN0TW9kaWZpZWQuZHdIaWdoRGF0ZVRpbWUKKyAgICB9OworCisgICAgcmV0
dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNo
Q29kZXMpLCAzICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOworfQorCitib29s
IFBsdWdpblBhY2thZ2VXaW46OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0
IFBsdWdpblBhY2thZ2VXaW4mIGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBi
Lm1fZGVzY3JpcHRpb24gJiYgKENvbXBhcmVGaWxlVGltZSgmYS5tX2xhc3RNb2RpZmllZCwgJmIu
bV9sYXN0TW9kaWZpZWQpID09IDApOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luUGFja2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2th
Z2UuY3BwCShyZXZpc2lvbiAyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDEwICsyNCw4IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKICAqLwogCi0jaW5jbHVkZSA8c2hsd2FwaS5oPgotCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
IAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgpAQCAt
MzUsNTUgKzM0LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGx1Z2luUGFja2FnZVdp
bjo6flBsdWdpblBhY2thZ2VXaW4oKQorUGx1Z2luUGFja2FnZTo6flBsdWdpblBhY2thZ2UoKQog
ewogICAgIEFTU0VSVCghbV9pc0xvYWRlZCk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgZ2V0VmVyc2lv
bkluZm8oY29uc3QgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSwgY29uc3QgU3RyaW5nJiBpbmZvKQot
ewotICAgIExQVk9JRCBidWZmZXI7Ci0gICAgVUlOVCBidWZmZXJMZW5ndGg7Ci0gICAgU3RyaW5n
IHN1YkluZm8gPSAiXFxTdHJpbmdmaWxlSW5mb1xcMDQwOTA0RTRcXCIgKyBpbmZvOwotCi0gICAg
Ym9vbCByZXR2YWwgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEsIGNvbnN0X2Nhc3Q8
VUNoYXIqPihzdWJJbmZvLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZmZXIsICZidWZmZXJMZW5ndGgpOwotICAg
IGlmICghcmV0dmFsIHx8IGJ1ZmZlckxlbmd0aCA9PSAwKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0KLSAgICAvLyBTdWJ0cmFjdCAxIGZyb20gdGhlIGxlbmd0aDsgd2UgZG9uJ3Qgd2FudCB0
aGUgdHJhaWxpbmcgMAotICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+
KGJ1ZmZlciksIGJ1ZmZlckxlbmd0aCAtIDEpOwotfQotCi1zdGF0aWMgVmVjdG9yPFN0cmluZz4g
c3BsaXRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIGNoYXIgZGVsaW1pdGVyLCBpbnQgcGFkVG8p
Ci17Ci0gICAgaW50IHBvcyA9IDA7Ci0gICAgaW50IG5ld1BvczsKLSAgICBWZWN0b3I8U3RyaW5n
PiByZXN1bHQ7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBkcyA9IHN0ci5kZXByZWNhdGVkU3RyaW5n
KCk7Ci0gICAgU3RyaW5nIHM7Ci0gICAgZG8gewotCi0gICAgICAgIG5ld1BvcyA9IGRzLmZpbmQo
ZGVsaW1pdGVyLCBwb3MpOwotCi0gICAgICAgIGlmIChuZXdQb3MgPT0gLTEpCi0gICAgICAgICAg
ICBzID0gZHMubWlkKHBvcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHMgPSBkcy5taWQo
cG9zLCBuZXdQb3MgLSBwb3MpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFzLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocyk7Ci0KLSAgICAgICAgcG9zID0gbmV3UG9zICsg
MTsKLSAgICB9IHdoaWxlIChuZXdQb3MgIT0gLTEpOwotCi0gICAgd2hpbGUgKHBhZFRvICE9IC0x
ICYmIHN0YXRpY19jYXN0PGludD4ocmVzdWx0LnNpemUoKSkgPCBwYWRUbykKLSAgICAgICAgcmVz
dWx0LmFwcGVuZCgiIik7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFBsdWdpblBh
Y2thZ2VXaW46OmZyZWVMaWJyYXJ5U29vbigpCit2b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVMaWJy
YXJ5U29vbigpCiB7CiAgICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSk7
CiAgICAgQVNTRVJUKG1fbW9kdWxlKTsKQEAgLTkyLDIzMCArNDgsMjggQEAgdm9pZCBQbHVnaW5Q
YWNrYWdlV2luOjpmcmVlTGlicmFyeVNvb24oKQogICAgIG1fZnJlZUxpYnJhcnlUaW1lci5zdGFy
dE9uZVNob3QoMCk7CiB9CiAKLXZvaWQgUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlUaW1l
ckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+KiAvKnRpbWVyKi8pCit2b2lkIFBsdWdpblBh
Y2thZ2U6OmZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdlPiogLyp0aW1l
ciovKQogewogICAgIEFTU0VSVChtX21vZHVsZSk7CiAgICAgQVNTRVJUKG1fbG9hZENvdW50ID09
IDApOwogCi0gICAgOjpGcmVlTGlicmFyeShtX21vZHVsZSk7CisgICAgdW5sb2FkTW9kdWxlKG1f
bW9kdWxlKTsKICAgICBtX21vZHVsZSA9IDA7CiB9CiAKLVBsdWdpblBhY2thZ2VXaW46OlBsdWdp
blBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlm
aWVkKQotICAgIDogbV9wYXRoKHBhdGgpCitQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgUGxhdGZvcm1GaWxlVGltZSYgbGFzdE1vZGlmaWVkKQor
ICAgIDogbV9pc0xvYWRlZChmYWxzZSkKKyAgICAsIG1fbG9hZENvdW50KDApCisgICAgLCBtX3Bh
dGgocGF0aCkKICAgICAsIG1fbW9kdWxlKDApCiAgICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9k
aWZpZWQpCi0gICAgLCBtX2lzTG9hZGVkKGZhbHNlKQotICAgICwgbV9sb2FkQ291bnQoMCkKLSAg
ICAsIG1fZnJlZUxpYnJhcnlUaW1lcih0aGlzLCAmUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJh
cnlUaW1lckZpcmVkKQotICAgICwgbV9maWxlVmVyc2lvbkxTKDApCi0gICAgLCBtX2ZpbGVWZXJz
aW9uTVMoMCkKKyAgICAsIG1fZnJlZUxpYnJhcnlUaW1lcih0aGlzLCAmUGx1Z2luUGFja2FnZTo6
ZnJlZUxpYnJhcnlUaW1lckZpcmVkKQogewotICAgIG1fZmlsZU5hbWUgPSBTdHJpbmcoUGF0aEZp
bmRGaWxlTmFtZShtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSkpOworICAg
IG1fZmlsZU5hbWUgPSBwYXRoR2V0RmlsZU5hbWUobV9wYXRoKTsKICAgICBtX3BhcmVudERpcmVj
dG9yeSA9IG1fcGF0aC5sZWZ0KG1fcGF0aC5sZW5ndGgoKSAtIG1fZmlsZU5hbWUubGVuZ3RoKCkg
LSAxKTsKIH0KIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpzdG9yZUZpbGVWZXJzaW9uKExQVk9J
RCB2ZXJzaW9uSW5mb0RhdGEpCi17Ci0gICAgVlNfRklYRURGSUxFSU5GTyogaW5mbzsKLSAgICBV
SU5UIGluZm9TaXplOwotICAgIGlmICghVmVyUXVlcnlWYWx1ZSh2ZXJzaW9uSW5mb0RhdGEsIFRF
WFQoIlxcIiksIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNpemVv
ZihWU19GSVhFREZJTEVJTkZPKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZmlsZVZlcnNpb25M
UyA9IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKLSAgICBtX2ZpbGVWZXJzaW9uTVMgPSBpbmZvLT5k
d0ZpbGVWZXJzaW9uTVM7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6aXNQbHVnaW5CbGFj
a2xpc3RlZCgpCi17Ci0gICAgc3RhdGljIGNvbnN0IERXT1JEIHNpbHZlcmxpZ2h0UGx1Z2luTWlu
UmVxdWlyZWRWZXJzaW9uTVNEV09SRCA9IDB4MDAwMTAwMDA7Ci0gICAgc3RhdGljIGNvbnN0IERX
T1JEIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFNEV09SRCA9IDB4NTFCRTAw
MDA7Ci0KLSAgICBpZiAobmFtZSgpID09ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgewotICAgICAg
ICAvLyB3b3JrYXJvdW5kIGZvciA8cmRhcjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZlcmxpZ2h0
IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQuY29tLgotICAgICAgICAvLyB0aGUgbGF0ZXN0IDEuMCB2
ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNoLCBzbyBh
bGxvdyBpdAotICAgICAgICAvLyBhbmQgYW55IG5ld2VyIHZlcnNpb25zCi0gICAgICAgIGlmICht
X2ZpbGVWZXJzaW9uTVMgPCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdP
UkQgfHwKLSAgICAgICAgICAgIChtX2ZpbGVWZXJzaW9uTVMgPT0gc2lsdmVybGlnaHRQbHVnaW5N
aW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEICYmIG1fZmlsZVZlcnNpb25MUyA8IHNpbHZlcmxpZ2h0
UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFNEV09SRCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9IGVsc2UgaWYgKGZpbGVOYW1lKCkgPT0gIm5wbW96YXguZGxsIikKLSAgICAgICAg
Ly8gQnVnIDE1MjE3OiBNb3ppbGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMgYWJvdXQgbWlz
c2luZyB4cGNvbV9jb3JlLmRsbAotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpmZXRjaEluZm8oKQotewotICAgIERX
T1JEIHZlcnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsKLSAgICB2ZXJzaW9uSW5mb1NpemUgPSBH
ZXRGaWxlVmVyc2lvbkluZm9TaXplVyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKSwgJnplcm9IYW5kbGUpOyAKLQotICAgIGlmICh2ZXJzaW9uSW5mb1NpemUgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSA9IGZhc3RN
YWxsb2ModmVyc2lvbkluZm9TaXplKTsKLQotICAgIGlmICghR2V0RmlsZVZlcnNpb25JbmZvVyht
X3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgdmVyc2lvbkluZm9TaXpl
LCB2ZXJzaW9uSW5mb0RhdGEpKSB7Ci0gICAgICAgIGZhc3RGcmVlKHZlcnNpb25JbmZvRGF0YSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX25hbWUgPSBnZXRWZXJzaW9u
SW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJQcm9kdWN0TmFtZSIpOwotICAgIG1fZGVzY3JpcHRpb24g
PSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJGaWxlRGVzY3JpcHRpb24iKTsKLQot
ICAgIGlmIChtX25hbWUuaXNOdWxsKCkgfHwgbV9kZXNjcmlwdGlvbi5pc051bGwoKSkgewotICAg
ICAgICBmYXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgc3RvcmVGaWxlVmVyc2lvbih2ZXJzaW9uSW5mb0RhdGEpOwotCi0gICAgaWYg
KGlzUGx1Z2luQmxhY2tsaXN0ZWQoKSkgewotICAgICAgICBmYXN0RnJlZSh2ZXJzaW9uSW5mb0Rh
dGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVmVjdG9yPFN0cmluZz4g
bWltZVR5cGVzID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLCAi
TUlNRVR5cGUiKSwgJ3wnLCAtMSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gZmlsZUV4dGVudHMgPSBz
cGxpdFN0cmluZyhnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJGaWxlRXh0ZW50cyIp
LCAnfCcsIG1pbWVUeXBlcy5zaXplKCkpOwotICAgIFZlY3RvcjxTdHJpbmc+IGRlc2NyaXB0aW9u
cyA9IHNwbGl0U3RyaW5nKGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIkZpbGVPcGVu
TmFtZSIpLCAnfCcsIG1pbWVUeXBlcy5zaXplKCkpOwotCi0gICAgZmFzdEZyZWUodmVyc2lvbklu
Zm9EYXRhKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lVHlwZXMuc2l6ZSgp
OyBpKyspIHsKLSAgICAgICAgLy8gR2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxpc3QgaW4gdGhl
IGRlc2NyaXB0aW9uIHN0cmluZwotICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBkZXNjcmlw
dGlvbnNbaV07ICAgIAotICAgICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24uZmluZCgiKCoiKTsK
LSAgICAgICAgaWYgKHBvcyAhPSAtMSkgewotICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUg
YSBzcGFjZSB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZgotICAgICAgICAgICAgaWYgKHBvcyA+
IDEgJiYgZGVzY3JpcHRpb25bcG9zIC0gMV0gPT0gJyAnKQotICAgICAgICAgICAgICAgIHBvcy0t
OwotCi0gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmxlZnQocG9zKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1pbWVUeXBlc1tpXSA9IG1pbWVUeXBlc1tpXS5sb3dlcigpOwot
Ci0gICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZVR5cGVzW2ldLCBzcGxpdFN0cmlu
ZyhmaWxlRXh0ZW50c1tpXSwgJywnLCAtMSkpOwotICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9u
cy5hZGQobWltZVR5cGVzW2ldLCBkZXNjcmlwdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6bG9hZCgpCi17Ci0gICAgaWYgKG1fZnJl
ZUxpYnJhcnlUaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIEFTU0VSVChtX21vZHVsZSk7Ci0g
ICAgICAgIG1fZnJlZUxpYnJhcnlUaW1lci5zdG9wKCk7Ci0gICAgfSBlbHNlIGlmIChtX2lzTG9h
ZGVkKSB7Ci0gICAgICAgIG1fbG9hZENvdW50Kys7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFdDSEFSIGN1cnJlbnRQYXRoW01BWF9QQVRIXTsKLQotICAgICAg
ICBpZiAoITo6R2V0Q3VycmVudERpcmVjdG9yeVcoTUFYX1BBVEgsIGN1cnJlbnRQYXRoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBTdHJpbmcgcGF0aCA9IG1fcGF0aC5z
dWJzdHJpbmcoMCwgbV9wYXRoLnJldmVyc2VGaW5kKCdcXCcpKTsKLQotICAgICAgICBpZiAoITo6
U2V0Q3VycmVudERpcmVjdG9yeVcocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBMb2FkIHRoZSBsaWJy
YXJ5Ci0gICAgICAgIG1fbW9kdWxlID0gOjpMb2FkTGlicmFyeVcobV9wYXRoLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCkpOwotCi0gICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0
b3J5VyhjdXJyZW50UGF0aCkpIHsKLSAgICAgICAgICAgIGlmIChtX21vZHVsZSkKLSAgICAgICAg
ICAgICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV9tb2R1bGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1faXNMb2FkZWQgPSB0cnVlOwotCi0gICAgTlBfR2V0RW50cnlQb2lu
dHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0gMDsKLSAgICBOUF9Jbml0aWFsaXplRnVuY1B0
ciBOUF9Jbml0aWFsaXplID0gMDsKLSAgICBOUEVycm9yIG5wRXJyOwotCi0gICAgTlBfSW5pdGlh
bGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5Q
X0luaXRpYWxpemUiKTsKLSAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRyeVBvaW50
c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBvaW50cyIpOwot
ICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0FkZHJlc3Mo
bV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOwotCi0gICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFO
UF9HZXRFbnRyeVBvaW50cyB8fCAhbV9OUFBfU2h1dGRvd24pCi0gICAgICAgIGdvdG8gYWJvcnQ7
Ci0gIAotICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3Mp
KTsKLSAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7Ci0KLSAg
ICBucEVyciA9IE5QX0dldEVudHJ5UG9pbnRzKCZtX3BsdWdpbkZ1bmNzKTsKLSAgICBMT0dfTlBF
UlJPUihucEVycik7Ci0gICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICBn
b3RvIGFib3J0OwotCi0gICAgbWVtc2V0KCZtX2Jyb3dzZXJGdW5jcywgMCwgc2l6ZW9mKG1fYnJv
d3NlckZ1bmNzKSk7Ci0gICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAobV9icm93c2Vy
RnVuY3MpOwotICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9SOwot
ICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7Ci0gICAgbV9icm93c2VyRnVu
Y3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOwotICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFk
ID0gTlBOX1JlcXVlc3RSZWFkOwotICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9O
ZXdTdHJlYW07Ci0gICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7Ci0gICAgbV9i
cm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOwotICAgIG1fYnJv
d3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7Ci0gICAgbV9icm93c2VyRnVuY3MudWFnZW50
ID0gTlBOX1VzZXJBZ2VudDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1B
bGxvYzsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7Ci0gICAgbV9i
cm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7Ci0gICAgbV9icm93c2VyRnVuY3Mu
cmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOwotICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7Ci0gICAgbV9icm93c2VyRnVuY3MucG9zdHVy
bG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVl
ID0gTlBOX0dldFZhbHVlOwotICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZh
bHVlOwotICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVS
ZWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0
ZVJlZ2lvbjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJh
dzsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7Ci0gICAg
bV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7Ci0gICAgbV9icm93
c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0
YXRlOwotICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQ
b3B1cHNFbmFibGVkU3RhdGU7Ci0KLSAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZh
bHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0
cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7Ci0gICAgbV9icm93c2Vy
RnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOwot
ICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50aWZp
ZXI7Ci0gICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlm
aWVySXNTdHJpbmc7Ci0gICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05Q
Tl9VVEY4RnJvbUlkZW50aWZpZXI7Ci0gICAgbV9icm93c2VyRnVuY3MuaW50ZnJvbWlkZW50aWZp
ZXIgPSBfTlBOX0ludEZyb21JZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9i
amVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVj
dCA9IF9OUE5fUmV0YWluT2JqZWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3Qg
PSBfTlBOX1JlbGVhc2VPYmplY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0gX05QTl9J
bnZva2U7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVm
YXVsdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7Ci0gICAg
bV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5OwotICAgIG1fYnJv
d3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKLSAgICBtX2Jyb3dzZXJG
dW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7Ci0gICAgbV9icm93c2Vy
RnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc01ldGhvZDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5o
YXNtZXRob2QgPSBfTlBOX0hhc1Byb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2Vw
dGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOwotICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9
IF9OUE5fRW51bWVyYXRlOwotCi0gICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJG
dW5jcyk7Ci0gICAgTE9HX05QRVJST1IobnBFcnIpOwotCi0gICAgaWYgKG5wRXJyICE9IE5QRVJS
X05PX0VSUk9SKQotICAgICAgICBnb3RvIGFib3J0OwotCi0gICAgbV9sb2FkQ291bnQrKzsKLSAg
ICByZXR1cm4gdHJ1ZTsKLWFib3J0OgotICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxvYWQoKQordm9p
ZCBQbHVnaW5QYWNrYWdlOjp1bmxvYWQoKQogewogICAgIGlmICghbV9pc0xvYWRlZCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzI4LDcgKzgyLDcgQEAgdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxv
YWQoKQogICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwogfQogCi12b2lkIFBsdWdpblBhY2th
Z2VXaW46OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCit2b2lkIFBsdWdpblBhY2thZ2U6OnVubG9h
ZFdpdGhvdXRTaHV0ZG93bigpCiB7CiAgICAgaWYgKCFtX2lzTG9hZGVkKQogICAgICAgICByZXR1
cm47CkBAIC0zNDcsOSArMTAxLDkgQEAgdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxvYWRXaXRo
b3V0U2h1dAogICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKIH0KIAotUGx1Z2luUGFja2FnZVdpbiog
UGx1Z2luUGFja2FnZVdpbjo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5QYWNrYWdlOjpj
cmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgUGxhdGZvcm1GaWxlVGltZSYg
bGFzdE1vZGlmaWVkKQogewotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBuZXcgUGx1
Z2luUGFja2FnZVdpbihwYXRoLCBsYXN0TW9kaWZpZWQpOworICAgIFBsdWdpblBhY2thZ2UqIHBh
Y2thZ2UgPSBuZXcgUGx1Z2luUGFja2FnZShwYXRoLCBsYXN0TW9kaWZpZWQpOwogCiAgICAgaWYg
KCFwYWNrYWdlLT5mZXRjaEluZm8oKSkgewogICAgICAgICBkZWxldGUgcGFja2FnZTsKQEAgLTM1
OSwyMCArMTEzLDQgQEAgUGx1Z2luUGFja2FnZVdpbiogUGx1Z2luUGFja2FnZVdpbjo6Y3JlYQog
ICAgIHJldHVybiBwYWNrYWdlOwogfQogCi11bnNpZ25lZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNo
KCkgY29uc3QKLXsgCi0gICAgdW5zaWduZWQgaGFzaENvZGVzWzNdID0gewotICAgICAgICBtX2Rl
c2NyaXB0aW9uLmltcGwoKS0+aGFzaCgpLAotICAgICAgICBtX2xhc3RNb2RpZmllZC5kd0xvd0Rh
dGVUaW1lLAotICAgICAgICBtX2xhc3RNb2RpZmllZC5kd0hpZ2hEYXRlVGltZQotICAgIH07Ci0K
LSAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hh
cio+KGhhc2hDb2RlcyksIDMgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9mKFVDaGFyKSk7Ci19
Ci0KLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZVdpbiYg
YSwgY29uc3QgUGx1Z2luUGFja2FnZVdpbiYgYikKLXsKLSAgICByZXR1cm4gYS5tX2Rlc2NyaXB0
aW9uID09IGIubV9kZXNjcmlwdGlvbiAmJiAoQ29tcGFyZUZpbGVUaW1lKCZhLm1fbGFzdE1vZGlm
aWVkLCAmYi5tX2xhc3RNb2RpZmllZCkgPT0gMCk7Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9QbHVnaW5QYWNrYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blBhY2thZ2UuaAkocmV2aXNpb24gMjk2MjYpCShmcm9tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luUGFja2FnZVdpbi5oOjI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFBsdWdpblBhY2thZ2VXaW5fSAorI2RlZmluZSBQbHVnaW5QYWNrYWdlV2luX0gKKworI2lu
Y2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAiVGlt
ZXIuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOworICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9u
c01hcDsKKworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VXaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxQ
bHVnaW5QYWNrYWdlV2luPiB7CisgICAgcHVibGljOgorICAgICAgICB+UGx1Z2luUGFja2FnZVdp
bigpOworICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZVdpbiogY3JlYXRlUGFja2FnZShjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpOworICAgICAgICAK
KyAgICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICAgICAg
U3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQorICAg
ICAgICBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisgICAg
ICAgIFN0cmluZyBwYXJlbnREaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudERpcmVj
dG9yeTsgfQorCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVz
Y3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KKyAgICAg
ICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0IHsg
cmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQorCisgICAgICAgIHVuc2lnbmVkIFBsdWdpblBh
Y2thZ2VXaW46Omhhc2goKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
UGx1Z2luUGFja2FnZVdpbiYgYSwgY29uc3QgUGx1Z2luUGFja2FnZVdpbiYgYik7CisKKyAgICAg
ICAgYm9vbCBsb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkKCk7CisgICAgICAgIHZvaWQgdW5s
b2FkV2l0aG91dFNodXRkb3duKCk7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1
Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQorICAgIHByaXZhdGU6
CisgICAgICAgIFBsdWdpblBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxF
VElNRSYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKKyAgICAgICAg
dm9pZCBzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpOworICAgICAgICBi
b29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKTsKKworICAgICAgICBib29sIG1faXNMb2FkZWQ7Cisg
ICAgICAgIGludCBtX2xvYWRDb3VudDsKKworICAgICAgICBEV09SRCBtX2ZpbGVWZXJzaW9uTVM7
CisgICAgICAgIERXT1JEIG1fZmlsZVZlcnNpb25MUzsKKworICAgICAgICBTdHJpbmcgbV9kZXNj
cmlwdGlvbjsKKyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgU3RyaW5nIG1fZmlsZU5h
bWU7CisgICAgICAgIFN0cmluZyBtX25hbWU7CisgICAgICAgIFN0cmluZyBtX3BhcmVudERpcmVj
dG9yeTsKKworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXAgbV9taW1lVG9EZXNjcmlwdGlv
bnM7CisgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXAgbV9taW1lVG9FeHRlbnNpb25zOworCisg
ICAgICAgIEhNT0RVTEUgbV9tb2R1bGU7CisgICAgICAgIEZJTEVUSU1FIG1fbGFzdE1vZGlmaWVk
OworCisgICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247CisgICAgICAg
IE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1f
YnJvd3NlckZ1bmNzOworCisgICAgICAgIHZvaWQgZnJlZUxpYnJhcnlTb29uKCk7CisgICAgICAg
IHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+Kik7Cisg
ICAgICAgIFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+IG1fZnJlZUxpYnJhcnlUaW1lcjsKKyAgICB9
OworCisgICAgc3RydWN0IFBsdWdpblBhY2thZ2VXaW5IYXNoIHsKKyAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVn
aW5QYWNrYWdlV2luKj4oa2V5KS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYga2V5KSB7IHJldHVybiBrZXktPmhh
c2goKTsgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBp
bnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlV2luKj4o
YSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGIpKTsgfQorICAgICAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4mIGEsIGNvbnN0
IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZVdpbjo6
ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1
ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byB1c2UgYSBjdXN0b20gSGFzaCBmdW5j
dGlvbiBidXQgd2l0aCBkZWZhdWx0IHRyYWl0cy4KKy8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0
byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9yYWdlVHJhaXRzIHNwZWNpYWxpemF0aW9uLgorbmFtZXNw
YWNlIFdURiB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2Vi
Q29yZTo6UGx1Z2luUGFja2FnZVdpbkhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBs
dWdpblBhY2thZ2VXaW4+ID4gPiB7CisgICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJl
ZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPik+OjpTaWduZWRUeXBlIEludFR5cGU7Cisg
ICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbkhhc2ggSGFzaDsKKyAgICAg
ICAgdHlwZWRlZiBIYXNoVHJhaXRzPEludFR5cGU+IFRyYWl0czsKKyAgICB9OworfQorCisKKyNl
bmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCShyZXZpc2lvbiAyOTYyNikKKysrIFdl
YkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEyICsy
MywxMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQbHVnaW5QYWNrYWdlV2lu
X0gKLSNkZWZpbmUgUGx1Z2luUGFja2FnZVdpbl9ICi0KLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgot
I2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZm5kZWYgUGx1Z2luUGFja2FnZV9ICisjZGVmaW5lIFBs
dWdpblBhY2thZ2VfSAogCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtNDAsMTAgKzM5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+IE1JTUVU
b0V4dGVuc2lvbnNNYXA7CiAKLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdlV2luIDogcHVibGljIFJl
ZkNvdW50ZWQ8UGx1Z2luUGFja2FnZVdpbj4geworICAgIGNsYXNzIFBsdWdpblBhY2thZ2UgOiBw
dWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlPiB7CiAgICAgcHVibGljOgotICAgICAgICB+
UGx1Z2luUGFja2FnZVdpbigpOwotICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZVdpbiogY3Jl
YXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZp
ZWQpOworICAgICAgICB+UGx1Z2luUGFja2FnZSgpOworICAgICAgICBzdGF0aWMgUGx1Z2luUGFj
a2FnZSogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFBsYXRmb3JtRmls
ZVRpbWUmIGxhc3RNb2RpZmllZCk7CiAgICAgICAgIAogICAgICAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25z
dCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CkBAIC01Myw4ICs1Miw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNj
cmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9uczsgfQogICAgICAg
ICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CiAKLSAgICAgICAgdW5zaWduZWQgUGx1Z2luUGFj
a2FnZVdpbjo6aGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQ
bHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBiKTsKKyAgICAgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICAgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYikgeyBy
ZXR1cm4gZmFsc2U7IH0KIAogICAgICAgICBib29sIGxvYWQoKTsKICAgICAgICAgdm9pZCB1bmxv
YWQoKTsKQEAgLTYyLDE3ICs2MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
Y29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVn
aW5GdW5jczsgfQogICAgIHByaXZhdGU6Ci0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4oY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgUGx1
Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFBsYXRmb3JtRmlsZVRpbWUmIGxh
c3RNb2RpZmllZCk7CisgICAgICAgIGJvb2wgaXNQbHVnaW5CbGFja2xpc3RlZCgpIGNvbnN0Owog
ICAgICAgICBib29sIGZldGNoSW5mbygpOwotICAgICAgICB2b2lkIHN0b3JlRmlsZVZlcnNpb24o
TFBWT0lEIHZlcnNpb25JbmZvRGF0YSk7Ci0gICAgICAgIGJvb2wgaXNQbHVnaW5CbGFja2xpc3Rl
ZCgpOwogCiAgICAgICAgIGJvb2wgbV9pc0xvYWRlZDsKICAgICAgICAgaW50IG1fbG9hZENvdW50
OwogCi0gICAgICAgIERXT1JEIG1fZmlsZVZlcnNpb25NUzsKLSAgICAgICAgRFdPUkQgbV9maWxl
VmVyc2lvbkxTOwotCiAgICAgICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9uOwogICAgICAgICBTdHJp
bmcgbV9wYXRoOwogICAgICAgICBTdHJpbmcgbV9maWxlTmFtZTsKQEAgLTgyLDI0ICs3NywyNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBtX21p
bWVUb0Rlc2NyaXB0aW9uczsKICAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21pbWVUb0V4
dGVuc2lvbnM7CiAKLSAgICAgICAgSE1PRFVMRSBtX21vZHVsZTsKLSAgICAgICAgRklMRVRJTUUg
bV9sYXN0TW9kaWZpZWQ7CisgICAgICAgIFBsYXRmb3JtTW9kdWxlIG1fbW9kdWxlOworICAgICAg
ICBQbGF0Zm9ybUZpbGVUaW1lIG1fbGFzdE1vZGlmaWVkOwogCiAgICAgICAgIE5QUF9TaHV0ZG93
blByb2NQdHIgbV9OUFBfU2h1dGRvd247CiAgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5G
dW5jczsKICAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOwogCiAgICAgICAg
IHZvaWQgZnJlZUxpYnJhcnlTb29uKCk7Ci0gICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZp
cmVkKFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+Kik7Ci0gICAgICAgIFRpbWVyPFBsdWdpblBhY2th
Z2VXaW4+IG1fZnJlZUxpYnJhcnlUaW1lcjsKKyAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVy
RmlyZWQoVGltZXI8UGx1Z2luUGFja2FnZT4qKTsKKyAgICAgICAgVGltZXI8UGx1Z2luUGFja2Fn
ZT4gbV9mcmVlTGlicmFyeVRpbWVyOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgUGx1Z2luUGFja2Fn
ZVdpbkhhc2ggewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihrZXkpLT5oYXNoKCk7
IH0KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2th
Z2VXaW4+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CisgICAgc3RydWN0IFBsdWdpblBh
Y2thZ2VIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oa2V5KS0+aGFzaCgpOyB9
CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdl
PiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQogCi0gICAgICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRf
Y2FzdDxQbHVnaW5QYWNrYWdlV2luKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2Fn
ZVdpbio+KGIpKTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1
Z2luUGFja2FnZVdpbj4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYgYikgeyBy
ZXR1cm4gUGx1Z2luUGFja2FnZVdpbjo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQorICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBpbnQgYSwgY29uc3QgaW50IGIpIHsgcmV0dXJu
IGVxdWFsKHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGEpLCByZWludGVycHJldF9j
YXN0PFBsdWdpblBhY2thZ2UqPihiKSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4m
IGIpIHsgcmV0dXJuIFBsdWdpblBhY2thZ2U6OmVxdWFsKCphLmdldCgpLCAqYi5nZXQoKSk7IH0K
ICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQg
PSBmYWxzZTsKICAgICB9OwogCkBAIC0xMDgsOSArMTAzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJl
IGl0J3MgaW1wb3NzaWJsZSB0byB1c2UgYSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBk
ZWZhdWx0IHRyYWl0cy4KIC8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhv
dXQgYSBTdG9yYWdlVHJhaXRzIHNwZWNpYWxpemF0aW9uLgogbmFtZXNwYWNlIFdURiB7Ci0gICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFj
a2FnZVdpbkhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW4+
ID4gPiB7Ci0gICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlV2luPik+OjpTaWduZWRUeXBlIEludFR5cGU7Ci0gICAgICAgIHR5cGVkZWYg
V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbkhhc2ggSGFzaDsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBIYXNoS2V5U3RvcmFnZVRyYWl0czxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlSGFzaCwgSGFzaFRy
YWl0czxSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZT4gPiA+IHsKKyAgICAgICAgdHlwZWRl
ZiBJbnRUeXBlczxzaXplb2YoUmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2U+KT46OlNpZ25l
ZFR5cGUgSW50VHlwZTsKKyAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlSGFz
aCBIYXNoOwogICAgICAgICB0eXBlZGVmIEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOwogICAg
IH07CiB9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdJbkluZm9TdG9yZVdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnSW5JbmZvU3RvcmVXaW4uY3Bw
CShyZXZpc2lvbiAyOTc0MSkKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z0luSW5mb1N0b3Jl
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKLSNpbmNs
dWRlICJQbHVnaW5EYXRhYmFzZVdpbi5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNy
ZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkIGkpIAoteyAKLSAgICBQbHVn
aW5EYXRhYmFzZVdpbiAqZGIgPSBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygp
OwotICAgIFBsdWdpbkluZm8qIGluZm8gPSBuZXcgUGx1Z2luSW5mbzsKLSAgICBQbHVnaW5QYWNr
YWdlV2luKiBwYWNrYWdlID0gZGItPnBsdWdpbnMoKVtpXTsKLQotICAgIGluZm8tPm5hbWUgPSBw
YWNrYWdlLT5uYW1lKCk7Ci0gICAgaW5mby0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7Ci0g
ICAgaW5mby0+ZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7Ci0KLSAgICBjb25zdCBNSU1F
VG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rl
c2NyaXB0aW9ucygpOwotICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOwotICAgIGZvciAoTUlNRVRvRGVzY3JpcHRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBNaW1l
Q2xhc3NJbmZvOwotICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZSk7Ci0gICAgICAgIAot
ICAgICAgICBtaW1lLT50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICBtaW1lLT5kZXNjID0gaXQt
PnNlY29uZDsKLSAgICAgICAgbWltZS0+cGx1Z2luID0gaW5mbzsKLQotICAgICAgICBWZWN0b3I8
U3RyaW5nPiBleHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1l
LT50eXBlKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRl
bnNpb25zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaSA+IDApCi0gICAgICAgICAg
ICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOwotCi0gICAgICAgICAgICBtaW1lLT5zdWZmaXhl
cyArPSBleHRlbnNpb25zW2ldOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZm87
Ci19Ci0KLXVuc2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdAotewot
ICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5z
KCkuc2l6ZSgpOwotfQotCi0KLVN0cmluZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JN
SU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1FIDU2MjkxMzk6
IEltcGxlbWVudCB0aGlzIG1ldGhvZCBvbiBXaW5kb3dzLgotICAgIHJldHVybiBTdHJpbmcoKTsK
LX0KLQotICAgIAotYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCi17Ci0gICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNl
V2luOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKTsK
LX0KLQotdm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5QYWdlcykKLXsKLSAgICBQ
bHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7Ci0KLSAgICBp
ZiAocmVsb2FkT3BlblBhZ2VzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiByZWxvYWQgb3BlbiBwYWdl
cwotICAgIH0KLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFz
ZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFz
ZVdpbi5jcHAJKHJldmlzaW9uIDI5NzQxKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5E
YXRhYmFzZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDkgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VXaW4uaCIKKyNpbmNs
dWRlICJQbHVnaW5EYXRhYmFzZS5oIgogCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgor
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3V2luLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC0zNCw5MSArMzQsNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBsdWdpbkRhdGFiYXNlV2luKiBQbHVnaW5EYXRh
YmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpCi17Ci0gICAgc3RhdGljIFBsdWdpbkRhdGFiYXNl
V2luKiBwbHVnaW5zID0gMDsKLSAgICAKLSAgICBpZiAoIXBsdWdpbnMpIHsKLSAgICAgICAgcGx1
Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZVdpbjsKLSAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2lu
UGF0aHMoUGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKLSAgICAgICAg
cGx1Z2lucy0+cmVmcmVzaCgpOwotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW5zOwotfQotCi12
b2lkIFBsdWdpbkRhdGFiYXNlV2luOjphZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBw
YXRoKQotewotICAgIG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBhdGgpOwotICAgIHJlZnJlc2goKTsK
LX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZVdpbjo6cmVmcmVzaCgpCi17ICAgCi0gICAgUGx1Z2lu
U2V0IG5ld1BsdWdpbnM7Ci0KLSAgICBib29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKLQot
ICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQgb2YgcGx1Z2lucwotICAgIG5ld1BsdWdpbnMgPSBnZXRQ
bHVnaW5zSW5QYXRocygpOwotCi0gICAgaWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOwotCi0gICAgICAgIFBsdWdpblNldCBw
bHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdpbnM7Ci0KLSAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgICAgIHBsdWdpbnNUb1VubG9hZC5yZW1vdmUoKml0KTsKLQotICAgICAgICBlbmQg
PSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBu
ZXdQbHVnaW5zLnJlbW92ZSgqaXQpOwotCi0gICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCi0gICAg
ICAgIGVuZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgICAgIG1fcGx1Z2lucy5yZW1vdmUoKml0KTsKLQotICAgICAgICAvLyBB
ZGQgbmV3IHBsdWdpbnMKLSAgICAgICAgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKLSAgICAgICAg
Zm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7Ci0KLSAgICAg
ICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpIHx8ICFuZXdQ
bHVnaW5zLmlzRW1wdHkoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BsdWdpbnMgPSBuZXdQ
bHVnaW5zOwotICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdp
bnMuZW5kKCk7Ci0gICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5l
d1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgbV9wbHVnaW5z
LmFkZCgqaXQpOwotCi0gICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhbmV3UGx1Z2lucy5pc0Vt
cHR5KCk7Ci0gICAgfQotCi0gICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCi0gICAg
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9y
IChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICAvLyBHZXQgTUlNRSB0eXBlcwotICAgICAgICBNSU1FVG9E
ZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVz
Y3JpcHRpb25zKCkuZW5kKCk7Ci0gICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4o
KTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KSB7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVy
ZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIHBsdWdpblNldENoYW5nZWQ7Ci19Ci0KLVZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4g
UGx1Z2luRGF0YWJhc2VXaW46OnBsdWdpbnMoKSBjb25zdAotewotICAgIFZlY3RvcjxQbHVnaW5Q
YWNrYWdlV2luKj4gcmVzdWx0OwotCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0LmFw
cGVuZCgoKml0KS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgaW5s
aW5lIHZvaWQgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZIHJvb3RLZXksIFBsdWdpblNldCYg
cGx1Z2lucykKIHsKICAgICBIS0VZIGtleTsKQEAgLTE1MCw3ICs2NSw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRQbHVnaW5zRnJvbVJlZ2lzdHIKICAgICAgICAgaWYgKEdldEZpbGVBdHRyaWJ1
dGVzRXgocGF0aFN0ciwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmYXR0cmlidXRlcykgPT0gMCkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2th
Z2UgPSBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKFN0cmluZyhwYXRoU3RyLCBwYXRo
U3RyU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSwgYXR0cmlidXRlcy5mdExhc3RXcml0ZVRpbWUp
OworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gUGx1Z2luUGFja2FnZTo6Y3JlYXRl
UGFja2FnZShTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSks
IGF0dHJpYnV0ZXMuZnRMYXN0V3JpdGVUaW1lKTsKIAogICAgICAgICBpZiAocGFja2FnZSkKICAg
ICAgICAgICAgIHBsdWdpbnMuYWRkKHBhY2thZ2UpOwpAQCAtMTU5LDcgKzc0LDcgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVnaXN0cgogICAgIFJlZ0Nsb3NlS2V5KGtleSk7
CiB9CiAKLVBsdWdpblNldCBQbHVnaW5EYXRhYmFzZVdpbjo6Z2V0UGx1Z2luc0luUGF0aHMoKSBj
b25zdAorUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0
CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQu
CiAgICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKQEAgLTE2OCw4ICs4Myw4IEBA
IFBsdWdpblNldCBQbHVnaW5EYXRhYmFzZVdpbjo6Z2V0UGx1Z2luc0kKICAgICBIQU5ETEUgaEZp
bmQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKICAgICBXSU4zMl9GSU5EX0RBVEFXIGZpbmRGaWxl
RGF0YTsKIAotICAgIFBsdWdpblBhY2thZ2VXaW4qIG9sZFdNUFBsdWdpbiA9IDA7Ci0gICAgUGx1
Z2luUGFja2FnZVdpbiogbmV3V01QUGx1Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdlKiBvbGRX
TVBQbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2thZ2UqIG5ld1dNUFBsdWdpbiA9IDA7CiAKICAg
ICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQo
KTsKICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lu
UGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC0xOTMsNyArMTA4LDcgQEAgUGx1
Z2luU2V0IFBsdWdpbkRhdGFiYXNlV2luOjpnZXRQbHVnaW5zSQogICAgICAgICAgICAgaWYgKCF1
bmlxdWVGaWxlbmFtZXMuYWRkKGZ1bGxQYXRoKS5zZWNvbmQpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIAotICAgICAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luUGFj
a2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBhY2thZ2UoZnVsbFBhdGgsIGZpbmRGaWxl
RGF0YS5mdExhc3RXcml0ZVRpbWUpOworICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2lu
UGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoZnVsbFBhdGgsIGZpbmRGaWxl
RGF0YS5mdExhc3RXcml0ZVRpbWUpOwogCiAgICAgICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkg
ewogICAgICAgICAgICAgICAgIHBsdWdpbnMuYWRkKHBsdWdpblBhY2thZ2UpOwpAQCAtNDE5LDcg
KzMzNCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luUGEKICAgICBw
YXRocy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7CiB9CiAKLVZlY3RvcjxTdHJpbmc+
IFBsdWdpbkRhdGFiYXNlV2luOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQorVmVjdG9yPFN0cmluZz4g
UGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpCiB7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gcGF0aHM7CiAgICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwpAQCAt
NDM1LDEwNiArMzUwLDE0IEBAIFZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlV2luOjpkZWZh
dWwKICAgICByZXR1cm4gcGF0aHM7CiB9CiAKLWJvb2wgUGx1Z2luRGF0YWJhc2VXaW46OmlzTUlN
RVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVU
eXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fcmVnaXN0ZXJl
ZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQg
c2VhcmNoaW5nIGFnYWluCi0gICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlN
RVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSk7Ci19Ci0KLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdp
bkRhdGFiYXNlV2luOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQor
Ym9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYg
cGF0aCkgY29uc3QKIHsKLSAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwogICAgIFN0cmluZyBv
dXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVn
aW4gPSAwOwotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVu
ZCgpOwotCi0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rl
c2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKLSAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQp
LmdldCgpOwotICAgICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5z
IGRpcmVjdG9yeQotICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0g
b3VyUGF0aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBwbHVnaW47Ci19CiAKLVN0cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6TUlNRVR5cGVG
b3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGV4
dGVuc2lvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIFN0cmluZyBv
dXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKLSAgICBTdHJpbmcgbWltZVR5cGU7Ci0gICAg
UGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gMDsKLQotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0
KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwotCi0gICAgICAgIGZvciAoTUlNRVRvRXh0ZW5z
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25z
KCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0gICAgICAgICAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0s
IGV4dGVuc2lvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5m
aXJzdDsKLSAgICAgICAgICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3Rv
cnkKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0g
b3VyUGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIW91clBhdGguaXNO
dWxsKCkgJiYgIXBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBvdXJQYXRoID09IHBhdGg7
CiAKLSAgICByZXR1cm4gbWltZVR5cGU7Ci19Ci0KLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpbkRh
dGFiYXNlV2luOjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSkK
LXsgICAKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZSht
aW1lVHlwZSk7Ci0gICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLnN0cmluZygpOwotICAgIAotICAg
IGlmICghcGx1Z2luKSB7Ci0gICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IHVybC5sYXN0UGF0aENv
bXBvbmVudCgpOwotICAgICAgICBpZiAoIWZpbGVuYW1lLmVuZHNXaXRoKCIvIikpIHsKLSAgICAg
ICAgICAgIGludCBleHRlbnNpb25Qb3MgPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOwotICAg
ICAgICAgICAgaWYgKGV4dGVuc2lvblBvcyAhPSAtMSkgewotICAgICAgICAgICAgICAgIFN0cmlu
ZyBleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZXh0ZW5zaW9uUG9zICsgMSk7Ci0KLSAg
ICAgICAgICAgICAgICBtaW1lVHlwZSA9IE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7
Ci0gICAgICAgICAgICAgICAgcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IGlmIG5vIHBs
dWdpbiBjb3VsZCBiZSBmb3VuZCwgcXVlcnkgV2luZG93cyBmb3IgdGhlIG1pbWUgdHlwZSAKLSAg
ICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCi0KLSAgICByZXR1cm4gcGx1Z2lu
OwotfQotCi1QbHVnaW5WaWV3V2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6Y3JlYXRlUGx1Z2luVmll
dyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Ym9vbCBsb2FkTWFudWFsbHkpCi17Ci0gICAgLy8gaWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1Z2lu
IGZvciB0aGlzIE1JTUUgdHlwZSwgZmluZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IKLSAgICAvLyBh
IHBsdWdpbiBieSB0aGUgZmlsZSBleHRlbnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBlLCBz
byBwYXNzIGEgbXV0YWJsZSBTdHJpbmcKLSAgICBTdHJpbmcgbWltZVR5cGVDb3B5ID0gbWltZVR5
cGU7Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVU
eXBlQ29weSk7Ci0gICAgCi0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hp
bmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICBpZiAoIXBsdWdpbiAmJiBy
ZWZyZXNoKCkpIHsKLSAgICAgICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7Ci0gICAgICAgIHBs
dWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOwotICAgIH0KLSAgICAgICAgCi0g
ICAgcmV0dXJuIG5ldyBQbHVnaW5WaWV3V2luKHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVs
ZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9hZE1h
bnVhbGx5KTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lu
cy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpbkRhdGFiYXNlV2luLmgJKHJldmlzaW9uIDI5NzQxKQorKysgV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5EYXRhYmFzZVdpbl9ICi0jZGVmaW5l
IFBsdWdpbkRhdGFiYXNlV2luX0gKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRl
ICJQbHVnaW5QYWNrYWdlV2luLmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgRWxlbWVudDsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBj
bGFzcyBJbnRTaXplOwotICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgUGx1Z2luUGFja2FnZVdp
bjsKLSAgICBjbGFzcyBQbHVnaW5WaWV3V2luOwotCi0gICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0
cjxQbHVnaW5QYWNrYWdlV2luPiwgUGx1Z2luUGFja2FnZVdpbkhhc2g+IFBsdWdpblNldDsKLSAg
Ci0gICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VXaW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3Rh
dGljIFBsdWdpbkRhdGFiYXNlV2luKiBpbnN0YWxsZWRQbHVnaW5zKCk7Ci0gICAgICAgIFBsdWdp
blZpZXdXaW4qIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRT
aXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7Ci0KLSAgICAgICAgYm9vbCBy
ZWZyZXNoKCk7Ci0gICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gcGx1Z2lucygpIGNv
bnN0OwotICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpOwotICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsK
LSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXRocykgeyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KLSAgICAgICAgUGx1Z2lu
U2V0IGdldFBsdWdpbnNJblBhdGhzKCkgY29uc3Q7Ci0KLSAgICAgICAgUGx1Z2luUGFja2FnZVdp
biogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpOwotICAgICAg
ICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKTsKLSAgICAgICAgU3RyaW5nIE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
ZXh0ZW5zaW9uKSBjb25zdDsKLQotICAgICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZGVmYXVs
dFBsdWdpblBhdGhzKCk7Ci0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gbV9wbHVnaW5QYXRoczsK
LSAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVnaXN0ZXJlZE1JTUVUeXBlczsKLSAgICAgICAg
UGx1Z2luU2V0IG1fcGx1Z2luczsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCShy
ZXZpc2lvbiAyOTc0MSkKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxzaGx3YXBpLmg+
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisj
aW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
ICJEZXByZWNhdGVkU3RyaW5nLmgiCkBAIC0zNSwxMSArMzUsNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBsdWdpblBhY2thZ2VXaW46On5QbHVnaW5QYWNrYWdlV2luKCkKLXsKLSAgICBB
U1NFUlQoIW1faXNMb2FkZWQpOwotfQotCiBzdGF0aWMgU3RyaW5nIGdldFZlcnNpb25JbmZvKGNv
bnN0IExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEsIGNvbnN0IFN0cmluZyYgaW5mbykKIHsKICAgICBM
UFZPSUQgYnVmZmVyOwpAQCAtODMsNTkgKzc4LDIyIEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBz
cGxpdFN0cmluZyhjb25zdCAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBsdWdpblBh
Y2thZ2VXaW46OmZyZWVMaWJyYXJ5U29vbigpCi17Ci0gICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5
VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICBBU1NFUlQobV9s
b2FkQ291bnQgPT0gMCk7Ci0KLSAgICBtX2ZyZWVMaWJyYXJ5VGltZXIuc3RhcnRPbmVTaG90KDAp
OwotfQotCi12b2lkIFBsdWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1l
cjxQbHVnaW5QYWNrYWdlV2luPiogLyp0aW1lciovKQotewotICAgIEFTU0VSVChtX21vZHVsZSk7
Ci0gICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOwotCi0gICAgOjpGcmVlTGlicmFyeShtX21v
ZHVsZSk7Ci0gICAgbV9tb2R1bGUgPSAwOwotfQotCi1QbHVnaW5QYWNrYWdlV2luOjpQbHVnaW5Q
YWNrYWdlV2luKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmll
ZCkKLSAgICA6IG1fcGF0aChwYXRoKQotICAgICwgbV9tb2R1bGUoMCkKLSAgICAsIG1fbGFzdE1v
ZGlmaWVkKGxhc3RNb2RpZmllZCkKLSAgICAsIG1faXNMb2FkZWQoZmFsc2UpCi0gICAgLCBtX2xv
YWRDb3VudCgwKQotICAgICwgbV9mcmVlTGlicmFyeVRpbWVyKHRoaXMsICZQbHVnaW5QYWNrYWdl
V2luOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQpCi0gICAgLCBtX2ZpbGVWZXJzaW9uTFMoMCkKLSAg
ICAsIG1fZmlsZVZlcnNpb25NUygwKQorYm9vbCBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNr
bGlzdGVkKCkgY29uc3QKIHsKLSAgICBtX2ZpbGVOYW1lID0gU3RyaW5nKFBhdGhGaW5kRmlsZU5h
bWUobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpKTsKLSAgICBtX3BhcmVu
dERpcmVjdG9yeSA9IG1fcGF0aC5sZWZ0KG1fcGF0aC5sZW5ndGgoKSAtIG1fZmlsZU5hbWUubGVu
Z3RoKCkgLSAxKTsKLX0KKyAgICBzdGF0aWMgY29uc3QgRFdPUkQgc2lsdmVybGlnaHRQbHVnaW5N
aW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEID0gMHgwMDAxMDAwMDsKKyAgICBzdGF0aWMgY29uc3Qg
RFdPUkQgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25MU0RXT1JEID0gMHg1MUJF
MDAwMDsKIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2
ZXJzaW9uSW5mb0RhdGEpCi17CiAgICAgVlNfRklYRURGSUxFSU5GTyogaW5mbzsKICAgICBVSU5U
IGluZm9TaXplOwogICAgIGlmICghVmVyUXVlcnlWYWx1ZSh2ZXJzaW9uSW5mb0RhdGEsIFRFWFQo
IlxcIiksIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNpemVvZihW
U19GSVhFREZJTEVJTkZPKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZmlsZVZlcnNpb25MUyA9
IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKLSAgICBtX2ZpbGVWZXJzaW9uTVMgPSBpbmZvLT5kd0Zp
bGVWZXJzaW9uTVM7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6aXNQbHVnaW5CbGFja2xp
c3RlZCgpCi17Ci0gICAgc3RhdGljIGNvbnN0IERXT1JEIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVx
dWlyZWRWZXJzaW9uTVNEV09SRCA9IDB4MDAwMTAwMDA7Ci0gICAgc3RhdGljIGNvbnN0IERXT1JE
IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFNEV09SRCA9IDB4NTFCRTAwMDA7
CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKG5hbWUoKSA9PSAiU2lsdmVybGlnaHQg
UGx1Zy1JbiIpIHsKICAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly81NTU3Mzc5PiBD
cmFzaCBpbiBTaWx2ZXJsaWdodCB3aGVuIG9wZW5pbmcgbWljcm9zb2Z0LmNvbS4KICAgICAgICAg
Ly8gdGhlIGxhdGVzdCAxLjAgdmVyc2lvbiBvZiBTaWx2ZXJsaWdodCBkb2VzIG5vdCByZXByb2R1
Y2UgdGhpcyBjcmFzaCwgc28gYWxsb3cgaXQKICAgICAgICAgLy8gYW5kIGFueSBuZXdlciB2ZXJz
aW9ucwotICAgICAgICBpZiAobV9maWxlVmVyc2lvbk1TIDwgc2lsdmVybGlnaHRQbHVnaW5NaW5S
ZXF1aXJlZFZlcnNpb25NU0RXT1JEIHx8Ci0gICAgICAgICAgICAobV9maWxlVmVyc2lvbk1TID09
IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCAmJiBtX2ZpbGVWZXJz
aW9uTFMgPCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxTRFdPUkQpKQorICAg
ICAgICBpZiAoaW5mby0+ZHdGaWxlVmVyc2lvbk1TIDwgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1
aXJlZFZlcnNpb25NU0RXT1JEIHx8CisgICAgICAgICAgICAoaW5mby0+ZHdGaWxlVmVyc2lvbk1T
ID09IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCAmJiBpbmZvLT5k
d0ZpbGVWZXJzaW9uTFMgPCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxTRFdP
UkQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIGlmIChmaWxlTmFtZSgp
ID09ICJucG1vemF4LmRsbCIpCiAgICAgICAgIC8vIEJ1ZyAxNTIxNzogTW96aWxsYSBBY3RpdmVY
IGNvbnRyb2wgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb21fY29yZS5kbGwKQEAgLTE0NCw3
ICsxMDIsNyBAQCBib29sIFBsdWdpblBhY2thZ2VXaW46OmlzUGx1Z2luQmxhY2tsaXN0CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFBsdWdpblBhY2thZ2VXaW46OmZldGNoSW5mbygpCiti
b29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCiB7CiAgICAgRFdPUkQgdmVyc2lvbkluZm9T
aXplLCB6ZXJvSGFuZGxlOwogICAgIHZlcnNpb25JbmZvU2l6ZSA9IEdldEZpbGVWZXJzaW9uSW5m
b1NpemVXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAmemVyb0hhbmRs
ZSk7IApAQCAtMTY3LDggKzEyNSw2IEBAIGJvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZmV0Y2hJbmZv
KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHN0b3JlRmlsZVZlcnNpb24o
dmVyc2lvbkluZm9EYXRhKTsKLQogICAgIGlmIChpc1BsdWdpbkJsYWNrbGlzdGVkKCkpIHsKICAg
ICAgICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMjAxLDcgKzE1Nyw3IEBAIGJvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZmV0Y2hJbmZvKCkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpsb2FkKCkKK2Jvb2wg
UGx1Z2luUGFja2FnZTo6bG9hZCgpCiB7CiAgICAgaWYgKG1fZnJlZUxpYnJhcnlUaW1lci5pc0Fj
dGl2ZSgpKSB7CiAgICAgICAgIEFTU0VSVChtX21vZHVsZSk7CkBAIC0zMTUsNTEgKzI3MSw3IEBA
IGFib3J0OgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1
bmxvYWQoKQotewotICAgIGlmICghbV9pc0xvYWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKC0tbV9sb2FkQ291bnQgPiAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX05QUF9TaHV0
ZG93bigpOwotCi0gICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Ci19Ci0KLXZvaWQgUGx1Z2lu
UGFja2FnZVdpbjo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKLXsKLSAgICBpZiAoIW1faXNMb2Fk
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsKLSAg
ICBBU1NFUlQobV9tb2R1bGUpOwotCi0gICAgLy8gPHJkYXI6Ly81NTMwNTE5PjogQ3Jhc2ggd2hl
biBjbG9zaW5nIHRhYiB3aXRoIHBkZiBmaWxlIChSZWFkZXIgNyBvbmx5KQotICAgIC8vIElmIHRo
ZSBwbHVnaW4gaGFzIHN1YmNsYXNzZWQgaXRzIHBhcmVudCB3aW5kb3csIGFzIHdpdGggUmVhZGVy
IDcsIHdlIG1heSBoYXZlCi0gICAgLy8gZ290dGVuIGhlcmUgYnkgd2F5IG9mIHRoZSBwbHVnaW4n
cyBpbnRlcm5hbCB3aW5kb3cgcHJvYyBmb3J3YXJkaW5nIGEgbWVzc2FnZSB0byBvdXIKLSAgICAv
LyBvcmlnaW5hbCB3aW5kb3cgcHJvYy4gSWYgd2UgZnJlZSB0aGUgcGx1Z2luIGxpYnJhcnkgZnJv
bSBoZXJlLCB3ZSB3aWxsIGp1bXAgYmFjawotICAgIC8vIHRvIGNvZGUgd2UganVzdCBmcmVlZCB3
aGVuIHdlIHJldHVybiwgc28gZGVsYXkgY2FsbGluZyBGcmVlTGlicmFyeSBhdCBsZWFzdCB1bnRp
bAotICAgIC8vIHRoZSBuZXh0IG1lc3NhZ2UgbG9vcAotICAgIGZyZWVMaWJyYXJ5U29vbigpOwot
Ci0gICAgbV9pc0xvYWRlZCA9IGZhbHNlOwotfQotCi1QbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5Q
YWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJ
TUUmIGxhc3RNb2RpZmllZCkKLXsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gbmV3
IFBsdWdpblBhY2thZ2VXaW4ocGF0aCwgbGFzdE1vZGlmaWVkKTsKLQotICAgIGlmICghcGFja2Fn
ZS0+ZmV0Y2hJbmZvKCkpIHsKLSAgICAgICAgZGVsZXRlIHBhY2thZ2U7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcGFja2FnZTsKLX0KLQotdW5zaWduZWQgUGx1
Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0Cit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNo
KCkgY29uc3QKIHsgCiAgICAgdW5zaWduZWQgaGFzaENvZGVzWzNdID0gewogICAgICAgICBtX2Rl
c2NyaXB0aW9uLmltcGwoKS0+aGFzaCgpLApAQCAtMzcwLDcgKzI4Miw3IEBAIHVuc2lnbmVkIFBs
dWdpblBhY2thZ2VXaW46Omhhc2goKSBjb25zdAogICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21w
dXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMyAqIHNpemVvZih1
bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKIH0KIAotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpl
cXVhbChjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBi
KQorYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25z
dCBQbHVnaW5QYWNrYWdlJiBiKQogewogICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5t
X2Rlc2NyaXB0aW9uICYmIChDb21wYXJlRmlsZVRpbWUoJmEubV9sYXN0TW9kaWZpZWQsICZiLm1f
bGFzdE1vZGlmaWVkKSA9PSAwKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
UGFja2FnZVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFj
a2FnZVdpbi5oCShyZXZpc2lvbiAyOTc0MSkKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
UGFja2FnZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgUGx1Z2luUGFja2FnZVdpbl9ICi0jZGVmaW5lIFBsdWdpblBhY2thZ2VX
aW5fSAotCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLSNp
bmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiCi0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlv
bnNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1F
VG9FeHRlbnNpb25zTWFwOwotCi0gICAgY2xhc3MgUGx1Z2luUGFja2FnZVdpbiA6IHB1YmxpYyBS
ZWZDb3VudGVkPFBsdWdpblBhY2thZ2VXaW4+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIH5QbHVn
aW5QYWNrYWdlV2luKCk7Ci0gICAgICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlV2luKiBjcmVhdGVQ
YWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7
Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQotICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0
aW9uOyB9Ci0gICAgICAgIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZU5h
bWU7IH0KLSAgICAgICAgU3RyaW5nIHBhcmVudERpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFyZW50RGlyZWN0b3J5OyB9Ci0KLSAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFw
JiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9u
czsgfQotICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9Ci0KLSAgICAgICAgdW5zaWdu
ZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBi
KTsKLQotICAgICAgICBib29sIGxvYWQoKTsKLSAgICAgICAgdm9pZCB1bmxvYWQoKTsKLSAgICAg
ICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKLQotICAgICAgICBjb25zdCBOUFBsdWdp
bkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9Ci0g
ICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luUGFja2FnZVdpbihjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpOwotICAgICAgICBib29sIGZldGNoSW5mbygp
OwotICAgICAgICB2b2lkIHN0b3JlRmlsZVZlcnNpb24oTFBWT0lEIHZlcnNpb25JbmZvRGF0YSk7
Ci0gICAgICAgIGJvb2wgaXNQbHVnaW5CbGFja2xpc3RlZCgpOwotCi0gICAgICAgIGJvb2wgbV9p
c0xvYWRlZDsKLSAgICAgICAgaW50IG1fbG9hZENvdW50OwotCi0gICAgICAgIERXT1JEIG1fZmls
ZVZlcnNpb25NUzsKLSAgICAgICAgRFdPUkQgbV9maWxlVmVyc2lvbkxTOwotCi0gICAgICAgIFN0
cmluZyBtX2Rlc2NyaXB0aW9uOwotICAgICAgICBTdHJpbmcgbV9wYXRoOwotICAgICAgICBTdHJp
bmcgbV9maWxlTmFtZTsKLSAgICAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICAgICAgU3RyaW5nIG1f
cGFyZW50RGlyZWN0b3J5OwotCi0gICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBtX21pbWVU
b0Rlc2NyaXB0aW9uczsKLSAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21pbWVUb0V4dGVu
c2lvbnM7Ci0KLSAgICAgICAgSE1PRFVMRSBtX21vZHVsZTsKLSAgICAgICAgRklMRVRJTUUgbV9s
YXN0TW9kaWZpZWQ7Ci0KLSAgICAgICAgTlBQX1NodXRkb3duUHJvY1B0ciBtX05QUF9TaHV0ZG93
bjsKLSAgICAgICAgTlBQbHVnaW5GdW5jcyBtX3BsdWdpbkZ1bmNzOwotICAgICAgICBOUE5ldHNj
YXBlRnVuY3MgbV9icm93c2VyRnVuY3M7Ci0KLSAgICAgICAgdm9pZCBmcmVlTGlicmFyeVNvb24o
KTsKLSAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luUGFja2Fn
ZVdpbj4qKTsKLSAgICAgICAgVGltZXI8UGx1Z2luUGFja2FnZVdpbj4gbV9mcmVlTGlicmFyeVRp
bWVyOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZVdpbkhhc2ggewotICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihrZXkpLT5oYXNoKCk7IH0KLSAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+JiBrZXkpIHsgcmV0
dXJuIGtleS0+aGFzaCgpOyB9Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgaW50
IGEsIGNvbnN0IGludCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBh
Y2thZ2VXaW4qPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlV2luKj4oYikpOyB9
Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2lu
PiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+JiBiKSB7IHJldHVybiBQbHVnaW5Q
YWNrYWdlV2luOjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci0gICAgfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0vLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91
bmQgZm9yIGEgYnVnIGluIFdURiwgd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1c3Rv
bSBIYXNoIGZ1bmN0aW9uIGJ1dCB3aXRoIGRlZmF1bHQgdHJhaXRzLgotLy8gSXQgc2hvdWxkIGJl
IHBvc3NpYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6YXRp
b24uCi1uYW1lc3BhY2UgV1RGIHsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFn
ZVRyYWl0czxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8
V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbj4gPiA+IHsKLSAgICAgICAgdHlwZWRlZiBJbnRUeXBl
czxzaXplb2YoUmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW4+KT46OlNpZ25lZFR5cGUg
SW50VHlwZTsKLSAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luSGFzaCBI
YXNoOwotICAgICAgICB0eXBlZGVmIEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOwotICAgIH07
Ci19Ci0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJ
KHJldmlzaW9uIDI5NzQxKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY2NCw0ICsxNjY0LDIwIEBAIGJvb2wgUGx1Z2luVmlld1dp
bjo6aXNDYWxsaW5nUGx1Z2luKCkKICAgICByZXR1cm4gc19jYWxsaW5nUGx1Z2luID4gMDsKIH0K
IAorUGx1Z2luVmlld1dpbiogUGx1Z2luVmlld1dpbjo6Y3JlYXRlUGx1Z2luVmlldyhGcmFtZSog
cGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2Fk
TWFudWFsbHkpCit7CisgICAgLy8gaWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1Z2luIGZvciB0aGlz
IE1JTUUgdHlwZSwgZmluZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IKKyAgICAvLyBhIHBsdWdpbiBi
eSB0aGUgZmlsZSBleHRlbnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBlLCBzbyBwYXNzIGEg
bXV0YWJsZSBTdHJpbmcKKyAgICBTdHJpbmcgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7CisgICAg
UGx1Z2luUGFja2FnZSogcGx1Z2luID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMo
KS0+ZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7CisgICAgCisgICAgLy8gTm8gcGx1Z2lu
IHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdh
aW4KKyAgICBpZiAoIXBsdWdpbiAmJiByZWZyZXNoKCkpIHsKKyAgICAgICAgbWltZVR5cGVDb3B5
ID0gbWltZVR5cGU7CisgICAgICAgIHBsdWdpbiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQ
bHVnaW5zKCktPmZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOworICAgIH0KKyAgICAgICAg
CisgICAgcmV0dXJuIG5ldyBQbHVnaW5WaWV3V2luKHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4s
IGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9h
ZE1hbnVhbGx5KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5WaWV3V2luLmgJKHJldmlzaW9uIDI5NzQxKQorKysgV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5WaWV3V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE1vdXNlRXZlbnQ7CiAgICAgY2xhc3MgS1VSTDsK
ICAgICBjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOwotICAgIGNsYXNzIFBsdWdpblBh
Y2thZ2VXaW47CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKICAgICBjbGFzcyBQbHVnaW5SZXF1
ZXN0V2luOwogICAgIGNsYXNzIFBsdWdpblN0cmVhbTsKICAgICBjbGFzcyBSZXNvdXJjZUVycm9y
OwpAQCAtODYsMTAgKzg2LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBmcmllbmQgc3Rh
dGljIExSRVNVTFQgQ0FMTEJBQ0sgUGx1Z2luVmlld1duZFByb2MoSFdORCwgVUlOVCwgV1BBUkFN
LCBMUEFSQU0pOwogCiAgICAgcHVibGljOgotICAgICAgICBQbHVnaW5WaWV3V2luKEZyYW1lKiBw
YXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiwgRWxl
bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBi
b29sIGxvYWRNYW51YWxseSk7CisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3V2luKiBjcmVhdGVQ
bHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1O
YW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisKKyAgICAgICAgUGx1Z2luVmlld1dpbihGcmFt
ZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4sIEVs
ZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Ym9vbCBsb2FkTWFudWFsbHkpOwogICAgICAgICB2aXJ0dWFsIH5QbHVnaW5WaWV3V2luKCk7CiAK
LSAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wbHVn
aW4uZ2V0KCk7IH0KKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luKCkgY29uc3QgeyByZXR1
cm4gbV9wbHVnaW4uZ2V0KCk7IH0KICAgICAgICAgTlBQIGluc3RhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9pbnN0YW5jZTsgfQogCiAgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dSZWN0KGNvbnN0IElu
dFJlY3QmKTsKQEAgLTE1Niw3ICsxNTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IE5QRXJyb3IgbG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0
aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKICAgICAgICAgTlBFcnJvciBoYW5kbGVQb3N0KGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBi
dWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBi
b29sIGFsbG93SGVhZGVycyk7CiAgICAgICAgIHZvaWQgc2V0Q2FsbGluZ1BsdWdpbihib29sKSBj
b25zdDsKLSAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+IG1fcGx1Z2luOworICAgICAg
ICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gbV9wbHVnaW47CiAgICAgICAgIEVsZW1lbnQqIG1fZWxl
bWVudDsKICAgICAgICAgRnJhbWUqIG1fcGFyZW50RnJhbWU7CiAgICAgICAgIGJvb2wgbV9pc1N0
YXJ0ZWQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18620</attachid>
            <date>2008-01-23 08:55:48 -0800</date>
            <delta_ts>2008-01-28 11:27:16 -0800</delta_ts>
            <desc>Updated patch with ChangeLog</desc>
            <filename>webkit-more-shared-plugin-api.patch</filename>
            <type>text/plain</type>
            <size>125193</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTc0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMDgtMDEtMjMgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBTaGFyZWQgY2xhc3NlcyBmb3IgUGx1Z2luRGF0YWJhc2UgYW5kIFBsdWdpblBhY2thZ2UK
KyAgICAgICAgU2hhcmVkIGltcGxlbWVudGF0aW9uIG9mIFBsdWdpbkluZm9TdG9yZSBBUEkKKyAg
ICAgICAgQWRkIGlzUHJlZmVycmVkUGx1Z2luUGF0aCgpIG1ldGhvZCBmb3IgYSBwcmVmZXJyZWQg
cGx1Zy1pbiBkaXJlY3RvcnkKKyAgICAgICAgQWRkIHRoZSBuZXcgc2hhcmVkIGNsYXNzIGltcGxl
bWVudGF0aW9ucyB0byBhdXRvdG9vbHMgYW5kIHFtYWtlIGJ1aWxkcworICAgICAgICBNb3ZlIHRo
ZSBjcmVhdGVQbHVnaW5WaWV3IEFQSSB0byBQbHVnaW5WaWV3V2luLCB0byBhdm9pZCBhCisgICAg
ICAgIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2l0aCBQbHVnaW5EYXRhYmFzZQorICAgICAgICBVc2Ug
c3RhdGljIGdsb2JhbHMgZm9yIHRoZSBtX2ZpbGVWZXJzaW9ue01TLExTfSB2YXJpYWJsZXMgb24g
V2luMzIKKyAgICAgICAgTWFrZSBzdG9yZUZpbGVWZXJzaW9uIGFuZCBpc1BsdWdpbkJsYWNrbGlz
dGVkIHN0YXRpYyBpbnRlcm5hbCBDIG1ldGhvZHMKKyAgICAgICAgRGVmaW5lIFBsYXRmb3JtRmls
ZVRpbWUgYW5kIFBsYXRmb3JtTW9kdWxlIHR5cGVzCisgICAgICAgIEltcGxlbWVudCBwYXRoR2V0
RmlsZU5hbWUgZm9yIFdpbjMyIGFuZCBHVEsrCisgICAgICAgIEltcGxlbWVudCB1bmxvYWRNb2R1
bGUgZm9yIFdpbjMyIGFuZCBHVEsrCisgICAgICAgIEFkZCBub3RJbXBsZW1lbnRlZCgpcyBmb3Ig
cGF0aEdldEZpbGVOYW1lIGFuZCB1bmxvYWRNb2R1bGUgb24gUXQKKyAgICAgICAgVXBkYXRlIHRo
ZSBXaW4zMiB2Y3Byb2ogZm9yIHRoZSBwbHVnLWluIEFQSSBjaGFuZ2VzCisgICAgICAgIEFkZCB0
ZW1wb3Jhcnkgc3R1YnMgZm9yIFBsdWdpbkRhdGFiYXNlIGFuZCBQbHVnaW5QYWNrYWdlIG1ldGhv
ZHMsCisgICAgICAgIG9uIEdUSysgYW5kIFF0CisgICAgICAgIFJlbW92ZSB0ZW1wb3Jhcnkgc3R1
YnMgZm9yIFBsdWdJbkluZm9TdG9yZSBvbiBHVEsrIGFuZCBRdAorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9GaWxl
U3lzdGVtUXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5j
cHA6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgICogcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5oOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luSW5mb1N0b3Jl
LmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAgICAgICAqIHBs
dWdpbnMvUGx1Z2luUGFja2FnZS5oOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdJbkluZm9T
dG9yZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3Bw
OgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmg6CisgICAgICAgICog
cGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy93aW4v
UGx1Z2luUGFja2FnZVdpbi5oOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uaDoKKwogMjAwOC0wMS0y
MyAgQWxwIFRva2VyICA8YWxwQGF0b2tlci5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQg
YnkgTWFyayBSb3dlLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAyOTc0MSkKKysrIFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTg0NSw2ICs4NDUsOSBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vVGltZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuY3Bw
IFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIFwKKwlXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2Uu
Y3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBcCiAJV2ViQ29yZS9yZW5k
ZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAg
XApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUucHJvCShyZXZpc2lvbiAyOTc0MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcg
Y29weSkKQEAgLTc3OSw2ICs3NzksOSBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9UaW1l
ci5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAgICAgcGxhdGZv
cm0vV2lkZ2V0LmNwcCBcCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgXAorICAgIHBs
dWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNw
cCBcCiAgICAgcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKICAgICByZW5kZXJpbmcvQXV0b1Rh
YmxlTGF5b3V0LmNwcCBcCiAgICAgcmVuZGVyaW5nL2JpZGkuY3BwIFwKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMjk3NDEpCisrKyBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03OTI5LDEwICs3
OTI5LDMwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5JbmZvU3RvcmUuY3BwIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQ
bHVnaW5QYWNrYWdlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2FnZS5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5TdHJl
YW0uY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTc5NTIsMjIgKzc5NzIsMTAgQEAKIAkJ
CQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
dWdpbnNcd2luXFBsdWdpbkRhdGFiYXNlV2luLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0J
CQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1x3aW5cUGx1Z0luSW5mb1N0
b3JlV2luLmNwcCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmNwcCINCiAJCQkJCT4N
CiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5z
XHdpblxQbHVnaW5QYWNrYWdlV2luLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZp
bGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luVmlld1dpbi5jcHAi
DQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0
ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAkocmV2aXNp
b24gMjk3NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsMTAgQEAKICNpZm5kZWYgRmlsZVN5c3RlbV9oCiAjZGVmaW5lIEZpbGVT
eXN0ZW1faAogCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNlbmRp
ZgorCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9f
Q0ZEYXRhKiBDRkRhdGFSZWY7CkBAIC00MSw5ICs0NSwxNyBAQCBjbGFzcyBTdHJpbmc7CiAKICNp
ZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIEhBTkRMRSBQbGF0Zm9ybUZpbGVIYW5kbGU7Cit0eXBl
ZGVmIEZJTEVUSU1FIFBsYXRmb3JtRmlsZVRpbWU7Cit0eXBlZGVmIEhNT0RVTEUgUGxhdGZvcm1N
b2R1bGU7CiBjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUgaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRs
ZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogI2Vsc2UKIHR5cGVkZWYgaW50IFBsYXRmb3JtRmls
ZUhhbmRsZTsKK3R5cGVkZWYgdGltZV90IFBsYXRmb3JtRmlsZVRpbWU7CisjaWYgUExBVEZPUk0o
R1RLKQordHlwZWRlZiBHTW9kdWxlKiBQbGF0Zm9ybU1vZHVsZTsKKyNlbHNlCit0eXBlZGVmIHZv
aWQqIFBsYXRmb3JtTW9kdWxlOworI2VuZGlmCiBjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUgaW52
YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IC0xOwogI2VuZGlmCiAKQEAgLTU0LDYgKzY2LDcgQEAg
Ym9vbCBmaWxlU2l6ZShjb25zdCBTdHJpbmcmLCBsb25nIGxvbmcmIAogU3RyaW5nIHBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9u
ZW50KTsKIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCk7CiBTdHJp
bmcgaG9tZURpcmVjdG9yeVBhdGgoKTsKK1N0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3Ry
aW5nJik7CiAKIENTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYp
OwogCkBAIC02NCw2ICs3Nyw5IEBAIENTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgY2hh
ciogcHIKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYpOwogaW50IHdyaXRlVG9G
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CiAK
Ky8qIE1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBsb2FkYWJsZSBtb2R1bGVzICovCitib29sIHVu
bG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSk7CisKICNpZiBQTEFURk9STShXSU4pCiBTdHJpbmcg
bG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCk7CiBTdHJpbmcgcm9hbWluZ1VzZXJT
cGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0Zp
bGVTeXN0ZW1HdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVT
eXN0ZW1HdGsuY3BwCShyZXZpc2lvbiAyOTc0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0Zp
bGVTeXN0ZW1HdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDIwIEBAIGJvb2wg
bWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGEKICAgICByZXR1cm4gcmVzdWx0ID09
IDA7CiB9CiAKK1N0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoZ19nZXRfaG9tZV9kaXIoKSk7Cit9CisKK1N0cmluZyBwYXRoR2V0RmlsZU5h
bWUoY29uc3QgU3RyaW5nJiBwYXRoTmFtZSkKK3sKKyAgICBjaGFyKiBiYXNlTmFtZSA9IGdfcGF0
aF9nZXRfYmFzZW5hbWUocGF0aE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgU3RyaW5nIGZpbGVO
YW1lID0gU3RyaW5nOjpmcm9tVVRGOChiYXNlTmFtZSk7CisgICAgZ19mcmVlKGJhc2VOYW1lKTsK
KworICAgIHJldHVybiBmaWxlTmFtZTsKK30KKwogQ1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShj
b25zdCBjaGFyKiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogewogICAgIGdj
aGFyKiBmaWxlbmFtZSA9IGdfc3RyZHVwX3ByaW50ZigiJXNYWFhYWFgiLCBwcmVmaXgpOwpAQCAt
MTQ1LDQgKzE1OSw5IEBAIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGwK
IAogICAgIHJldHVybiB0b3RhbEJ5dGVzV3JpdHRlbjsKIH0KKworYm9vbCB1bmxvYWRNb2R1bGUo
UGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQoreworICAgIHJldHVybiBnX21vZHVsZV9jbG9zZShtb2R1
bGUpOworfQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwCShyZXZpc2lvbiAyOTc0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDggQEAKICNpbmNsdWRl
ICJGVFBEaXJlY3RvcnlEb2N1bWVudC5oIgogI2luY2x1ZGUgIkdsb2JhbEhpc3RvcnkuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgor
I2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTcsMTIgKzU4LDEwIEBAIFZlY3Rvcjxj
aGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QKIAogYm9vbCBXZWJDb3JlOjpoaXN0b3J5
Q29udGFpbnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KIAotUGx1
Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRl
eCh1bnNpZ25lZCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDt9Ci11bnNpZ25lZCBQbHVn
SW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDsgfQotU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygp
OyB9IAotYm9vbCBXZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0K
LXZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9
Ci0KK1BsdWdpblNldCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7
IG5vdEltcGxlbWVudGVkKCk7IFBsdWdpblNldCBwbHVnaW5zOyByZXR1cm4gcGx1Z2luczt9CitW
ZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpblBhdGhzKCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyBWZWN0b3I8U3RyaW5nPiBwYXRoczsgcmV0dXJuIHBhdGhzO30KK2Jvb2wg
UGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKSBjb25z
dCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorYm9vbCBQbHVnaW5QYWNrYWdl
OjpmZXRjaEluZm8oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTt9CiAKIENvbG9y
IFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBX
ZWJDb3JlOjpzZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0LmNwcAkocmV2aXNpb24gMjk3NDEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZpbGVTeXN0ZW1RdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4LDYgKzY4LDE4IEBAIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3QK
ICAgICByZXR1cm4gUURpcihwYXRoKS5maWxlUGF0aChjb21wb25lbnQpOwogfQogCitTdHJpbmcg
cGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQorCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVs
ZSBtb2R1bGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIH0KIAogLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQv
VGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDI5NzQxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1
OSw4IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3Jl
LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAj
aW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKQEAgLTY5LDYgKzcwLDExIEBACiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJ
blBhdGhzKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBQbHVnaW5TZXQgcGx1Z2luczsgcmV0
dXJuIHBsdWdpbnM7fQorVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVn
aW5QYXRocygpIHsgbm90SW1wbGVtZW50ZWQoKTsgVmVjdG9yPFN0cmluZz4gcGF0aHM7IHJldHVy
biBwYXRoczt9Citib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29u
c3QgU3RyaW5nJikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK2Jv
b2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
ZmFsc2U7fQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFZlY3RvcjxTdHJpbmc+IHN1cHBvcnRl
ZEtleVNpemVzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsg
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDI5
NzQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNCw2ICsxMTQsMTEgQEAgU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKICAg
ICByZXR1cm4gIiI7CiB9CiAKK1N0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBw
YXRoKQoreworICAgIHJldHVybiBTdHJpbmcoUGF0aEZpbmRGaWxlTmFtZShtX3BhdGguY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSkpOworfQorCiBzdGF0aWMgU3RyaW5nIGJ1bmRsZU5h
bWUoKQogewogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkOwpAQCAtMjAyLDYgKzIwNywxMiBA
QCBpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsCiAgICAgICAgIHJldHVy
biAtMTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihieXRlc1dyaXR0ZW4pOwogfQorCiti
b29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUpCit7CisgICAgcmV0dXJuIDo6
RnJlZUxpYnJhcnkobW9kdWxlKTsKK30KKwogU3RyaW5nIGxvY2FsVXNlclNwZWNpZmljU3RvcmFn
ZURpcmVjdG9yeSgpCiB7CiAgICAgcmV0dXJuIGNhY2hlZFN0b3JhZ2VEaXJlY3RvcnkoQ1NJRExf
TE9DQUxfQVBQREFUQSk7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDI5NjI2KQkoZnJvbSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNw
cDoyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlV2luLmgiCisKKyNpbmNsdWRlICJQbHVnaW5Q
YWNrYWdlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld1dpbi5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHNobHdhcGkuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQbHVnaW5EYXRhYmFzZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46Omlu
c3RhbGxlZFBsdWdpbnMoKQoreworICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZVdpbiogcGx1Z2lu
cyA9IDA7CisgICAgCisgICAgaWYgKCFwbHVnaW5zKSB7CisgICAgICAgIHBsdWdpbnMgPSBuZXcg
UGx1Z2luRGF0YWJhc2VXaW47CisgICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBsdWdp
bkRhdGFiYXNlV2luOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSk7CisgICAgICAgIHBsdWdpbnMtPnJl
ZnJlc2goKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luczsKK30KKwordm9pZCBQbHVnaW5E
YXRhYmFzZVdpbjo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICBtX3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICByZWZyZXNoKCk7Cit9CisKK2Jvb2wg
UGx1Z2luRGF0YWJhc2VXaW46OnJlZnJlc2goKQoreyAgIAorICAgIFBsdWdpblNldCBuZXdQbHVn
aW5zOworCisgICAgYm9vbCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7CisKKyAgICAvLyBDcmVh
dGUgYSBuZXcgc2V0IG9mIHBsdWdpbnMKKyAgICBuZXdQbHVnaW5zID0gZ2V0UGx1Z2luc0luUGF0
aHMoKTsKKworICAgIGlmICghbV9wbHVnaW5zLmlzRW1wdHkoKSkgeworICAgICAgICBtX3JlZ2lz
dGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKKworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5s
b2FkID0gbV9wbHVnaW5zOworCisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAg
ICBwbHVnaW5zVG9VbmxvYWQucmVtb3ZlKCppdCk7CisKKyAgICAgICAgZW5kID0gbV9wbHVnaW5z
LmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Bs
dWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbmV3UGx1Z2lucy5y
ZW1vdmUoKml0KTsKKworICAgICAgICAvLyBVbmxvYWQgcGx1Z2lucworICAgICAgICBlbmQgPSBw
bHVnaW5zVG9VbmxvYWQuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgICAgICBtX3BsdWdpbnMucmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gQWRkIG5ldyBwbHVn
aW5zCisgICAgICAgIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNl
dENoYW5nZWQgPSAhcGx1Z2luc1RvVW5sb2FkLmlzRW1wdHkoKSB8fCAhbmV3UGx1Z2lucy5pc0Vt
cHR5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5zID0gbmV3UGx1Z2luczsKKyAg
ICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOwor
ICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsK
KworICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAg
IH0KKworICAgIC8vIFJlZ2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgLy8gR2V0IE1JTUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygp
LmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgbWFwX2l0ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7IG1hcF9pdCAh
PSBtYXBfZW5kOyArK21hcF9pdCkgeworICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVz
LmFkZChtYXBfaXQtPmZpcnN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVn
aW5TZXRDaGFuZ2VkOworfQorCitWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IFBsdWdpbkRhdGFi
YXNlV2luOjpwbHVnaW5zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+
IHJlc3VsdDsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5z
LmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lu
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoKCppdCku
Z2V0KCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFk
ZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMpCit7
CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RL
ZXksIEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZ
UywgJmtleSk7CisKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHJl
dHVybjsKKworICAgIHdjaGFyX3QgbmFtZVsxMjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2RpZmll
ZDsKKworICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBpKysp
IHsKKyAgICAgICAgRFdPUkQgbmFtZUxlbiA9IF9jb3VudG9mKG5hbWUpOworICAgICAgICByZXN1
bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0
TW9kaWZpZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAg
ICAgRFdPUkQgcGF0aFN0clNpemUgPSBzaXplb2YocGF0aFN0cik7CisgICAgICAgIERXT1JEIHR5
cGU7CisKKyAgICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShrZXksIG5hbWUsIFRFWFQoIlBhdGgi
KSwgJnR5cGUsIChMUEJZVEUpcGF0aFN0ciwgJnBhdGhTdHJTaXplKTsKKyAgICAgICAgaWYgKHJl
c3VsdCAhPSBFUlJPUl9TVUNDRVNTIHx8IHR5cGUgIT0gUkVHX1NaKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyaWJ1dGVzOwor
ICAgICAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZvU3Rh
bmRhcmQsICZhdHRyaWJ1dGVzKSA9PSAwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgUGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBh
Y2thZ2UoU3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBh
dHRyaWJ1dGVzLmZ0TGFzdFdyaXRlVGltZSk7CisKKyAgICAgICAgaWYgKHBhY2thZ2UpCisgICAg
ICAgICAgICBwbHVnaW5zLmFkZChwYWNrYWdlKTsKKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShr
ZXkpOworfQorCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VXaW46OmdldFBsdWdpbnNJblBhdGhz
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0
aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOworICAgIFBsdWdp
blNldCBwbHVnaW5zOworCisgICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7
CisgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7CisKKyAgICBQbHVnaW5QYWNrYWdl
V2luKiBvbGRXTVBQbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2thZ2VXaW4qIG5ld1dNUFBsdWdp
biA9IDA7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVn
aW5QYXRocy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFN0
cmluZyBwYXR0ZXJuID0gKml0ICsgIlxcKiI7CisKKyAgICAgICAgaEZpbmQgPSBGaW5kRmlyc3RG
aWxlVyhwYXR0ZXJuLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZmaW5kRmlsZURh
dGEpOworCisgICAgICAgIGlmIChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChmaW5kRmls
ZURhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3Ry
aW5nKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1l
KSk7CisgICAgICAgICAgICBpZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8
fCAhZmlsZW5hbWUuZW5kc1dpdGgoImRsbCIsIGZhbHNlKSkgJiYKKyAgICAgICAgICAgICAgICAo
IWVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dp
dGgoIlNob2Nrd2F2ZSAxMCIsIGZhbHNlKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBmaWxlbmFtZTsKKyAg
ICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCkuc2Vjb25kKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgICAgIFBsdWdpblBhY2th
Z2VXaW4qIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKGZ1
bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1lKTsKKworICAgICAgICAgICAgaWYg
KHBsdWdpblBhY2thZ2UpIHsKKyAgICAgICAgICAgICAgICBwbHVnaW5zLmFkZChwbHVnaW5QYWNr
YWdlKTsKKworICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwg
Im5wZHNwbGF5LmRsbCIpKQorICAgICAgICAgICAgICAgICAgICBvbGRXTVBQbHVnaW4gPSBwbHVn
aW5QYWNrYWdlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZp
bGVuYW1lLCAibnAtbXN3bXAuZGxsIikpCisgICAgICAgICAgICAgICAgICAgIG5ld1dNUFBsdWdp
biA9IHBsdWdpblBhY2thZ2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSB3aGlsZSAoRmlu
ZE5leHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0gMCk7CisKKyAgICAgICAgRmluZENs
b3NlKGhGaW5kKTsKKyAgICB9CisKKyAgICBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVlfTE9D
QUxfTUFDSElORSwgcGx1Z2lucyk7CisgICAgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZX0NV
UlJFTlRfVVNFUiwgcGx1Z2lucyk7CisKKyAgICAvLyBJZiBib3RoIHRoZSBvbGQgYW5kIG5ldyBX
TVAgcGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwgCisgICAgLy8gd2UgcmVt
b3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2luZyB0aGUgb2xkIG9uZS4K
KyAgICBpZiAob2xkV01QUGx1Z2luICYmIG5ld1dNUFBsdWdpbikKKyAgICAgICAgcGx1Z2lucy5y
ZW1vdmUob2xkV01QUGx1Z2luKTsKKworICAgIHJldHVybiBwbHVnaW5zOworfQorCitzdGF0aWMg
aW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNp
b25TdHJpbmcpCit7CisgICAgVmVjdG9yPGludD4gdmVyc2lvbjsKKworICAgIHVuc2lnbmVkIHN0
YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7CisgICAgCisgICAgd2hpbGUgKHN0YXJ0
UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgeworICAgICAgICBmb3IgKGVuZFBvcyA9IHN0
YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKKyAgICAg
ICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdb
ZW5kUG9zXSA9PSAnXycpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHZl
cnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9z
IC0gc3RhcnRQb3MpLnRvSW50KCk7CisgICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21w
b25lbnQpOworCisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdmVyc2lvbjsKK30KKworLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMg
aGlnaGVyIHRoYW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMo
Y29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIp
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7
CisgICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJb
aV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgd2UgY29t
ZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMg
YW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQorICAgIHJldHVybiBmYWxzZTsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQbHVnaW5QYXRocyhWZWN0b3I8U3Ry
aW5nPiYgcGF0aHMpCit7CisgICAgLy8gRW51bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBkaXJl
Y3RvcmllcyBpbiB0aGUgcmVnaXN0cnkKKyAgICBIS0VZIGtleTsKKyAgICBMT05HIHJlc3VsdDsK
KyAgICAKKyAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhU
KCJTb2Z0d2FyZVxcTW96aWxsYSIpLCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3Vs
dCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICAgICAg
RklMRVRJTUUgbGFzdE1vZGlmaWVkOworCisgICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisg
ICAgICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgICAgICBEV09SRCBuYW1lTGVu
ID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFJl
Z0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmll
ZCk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3Ry
aW5nKG5hbWUsIG5hbWVMZW4pICsgIlxcRXh0ZW5zaW9ucyI7CisgICAgICAgICAgICBIS0VZIGV4
dGVuc2lvbnNLZXk7CisKKyAgICAgICAgICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKKyAgICAg
ICAgICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJhY3Rl
cnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIEtFWV9SRUFELCAmZXh0ZW5zaW9uc0tleSk7CisK
KyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgICAg
ICAgIC8vIE5vdyBnZXQgdGhlIHBsdWdpbnMgcGF0aAorICAgICAgICAgICAgICAgIFdDSEFSIHBs
dWdpbnNQYXRoU3RyW19NQVhfUEFUSF07CisgICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2luc1Bh
dGhTaXplID0gc2l6ZW9mKHBsdWdpbnNQYXRoU3RyKTsKKyAgICAgICAgICAgICAgICBEV09SRCB0
eXBlOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4dGVuc2lv
bnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNQYXRoU3Ry
LCAmcGx1Z2luc1BhdGhTaXplKTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJS
T1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikKKyAgICAgICAgICAgICAgICAgICAgcGF0aHMu
YXBwZW5kKFN0cmluZyhwbHVnaW5zUGF0aFN0ciwgcGx1Z2luc1BhdGhTaXplIC8gc2l6ZW9mKFdD
SEFSKSAtIDEpKTsKKworICAgICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZWdDbG9zZUtl
eShrZXkpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBs
YXllclBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIC8vIFRoZSBuZXcg
V01QIEZpcmVmb3ggcGx1Z2luIGlzIGluc3RhbGxlZCBpbiBcUEZpbGVzXFBsdWdpbnMgaWYgaXQg
Y2FuJ3QgZmluZCBhbnkgRmlyZWZveCBpbnN0YWxscworICAgIFdDSEFSIHBsdWdpbkRpcmVjdG9y
eVN0cltfTUFYX1BBVEggKyAxXTsKKyAgICBEV09SRCBwbHVnaW5EaXJlY3RvcnlTaXplID0gOjpF
eHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKFRFWFQoIiVTWVNURU1EUklWRSVcXFBGaWxlc1xcUGx1
Z2lucyIpLCBwbHVnaW5EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHBsdWdpbkRpcmVjdG9yeVN0cikp
OworCisgICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNp
emUgPD0gX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5U3RyKSkKKyAgICAgICAgcGF0aHMuYXBwZW5k
KFN0cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7CisK
KyAgICBEV09SRCB0eXBlOworICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFY
X1BBVEhdOworICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5z
dGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1
ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxNaWNyb3NvZnRcXE1lZGlhUGxh
eWVyIiksIFRFWFQoIkluc3RhbGxhdGlvbiBEaXJlY3RvcnkiKSwgJnR5cGUsIChMUEJZVEUpJmlu
c3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOworCisg
ICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQorICAgICAg
ICBwYXRocy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0
aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBhZGRRdWlja1RpbWVQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sK
KyAgICBEV09SRCB0eXBlOworICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFY
X1BBVEhdOworICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5z
dGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1
ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxBcHBsZSBDb21wdXRlciwgSW5j
LlxcUXVpY2tUaW1lIiksIFRFWFQoIkluc3RhbGxEaXIiKSwgJnR5cGUsIChMUEJZVEUpJmluc3Rh
bGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOworCisgICAg
aWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKSB7CisgICAgICAg
IFN0cmluZyBwbHVnaW5EaXIgPSBTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0
YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxccGx1Z2lucyI7
CisgICAgICAgIHBhdGhzLmFwcGVuZChwbHVnaW5EaXIpOworICAgIH0KK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhz
KQoreworICAgIEhLRVkga2V5OworICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhL
RVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlciIp
LCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgRklMRVRJTUUgbGFz
dE1vZGlmaWVkOworCisgICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247CisgICAg
U3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOworCisgICAgLy8gRW51bWVyYXRlIHN1
YmtleXMKKyAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09SRCBuYW1lTGVu
ID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgcmVzdWx0ID0gUmVnRW51
bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsK
KworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0
cmluZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOworICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25z
KGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lvbikpIHsKKyAgICAgICAgICAgIGxh
dGVzdEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247CisgICAgICAgICAgICBsYXRlc3RB
Y3JvYmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxsKCkpIHsK
KyAgICAgICAgRFdPUkQgdHlwZTsKKyAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQYXRoU3Ry
W19NQVhfUEFUSF07CisgICAgICAgIERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgPSBzaXpl
b2YoYWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKKworICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdp
bktleVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxhdGVzdEFj
cm9iYXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgiOworICAgICAgICByZXN1bHQgPSBT
SEdldFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktleVBhdGguY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgJnR5cGUsIChMUEJZVEUpYWNyb2JhdEluc3Rh
bGxQYXRoU3RyLCAmYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSk7CisKKyAgICAgICAgaWYgKHJlc3Vs
dCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpblBh
dGggPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0SW5zdGFsbFBhdGhTaXpl
IC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7CisgICAgICAgICAgICBwYXRocy5h
cHBlbmQoYWNyb2JhdFBsdWdpblBhdGgpOworICAgICAgICB9CisgICAgfQorCisgICAgUmVnQ2xv
c2VLZXkoa2V5KTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc2FmYXJpUGx1Z2luc1BhdGgo
KQoreworICAgIFdDSEFSIG1vZHVsZUZpbGVOYW1lU3RyW19NQVhfUEFUSF07CisgICAgc3RhdGlj
IFN0cmluZyBwbHVnaW5zUGF0aDsKKyAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5QYXRoID0g
ZmFsc2U7CisKKyAgICBpZiAoIWNhY2hlZFBsdWdpblBhdGgpIHsKKyAgICAgICAgY2FjaGVkUGx1
Z2luUGF0aCA9IHRydWU7CisKKyAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9k
dWxlRmlsZU5hbWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7CisKKyAgICAgICAg
aWYgKCFtb2R1bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgp
CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNw
ZWMobW9kdWxlRmlsZU5hbWVTdHIpKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAg
IHBsdWdpbnNQYXRoID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMiOwor
ICAgIH0KK2V4aXQ6CisgICAgcmV0dXJuIHBsdWdpbnNQYXRoOworfQorCitzdGF0aWMgaW5saW5l
IHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpblBhdGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sK
KyAgICBXQ0hBUiBzeXN0ZW1EaXJlY3RvcnlTdHJbTUFYX1BBVEhdOworCisgICAgaWYgKEdldFN5
c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHN5c3RlbURpcmVjdG9y
eVN0cikpID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG1hY3JvbWVkaWFEaXJl
Y3RvcnlTdHJbTUFYX1BBVEhdOworCisgICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9y
eVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcRmxhc2giKSk7CisgICAg
cGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOworCisgICAgUGF0aENvbWJpbmUo
bWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21l
ZFxcU2hvY2t3YXZlIDEwIikpOworICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5
U3RyKTsKK30KKworVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQbHVn
aW5QYXRocygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7CisgICAgU3RyaW5nIG91clBh
dGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOworCisgICAgaWYgKCFvdXJQYXRoLmlzTnVsbCgpKQor
ICAgICAgICBwYXRocy5hcHBlbmQob3VyUGF0aCk7CisgICAgYWRkUXVpY2tUaW1lUGx1Z2luUGF0
aChwYXRocyk7CisgICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChwYXRocyk7CisgICAgYWRk
TW96aWxsYVBsdWdpblBhdGhzKHBhdGhzKTsKKyAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVn
aW5QYXRoKHBhdGhzKTsKKyAgICBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMocGF0aHMpOworCisg
ICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlV2luOjppc01JTUVUeXBl
UmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlwZS5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1F
VHlwZXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBO
byBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJj
aGluZyBhZ2FpbgorICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBl
cy5jb250YWlucyhtaW1lVHlwZSkpOworfQorCitQbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRh
YmFzZVdpbjo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAg
ICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmlu
ZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOworICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1
Z2luc1BhdGgoKTsKKyAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSAwOworICAgIFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworCisgICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRh
aW5zKGtleSkpIHsKKyAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOworICAgICAgICAg
ICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQorICAgICAg
ICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW47Cit9
CisKK1N0cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3Qg
U3RyaW5nJiBleHRlbnNpb24pIGNvbnN0Cit7CisgICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1
Z2luc1BhdGgoKTsKKyAgICBTdHJpbmcgbWltZVR5cGU7CisgICAgUGx1Z2luUGFja2FnZVdpbiog
cGx1Z2luID0gMDsKKworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTUlNRVRvRXh0ZW5z
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9u
cygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9p
dCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKKyAgICAgICAgICAg
ICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIC8vIHBy
ZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtaW1lVHlwZTsKK30KKworUGx1Z2luUGFj
a2FnZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBT
dHJpbmcmIG1pbWVUeXBlKQoreyAgIAorICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IHBs
dWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwuc3Ry
aW5nKCk7CisgICAgCisgICAgaWYgKCFwbHVnaW4pIHsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1l
ID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CisgICAgICAgIGlmICghZmlsZW5hbWUuZW5kc1dp
dGgoIi8iKSkgeworICAgICAgICAgICAgaW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1lLnJldmVy
c2VGaW5kKCcuJyk7CisgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uUG9zICE9IC0xKSB7CisgICAg
ICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhleHRlbnNp
b25Qb3MgKyAxKTsKKworICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVGb3JFeHRl
bnNpb24oZXh0ZW5zaW9uKTsKKyAgICAgICAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1F
VHlwZShtaW1lVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBGSVhNRTogaWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSBXaW5kb3dzIGZvciB0
aGUgbWltZSB0eXBlIAorICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbi4KKwor
ICAgIHJldHVybiBwbHVnaW47Cit9CisKK1BsdWdpblZpZXdXaW4qIFBsdWdpbkRhdGFiYXNlV2lu
OjpjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKK3sKKyAgICAvLyBpZiB3ZSBmYWls
IHRvIGZpbmQgYSBwbHVnaW4gZm9yIHRoaXMgTUlNRSB0eXBlLCBmaW5kUGx1Z2luIHdpbGwgc2Vh
cmNoIGZvcgorICAgIC8vIGEgcGx1Z2luIGJ5IHRoZSBmaWxlIGV4dGVuc2lvbiBhbmQgdXBkYXRl
IHRoZSBNSU1FIHR5cGUsIHNvIHBhc3MgYSBtdXRhYmxlIFN0cmluZworICAgIFN0cmluZyBtaW1l
VHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSBmaW5k
UGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKKyAgICAKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZv
dW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAg
IGlmICghcGx1Z2luICYmIHJlZnJlc2goKSkgeworICAgICAgICBtaW1lVHlwZUNvcHkgPSBtaW1l
VHlwZTsKKyAgICAgICAgcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7Cisg
ICAgfQorICAgICAgICAKKyAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdXaW4ocGFyZW50RnJhbWUs
IHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWlt
ZVR5cGVDb3B5LCBsb2FkTWFudWFsbHkpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
YXRhYmFzZS5jcHAJKHJldmlzaW9uIDI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRh
dGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDM2ICsyNSw0MyBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZVdpbi5oIgorI2lu
Y2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luVmlld1dpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxzaGx3
YXBpLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGx1Z2luRGF0YWJhc2VXaW4qIFBsdWdp
bkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCkKK1BsdWdpbkRhdGFiYXNlKiBQbHVnaW5E
YXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpCiB7Ci0gICAgc3RhdGljIFBsdWdpbkRhdGFiYXNl
V2luKiBwbHVnaW5zID0gMDsKKyAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIHBsdWdpbnMgPSAw
OwogICAgIAogICAgIGlmICghcGx1Z2lucykgewotICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdp
bkRhdGFiYXNlV2luOwotICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRh
YmFzZVdpbjo6ZGVmYXVsdFBsdWdpblBhdGhzKCkpOworICAgICAgICBwbHVnaW5zID0gbmV3IFBs
dWdpbkRhdGFiYXNlOworICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRh
YmFzZTo6ZGVmYXVsdFBsdWdpblBhdGhzKCkpOwogICAgICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIHBsdWdpbnM7CiB9CiAKLXZvaWQgUGx1Z2luRGF0YWJhc2VX
aW46OmFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCitib29sIFBsdWdpbkRh
dGFiYXNlOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorewor
ICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUg
ZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1f
cmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpOworfQorCit2b2lkIFBsdWdp
bkRhdGFiYXNlOjphZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAg
IG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBhdGgpOwogICAgIHJlZnJlc2goKTsKIH0KIAotYm9vbCBQ
bHVnaW5EYXRhYmFzZVdpbjo6cmVmcmVzaCgpCitib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNo
KCkKIHsgICAKICAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsKIApAQCAtMTA4LDkgKzExNiw5IEBA
IGJvb2wgUGx1Z2luRGF0YWJhc2VXaW46OnJlZnJlc2goKQogICAgIHJldHVybiBwbHVnaW5TZXRD
aGFuZ2VkOwogfQogCi1WZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IFBsdWdpbkRhdGFiYXNlV2lu
OjpwbHVnaW5zKCkgY29uc3QKK1ZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gUGx1Z2luRGF0YWJhc2U6
OnBsdWdpbnMoKSBjb25zdAogewotICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gcmVzdWx0
OworICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcmVzdWx0OwogCiAgICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CiAgICAgZm9yIChQbHVnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
QEAgLTExOSwzNDcgKzEyNywxOSBAQCBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IFBsdWdpbkRh
dGFiYXNlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkZFBs
dWdpbnNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMpCi17Ci0g
ICAgSEtFWSBrZXk7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXks
IEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywg
JmtleSk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHdjaGFyX3QgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsK
LQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsK
LSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IF9jb3VudG9mKG5hbWUpOwotICAgICAgICByZXN1bHQg
PSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9k
aWZpZWQpOwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAg
RFdPUkQgcGF0aFN0clNpemUgPSBzaXplb2YocGF0aFN0cik7Ci0gICAgICAgIERXT1JEIHR5cGU7
Ci0KLSAgICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShrZXksIG5hbWUsIFRFWFQoIlBhdGgiKSwg
JnR5cGUsIChMUEJZVEUpcGF0aFN0ciwgJnBhdGhTdHJTaXplKTsKLSAgICAgICAgaWYgKHJlc3Vs
dCAhPSBFUlJPUl9TVUNDRVNTIHx8IHR5cGUgIT0gUkVHX1NaKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyaWJ1dGVzOwotICAg
ICAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZvU3RhbmRh
cmQsICZhdHRyaWJ1dGVzKSA9PSAwKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
UGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBhY2th
Z2UoU3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBhdHRy
aWJ1dGVzLmZ0TGFzdFdyaXRlVGltZSk7Ci0KLSAgICAgICAgaWYgKHBhY2thZ2UpCi0gICAgICAg
ICAgICBwbHVnaW5zLmFkZChwYWNrYWdlKTsKLSAgICB9Ci0KLSAgICBSZWdDbG9zZUtleShrZXkp
OwotfQotCi1QbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VXaW46OmdldFBsdWdpbnNJblBhdGhzKCkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZl
IHNldC4KLSAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOwotICAgIFBsdWdpblNl
dCBwbHVnaW5zOwotCi0gICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0g
ICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7Ci0KLSAgICBQbHVnaW5QYWNrYWdlV2lu
KiBvbGRXTVBQbHVnaW4gPSAwOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIG5ld1dNUFBsdWdpbiA9
IDA7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5Q
YXRocy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFN0cmlu
ZyBwYXR0ZXJuID0gKml0ICsgIlxcKiI7Ci0KLSAgICAgICAgaEZpbmQgPSBGaW5kRmlyc3RGaWxl
VyhwYXR0ZXJuLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZmaW5kRmlsZURhdGEp
OwotCi0gICAgICAgIGlmIChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChmaW5kRmlsZURh
dGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3RyaW5n
KGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7
Ci0gICAgICAgICAgICBpZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8fCAh
ZmlsZW5hbWUuZW5kc1dpdGgoImRsbCIsIGZhbHNlKSkgJiYKLSAgICAgICAgICAgICAgICAoIWVx
dWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dpdGgo
IlNob2Nrd2F2ZSAxMCIsIGZhbHNlKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBmaWxlbmFtZTsKLSAgICAg
ICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCkuc2Vjb25kKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgICAgIFBsdWdpblBhY2thZ2VX
aW4qIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKGZ1bGxQ
YXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1lKTsKLQotICAgICAgICAgICAgaWYgKHBs
dWdpblBhY2thZ2UpIHsKLSAgICAgICAgICAgICAgICBwbHVnaW5zLmFkZChwbHVnaW5QYWNrYWdl
KTsKLQotICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5w
ZHNwbGF5LmRsbCIpKQotICAgICAgICAgICAgICAgICAgICBvbGRXTVBQbHVnaW4gPSBwbHVnaW5Q
YWNrYWdlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVu
YW1lLCAibnAtbXN3bXAuZGxsIikpCi0gICAgICAgICAgICAgICAgICAgIG5ld1dNUFBsdWdpbiA9
IHBsdWdpblBhY2thZ2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSB3aGlsZSAoRmluZE5l
eHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0gMCk7Ci0KLSAgICAgICAgRmluZENsb3Nl
KGhGaW5kKTsKLSAgICB9Ci0KLSAgICBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVlfTE9DQUxf
TUFDSElORSwgcGx1Z2lucyk7Ci0gICAgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZX0NVUlJF
TlRfVVNFUiwgcGx1Z2lucyk7Ci0KLSAgICAvLyBJZiBib3RoIHRoZSBvbGQgYW5kIG5ldyBXTVAg
cGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwgCi0gICAgLy8gd2UgcmVtb3Zl
IHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2luZyB0aGUgb2xkIG9uZS4KLSAg
ICBpZiAob2xkV01QUGx1Z2luICYmIG5ld1dNUFBsdWdpbikKLSAgICAgICAgcGx1Z2lucy5yZW1v
dmUob2xkV01QUGx1Z2luKTsKLQotICAgIHJldHVybiBwbHVnaW5zOwotfQotCi1zdGF0aWMgaW5s
aW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25T
dHJpbmcpCi17Ci0gICAgVmVjdG9yPGludD4gdmVyc2lvbjsKLQotICAgIHVuc2lnbmVkIHN0YXJ0
UG9zID0gMDsKLSAgICB1bnNpZ25lZCBlbmRQb3M7Ci0gICAgCi0gICAgd2hpbGUgKHN0YXJ0UG9z
IDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgewotICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0
UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKLSAgICAgICAg
ICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5k
UG9zXSA9PSAnXycpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaW50IHZlcnNp
b25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0g
c3RhcnRQb3MpLnRvSW50KCk7Ci0gICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25l
bnQpOwotCi0gICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdmVyc2lvbjsKLX0KLQotLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGln
aGVyIHRoYW4gdmVyc2lvbkIKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29u
c3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCi17
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0p
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgY29tZSBo
ZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4g
ZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQbHVnaW5QYXRocyhWZWN0b3I8U3RyaW5n
PiYgcGF0aHMpCi17Ci0gICAgLy8gRW51bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBkaXJlY3Rv
cmllcyBpbiB0aGUgcmVnaXN0cnkKLSAgICBIS0VZIGtleTsKLSAgICBMT05HIHJlc3VsdDsKLSAg
ICAKLSAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJT
b2Z0d2FyZVxcTW96aWxsYSIpLCAwLCBLRVlfUkVBRCwgJmtleSk7Ci0gICAgaWYgKHJlc3VsdCA9
PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIFdDSEFSIG5hbWVbMTI4XTsKLSAgICAgICAgRklM
RVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAg
ICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgICAgICBEV09SRCBuYW1lTGVuID0g
c2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IFJlZ0Vu
dW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7
Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5n
KG5hbWUsIG5hbWVMZW4pICsgIlxcRXh0ZW5zaW9ucyI7Ci0gICAgICAgICAgICBIS0VZIGV4dGVu
c2lvbnNLZXk7Ci0KLSAgICAgICAgICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKLSAgICAgICAg
ICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIEtFWV9SRUFELCAmZXh0ZW5zaW9uc0tleSk7Ci0KLSAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAgICAgICAg
IC8vIE5vdyBnZXQgdGhlIHBsdWdpbnMgcGF0aAotICAgICAgICAgICAgICAgIFdDSEFSIHBsdWdp
bnNQYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2luc1BhdGhT
aXplID0gc2l6ZW9mKHBsdWdpbnNQYXRoU3RyKTsKLSAgICAgICAgICAgICAgICBEV09SRCB0eXBl
OwotCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4dGVuc2lvbnNL
ZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNQYXRoU3RyLCAm
cGx1Z2luc1BhdGhTaXplKTsKLQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1Jf
U1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikKLSAgICAgICAgICAgICAgICAgICAgcGF0aHMuYXBw
ZW5kKFN0cmluZyhwbHVnaW5zUGF0aFN0ciwgcGx1Z2luc1BhdGhTaXplIC8gc2l6ZW9mKFdDSEFS
KSAtIDEpKTsKLQotICAgICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZWdDbG9zZUtleShr
ZXkpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXll
clBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQotewotICAgIC8vIFRoZSBuZXcgV01Q
IEZpcmVmb3ggcGx1Z2luIGlzIGluc3RhbGxlZCBpbiBcUEZpbGVzXFBsdWdpbnMgaWYgaXQgY2Fu
J3QgZmluZCBhbnkgRmlyZWZveCBpbnN0YWxscwotICAgIFdDSEFSIHBsdWdpbkRpcmVjdG9yeVN0
cltfTUFYX1BBVEggKyAxXTsKLSAgICBEV09SRCBwbHVnaW5EaXJlY3RvcnlTaXplID0gOjpFeHBh
bmRFbnZpcm9ubWVudFN0cmluZ3NXKFRFWFQoIiVTWVNURU1EUklWRSVcXFBGaWxlc1xcUGx1Z2lu
cyIpLCBwbHVnaW5EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHBsdWdpbkRpcmVjdG9yeVN0cikpOwot
Ci0gICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNpemUg
PD0gX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5U3RyKSkKLSAgICAgICAgcGF0aHMuYXBwZW5kKFN0
cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7Ci0KLSAg
ICBEV09SRCB0eXBlOwotICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BB
VEhdOwotICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFs
bGF0aW9uRGlyZWN0b3J5U3RyKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShI
S0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxNaWNyb3NvZnRcXE1lZGlhUGxheWVy
IiksIFRFWFQoIkluc3RhbGxhdGlvbiBEaXJlY3RvcnkiKSwgJnR5cGUsIChMUEJZVEUpJmluc3Rh
bGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwotCi0gICAg
aWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAgICAgICBw
YXRocy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9u
RGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBhZGRRdWlja1RpbWVQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAg
ICBEV09SRCB0eXBlOwotICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BB
VEhdOwotICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFs
bGF0aW9uRGlyZWN0b3J5U3RyKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShI
S0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxBcHBsZSBDb21wdXRlciwgSW5jLlxc
UXVpY2tUaW1lIiksIFRFWFQoIkluc3RhbGxEaXIiKSwgJnR5cGUsIChMUEJZVEUpJmluc3RhbGxh
dGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwotCi0gICAgaWYg
KHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKSB7Ci0gICAgICAgIFN0
cmluZyBwbHVnaW5EaXIgPSBTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxs
YXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxccGx1Z2lucyI7Ci0g
ICAgICAgIHBhdGhzLmFwcGVuZChwbHVnaW5EaXIpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGlu
ZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQot
ewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlf
TE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlciIpLCAw
LCBLRVlfUkVBRCwgJmtleSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgRklMRVRJTUUgbGFzdE1v
ZGlmaWVkOwotCi0gICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247Ci0gICAgU3Ry
aW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOwotCi0gICAgLy8gRW51bWVyYXRlIHN1Ymtl
eXMKLSAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBuYW1lTGVuID0g
c2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKLSAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtl
eUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKLQot
ICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmlu
ZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOwotICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGFj
cm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lvbikpIHsKLSAgICAgICAgICAgIGxhdGVz
dEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247Ci0gICAgICAgICAgICBsYXRlc3RBY3Jv
YmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxsKCkpIHsKLSAg
ICAgICAgRFdPUkQgdHlwZTsKLSAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQYXRoU3RyW19N
QVhfUEFUSF07Ci0gICAgICAgIERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgPSBzaXplb2Yo
YWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKLQotICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpbktl
eVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxhdGVzdEFjcm9i
YXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgiOwotICAgICAgICByZXN1bHQgPSBTSEdl
dFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktleVBhdGguY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgJnR5cGUsIChMUEJZVEUpYWNyb2JhdEluc3RhbGxQ
YXRoU3RyLCAmYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9
PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpblBhdGgg
PSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplIC8g
c2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7Ci0gICAgICAgICAgICBwYXRocy5hcHBl
bmQoYWNyb2JhdFBsdWdpblBhdGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VL
ZXkoa2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc2FmYXJpUGx1Z2luc1BhdGgoKQot
ewotICAgIFdDSEFSIG1vZHVsZUZpbGVOYW1lU3RyW19NQVhfUEFUSF07Ci0gICAgc3RhdGljIFN0
cmluZyBwbHVnaW5zUGF0aDsKLSAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5QYXRoID0gZmFs
c2U7Ci0KLSAgICBpZiAoIWNhY2hlZFBsdWdpblBhdGgpIHsKLSAgICAgICAgY2FjaGVkUGx1Z2lu
UGF0aCA9IHRydWU7Ci0KLSAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9kdWxl
RmlsZU5hbWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7Ci0KLSAgICAgICAgaWYg
KCFtb2R1bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgpCi0g
ICAgICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNwZWMo
bW9kdWxlRmlsZU5hbWVTdHIpKQotICAgICAgICAgICAgZ290byBleGl0OwotCi0gICAgICAgIHBs
dWdpbnNQYXRoID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMiOwotICAg
IH0KLWV4aXQ6Ci0gICAgcmV0dXJuIHBsdWdpbnNQYXRoOwotfQotCi1zdGF0aWMgaW5saW5lIHZv
aWQgYWRkTWFjcm9tZWRpYVBsdWdpblBhdGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAg
ICBXQ0hBUiBzeXN0ZW1EaXJlY3RvcnlTdHJbTUFYX1BBVEhdOwotCi0gICAgaWYgKEdldFN5c3Rl
bURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHN5c3RlbURpcmVjdG9yeVN0
cikpID09IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFSIG1hY3JvbWVkaWFEaXJlY3Rv
cnlTdHJbTUFYX1BBVEhdOwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0
ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcRmxhc2giKSk7Ci0gICAgcGF0
aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOwotCi0gICAgUGF0aENvbWJpbmUobWFj
cm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxc
U2hvY2t3YXZlIDEwIikpOwotICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3Ry
KTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQbHVnaW5Q
YXRocygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0gICAgU3RyaW5nIG91clBhdGgg
PSBzYWZhcmlQbHVnaW5zUGF0aCgpOwotCi0gICAgaWYgKCFvdXJQYXRoLmlzTnVsbCgpKQotICAg
ICAgICBwYXRocy5hcHBlbmQob3VyUGF0aCk7Ci0gICAgYWRkUXVpY2tUaW1lUGx1Z2luUGF0aChw
YXRocyk7Ci0gICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChwYXRocyk7Ci0gICAgYWRkTW96
aWxsYVBsdWdpblBhdGhzKHBhdGhzKTsKLSAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5Q
YXRoKHBhdGhzKTsKLSAgICBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMocGF0aHMpOwotCi0gICAg
cmV0dXJuIHBhdGhzOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlV2luOjppc01JTUVUeXBlUmVn
aXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIGlmIChtaW1lVHlwZS5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlw
ZXMuY29udGFpbnMobWltZVR5cGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBObyBw
bHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGlu
ZyBhZ2FpbgotICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5j
b250YWlucyhtaW1lVHlwZSkpOwotfQotCi1QbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFz
ZVdpbjo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK1BsdWdpblBh
Y2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQogewogICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgU3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7Ci0gICAgU3RyaW5nIG91clBh
dGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9
IDA7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gMDsKICAgICBQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKIAogICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgaWYgKCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7
CiAgICAgICAgICAgICBwbHVnaW4gPSAoKml0KS5nZXQoKTsKLSAgICAgICAgICAgIC8vIHByZWZl
ciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgIGlmIChw
bHVnaW4tPnBhcmVudERpcmVjdG9yeSgpID09IG91clBhdGgpCisgICAgICAgICAgICBpZiAoaXNQ
cmVmZXJyZWRQbHVnaW5QYXRoKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtNDY3LDE1ICsxNDcsMTQgQEAgUGx1
Z2luUGFja2FnZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46OnBsdQogICAgIHJldHVybiBwbHVnaW47
CiB9CiAKLVN0cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0CitTdHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVU
eXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdAogewogICAgIGlm
IChleHRlbnNpb24uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBTdHJp
bmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7CiAgICAgU3RyaW5nIG1pbWVUeXBlOwot
ICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IDA7CisgICAgUGx1Z2luUGFja2FnZSogcGx1
Z2luID0gMDsKIAogICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1
Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgTUlNRVRvRXh0ZW5zaW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygp
LmVuZCgpOwpAQCAtNDg2LDggKzE2NSw3IEBAIFN0cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6TUlN
RVR5cGVGb3JFeHQKICAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXh0ZW5z
aW9uc1tpXSwgZXh0ZW5zaW9uKSkgewogICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZSA9IG1p
bWVfaXQtPmZpcnN0OwogICAgICAgICAgICAgICAgICAgICBwbHVnaW4gPSAoKml0KS5nZXQoKTsK
LSAgICAgICAgICAgICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5z
IGRpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLT5wYXJlbnREaXJlY3Rv
cnkoKSA9PSBvdXJQYXRoKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcmVmZXJyZWRQbHVn
aW5QYXRoKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDk3LDkgKzE3
NSw5IEBAIFN0cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6TUlNRVR5cGVGb3JFeHQKICAgICByZXR1
cm4gbWltZVR5cGU7CiB9CiAKLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpm
aW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSkKK1BsdWdpblBhY2th
Z2UqIFBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBt
aW1lVHlwZSkKIHsgICAKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSBwbHVnaW5Gb3JN
SU1FVHlwZShtaW1lVHlwZSk7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1Z2luRm9y
TUlNRVR5cGUobWltZVR5cGUpOwogICAgIFN0cmluZyBmaWxlbmFtZSA9IHVybC5zdHJpbmcoKTsK
ICAgICAKICAgICBpZiAoIXBsdWdpbikgewpAQCAtNTIxLDIwICsxOTksNCBAQCBQbHVnaW5QYWNr
YWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6ZmluCiAgICAgcmV0dXJuIHBsdWdpbjsKIH0KIAot
UGx1Z2luVmlld1dpbiogUGx1Z2luRGF0YWJhc2VXaW46OmNyZWF0ZVBsdWdpblZpZXcoRnJhbWUq
IHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9h
ZE1hbnVhbGx5KQotewotICAgIC8vIGlmIHdlIGZhaWwgdG8gZmluZCBhIHBsdWdpbiBmb3IgdGhp
cyBNSU1FIHR5cGUsIGZpbmRQbHVnaW4gd2lsbCBzZWFyY2ggZm9yCi0gICAgLy8gYSBwbHVnaW4g
YnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGFuZCB1cGRhdGUgdGhlIE1JTUUgdHlwZSwgc28gcGFzcyBh
IG11dGFibGUgU3RyaW5nCi0gICAgU3RyaW5nIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOwotICAg
IFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkp
OwotICAgIAotICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBk
YXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCi0gICAgaWYgKCFwbHVnaW4gJiYgcmVmcmVzaCgp
KSB7Ci0gICAgICAgIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOwotICAgICAgICBwbHVnaW4gPSBm
aW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKLSAgICB9Ci0gICAgICAgIAotICAgIHJldHVy
biBuZXcgUGx1Z2luVmlld1dpbihwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1
cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSk7
Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCShyZXZpc2lvbiAyOTYyNikJ
KGZyb20gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5oOjI5NjI2KQorKysg
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpbkRhdGFiYXNlV2luX0gKKyNk
ZWZpbmUgUGx1Z2luRGF0YWJhc2VXaW5fSAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEZyYW1lOwor
ICAgIGNsYXNzIEludFNpemU7CisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBQbHVnaW5QYWNr
YWdlV2luOworICAgIGNsYXNzIFBsdWdpblZpZXdXaW47CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8
UmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+LCBQbHVnaW5QYWNrYWdlV2luSGFzaD4gUGx1Z2luU2V0
OworICAKKyAgICBjbGFzcyBQbHVnaW5EYXRhYmFzZVdpbiB7CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VXaW4qIGluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICAgICAg
UGx1Z2luVmlld1dpbiogY3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0
IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMs
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKworICAgICAgICBi
b29sIHJlZnJlc2goKTsKKyAgICAgICAgVmVjdG9yPFBsdWdpblBhY2thZ2VXaW4qPiBwbHVnaW5z
KCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSk7CisgICAgICAgIHZvaWQgYWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmlu
ZyYpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc2V0UGx1Z2luUGF0aHMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhdGhzKSB7IG1fcGx1Z2luUGF0aHMgPSBwYXRoczsgfQorICAgICAgICBQ
bHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdDsKKworICAgICAgICBQbHVnaW5QYWNr
YWdlV2luKiBmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSk7Cisg
ICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpOworICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBleHRlbnNpb24pIGNvbnN0OworCisgICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBk
ZWZhdWx0UGx1Z2luUGF0aHMoKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpblBh
dGhzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOworICAg
ICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAkocmV2aXNpb24gMjk2
MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEs
IEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTIzLDQxICsyNCw0MCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQ
bHVnaW5EYXRhYmFzZVdpbl9ICi0jZGVmaW5lIFBsdWdpbkRhdGFiYXNlV2luX0gKLQotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lmbmRlZiBQbHVn
aW5EYXRhYmFzZV9ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlX0gKIAogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSW50U2l6
ZTsKICAgICBjbGFzcyBLVVJMOwotICAgIGNsYXNzIFBsdWdpblBhY2thZ2VXaW47Ci0gICAgY2xh
c3MgUGx1Z2luVmlld1dpbjsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlOwogCi0gICAgdHlwZWRl
ZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiwgUGx1Z2luUGFja2FnZVdpbkhhc2g+
IFBsdWdpblNldDsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2U+LCBQ
bHVnaW5QYWNrYWdlSGFzaD4gUGx1Z2luU2V0OwogICAKLSAgICBjbGFzcyBQbHVnaW5EYXRhYmFz
ZVdpbiB7CisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2UgewogICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBsdWdpbkRhdGFiYXNlV2luKiBpbnN0YWxsZWRQbHVnaW5zKCk7Ci0gICAgICAgIFBs
dWdpblZpZXdXaW4qIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJ
bnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisgICAgICAgIHN0YXRp
YyBQbHVnaW5EYXRhYmFzZSogaW5zdGFsbGVkUGx1Z2lucygpOwogCiAgICAgICAgIGJvb2wgcmVm
cmVzaCgpOwotICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IHBsdWdpbnMoKSBjb25z
dDsKKyAgICAgICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBwbHVnaW5zKCkgY29uc3Q7CiAgICAg
ICAgIGJvb2wgaXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAg
ICAgICAgIHZvaWQgYWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpOworICAgICAgICBi
b29sIGlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0OwogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0UGx1Z2luUGF0aHMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhdGhzKSB7IG1fcGx1Z2luUGF0aHMgPSBwYXRoczsgfQogICAgICAgICBQbHVnaW5TZXQg
Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdDsKIAotICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBm
aW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIFBs
dWdpblBhY2thZ2VXaW4qIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
OworICAgICAgICBQbHVnaW5QYWNrYWdlKiBmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3Ry
aW5nJiBtaW1lVHlwZSk7CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbkZvck1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRl
bnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyBW
ZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5JbmZvU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5JbmZvU3RvcmUuY3BwCShyZXZpc2lvbiAyOTYyNikJKGZyb20gV2ViQ29yZS9wbHVnaW5zL3dp
bi9QbHVnSW5JbmZvU3RvcmVXaW4uY3BwOjI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkluZm9TdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgi
CisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
V2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0
b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKSAKK3sgCisg
ICAgUGx1Z2luRGF0YWJhc2VXaW4gKmRiID0gUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBs
dWdpbnMoKTsKKyAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87CisgICAgUGx1
Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IGRiLT5wbHVnaW5zKClbaV07CisKKyAgICBpbmZvLT5u
YW1lID0gcGFja2FnZS0+bmFtZSgpOworICAgIGluZm8tPmZpbGUgPSBwYWNrYWdlLT5maWxlTmFt
ZSgpOworICAgIGluZm8tPmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgY29u
c3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5t
aW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICBmb3IgKE1JTUVUb0Rl
c2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1pbWVDbGFzc0luZm8qIG1pbWUgPSBu
ZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOworICAg
ICAgICAKKyAgICAgICAgbWltZS0+dHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgbWltZS0+ZGVz
YyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisKKyAgICAgICAg
VmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5n
ZXQobWltZS0+dHlwZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPiAwKQorICAg
ICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9ICIsIjsKKworICAgICAgICAgICAgbWltZS0+
c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBpbmZvOworfQorCit1bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+
cGx1Z2lucygpLnNpemUoKTsKK30KKworCitTdHJpbmcgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5O
YW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICAvLyBGSVhNRSA1
NjI5MTM5OiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb24gV2luZG93cy4KKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKKyAgICAKK2Jvb2wgUGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBl
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWltZVR5cGUpIAoreworICAgIHJldHVybiBQbHVnaW5E
YXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJlZChtaW1l
VHlwZSk7Cit9CisKK3ZvaWQgcmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWRPcGVuUGFnZXMpCit7
CisgICAgUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOwor
CisgICAgaWYgKHJlbG9hZE9wZW5QYWdlcykgeworICAgICAgICAvLyBGSVhNRTogcmVsb2FkIG9w
ZW4gcGFnZXMKKyAgICB9Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZv
U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUu
Y3BwCShyZXZpc2lvbiAyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMTYgKzI2LDE2IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRlICJQbHVnaW5E
YXRhYmFzZVdpbi5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBQbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbklu
Zm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkIGkpIAogeyAKLSAgICBQbHVnaW5EYXRhYmFzZVdp
biAqZGIgPSBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIFBsdWdp
bkRhdGFiYXNlICpkYiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7CiAgICAg
UGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5JbmZvOwotICAgIFBsdWdpblBhY2thZ2VXaW4q
IHBhY2thZ2UgPSBkYi0+cGx1Z2lucygpW2ldOworICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2Ug
PSBkYi0+cGx1Z2lucygpW2ldOwogCiAgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsK
ICAgICBpbmZvLT5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKQEAgLTY1LDI1ICs2NiwyNSBA
QCBQbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpCiAKIHVuc2lnbmVkIFBs
dWdJbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdAogewotICAgIHJldHVybiBQbHVnaW5E
YXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCkuc2l6ZSgpOworICAgIHJl
dHVybiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCkuc2l6ZSgp
OwogfQogCiAKIFN0cmluZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewotICAgIC8vIEZJWE1FIDU2MjkxMzk6IEltcGxlbWVu
dCB0aGlzIG1ldGhvZCBvbiBXaW5kb3dzLgorICAgIC8vIEZJWE1FIDU2MjkxMzk6IEltcGxlbWVu
dCB0aGlzIG1ldGhvZC4KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKICAgICAKIGJvb2wgUGx1
Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWlt
ZVR5cGUpIAogewotICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lu
cygpLT5pc01JTUVUeXBlUmVnaXN0ZXJlZChtaW1lVHlwZSk7CisgICAgcmV0dXJuIFBsdWdpbkRh
dGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBl
KTsKIH0KIAogdm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5QYWdlcykKIHsKLSAg
ICBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7CisgICAg
UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOwogCiAgICAgaWYg
KHJlbG9hZE9wZW5QYWdlcykgewogICAgICAgICAvLyBGSVhNRTogcmVsb2FkIG9wZW4gcGFnZXMK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHJldmlzaW9uIDI5NjI2KQkoZnJvbSBX
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwOjI5NjI2KQorKysgV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzc4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlIDxzaGx3YXBpLmg+CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVf
aW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGx1Z2luUGFja2FnZVdpbjo6flBsdWdpblBhY2thZ2VXaW4oKQoreworICAgIEFTU0VSVCgh
bV9pc0xvYWRlZCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0VmVyc2lvbkluZm8oY29uc3QgTFBW
T0lEIHZlcnNpb25JbmZvRGF0YSwgY29uc3QgU3RyaW5nJiBpbmZvKQoreworICAgIExQVk9JRCBi
dWZmZXI7CisgICAgVUlOVCBidWZmZXJMZW5ndGg7CisgICAgU3RyaW5nIHN1YkluZm8gPSAiXFxT
dHJpbmdmaWxlSW5mb1xcMDQwOTA0RTRcXCIgKyBpbmZvOworCisgICAgYm9vbCByZXR2YWwgPSBW
ZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEsIGNvbnN0X2Nhc3Q8VUNoYXIqPihzdWJJbmZv
LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZidWZmZXIsICZidWZmZXJMZW5ndGgpOworICAgIGlmICghcmV0dmFsIHx8
IGJ1ZmZlckxlbmd0aCA9PSAwKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBT
dWJ0cmFjdCAxIGZyb20gdGhlIGxlbmd0aDsgd2UgZG9uJ3Qgd2FudCB0aGUgdHJhaWxpbmcgMAor
ICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGJ1ZmZlciksIGJ1ZmZl
ckxlbmd0aCAtIDEpOworfQorCitzdGF0aWMgVmVjdG9yPFN0cmluZz4gc3BsaXRTdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHIsIGNoYXIgZGVsaW1pdGVyLCBpbnQgcGFkVG8pCit7CisgICAgaW50IHBv
cyA9IDA7CisgICAgaW50IG5ld1BvczsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CisgICAg
RGVwcmVjYXRlZFN0cmluZyBkcyA9IHN0ci5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgU3RyaW5n
IHM7CisgICAgZG8geworCisgICAgICAgIG5ld1BvcyA9IGRzLmZpbmQoZGVsaW1pdGVyLCBwb3Mp
OworCisgICAgICAgIGlmIChuZXdQb3MgPT0gLTEpCisgICAgICAgICAgICBzID0gZHMubWlkKHBv
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHMgPSBkcy5taWQocG9zLCBuZXdQb3MgLSBw
b3MpOworICAgICAgICAKKyAgICAgICAgaWYgKCFzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQocyk7CisKKyAgICAgICAgcG9zID0gbmV3UG9zICsgMTsKKyAgICB9IHdoaWxl
IChuZXdQb3MgIT0gLTEpOworCisgICAgd2hpbGUgKHBhZFRvICE9IC0xICYmIHN0YXRpY19jYXN0
PGludD4ocmVzdWx0LnNpemUoKSkgPCBwYWRUbykKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiIik7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFBsdWdpblBhY2thZ2VXaW46OmZyZWVM
aWJyYXJ5U29vbigpCit7CisgICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUo
KSk7CisgICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAgICBBU1NFUlQobV9sb2FkQ291bnQgPT0gMCk7
CisKKyAgICBtX2ZyZWVMaWJyYXJ5VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFBs
dWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdl
V2luPiogLyp0aW1lciovKQoreworICAgIEFTU0VSVChtX21vZHVsZSk7CisgICAgQVNTRVJUKG1f
bG9hZENvdW50ID09IDApOworCisgICAgOjpGcmVlTGlicmFyeShtX21vZHVsZSk7CisgICAgbV9t
b2R1bGUgPSAwOworfQorCitQbHVnaW5QYWNrYWdlV2luOjpQbHVnaW5QYWNrYWdlV2luKGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCkKKyAgICA6IG1fcGF0
aChwYXRoKQorICAgICwgbV9tb2R1bGUoMCkKKyAgICAsIG1fbGFzdE1vZGlmaWVkKGxhc3RNb2Rp
ZmllZCkKKyAgICAsIG1faXNMb2FkZWQoZmFsc2UpCisgICAgLCBtX2xvYWRDb3VudCgwKQorICAg
ICwgbV9mcmVlTGlicmFyeVRpbWVyKHRoaXMsICZQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFy
eVRpbWVyRmlyZWQpCisgICAgLCBtX2ZpbGVWZXJzaW9uTFMoMCkKKyAgICAsIG1fZmlsZVZlcnNp
b25NUygwKQoreworICAgIG1fZmlsZU5hbWUgPSBTdHJpbmcoUGF0aEZpbmRGaWxlTmFtZShtX3Bh
dGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSkpOworICAgIG1fcGFyZW50RGlyZWN0
b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxlbmd0aCgpIC0gbV9maWxlTmFtZS5sZW5ndGgoKSAt
IDEpOworfQorCit2b2lkIFBsdWdpblBhY2thZ2VXaW46OnN0b3JlRmlsZVZlcnNpb24oTFBWT0lE
IHZlcnNpb25JbmZvRGF0YSkKK3sKKyAgICBWU19GSVhFREZJTEVJTkZPKiBpbmZvOworICAgIFVJ
TlQgaW5mb1NpemU7CisgICAgaWYgKCFWZXJRdWVyeVZhbHVlKHZlcnNpb25JbmZvRGF0YSwgVEVY
VCgiXFwiKSwgKExQVk9JRCopICZpbmZvLCAmaW5mb1NpemUpIHx8IGluZm9TaXplIDwgc2l6ZW9m
KFZTX0ZJWEVERklMRUlORk8pKQorICAgICAgICByZXR1cm47CisgICAgbV9maWxlVmVyc2lvbkxT
ID0gaW5mby0+ZHdGaWxlVmVyc2lvbkxTOworICAgIG1fZmlsZVZlcnNpb25NUyA9IGluZm8tPmR3
RmlsZVZlcnNpb25NUzsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlV2luOjppc1BsdWdpbkJsYWNr
bGlzdGVkKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgRFdPUkQgc2lsdmVybGlnaHRQbHVnaW5NaW5S
ZXF1aXJlZFZlcnNpb25NU0RXT1JEID0gMHgwMDAxMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgRFdP
UkQgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25MU0RXT1JEID0gMHg1MUJFMDAw
MDsKKworICAgIGlmIChuYW1lKCkgPT0gIlNpbHZlcmxpZ2h0IFBsdWctSW4iKSB7CisgICAgICAg
IC8vIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vNTU1NzM3OT4gQ3Jhc2ggaW4gU2lsdmVybGlnaHQg
d2hlbiBvcGVuaW5nIG1pY3Jvc29mdC5jb20uCisgICAgICAgIC8vIHRoZSBsYXRlc3QgMS4wIHZl
cnNpb24gb2YgU2lsdmVybGlnaHQgZG9lcyBub3QgcmVwcm9kdWNlIHRoaXMgY3Jhc2gsIHNvIGFs
bG93IGl0CisgICAgICAgIC8vIGFuZCBhbnkgbmV3ZXIgdmVyc2lvbnMKKyAgICAgICAgaWYgKG1f
ZmlsZVZlcnNpb25NUyA8IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09S
RCB8fAorICAgICAgICAgICAgKG1fZmlsZVZlcnNpb25NUyA9PSBzaWx2ZXJsaWdodFBsdWdpbk1p
blJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgJiYgbV9maWxlVmVyc2lvbkxTIDwgc2lsdmVybGlnaHRQ
bHVnaW5NaW5SZXF1aXJlZFZlcnNpb25MU0RXT1JEKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0gZWxzZSBpZiAoZmlsZU5hbWUoKSA9PSAibnBtb3pheC5kbGwiKQorICAgICAgICAv
LyBCdWcgMTUyMTc6IE1vemlsbGEgQWN0aXZlWCBjb250cm9sIGNvbXBsYWlucyBhYm91dCBtaXNz
aW5nIHhwY29tX2NvcmUuZGxsCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFBsdWdpblBhY2thZ2VXaW46OmZldGNoSW5mbygpCit7CisgICAgRFdP
UkQgdmVyc2lvbkluZm9TaXplLCB6ZXJvSGFuZGxlOworICAgIHZlcnNpb25JbmZvU2l6ZSA9IEdl
dEZpbGVWZXJzaW9uSW5mb1NpemVXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpLCAmemVyb0hhbmRsZSk7IAorCisgICAgaWYgKHZlcnNpb25JbmZvU2l6ZSA9PSAwKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMUFZPSUQgdmVyc2lvbkluZm9EYXRhID0gZmFzdE1h
bGxvYyh2ZXJzaW9uSW5mb1NpemUpOworCisgICAgaWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKG1f
cGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2ZXJzaW9uSW5mb1NpemUs
IHZlcnNpb25JbmZvRGF0YSkpIHsKKyAgICAgICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1fbmFtZSA9IGdldFZlcnNpb25J
bmZvKHZlcnNpb25JbmZvRGF0YSwgIlByb2R1Y3ROYW1lIik7CisgICAgbV9kZXNjcmlwdGlvbiA9
IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIkZpbGVEZXNjcmlwdGlvbiIpOworCisg
ICAgaWYgKG1fbmFtZS5pc051bGwoKSB8fCBtX2Rlc2NyaXB0aW9uLmlzTnVsbCgpKSB7CisgICAg
ICAgIGZhc3RGcmVlKHZlcnNpb25JbmZvRGF0YSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBzdG9yZUZpbGVWZXJzaW9uKHZlcnNpb25JbmZvRGF0YSk7CisKKyAgICBpZiAo
aXNQbHVnaW5CbGFja2xpc3RlZCgpKSB7CisgICAgICAgIGZhc3RGcmVlKHZlcnNpb25JbmZvRGF0
YSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBWZWN0b3I8U3RyaW5nPiBt
aW1lVHlwZXMgPSBzcGxpdFN0cmluZyhnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJN
SU1FVHlwZSIpLCAnfCcsIC0xKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBmaWxlRXh0ZW50cyA9IHNw
bGl0U3RyaW5nKGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIkZpbGVFeHRlbnRzIiks
ICd8JywgbWltZVR5cGVzLnNpemUoKSk7CisgICAgVmVjdG9yPFN0cmluZz4gZGVzY3JpcHRpb25z
ID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLCAiRmlsZU9wZW5O
YW1lIiksICd8JywgbWltZVR5cGVzLnNpemUoKSk7CisKKyAgICBmYXN0RnJlZSh2ZXJzaW9uSW5m
b0RhdGEpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1pbWVUeXBlcy5zaXplKCk7
IGkrKykgeworICAgICAgICAvLyBHZXQgcmlkIG9mIHRoZSBleHRlbnNpb24gbGlzdCBpbiB0aGUg
ZGVzY3JpcHRpb24gc3RyaW5nCisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0
aW9uc1tpXTsgICAgCisgICAgICAgIGludCBwb3MgPSBkZXNjcmlwdGlvbi5maW5kKCIoKiIpOwor
ICAgICAgICBpZiAocG9zICE9IC0xKSB7CisgICAgICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBh
IHNwYWNlIHRoYXQgd2UgbmVlZCB0byBnZXQgcmlkIG9mCisgICAgICAgICAgICBpZiAocG9zID4g
MSAmJiBkZXNjcmlwdGlvbltwb3MgLSAxXSA9PSAnICcpCisgICAgICAgICAgICAgICAgcG9zLS07
CisKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24ubGVmdChwb3MpOworICAg
ICAgICB9CisKKyAgICAgICAgbWltZVR5cGVzW2ldID0gbWltZVR5cGVzW2ldLmxvd2VyKCk7CisK
KyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lVHlwZXNbaV0sIHNwbGl0U3RyaW5n
KGZpbGVFeHRlbnRzW2ldLCAnLCcsIC0xKSk7CisgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25z
LmFkZChtaW1lVHlwZXNbaV0sIGRlc2NyaXB0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpsb2FkKCkKK3sKKyAgICBpZiAobV9mcmVl
TGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAg
ICAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0b3AoKTsKKyAgICB9IGVsc2UgaWYgKG1faXNMb2Fk
ZWQpIHsKKyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgV0NIQVIgY3VycmVudFBhdGhbTUFYX1BBVEhdOworCisgICAgICAg
IGlmICghOjpHZXRDdXJyZW50RGlyZWN0b3J5VyhNQVhfUEFUSCwgY3VycmVudFBhdGgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFN0cmluZyBwYXRoID0gbV9wYXRoLnN1
YnN0cmluZygwLCBtX3BhdGgucmV2ZXJzZUZpbmQoJ1xcJykpOworCisgICAgICAgIGlmICghOjpT
ZXRDdXJyZW50RGlyZWN0b3J5VyhwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIExvYWQgdGhlIGxpYnJh
cnkKKyAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5VyhtX3BhdGguY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSk7CisKKyAgICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3Rv
cnlXKGN1cnJlbnRQYXRoKSkgeworICAgICAgICAgICAgaWYgKG1fbW9kdWxlKQorICAgICAgICAg
ICAgICAgIDo6RnJlZUxpYnJhcnkobV9tb2R1bGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX21vZHVsZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9HZXRFbnRyeVBvaW50
c0Z1bmNQdHIgTlBfR2V0RW50cnlQb2ludHMgPSAwOworICAgIE5QX0luaXRpYWxpemVGdW5jUHRy
IE5QX0luaXRpYWxpemUgPSAwOworICAgIE5QRXJyb3IgbnBFcnI7CisKKyAgICBOUF9Jbml0aWFs
aXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBf
SW5pdGlhbGl6ZSIpOworICAgIE5QX0dldEVudHJ5UG9pbnRzID0gKE5QX0dldEVudHJ5UG9pbnRz
RnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0dldEVudHJ5UG9pbnRzIik7Cisg
ICAgbV9OUFBfU2h1dGRvd24gPSAoTlBQX1NodXRkb3duUHJvY1B0cilHZXRQcm9jQWRkcmVzcyht
X21vZHVsZSwgIk5QX1NodXRkb3duIik7CisKKyAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIU5Q
X0dldEVudHJ5UG9pbnRzIHx8ICFtX05QUF9TaHV0ZG93bikKKyAgICAgICAgZ290byBhYm9ydDsK
KyAgCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykp
OworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKworICAg
IG5wRXJyID0gTlBfR2V0RW50cnlQb2ludHMoJm1fcGx1Z2luRnVuY3MpOworICAgIExPR19OUEVS
Uk9SKG5wRXJyKTsKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdv
dG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fYnJvd3NlckZ1bmNzLCAwLCBzaXplb2YobV9icm93
c2VyRnVuY3MpKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6ZW9mIChtX2Jyb3dzZXJG
dW5jcyk7CisgICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QX1ZFUlNJT05fTUlOT1I7Cisg
ICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7CisgICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJlYWQg
PSBOUE5fUmVxdWVzdFJlYWQ7CisgICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05l
d1N0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07CisgICAgbV9icm93
c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKKyAgICBtX2Jyb3dzZXJGdW5jcy51YWdlbnQg
PSBOUE5fVXNlckFnZW50OworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01lbUFs
bG9jOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5y
ZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0
dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJs
bm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWUg
PSBOUE5fR2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFs
dWU7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJl
Y3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRl
UmVnaW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3
OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3Rh
dGU7CisgICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBv
cHVwc0VuYWJsZWRTdGF0ZTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFs
dWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3Ry
aW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7Cisg
ICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRpZmll
cjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZp
ZXJJc1N0cmluZzsKKyAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50aWZpZXIgPSBfTlBO
X1VURjhGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnRmcm9taWRlbnRpZmll
ciA9IF9OUE5fSW50RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuY3JlYXRlb2Jq
ZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0
ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9
IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBfTlBOX0lu
dm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZh
dWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7CisgICAgbV9icm93
c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1
bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAgIG1fYnJvd3NlckZ1bmNzLmhh
c21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0
aW9uID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0g
X05QTl9FbnVtZXJhdGU7CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1
bmNzKTsKKyAgICBMT0dfTlBFUlJPUihucEVycik7CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJf
Tk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtX2xvYWRDb3VudCsrOworICAg
IHJldHVybiB0cnVlOworYWJvcnQ6CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2VXaW46OnVubG9hZCgpCit7Cisg
ICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoLS1tX2xvYWRD
b3VudCA+IDApCisgICAgICAgIHJldHVybjsKKworICAgIG1fTlBQX1NodXRkb3duKCk7CisKKyAg
ICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1
bmxvYWRXaXRob3V0U2h1dGRvd24oKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOworICAgIEFTU0VSVChtX21v
ZHVsZSk7CisKKyAgICAvLyA8cmRhcjovLzU1MzA1MTk+OiBDcmFzaCB3aGVuIGNsb3NpbmcgdGFi
IHdpdGggcGRmIGZpbGUgKFJlYWRlciA3IG9ubHkpCisgICAgLy8gSWYgdGhlIHBsdWdpbiBoYXMg
c3ViY2xhc3NlZCBpdHMgcGFyZW50IHdpbmRvdywgYXMgd2l0aCBSZWFkZXIgNywgd2UgbWF5IGhh
dmUKKyAgICAvLyBnb3R0ZW4gaGVyZSBieSB3YXkgb2YgdGhlIHBsdWdpbidzIGludGVybmFsIHdp
bmRvdyBwcm9jIGZvcndhcmRpbmcgYSBtZXNzYWdlIHRvIG91cgorICAgIC8vIG9yaWdpbmFsIHdp
bmRvdyBwcm9jLiBJZiB3ZSBmcmVlIHRoZSBwbHVnaW4gbGlicmFyeSBmcm9tIGhlcmUsIHdlIHdp
bGwganVtcCBiYWNrCisgICAgLy8gdG8gY29kZSB3ZSBqdXN0IGZyZWVkIHdoZW4gd2UgcmV0dXJu
LCBzbyBkZWxheSBjYWxsaW5nIEZyZWVMaWJyYXJ5IGF0IGxlYXN0IHVudGlsCisgICAgLy8gdGhl
IG5leHQgbWVzc2FnZSBsb29wCisgICAgZnJlZUxpYnJhcnlTb29uKCk7CisKKyAgICBtX2lzTG9h
ZGVkID0gZmFsc2U7Cit9CisKK1BsdWdpblBhY2thZ2VXaW4qIFBsdWdpblBhY2thZ2VXaW46OmNy
ZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlm
aWVkKQoreworICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBuZXcgUGx1Z2luUGFja2Fn
ZVdpbihwYXRoLCBsYXN0TW9kaWZpZWQpOworCisgICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8o
KSkgeworICAgICAgICBkZWxldGUgcGFja2FnZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBwYWNrYWdlOworfQorCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlV2lu
OjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5zaWduZWQgaGFzaENvZGVzWzNdID0geworICAgICAg
ICBtX2Rlc2NyaXB0aW9uLmltcGwoKS0+aGFzaCgpLAorICAgICAgICBtX2xhc3RNb2RpZmllZC5k
d0xvd0RhdGVUaW1lLAorICAgICAgICBtX2xhc3RNb2RpZmllZC5kd0hpZ2hEYXRlVGltZQorICAg
IH07CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2Fz
dDxVQ2hhcio+KGhhc2hDb2RlcyksIDMgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9mKFVDaGFy
KSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2Fn
ZVdpbiYgYSwgY29uc3QgUGx1Z2luUGFja2FnZVdpbiYgYikKK3sKKyAgICByZXR1cm4gYS5tX2Rl
c2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbiAmJiAoQ29tcGFyZUZpbGVUaW1lKCZhLm1fbGFz
dE1vZGlmaWVkLCAmYi5tX2xhc3RNb2RpZmllZCkgPT0gMCk7Cit9CisKK30KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luUGFja2FnZS5jcHAJKHJldmlzaW9uIDI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblBhY2thZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTAgKzI0LDggQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpbmNsdWRlIDxzaGx3YXBpLmg+Ci0KICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZS5oIgogCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJEZXByZWNhdGVk
U3RyaW5nLmgiCkBAIC0zNSw1NSArMzQsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
bHVnaW5QYWNrYWdlV2luOjp+UGx1Z2luUGFja2FnZVdpbigpCitQbHVnaW5QYWNrYWdlOjp+UGx1
Z2luUGFja2FnZSgpCiB7CiAgICAgQVNTRVJUKCFtX2lzTG9hZGVkKTsKIH0KIAotc3RhdGljIFN0
cmluZyBnZXRWZXJzaW9uSW5mbyhjb25zdCBMUFZPSUQgdmVyc2lvbkluZm9EYXRhLCBjb25zdCBT
dHJpbmcmIGluZm8pCi17Ci0gICAgTFBWT0lEIGJ1ZmZlcjsKLSAgICBVSU5UIGJ1ZmZlckxlbmd0
aDsKLSAgICBTdHJpbmcgc3ViSW5mbyA9ICJcXFN0cmluZ2ZpbGVJbmZvXFwwNDA5MDRFNFxcIiAr
IGluZm87Ci0KLSAgICBib29sIHJldHZhbCA9IFZlclF1ZXJ5VmFsdWVXKHZlcnNpb25JbmZvRGF0
YSwgY29uc3RfY2FzdDxVQ2hhcio+KHN1YkluZm8uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZmZlciwgJmJ1ZmZl
ckxlbmd0aCk7Ci0gICAgaWYgKCFyZXR2YWwgfHwgYnVmZmVyTGVuZ3RoID09IDApCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8vIFN1YnRyYWN0IDEgZnJvbSB0aGUgbGVuZ3RoOyB3
ZSBkb24ndCB3YW50IHRoZSB0cmFpbGluZyAwCi0gICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJl
dF9jYXN0PFVDaGFyKj4oYnVmZmVyKSwgYnVmZmVyTGVuZ3RoIC0gMSk7Ci19Ci0KLXN0YXRpYyBW
ZWN0b3I8U3RyaW5nPiBzcGxpdFN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY2hhciBkZWxpbWl0
ZXIsIGludCBwYWRUbykKLXsKLSAgICBpbnQgcG9zID0gMDsKLSAgICBpbnQgbmV3UG9zOwotICAg
IFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGRzID0gc3RyLmRl
cHJlY2F0ZWRTdHJpbmcoKTsKLSAgICBTdHJpbmcgczsKLSAgICBkbyB7Ci0KLSAgICAgICAgbmV3
UG9zID0gZHMuZmluZChkZWxpbWl0ZXIsIHBvcyk7Ci0KLSAgICAgICAgaWYgKG5ld1BvcyA9PSAt
MSkKLSAgICAgICAgICAgIHMgPSBkcy5taWQocG9zKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcyA9IGRzLm1pZChwb3MsIG5ld1BvcyAtIHBvcyk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzKTsKLQotICAgICAgICBw
b3MgPSBuZXdQb3MgKyAxOwotICAgIH0gd2hpbGUgKG5ld1BvcyAhPSAtMSk7Ci0KLSAgICB3aGls
ZSAocGFkVG8gIT0gLTEgJiYgc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQuc2l6ZSgpKSA8IHBhZFRv
KQotICAgICAgICByZXN1bHQuYXBwZW5kKCIiKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlTb29uKCkKK3ZvaWQgUGx1Z2luUGFj
a2FnZTo6ZnJlZUxpYnJhcnlTb29uKCkKIHsKICAgICBBU1NFUlQoIW1fZnJlZUxpYnJhcnlUaW1l
ci5pc0FjdGl2ZSgpKTsKICAgICBBU1NFUlQobV9tb2R1bGUpOwpAQCAtOTIsMjMwICs0OCwyOCBA
QCB2b2lkIFBsdWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5U29vbigpCiAgICAgbV9mcmVlTGli
cmFyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpm
cmVlTGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luUGFja2FnZVdpbj4qIC8qdGltZXIqLykK
K3ZvaWQgUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblBh
Y2thZ2U+KiAvKnRpbWVyKi8pCiB7CiAgICAgQVNTRVJUKG1fbW9kdWxlKTsKICAgICBBU1NFUlQo
bV9sb2FkQ291bnQgPT0gMCk7CiAKLSAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKKyAgICB1
bmxvYWRNb2R1bGUobV9tb2R1bGUpOwogICAgIG1fbW9kdWxlID0gMDsKIH0KIAotUGx1Z2luUGFj
a2FnZVdpbjo6UGx1Z2luUGFja2FnZVdpbihjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVU
SU1FJiBsYXN0TW9kaWZpZWQpCi0gICAgOiBtX3BhdGgocGF0aCkKK1BsdWdpblBhY2thZ2U6OlBs
dWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBQbGF0Zm9ybUZpbGVUaW1lJiBs
YXN0TW9kaWZpZWQpCisgICAgOiBtX2lzTG9hZGVkKGZhbHNlKQorICAgICwgbV9sb2FkQ291bnQo
MCkKKyAgICAsIG1fcGF0aChwYXRoKQogICAgICwgbV9tb2R1bGUoMCkKICAgICAsIG1fbGFzdE1v
ZGlmaWVkKGxhc3RNb2RpZmllZCkKLSAgICAsIG1faXNMb2FkZWQoZmFsc2UpCi0gICAgLCBtX2xv
YWRDb3VudCgwKQotICAgICwgbV9mcmVlTGlicmFyeVRpbWVyKHRoaXMsICZQbHVnaW5QYWNrYWdl
V2luOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQpCi0gICAgLCBtX2ZpbGVWZXJzaW9uTFMoMCkKLSAg
ICAsIG1fZmlsZVZlcnNpb25NUygwKQorICAgICwgbV9mcmVlTGlicmFyeVRpbWVyKHRoaXMsICZQ
bHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQpCiB7Ci0gICAgbV9maWxlTmFtZSA9
IFN0cmluZyhQYXRoRmluZEZpbGVOYW1lKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpKSk7CisgICAgbV9maWxlTmFtZSA9IHBhdGhHZXRGaWxlTmFtZShtX3BhdGgpOwogICAg
IG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxlbmd0aCgpIC0gbV9maWxl
TmFtZS5sZW5ndGgoKSAtIDEpOwogfQogCi12b2lkIFBsdWdpblBhY2thZ2VXaW46OnN0b3JlRmls
ZVZlcnNpb24oTFBWT0lEIHZlcnNpb25JbmZvRGF0YSkKLXsKLSAgICBWU19GSVhFREZJTEVJTkZP
KiBpbmZvOwotICAgIFVJTlQgaW5mb1NpemU7Ci0gICAgaWYgKCFWZXJRdWVyeVZhbHVlKHZlcnNp
b25JbmZvRGF0YSwgVEVYVCgiXFwiKSwgKExQVk9JRCopICZpbmZvLCAmaW5mb1NpemUpIHx8IGlu
Zm9TaXplIDwgc2l6ZW9mKFZTX0ZJWEVERklMRUlORk8pKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9maWxlVmVyc2lvbkxTID0gaW5mby0+ZHdGaWxlVmVyc2lvbkxTOwotICAgIG1fZmlsZVZlcnNp
b25NUyA9IGluZm8tPmR3RmlsZVZlcnNpb25NUzsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlV2lu
Ojppc1BsdWdpbkJsYWNrbGlzdGVkKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgRFdPUkQgc2lsdmVy
bGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEID0gMHgwMDAxMDAwMDsKLSAgICBz
dGF0aWMgY29uc3QgRFdPUkQgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25MU0RX
T1JEID0gMHg1MUJFMDAwMDsKLQotICAgIGlmIChuYW1lKCkgPT0gIlNpbHZlcmxpZ2h0IFBsdWct
SW4iKSB7Ci0gICAgICAgIC8vIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vNTU1NzM3OT4gQ3Jhc2gg
aW4gU2lsdmVybGlnaHQgd2hlbiBvcGVuaW5nIG1pY3Jvc29mdC5jb20uCi0gICAgICAgIC8vIHRo
ZSBsYXRlc3QgMS4wIHZlcnNpb24gb2YgU2lsdmVybGlnaHQgZG9lcyBub3QgcmVwcm9kdWNlIHRo
aXMgY3Jhc2gsIHNvIGFsbG93IGl0Ci0gICAgICAgIC8vIGFuZCBhbnkgbmV3ZXIgdmVyc2lvbnMK
LSAgICAgICAgaWYgKG1fZmlsZVZlcnNpb25NUyA8IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWly
ZWRWZXJzaW9uTVNEV09SRCB8fAotICAgICAgICAgICAgKG1fZmlsZVZlcnNpb25NUyA9PSBzaWx2
ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgJiYgbV9maWxlVmVyc2lvbkxT
IDwgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25MU0RXT1JEKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoZmlsZU5hbWUoKSA9PSAibnBtb3pheC5k
bGwiKQotICAgICAgICAvLyBCdWcgMTUyMTc6IE1vemlsbGEgQWN0aXZlWCBjb250cm9sIGNvbXBs
YWlucyBhYm91dCBtaXNzaW5nIHhwY29tX2NvcmUuZGxsCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBsdWdpblBhY2thZ2VXaW46OmZldGNoSW5m
bygpCi17Ci0gICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJvSGFuZGxlOwotICAgIHZlcnNp
b25JbmZvU2l6ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLCAmemVyb0hhbmRsZSk7IAotCi0gICAgaWYgKHZlcnNpb25JbmZv
U2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMUFZPSUQgdmVyc2lvbklu
Zm9EYXRhID0gZmFzdE1hbGxvYyh2ZXJzaW9uSW5mb1NpemUpOwotCi0gICAgaWYgKCFHZXRGaWxl
VmVyc2lvbkluZm9XKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2
ZXJzaW9uSW5mb1NpemUsIHZlcnNpb25JbmZvRGF0YSkpIHsKLSAgICAgICAgZmFzdEZyZWUodmVy
c2lvbkluZm9EYXRhKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1fbmFt
ZSA9IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIlByb2R1Y3ROYW1lIik7Ci0gICAg
bV9kZXNjcmlwdGlvbiA9IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIkZpbGVEZXNj
cmlwdGlvbiIpOwotCi0gICAgaWYgKG1fbmFtZS5pc051bGwoKSB8fCBtX2Rlc2NyaXB0aW9uLmlz
TnVsbCgpKSB7Ci0gICAgICAgIGZhc3RGcmVlKHZlcnNpb25JbmZvRGF0YSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzdG9yZUZpbGVWZXJzaW9uKHZlcnNpb25JbmZvRGF0
YSk7Ci0KLSAgICBpZiAoaXNQbHVnaW5CbGFja2xpc3RlZCgpKSB7Ci0gICAgICAgIGZhc3RGcmVl
KHZlcnNpb25JbmZvRGF0YSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBW
ZWN0b3I8U3RyaW5nPiBtaW1lVHlwZXMgPSBzcGxpdFN0cmluZyhnZXRWZXJzaW9uSW5mbyh2ZXJz
aW9uSW5mb0RhdGEsICJNSU1FVHlwZSIpLCAnfCcsIC0xKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBm
aWxlRXh0ZW50cyA9IHNwbGl0U3RyaW5nKGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwg
IkZpbGVFeHRlbnRzIiksICd8JywgbWltZVR5cGVzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gZGVzY3JpcHRpb25zID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9E
YXRhLCAiRmlsZU9wZW5OYW1lIiksICd8JywgbWltZVR5cGVzLnNpemUoKSk7Ci0KLSAgICBmYXN0
RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1p
bWVUeXBlcy5zaXplKCk7IGkrKykgewotICAgICAgICAvLyBHZXQgcmlkIG9mIHRoZSBleHRlbnNp
b24gbGlzdCBpbiB0aGUgZGVzY3JpcHRpb24gc3RyaW5nCi0gICAgICAgIFN0cmluZyBkZXNjcmlw
dGlvbiA9IGRlc2NyaXB0aW9uc1tpXTsgICAgCi0gICAgICAgIGludCBwb3MgPSBkZXNjcmlwdGlv
bi5maW5kKCIoKiIpOwotICAgICAgICBpZiAocG9zICE9IC0xKSB7Ci0gICAgICAgICAgICAvLyBU
aGVyZSBtaWdodCBiZSBhIHNwYWNlIHRoYXQgd2UgbmVlZCB0byBnZXQgcmlkIG9mCi0gICAgICAg
ICAgICBpZiAocG9zID4gMSAmJiBkZXNjcmlwdGlvbltwb3MgLSAxXSA9PSAnICcpCi0gICAgICAg
ICAgICAgICAgcG9zLS07Ci0KLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24u
bGVmdChwb3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgbWltZVR5cGVzW2ldID0gbWltZVR5cGVz
W2ldLmxvd2VyKCk7Ci0KLSAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lVHlwZXNb
aV0sIHNwbGl0U3RyaW5nKGZpbGVFeHRlbnRzW2ldLCAnLCcsIC0xKSk7Ci0gICAgICAgIG1fbWlt
ZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lVHlwZXNbaV0sIGRlc2NyaXB0aW9uKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpsb2FkKCkKLXsK
LSAgICBpZiAobV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgQVNTRVJU
KG1fbW9kdWxlKTsKLSAgICAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0b3AoKTsKLSAgICB9IGVs
c2UgaWYgKG1faXNMb2FkZWQpIHsKLSAgICAgICAgbV9sb2FkQ291bnQrKzsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgV0NIQVIgY3VycmVudFBhdGhbTUFYX1BB
VEhdOwotCi0gICAgICAgIGlmICghOjpHZXRDdXJyZW50RGlyZWN0b3J5VyhNQVhfUEFUSCwgY3Vy
cmVudFBhdGgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFN0cmluZyBw
YXRoID0gbV9wYXRoLnN1YnN0cmluZygwLCBtX3BhdGgucmV2ZXJzZUZpbmQoJ1xcJykpOwotCi0g
ICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhwYXRoLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8v
IExvYWQgdGhlIGxpYnJhcnkKLSAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5VyhtX3Bh
dGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7Ci0KLSAgICAgICAgaWYgKCE6OlNl
dEN1cnJlbnREaXJlY3RvcnlXKGN1cnJlbnRQYXRoKSkgewotICAgICAgICAgICAgaWYgKG1fbW9k
dWxlKQotICAgICAgICAgICAgICAgIDo6RnJlZUxpYnJhcnkobV9tb2R1bGUpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX21vZHVsZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9pc0xvYWRlZCA9IHRydWU7Ci0KLSAgICBO
UF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIgTlBfR2V0RW50cnlQb2ludHMgPSAwOwotICAgIE5QX0lu
aXRpYWxpemVGdW5jUHRyIE5QX0luaXRpYWxpemUgPSAwOwotICAgIE5QRXJyb3IgbnBFcnI7Ci0K
LSAgICBOUF9Jbml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKUdldFByb2NBZGRyZXNz
KG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6ZSIpOwotICAgIE5QX0dldEVudHJ5UG9pbnRzID0gKE5Q
X0dldEVudHJ5UG9pbnRzRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0dldEVu
dHJ5UG9pbnRzIik7Ci0gICAgbV9OUFBfU2h1dGRvd24gPSAoTlBQX1NodXRkb3duUHJvY1B0cilH
ZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX1NodXRkb3duIik7Ci0KLSAgICBpZiAoIU5QX0lu
aXRpYWxpemUgfHwgIU5QX0dldEVudHJ5UG9pbnRzIHx8ICFtX05QUF9TaHV0ZG93bikKLSAgICAg
ICAgZ290byBhYm9ydDsKLSAgCi0gICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2Yo
bV9wbHVnaW5GdW5jcykpOwotICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdp
bkZ1bmNzKTsKLQotICAgIG5wRXJyID0gTlBfR2V0RW50cnlQb2ludHMoJm1fcGx1Z2luRnVuY3Mp
OwotICAgIExPR19OUEVSUk9SKG5wRXJyKTsKLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJS
T1IpCi0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSAgICBtZW1zZXQoJm1fYnJvd3NlckZ1bmNzLCAw
LCBzaXplb2YobV9icm93c2VyRnVuY3MpKTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6
ZW9mIChtX2Jyb3dzZXJGdW5jcyk7Ci0gICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QX1ZF
UlNJT05fTUlOT1I7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7Ci0gICAgbV9icm93c2VyRnVu
Y3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7Ci0gICAgbV9icm93c2VyRnVuY3MubmV3
c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKLSAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9X
cml0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJl
YW07Ci0gICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKLSAgICBtX2Jyb3dz
ZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50OwotICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFs
bG9jID0gTlBOX01lbUFsbG9jOwotICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVt
RnJlZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7Ci0gICAgbV9i
cm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKLSAgICBtX2Jyb3dz
ZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7Ci0gICAgbV9icm93c2Vy
RnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0dmFs
dWUgPSBOUE5fU2V0VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBO
UE5fSW52YWxpZGF0ZVJlY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9
IE5QTl9JbnZhbGlkYXRlUmVnaW9uOwotICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0g
TlBOX0ZvcmNlUmVkcmF3OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0
SmF2YUVudjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVl
cjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQ
b3B1cHNFbmFibGVkU3RhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0
YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKLQotICAgIG1fYnJvd3NlckZ1bmNzLnJl
bGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7Ci0gICAgbV9icm93
c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5n
SWRlbnRpZmllcnM7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5f
R2V0SW50SWRlbnRpZmllcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcg
PSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKLSAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlk
ZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5p
bnRmcm9taWRlbnRpZmllciA9IF9OUE5fSW50RnJvbUlkZW50aWZpZXI7Ci0gICAgbV9icm93c2Vy
RnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7Ci0gICAgbV9icm93c2VyRnVu
Y3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7Ci0gICAgbV9icm93c2VyRnVuY3Mu
cmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5p
bnZva2UgPSBfTlBOX0ludm9rZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0g
X05QTl9JbnZva2VEZWZhdWx0OwotICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9F
dmFsdWF0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVy
dHk7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5Owot
ICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOwotICAgIG1f
YnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7Ci0gICAgbV9icm93c2Vy
RnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247Ci0gICAgbV9icm93c2VyRnVu
Y3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7Ci0KLSAgICBucEVyciA9IE5QX0luaXRpYWxp
emUoJm1fYnJvd3NlckZ1bmNzKTsKLSAgICBMT0dfTlBFUlJPUihucEVycik7Ci0KLSAgICBpZiAo
bnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSAgICBtX2xv
YWRDb3VudCsrOwotICAgIHJldHVybiB0cnVlOwotYWJvcnQ6Ci0gICAgdW5sb2FkV2l0aG91dFNo
dXRkb3duKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2VXaW46
OnVubG9hZCgpCit2b2lkIFBsdWdpblBhY2thZ2U6OnVubG9hZCgpCiB7CiAgICAgaWYgKCFtX2lz
TG9hZGVkKQogICAgICAgICByZXR1cm47CkBAIC0zMjgsNyArODIsNyBAQCB2b2lkIFBsdWdpblBh
Y2thZ2VXaW46OnVubG9hZCgpCiAgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CiB9CiAKLXZv
aWQgUGx1Z2luUGFja2FnZVdpbjo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKK3ZvaWQgUGx1Z2lu
UGFja2FnZTo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKIHsKICAgICBpZiAoIW1faXNMb2FkZWQp
CiAgICAgICAgIHJldHVybjsKQEAgLTM0Nyw5ICsxMDEsOSBAQCB2b2lkIFBsdWdpblBhY2thZ2VX
aW46OnVubG9hZFdpdGhvdXRTaHV0CiAgICAgbV9pc0xvYWRlZCA9IGZhbHNlOwogfQogCi1QbHVn
aW5QYWNrYWdlV2luKiBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCkKK1BsdWdpblBhY2thZ2UqIFBs
dWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBQbGF0
Zm9ybUZpbGVUaW1lJiBsYXN0TW9kaWZpZWQpCiB7Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGFj
a2FnZSA9IG5ldyBQbHVnaW5QYWNrYWdlV2luKHBhdGgsIGxhc3RNb2RpZmllZCk7CisgICAgUGx1
Z2luUGFja2FnZSogcGFja2FnZSA9IG5ldyBQbHVnaW5QYWNrYWdlKHBhdGgsIGxhc3RNb2RpZmll
ZCk7CiAKICAgICBpZiAoIXBhY2thZ2UtPmZldGNoSW5mbygpKSB7CiAgICAgICAgIGRlbGV0ZSBw
YWNrYWdlOwpAQCAtMzU5LDIwICsxMTMsNCBAQCBQbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5QYWNr
YWdlV2luOjpjcmVhCiAgICAgcmV0dXJuIHBhY2thZ2U7CiB9CiAKLXVuc2lnbmVkIFBsdWdpblBh
Y2thZ2VXaW46Omhhc2goKSBjb25zdAoteyAKLSAgICB1bnNpZ25lZCBoYXNoQ29kZXNbM10gPSB7
Ci0gICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCi0gICAgICAgIG1fbGFzdE1v
ZGlmaWVkLmR3TG93RGF0ZVRpbWUsCi0gICAgICAgIG1fbGFzdE1vZGlmaWVkLmR3SGlnaERhdGVU
aW1lCi0gICAgfTsKLQotICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVy
cHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMyAqIHNpemVvZih1bnNpZ25lZCkgLyBzaXpl
b2YoVUNoYXIpKTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjplcXVhbChjb25zdCBQbHVn
aW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBiKQotewotICAgIHJldHVy
biBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uICYmIChDb21wYXJlRmlsZVRpbWUo
JmEubV9sYXN0TW9kaWZpZWQsICZiLm1fbGFzdE1vZGlmaWVkKSA9PSAwKTsKLX0KLQogfQpJbmRl
eDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCShyZXZpc2lvbiAyOTYyNikJKGZyb20gV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmg6Mjk2MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luUGFja2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgUGx1Z2luUGFja2FnZVdpbl9ICisjZGVmaW5lIFBsdWdpblBhY2th
Z2VXaW5fSAorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisK
KyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlw
dGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBN
SU1FVG9FeHRlbnNpb25zTWFwOworCisgICAgY2xhc3MgUGx1Z2luUGFja2FnZVdpbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2VXaW4+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5Q
bHVnaW5QYWNrYWdlV2luKCk7CisgICAgICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlV2luKiBjcmVh
dGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmll
ZCk7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQorICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc2Ny
aXB0aW9uOyB9CisgICAgICAgIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZU5hbWU7IH0KKyAgICAgICAgU3RyaW5nIHBhcmVudERpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50RGlyZWN0b3J5OyB9CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25z
TWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0
aW9uczsgfQorICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CisKKyAgICAgICAgdW5z
aWduZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2lu
JiBiKTsKKworICAgICAgICBib29sIGxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWQoKTsKKyAg
ICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKworICAgICAgICBjb25zdCBOUFBs
dWdpbkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9
CisgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luUGFja2FnZVdpbihjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpOworICAgICAgICBib29sIGZldGNoSW5m
bygpOworICAgICAgICB2b2lkIHN0b3JlRmlsZVZlcnNpb24oTFBWT0lEIHZlcnNpb25JbmZvRGF0
YSk7CisgICAgICAgIGJvb2wgaXNQbHVnaW5CbGFja2xpc3RlZCgpOworCisgICAgICAgIGJvb2wg
bV9pc0xvYWRlZDsKKyAgICAgICAgaW50IG1fbG9hZENvdW50OworCisgICAgICAgIERXT1JEIG1f
ZmlsZVZlcnNpb25NUzsKKyAgICAgICAgRFdPUkQgbV9maWxlVmVyc2lvbkxTOworCisgICAgICAg
IFN0cmluZyBtX2Rlc2NyaXB0aW9uOworICAgICAgICBTdHJpbmcgbV9wYXRoOworICAgICAgICBT
dHJpbmcgbV9maWxlTmFtZTsKKyAgICAgICAgU3RyaW5nIG1fbmFtZTsKKyAgICAgICAgU3RyaW5n
IG1fcGFyZW50RGlyZWN0b3J5OworCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBtX21p
bWVUb0Rlc2NyaXB0aW9uczsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21pbWVUb0V4
dGVuc2lvbnM7CisKKyAgICAgICAgSE1PRFVMRSBtX21vZHVsZTsKKyAgICAgICAgRklMRVRJTUUg
bV9sYXN0TW9kaWZpZWQ7CisKKyAgICAgICAgTlBQX1NodXRkb3duUHJvY1B0ciBtX05QUF9TaHV0
ZG93bjsKKyAgICAgICAgTlBQbHVnaW5GdW5jcyBtX3BsdWdpbkZ1bmNzOworICAgICAgICBOUE5l
dHNjYXBlRnVuY3MgbV9icm93c2VyRnVuY3M7CisKKyAgICAgICAgdm9pZCBmcmVlTGlicmFyeVNv
b24oKTsKKyAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luUGFj
a2FnZVdpbj4qKTsKKyAgICAgICAgVGltZXI8UGx1Z2luUGFja2FnZVdpbj4gbV9mcmVlTGlicmFy
eVRpbWVyOworICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZVdpbkhhc2ggeworICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVy
cHJldF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+JiBrZXkpIHsg
cmV0dXJuIGtleS0+aGFzaCgpOyB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
aW50IGEsIGNvbnN0IGludCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdp
blBhY2thZ2VXaW4qPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlV2luKj4oYikp
OyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdl
V2luPiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+JiBiKSB7IHJldHVybiBQbHVn
aW5QYWNrYWdlV2luOjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9CisgICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAg
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmth
cm91bmQgZm9yIGEgYnVnIGluIFdURiwgd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1
c3RvbSBIYXNoIGZ1bmN0aW9uIGJ1dCB3aXRoIGRlZmF1bHQgdHJhaXRzLgorLy8gSXQgc2hvdWxk
IGJlIHBvc3NpYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6
YXRpb24uCituYW1lc3BhY2UgV1RGIHsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3Rv
cmFnZVRyYWl0czxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luSGFzaCwgSGFzaFRyYWl0czxSZWZQ
dHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbj4gPiA+IHsKKyAgICAgICAgdHlwZWRlZiBJbnRU
eXBlczxzaXplb2YoUmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW4+KT46OlNpZ25lZFR5
cGUgSW50VHlwZTsKKyAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luSGFz
aCBIYXNoOworICAgICAgICB0eXBlZGVmIEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOworICAg
IH07Cit9CisKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHJldmlzaW9u
IDI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjMsMTIgKzIzLDExIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFBs
dWdpblBhY2thZ2VXaW5fSAotI2RlZmluZSBQbHVnaW5QYWNrYWdlV2luX0gKLQotI2luY2x1ZGUg
PHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgorI2lmbmRlZiBQbHVnaW5QYWNrYWdl
X0gKKyNkZWZpbmUgUGx1Z2luUGFja2FnZV9ICiAKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisj
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFz
aC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC00MCwxMCArMzksMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlN
RVRvRGVzY3JpcHRpb25zTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKIAotICAgIGNsYXNzIFBsdWdpblBhY2thZ2VX
aW4gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlV2luPiB7CisgICAgY2xhc3MgUGx1
Z2luUGFja2FnZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2U+IHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIH5QbHVnaW5QYWNrYWdlV2luKCk7Ci0gICAgICAgIHN0YXRpYyBQbHVnaW5Q
YWNrYWdlV2luKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJ
TUUmIGxhc3RNb2RpZmllZCk7CisgICAgICAgIH5QbHVnaW5QYWNrYWdlKCk7CisgICAgICAgIHN0
YXRpYyBQbHVnaW5QYWNrYWdlKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgUGxhdGZvcm1GaWxlVGltZSYgbGFzdE1vZGlmaWVkKTsKICAgICAgICAgCiAgICAgICAgIFN0
cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgICAgIFN0cmluZyBkZXNj
cmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0KQEAgLTUzLDggKzUyLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNN
YXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRGVzY3JpcHRp
b25zOyB9CiAgICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1pbWVUb0V4dGVuc2lv
bnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KIAotICAgICAgICB1bnNp
Z25lZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3Q7Ci0gICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0IFBsdWdpblBhY2thZ2VXaW4m
IGIpOworICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5Q
YWNrYWdlJiBiKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgICAgIGJvb2wgbG9hZCgpOwogICAg
ICAgICB2b2lkIHVubG9hZCgpOwpAQCAtNjIsMTcgKzYxLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsg
cmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luUGFj
a2FnZVdpbihjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQp
OworICAgICAgICBQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgUGxhdGZv
cm1GaWxlVGltZSYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYm9vbCBpc1BsdWdpbkJsYWNrbGlz
dGVkKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7Ci0gICAgICAgIHZvaWQgc3Rv
cmVGaWxlVmVyc2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKTsKLSAgICAgICAgYm9vbCBpc1Bs
dWdpbkJsYWNrbGlzdGVkKCk7CiAKICAgICAgICAgYm9vbCBtX2lzTG9hZGVkOwogICAgICAgICBp
bnQgbV9sb2FkQ291bnQ7CiAKLSAgICAgICAgRFdPUkQgbV9maWxlVmVyc2lvbk1TOwotICAgICAg
ICBEV09SRCBtX2ZpbGVWZXJzaW9uTFM7Ci0KICAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247
CiAgICAgICAgIFN0cmluZyBtX3BhdGg7CiAgICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOwpAQCAt
ODIsMjQgKzc3LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgTUlNRVRvRGVzY3Jp
cHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOwogICAgICAgICBNSU1FVG9FeHRlbnNpb25z
TWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKIAotICAgICAgICBITU9EVUxFIG1fbW9kdWxlOwotICAg
ICAgICBGSUxFVElNRSBtX2xhc3RNb2RpZmllZDsKKyAgICAgICAgUGxhdGZvcm1Nb2R1bGUgbV9t
b2R1bGU7CisgICAgICAgIFBsYXRmb3JtRmlsZVRpbWUgbV9sYXN0TW9kaWZpZWQ7CiAKICAgICAg
ICAgTlBQX1NodXRkb3duUHJvY1B0ciBtX05QUF9TaHV0ZG93bjsKICAgICAgICAgTlBQbHVnaW5G
dW5jcyBtX3BsdWdpbkZ1bmNzOwogICAgICAgICBOUE5ldHNjYXBlRnVuY3MgbV9icm93c2VyRnVu
Y3M7CiAKICAgICAgICAgdm9pZCBmcmVlTGlicmFyeVNvb24oKTsKLSAgICAgICAgdm9pZCBmcmVl
TGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luUGFja2FnZVdpbj4qKTsKLSAgICAgICAgVGlt
ZXI8UGx1Z2luUGFja2FnZVdpbj4gbV9mcmVlTGlicmFyeVRpbWVyOworICAgICAgICB2b2lkIGZy
ZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdlPiopOworICAgICAgICBUaW1l
cjxQbHVnaW5QYWNrYWdlPiBtX2ZyZWVMaWJyYXJ5VGltZXI7CiAgICAgfTsKIAotICAgIHN0cnVj
dCBQbHVnaW5QYWNrYWdlV2luSGFzaCB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IGludCBrZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+
KGtleSktPmhhc2goKTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQ
dHI8UGx1Z2luUGFja2FnZVdpbj4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7IH0KKyAgICBz
dHJ1Y3QgUGx1Z2luUGFja2FnZUhhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2UqPihr
ZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRy
PFBsdWdpblBhY2thZ2U+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CiAKLSAgICAgICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGludCBiKSB7IHJldHVybiBlcXVh
bChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihhKSwgcmVpbnRlcnByZXRfY2Fz
dDxQbHVnaW5QYWNrYWdlV2luKj4oYikpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2th
Z2VXaW4+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlV2luOjplcXVhbCgqYS5nZXQoKSwgKmIu
Z2V0KCkpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBp
bnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYSks
IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGIpKTsgfQorICAgICAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGEsIGNvbnN0IFJlZlB0cjxQ
bHVnaW5QYWNrYWdlPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZTo6ZXF1YWwoKmEuZ2V0KCks
ICpiLmdldCgpKTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IGZhbHNlOwogICAgIH07CiAKQEAgLTEwOCw5ICsxMDMsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVn
IGluIFdURiwgd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1c3RvbSBIYXNoIGZ1bmN0
aW9uIGJ1dCB3aXRoIGRlZmF1bHQgdHJhaXRzLgogLy8gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRv
IGRvIHRoaXMgd2l0aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6YXRpb24uCiBuYW1lc3Bh
Y2UgV1RGIHsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFnZVRyYWl0czxXZWJD
b3JlOjpQbHVnaW5QYWNrYWdlV2luSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8V2ViQ29yZTo6UGx1
Z2luUGFja2FnZVdpbj4gPiA+IHsKLSAgICAgICAgdHlwZWRlZiBJbnRUeXBlczxzaXplb2YoUmVm
UHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW4+KT46OlNpZ25lZFR5cGUgSW50VHlwZTsKLSAg
ICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luSGFzaCBIYXNoOworICAgIHRl
bXBsYXRlPD4gc3RydWN0IEhhc2hLZXlTdG9yYWdlVHJhaXRzPFdlYkNvcmU6OlBsdWdpblBhY2th
Z2VIYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlPiA+ID4gewor
ICAgICAgICB0eXBlZGVmIEludFR5cGVzPHNpemVvZihSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFj
a2FnZT4pPjo6U2lnbmVkVHlwZSBJbnRUeXBlOworICAgICAgICB0eXBlZGVmIFdlYkNvcmU6OlBs
dWdpblBhY2thZ2VIYXNoIEhhc2g7CiAgICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0czxJbnRUeXBl
PiBUcmFpdHM7CiAgICAgfTsKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z0luSW5m
b1N0b3JlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdJbklu
Zm9TdG9yZVdpbi5jcHAJKHJldmlzaW9uIDI5NzQxKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9Q
bHVnSW5JbmZvU3RvcmVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdJbkluZm9T
dG9yZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlV2luLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
UGFja2FnZVdpbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBsdWdpbkluZm8qIFBsdWdJ
bkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQgaSkg
Ci17IAotICAgIFBsdWdpbkRhdGFiYXNlV2luICpkYiA9IFBsdWdpbkRhdGFiYXNlV2luOjppbnN0
YWxsZWRQbHVnaW5zKCk7Ci0gICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5JbmZvOwot
ICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBkYi0+cGx1Z2lucygpW2ldOwotCi0gICAg
aW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKLSAgICBpbmZvLT5maWxlID0gcGFja2FnZS0+
ZmlsZU5hbWUoKTsKLSAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsKLQot
ICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFj
a2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7Ci0gICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRp
b25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBNaW1lQ2xhc3NJbmZvKiBt
aW1lID0gbmV3IE1pbWVDbGFzc0luZm87Ci0gICAgICAgIGluZm8tPm1pbWVzLmFwcGVuZChtaW1l
KTsKLSAgICAgICAgCi0gICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIG1p
bWUtPmRlc2MgPSBpdC0+c2Vjb25kOwotICAgICAgICBtaW1lLT5wbHVnaW4gPSBpbmZvOwotCi0g
ICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNp
b25zKCkuZ2V0KG1pbWUtPnR5cGUpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpID4g
MCkKLSAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSAiLCI7Ci0KLSAgICAgICAgICAg
IG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gaW5mbzsKLX0KLQotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3Vu
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVn
aW5zKCktPnBsdWdpbnMoKS5zaXplKCk7Ci19Ci0KLQotU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6
cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgLy8g
RklYTUUgNTYyOTEzOTogSW1wbGVtZW50IHRoaXMgbWV0aG9kIG9uIFdpbmRvd3MuCi0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotCi0gICAgCi1ib29sIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNN
SU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBlKSAKLXsKLSAgICByZXR1cm4g
UGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVy
ZWQobWltZVR5cGUpOwotfQotCi12b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkT3BlblBh
Z2VzKQotewotICAgIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJl
c2goKTsKLQotICAgIGlmIChyZWxvYWRPcGVuUGFnZXMpIHsKLSAgICAgICAgLy8gRklYTUU6IHJl
bG9hZCBvcGVuIHBhZ2VzCi0gICAgfQotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpbkRhdGFiYXNlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpbkRhdGFiYXNlV2luLmNwcAkocmV2aXNpb24gMjk3NDEpCisrKyBXZWJDb3JlL3BsdWdp
bnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOSArMjQs
OSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFz
ZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAKLSNpbmNsdWRlICJQbHVnaW5Q
YWNrYWdlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgIlBsdWdp
blZpZXdXaW4uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAg
LTM0LDkxICszNCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGx1Z2luRGF0YWJhc2VX
aW4qIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCkKLXsKLSAgICBzdGF0aWMg
UGx1Z2luRGF0YWJhc2VXaW4qIHBsdWdpbnMgPSAwOwotICAgIAotICAgIGlmICghcGx1Z2lucykg
ewotICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlV2luOwotICAgICAgICBwbHVn
aW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRhYmFzZVdpbjo6ZGVmYXVsdFBsdWdpblBhdGhz
KCkpOwotICAgICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBs
dWdpbnM7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2VXaW46OmFkZEV4dHJhUGx1Z2luUGF0aChj
b25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgbV9wbHVnaW5QYXRocy5hcHBlbmQocGF0aCk7Ci0g
ICAgcmVmcmVzaCgpOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlV2luOjpyZWZyZXNoKCkKLXsg
ICAKLSAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsKLQotICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdl
ZCA9IGZhbHNlOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IHNldCBvZiBwbHVnaW5zCi0gICAgbmV3
UGx1Z2lucyA9IGdldFBsdWdpbnNJblBhdGhzKCk7Ci0KLSAgICBpZiAoIW1fcGx1Z2lucy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7Ci0KLSAgICAg
ICAgUGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZCA9IG1fcGx1Z2luczsKLQotICAgICAgICBQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7Ci0gICAgICAgIGZv
ciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgcGx1Z2luc1RvVW5sb2FkLnJlbW92ZSgqaXQpOwot
Ci0gICAgICAgIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgICAgIG5ld1BsdWdpbnMucmVtb3ZlKCppdCk7Ci0KLSAgICAgICAgLy8gVW5sb2Fk
IHBsdWdpbnMKLSAgICAgICAgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVuZCgpOwotICAgICAgICBm
b3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5zVG9VbmxvYWQuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgbV9wbHVnaW5zLnJlbW92ZSgqaXQpOwot
Ci0gICAgICAgIC8vIEFkZCBuZXcgcGx1Z2lucwotICAgICAgICBlbmQgPSBuZXdQbHVnaW5zLmVu
ZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVn
aW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQo
Kml0KTsKLQotICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0Vt
cHR5KCkgfHwgIW5ld1BsdWdpbnMuaXNFbXB0eSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1f
cGx1Z2lucyA9IG5ld1BsdWdpbnM7Ci0gICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBtX3BsdWdpbnMuYWRkKCppdCk7Ci0KLSAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFu
ZXdQbHVnaW5zLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICAvLyBSZWdpc3RlciBwbHVnLWluIE1J
TUUgdHlwZXMKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5l
bmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIEdldCBNSU1FIHR5cGVzCi0g
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgq
aXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKLSAgICAgICAgZm9yIChNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlw
dGlvbnMoKS5iZWdpbigpOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpIHsKLSAgICAgICAg
ICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5maXJzdCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdlZDsKLX0KLQotVmVjdG9yPFBsdWdp
blBhY2thZ2VXaW4qPiBQbHVnaW5EYXRhYmFzZVdpbjo6cGx1Z2lucygpIGNvbnN0Ci17Ci0gICAg
VmVjdG9yPFBsdWdpblBhY2thZ2VXaW4qPiByZXN1bHQ7Ci0KLSAgICBQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVkgcm9vdEtl
eSwgUGx1Z2luU2V0JiBwbHVnaW5zKQogewogICAgIEhLRVkga2V5OwpAQCAtMTUwLDcgKzY1LDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVnaXN0cgogICAgICAgICBpZiAo
R2V0RmlsZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRy
aWJ1dGVzKSA9PSAwKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgUGx1Z2luUGFj
a2FnZVdpbiogcGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBhY2thZ2UoU3RyaW5n
KHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBhdHRyaWJ1dGVzLmZ0
TGFzdFdyaXRlVGltZSk7CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2UgPSBQbHVnaW5Q
YWNrYWdlOjpjcmVhdGVQYWNrYWdlKFN0cmluZyhwYXRoU3RyLCBwYXRoU3RyU2l6ZSAvIHNpemVv
ZihXQ0hBUikgLSAxKSwgYXR0cmlidXRlcy5mdExhc3RXcml0ZVRpbWUpOwogCiAgICAgICAgIGlm
IChwYWNrYWdlKQogICAgICAgICAgICAgcGx1Z2lucy5hZGQocGFja2FnZSk7CkBAIC0xNTksNyAr
NzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkUGx1Z2luc0Zyb21SZWdpc3RyCiAgICAgUmVn
Q2xvc2VLZXkoa2V5KTsKIH0KIAotUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlV2luOjpnZXRQbHVn
aW5zSW5QYXRocygpIGNvbnN0CitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJ
blBhdGhzKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGlu
c2Vuc2l0aXZlIHNldC4KICAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOwpAQCAt
MTY4LDggKzgzLDggQEAgUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlV2luOjpnZXRQbHVnaW5zSQog
ICAgIEhBTkRMRSBoRmluZCA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogICAgIFdJTjMyX0ZJTkRf
REFUQVcgZmluZEZpbGVEYXRhOwogCi0gICAgUGx1Z2luUGFja2FnZVdpbiogb2xkV01QUGx1Z2lu
ID0gMDsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBuZXdXTVBQbHVnaW4gPSAwOworICAgIFBsdWdp
blBhY2thZ2UqIG9sZFdNUFBsdWdpbiA9IDA7CisgICAgUGx1Z2luUGFja2FnZSogbmV3V01QUGx1
Z2luID0gMDsKIAogICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Bs
dWdpblBhdGhzLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9wbHVnaW5QYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTE5Myw3
ICsxMDgsNyBAQCBQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VXaW46OmdldFBsdWdpbnNJCiAgICAg
ICAgICAgICBpZiAoIXVuaXF1ZUZpbGVuYW1lcy5hZGQoZnVsbFBhdGgpLnNlY29uZCkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgICAgICBQbHVnaW5QYWNrYWdl
V2luKiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2FnZVdpbjo6Y3JlYXRlUGFja2FnZShmdWxs
UGF0aCwgZmluZEZpbGVEYXRhLmZ0TGFzdFdyaXRlVGltZSk7CisgICAgICAgICAgICBQbHVnaW5Q
YWNrYWdlKiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZShmdWxs
UGF0aCwgZmluZEZpbGVEYXRhLmZ0TGFzdFdyaXRlVGltZSk7CiAKICAgICAgICAgICAgIGlmIChw
bHVnaW5QYWNrYWdlKSB7CiAgICAgICAgICAgICAgICAgcGx1Z2lucy5hZGQocGx1Z2luUGFja2Fn
ZSk7CkBAIC00MTksNyArMzM0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZE1hY3JvbWVkaWFQ
bHVnaW5QYQogICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKIH0KIAot
VmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQbHVnaW5QYXRocygpCitW
ZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpblBhdGhzKCkKIHsKICAg
ICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKICAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdp
bnNQYXRoKCk7CkBAIC00MzUsMTA2ICszNTAsMTQgQEAgVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0
YWJhc2VXaW46OmRlZmF1bAogICAgIHJldHVybiBwYXRoczsKIH0KIAotYm9vbCBQbHVnaW5EYXRh
YmFzZVdpbjo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsK
LSAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhl
IGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICByZXR1cm4gKHJlZnJlc2goKSAmJiBt
X3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKTsKLX0KLQotUGx1Z2luUGFj
a2FnZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCitib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgo
Y29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewotICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7
CiAgICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwotICAgIFBsdWdpblBh
Y2thZ2VXaW4qIHBsdWdpbiA9IDA7Ci0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3BsdWdpbnMuZW5kKCk7Ci0KLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgo
Kml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkgewotICAgICAgICAgICAg
cGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBpbiBv
dXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5Ci0gICAgICAgICAgICBpZiAocGx1Z2luLT5wYXJlbnRE
aXJlY3RvcnkoKSA9PSBvdXJQYXRoKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpbjsKLX0KIAotU3RyaW5nIFBsdWdpbkRhdGFiYXNl
V2luOjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QK
LXsKLSAgICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7
Ci0gICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwotICAgIFN0cmluZyBt
aW1lVHlwZTsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSAwOwotCi0gICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBt
aW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7Ci0KLSAgICAgICAgZm9y
IChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0gKCppdCktPm1p
bWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyArK21pbWVfaXQp
IHsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9p
dC0+c2Vjb25kOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lv
bnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
ZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkgewotICAgICAgICAgICAgICAgICAgICBtaW1lVHlw
ZSA9IG1pbWVfaXQtPmZpcnN0OwotICAgICAgICAgICAgICAgICAgICBwbHVnaW4gPSAoKml0KS5n
ZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBw
bHVnaW5zIGRpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLT5wYXJlbnRE
aXJlY3RvcnkoKSA9PSBvdXJQYXRoKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIGlm
ICghb3VyUGF0aC5pc051bGwoKSAmJiAhcGF0aC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG91
clBhdGggPT0gcGF0aDsKIAotICAgIHJldHVybiBtaW1lVHlwZTsKLX0KLQotUGx1Z2luUGFja2Fn
ZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJp
bmcmIG1pbWVUeXBlKQoteyAgIAotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IHBsdWdp
bkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwuc3RyaW5n
KCk7Ci0gICAgCi0gICAgaWYgKCFwbHVnaW4pIHsKLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0g
dXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7Ci0gICAgICAgIGlmICghZmlsZW5hbWUuZW5kc1dpdGgo
Ii8iKSkgewotICAgICAgICAgICAgaW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1lLnJldmVyc2VG
aW5kKCcuJyk7Ci0gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uUG9zICE9IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhleHRlbnNpb25Q
b3MgKyAxKTsKLQotICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVGb3JFeHRlbnNp
b24oZXh0ZW5zaW9uKTsKLSAgICAgICAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlw
ZShtaW1lVHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBG
SVhNRTogaWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSBXaW5kb3dzIGZvciB0aGUg
bWltZSB0eXBlIAotICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbi4KLQotICAg
IHJldHVybiBwbHVnaW47Ci19Ci0KLVBsdWdpblZpZXdXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpj
cmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
RWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKLXsKLSAgICAvLyBpZiB3ZSBmYWlsIHRv
IGZpbmQgYSBwbHVnaW4gZm9yIHRoaXMgTUlNRSB0eXBlLCBmaW5kUGx1Z2luIHdpbGwgc2VhcmNo
IGZvcgotICAgIC8vIGEgcGx1Z2luIGJ5IHRoZSBmaWxlIGV4dGVuc2lvbiBhbmQgdXBkYXRlIHRo
ZSBNSU1FIHR5cGUsIHNvIHBhc3MgYSBtdXRhYmxlIFN0cmluZwotICAgIFN0cmluZyBtaW1lVHlw
ZUNvcHkgPSBtaW1lVHlwZTsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSBmaW5kUGx1
Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKLSAgICAKLSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5k
LCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIGlm
ICghcGx1Z2luICYmIHJlZnJlc2goKSkgewotICAgICAgICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlw
ZTsKLSAgICAgICAgcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7Ci0gICAg
fQotICAgICAgICAKLSAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdXaW4ocGFyZW50RnJhbWUsIHNp
emUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5
cGVDb3B5LCBsb2FkTWFudWFsbHkpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogfQpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uaAkocmV2aXNpb24gMjk3NDEpCisr
KyBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBsdWdpbkRhdGFiYXNl
V2luX0gKLSNkZWZpbmUgUGx1Z2luRGF0YWJhc2VXaW5fSAotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKLSNpbmNsdWRlICJTdHJpbmdIYXNo
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBFbGVtZW50OwotICAgIGNsYXNz
IEZyYW1lOwotICAgIGNsYXNzIEludFNpemU7Ci0gICAgY2xhc3MgS1VSTDsKLSAgICBjbGFzcyBQ
bHVnaW5QYWNrYWdlV2luOwotICAgIGNsYXNzIFBsdWdpblZpZXdXaW47Ci0KLSAgICB0eXBlZGVm
IEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+LCBQbHVnaW5QYWNrYWdlV2luSGFzaD4g
UGx1Z2luU2V0OwotICAKLSAgICBjbGFzcyBQbHVnaW5EYXRhYmFzZVdpbiB7Ci0gICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VXaW4qIGluc3RhbGxlZFBsdWdpbnMoKTsK
LSAgICAgICAgUGx1Z2luVmlld1dpbiogY3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJh
bWUsIGNvbnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKLQot
ICAgICAgICBib29sIHJlZnJlc2goKTsKLSAgICAgICAgVmVjdG9yPFBsdWdpblBhY2thZ2VXaW4q
PiBwbHVnaW5zKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIHZvaWQgYWRkRXh0cmFQbHVnaW5QYXRoKGNv
bnN0IFN0cmluZyYpOwotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgc2V0UGx1Z2luUGF0aHMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1fcGx1Z2luUGF0aHMgPSBwYXRoczsgfQot
ICAgICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdDsKLQotICAgICAgICBQ
bHVnaW5QYWNrYWdlV2luKiBmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1l
VHlwZSk7Ci0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRlbnNpb24o
Y29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0OwotCi0gICAgICAgIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsKLQotICAgICAgICBWZWN0b3I8U3RyaW5nPiBt
X3BsdWdpblBhdGhzOwotICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5
cGVzOwotICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOwotICAgIH07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBh
Y2thZ2VXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFj
a2FnZVdpbi5jcHAJKHJldmlzaW9uIDI5NzQxKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVn
aW5QYWNrYWdlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1
ZGUgPHNobHdhcGkuaD4KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblBh
Y2thZ2VXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAKICNpbmNsdWRlICJUaW1l
ci5oIgogI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKQEAgLTM1LDExICszNSw2IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGx1Z2luUGFja2FnZVdpbjo6flBsdWdpblBhY2thZ2VX
aW4oKQotewotICAgIEFTU0VSVCghbV9pc0xvYWRlZCk7Ci19Ci0KIHN0YXRpYyBTdHJpbmcgZ2V0
VmVyc2lvbkluZm8oY29uc3QgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSwgY29uc3QgU3RyaW5nJiBp
bmZvKQogewogICAgIExQVk9JRCBidWZmZXI7CkBAIC04Myw1OSArNzgsMjIgQEAgc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IHNwbGl0U3RyaW5nKGNvbnN0IAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlTb29uKCkKLXsKLSAgICBBU1NFUlQo
IW1fZnJlZUxpYnJhcnlUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBBU1NFUlQobV9tb2R1bGUpOwot
ICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsKLQotICAgIG1fZnJlZUxpYnJhcnlUaW1lci5z
dGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlU
aW1lckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+KiAvKnRpbWVyKi8pCi17Ci0gICAgQVNT
RVJUKG1fbW9kdWxlKTsKLSAgICBBU1NFUlQobV9sb2FkQ291bnQgPT0gMCk7Ci0KLSAgICA6OkZy
ZWVMaWJyYXJ5KG1fbW9kdWxlKTsKLSAgICBtX21vZHVsZSA9IDA7Ci19Ci0KLVBsdWdpblBhY2th
Z2VXaW46OlBsdWdpblBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElN
RSYgbGFzdE1vZGlmaWVkKQotICAgIDogbV9wYXRoKHBhdGgpCi0gICAgLCBtX21vZHVsZSgwKQot
ICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQotICAgICwgbV9pc0xvYWRlZChmYWxz
ZSkKLSAgICAsIG1fbG9hZENvdW50KDApCi0gICAgLCBtX2ZyZWVMaWJyYXJ5VGltZXIodGhpcywg
JlBsdWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5VGltZXJGaXJlZCkKLSAgICAsIG1fZmlsZVZl
cnNpb25MUygwKQotICAgICwgbV9maWxlVmVyc2lvbk1TKDApCitib29sIFBsdWdpblBhY2thZ2U6
OmlzUGx1Z2luQmxhY2tsaXN0ZWQoKSBjb25zdAogewotICAgIG1fZmlsZU5hbWUgPSBTdHJpbmco
UGF0aEZpbmRGaWxlTmFtZShtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSkp
OwotICAgIG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxlbmd0aCgpIC0g
bV9maWxlTmFtZS5sZW5ndGgoKSAtIDEpOwotfQorICAgIHN0YXRpYyBjb25zdCBEV09SRCBzaWx2
ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgPSAweDAwMDEwMDAwOworICAg
IHN0YXRpYyBjb25zdCBEV09SRCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxT
RFdPUkQgPSAweDUxQkUwMDAwOwogCi12b2lkIFBsdWdpblBhY2thZ2VXaW46OnN0b3JlRmlsZVZl
cnNpb24oTFBWT0lEIHZlcnNpb25JbmZvRGF0YSkKLXsKICAgICBWU19GSVhFREZJTEVJTkZPKiBp
bmZvOwogICAgIFVJTlQgaW5mb1NpemU7CiAgICAgaWYgKCFWZXJRdWVyeVZhbHVlKHZlcnNpb25J
bmZvRGF0YSwgVEVYVCgiXFwiKSwgKExQVk9JRCopICZpbmZvLCAmaW5mb1NpemUpIHx8IGluZm9T
aXplIDwgc2l6ZW9mKFZTX0ZJWEVERklMRUlORk8pKQotICAgICAgICByZXR1cm47Ci0gICAgbV9m
aWxlVmVyc2lvbkxTID0gaW5mby0+ZHdGaWxlVmVyc2lvbkxTOwotICAgIG1fZmlsZVZlcnNpb25N
UyA9IGluZm8tPmR3RmlsZVZlcnNpb25NUzsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpp
c1BsdWdpbkJsYWNrbGlzdGVkKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgRFdPUkQgc2lsdmVybGln
aHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEID0gMHgwMDAxMDAwMDsKLSAgICBzdGF0
aWMgY29uc3QgRFdPUkQgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25MU0RXT1JE
ID0gMHg1MUJFMDAwMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAobmFtZSgpID09
ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgewogICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRh
cjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZlcmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQu
Y29tLgogICAgICAgICAvLyB0aGUgbGF0ZXN0IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRv
ZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNoLCBzbyBhbGxvdyBpdAogICAgICAgICAvLyBhbmQg
YW55IG5ld2VyIHZlcnNpb25zCi0gICAgICAgIGlmIChtX2ZpbGVWZXJzaW9uTVMgPCBzaWx2ZXJs
aWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgfHwKLSAgICAgICAgICAgIChtX2Zp
bGVWZXJzaW9uTVMgPT0gc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JE
ICYmIG1fZmlsZVZlcnNpb25MUyA8IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9u
TFNEV09SRCkpCisgICAgICAgIGlmIChpbmZvLT5kd0ZpbGVWZXJzaW9uTVMgPCBzaWx2ZXJsaWdo
dFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgfHwKKyAgICAgICAgICAgIChpbmZvLT5k
d0ZpbGVWZXJzaW9uTVMgPT0gc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RX
T1JEICYmIGluZm8tPmR3RmlsZVZlcnNpb25MUyA8IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWly
ZWRWZXJzaW9uTFNEV09SRCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2Ug
aWYgKGZpbGVOYW1lKCkgPT0gIm5wbW96YXguZGxsIikKICAgICAgICAgLy8gQnVnIDE1MjE3OiBN
b3ppbGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyB4cGNvbV9jb3Jl
LmRsbApAQCAtMTQ0LDcgKzEwMiw3IEBAIGJvb2wgUGx1Z2luUGFja2FnZVdpbjo6aXNQbHVnaW5C
bGFja2xpc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6
ZmV0Y2hJbmZvKCkKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKIHsKICAgICBEV09S
RCB2ZXJzaW9uSW5mb1NpemUsIHplcm9IYW5kbGU7CiAgICAgdmVyc2lvbkluZm9TaXplID0gR2V0
RmlsZVZlcnNpb25JbmZvU2l6ZVcobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCksICZ6ZXJvSGFuZGxlKTsgCkBAIC0xNjcsOCArMTI1LDYgQEAgYm9vbCBQbHVnaW5QYWNrYWdl
V2luOjpmZXRjaEluZm8oKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgc3Rv
cmVGaWxlVmVyc2lvbih2ZXJzaW9uSW5mb0RhdGEpOwotCiAgICAgaWYgKGlzUGx1Z2luQmxhY2ts
aXN0ZWQoKSkgewogICAgICAgICBmYXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0yMDEsNyArMTU3LDcgQEAgYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpm
ZXRjaEluZm8oKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFBsdWdpblBhY2thZ2VXaW46
OmxvYWQoKQorYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKIHsKICAgICBpZiAobV9mcmVlTGli
cmFyeVRpbWVyLmlzQWN0aXZlKCkpIHsKICAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsKQEAgLTMx
NSw1MSArMjcxLDcgQEAgYWJvcnQ6CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFBsdWdp
blBhY2thZ2VXaW46OnVubG9hZCgpCi17Ci0gICAgaWYgKCFtX2lzTG9hZGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoLS1tX2xvYWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fTlBQX1NodXRkb3duKCk7Ci0KLSAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKLX0K
LQotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxvYWRXaXRob3V0U2h1dGRvd24oKQotewotICAg
IGlmICghbV9pc0xvYWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZENv
dW50ID09IDApOwotICAgIEFTU0VSVChtX21vZHVsZSk7Ci0KLSAgICAvLyA8cmRhcjovLzU1MzA1
MTk+OiBDcmFzaCB3aGVuIGNsb3NpbmcgdGFiIHdpdGggcGRmIGZpbGUgKFJlYWRlciA3IG9ubHkp
Ci0gICAgLy8gSWYgdGhlIHBsdWdpbiBoYXMgc3ViY2xhc3NlZCBpdHMgcGFyZW50IHdpbmRvdywg
YXMgd2l0aCBSZWFkZXIgNywgd2UgbWF5IGhhdmUKLSAgICAvLyBnb3R0ZW4gaGVyZSBieSB3YXkg
b2YgdGhlIHBsdWdpbidzIGludGVybmFsIHdpbmRvdyBwcm9jIGZvcndhcmRpbmcgYSBtZXNzYWdl
IHRvIG91cgotICAgIC8vIG9yaWdpbmFsIHdpbmRvdyBwcm9jLiBJZiB3ZSBmcmVlIHRoZSBwbHVn
aW4gbGlicmFyeSBmcm9tIGhlcmUsIHdlIHdpbGwganVtcCBiYWNrCi0gICAgLy8gdG8gY29kZSB3
ZSBqdXN0IGZyZWVkIHdoZW4gd2UgcmV0dXJuLCBzbyBkZWxheSBjYWxsaW5nIEZyZWVMaWJyYXJ5
IGF0IGxlYXN0IHVudGlsCi0gICAgLy8gdGhlIG5leHQgbWVzc2FnZSBsb29wCi0gICAgZnJlZUxp
YnJhcnlTb29uKCk7Ci0KLSAgICBtX2lzTG9hZGVkID0gZmFsc2U7Ci19Ci0KLVBsdWdpblBhY2th
Z2VXaW4qIFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKQotewotICAgIFBsdWdpblBhY2thZ2VXaW4q
IHBhY2thZ2UgPSBuZXcgUGx1Z2luUGFja2FnZVdpbihwYXRoLCBsYXN0TW9kaWZpZWQpOwotCi0g
ICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkgewotICAgICAgICBkZWxldGUgcGFja2FnZTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwYWNrYWdlOwotfQot
Ci11bnNpZ25lZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3QKK3Vuc2lnbmVkIFBsdWdp
blBhY2thZ2U6Omhhc2goKSBjb25zdAogeyAKICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbM10gPSB7
CiAgICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCkBAIC0zNzAsNyArMjgyLDcg
QEAgdW5zaWduZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMp
LCAzICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOwogfQogCi1ib29sIFBsdWdp
blBhY2thZ2VXaW46OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0IFBsdWdp
blBhY2thZ2VXaW4mIGIpCitib29sIFBsdWdpblBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBh
Y2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2UmIGIpCiB7CiAgICAgcmV0dXJuIGEubV9kZXNj
cmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb24gJiYgKENvbXBhcmVGaWxlVGltZSgmYS5tX2xhc3RN
b2RpZmllZCwgJmIubV9sYXN0TW9kaWZpZWQpID09IDApOwogfQpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5QYWNrYWdlV2luLmgJKHJldmlzaW9uIDI5NzQxKQorKysgV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5QYWNrYWdlV2luX0gKLSNkZWZpbmUg
UGx1Z2luUGFja2FnZVdpbl9ICi0KLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdp
bmRvd3MuaD4KLQotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKLSNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1J
TUVUb0Rlc2NyaXB0aW9uc01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8
U3RyaW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7Ci0KLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdl
V2luIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZVdpbj4gewotICAgIHB1YmxpYzoK
LSAgICAgICAgflBsdWdpblBhY2thZ2VXaW4oKTsKLSAgICAgICAgc3RhdGljIFBsdWdpblBhY2th
Z2VXaW4qIGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYg
bGFzdE1vZGlmaWVkKTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9Ci0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZGVzY3JpcHRpb247IH0KLSAgICAgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWxlTmFtZTsgfQotICAgICAgICBTdHJpbmcgcGFyZW50RGlyZWN0b3J5KCkgY29u
c3QgeyByZXR1cm4gbV9wYXJlbnREaXJlY3Rvcnk7IH0KLQotICAgICAgICBjb25zdCBNSU1FVG9E
ZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWlt
ZVRvRGVzY3JpcHRpb25zOyB9Ci0gICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1p
bWVUb0V4dGVuc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KLQot
ICAgICAgICB1bnNpZ25lZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3Q7Ci0gICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0IFBsdWdp
blBhY2thZ2VXaW4mIGIpOwotCi0gICAgICAgIGJvb2wgbG9hZCgpOwotICAgICAgICB2b2lkIHVu
bG9hZCgpOwotICAgICAgICB2b2lkIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotCi0gICAgICAg
IGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzKCkgY29uc3QgeyByZXR1cm4gJm1fcGx1
Z2luRnVuY3M7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBQbHVnaW5QYWNrYWdlV2luKGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7Ci0gICAgICAgIGJv
b2wgZmV0Y2hJbmZvKCk7Ci0gICAgICAgIHZvaWQgc3RvcmVGaWxlVmVyc2lvbihMUFZPSUQgdmVy
c2lvbkluZm9EYXRhKTsKLSAgICAgICAgYm9vbCBpc1BsdWdpbkJsYWNrbGlzdGVkKCk7Ci0KLSAg
ICAgICAgYm9vbCBtX2lzTG9hZGVkOwotICAgICAgICBpbnQgbV9sb2FkQ291bnQ7Ci0KLSAgICAg
ICAgRFdPUkQgbV9maWxlVmVyc2lvbk1TOwotICAgICAgICBEV09SRCBtX2ZpbGVWZXJzaW9uTFM7
Ci0KLSAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247Ci0gICAgICAgIFN0cmluZyBtX3BhdGg7
Ci0gICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOwotICAgICAgICBTdHJpbmcgbV9uYW1lOwotICAg
ICAgICBTdHJpbmcgbV9wYXJlbnREaXJlY3Rvcnk7Ci0KLSAgICAgICAgTUlNRVRvRGVzY3JpcHRp
b25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOwotICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFw
IG1fbWltZVRvRXh0ZW5zaW9uczsKLQotICAgICAgICBITU9EVUxFIG1fbW9kdWxlOwotICAgICAg
ICBGSUxFVElNRSBtX2xhc3RNb2RpZmllZDsKLQotICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRy
IG1fTlBQX1NodXRkb3duOwotICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7Ci0g
ICAgICAgIE5QTmV0c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKLQotICAgICAgICB2b2lkIGZy
ZWVMaWJyYXJ5U29vbigpOwotICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1l
cjxQbHVnaW5QYWNrYWdlV2luPiopOwotICAgICAgICBUaW1lcjxQbHVnaW5QYWNrYWdlV2luPiBt
X2ZyZWVMaWJyYXJ5VGltZXI7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQbHVnaW5QYWNrYWdlV2lu
SGFzaCB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IGludCBrZXkpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGtleSktPmhhc2goKTsgfQot
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdp
bj4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7IH0KLQotICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBpbnQgYSwgY29uc3QgaW50IGIpIHsgcmV0dXJuIGVxdWFsKHJlaW50ZXJwcmV0
X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGEpLCByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2th
Z2VXaW4qPihiKSk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFBs
dWdpblBhY2thZ2VXaW4+JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4mIGIpIHsg
cmV0dXJuIFBsdWdpblBhY2thZ2VXaW46OmVxdWFsKCphLmdldCgpLCAqYi5nZXQoKSk7IH0KLSAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBm
YWxzZTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLS8vIEZJWE1FOiBUaGlz
IGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gV1RGLCB3aGVyZSBpdCdzIGltcG9zc2libGUg
dG8gdXNlIGEgY3VzdG9tIEhhc2ggZnVuY3Rpb24gYnV0IHdpdGggZGVmYXVsdCB0cmFpdHMuCi0v
LyBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZG8gdGhpcyB3aXRob3V0IGEgU3RvcmFnZVRyYWl0
cyBzcGVjaWFsaXphdGlvbi4KLW5hbWVzcGFjZSBXVEYgewotICAgIHRlbXBsYXRlPD4gc3RydWN0
IEhhc2hLZXlTdG9yYWdlVHJhaXRzPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW5IYXNoLCBIYXNo
VHJhaXRzPFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPiA+ID4gewotICAgICAgICB0
eXBlZGVmIEludFR5cGVzPHNpemVvZihSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbj4p
Pjo6U2lnbmVkVHlwZSBJbnRUeXBlOwotICAgICAgICB0eXBlZGVmIFdlYkNvcmU6OlBsdWdpblBh
Y2thZ2VXaW5IYXNoIEhhc2g7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0czxJbnRUeXBlPiBU
cmFpdHM7Ci0gICAgfTsKLX0KLQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVn
aW5WaWV3V2luLmNwcAkocmV2aXNpb24gMjk3NDEpCisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpblZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjY0LDQgKzE2NjQsMjAgQEAgYm9v
bCBQbHVnaW5WaWV3V2luOjppc0NhbGxpbmdQbHVnaW4oKQogICAgIHJldHVybiBzX2NhbGxpbmdQ
bHVnaW4gPiAwOwogfQogCitQbHVnaW5WaWV3V2luKiBQbHVnaW5WaWV3V2luOjpjcmVhdGVQbHVn
aW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1l
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBib29sIGxvYWRNYW51YWxseSkKK3sKKyAgICAvLyBpZiB3ZSBmYWlsIHRvIGZpbmQgYSBw
bHVnaW4gZm9yIHRoaXMgTUlNRSB0eXBlLCBmaW5kUGx1Z2luIHdpbGwgc2VhcmNoIGZvcgorICAg
IC8vIGEgcGx1Z2luIGJ5IHRoZSBmaWxlIGV4dGVuc2lvbiBhbmQgdXBkYXRlIHRoZSBNSU1FIHR5
cGUsIHNvIHBhc3MgYSBtdXRhYmxlIFN0cmluZworICAgIFN0cmluZyBtaW1lVHlwZUNvcHkgPSBt
aW1lVHlwZTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBQbHVnaW5EYXRhYmFzZTo6aW5z
dGFsbGVkUGx1Z2lucygpLT5maW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKKyAgICAKKyAg
ICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5k
IHNlYXJjaGluZyBhZ2FpbgorICAgIGlmICghcGx1Z2luICYmIHJlZnJlc2goKSkgeworICAgICAg
ICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICAgICAgcGx1Z2luID0gUGx1Z2luRGF0YWJh
c2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+ZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7Cisg
ICAgfQorICAgICAgICAKKyAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdXaW4ocGFyZW50RnJhbWUs
IHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWlt
ZVR5cGVDb3B5LCBsb2FkTWFudWFsbHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uaAkocmV2aXNpb24gMjk3NDEpCisrKyBX
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTks
NyArNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTW91c2VFdmVudDsKICAg
ICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW47Ci0gICAg
Y2xhc3MgUGx1Z2luUGFja2FnZVdpbjsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlOwogICAgIGNs
YXNzIFBsdWdpblJlcXVlc3RXaW47CiAgICAgY2xhc3MgUGx1Z2luU3RyZWFtOwogICAgIGNsYXNz
IFJlc291cmNlRXJyb3I7CkBAIC04NiwxMCArODYsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGZyaWVuZCBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05E
LCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpblZp
ZXdXaW4oRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZVdp
biogcGx1Z2luLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKyAgICAgICAgc3RhdGljIFBsdWdpblZp
ZXdXaW4qIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKworICAgICAgICBQbHVn
aW5WaWV3V2luKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2th
Z2UqIHBsdWdpbiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CiAgICAgICAgIHZpcnR1YWwgflBsdWdp
blZpZXdXaW4oKTsKIAotICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4oKSBjb25zdCB7
IHJldHVybiBtX3BsdWdpbi5nZXQoKTsgfQorICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4o
KSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5nZXQoKTsgfQogICAgICAgICBOUFAgaW5zdGFuY2Uo
KSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9CiAKICAgICAgICAgdm9pZCBzZXROUFdpbmRv
d1JlY3QoY29uc3QgSW50UmVjdCYpOwpAQCAtMTU2LDcgKzE1OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29s
IHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOwogICAgICAgICBOUEVycm9yIGhh
bmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4s
IGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmRO
b3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKTsKICAgICAgICAgdm9pZCBzZXRDYWxsaW5n
UGx1Z2luKGJvb2wpIGNvbnN0OwotICAgICAgICBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4gbV9w
bHVnaW47CisgICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBtX3BsdWdpbjsKICAgICAgICAg
RWxlbWVudCogbV9lbGVtZW50OwogICAgICAgICBGcmFtZSogbV9wYXJlbnRGcmFtZTsKICAgICAg
ICAgYm9vbCBtX2lzU3RhcnRlZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18738</attachid>
            <date>2008-01-28 11:27:16 -0800</date>
            <delta_ts>2008-02-04 13:06:30 -0800</delta_ts>
            <desc>Updated patch to resolve some of mark&apos;s issues</desc>
            <filename>webkit-more-shared-plugin-api.patch</filename>
            <type>text/plain</type>
            <size>127845</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTgzMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMDgtMDEtMjMgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBTaGFyZWQgY2xhc3NlcyBmb3IgUGx1Z2luRGF0YWJhc2UgYW5kIFBsdWdpblBhY2thZ2UK
KyAgICAgICAgU2hhcmVkIGltcGxlbWVudGF0aW9uIG9mIFBsdWdpbkluZm9TdG9yZSBBUEkKKyAg
ICAgICAgQWRkIGlzUHJlZmVycmVkUGx1Z2luUGF0aCgpIG1ldGhvZCBmb3IgYSBwcmVmZXJyZWQg
cGx1Zy1pbiBkaXJlY3RvcnkKKyAgICAgICAgQWRkIHRoZSBuZXcgc2hhcmVkIGNsYXNzIGltcGxl
bWVudGF0aW9ucyB0byBhdXRvdG9vbHMgYW5kIHFtYWtlIGJ1aWxkcworICAgICAgICBNb3ZlIHRo
ZSBjcmVhdGVQbHVnaW5WaWV3IEFQSSB0byBQbHVnaW5WaWV3V2luLCB0byBhdm9pZCBhCisgICAg
ICAgIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2l0aCBQbHVnaW5EYXRhYmFzZQorICAgICAgICBVc2Ug
c3RhdGljIGdsb2JhbHMgZm9yIHRoZSBtX2ZpbGVWZXJzaW9ue01TLExTfSB2YXJpYWJsZXMgb24g
V2luMzIKKyAgICAgICAgTWFrZSBzdG9yZUZpbGVWZXJzaW9uIGFuZCBpc1BsdWdpbkJsYWNrbGlz
dGVkIHN0YXRpYyBpbnRlcm5hbCBDIG1ldGhvZHMKKyAgICAgICAgRGVmaW5lIFBsYXRmb3JtRmls
ZVRpbWUgYW5kIFBsYXRmb3JtTW9kdWxlIHR5cGVzCisgICAgICAgIEltcGxlbWVudCBwYXRoR2V0
RmlsZU5hbWUgZm9yIFdpbjMyIGFuZCBHVEsrCisgICAgICAgIEltcGxlbWVudCB1bmxvYWRNb2R1
bGUgZm9yIFdpbjMyIGFuZCBHVEsrCisgICAgICAgIEFkZCBub3RJbXBsZW1lbnRlZCgpcyBmb3Ig
cGF0aEdldEZpbGVOYW1lIGFuZCB1bmxvYWRNb2R1bGUgb24gUXQKKyAgICAgICAgVXBkYXRlIHRo
ZSBXaW4zMiB2Y3Byb2ogZm9yIHRoZSBwbHVnLWluIEFQSSBjaGFuZ2VzCisgICAgICAgIEFkZCB0
ZW1wb3Jhcnkgc3R1YnMgZm9yIFBsdWdpbkRhdGFiYXNlIGFuZCBQbHVnaW5QYWNrYWdlIG1ldGhv
ZHMsCisgICAgICAgIG9uIEdUSysgYW5kIFF0CisgICAgICAgIFJlbW92ZSB0ZW1wb3Jhcnkgc3R1
YnMgZm9yIFBsdWdJbkluZm9TdG9yZSBvbiBHVEsrIGFuZCBRdAorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9GaWxl
U3lzdGVtUXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5j
cHA6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgICogcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5oOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luSW5mb1N0b3Jl
LmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAgICAgICAqIHBs
dWdpbnMvUGx1Z2luUGFja2FnZS5oOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdJbkluZm9T
dG9yZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3Bw
OgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmg6CisgICAgICAgICog
cGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy93aW4v
UGx1Z2luUGFja2FnZVdpbi5oOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uaDoKKwogMjAwOC0wMS0y
OCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1vcmUgd3ggZml4
ZXMKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMjk4MzMpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC04NDUsNiArODQ1LDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Vu
aWNvZGVSYW5nZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcCBcCisJV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpbklu
Zm9TdG9yZS5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBcCiAJV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL0F1dG9U
YWJsZUxheW91dC5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwIFwKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2
aXNpb24gMjk4MzMpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC03
NzksNiArNzc5LDkgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vVGltZXIuY3BwIFwKICAg
ICBwbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5jcHAgXAogICAgIHBsYXRmb3JtL1dpZGdldC5j
cHAgXAorICAgIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIFwKKyAgICBwbHVnaW5zL1BsdWdp
bkluZm9TdG9yZS5jcHAgXAorICAgIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAgXAogICAgIHBs
dWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBcCiAgICAgcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5j
cHAgXAogICAgIHJlbmRlcmluZy9iaWRpLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDI5ODMzKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNzkyOSwxMCArNzkyOSwzMCBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVn
aW5zXFBsdWdpbkRhdGFiYXNlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1
Z2luRGVidWcuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luSW5mb1N0b3JlLmNwcCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2Fn
ZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luUXVpcmtTZXQuaCINCiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCkBAIC03OTU2LDIyICs3OTc2LDEwIEBACiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQ
bHVnaW5EYXRhYmFzZVdpbi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQot
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcd2luXFBsdWdJbkluZm9TdG9yZVdpbi5jcHAi
DQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGx1Z2luc1x3aW5cUGx1Z2luUGFja2FnZVdpbi5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmls
ZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1x3aW5cUGx1Z2lu
UGFja2FnZVdpbi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQogCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblZpZXdXaW4uY3BwIg0KIAkJCQkJPg0K
IAkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHJldmlzaW9uIDI5ODMzKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDEwIEBACiAjaWZuZGVmIEZpbGVTeXN0ZW1faAogI2RlZmluZSBGaWxlU3lzdGVtX2gKIAor
I2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDxnbW9kdWxlLmg+CisjZW5kaWYKKwogI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGF0YSogQ0ZE
YXRhUmVmOwpAQCAtNDEsOSArNDUsMTcgQEAgY2xhc3MgU3RyaW5nOwogCiAjaWYgUExBVEZPUk0o
V0lOKQogdHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1GaWxlSGFuZGxlOwordHlwZWRlZiBGSUxFVElN
RSBQbGF0Zm9ybUZpbGVUaW1lOwordHlwZWRlZiBITU9EVUxFIFBsYXRmb3JtTW9kdWxlOwogY29u
c3QgUGxhdGZvcm1GaWxlSGFuZGxlIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgPSBJTlZBTElE
X0hBTkRMRV9WQUxVRTsKICNlbHNlCiB0eXBlZGVmIGludCBQbGF0Zm9ybUZpbGVIYW5kbGU7Cit0
eXBlZGVmIHRpbWVfdCBQbGF0Zm9ybUZpbGVUaW1lOworI2lmIFBMQVRGT1JNKEdUSykKK3R5cGVk
ZWYgR01vZHVsZSogUGxhdGZvcm1Nb2R1bGU7CisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9y
bU1vZHVsZTsKKyNlbmRpZgogY29uc3QgUGxhdGZvcm1GaWxlSGFuZGxlIGludmFsaWRQbGF0Zm9y
bUZpbGVIYW5kbGUgPSAtMTsKICNlbmRpZgogCkBAIC01NCw2ICs2Niw3IEBAIGJvb2wgZmlsZVNp
emUoY29uc3QgU3RyaW5nJiwgbG9uZyBsb25nJiAKIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCk7CiBib29s
IG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpOwogU3RyaW5nIGhvbWVEaXJl
Y3RvcnlQYXRoKCk7CitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYpOwogCiBD
U3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmKTsKIApAQCAtNjQs
NiArNzcsOSBAQCBDU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IGNoYXIqIHByCiB2b2lk
IGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKIGludCB3cml0ZVRvRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOwogCisvKiBNZXRob2Rz
IGZvciBkZWFsaW5nIHdpdGggbG9hZGFibGUgbW9kdWxlcyAqLworYm9vbCB1bmxvYWRNb2R1bGUo
UGxhdGZvcm1Nb2R1bGUpOworCiAjaWYgUExBVEZPUk0oV0lOKQogU3RyaW5nIGxvY2FsVXNlclNw
ZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpOwogU3RyaW5nIHJvYW1pbmdVc2VyU3BlY2lmaWNTdG9y
YWdlRGlyZWN0b3J5KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNw
cAkocmV2aXNpb24gMjk4MzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiwyMCBAQCBib29sIG1ha2VBbGxEaXJl
Y3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhCiAgICAgcmV0dXJuIHJlc3VsdCA9PSAwOwogfQogCitT
dHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KGdfZ2V0X2hvbWVfZGlyKCkpOworfQorCitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0
cmluZyYgcGF0aE5hbWUpCit7CisgICAgY2hhciogYmFzZU5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2Vu
YW1lKHBhdGhOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIFN0cmluZyBmaWxlTmFtZSA9IFN0cmlu
Zzo6ZnJvbVVURjgoYmFzZU5hbWUpOworICAgIGdfZnJlZShiYXNlTmFtZSk7CisKKyAgICByZXR1
cm4gZmlsZU5hbWU7Cit9CisKIENTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgY2hhciog
cHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKIHsKICAgICBnY2hhciogZmlsZW5h
bWUgPSBnX3N0cmR1cF9wcmludGYoIiVzWFhYWFhYIiwgcHJlZml4KTsKQEAgLTE0NSw0ICsxNTks
OSBAQCBpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsCiAKICAgICByZXR1
cm4gdG90YWxCeXRlc1dyaXR0ZW47CiB9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9k
dWxlIG1vZHVsZSkKK3sKKyAgICByZXR1cm4gZ19tb2R1bGVfY2xvc2UobW9kdWxlKTsKK30KIH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2
aXNpb24gMjk4MzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4IEBACiAjaW5jbHVkZSAiRlRQRGlyZWN0
b3J5RG9jdW1lbnQuaCIKICNpbmNsdWRlICJHbG9iYWxIaXN0b3J5LmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTU3LDEyICs1OCwxMiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJl
c291cmNlSW50b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNv
bnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbkluZm8qIFBs
dWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3Jl
OjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVN0
cmluZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfSAKLWJvb2wg
V2ViQ29yZTo6UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFdlYkNv
cmU6OnJlZnJlc2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCitQbHVnaW5T
ZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QgeyBub3RJbXBsZW1l
bnRlZCgpOyBQbHVnaW5TZXQgcGx1Z2luczsgcmV0dXJuIHBsdWdpbnM7fQorVmVjdG9yPFN0cmlu
Zz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpIHsgbm90SW1wbGVtZW50ZWQo
KTsgVmVjdG9yPFN0cmluZz4gcGF0aHM7IHJldHVybiBwYXRoczt9Citib29sIFBsdWdpbkRhdGFi
YXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJikgY29uc3QgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZv
KCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7fQordW5zaWduZWQgUGx1Z2luUGFj
a2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQorYm9vbCBQ
bHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiwgY29uc3QgUGx1Z2luUGFj
a2FnZSYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKIENvbG9yIFdlYkNv
cmU6OmZvY3VzUmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBXZWJDb3Jl
OjpzZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0LmNwcAkocmV2aXNpb24gMjk4MzMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3F0L0ZpbGVTeXN0ZW1RdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYg
KzY4LDE4IEBAIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3QKICAgICBy
ZXR1cm4gUURpcihwYXRoKS5maWxlUGF0aChjb21wb25lbnQpOwogfQogCitTdHJpbmcgcGF0aEdl
dEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAwOworfQorCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBtb2R1
bGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0K
IAogLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9y
YXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBv
cmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDI5ODMzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9x
dC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw4IEBA
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisj
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAjaW5jbHVk
ZSAiVGV4dEJvdW5kYXJpZXMuaCIKQEAgLTY5LDYgKzcwLDEzIEBACiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhz
KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBQbHVnaW5TZXQgcGx1Z2luczsgcmV0dXJuIHBs
dWdpbnM7fQorVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRo
cygpIHsgbm90SW1wbGVtZW50ZWQoKTsgVmVjdG9yPFN0cmluZz4gcGF0aHM7IHJldHVybiBwYXRo
czt9Citib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3QgU3Ry
aW5nJikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgUGx1
Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7
fQordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7fQorYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNr
YWdlJiwgY29uc3QgUGx1Z2luUGFja2FnZSYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZh
bHNlOyB9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVk
S2V5U2l6ZXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAkocmV2aXNpb24gMjk4
MzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDYgKzExNCwxMSBAQCBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQogICAg
IHJldHVybiAiIjsKIH0KIAorU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBh
dGgpCit7CisgICAgcmV0dXJuIFN0cmluZyhQYXRoRmluZEZpbGVOYW1lKFN0cmluZyhwYXRoKS5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSk7Cit9CisKIHN0YXRpYyBTdHJpbmcgYnVu
ZGxlTmFtZSgpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CkBAIC0yMDIsNiArMjA3
LDEyIEBAIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGwKICAgICAgICAg
cmV0dXJuIC0xOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVzV3JpdHRlbik7CiB9
CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKK3sKKyAgICByZXR1
cm4gOjpGcmVlTGlicmFyeShtb2R1bGUpOworfQorCiBTdHJpbmcgbG9jYWxVc2VyU3BlY2lmaWNT
dG9yYWdlRGlyZWN0b3J5KCkKIHsKICAgICByZXR1cm4gY2FjaGVkU3RvcmFnZURpcmVjdG9yeShD
U0lETF9MT0NBTF9BUFBEQVRBKTsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAko
cmV2aXNpb24gMjk2MjYpCShmcm9tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VX
aW4uY3BwOjI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VXaW4uaCIKKworI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2VXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3V2luLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8c2hsd2FwaS5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkRhdGFiYXNlV2luKiBQbHVnaW5EYXRhYmFzZVdp
bjo6aW5zdGFsbGVkUGx1Z2lucygpCit7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlV2luKiBw
bHVnaW5zID0gMDsKKyAgICAKKyAgICBpZiAoIXBsdWdpbnMpIHsKKyAgICAgICAgcGx1Z2lucyA9
IG5ldyBQbHVnaW5EYXRhYmFzZVdpbjsKKyAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMo
UGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKKyAgICAgICAgcGx1Z2lu
cy0+cmVmcmVzaCgpOworICAgIH0KKworICAgIHJldHVybiBwbHVnaW5zOworfQorCit2b2lkIFBs
dWdpbkRhdGFiYXNlV2luOjphZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBhdGgpOworICAgIHJlZnJlc2goKTsKK30KKwor
Ym9vbCBQbHVnaW5EYXRhYmFzZVdpbjo6cmVmcmVzaCgpCit7ICAgCisgICAgUGx1Z2luU2V0IG5l
d1BsdWdpbnM7CisKKyAgICBib29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKKworICAgIC8v
IENyZWF0ZSBhIG5ldyBzZXQgb2YgcGx1Z2lucworICAgIG5ld1BsdWdpbnMgPSBnZXRQbHVnaW5z
SW5QYXRocygpOworCisgICAgaWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1f
cmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOworCisgICAgICAgIFBsdWdpblNldCBwbHVnaW5z
VG9VbmxvYWQgPSBtX3BsdWdpbnM7CisKKyAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgICAgIHBsdWdpbnNUb1VubG9hZC5yZW1vdmUoKml0KTsKKworICAgICAgICBlbmQgPSBtX3Bs
dWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBuZXdQbHVn
aW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCisgICAgICAgIGVu
ZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgICAgIG1fcGx1Z2lucy5yZW1vdmUoKml0KTsKKworICAgICAgICAvLyBBZGQgbmV3
IHBsdWdpbnMKKyAgICAgICAgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1
Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpIHx8ICFuZXdQbHVnaW5z
LmlzRW1wdHkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3BsdWdpbnMgPSBuZXdQbHVnaW5z
OworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5k
KCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdp
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgq
aXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7
CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCisgICAgUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAvLyBHZXQgTUlNRSB0eXBlcworICAgICAgICBNSU1FVG9EZXNjcmlw
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRp
b25zKCkuZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsgbWFw
X2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KSB7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1F
VHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHBsdWdpblNldENoYW5nZWQ7Cit9CisKK1ZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gUGx1Z2lu
RGF0YWJhc2VXaW46OnBsdWdpbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdl
V2luKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Bs
dWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9w
bHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgo
Kml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZIHJvb3RLZXksIFBsdWdpblNldCYgcGx1Z2lu
cykKK3sKKyAgICBIS0VZIGtleTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IFJlZ09wZW5LZXlFeFco
cm9vdEtleSwgTCJTb2Z0d2FyZVxcTW96aWxsYVBsdWdpbnMiLCAwLCBLRVlfRU5VTUVSQVRFX1NV
Ql9LRVlTLCAma2V5KTsKKworICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgd2NoYXJfdCBuYW1lWzEyOF07CisgICAgRklMRVRJTUUgbGFzdE1v
ZGlmaWVkOworCisgICAgLy8gRW51bWVyYXRlIHN1YmtleXMKKyAgICBmb3IgKGludCBpID0gMDs7
IGkrKykgeworICAgICAgICBEV09SRCBuYW1lTGVuID0gX2NvdW50b2YobmFtZSk7CisgICAgICAg
IHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwg
Jmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgV0NIQVIgcGF0aFN0cltfTUFYX1BBVEhdOwor
ICAgICAgICBEV09SRCBwYXRoU3RyU2l6ZSA9IHNpemVvZihwYXRoU3RyKTsKKyAgICAgICAgRFdP
UkQgdHlwZTsKKworICAgICAgICByZXN1bHQgPSBTSEdldFZhbHVlKGtleSwgbmFtZSwgVEVYVCgi
UGF0aCIpLCAmdHlwZSwgKExQQllURSlwYXRoU3RyLCAmcGF0aFN0clNpemUpOworICAgICAgICBp
ZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MgfHwgdHlwZSAhPSBSRUdfU1opCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIGF0dHJpYnV0
ZXM7CisgICAgICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0V4KHBhdGhTdHIsIEdldEZpbGVFeElu
Zm9TdGFuZGFyZCwgJmF0dHJpYnV0ZXMpID09IDApCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gUGx1Z2luUGFja2FnZVdpbjo6Y3Jl
YXRlUGFja2FnZShTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBzaXplb2YoV0NIQVIpIC0g
MSksIGF0dHJpYnV0ZXMuZnRMYXN0V3JpdGVUaW1lKTsKKworICAgICAgICBpZiAocGFja2FnZSkK
KyAgICAgICAgICAgIHBsdWdpbnMuYWRkKHBhY2thZ2UpOworICAgIH0KKworICAgIFJlZ0Nsb3Nl
S2V5KGtleSk7Cit9CisKK1BsdWdpblNldCBQbHVnaW5EYXRhYmFzZVdpbjo6Z2V0UGx1Z2luc0lu
UGF0aHMoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5z
ZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisgICAg
UGx1Z2luU2V0IHBsdWdpbnM7CisKKyAgICBIQU5ETEUgaEZpbmQgPSBJTlZBTElEX0hBTkRMRV9W
QUxVRTsKKyAgICBXSU4zMl9GSU5EX0RBVEFXIGZpbmRGaWxlRGF0YTsKKworICAgIFBsdWdpblBh
Y2thZ2VXaW4qIG9sZFdNUFBsdWdpbiA9IDA7CisgICAgUGx1Z2luUGFja2FnZVdpbiogbmV3V01Q
UGx1Z2luID0gMDsKKworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3BsdWdpblBhdGhzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5QYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgU3RyaW5nIHBhdHRlcm4gPSAqaXQgKyAiXFwqIjsKKworICAgICAgICBoRmluZCA9IEZpbmRG
aXJzdEZpbGVXKHBhdHRlcm4uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgJmZpbmRG
aWxlRGF0YSk7CisKKyAgICAgICAgaWYgKGhGaW5kID09IElOVkFMSURfSEFORExFX1ZBTFVFKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGZp
bmRGaWxlRGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUg
PSBTdHJpbmcoZmluZEZpbGVEYXRhLmNGaWxlTmFtZSwgd2NzbGVuKGZpbmRGaWxlRGF0YS5jRmls
ZU5hbWUpKTsKKyAgICAgICAgICAgIGlmICgoIWZpbGVuYW1lLnN0YXJ0c1dpdGgoIm5wIiwgZmFs
c2UpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aCgiZGxsIiwgZmFsc2UpKSAmJgorICAgICAgICAgICAg
ICAgICghZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJQbHVnaW4uZGxsIikgfHwgIWl0LT5l
bmRzV2l0aCgiU2hvY2t3YXZlIDEwIiwgZmFsc2UpKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgU3RyaW5nIGZ1bGxQYXRoID0gKml0ICsgIlxcIiArIGZpbGVuYW1l
OworICAgICAgICAgICAgaWYgKCF1bmlxdWVGaWxlbmFtZXMuYWRkKGZ1bGxQYXRoKS5zZWNvbmQp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAgUGx1Z2lu
UGFja2FnZVdpbiogcGx1Z2luUGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBhY2th
Z2UoZnVsbFBhdGgsIGZpbmRGaWxlRGF0YS5mdExhc3RXcml0ZVRpbWUpOworCisgICAgICAgICAg
ICBpZiAocGx1Z2luUGFja2FnZSkgeworICAgICAgICAgICAgICAgIHBsdWdpbnMuYWRkKHBsdWdp
blBhY2thZ2UpOworCisgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVu
YW1lLCAibnBkc3BsYXkuZGxsIikpCisgICAgICAgICAgICAgICAgICAgIG9sZFdNUFBsdWdpbiA9
IHBsdWdpblBhY2thZ2U7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoZmlsZW5hbWUsICJucC1tc3dtcC5kbGwiKSkKKyAgICAgICAgICAgICAgICAgICAgbmV3V01Q
UGx1Z2luID0gcGx1Z2luUGFja2FnZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IHdoaWxl
IChGaW5kTmV4dEZpbGVXKGhGaW5kLCAmZmluZEZpbGVEYXRhKSAhPSAwKTsKKworICAgICAgICBG
aW5kQ2xvc2UoaEZpbmQpOworICAgIH0KKworICAgIGFkZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtF
WV9MT0NBTF9NQUNISU5FLCBwbHVnaW5zKTsKKyAgICBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhL
RVlfQ1VSUkVOVF9VU0VSLCBwbHVnaW5zKTsKKworICAgIC8vIElmIGJvdGggdGhlIG9sZCBhbmQg
bmV3IFdNUCBwbHVnaW4gYXJlIHByZXNlbnQgaW4gdGhlIHBsdWdpbnMgc2V0LCAKKyAgICAvLyB3
ZSByZW1vdmUgdGhlIG9sZCBvbmUgc28gd2UgZG9uJ3QgZW5kIHVwIGNob29zaW5nIHRoZSBvbGQg
b25lLgorICAgIGlmIChvbGRXTVBQbHVnaW4gJiYgbmV3V01QUGx1Z2luKQorICAgICAgICBwbHVn
aW5zLnJlbW92ZShvbGRXTVBQbHVnaW4pOworCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3N0
YXRpYyBpbmxpbmUgVmVjdG9yPGludD4gcGFyc2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmVyc2lvblN0cmluZykKK3sKKyAgICBWZWN0b3I8aW50PiB2ZXJzaW9uOworCisgICAgdW5zaWdu
ZWQgc3RhcnRQb3MgPSAwOworICAgIHVuc2lnbmVkIGVuZFBvczsKKyAgICAKKyAgICB3aGlsZSAo
c3RhcnRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIGZvciAoZW5kUG9z
ID0gc3RhcnRQb3M7IGVuZFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQor
ICAgICAgICAgICAgaWYgKHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0
cmluZ1tlbmRQb3NdID09ICdfJykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBp
bnQgdmVyc2lvbkNvbXBvbmVudCA9IHZlcnNpb25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBl
bmRQb3MgLSBzdGFydFBvcykudG9JbnQoKTsKKyAgICAgICAgdmVyc2lvbi5hcHBlbmQodmVyc2lv
bkNvbXBvbmVudCk7CisKKyAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAgIH0KKwor
ICAgIHJldHVybiB2ZXJzaW9uOworfQorCisvLyBUaGlzIHJldHVybnMgd2hldGhlciB2ZXJzaW9u
QSBpcyBoaWdoZXIgdGhhbiB2ZXJzaW9uQgorc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVWZXJz
aW9ucyhjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkEsIGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJz
aW9uQikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVyc2lvbkEuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgaWYgKGkgPj0gdmVyc2lvbkIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHZlcnNpb25BW2ldID4gdmVyc2lvbkJbaV0pCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmVyc2lvbkFbaV0gPCB2ZXJz
aW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB3
ZSBjb21lIGhlcmUsIHRoZSB2ZXJzaW9ucyBhcmUgZWl0aGVyIHRoZSBzYW1lIG9yIHZlcnNpb25C
IGhhcyBhbiBleHRyYSBjb21wb25lbnQsIGp1c3QgcmV0dXJuIGZhbHNlCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkTW96aWxsYVBsdWdpblBhdGhzKFZlY3Rv
cjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICAvLyBFbnVtZXJhdGUgYWxsIE1vemlsbGEgcGx1Z2lu
IGRpcmVjdG9yaWVzIGluIHRoZSByZWdpc3RyeQorICAgIEhLRVkga2V5OworICAgIExPTkcgcmVz
dWx0OworICAgIAorICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUs
IFRFWFQoIlNvZnR3YXJlXFxNb3ppbGxhIiksIDAsIEtFWV9SRUFELCAma2V5KTsKKyAgICBpZiAo
cmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgV0NIQVIgbmFtZVsxMjhdOworICAg
ICAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7CisKKyAgICAgICAgLy8gRW51bWVyYXRlIHN1Ymtl
eXMKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKKyAgICAgICAgICAgIERXT1JEIG5h
bWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOworICAgICAgICAgICAgcmVzdWx0
ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1v
ZGlmaWVkKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uc1BhdGgg
PSBTdHJpbmcobmFtZSwgbmFtZUxlbikgKyAiXFxFeHRlbnNpb25zIjsKKyAgICAgICAgICAgIEhL
RVkgZXh0ZW5zaW9uc0tleTsKKworICAgICAgICAgICAgLy8gVHJ5IG9wZW5pbmcgdGhlIGtleQor
ICAgICAgICAgICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KGtleSwgZXh0ZW5zaW9uc1BhdGguY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgS0VZX1JFQUQsICZleHRlbnNpb25zS2V5
KTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAg
ICAgICAgICAgLy8gTm93IGdldCB0aGUgcGx1Z2lucyBwYXRoCisgICAgICAgICAgICAgICAgV0NI
QVIgcGx1Z2luc1BhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgICAgICAgICBEV09SRCBwbHVn
aW5zUGF0aFNpemUgPSBzaXplb2YocGx1Z2luc1BhdGhTdHIpOworICAgICAgICAgICAgICAgIERX
T1JEIHR5cGU7CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBSZWdRdWVyeVZhbHVlRXgoZXh0
ZW5zaW9uc0tleSwgVEVYVCgiUGx1Z2lucyIpLCAwLCAmdHlwZSwgKExQQllURSkmcGx1Z2luc1Bh
dGhTdHIsICZwbHVnaW5zUGF0aFNpemUpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQorICAgICAgICAgICAgICAgICAgICBw
YXRocy5hcHBlbmQoU3RyaW5nKHBsdWdpbnNQYXRoU3RyLCBwbHVnaW5zUGF0aFNpemUgLyBzaXpl
b2YoV0NIQVIpIC0gMSkpOworCisgICAgICAgICAgICAgICAgUmVnQ2xvc2VLZXkoZXh0ZW5zaW9u
c0tleSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJlZ0Ns
b3NlS2V5KGtleSk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkV2luZG93c01l
ZGlhUGxheWVyUGx1Z2luUGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit7CisgICAgLy8gVGhl
IG5ldyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1Z2lucyBp
ZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3RhbGxzCisgICAgV0NIQVIgcGx1Z2luRGly
ZWN0b3J5U3RyW19NQVhfUEFUSCArIDFdOworICAgIERXT1JEIHBsdWdpbkRpcmVjdG9yeVNpemUg
PSA6OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxcUEZpbGVz
XFxQbHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwgX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5
U3RyKSk7CisKKyAgICBpZiAocGx1Z2luRGlyZWN0b3J5U2l6ZSA+IDAgJiYgcGx1Z2luRGlyZWN0
b3J5U2l6ZSA8PSBfY291bnRvZihwbHVnaW5EaXJlY3RvcnlTdHIpKQorICAgICAgICBwYXRocy5h
cHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAtIDEp
KTsKKworICAgIERXT1JEIHR5cGU7CisgICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3Ry
W19NQVhfUEFUSF07CisgICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSA9IHNpemVv
ZihpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBTSEdl
dFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1pY3Jvc29mdFxcTWVk
aWFQbGF5ZXIiKSwgVEVYVCgiSW5zdGFsbGF0aW9uIERpcmVjdG9yeSIpLCAmdHlwZSwgKExQQllU
RSkmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSk7
CisKKyAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisg
ICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0
YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIGFkZFF1aWNrVGltZVBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhz
KQoreworICAgIERXT1JEIHR5cGU7CisgICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3Ry
W19NQVhfUEFUSF07CisgICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSA9IHNpemVv
ZihpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBTSEdl
dFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFwcGxlIENvbXB1dGVy
LCBJbmMuXFxRdWlja1RpbWUiKSwgVEVYVCgiSW5zdGFsbERpciIpLCAmdHlwZSwgKExQQllURSkm
aW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSk7CisK
KyAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opIHsKKyAg
ICAgICAgU3RyaW5nIHBsdWdpbkRpciA9IFN0cmluZyhpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIs
IGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkgKyAiXFxwbHVn
aW5zIjsKKyAgICAgICAgcGF0aHMuYXBwZW5kKHBsdWdpbkRpcik7CisgICAgfQorfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChWZWN0b3I8U3RyaW5nPiYg
cGF0aHMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5
RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVh
ZGVyIiksIDAsIEtFWV9SRUFELCAma2V5KTsKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NF
U1MpCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICBGSUxFVElN
RSBsYXN0TW9kaWZpZWQ7CisKKyAgICBWZWN0b3I8aW50PiBsYXRlc3RBY3JvYmF0VmVyc2lvbjsK
KyAgICBTdHJpbmcgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmc7CisKKyAgICAvLyBFbnVtZXJh
dGUgc3Via2V5cworICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgIERXT1JEIG5h
bWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOworICAgICAgICByZXN1bHQgPSBS
ZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZp
ZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIFZlY3RvcjxpbnQ+IGFjcm9iYXRWZXJzaW9uID0gcGFyc2VWZXJz
aW9uU3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7CisgICAgICAgIGlmIChjb21wYXJlVmVy
c2lvbnMoYWNyb2JhdFZlcnNpb24sIGxhdGVzdEFjcm9iYXRWZXJzaW9uKSkgeworICAgICAgICAg
ICAgbGF0ZXN0QWNyb2JhdFZlcnNpb24gPSBhY3JvYmF0VmVyc2lvbjsKKyAgICAgICAgICAgIGxh
dGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZy5pc051bGwo
KSkgeworICAgICAgICBEV09SRCB0eXBlOworICAgICAgICBXQ0hBUiBhY3JvYmF0SW5zdGFsbFBh
dGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdPUkQgYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSA9
IHNpemVvZihhY3JvYmF0SW5zdGFsbFBhdGhTdHIpOworCisgICAgICAgIFN0cmluZyBhY3JvYmF0
UGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVhZGVyXFwiICsgbGF0
ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgKyAiXFxJbnN0YWxsUGF0aCI7CisgICAgICAgIHJlc3Vs
dCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBhY3JvYmF0UGx1Z2luS2V5UGF0aC5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCAmdHlwZSwgKExQQllURSlhY3JvYmF0
SW5zdGFsbFBhdGhTdHIsICZhY3JvYmF0SW5zdGFsbFBhdGhTaXplKTsKKworICAgICAgICBpZiAo
cmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIFN0cmluZyBhY3JvYmF0UGx1
Z2luUGF0aCA9IFN0cmluZyhhY3JvYmF0SW5zdGFsbFBhdGhTdHIsIGFjcm9iYXRJbnN0YWxsUGF0
aFNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkgKyAiXFxicm93c2VyIjsKKyAgICAgICAgICAgIHBh
dGhzLmFwcGVuZChhY3JvYmF0UGx1Z2luUGF0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBS
ZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBzYWZhcmlQbHVnaW5z
UGF0aCgpCit7CisgICAgV0NIQVIgbW9kdWxlRmlsZU5hbWVTdHJbX01BWF9QQVRIXTsKKyAgICBz
dGF0aWMgU3RyaW5nIHBsdWdpbnNQYXRoOworICAgIHN0YXRpYyBib29sIGNhY2hlZFBsdWdpblBh
dGggPSBmYWxzZTsKKworICAgIGlmICghY2FjaGVkUGx1Z2luUGF0aCkgeworICAgICAgICBjYWNo
ZWRQbHVnaW5QYXRoID0gdHJ1ZTsKKworICAgICAgICBpbnQgbW9kdWxlRmlsZU5hbWVMZW4gPSBH
ZXRNb2R1bGVGaWxlTmFtZSgwLCBtb2R1bGVGaWxlTmFtZVN0ciwgX01BWF9QQVRIKTsKKworICAg
ICAgICBpZiAoIW1vZHVsZUZpbGVOYW1lTGVuIHx8IG1vZHVsZUZpbGVOYW1lTGVuID09IF9NQVhf
UEFUSCkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBpZiAoIVBhdGhSZW1vdmVG
aWxlU3BlYyhtb2R1bGVGaWxlTmFtZVN0cikpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAg
ICAgICAgcGx1Z2luc1BhdGggPSBTdHJpbmcobW9kdWxlRmlsZU5hbWVTdHIpICsgIlxcUGx1Z2lu
cyI7CisgICAgfQorZXhpdDoKKyAgICByZXR1cm4gcGx1Z2luc1BhdGg7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMoVmVjdG9yPFN0cmluZz4mIHBhdGhz
KQoreworICAgIFdDSEFSIHN5c3RlbURpcmVjdG9yeVN0cltNQVhfUEFUSF07CisKKyAgICBpZiAo
R2V0U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwgX2NvdW50b2Yoc3lzdGVtRGly
ZWN0b3J5U3RyKSkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0NIQVIgbWFjcm9tZWRp
YURpcmVjdG9yeVN0cltNQVhfUEFUSF07CisKKyAgICBQYXRoQ29tYmluZShtYWNyb21lZGlhRGly
ZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxGbGFzaCIpKTsK
KyAgICBwYXRocy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7CisKKyAgICBQYXRoQ29t
YmluZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1h
Y3JvbWVkXFxTaG9ja3dhdmUgMTAiKSk7CisgICAgcGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJl
Y3RvcnlTdHIpOworfQorCitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZVdpbjo6ZGVmYXVs
dFBsdWdpblBhdGhzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKKyAgICBTdHJpbmcg
b3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7CisKKyAgICBpZiAoIW91clBhdGguaXNOdWxs
KCkpCisgICAgICAgIHBhdGhzLmFwcGVuZChvdXJQYXRoKTsKKyAgICBhZGRRdWlja1RpbWVQbHVn
aW5QYXRoKHBhdGhzKTsKKyAgICBhZGRBZG9iZUFjcm9iYXRQbHVnaW5QYXRoKHBhdGhzKTsKKyAg
ICBhZGRNb3ppbGxhUGx1Z2luUGF0aHMocGF0aHMpOworICAgIGFkZFdpbmRvd3NNZWRpYVBsYXll
clBsdWdpblBhdGgocGF0aHMpOworICAgIGFkZE1hY3JvbWVkaWFQbHVnaW5QYXRocyhwYXRocyk7
CisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2VXaW46OmlzTUlN
RVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVU
eXBlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fcmVnaXN0ZXJl
ZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQg
c2VhcmNoaW5nIGFnYWluCisgICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlN
RVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSk7Cit9CisKK1BsdWdpblBhY2thZ2VXaW4qIFBsdWdp
bkRhdGFiYXNlV2luOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQor
eworICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
U3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7CisgICAgU3RyaW5nIG91clBhdGggPSBzYWZh
cmlQbHVnaW5zUGF0aCgpOworICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IDA7CisgICAg
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisKKyAgICBm
b3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCku
Y29udGFpbnMoa2V5KSkgeworICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7CisgICAg
ICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBpbiBvdXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5Cisg
ICAgICAgICAgICBpZiAocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSA9PSBvdXJQYXRoKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdp
bjsKK30KKworU3RyaW5nIFBsdWdpbkRhdGFiYXNlV2luOjpNSU1FVHlwZUZvckV4dGVuc2lvbihj
b25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QKK3sKKyAgICBpZiAoZXh0ZW5zaW9uLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgU3RyaW5nIG91clBhdGggPSBzYWZh
cmlQbHVnaW5zUGF0aCgpOworICAgIFN0cmluZyBtaW1lVHlwZTsKKyAgICBQbHVnaW5QYWNrYWdl
V2luKiBwbHVnaW4gPSAwOworCisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNSU1FVG9F
eHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRl
bnNpb25zKCkuZW5kKCk7CisKKyAgICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBtaW1lX2l0ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBt
aW1lX2l0ICE9IG1pbWVfZW5kOyArK21pbWVfaXQpIHsKKyAgICAgICAgICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+c2Vjb25kOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkg
eworICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVfaXQtPmZpcnN0OworICAgICAg
ICAgICAgICAgICAgICBwbHVnaW4gPSAoKml0KS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQorICAgICAgICAg
ICAgICAgICAgICBpZiAocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSA9PSBvdXJQYXRoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1pbWVUeXBlOworfQorCitQbHVn
aW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1
cmwsIFN0cmluZyYgbWltZVR5cGUpCit7ICAgCisgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2lu
ID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOworICAgIFN0cmluZyBmaWxlbmFtZSA9IHVy
bC5zdHJpbmcoKTsKKyAgICAKKyAgICBpZiAoIXBsdWdpbikgeworICAgICAgICBTdHJpbmcgZmls
ZW5hbWUgPSB1cmwubGFzdFBhdGhDb21wb25lbnQoKTsKKyAgICAgICAgaWYgKCFmaWxlbmFtZS5l
bmRzV2l0aCgiLyIpKSB7CisgICAgICAgICAgICBpbnQgZXh0ZW5zaW9uUG9zID0gZmlsZW5hbWUu
cmV2ZXJzZUZpbmQoJy4nKTsKKyAgICAgICAgICAgIGlmIChleHRlbnNpb25Qb3MgIT0gLTEpIHsK
KyAgICAgICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGV4
dGVuc2lvblBvcyArIDEpOworCisgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBNSU1FVHlwZUZv
ckV4dGVuc2lvbihleHRlbnNpb24pOworICAgICAgICAgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZv
ck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IFdpbmRvd3Mg
Zm9yIHRoZSBtaW1lIHR5cGUgCisgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0ZW5zaW9u
LgorCisgICAgcmV0dXJuIHBsdWdpbjsKK30KKworUGx1Z2luVmlld1dpbiogUGx1Z2luRGF0YWJh
c2VXaW46OmNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQoreworICAgIC8vIGlmIHdl
IGZhaWwgdG8gZmluZCBhIHBsdWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZpbmRQbHVnaW4gd2ls
bCBzZWFyY2ggZm9yCisgICAgLy8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGFuZCB1
cGRhdGUgdGhlIE1JTUUgdHlwZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5nCisgICAgU3RyaW5n
IG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOworICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9
IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOworICAgIAorICAgIC8vIE5vIHBsdWdpbiB3
YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWlu
CisgICAgaWYgKCFwbHVnaW4gJiYgcmVmcmVzaCgpKSB7CisgICAgICAgIG1pbWVUeXBlQ29weSA9
IG1pbWVUeXBlOworICAgICAgICBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5
KTsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVybiBuZXcgUGx1Z2luVmlld1dpbihwYXJlbnRG
cmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVz
LCBtaW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpbkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMjk2MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsMzYgKzI1LDQzIEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlV2luLmgi
CisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKIAotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VX
aW4uaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3V2luLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2Fn
ZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUg
PHNobHdhcGkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QbHVnaW5EYXRhYmFzZVdpbiog
UGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKQorUGx1Z2luRGF0YWJhc2UqIFBs
dWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCkKIHsKLSAgICBzdGF0aWMgUGx1Z2luRGF0
YWJhc2VXaW4qIHBsdWdpbnMgPSAwOworICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZSogcGx1Z2lu
cyA9IDA7CiAgICAgCiAgICAgaWYgKCFwbHVnaW5zKSB7Ci0gICAgICAgIHBsdWdpbnMgPSBuZXcg
UGx1Z2luRGF0YWJhc2VXaW47Ci0gICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBsdWdp
bkRhdGFiYXNlV2luOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSk7CisgICAgICAgIHBsdWdpbnMgPSBu
ZXcgUGx1Z2luRGF0YWJhc2U7CisgICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBsdWdp
bkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSk7CiAgICAgICAgIHBsdWdpbnMtPnJlZnJl
c2goKTsKICAgICB9CiAKICAgICByZXR1cm4gcGx1Z2luczsKIH0KIAotdm9pZCBQbHVnaW5EYXRh
YmFzZVdpbjo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK2Jvb2wgUGx1
Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
Cit7CisgICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5n
IHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCisgICAgcmV0dXJuIChyZWZyZXNoKCkg
JiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSk7Cit9CisKK3ZvaWQg
UGx1Z2luRGF0YWJhc2U6OmFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCiB7
CiAgICAgbV9wbHVnaW5QYXRocy5hcHBlbmQocGF0aCk7CiAgICAgcmVmcmVzaCgpOwogfQogCi1i
b29sIFBsdWdpbkRhdGFiYXNlV2luOjpyZWZyZXNoKCkKK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OnJl
ZnJlc2goKQogeyAgIAogICAgIFBsdWdpblNldCBuZXdQbHVnaW5zOwogCkBAIC0xMDgsOSArMTE2
LDkgQEAgYm9vbCBQbHVnaW5EYXRhYmFzZVdpbjo6cmVmcmVzaCgpCiAgICAgcmV0dXJuIHBsdWdp
blNldENoYW5nZWQ7CiB9CiAKLVZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gUGx1Z2luRGF0YWJh
c2VXaW46OnBsdWdpbnMoKSBjb25zdAorVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBQbHVnaW5EYXRh
YmFzZTo6cGx1Z2lucygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFBsdWdpblBhY2thZ2VXaW4qPiBy
ZXN1bHQ7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiByZXN1bHQ7CiAKICAgICBQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKICAgICBmb3IgKFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQpAQCAtMTE5LDM0NyArMTI3LDE5IEBAIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gUGx1
Z2luRGF0YWJhc2UKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
YWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZIHJvb3RLZXksIFBsdWdpblNldCYgcGx1Z2lucykK
LXsKLSAgICBIS0VZIGtleTsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IFJlZ09wZW5LZXlFeFcocm9v
dEtleSwgTCJTb2Z0d2FyZVxcTW96aWxsYVBsdWdpbnMiLCAwLCBLRVlfRU5VTUVSQVRFX1NVQl9L
RVlTLCAma2V5KTsKLQotICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgd2NoYXJfdCBuYW1lWzEyOF07Ci0gICAgRklMRVRJTUUgbGFzdE1vZGlm
aWVkOwotCi0gICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBmb3IgKGludCBpID0gMDs7IGkr
KykgewotICAgICAgICBEV09SRCBuYW1lTGVuID0gX2NvdW50b2YobmFtZSk7Ci0gICAgICAgIHJl
c3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxh
c3RNb2RpZmllZCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgV0NIQVIgcGF0aFN0cltfTUFYX1BBVEhdOwotICAg
ICAgICBEV09SRCBwYXRoU3RyU2l6ZSA9IHNpemVvZihwYXRoU3RyKTsKLSAgICAgICAgRFdPUkQg
dHlwZTsKLQotICAgICAgICByZXN1bHQgPSBTSEdldFZhbHVlKGtleSwgbmFtZSwgVEVYVCgiUGF0
aCIpLCAmdHlwZSwgKExQQllURSlwYXRoU3RyLCAmcGF0aFN0clNpemUpOwotICAgICAgICBpZiAo
cmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MgfHwgdHlwZSAhPSBSRUdfU1opCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIGF0dHJpYnV0ZXM7
Ci0gICAgICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0V4KHBhdGhTdHIsIEdldEZpbGVFeEluZm9T
dGFuZGFyZCwgJmF0dHJpYnV0ZXMpID09IDApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gUGx1Z2luUGFja2FnZVdpbjo6Y3JlYXRl
UGFja2FnZShTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSks
IGF0dHJpYnV0ZXMuZnRMYXN0V3JpdGVUaW1lKTsKLQotICAgICAgICBpZiAocGFja2FnZSkKLSAg
ICAgICAgICAgIHBsdWdpbnMuYWRkKHBhY2thZ2UpOwotICAgIH0KLQotICAgIFJlZ0Nsb3NlS2V5
KGtleSk7Ci19Ci0KLVBsdWdpblNldCBQbHVnaW5EYXRhYmFzZVdpbjo6Z2V0UGx1Z2luc0luUGF0
aHMoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5z
aXRpdmUgc2V0LgotICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7Ci0gICAgUGx1
Z2luU2V0IHBsdWdpbnM7Ci0KLSAgICBIQU5ETEUgaEZpbmQgPSBJTlZBTElEX0hBTkRMRV9WQUxV
RTsKLSAgICBXSU4zMl9GSU5EX0RBVEFXIGZpbmRGaWxlRGF0YTsKLQotICAgIFBsdWdpblBhY2th
Z2VXaW4qIG9sZFdNUFBsdWdpbiA9IDA7Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogbmV3V01QUGx1
Z2luID0gMDsKLQotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Bs
dWdpblBhdGhzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9wbHVnaW5QYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
U3RyaW5nIHBhdHRlcm4gPSAqaXQgKyAiXFwqIjsKLQotICAgICAgICBoRmluZCA9IEZpbmRGaXJz
dEZpbGVXKHBhdHRlcm4uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgJmZpbmRGaWxl
RGF0YSk7Ci0KLSAgICAgICAgaWYgKGhGaW5kID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKGZpbmRG
aWxlRGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBT
dHJpbmcoZmluZEZpbGVEYXRhLmNGaWxlTmFtZSwgd2NzbGVuKGZpbmRGaWxlRGF0YS5jRmlsZU5h
bWUpKTsKLSAgICAgICAgICAgIGlmICgoIWZpbGVuYW1lLnN0YXJ0c1dpdGgoIm5wIiwgZmFsc2Up
IHx8ICFmaWxlbmFtZS5lbmRzV2l0aCgiZGxsIiwgZmFsc2UpKSAmJgotICAgICAgICAgICAgICAg
ICghZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJQbHVnaW4uZGxsIikgfHwgIWl0LT5lbmRz
V2l0aCgiU2hvY2t3YXZlIDEwIiwgZmFsc2UpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgU3RyaW5nIGZ1bGxQYXRoID0gKml0ICsgIlxcIiArIGZpbGVuYW1lOwot
ICAgICAgICAgICAgaWYgKCF1bmlxdWVGaWxlbmFtZXMuYWRkKGZ1bGxQYXRoKS5zZWNvbmQpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICAgICAgUGx1Z2luUGFj
a2FnZVdpbiogcGx1Z2luUGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBhY2thZ2Uo
ZnVsbFBhdGgsIGZpbmRGaWxlRGF0YS5mdExhc3RXcml0ZVRpbWUpOwotCi0gICAgICAgICAgICBp
ZiAocGx1Z2luUGFja2FnZSkgewotICAgICAgICAgICAgICAgIHBsdWdpbnMuYWRkKHBsdWdpblBh
Y2thZ2UpOwotCi0gICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1l
LCAibnBkc3BsYXkuZGxsIikpCi0gICAgICAgICAgICAgICAgICAgIG9sZFdNUFBsdWdpbiA9IHBs
dWdpblBhY2thZ2U7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
ZmlsZW5hbWUsICJucC1tc3dtcC5kbGwiKSkKLSAgICAgICAgICAgICAgICAgICAgbmV3V01QUGx1
Z2luID0gcGx1Z2luUGFja2FnZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9IHdoaWxlIChG
aW5kTmV4dEZpbGVXKGhGaW5kLCAmZmluZEZpbGVEYXRhKSAhPSAwKTsKLQotICAgICAgICBGaW5k
Q2xvc2UoaEZpbmQpOwotICAgIH0KLQotICAgIGFkZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtFWV9M
T0NBTF9NQUNISU5FLCBwbHVnaW5zKTsKLSAgICBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVlf
Q1VSUkVOVF9VU0VSLCBwbHVnaW5zKTsKLQotICAgIC8vIElmIGJvdGggdGhlIG9sZCBhbmQgbmV3
IFdNUCBwbHVnaW4gYXJlIHByZXNlbnQgaW4gdGhlIHBsdWdpbnMgc2V0LCAKLSAgICAvLyB3ZSBy
ZW1vdmUgdGhlIG9sZCBvbmUgc28gd2UgZG9uJ3QgZW5kIHVwIGNob29zaW5nIHRoZSBvbGQgb25l
LgotICAgIGlmIChvbGRXTVBQbHVnaW4gJiYgbmV3V01QUGx1Z2luKQotICAgICAgICBwbHVnaW5z
LnJlbW92ZShvbGRXTVBQbHVnaW4pOwotCi0gICAgcmV0dXJuIHBsdWdpbnM7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgVmVjdG9yPGludD4gcGFyc2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYgdmVy
c2lvblN0cmluZykKLXsKLSAgICBWZWN0b3I8aW50PiB2ZXJzaW9uOwotCi0gICAgdW5zaWduZWQg
c3RhcnRQb3MgPSAwOwotICAgIHVuc2lnbmVkIGVuZFBvczsKLSAgICAKLSAgICB3aGlsZSAoc3Rh
cnRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpKSB7Ci0gICAgICAgIGZvciAoZW5kUG9zID0g
c3RhcnRQb3M7IGVuZFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQotICAg
ICAgICAgICAgaWYgKHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0cmlu
Z1tlbmRQb3NdID09ICdfJykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpbnQg
dmVyc2lvbkNvbXBvbmVudCA9IHZlcnNpb25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQ
b3MgLSBzdGFydFBvcykudG9JbnQoKTsKLSAgICAgICAgdmVyc2lvbi5hcHBlbmQodmVyc2lvbkNv
bXBvbmVudCk7Ci0KLSAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOwotICAgIH0KLQotICAg
IHJldHVybiB2ZXJzaW9uOwotfQotCi0vLyBUaGlzIHJldHVybnMgd2hldGhlciB2ZXJzaW9uQSBp
cyBoaWdoZXIgdGhhbiB2ZXJzaW9uQgotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVWZXJzaW9u
cyhjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkEsIGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9u
QikKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVyc2lvbkEuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgaWYgKGkgPj0gdmVyc2lvbkIuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAgICAgaWYgKHZlcnNpb25BW2ldID4gdmVyc2lvbkJbaV0pCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmVyc2lvbkFbaV0gPCB2ZXJzaW9u
QltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBj
b21lIGhlcmUsIHRoZSB2ZXJzaW9ucyBhcmUgZWl0aGVyIHRoZSBzYW1lIG9yIHZlcnNpb25CIGhh
cyBhbiBleHRyYSBjb21wb25lbnQsIGp1c3QgcmV0dXJuIGZhbHNlCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkTW96aWxsYVBsdWdpblBhdGhzKFZlY3RvcjxT
dHJpbmc+JiBwYXRocykKLXsKLSAgICAvLyBFbnVtZXJhdGUgYWxsIE1vemlsbGEgcGx1Z2luIGRp
cmVjdG9yaWVzIGluIHRoZSByZWdpc3RyeQotICAgIEhLRVkga2V5OwotICAgIExPTkcgcmVzdWx0
OwotICAgIAotICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIFRF
WFQoIlNvZnR3YXJlXFxNb3ppbGxhIiksIDAsIEtFWV9SRUFELCAma2V5KTsKLSAgICBpZiAocmVz
dWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgV0NIQVIgbmFtZVsxMjhdOwotICAgICAg
ICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICAgICAgLy8gRW51bWVyYXRlIHN1YmtleXMK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKLSAgICAgICAgICAgIERXT1JEIG5hbWVM
ZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOwotICAgICAgICAgICAgcmVzdWx0ID0g
UmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlm
aWVkKTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uc1BhdGggPSBT
dHJpbmcobmFtZSwgbmFtZUxlbikgKyAiXFxFeHRlbnNpb25zIjsKLSAgICAgICAgICAgIEhLRVkg
ZXh0ZW5zaW9uc0tleTsKLQotICAgICAgICAgICAgLy8gVHJ5IG9wZW5pbmcgdGhlIGtleQotICAg
ICAgICAgICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KGtleSwgZXh0ZW5zaW9uc1BhdGguY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgS0VZX1JFQUQsICZleHRlbnNpb25zS2V5KTsK
LQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gTm93IGdldCB0aGUgcGx1Z2lucyBwYXRoCi0gICAgICAgICAgICAgICAgV0NIQVIg
cGx1Z2luc1BhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgICAgICAgICBEV09SRCBwbHVnaW5z
UGF0aFNpemUgPSBzaXplb2YocGx1Z2luc1BhdGhTdHIpOwotICAgICAgICAgICAgICAgIERXT1JE
IHR5cGU7Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBSZWdRdWVyeVZhbHVlRXgoZXh0ZW5z
aW9uc0tleSwgVEVYVCgiUGx1Z2lucyIpLCAwLCAmdHlwZSwgKExQQllURSkmcGx1Z2luc1BhdGhT
dHIsICZwbHVnaW5zUGF0aFNpemUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBF
UlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAgICAgICAgICAgICAgICAgICBwYXRo
cy5hcHBlbmQoU3RyaW5nKHBsdWdpbnNQYXRoU3RyLCBwbHVnaW5zUGF0aFNpemUgLyBzaXplb2Yo
V0NIQVIpIC0gMSkpOwotCi0gICAgICAgICAgICAgICAgUmVnQ2xvc2VLZXkoZXh0ZW5zaW9uc0tl
eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlZ0Nsb3Nl
S2V5KGtleSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkV2luZG93c01lZGlh
UGxheWVyUGx1Z2luUGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgLy8gVGhlIG5l
dyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1Z2lucyBpZiBp
dCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3RhbGxzCi0gICAgV0NIQVIgcGx1Z2luRGlyZWN0
b3J5U3RyW19NQVhfUEFUSCArIDFdOwotICAgIERXT1JEIHBsdWdpbkRpcmVjdG9yeVNpemUgPSA6
OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxcUEZpbGVzXFxQ
bHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwgX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5U3Ry
KSk7Ci0KLSAgICBpZiAocGx1Z2luRGlyZWN0b3J5U2l6ZSA+IDAgJiYgcGx1Z2luRGlyZWN0b3J5
U2l6ZSA8PSBfY291bnRvZihwbHVnaW5EaXJlY3RvcnlTdHIpKQotICAgICAgICBwYXRocy5hcHBl
bmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAtIDEpKTsK
LQotICAgIERXT1JEIHR5cGU7Ci0gICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyW19N
QVhfUEFUSF07Ci0gICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSA9IHNpemVvZihp
bnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBTSEdldFZh
bHVlKEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1pY3Jvc29mdFxcTWVkaWFQ
bGF5ZXIiKSwgVEVYVCgiSW5zdGFsbGF0aW9uIERpcmVjdG9yeSIpLCAmdHlwZSwgKExQQllURSkm
aW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSk7Ci0K
LSAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCi0gICAg
ICAgIHBhdGhzLmFwcGVuZChTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxs
YXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkIGFkZFF1aWNrVGltZVBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQot
ewotICAgIERXT1JEIHR5cGU7Ci0gICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyW19N
QVhfUEFUSF07Ci0gICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSA9IHNpemVvZihp
bnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOwotCi0gICAgSFJFU1VMVCByZXN1bHQgPSBTSEdldFZh
bHVlKEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFwcGxlIENvbXB1dGVyLCBJ
bmMuXFxRdWlja1RpbWUiKSwgVEVYVCgiSW5zdGFsbERpciIpLCAmdHlwZSwgKExQQllURSkmaW5z
dGFsbGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSk7Ci0KLSAg
ICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opIHsKLSAgICAg
ICAgU3RyaW5nIHBsdWdpbkRpciA9IFN0cmluZyhpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsIGlu
c3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkgKyAiXFxwbHVnaW5z
IjsKLSAgICAgICAgcGF0aHMuYXBwZW5kKHBsdWdpbkRpcik7Ci0gICAgfQotfQotCi1zdGF0aWMg
aW5saW5lIHZvaWQgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0
aHMpCi17Ci0gICAgSEtFWSBrZXk7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXgo
SEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVhZGVy
IiksIDAsIEtFWV9SRUFELCAma2V5KTsKLSAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1Mp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFSIG5hbWVbMTI4XTsKLSAgICBGSUxFVElNRSBs
YXN0TW9kaWZpZWQ7Ci0KLSAgICBWZWN0b3I8aW50PiBsYXRlc3RBY3JvYmF0VmVyc2lvbjsKLSAg
ICBTdHJpbmcgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmc7Ci0KLSAgICAvLyBFbnVtZXJhdGUg
c3Via2V5cwotICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgIERXT1JEIG5hbWVM
ZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOwotICAgICAgICByZXN1bHQgPSBSZWdF
bnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQp
OwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIFZlY3RvcjxpbnQ+IGFjcm9iYXRWZXJzaW9uID0gcGFyc2VWZXJzaW9u
U3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7Ci0gICAgICAgIGlmIChjb21wYXJlVmVyc2lv
bnMoYWNyb2JhdFZlcnNpb24sIGxhdGVzdEFjcm9iYXRWZXJzaW9uKSkgewotICAgICAgICAgICAg
bGF0ZXN0QWNyb2JhdFZlcnNpb24gPSBhY3JvYmF0VmVyc2lvbjsKLSAgICAgICAgICAgIGxhdGVz
dEFjcm9iYXRWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKCFsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZy5pc051bGwoKSkg
ewotICAgICAgICBEV09SRCB0eXBlOwotICAgICAgICBXQ0hBUiBhY3JvYmF0SW5zdGFsbFBhdGhT
dHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSA9IHNp
emVvZihhY3JvYmF0SW5zdGFsbFBhdGhTdHIpOwotCi0gICAgICAgIFN0cmluZyBhY3JvYmF0UGx1
Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVhZGVyXFwiICsgbGF0ZXN0
QWNyb2JhdFZlcnNpb25TdHJpbmcgKyAiXFxJbnN0YWxsUGF0aCI7Ci0gICAgICAgIHJlc3VsdCA9
IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBhY3JvYmF0UGx1Z2luS2V5UGF0aC5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCAmdHlwZSwgKExQQllURSlhY3JvYmF0SW5z
dGFsbFBhdGhTdHIsICZhY3JvYmF0SW5zdGFsbFBhdGhTaXplKTsKLQotICAgICAgICBpZiAocmVz
dWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIFN0cmluZyBhY3JvYmF0UGx1Z2lu
UGF0aCA9IFN0cmluZyhhY3JvYmF0SW5zdGFsbFBhdGhTdHIsIGFjcm9iYXRJbnN0YWxsUGF0aFNp
emUgLyBzaXplb2YoV0NIQVIpIC0gMSkgKyAiXFxicm93c2VyIjsKLSAgICAgICAgICAgIHBhdGhz
LmFwcGVuZChhY3JvYmF0UGx1Z2luUGF0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZWdD
bG9zZUtleShrZXkpOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBzYWZhcmlQbHVnaW5zUGF0
aCgpCi17Ci0gICAgV0NIQVIgbW9kdWxlRmlsZU5hbWVTdHJbX01BWF9QQVRIXTsKLSAgICBzdGF0
aWMgU3RyaW5nIHBsdWdpbnNQYXRoOwotICAgIHN0YXRpYyBib29sIGNhY2hlZFBsdWdpblBhdGgg
PSBmYWxzZTsKLQotICAgIGlmICghY2FjaGVkUGx1Z2luUGF0aCkgewotICAgICAgICBjYWNoZWRQ
bHVnaW5QYXRoID0gdHJ1ZTsKLQotICAgICAgICBpbnQgbW9kdWxlRmlsZU5hbWVMZW4gPSBHZXRN
b2R1bGVGaWxlTmFtZSgwLCBtb2R1bGVGaWxlTmFtZVN0ciwgX01BWF9QQVRIKTsKLQotICAgICAg
ICBpZiAoIW1vZHVsZUZpbGVOYW1lTGVuIHx8IG1vZHVsZUZpbGVOYW1lTGVuID09IF9NQVhfUEFU
SCkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBpZiAoIVBhdGhSZW1vdmVGaWxl
U3BlYyhtb2R1bGVGaWxlTmFtZVN0cikpCi0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICAg
ICAgcGx1Z2luc1BhdGggPSBTdHJpbmcobW9kdWxlRmlsZU5hbWVTdHIpICsgIlxcUGx1Z2lucyI7
Ci0gICAgfQotZXhpdDoKLSAgICByZXR1cm4gcGx1Z2luc1BhdGg7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQot
ewotICAgIFdDSEFSIHN5c3RlbURpcmVjdG9yeVN0cltNQVhfUEFUSF07Ci0KLSAgICBpZiAoR2V0
U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwgX2NvdW50b2Yoc3lzdGVtRGlyZWN0
b3J5U3RyKSkgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV0NIQVIgbWFjcm9tZWRpYURp
cmVjdG9yeVN0cltNQVhfUEFUSF07Ci0KLSAgICBQYXRoQ29tYmluZShtYWNyb21lZGlhRGlyZWN0
b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxGbGFzaCIpKTsKLSAg
ICBwYXRocy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7Ci0KLSAgICBQYXRoQ29tYmlu
ZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1hY3Jv
bWVkXFxTaG9ja3dhdmUgMTAiKSk7Ci0gICAgcGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3Rv
cnlTdHIpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZVdpbjo6ZGVmYXVsdFBs
dWdpblBhdGhzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKLSAgICBTdHJpbmcgb3Vy
UGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7Ci0KLSAgICBpZiAoIW91clBhdGguaXNOdWxsKCkp
Ci0gICAgICAgIHBhdGhzLmFwcGVuZChvdXJQYXRoKTsKLSAgICBhZGRRdWlja1RpbWVQbHVnaW5Q
YXRoKHBhdGhzKTsKLSAgICBhZGRBZG9iZUFjcm9iYXRQbHVnaW5QYXRoKHBhdGhzKTsKLSAgICBh
ZGRNb3ppbGxhUGx1Z2luUGF0aHMocGF0aHMpOwotICAgIGFkZFdpbmRvd3NNZWRpYVBsYXllclBs
dWdpblBhdGgocGF0aHMpOwotICAgIGFkZE1hY3JvbWVkaWFQbHVnaW5QYXRocyhwYXRocyk7Ci0K
LSAgICByZXR1cm4gcGF0aHM7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2VXaW46OmlzTUlNRVR5
cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVUeXBl
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fcmVnaXN0ZXJlZE1J
TUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8v
IE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2Vh
cmNoaW5nIGFnYWluCi0gICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5
cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSk7Ci19Ci0KLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpbkRh
dGFiYXNlV2luOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorUGx1
Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCiB7CiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKLSAgICBTdHJpbmcg
b3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1
Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAwOwogICAgIFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwogCiAgICAgZm9yIChQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtl
eSkpIHsKICAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOwotICAgICAgICAgICAgLy8g
cHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQotICAgICAgICAgICAg
aWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAgICAgICAgIGlm
IChpc1ByZWZlcnJlZFBsdWdpblBhdGgocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC00NjcsMTUgKzE0NywxNCBA
QCBQbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6cGx1CiAgICAgcmV0dXJuIHBs
dWdpbjsKIH0KIAotU3RyaW5nIFBsdWdpbkRhdGFiYXNlV2luOjpNSU1FVHlwZUZvckV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QKK1N0cmluZyBQbHVnaW5EYXRhYmFzZTo6
TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0CiB7CiAg
ICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAog
ICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAg
IFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKICAgICBTdHJpbmcgbWltZVR5
cGU7Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdl
KiBwbHVnaW4gPSAwOwogCiAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBNSU1FVG9FeHRl
bnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNp
b25zKCkuZW5kKCk7CkBAIC00ODYsOCArMTY1LDcgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlV2lu
OjpNSU1FVHlwZUZvckV4dAogICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShl
eHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBl
ID0gbWltZV9pdC0+Zmlyc3Q7CiAgICAgICAgICAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdl
dCgpOwotICAgICAgICAgICAgICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBpbiBvdXIgb3duIHBs
dWdpbnMgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4tPnBhcmVudERp
cmVjdG9yeSgpID09IG91clBhdGgpCisgICAgICAgICAgICAgICAgICAgIGlmIChpc1ByZWZlcnJl
ZFBsdWdpblBhdGgocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00OTcs
OSArMTc1LDkgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlV2luOjpNSU1FVHlwZUZvckV4dAogICAg
IHJldHVybiBtaW1lVHlwZTsKIH0KIAotUGx1Z2luUGFja2FnZVdpbiogUGx1Z2luRGF0YWJhc2VX
aW46OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBlKQorUGx1Z2lu
UGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJp
bmcmIG1pbWVUeXBlKQogeyAgIAotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IHBsdWdp
bkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBwbHVn
aW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CiAgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLnN0cmlu
ZygpOwogICAgIAogICAgIGlmICghcGx1Z2luKSB7CkBAIC01MjEsMjAgKzE5OSw0IEBAIFBsdWdp
blBhY2thZ2VXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpmaW4KICAgICByZXR1cm4gcGx1Z2luOwog
fQogCi1QbHVnaW5WaWV3V2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6Y3JlYXRlUGx1Z2luVmlldyhG
cmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9v
bCBsb2FkTWFudWFsbHkpCi17Ci0gICAgLy8gaWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1Z2luIGZv
ciB0aGlzIE1JTUUgdHlwZSwgZmluZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IKLSAgICAvLyBhIHBs
dWdpbiBieSB0aGUgZmlsZSBleHRlbnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBlLCBzbyBw
YXNzIGEgbXV0YWJsZSBTdHJpbmcKLSAgICBTdHJpbmcgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7
Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBl
Q29weSk7Ci0gICAgCi0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcg
dGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICBpZiAoIXBsdWdpbiAmJiByZWZy
ZXNoKCkpIHsKLSAgICAgICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7Ci0gICAgICAgIHBsdWdp
biA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOwotICAgIH0KLSAgICAgICAgCi0gICAg
cmV0dXJuIG5ldyBQbHVnaW5WaWV3V2luKHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVsZW1l
bnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9hZE1hbnVh
bGx5KTsKLX0KLQogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHJldmlzaW9uIDI5
NjI2KQkoZnJvbSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmg6Mjk2MjYp
CisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luRGF0YWJhc2VXaW5f
SAorI2RlZmluZSBQbHVnaW5EYXRhYmFzZVdpbl9ICisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJh
bWU7CisgICAgY2xhc3MgSW50U2l6ZTsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBsdWdp
blBhY2thZ2VXaW47CisgICAgY2xhc3MgUGx1Z2luVmlld1dpbjsKKworICAgIHR5cGVkZWYgSGFz
aFNldDxSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4sIFBsdWdpblBhY2thZ2VXaW5IYXNoPiBQbHVn
aW5TZXQ7CisgIAorICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlV2luIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZVdpbiogaW5zdGFsbGVkUGx1Z2lucygpOworICAg
ICAgICBQbHVnaW5WaWV3V2luKiBjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwg
Y29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZh
bHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworCisgICAg
ICAgIGJvb2wgcmVmcmVzaCgpOworICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IHBs
dWdpbnMoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgdm9pZCBhZGRFeHRyYVBsdWdpblBhdGgoY29uc3Qg
U3RyaW5nJik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRQbHVnaW5QYXRocyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsgbV9wbHVnaW5QYXRocyA9IHBhdGhzOyB9CisgICAg
ICAgIFBsdWdpblNldCBnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0OworCisgICAgICAgIFBsdWdp
blBhY2thZ2VXaW4qIGZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBl
KTsKKyAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSk7CisgICAgICAgIFN0cmluZyBNSU1FVHlwZUZvckV4dGVuc2lvbihjb25z
dCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3Q7CisKKyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IGRlZmF1bHRQbHVnaW5QYXRocygpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fcGx1
Z2luUGF0aHM7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXM7
CisgICAgICAgIFBsdWdpblNldCBtX3BsdWdpbnM7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCShyZXZpc2lv
biAyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjMsNDEgKzI0LDQxIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIFBsdWdpbkRhdGFiYXNlV2luX0gKLSNkZWZpbmUgUGx1Z2luRGF0YWJhc2VXaW5fSAotCi0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaWZuZGVm
IFBsdWdpbkRhdGFiYXNlX0gKKyNkZWZpbmUgUGx1Z2luRGF0YWJhc2VfSAogCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisjaW5jbHVk
ZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKIAorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgRWxlbWVudDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBJ
bnRTaXplOwogICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgUGx1Z2luUGFja2FnZVdpbjsKLSAg
ICBjbGFzcyBQbHVnaW5WaWV3V2luOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2U7CiAKLSAgICB0
eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+LCBQbHVnaW5QYWNrYWdlV2lu
SGFzaD4gUGx1Z2luU2V0OworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UGx1Z2luUGFja2Fn
ZT4sIFBsdWdpblBhY2thZ2VIYXNoPiBQbHVnaW5TZXQ7CiAgIAotICAgIGNsYXNzIFBsdWdpbkRh
dGFiYXNlV2luIHsKKyAgICBjbGFzcyBQbHVnaW5EYXRhYmFzZSB7CiAgICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VXaW4qIGluc3RhbGxlZFBsdWdpbnMoKTsKLSAgICAg
ICAgUGx1Z2luVmlld1dpbiogY3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNv
bnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKyAgICAgICAg
c3RhdGljIFBsdWdpbkRhdGFiYXNlKiBpbnN0YWxsZWRQbHVnaW5zKCk7CiAKICAgICAgICAgYm9v
bCByZWZyZXNoKCk7Ci0gICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gcGx1Z2lucygp
IGNvbnN0OworICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IHBsdWdpbnMoKSBjb25zdDsK
ICAgICAgICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KTsKICAgICAgICAgdm9pZCBhZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJik7CisgICAg
ICAgIGJvb2wgaXNQcmVmZXJyZWRQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3Q7
CisKKyAgICAgICAgUGx1Z2luUGFja2FnZSogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIFN0
cmluZyYgbWltZVR5cGUpOwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0UGx1Z2luUGF0
aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1fcGx1Z2luUGF0aHMgPSBwYXRoczsg
fQogICAgICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdDsKIAotICAgICAg
ICBQbHVnaW5QYWNrYWdlV2luKiBmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBt
aW1lVHlwZSk7Ci0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbkZvck1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5Gb3JN
SU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKICAgICAgICAgU3RyaW5nIE1JTUVUeXBl
Rm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdDsKIAogICAgICAgICBz
dGF0aWMgVmVjdG9yPFN0cmluZz4gZGVmYXVsdFBsdWdpblBhdGhzKCk7CkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luSW5mb1N0b3JlLmNwcAkocmV2aXNpb24gMjk2MjYpCShmcm9tIFdlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z0luSW5mb1N0b3JlV2luLmNwcDoyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5JbmZvU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdJbkluZm9T
dG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2lu
UGFja2FnZVdpbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkluZm8qIFBsdWdJ
bkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQgaSkg
Cit7IAorICAgIFBsdWdpbkRhdGFiYXNlV2luICpkYiA9IFBsdWdpbkRhdGFiYXNlV2luOjppbnN0
YWxsZWRQbHVnaW5zKCk7CisgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5JbmZvOwor
ICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBkYi0+cGx1Z2lucygpW2ldOworCisgICAg
aW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICBpbmZvLT5maWxlID0gcGFja2FnZS0+
ZmlsZU5hbWUoKTsKKyAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsKKwor
ICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFj
a2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CisgICAgZm9yIChN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRp
b25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNaW1lQ2xhc3NJbmZvKiBt
aW1lID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgIGluZm8tPm1pbWVzLmFwcGVuZChtaW1l
KTsKKyAgICAgICAgCisgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgIG1p
bWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICBtaW1lLT5wbHVnaW4gPSBpbmZvOworCisg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNp
b25zKCkuZ2V0KG1pbWUtPnR5cGUpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpID4g
MCkKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSAiLCI7CisKKyAgICAgICAgICAg
IG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gaW5mbzsKK30KKwordW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3Vu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVn
aW5zKCktPnBsdWdpbnMoKS5zaXplKCk7Cit9CisKKworU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6
cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8g
RklYTUUgNTYyOTEzOTogSW1wbGVtZW50IHRoaXMgbWV0aG9kIG9uIFdpbmRvd3MuCisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCisgICAgCitib29sIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNN
SU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBlKSAKK3sKKyAgICByZXR1cm4g
UGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVy
ZWQobWltZVR5cGUpOworfQorCit2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkT3BlblBh
Z2VzKQoreworICAgIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJl
c2goKTsKKworICAgIGlmIChyZWxvYWRPcGVuUGFnZXMpIHsKKyAgICAgICAgLy8gRklYTUU6IHJl
bG9hZCBvcGVuIHBhZ2VzCisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luSW5mb1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5m
b1N0b3JlLmNwcAkocmV2aXNpb24gMjk2MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5m
b1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDE2ICsyNiwxNiBAQAogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAi
UGx1Z2luRGF0YWJhc2VXaW4uaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisjaW5j
bHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQ
bHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKSAKIHsgCi0gICAgUGx1Z2luRGF0
YWJhc2VXaW4gKmRiID0gUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAg
ICBQbHVnaW5EYXRhYmFzZSAqZGIgPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygp
OwogICAgIFBsdWdpbkluZm8qIGluZm8gPSBuZXcgUGx1Z2luSW5mbzsKLSAgICBQbHVnaW5QYWNr
YWdlV2luKiBwYWNrYWdlID0gZGItPnBsdWdpbnMoKVtpXTsKKyAgICBQbHVnaW5QYWNrYWdlKiBw
YWNrYWdlID0gZGItPnBsdWdpbnMoKVtpXTsKIAogICAgIGluZm8tPm5hbWUgPSBwYWNrYWdlLT5u
YW1lKCk7CiAgICAgaW5mby0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CkBAIC02NSwyNSAr
NjYsMjUgQEAgUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaQogCiB1bnNp
Z25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
UGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsK
KyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygp
LnNpemUoKTsKIH0KIAogCiBTdHJpbmcgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICAvLyBGSVhNRSA1NjI5MTM5OiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2Qgb24gV2luZG93cy4KKyAgICAvLyBGSVhNRSA1NjI5MTM5OiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QuCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiAgICAgCiBi
b29sIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJp
bmcmIG1pbWVUeXBlKSAKIHsKLSAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxl
ZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpOworICAgIHJldHVybiBQ
bHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJlZCht
aW1lVHlwZSk7CiB9CiAKIHZvaWQgcmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWRPcGVuUGFnZXMp
CiB7Ci0gICAgUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgp
OworICAgIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKIAog
ICAgIGlmIChyZWxvYWRPcGVuUGFnZXMpIHsKICAgICAgICAgLy8gRklYTUU6IHJlbG9hZCBvcGVu
IHBhZ2VzCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCShyZXZpc2lvbiAyOTYyNikJ
KGZyb20gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcDoyOTYyNikKKysr
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSA8c2hsd2FwaS5oPgorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1BsdWdpblBhY2thZ2VXaW46On5QbHVnaW5QYWNrYWdlV2luKCkKK3sKKyAgICBB
U1NFUlQoIW1faXNMb2FkZWQpOworfQorCitzdGF0aWMgU3RyaW5nIGdldFZlcnNpb25JbmZvKGNv
bnN0IExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEsIGNvbnN0IFN0cmluZyYgaW5mbykKK3sKKyAgICBM
UFZPSUQgYnVmZmVyOworICAgIFVJTlQgYnVmZmVyTGVuZ3RoOworICAgIFN0cmluZyBzdWJJbmZv
ID0gIlxcU3RyaW5nZmlsZUluZm9cXDA0MDkwNEU0XFwiICsgaW5mbzsKKworICAgIGJvb2wgcmV0
dmFsID0gVmVyUXVlcnlWYWx1ZVcodmVyc2lvbkluZm9EYXRhLCBjb25zdF9jYXN0PFVDaGFyKj4o
c3ViSW5mby5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmYnVmZmVyLCAmYnVmZmVyTGVuZ3RoKTsKKyAgICBpZiAoIXJl
dHZhbCB8fCBidWZmZXJMZW5ndGggPT0gMCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisg
ICAgLy8gU3VidHJhY3QgMSBmcm9tIHRoZSBsZW5ndGg7IHdlIGRvbid0IHdhbnQgdGhlIHRyYWls
aW5nIDAKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIp
LCBidWZmZXJMZW5ndGggLSAxKTsKK30KKworc3RhdGljIFZlY3RvcjxTdHJpbmc+IHNwbGl0U3Ry
aW5nKGNvbnN0IFN0cmluZyYgc3RyLCBjaGFyIGRlbGltaXRlciwgaW50IHBhZFRvKQoreworICAg
IGludCBwb3MgPSAwOworICAgIGludCBuZXdQb3M7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0
OworICAgIERlcHJlY2F0ZWRTdHJpbmcgZHMgPSBzdHIuZGVwcmVjYXRlZFN0cmluZygpOworICAg
IFN0cmluZyBzOworICAgIGRvIHsKKworICAgICAgICBuZXdQb3MgPSBkcy5maW5kKGRlbGltaXRl
ciwgcG9zKTsKKworICAgICAgICBpZiAobmV3UG9zID09IC0xKQorICAgICAgICAgICAgcyA9IGRz
Lm1pZChwb3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzID0gZHMubWlkKHBvcywgbmV3
UG9zIC0gcG9zKTsKKyAgICAgICAgCisgICAgICAgIGlmICghcy5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHMpOworCisgICAgICAgIHBvcyA9IG5ld1BvcyArIDE7CisgICAg
fSB3aGlsZSAobmV3UG9zICE9IC0xKTsKKworICAgIHdoaWxlIChwYWRUbyAhPSAtMSAmJiBzdGF0
aWNfY2FzdDxpbnQ+KHJlc3VsdC5zaXplKCkpIDwgcGFkVG8pCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoIiIpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlV2lu
OjpmcmVlTGlicmFyeVNvb24oKQoreworICAgIEFTU0VSVCghbV9mcmVlTGlicmFyeVRpbWVyLmlz
QWN0aXZlKCkpOworICAgIEFTU0VSVChtX21vZHVsZSk7CisgICAgQVNTRVJUKG1fbG9hZENvdW50
ID09IDApOworCisgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwor
dm9pZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2lu
UGFja2FnZVdpbj4qIC8qdGltZXIqLykKK3sKKyAgICBBU1NFUlQobV9tb2R1bGUpOworICAgIEFT
U0VSVChtX2xvYWRDb3VudCA9PSAwKTsKKworICAgIDo6RnJlZUxpYnJhcnkobV9tb2R1bGUpOwor
ICAgIG1fbW9kdWxlID0gMDsKK30KKworUGx1Z2luUGFja2FnZVdpbjo6UGx1Z2luUGFja2FnZVdp
bihjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpCisgICAg
OiBtX3BhdGgocGF0aCkKKyAgICAsIG1fbW9kdWxlKDApCisgICAgLCBtX2xhc3RNb2RpZmllZChs
YXN0TW9kaWZpZWQpCisgICAgLCBtX2lzTG9hZGVkKGZhbHNlKQorICAgICwgbV9sb2FkQ291bnQo
MCkKKyAgICAsIG1fZnJlZUxpYnJhcnlUaW1lcih0aGlzLCAmUGx1Z2luUGFja2FnZVdpbjo6ZnJl
ZUxpYnJhcnlUaW1lckZpcmVkKQorICAgICwgbV9maWxlVmVyc2lvbkxTKDApCisgICAgLCBtX2Zp
bGVWZXJzaW9uTVMoMCkKK3sKKyAgICBtX2ZpbGVOYW1lID0gU3RyaW5nKFBhdGhGaW5kRmlsZU5h
bWUobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpKTsKKyAgICBtX3BhcmVu
dERpcmVjdG9yeSA9IG1fcGF0aC5sZWZ0KG1fcGF0aC5sZW5ndGgoKSAtIG1fZmlsZU5hbWUubGVu
Z3RoKCkgLSAxKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlV2luOjpzdG9yZUZpbGVWZXJzaW9u
KExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpCit7CisgICAgVlNfRklYRURGSUxFSU5GTyogaW5mbzsK
KyAgICBVSU5UIGluZm9TaXplOworICAgIGlmICghVmVyUXVlcnlWYWx1ZSh2ZXJzaW9uSW5mb0Rh
dGEsIFRFWFQoIlxcIiksIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8
IHNpemVvZihWU19GSVhFREZJTEVJTkZPKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZmlsZVZl
cnNpb25MUyA9IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKKyAgICBtX2ZpbGVWZXJzaW9uTVMgPSBp
bmZvLT5kd0ZpbGVWZXJzaW9uTVM7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZVdpbjo6aXNQbHVn
aW5CbGFja2xpc3RlZCgpCit7CisgICAgc3RhdGljIGNvbnN0IERXT1JEIHNpbHZlcmxpZ2h0UGx1
Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCA9IDB4MDAwMTAwMDA7CisgICAgc3RhdGljIGNv
bnN0IERXT1JEIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFNEV09SRCA9IDB4
NTFCRTAwMDA7CisKKyAgICBpZiAobmFtZSgpID09ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgewor
ICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRhcjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZl
cmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQuY29tLgorICAgICAgICAvLyB0aGUgbGF0ZXN0
IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNo
LCBzbyBhbGxvdyBpdAorICAgICAgICAvLyBhbmQgYW55IG5ld2VyIHZlcnNpb25zCisgICAgICAg
IGlmIChtX2ZpbGVWZXJzaW9uTVMgPCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lv
bk1TRFdPUkQgfHwKKyAgICAgICAgICAgIChtX2ZpbGVWZXJzaW9uTVMgPT0gc2lsdmVybGlnaHRQ
bHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEICYmIG1fZmlsZVZlcnNpb25MUyA8IHNpbHZl
cmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFNEV09SRCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGZpbGVOYW1lKCkgPT0gIm5wbW96YXguZGxsIikKKyAg
ICAgICAgLy8gQnVnIDE1MjE3OiBNb3ppbGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMgYWJv
dXQgbWlzc2luZyB4cGNvbV9jb3JlLmRsbAorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpmZXRjaEluZm8oKQorewor
ICAgIERXT1JEIHZlcnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsKKyAgICB2ZXJzaW9uSW5mb1Np
emUgPSBHZXRGaWxlVmVyc2lvbkluZm9TaXplVyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKSwgJnplcm9IYW5kbGUpOyAKKworICAgIGlmICh2ZXJzaW9uSW5mb1NpemUgPT0g
MCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSA9
IGZhc3RNYWxsb2ModmVyc2lvbkluZm9TaXplKTsKKworICAgIGlmICghR2V0RmlsZVZlcnNpb25J
bmZvVyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgdmVyc2lvbklu
Zm9TaXplLCB2ZXJzaW9uSW5mb0RhdGEpKSB7CisgICAgICAgIGZhc3RGcmVlKHZlcnNpb25JbmZv
RGF0YSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX25hbWUgPSBnZXRW
ZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJQcm9kdWN0TmFtZSIpOworICAgIG1fZGVzY3Jp
cHRpb24gPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJGaWxlRGVzY3JpcHRpb24i
KTsKKworICAgIGlmIChtX25hbWUuaXNOdWxsKCkgfHwgbV9kZXNjcmlwdGlvbi5pc051bGwoKSkg
eworICAgICAgICBmYXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgc3RvcmVGaWxlVmVyc2lvbih2ZXJzaW9uSW5mb0RhdGEpOworCisg
ICAgaWYgKGlzUGx1Z2luQmxhY2tsaXN0ZWQoKSkgeworICAgICAgICBmYXN0RnJlZSh2ZXJzaW9u
SW5mb0RhdGEpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVmVjdG9yPFN0
cmluZz4gbWltZVR5cGVzID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9E
YXRhLCAiTUlNRVR5cGUiKSwgJ3wnLCAtMSk7CisgICAgVmVjdG9yPFN0cmluZz4gZmlsZUV4dGVu
dHMgPSBzcGxpdFN0cmluZyhnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJGaWxlRXh0
ZW50cyIpLCAnfCcsIG1pbWVUeXBlcy5zaXplKCkpOworICAgIFZlY3RvcjxTdHJpbmc+IGRlc2Ny
aXB0aW9ucyA9IHNwbGl0U3RyaW5nKGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIkZp
bGVPcGVuTmFtZSIpLCAnfCcsIG1pbWVUeXBlcy5zaXplKCkpOworCisgICAgZmFzdEZyZWUodmVy
c2lvbkluZm9EYXRhKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lVHlwZXMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgLy8gR2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxpc3Qg
aW4gdGhlIGRlc2NyaXB0aW9uIHN0cmluZworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBk
ZXNjcmlwdGlvbnNbaV07ICAgIAorICAgICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24uZmluZCgi
KCoiKTsKKyAgICAgICAgaWYgKHBvcyAhPSAtMSkgeworICAgICAgICAgICAgLy8gVGhlcmUgbWln
aHQgYmUgYSBzcGFjZSB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZgorICAgICAgICAgICAgaWYg
KHBvcyA+IDEgJiYgZGVzY3JpcHRpb25bcG9zIC0gMV0gPT0gJyAnKQorICAgICAgICAgICAgICAg
IHBvcy0tOworCisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmxlZnQocG9z
KTsKKyAgICAgICAgfQorCisgICAgICAgIG1pbWVUeXBlc1tpXSA9IG1pbWVUeXBlc1tpXS5sb3dl
cigpOworCisgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZVR5cGVzW2ldLCBzcGxp
dFN0cmluZyhmaWxlRXh0ZW50c1tpXSwgJywnLCAtMSkpOworICAgICAgICBtX21pbWVUb0Rlc2Ny
aXB0aW9ucy5hZGQobWltZVR5cGVzW2ldLCBkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZVdpbjo6bG9hZCgpCit7CisgICAgaWYg
KG1fZnJlZUxpYnJhcnlUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIEFTU0VSVChtX21vZHVs
ZSk7CisgICAgICAgIG1fZnJlZUxpYnJhcnlUaW1lci5zdG9wKCk7CisgICAgfSBlbHNlIGlmICht
X2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0gZWxzZSB7CisgICAgICAgIFdDSEFSIGN1cnJlbnRQYXRoW01BWF9QQVRIXTsKKwor
ICAgICAgICBpZiAoITo6R2V0Q3VycmVudERpcmVjdG9yeVcoTUFYX1BBVEgsIGN1cnJlbnRQYXRo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBTdHJpbmcgcGF0aCA9IG1f
cGF0aC5zdWJzdHJpbmcoMCwgbV9wYXRoLnJldmVyc2VGaW5kKCdcXCcpKTsKKworICAgICAgICBp
ZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVcocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBMb2FkIHRo
ZSBsaWJyYXJ5CisgICAgICAgIG1fbW9kdWxlID0gOjpMb2FkTGlicmFyeVcobV9wYXRoLmNoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOworCisgICAgICAgIGlmICghOjpTZXRDdXJyZW50
RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsKKyAgICAgICAgICAgIGlmIChtX21vZHVsZSkKKyAg
ICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9tb2R1bGUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfR2V0RW50
cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0gMDsKKyAgICBOUF9Jbml0aWFsaXpl
RnVuY1B0ciBOUF9Jbml0aWFsaXplID0gMDsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAgTlBf
SW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVs
ZSwgIk5QX0luaXRpYWxpemUiKTsKKyAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRy
eVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBvaW50
cyIpOworICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0Fk
ZHJlc3MobV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOworCisgICAgaWYgKCFOUF9Jbml0aWFsaXpl
IHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAhbV9OUFBfU2h1dGRvd24pCisgICAgICAgIGdvdG8g
YWJvcnQ7CisgIAorICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2lu
RnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7
CisKKyAgICBucEVyciA9IE5QX0dldEVudHJ5UG9pbnRzKCZtX3BsdWdpbkZ1bmNzKTsKKyAgICBM
T0dfTlBFUlJPUihucEVycik7CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAg
ICAgICBnb3RvIGFib3J0OworCisgICAgbWVtc2V0KCZtX2Jyb3dzZXJGdW5jcywgMCwgc2l6ZW9m
KG1fYnJvd3NlckZ1bmNzKSk7CisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAobV9i
cm93c2VyRnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01J
Tk9SOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93
c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVl
c3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9
IE5QTl9OZXdTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7Cisg
ICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAg
IG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3Mu
dWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5Q
Tl9NZW1BbGxvYzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7Cisg
ICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2Vy
RnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1
bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3Mu
cG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHZhbHVlID0gTlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBO
X1NldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFs
aWRhdGVSZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52
YWxpZGF0ZVJlZ2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3Jj
ZVJlZHJhdzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAg
bV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5h
YmxlZFN0YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5Q
Tl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFy
aWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNz
LmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7CisgICAgbV9i
cm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZp
ZXJzOworICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElk
ZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9J
ZGVudGlmaWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVy
ID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaW50ZnJvbWlk
ZW50aWZpZXIgPSBfTlBOX0ludEZyb21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmNy
ZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJldGFp
bm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2Vv
YmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0g
X05QTl9JbnZva2U7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52
b2tlRGVmYXVsdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5OworICAg
IG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CisgICAgbV9i
cm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc01ldGhvZDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc1Byb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNl
dGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmVudW1l
cmF0ZSA9IF9OUE5fRW51bWVyYXRlOworCisgICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jy
b3dzZXJGdW5jcyk7CisgICAgTE9HX05QRVJST1IobnBFcnIpOworCisgICAgaWYgKG5wRXJyICE9
IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQr
KzsKKyAgICByZXR1cm4gdHJ1ZTsKK2Fib3J0OgorICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigp
OworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxvYWQo
KQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKC0t
bV9sb2FkQ291bnQgPiAwKQorICAgICAgICByZXR1cm47CisKKyAgICBtX05QUF9TaHV0ZG93bigp
OworCisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2Fn
ZVdpbjo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsKKyAgICBBU1NF
UlQobV9tb2R1bGUpOworCisgICAgLy8gPHJkYXI6Ly81NTMwNTE5PjogQ3Jhc2ggd2hlbiBjbG9z
aW5nIHRhYiB3aXRoIHBkZiBmaWxlIChSZWFkZXIgNyBvbmx5KQorICAgIC8vIElmIHRoZSBwbHVn
aW4gaGFzIHN1YmNsYXNzZWQgaXRzIHBhcmVudCB3aW5kb3csIGFzIHdpdGggUmVhZGVyIDcsIHdl
IG1heSBoYXZlCisgICAgLy8gZ290dGVuIGhlcmUgYnkgd2F5IG9mIHRoZSBwbHVnaW4ncyBpbnRl
cm5hbCB3aW5kb3cgcHJvYyBmb3J3YXJkaW5nIGEgbWVzc2FnZSB0byBvdXIKKyAgICAvLyBvcmln
aW5hbCB3aW5kb3cgcHJvYy4gSWYgd2UgZnJlZSB0aGUgcGx1Z2luIGxpYnJhcnkgZnJvbSBoZXJl
LCB3ZSB3aWxsIGp1bXAgYmFjaworICAgIC8vIHRvIGNvZGUgd2UganVzdCBmcmVlZCB3aGVuIHdl
IHJldHVybiwgc28gZGVsYXkgY2FsbGluZyBGcmVlTGlicmFyeSBhdCBsZWFzdCB1bnRpbAorICAg
IC8vIHRoZSBuZXh0IG1lc3NhZ2UgbG9vcAorICAgIGZyZWVMaWJyYXJ5U29vbigpOworCisgICAg
bV9pc0xvYWRlZCA9IGZhbHNlOworfQorCitQbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5QYWNrYWdl
V2luOjpjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxh
c3RNb2RpZmllZCkKK3sKKyAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gbmV3IFBsdWdp
blBhY2thZ2VXaW4ocGF0aCwgbGFzdE1vZGlmaWVkKTsKKworICAgIGlmICghcGFja2FnZS0+ZmV0
Y2hJbmZvKCkpIHsKKyAgICAgICAgZGVsZXRlIHBhY2thZ2U7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gcGFja2FnZTsKK30KKwordW5zaWduZWQgUGx1Z2luUGFj
a2FnZVdpbjo6aGFzaCgpIGNvbnN0Cit7IAorICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1szXSA9IHsK
KyAgICAgICAgbV9kZXNjcmlwdGlvbi5pbXBsKCktPmhhc2goKSwKKyAgICAgICAgbV9sYXN0TW9k
aWZpZWQuZHdMb3dEYXRlVGltZSwKKyAgICAgICAgbV9sYXN0TW9kaWZpZWQuZHdIaWdoRGF0ZVRp
bWUKKyAgICB9OworCisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJw
cmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCAzICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVv
ZihVQ2hhcikpOworfQorCitib29sIFBsdWdpblBhY2thZ2VXaW46OmVxdWFsKGNvbnN0IFBsdWdp
blBhY2thZ2VXaW4mIGEsIGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGIpCit7CisgICAgcmV0dXJu
IGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb24gJiYgKENvbXBhcmVGaWxlVGltZSgm
YS5tX2xhc3RNb2RpZmllZCwgJmIubV9sYXN0TW9kaWZpZWQpID09IDApOworfQorCit9CkluZGV4
OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCShyZXZpc2lvbiAyOTYyNikKKysrIFdlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDEwICsy
NCw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaW5jbHVkZSA8c2hsd2FwaS5oPgotCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1
ZGUgIlBsdWdpblBhY2thZ2UuaCIKIAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiRGVw
cmVjYXRlZFN0cmluZy5oIgpAQCAtMzUsNTUgKzM0LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGx1Z2luUGFja2FnZVdpbjo6flBsdWdpblBhY2thZ2VXaW4oKQorUGx1Z2luUGFja2Fn
ZTo6flBsdWdpblBhY2thZ2UoKQogewogICAgIEFTU0VSVCghbV9pc0xvYWRlZCk7CiB9CiAKLXN0
YXRpYyBTdHJpbmcgZ2V0VmVyc2lvbkluZm8oY29uc3QgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSwg
Y29uc3QgU3RyaW5nJiBpbmZvKQotewotICAgIExQVk9JRCBidWZmZXI7Ci0gICAgVUlOVCBidWZm
ZXJMZW5ndGg7Ci0gICAgU3RyaW5nIHN1YkluZm8gPSAiXFxTdHJpbmdmaWxlSW5mb1xcMDQwOTA0
RTRcXCIgKyBpbmZvOwotCi0gICAgYm9vbCByZXR2YWwgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9u
SW5mb0RhdGEsIGNvbnN0X2Nhc3Q8VUNoYXIqPihzdWJJbmZvLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZmZXIs
ICZidWZmZXJMZW5ndGgpOwotICAgIGlmICghcmV0dmFsIHx8IGJ1ZmZlckxlbmd0aCA9PSAwKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAvLyBTdWJ0cmFjdCAxIGZyb20gdGhlIGxl
bmd0aDsgd2UgZG9uJ3Qgd2FudCB0aGUgdHJhaWxpbmcgMAotICAgIHJldHVybiBTdHJpbmcocmVp
bnRlcnByZXRfY2FzdDxVQ2hhcio+KGJ1ZmZlciksIGJ1ZmZlckxlbmd0aCAtIDEpOwotfQotCi1z
dGF0aWMgVmVjdG9yPFN0cmluZz4gc3BsaXRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIGNoYXIg
ZGVsaW1pdGVyLCBpbnQgcGFkVG8pCi17Ci0gICAgaW50IHBvcyA9IDA7Ci0gICAgaW50IG5ld1Bv
czsKLSAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBkcyA9
IHN0ci5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgU3RyaW5nIHM7Ci0gICAgZG8gewotCi0gICAg
ICAgIG5ld1BvcyA9IGRzLmZpbmQoZGVsaW1pdGVyLCBwb3MpOwotCi0gICAgICAgIGlmIChuZXdQ
b3MgPT0gLTEpCi0gICAgICAgICAgICBzID0gZHMubWlkKHBvcyk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHMgPSBkcy5taWQocG9zLCBuZXdQb3MgLSBwb3MpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCFzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocyk7Ci0KLSAg
ICAgICAgcG9zID0gbmV3UG9zICsgMTsKLSAgICB9IHdoaWxlIChuZXdQb3MgIT0gLTEpOwotCi0g
ICAgd2hpbGUgKHBhZFRvICE9IC0xICYmIHN0YXRpY19jYXN0PGludD4ocmVzdWx0LnNpemUoKSkg
PCBwYWRUbykKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiIik7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIFBsdWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5U29vbigpCit2b2lkIFBs
dWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5U29vbigpCiB7CiAgICAgQVNTRVJUKCFtX2ZyZWVMaWJy
YXJ5VGltZXIuaXNBY3RpdmUoKSk7CiAgICAgQVNTRVJUKG1fbW9kdWxlKTsKQEAgLTkyLDIzMCAr
NDgsMjggQEAgdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVNvb24oKQogICAgIG1f
ZnJlZUxpYnJhcnlUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKLXZvaWQgUGx1Z2luUGFja2Fn
ZVdpbjo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+KiAvKnRp
bWVyKi8pCit2b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQ
bHVnaW5QYWNrYWdlPiogLyp0aW1lciovKQogewogICAgIEFTU0VSVChtX21vZHVsZSk7CiAgICAg
QVNTRVJUKG1fbG9hZENvdW50ID09IDApOwogCi0gICAgOjpGcmVlTGlicmFyeShtX21vZHVsZSk7
CisgICAgdW5sb2FkTW9kdWxlKG1fbW9kdWxlKTsKICAgICBtX21vZHVsZSA9IDA7CiB9CiAKLVBs
dWdpblBhY2thZ2VXaW46OlBsdWdpblBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKQotICAgIDogbV9wYXRoKHBhdGgpCitQbHVnaW5QYWNr
YWdlOjpQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgUGxhdGZvcm1GaWxl
VGltZSYgbGFzdE1vZGlmaWVkKQorICAgIDogbV9pc0xvYWRlZChmYWxzZSkKKyAgICAsIG1fbG9h
ZENvdW50KDApCisgICAgLCBtX3BhdGgocGF0aCkKICAgICAsIG1fbW9kdWxlKDApCiAgICAgLCBt
X2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpCi0gICAgLCBtX2lzTG9hZGVkKGZhbHNlKQotICAg
ICwgbV9sb2FkQ291bnQoMCkKLSAgICAsIG1fZnJlZUxpYnJhcnlUaW1lcih0aGlzLCAmUGx1Z2lu
UGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKQotICAgICwgbV9maWxlVmVyc2lvbkxT
KDApCi0gICAgLCBtX2ZpbGVWZXJzaW9uTVMoMCkKKyAgICAsIG1fZnJlZUxpYnJhcnlUaW1lcih0
aGlzLCAmUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKQogewotICAgIG1fZmls
ZU5hbWUgPSBTdHJpbmcoUGF0aEZpbmRGaWxlTmFtZShtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSkpOworICAgIG1fZmlsZU5hbWUgPSBwYXRoR2V0RmlsZU5hbWUobV9wYXRo
KTsKICAgICBtX3BhcmVudERpcmVjdG9yeSA9IG1fcGF0aC5sZWZ0KG1fcGF0aC5sZW5ndGgoKSAt
IG1fZmlsZU5hbWUubGVuZ3RoKCkgLSAxKTsKIH0KIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpz
dG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpCi17Ci0gICAgVlNfRklYRURG
SUxFSU5GTyogaW5mbzsKLSAgICBVSU5UIGluZm9TaXplOwotICAgIGlmICghVmVyUXVlcnlWYWx1
ZSh2ZXJzaW9uSW5mb0RhdGEsIFRFWFQoIlxcIiksIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXpl
KSB8fCBpbmZvU2l6ZSA8IHNpemVvZihWU19GSVhFREZJTEVJTkZPKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fZmlsZVZlcnNpb25MUyA9IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKLSAgICBtX2Zp
bGVWZXJzaW9uTVMgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTVM7Ci19Ci0KLWJvb2wgUGx1Z2luUGFj
a2FnZVdpbjo6aXNQbHVnaW5CbGFja2xpc3RlZCgpCi17Ci0gICAgc3RhdGljIGNvbnN0IERXT1JE
IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCA9IDB4MDAwMTAwMDA7
Ci0gICAgc3RhdGljIGNvbnN0IERXT1JEIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJz
aW9uTFNEV09SRCA9IDB4NTFCRTAwMDA7Ci0KLSAgICBpZiAobmFtZSgpID09ICJTaWx2ZXJsaWdo
dCBQbHVnLUluIikgewotICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRhcjovLzU1NTczNzk+
IENyYXNoIGluIFNpbHZlcmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQuY29tLgotICAgICAg
ICAvLyB0aGUgbGF0ZXN0IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRvZXMgbm90IHJlcHJv
ZHVjZSB0aGlzIGNyYXNoLCBzbyBhbGxvdyBpdAotICAgICAgICAvLyBhbmQgYW55IG5ld2VyIHZl
cnNpb25zCi0gICAgICAgIGlmIChtX2ZpbGVWZXJzaW9uTVMgPCBzaWx2ZXJsaWdodFBsdWdpbk1p
blJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgfHwKLSAgICAgICAgICAgIChtX2ZpbGVWZXJzaW9uTVMg
PT0gc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEICYmIG1fZmlsZVZl
cnNpb25MUyA8IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFNEV09SRCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGZpbGVOYW1lKCkgPT0gIm5w
bW96YXguZGxsIikKLSAgICAgICAgLy8gQnVnIDE1MjE3OiBNb3ppbGxhIEFjdGl2ZVggY29udHJv
bCBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyB4cGNvbV9jb3JlLmRsbAotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpm
ZXRjaEluZm8oKQotewotICAgIERXT1JEIHZlcnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsKLSAg
ICB2ZXJzaW9uSW5mb1NpemUgPSBHZXRGaWxlVmVyc2lvbkluZm9TaXplVyhtX3BhdGguY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgJnplcm9IYW5kbGUpOyAKLQotICAgIGlmICh2ZXJz
aW9uSW5mb1NpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTFBWT0lEIHZl
cnNpb25JbmZvRGF0YSA9IGZhc3RNYWxsb2ModmVyc2lvbkluZm9TaXplKTsKLQotICAgIGlmICgh
R2V0RmlsZVZlcnNpb25JbmZvVyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24o
KSwgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJzaW9uSW5mb0RhdGEpKSB7Ci0gICAgICAgIGZhc3RG
cmVlKHZlcnNpb25JbmZvRGF0YSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBtX25hbWUgPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJQcm9kdWN0TmFtZSIp
OwotICAgIG1fZGVzY3JpcHRpb24gPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJG
aWxlRGVzY3JpcHRpb24iKTsKLQotICAgIGlmIChtX25hbWUuaXNOdWxsKCkgfHwgbV9kZXNjcmlw
dGlvbi5pc051bGwoKSkgewotICAgICAgICBmYXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3RvcmVGaWxlVmVyc2lvbih2ZXJzaW9u
SW5mb0RhdGEpOwotCi0gICAgaWYgKGlzUGx1Z2luQmxhY2tsaXN0ZWQoKSkgewotICAgICAgICBm
YXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgVmVjdG9yPFN0cmluZz4gbWltZVR5cGVzID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbklu
Zm8odmVyc2lvbkluZm9EYXRhLCAiTUlNRVR5cGUiKSwgJ3wnLCAtMSk7Ci0gICAgVmVjdG9yPFN0
cmluZz4gZmlsZUV4dGVudHMgPSBzcGxpdFN0cmluZyhnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5m
b0RhdGEsICJGaWxlRXh0ZW50cyIpLCAnfCcsIG1pbWVUeXBlcy5zaXplKCkpOwotICAgIFZlY3Rv
cjxTdHJpbmc+IGRlc2NyaXB0aW9ucyA9IHNwbGl0U3RyaW5nKGdldFZlcnNpb25JbmZvKHZlcnNp
b25JbmZvRGF0YSwgIkZpbGVPcGVuTmFtZSIpLCAnfCcsIG1pbWVUeXBlcy5zaXplKCkpOwotCi0g
ICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtaW1lVHlwZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgLy8gR2V0IHJpZCBvZiB0aGUg
ZXh0ZW5zaW9uIGxpc3QgaW4gdGhlIGRlc2NyaXB0aW9uIHN0cmluZwotICAgICAgICBTdHJpbmcg
ZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbnNbaV07ICAgIAotICAgICAgICBpbnQgcG9zID0gZGVz
Y3JpcHRpb24uZmluZCgiKCoiKTsKLSAgICAgICAgaWYgKHBvcyAhPSAtMSkgewotICAgICAgICAg
ICAgLy8gVGhlcmUgbWlnaHQgYmUgYSBzcGFjZSB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZgot
ICAgICAgICAgICAgaWYgKHBvcyA+IDEgJiYgZGVzY3JpcHRpb25bcG9zIC0gMV0gPT0gJyAnKQot
ICAgICAgICAgICAgICAgIHBvcy0tOwotCi0gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2Ny
aXB0aW9uLmxlZnQocG9zKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1pbWVUeXBlc1tpXSA9IG1p
bWVUeXBlc1tpXS5sb3dlcigpOwotCi0gICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWlt
ZVR5cGVzW2ldLCBzcGxpdFN0cmluZyhmaWxlRXh0ZW50c1tpXSwgJywnLCAtMSkpOwotICAgICAg
ICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZVR5cGVzW2ldLCBkZXNjcmlwdGlvbik7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6bG9h
ZCgpCi17Ci0gICAgaWYgKG1fZnJlZUxpYnJhcnlUaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAg
IEFTU0VSVChtX21vZHVsZSk7Ci0gICAgICAgIG1fZnJlZUxpYnJhcnlUaW1lci5zdG9wKCk7Ci0g
ICAgfSBlbHNlIGlmIChtX2lzTG9hZGVkKSB7Ci0gICAgICAgIG1fbG9hZENvdW50Kys7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFdDSEFSIGN1cnJlbnRQYXRo
W01BWF9QQVRIXTsKLQotICAgICAgICBpZiAoITo6R2V0Q3VycmVudERpcmVjdG9yeVcoTUFYX1BB
VEgsIGN1cnJlbnRQYXRoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBT
dHJpbmcgcGF0aCA9IG1fcGF0aC5zdWJzdHJpbmcoMCwgbV9wYXRoLnJldmVyc2VGaW5kKCdcXCcp
KTsKLQotICAgICAgICBpZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVcocGF0aC5jaGFyYWN0ZXJz
V2l0aE51bGxUZXJtaW5hdGlvbigpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICAvLyBMb2FkIHRoZSBsaWJyYXJ5Ci0gICAgICAgIG1fbW9kdWxlID0gOjpMb2FkTGlicmFy
eVcobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwotCi0gICAgICAgIGlm
ICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsKLSAgICAgICAgICAgIGlm
IChtX21vZHVsZSkKLSAgICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV9t
b2R1bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faXNMb2FkZWQgPSB0cnVlOwot
Ci0gICAgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0gMDsKLSAg
ICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplID0gMDsKLSAgICBOUEVycm9yIG5w
RXJyOwotCi0gICAgTlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9j
QWRkcmVzcyhtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiKTsKLSAgICBOUF9HZXRFbnRyeVBvaW50
cyA9IChOUF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJO
UF9HZXRFbnRyeVBvaW50cyIpOwotICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blBy
b2NQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOwotCi0gICAgaWYg
KCFOUF9Jbml0aWFsaXplIHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAhbV9OUFBfU2h1dGRvd24p
Ci0gICAgICAgIGdvdG8gYWJvcnQ7Ci0gIAotICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwg
c2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKLSAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2Yo
bV9wbHVnaW5GdW5jcyk7Ci0KLSAgICBucEVyciA9IE5QX0dldEVudHJ5UG9pbnRzKCZtX3BsdWdp
bkZ1bmNzKTsKLSAgICBMT0dfTlBFUlJPUihucEVycik7Ci0gICAgaWYgKG5wRXJyICE9IE5QRVJS
X05PX0VSUk9SKQotICAgICAgICBnb3RvIGFib3J0OwotCi0gICAgbWVtc2V0KCZtX2Jyb3dzZXJG
dW5jcywgMCwgc2l6ZW9mKG1fYnJvd3NlckZ1bmNzKSk7Ci0gICAgbV9icm93c2VyRnVuY3Muc2l6
ZSA9IHNpemVvZiAobV9icm93c2VyRnVuY3MpOwotICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24g
PSBOUF9WRVJTSU9OX01JTk9SOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRV
Ukw7Ci0gICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOwotICAgIG1fYnJv
d3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOwotICAgIG1fYnJvd3NlckZ1
bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07Ci0gICAgbV9icm93c2VyRnVuY3Mud3JpdGUg
PSBOUE5fV3JpdGU7Ci0gICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0
cm95U3RyZWFtOwotICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7Ci0gICAg
bV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKLSAgICBtX2Jyb3dzZXJGdW5j
cy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0g
TlBOX01lbUZyZWU7Ci0gICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7
Ci0gICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOwot
ICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7Ci0gICAg
bV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OwotICAgIG1f
YnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOwotICAgIG1fYnJvd3NlckZ1bmNz
LnNldHZhbHVlID0gTlBOX1NldFZhbHVlOwotICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVy
ZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVy
ZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJl
ZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0g
TlBOX0dldEphdmFFbnY7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0
SmF2YVBlZXI7Ci0gICAgbV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5Q
Tl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOwotICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2Vu
YWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7Ci0KLSAgICBtX2Jyb3dzZXJG
dW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOwotICAg
IG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50
aWZpZXI7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dl
dFN0cmluZ0lkZW50aWZpZXJzOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIg
PSBfTlBOX0dldEludElkZW50aWZpZXI7Ci0gICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlz
c3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7Ci0gICAgbV9icm93c2VyRnVuY3MudXRm
OGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7Ci0gICAgbV9icm93c2Vy
RnVuY3MuaW50ZnJvbWlkZW50aWZpZXIgPSBfTlBOX0ludEZyb21JZGVudGlmaWVyOwotICAgIG1f
YnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0OwotICAgIG1fYnJv
d3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OwotICAgIG1fYnJvd3Nl
ckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7Ci0gICAgbV9icm93c2Vy
RnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVm
YXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9
IF9OUE5fRXZhbHVhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dl
dFByb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9w
ZXJ0eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJv
cGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc01ldGhvZDsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc1Byb3BlcnR5OwotICAgIG1f
YnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOwotICAgIG1fYnJv
d3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOwotCi0gICAgbnBFcnIgPSBOUF9J
bml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcyk7Ci0gICAgTE9HX05QRVJST1IobnBFcnIpOwotCi0g
ICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQotICAgICAgICBnb3RvIGFib3J0OwotCi0g
ICAgbV9sb2FkQ291bnQrKzsKLSAgICByZXR1cm4gdHJ1ZTsKLWFib3J0OgotICAgIHVubG9hZFdp
dGhvdXRTaHV0ZG93bigpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5QYWNr
YWdlV2luOjp1bmxvYWQoKQordm9pZCBQbHVnaW5QYWNrYWdlOjp1bmxvYWQoKQogewogICAgIGlm
ICghbV9pc0xvYWRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzI4LDcgKzgyLDcgQEAgdm9pZCBQ
bHVnaW5QYWNrYWdlV2luOjp1bmxvYWQoKQogICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwog
fQogCi12b2lkIFBsdWdpblBhY2thZ2VXaW46OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCit2b2lk
IFBsdWdpblBhY2thZ2U6OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCiB7CiAgICAgaWYgKCFtX2lz
TG9hZGVkKQogICAgICAgICByZXR1cm47CkBAIC0zNDcsOSArMTAxLDkgQEAgdm9pZCBQbHVnaW5Q
YWNrYWdlV2luOjp1bmxvYWRXaXRob3V0U2h1dAogICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKIH0K
IAotUGx1Z2luUGFja2FnZVdpbiogUGx1Z2luUGFja2FnZVdpbjo6Y3JlYXRlUGFja2FnZShjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpCitQbHVnaW5QYWNr
YWdlKiBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgUGxhdGZvcm1GaWxlVGltZSYgbGFzdE1vZGlmaWVkKQogewotICAgIFBsdWdpblBhY2thZ2VX
aW4qIHBhY2thZ2UgPSBuZXcgUGx1Z2luUGFja2FnZVdpbihwYXRoLCBsYXN0TW9kaWZpZWQpOwor
ICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2UgPSBuZXcgUGx1Z2luUGFja2FnZShwYXRoLCBsYXN0
TW9kaWZpZWQpOwogCiAgICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkgewogICAgICAgICBk
ZWxldGUgcGFja2FnZTsKQEAgLTM1OSwyMCArMTEzLDQgQEAgUGx1Z2luUGFja2FnZVdpbiogUGx1
Z2luUGFja2FnZVdpbjo6Y3JlYQogICAgIHJldHVybiBwYWNrYWdlOwogfQogCi11bnNpZ25lZCBQ
bHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3QKLXsgCi0gICAgdW5zaWduZWQgaGFzaENvZGVz
WzNdID0gewotICAgICAgICBtX2Rlc2NyaXB0aW9uLmltcGwoKS0+aGFzaCgpLAotICAgICAgICBt
X2xhc3RNb2RpZmllZC5kd0xvd0RhdGVUaW1lLAotICAgICAgICBtX2xhc3RNb2RpZmllZC5kd0hp
Z2hEYXRlVGltZQotICAgIH07Ci0KLSAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2go
cmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIDMgKiBzaXplb2YodW5zaWduZWQp
IC8gc2l6ZW9mKFVDaGFyKSk7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZXF1YWwoY29u
c3QgUGx1Z2luUGFja2FnZVdpbiYgYSwgY29uc3QgUGx1Z2luUGFja2FnZVdpbiYgYikKLXsKLSAg
ICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbiAmJiAoQ29tcGFyZUZp
bGVUaW1lKCZhLm1fbGFzdE1vZGlmaWVkLCAmYi5tX2xhc3RNb2RpZmllZCkgPT0gMCk7Ci19Ci0K
IH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAkocmV2aXNpb24gMjk2MjYpCShmcm9tIFdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5oOjI5NjI2KQorKysgV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblBhY2thZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblBhY2thZ2VXaW5fSAorI2RlZmluZSBQbHVn
aW5QYWNrYWdlV2luX0gKKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d2luZG93
cy5oPgorCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRv
RGVzY3JpcHRpb25zTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJp
bmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKKworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VXaW4g
OiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlV2luPiB7CisgICAgcHVibGljOgorICAg
ICAgICB+UGx1Z2luUGFja2FnZVdpbigpOworICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZVdp
biogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0
TW9kaWZpZWQpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kZXNjcmlwdGlvbjsgfQorICAgICAgICBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVOYW1lOyB9CisgICAgICAgIFN0cmluZyBwYXJlbnREaXJlY3RvcnkoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudERpcmVjdG9yeTsgfQorCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9E
ZXNjcmlwdGlvbnM7IH0KKyAgICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRv
RXh0ZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQorCisgICAg
ICAgIHVuc2lnbmVkIFBsdWdpblBhY2thZ2VXaW46Omhhc2goKSBjb25zdDsKKyAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZVdpbiYgYSwgY29uc3QgUGx1Z2luUGFj
a2FnZVdpbiYgYik7CisKKyAgICAgICAgYm9vbCBsb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2Fk
KCk7CisgICAgICAgIHZvaWQgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisKKyAgICAgICAgY29u
c3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5G
dW5jczsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdpblBhY2thZ2VXaW4oY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYm9vbCBm
ZXRjaEluZm8oKTsKKyAgICAgICAgdm9pZCBzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9u
SW5mb0RhdGEpOworICAgICAgICBib29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKTsKKworICAgICAg
ICBib29sIG1faXNMb2FkZWQ7CisgICAgICAgIGludCBtX2xvYWRDb3VudDsKKworICAgICAgICBE
V09SRCBtX2ZpbGVWZXJzaW9uTVM7CisgICAgICAgIERXT1JEIG1fZmlsZVZlcnNpb25MUzsKKwor
ICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKKyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAg
ICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CisgICAgICAgIFN0cmluZyBtX25hbWU7CisgICAgICAg
IFN0cmluZyBtX3BhcmVudERpcmVjdG9yeTsKKworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNN
YXAgbV9taW1lVG9EZXNjcmlwdGlvbnM7CisgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXAgbV9t
aW1lVG9FeHRlbnNpb25zOworCisgICAgICAgIEhNT0RVTEUgbV9tb2R1bGU7CisgICAgICAgIEZJ
TEVUSU1FIG1fbGFzdE1vZGlmaWVkOworCisgICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9O
UFBfU2h1dGRvd247CisgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKKyAgICAg
ICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOworCisgICAgICAgIHZvaWQgZnJlZUxp
YnJhcnlTb29uKCk7CisgICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBs
dWdpblBhY2thZ2VXaW4+Kik7CisgICAgICAgIFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+IG1fZnJl
ZUxpYnJhcnlUaW1lcjsKKyAgICB9OworCisgICAgc3RydWN0IFBsdWdpblBhY2thZ2VXaW5IYXNo
IHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlV2luKj4oa2V5KS0+aGFzaCgpOyB9CisgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYg
a2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2Fz
dDxQbHVnaW5QYWNrYWdlV2luKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdp
bio+KGIpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2lu
UGFja2FnZVdpbj4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYgYikgeyByZXR1
cm4gUGx1Z2luUGFja2FnZVdpbjo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQorICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNl
OworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gRklYTUU6IFRoaXMgaXMg
YSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byB1
c2UgYSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRyYWl0cy4KKy8vIEl0
IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9yYWdlVHJhaXRzIHNw
ZWNpYWxpemF0aW9uLgorbmFtZXNwYWNlIFdURiB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFz
aEtleVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbkhhc2gsIEhhc2hUcmFp
dHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW4+ID4gPiB7CisgICAgICAgIHR5cGVk
ZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPik+OjpT
aWduZWRUeXBlIEludFR5cGU7CisgICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1Z2luUGFja2Fn
ZVdpbkhhc2ggSGFzaDsKKyAgICAgICAgdHlwZWRlZiBIYXNoVHJhaXRzPEludFR5cGU+IFRyYWl0
czsKKyAgICB9OworfQorCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBh
Y2thZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCShy
ZXZpc2lvbiAyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDEyICsyMywxMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lm
bmRlZiBQbHVnaW5QYWNrYWdlV2luX0gKLSNkZWZpbmUgUGx1Z2luUGFja2FnZVdpbl9ICi0KLSNp
bmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZm5kZWYgUGx1Z2lu
UGFja2FnZV9ICisjZGVmaW5lIFBsdWdpblBhY2thZ2VfSAogCisjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgorI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlN0
cmluZ0hhc2guaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtNDAsMTAgKzM5LDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IE1JTUVUb0Rlc2NyaXB0aW9uc01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBW
ZWN0b3I8U3RyaW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7CiAKLSAgICBjbGFzcyBQbHVnaW5Q
YWNrYWdlV2luIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZVdpbj4geworICAgIGNs
YXNzIFBsdWdpblBhY2thZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlPiB7CiAg
ICAgcHVibGljOgotICAgICAgICB+UGx1Z2luUGFja2FnZVdpbigpOwotICAgICAgICBzdGF0aWMg
UGx1Z2luUGFja2FnZVdpbiogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpOworICAgICAgICB+UGx1Z2luUGFja2FnZSgpOworICAg
ICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZSogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFBsYXRmb3JtRmlsZVRpbWUmIGxhc3RNb2RpZmllZCk7CiAgICAgICAgIAogICAg
ICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgICAgICBTdHJp
bmcgZGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CkBAIC01Myw4
ICs1Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgTUlNRVRvRGVzY3Jp
cHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rl
c2NyaXB0aW9uczsgfQogICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9F
eHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CiAKLSAgICAg
ICAgdW5zaWduZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNr
YWdlV2luJiBiKTsKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdl
JiBiKTsKIAogICAgICAgICBib29sIGxvYWQoKTsKICAgICAgICAgdm9pZCB1bmxvYWQoKTsKQEAg
LTYyLDE3ICs2MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgY29uc3QgTlBQ
bHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsg
fQogICAgIHByaXZhdGU6Ci0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgUGx1Z2luUGFja2Fn
ZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFBsYXRmb3JtRmlsZVRpbWUmIGxhc3RNb2RpZmll
ZCk7CisgICAgICAgIGJvb2wgaXNQbHVnaW5CbGFja2xpc3RlZCgpIGNvbnN0OwogICAgICAgICBi
b29sIGZldGNoSW5mbygpOwotICAgICAgICB2b2lkIHN0b3JlRmlsZVZlcnNpb24oTFBWT0lEIHZl
cnNpb25JbmZvRGF0YSk7Ci0gICAgICAgIGJvb2wgaXNQbHVnaW5CbGFja2xpc3RlZCgpOwogCiAg
ICAgICAgIGJvb2wgbV9pc0xvYWRlZDsKICAgICAgICAgaW50IG1fbG9hZENvdW50OwogCi0gICAg
ICAgIERXT1JEIG1fZmlsZVZlcnNpb25NUzsKLSAgICAgICAgRFdPUkQgbV9maWxlVmVyc2lvbkxT
OwotCiAgICAgICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9uOwogICAgICAgICBTdHJpbmcgbV9wYXRo
OwogICAgICAgICBTdHJpbmcgbV9maWxlTmFtZTsKQEAgLTgyLDI0ICs3NywyNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBtX21pbWVUb0Rlc2Ny
aXB0aW9uczsKICAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21pbWVUb0V4dGVuc2lvbnM7
CiAKLSAgICAgICAgSE1PRFVMRSBtX21vZHVsZTsKLSAgICAgICAgRklMRVRJTUUgbV9sYXN0TW9k
aWZpZWQ7CisgICAgICAgIFBsYXRmb3JtTW9kdWxlIG1fbW9kdWxlOworICAgICAgICBQbGF0Zm9y
bUZpbGVUaW1lIG1fbGFzdE1vZGlmaWVkOwogCiAgICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIg
bV9OUFBfU2h1dGRvd247CiAgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKICAg
ICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOwogCiAgICAgICAgIHZvaWQgZnJl
ZUxpYnJhcnlTb29uKCk7Ci0gICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVy
PFBsdWdpblBhY2thZ2VXaW4+Kik7Ci0gICAgICAgIFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+IG1f
ZnJlZUxpYnJhcnlUaW1lcjsKKyAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGlt
ZXI8UGx1Z2luUGFja2FnZT4qKTsKKyAgICAgICAgVGltZXI8UGx1Z2luUGFja2FnZT4gbV9mcmVl
TGlicmFyeVRpbWVyOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZVdpbkhhc2gg
ewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihrZXkpLT5oYXNoKCk7IH0KLSAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+JiBr
ZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CisgICAgc3RydWN0IFBsdWdpblBhY2thZ2VIYXNo
IHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oa2V5KS0+aGFzaCgpOyB9CisgICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYga2V5KSB7
IHJldHVybiBrZXktPmhhc2goKTsgfQogCi0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVn
aW5QYWNrYWdlV2luKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGIp
KTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2Fn
ZVdpbj4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYgYikgeyByZXR1cm4gUGx1
Z2luUGFja2FnZVdpbjo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQorICAgICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBpbnQgYSwgY29uc3QgaW50IGIpIHsgcmV0dXJuIGVxdWFsKHJl
aW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGEpLCByZWludGVycHJldF9jYXN0PFBsdWdp
blBhY2thZ2UqPihiKSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVmUHRy
PFBsdWdpblBhY2thZ2U+JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGIpIHsgcmV0
dXJuIFBsdWdpblBhY2thZ2U6OmVxdWFsKCphLmdldCgpLCAqYi5nZXQoKSk7IH0KICAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsK
ICAgICB9OwogCkBAIC0xMDgsOSArMTAzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gRklY
TUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1w
b3NzaWJsZSB0byB1c2UgYSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRy
YWl0cy4KIC8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9y
YWdlVHJhaXRzIHNwZWNpYWxpemF0aW9uLgogbmFtZXNwYWNlIFdURiB7Ci0gICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbkhh
c2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW4+ID4gPiB7Ci0g
ICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNr
YWdlV2luPik+OjpTaWduZWRUeXBlIEludFR5cGU7Ci0gICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6
UGx1Z2luUGFja2FnZVdpbkhhc2ggSGFzaDsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5
U3RvcmFnZVRyYWl0czxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlSGFzaCwgSGFzaFRyYWl0czxSZWZQ
dHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZT4gPiA+IHsKKyAgICAgICAgdHlwZWRlZiBJbnRUeXBl
czxzaXplb2YoUmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2U+KT46OlNpZ25lZFR5cGUgSW50
VHlwZTsKKyAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlSGFzaCBIYXNoOwog
ICAgICAgICB0eXBlZGVmIEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOwogICAgIH07CiB9Cklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdJbkluZm9TdG9yZVdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnSW5JbmZvU3RvcmVXaW4uY3BwCShyZXZpc2lv
biAyOTgzMykKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z0luSW5mb1N0b3JlV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRlICJQbHVn
aW5EYXRhYmFzZVdpbi5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1QbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdp
bkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkIGkpIAoteyAKLSAgICBQbHVnaW5EYXRhYmFz
ZVdpbiAqZGIgPSBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpOwotICAgIFBs
dWdpbkluZm8qIGluZm8gPSBuZXcgUGx1Z2luSW5mbzsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBw
YWNrYWdlID0gZGItPnBsdWdpbnMoKVtpXTsKLQotICAgIGluZm8tPm5hbWUgPSBwYWNrYWdlLT5u
YW1lKCk7Ci0gICAgaW5mby0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7Ci0gICAgaW5mby0+
ZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7Ci0KLSAgICBjb25zdCBNSU1FVG9EZXNjcmlw
dGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9u
cygpOwotICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWlt
ZVRvRGVzY3JpcHRpb25zLmVuZCgpOwotICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZv
OwotICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZSk7Ci0gICAgICAgIAotICAgICAgICBt
aW1lLT50eXBlID0gaXQtPmZpcnN0OwotICAgICAgICBtaW1lLT5kZXNjID0gaXQtPnNlY29uZDsK
LSAgICAgICAgbWltZS0+cGx1Z2luID0gaW5mbzsKLQotICAgICAgICBWZWN0b3I8U3RyaW5nPiBl
eHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLT50eXBlKTsK
LSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaSA+IDApCi0gICAgICAgICAgICAgICAgbWlt
ZS0+c3VmZml4ZXMgKz0gIiwiOwotCi0gICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSBleHRl
bnNpb25zW2ldOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZm87Ci19Ci0KLXVu
c2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdAotewotICAgIHJldHVy
biBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCkuc2l6ZSgp
OwotfQotCi0KLVN0cmluZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1FIDU2MjkxMzk6IEltcGxlbWVu
dCB0aGlzIG1ldGhvZCBvbiBXaW5kb3dzLgotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotICAg
IAotYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6
U3RyaW5nJiBtaW1lVHlwZSkgCi17Ci0gICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0
YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKTsKLX0KLQotdm9p
ZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5QYWdlcykKLXsKLSAgICBQbHVnaW5EYXRh
YmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7Ci0KLSAgICBpZiAocmVsb2Fk
T3BlblBhZ2VzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiByZWxvYWQgb3BlbiBwYWdlcwotICAgIH0K
LX0KLQotfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAJ
KHJldmlzaW9uIDI5ODMzKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDkgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VXaW4uaCIKKyNpbmNsdWRlICJQbHVn
aW5EYXRhYmFzZS5oIgogCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3V2luLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC0zNCw5MSArMzQsNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVBsdWdpbkRhdGFiYXNlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6
aW5zdGFsbGVkUGx1Z2lucygpCi17Ci0gICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlV2luKiBwbHVn
aW5zID0gMDsKLSAgICAKLSAgICBpZiAoIXBsdWdpbnMpIHsKLSAgICAgICAgcGx1Z2lucyA9IG5l
dyBQbHVnaW5EYXRhYmFzZVdpbjsKLSAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1
Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKLSAgICAgICAgcGx1Z2lucy0+
cmVmcmVzaCgpOwotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW5zOwotfQotCi12b2lkIFBsdWdp
bkRhdGFiYXNlV2luOjphZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQotewot
ICAgIG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBhdGgpOwotICAgIHJlZnJlc2goKTsKLX0KLQotYm9v
bCBQbHVnaW5EYXRhYmFzZVdpbjo6cmVmcmVzaCgpCi17ICAgCi0gICAgUGx1Z2luU2V0IG5ld1Bs
dWdpbnM7Ci0KLSAgICBib29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKLQotICAgIC8vIENy
ZWF0ZSBhIG5ldyBzZXQgb2YgcGx1Z2lucwotICAgIG5ld1BsdWdpbnMgPSBnZXRQbHVnaW5zSW5Q
YXRocygpOwotCi0gICAgaWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcmVn
aXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOwotCi0gICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9V
bmxvYWQgPSBtX3BsdWdpbnM7Ci0KLSAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBuZXdQbHVnaW5zLmVuZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
ICAgIHBsdWdpbnNUb1VubG9hZC5yZW1vdmUoKml0KTsKLQotICAgICAgICBlbmQgPSBtX3BsdWdp
bnMuZW5kKCk7Ci0gICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBuZXdQbHVnaW5z
LnJlbW92ZSgqaXQpOwotCi0gICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCi0gICAgICAgIGVuZCA9
IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIG1fcGx1Z2lucy5yZW1vdmUoKml0KTsKLQotICAgICAgICAvLyBBZGQgbmV3IHBs
dWdpbnMKLSAgICAgICAgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7Ci0KLSAgICAgICAgcGx1Z2lu
U2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpIHx8ICFuZXdQbHVnaW5zLmlz
RW1wdHkoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BsdWdpbnMgPSBuZXdQbHVnaW5zOwot
ICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7
Ci0gICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQp
OwotCi0gICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7Ci0g
ICAgfQotCi0gICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCi0gICAgUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICAvLyBHZXQgTUlNRSB0eXBlcwotICAgICAgICBNSU1FVG9EZXNjcmlwdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25z
KCkuZW5kKCk7Ci0gICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsgbWFwX2l0
ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KSB7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlw
ZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBs
dWdpblNldENoYW5nZWQ7Ci19Ci0KLVZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gUGx1Z2luRGF0
YWJhc2VXaW46OnBsdWdpbnMoKSBjb25zdAotewotICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2lu
Kj4gcmVzdWx0OwotCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdp
bnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVn
aW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgoKml0
KS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQg
YWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZIHJvb3RLZXksIFBsdWdpblNldCYgcGx1Z2lucykK
IHsKICAgICBIS0VZIGtleTsKQEAgLTE1MCw3ICs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRQbHVnaW5zRnJvbVJlZ2lzdHIKICAgICAgICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXgocGF0
aFN0ciwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmYXR0cmlidXRlcykgPT0gMCkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBQbHVn
aW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKFN0cmluZyhwYXRoU3RyLCBwYXRoU3RyU2l6ZSAv
IHNpemVvZihXQ0hBUikgLSAxKSwgYXR0cmlidXRlcy5mdExhc3RXcml0ZVRpbWUpOworICAgICAg
ICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZShT
dHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSksIGF0dHJpYnV0
ZXMuZnRMYXN0V3JpdGVUaW1lKTsKIAogICAgICAgICBpZiAocGFja2FnZSkKICAgICAgICAgICAg
IHBsdWdpbnMuYWRkKHBhY2thZ2UpOwpAQCAtMTU5LDcgKzc0LDcgQEAgc3RhdGljIGlubGluZSB2
b2lkIGFkZFBsdWdpbnNGcm9tUmVnaXN0cgogICAgIFJlZ0Nsb3NlS2V5KGtleSk7CiB9CiAKLVBs
dWdpblNldCBQbHVnaW5EYXRhYmFzZVdpbjo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdAorUGx1
Z2luU2V0IFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0CiB7CiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCiAgICAgSGFz
aFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKQEAgLTE2OCw4ICs4Myw4IEBAIFBsdWdpblNl
dCBQbHVnaW5EYXRhYmFzZVdpbjo6Z2V0UGx1Z2luc0kKICAgICBIQU5ETEUgaEZpbmQgPSBJTlZB
TElEX0hBTkRMRV9WQUxVRTsKICAgICBXSU4zMl9GSU5EX0RBVEFXIGZpbmRGaWxlRGF0YTsKIAot
ICAgIFBsdWdpblBhY2thZ2VXaW4qIG9sZFdNUFBsdWdpbiA9IDA7Ci0gICAgUGx1Z2luUGFja2Fn
ZVdpbiogbmV3V01QUGx1Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdlKiBvbGRXTVBQbHVnaW4g
PSAwOworICAgIFBsdWdpblBhY2thZ2UqIG5ld1dNUFBsdWdpbiA9IDA7CiAKICAgICBWZWN0b3I8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQoKTsKICAgICBm
b3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luUGF0aHMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC0xOTMsNyArMTA4LDcgQEAgUGx1Z2luU2V0IFBs
dWdpbkRhdGFiYXNlV2luOjpnZXRQbHVnaW5zSQogICAgICAgICAgICAgaWYgKCF1bmlxdWVGaWxl
bmFtZXMuYWRkKGZ1bGxQYXRoKS5zZWNvbmQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIAotICAgICAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luUGFja2FnZSA9IFBs
dWdpblBhY2thZ2VXaW46OmNyZWF0ZVBhY2thZ2UoZnVsbFBhdGgsIGZpbmRGaWxlRGF0YS5mdExh
c3RXcml0ZVRpbWUpOworICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luUGFja2FnZSA9
IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoZnVsbFBhdGgsIGZpbmRGaWxlRGF0YS5mdExh
c3RXcml0ZVRpbWUpOwogCiAgICAgICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkgewogICAgICAg
ICAgICAgICAgIHBsdWdpbnMuYWRkKHBsdWdpblBhY2thZ2UpOwpAQCAtNDE5LDcgKzMzNCw3IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luUGEKICAgICBwYXRocy5hcHBl
bmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBsdWdpbkRh
dGFiYXNlV2luOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQorVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0
YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7
CiAgICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwpAQCAtNDM1LDEwNiAr
MzUwLDE0IEBAIFZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlV2luOjpkZWZhdWwKICAgICBy
ZXR1cm4gcGF0aHM7CiB9CiAKLWJvb2wgUGx1Z2luRGF0YWJhc2VXaW46OmlzTUlNRVR5cGVSZWdp
c3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVUeXBlLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVUeXBl
cy5jb250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIE5vIHBs
dWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5n
IGFnYWluCi0gICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNv
bnRhaW5zKG1pbWVUeXBlKSk7Ci19Ci0KLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpbkRhdGFiYXNl
V2luOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorYm9vbCBQbHVn
aW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkgY29u
c3QKIHsKLSAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwogICAgIFN0cmluZyBvdXJQYXRoID0g
c2FmYXJpUGx1Z2luc1BhdGgoKTsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSAwOwot
ICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotCi0g
ICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9u
cygpLmNvbnRhaW5zKGtleSkpIHsKLSAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOwot
ICAgICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9y
eQotICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBw
bHVnaW47Ci19CiAKLVN0cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6TUlNRVR5cGVGb3JFeHRlbnNp
b24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGV4dGVuc2lvbi5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIFN0cmluZyBvdXJQYXRoID0g
c2FmYXJpUGx1Z2luc1BhdGgoKTsKLSAgICBTdHJpbmcgbWltZVR5cGU7Ci0gICAgUGx1Z2luUGFj
a2FnZVdpbiogcGx1Z2luID0gMDsKLQotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRv
RXh0ZW5zaW9ucygpLmVuZCgpOwotCi0gICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4o
KTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lv
bikpIHsKLSAgICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKLSAg
ICAgICAgICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIW91clBhdGguaXNOdWxsKCkgJiYg
IXBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBvdXJQYXRoID09IHBhdGg7CiAKLSAgICBy
ZXR1cm4gbWltZVR5cGU7Ci19Ci0KLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpbkRhdGFiYXNlV2lu
OjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSkKLXsgICAKLSAg
ICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7
Ci0gICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLnN0cmluZygpOwotICAgIAotICAgIGlmICghcGx1
Z2luKSB7Ci0gICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IHVybC5sYXN0UGF0aENvbXBvbmVudCgp
OwotICAgICAgICBpZiAoIWZpbGVuYW1lLmVuZHNXaXRoKCIvIikpIHsKLSAgICAgICAgICAgIGlu
dCBleHRlbnNpb25Qb3MgPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOwotICAgICAgICAgICAg
aWYgKGV4dGVuc2lvblBvcyAhPSAtMSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBleHRlbnNp
b24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZXh0ZW5zaW9uUG9zICsgMSk7Ci0KLSAgICAgICAgICAg
ICAgICBtaW1lVHlwZSA9IE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7Ci0gICAgICAg
ICAgICAgICAgcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IGlmIG5vIHBsdWdpbiBjb3Vs
ZCBiZSBmb3VuZCwgcXVlcnkgV2luZG93cyBmb3IgdGhlIG1pbWUgdHlwZSAKLSAgICAvLyBjb3Jy
ZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCi0KLSAgICByZXR1cm4gcGx1Z2luOwotfQotCi1Q
bHVnaW5WaWV3V2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6Y3JlYXRlUGx1Z2luVmlldyhGcmFtZSog
cGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2Fk
TWFudWFsbHkpCi17Ci0gICAgLy8gaWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1Z2luIGZvciB0aGlz
IE1JTUUgdHlwZSwgZmluZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IKLSAgICAvLyBhIHBsdWdpbiBi
eSB0aGUgZmlsZSBleHRlbnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBlLCBzbyBwYXNzIGEg
bXV0YWJsZSBTdHJpbmcKLSAgICBTdHJpbmcgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7Ci0gICAg
UGx1Z2luUGFja2FnZVdpbiogcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7
Ci0gICAgCi0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRh
dGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICBpZiAoIXBsdWdpbiAmJiByZWZyZXNoKCkp
IHsKLSAgICAgICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7Ci0gICAgICAgIHBsdWdpbiA9IGZp
bmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJu
IG5ldyBQbHVnaW5WaWV3V2luKHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVsZW1lbnQsIHVy
bCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9hZE1hbnVhbGx5KTsK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luRGF0YWJhc2VXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdp
bkRhdGFiYXNlV2luLmgJKHJldmlzaW9uIDI5ODMzKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9Q
bHVnaW5EYXRhYmFzZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5EYXRhYmFzZVdpbl9ICi0jZGVmaW5lIFBsdWdpbkRh
dGFiYXNlV2luX0gKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJQbHVnaW5Q
YWNrYWdlV2luLmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgY2xhc3MgRWxlbWVudDsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBJbnRT
aXplOwotICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgUGx1Z2luUGFja2FnZVdpbjsKLSAgICBj
bGFzcyBQbHVnaW5WaWV3V2luOwotCi0gICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5Q
YWNrYWdlV2luPiwgUGx1Z2luUGFja2FnZVdpbkhhc2g+IFBsdWdpblNldDsKLSAgCi0gICAgY2xh
c3MgUGx1Z2luRGF0YWJhc2VXaW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBsdWdp
bkRhdGFiYXNlV2luKiBpbnN0YWxsZWRQbHVnaW5zKCk7Ci0gICAgICAgIFBsdWdpblZpZXdXaW4q
IGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxl
bWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7Ci0KLSAgICAgICAgYm9vbCByZWZyZXNoKCk7
Ci0gICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gcGx1Z2lucygpIGNvbnN0OwotICAg
ICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwot
ICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKLSAgICBwcml2
YXRlOgotICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXRocykgeyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KLSAgICAgICAgUGx1Z2luU2V0IGdldFBs
dWdpbnNJblBhdGhzKCkgY29uc3Q7Ci0KLSAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogZmluZFBs
dWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICBQbHVnaW5Q
YWNrYWdlV2luKiBwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAg
ICAgICAgU3RyaW5nIE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9u
KSBjb25zdDsKLQotICAgICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZGVmYXVsdFBsdWdpblBh
dGhzKCk7Ci0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gbV9wbHVnaW5QYXRoczsKLSAgICAgICAg
SGFzaFNldDxTdHJpbmc+IG1fcmVnaXN0ZXJlZE1JTUVUeXBlczsKLSAgICAgICAgUGx1Z2luU2V0
IG1fcGx1Z2luczsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJ
bmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCShyZXZpc2lvbiAy
OTgzMykKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxzaGx3YXBpLmg+CiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisjaW5jbHVkZSAi
UGx1Z2luUGFja2FnZS5oIgogCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJEZXByZWNh
dGVkU3RyaW5nLmgiCkBAIC0zNSwxMSArMzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVBsdWdpblBhY2thZ2VXaW46On5QbHVnaW5QYWNrYWdlV2luKCkKLXsKLSAgICBBU1NFUlQoIW1f
aXNMb2FkZWQpOwotfQotCiBzdGF0aWMgU3RyaW5nIGdldFZlcnNpb25JbmZvKGNvbnN0IExQVk9J
RCB2ZXJzaW9uSW5mb0RhdGEsIGNvbnN0IFN0cmluZyYgaW5mbykKIHsKICAgICBMUFZPSUQgYnVm
ZmVyOwpAQCAtODMsNTkgKzc4LDQ4IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBzcGxpdFN0cmlu
Zyhjb25zdCAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBsdWdpblBhY2thZ2VXaW46
OmZyZWVMaWJyYXJ5U29vbigpCitzdGF0aWMgTFBWT0lEIGdldFZlcnNpb25JbmZvRGF0YShjb25z
dCBTdHJpbmcgcGF0aCYsIERXT1JEIHNpemUmKQogewotICAgIEFTU0VSVCghbV9mcmVlTGlicmFy
eVRpbWVyLmlzQWN0aXZlKCkpOwotICAgIEFTU0VSVChtX21vZHVsZSk7Ci0gICAgQVNTRVJUKG1f
bG9hZENvdW50ID09IDApOworICAgIERXT1JEIHZlcnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsK
KyAgICB2ZXJzaW9uSW5mb1NpemUgPSBHZXRGaWxlVmVyc2lvbkluZm9TaXplVyhTdHJpbmcocGF0
aCkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgJnplcm9IYW5kbGUpOyAKIAotICAg
IG1fZnJlZUxpYnJhcnlUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19CisgICAgc2l6ZSA9IHZlcnNp
b25JbmZvU2l6ZTsKIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVRpbWVyRmly
ZWQoVGltZXI8UGx1Z2luUGFja2FnZVdpbj4qIC8qdGltZXIqLykKLXsKLSAgICBBU1NFUlQobV9t
b2R1bGUpOwotICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsKKyAgICBpZiAodmVyc2lvbklu
Zm9TaXplID09IDApCisgICAgICAgIHJldHVybiAwOwogCi0gICAgOjpGcmVlTGlicmFyeShtX21v
ZHVsZSk7Ci0gICAgbV9tb2R1bGUgPSAwOwotfQorICAgIExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEg
PSBmYXN0TWFsbG9jKHZlcnNpb25JbmZvU2l6ZSk7CiAKLVBsdWdpblBhY2thZ2VXaW46OlBsdWdp
blBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlm
aWVkKQotICAgIDogbV9wYXRoKHBhdGgpCi0gICAgLCBtX21vZHVsZSgwKQotICAgICwgbV9sYXN0
TW9kaWZpZWQobGFzdE1vZGlmaWVkKQotICAgICwgbV9pc0xvYWRlZChmYWxzZSkKLSAgICAsIG1f
bG9hZENvdW50KDApCi0gICAgLCBtX2ZyZWVMaWJyYXJ5VGltZXIodGhpcywgJlBsdWdpblBhY2th
Z2VXaW46OmZyZWVMaWJyYXJ5VGltZXJGaXJlZCkKLSAgICAsIG1fZmlsZVZlcnNpb25MUygwKQot
ICAgICwgbV9maWxlVmVyc2lvbk1TKDApCi17Ci0gICAgbV9maWxlTmFtZSA9IFN0cmluZyhQYXRo
RmluZEZpbGVOYW1lKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSk7Ci0g
ICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3RoKCkgLSBtX2Zp
bGVOYW1lLmxlbmd0aCgpIC0gMSk7Ci19CisgICAgaWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKFN0
cmluZyhwYXRoKS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2ZXJzaW9uSW5m
b1NpemUsIHZlcnNpb25JbmZvRGF0YSkpIHsKKyAgICAgICAgZmFzdEZyZWUodmVyc2lvbkluZm9E
YXRhKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCi12b2lkIFBsdWdpblBhY2thZ2VXaW46
OnN0b3JlRmlsZVZlcnNpb24oTFBWT0lEIHZlcnNpb25JbmZvRGF0YSkKLXsKLSAgICBWU19GSVhF
REZJTEVJTkZPKiBpbmZvOwotICAgIFVJTlQgaW5mb1NpemU7Ci0gICAgaWYgKCFWZXJRdWVyeVZh
bHVlKHZlcnNpb25JbmZvRGF0YSwgVEVYVCgiXFwiKSwgKExQVk9JRCopICZpbmZvLCAmaW5mb1Np
emUpIHx8IGluZm9TaXplIDwgc2l6ZW9mKFZTX0ZJWEVERklMRUlORk8pKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9maWxlVmVyc2lvbkxTID0gaW5mby0+ZHdGaWxlVmVyc2lvbkxTOwotICAgIG1f
ZmlsZVZlcnNpb25NUyA9IGluZm8tPmR3RmlsZVZlcnNpb25NUzsKKyAgICByZXR1cm4gdmVyc2lv
bkluZm9EYXRhOwogfQogCi1ib29sIFBsdWdpblBhY2thZ2VXaW46OmlzUGx1Z2luQmxhY2tsaXN0
ZWQoKQorYm9vbCBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNrbGlzdGVkKCkgY29uc3QKIHsK
ICAgICBzdGF0aWMgY29uc3QgRFdPUkQgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNp
b25NU0RXT1JEID0gMHgwMDAxMDAwMDsKICAgICBzdGF0aWMgY29uc3QgRFdPUkQgc2lsdmVybGln
aHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25MU0RXT1JEID0gMHg1MUJFMDAwMDsKIAorICAgIERX
T1JEIHZlcnNpb25JbmZvU2l6ZTsKKyAgICBMUFZPSUQgdmVyc2lvbkluZm9EYXRhID0gZ2V0VmVy
c2lvbkluZm9EYXRhKG1fcGF0aCwgdmVyc2lvbkluZm9TaXplKTsKKworICAgIGlmICghdmVyc2lv
bkluZm9EYXRhKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFZTX0ZJWEVERklMRUlORk8q
IGluZm87CisgICAgVUlOVCBpbmZvU2l6ZTsKKyAgICBpZiAoIVZlclF1ZXJ5VmFsdWUodmVyc2lv
bkluZm9EYXRhLCBURVhUKCJcXCIpLCAoTFBWT0lEKikgJmluZm8sICZpbmZvU2l6ZSkgfHwgaW5m
b1NpemUgPCBzaXplb2YoVlNfRklYRURGSUxFSU5GTykpCisgICAgICAgIHJldHVybiB0cnVlOwor
CiAgICAgaWYgKG5hbWUoKSA9PSAiU2lsdmVybGlnaHQgUGx1Zy1JbiIpIHsKICAgICAgICAgLy8g
d29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly81NTU3Mzc5PiBDcmFzaCBpbiBTaWx2ZXJsaWdodCB3aGVu
IG9wZW5pbmcgbWljcm9zb2Z0LmNvbS4KICAgICAgICAgLy8gdGhlIGxhdGVzdCAxLjAgdmVyc2lv
biBvZiBTaWx2ZXJsaWdodCBkb2VzIG5vdCByZXByb2R1Y2UgdGhpcyBjcmFzaCwgc28gYWxsb3cg
aXQKICAgICAgICAgLy8gYW5kIGFueSBuZXdlciB2ZXJzaW9ucwotICAgICAgICBpZiAobV9maWxl
VmVyc2lvbk1TIDwgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEIHx8
Ci0gICAgICAgICAgICAobV9maWxlVmVyc2lvbk1TID09IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVx
dWlyZWRWZXJzaW9uTVNEV09SRCAmJiBtX2ZpbGVWZXJzaW9uTFMgPCBzaWx2ZXJsaWdodFBsdWdp
bk1pblJlcXVpcmVkVmVyc2lvbkxTRFdPUkQpKQorICAgICAgICBpZiAoaW5mby0+ZHdGaWxlVmVy
c2lvbk1TIDwgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEIHx8Cisg
ICAgICAgICAgICAoaW5mby0+ZHdGaWxlVmVyc2lvbk1TID09IHNpbHZlcmxpZ2h0UGx1Z2luTWlu
UmVxdWlyZWRWZXJzaW9uTVNEV09SRCAmJiBpbmZvLT5kd0ZpbGVWZXJzaW9uTFMgPCBzaWx2ZXJs
aWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxTRFdPUkQpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfSBlbHNlIGlmIChmaWxlTmFtZSgpID09ICJucG1vemF4LmRsbCIpCiAgICAg
ICAgIC8vIEJ1ZyAxNTIxNzogTW96aWxsYSBBY3RpdmVYIGNvbnRyb2wgY29tcGxhaW5zIGFib3V0
IG1pc3NpbmcgeHBjb21fY29yZS5kbGwKQEAgLTE0NCwyMSArMTI4LDE0IEBAIGJvb2wgUGx1Z2lu
UGFja2FnZVdpbjo6aXNQbHVnaW5CbGFja2xpc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgUGx1Z2luUGFja2FnZVdpbjo6ZmV0Y2hJbmZvKCkKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0
Y2hJbmZvKCkKIHsKLSAgICBEV09SRCB2ZXJzaW9uSW5mb1NpemUsIHplcm9IYW5kbGU7Ci0gICAg
dmVyc2lvbkluZm9TaXplID0gR2V0RmlsZVZlcnNpb25JbmZvU2l6ZVcobV9wYXRoLmNoYXJhY3Rl
cnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZ6ZXJvSGFuZGxlKTsgCisgICAgRFdPUkQgdmVyc2lv
bkluZm9TaXplOworICAgIExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEgPSBnZXRWZXJzaW9uSW5mb0Rh
dGEobV9wYXRoLCB2ZXJzaW9uSW5mb1NpemUpOwogCi0gICAgaWYgKHZlcnNpb25JbmZvU2l6ZSA9
PSAwKQorICAgIGlmICghdmVyc2lvbkluZm9EYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBMUFZPSUQgdmVyc2lvbkluZm9EYXRhID0gZmFzdE1hbGxvYyh2ZXJzaW9uSW5mb1NpemUp
OwotCi0gICAgaWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLCAwLCB2ZXJzaW9uSW5mb1NpemUsIHZlcnNpb25JbmZvRGF0YSkpIHsK
LSAgICAgICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQogICAgIG1fbmFtZSA9IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwg
IlByb2R1Y3ROYW1lIik7CiAgICAgbV9kZXNjcmlwdGlvbiA9IGdldFZlcnNpb25JbmZvKHZlcnNp
b25JbmZvRGF0YSwgIkZpbGVEZXNjcmlwdGlvbiIpOwogCkBAIC0xNjcsOCArMTQ0LDYgQEAgYm9v
bCBQbHVnaW5QYWNrYWdlV2luOjpmZXRjaEluZm8oKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgc3RvcmVGaWxlVmVyc2lvbih2ZXJzaW9uSW5mb0RhdGEpOwotCiAgICAgaWYg
KGlzUGx1Z2luQmxhY2tsaXN0ZWQoKSkgewogICAgICAgICBmYXN0RnJlZSh2ZXJzaW9uSW5mb0Rh
dGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDEsNyArMTc2LDcgQEAgYm9vbCBQbHVn
aW5QYWNrYWdlV2luOjpmZXRjaEluZm8oKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFBs
dWdpblBhY2thZ2VXaW46OmxvYWQoKQorYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKIHsKICAg
ICBpZiAobV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpIHsKICAgICAgICAgQVNTRVJUKG1f
bW9kdWxlKTsKQEAgLTMxNSw1MSArMjkwLDcgQEAgYWJvcnQ6CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFBsdWdpblBhY2thZ2VXaW46OnVubG9hZCgpCi17Ci0gICAgaWYgKCFtX2lzTG9h
ZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoLS1tX2xvYWRDb3VudCA+IDApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fTlBQX1NodXRkb3duKCk7Ci0KLSAgICB1bmxvYWRXaXRob3V0
U2h1dGRvd24oKTsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxvYWRXaXRob3V0U2h1
dGRvd24oKQotewotICAgIGlmICghbV9pc0xvYWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKG1fbG9hZENvdW50ID09IDApOwotICAgIEFTU0VSVChtX21vZHVsZSk7Ci0KLSAgICAv
LyA8cmRhcjovLzU1MzA1MTk+OiBDcmFzaCB3aGVuIGNsb3NpbmcgdGFiIHdpdGggcGRmIGZpbGUg
KFJlYWRlciA3IG9ubHkpCi0gICAgLy8gSWYgdGhlIHBsdWdpbiBoYXMgc3ViY2xhc3NlZCBpdHMg
cGFyZW50IHdpbmRvdywgYXMgd2l0aCBSZWFkZXIgNywgd2UgbWF5IGhhdmUKLSAgICAvLyBnb3R0
ZW4gaGVyZSBieSB3YXkgb2YgdGhlIHBsdWdpbidzIGludGVybmFsIHdpbmRvdyBwcm9jIGZvcndh
cmRpbmcgYSBtZXNzYWdlIHRvIG91cgotICAgIC8vIG9yaWdpbmFsIHdpbmRvdyBwcm9jLiBJZiB3
ZSBmcmVlIHRoZSBwbHVnaW4gbGlicmFyeSBmcm9tIGhlcmUsIHdlIHdpbGwganVtcCBiYWNrCi0g
ICAgLy8gdG8gY29kZSB3ZSBqdXN0IGZyZWVkIHdoZW4gd2UgcmV0dXJuLCBzbyBkZWxheSBjYWxs
aW5nIEZyZWVMaWJyYXJ5IGF0IGxlYXN0IHVudGlsCi0gICAgLy8gdGhlIG5leHQgbWVzc2FnZSBs
b29wCi0gICAgZnJlZUxpYnJhcnlTb29uKCk7Ci0KLSAgICBtX2lzTG9hZGVkID0gZmFsc2U7Ci19
Ci0KLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBhY2thZ2UoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKQotewotICAgIFBs
dWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBuZXcgUGx1Z2luUGFja2FnZVdpbihwYXRoLCBsYXN0
TW9kaWZpZWQpOwotCi0gICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkgewotICAgICAgICBk
ZWxldGUgcGFja2FnZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBwYWNrYWdlOwotfQotCi11bnNpZ25lZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3QK
K3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdAogeyAKICAgICB1bnNpZ25lZCBo
YXNoQ29kZXNbM10gPSB7CiAgICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCkBA
IC0zNzAsNyArMzAxLDcgQEAgdW5zaWduZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0
CiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNo
YXIqPihoYXNoQ29kZXMpLCAzICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOwog
fQogCi1ib29sIFBsdWdpblBhY2thZ2VXaW46OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4m
IGEsIGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGIpCitib29sIFBsdWdpblBhY2thZ2U6OmVxdWFs
KGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2UmIGIpCiB7CiAgICAg
cmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb24gJiYgKENvbXBhcmVGaWxl
VGltZSgmYS5tX2xhc3RNb2RpZmllZCwgJmIubV9sYXN0TW9kaWZpZWQpID09IDApOwogfQpJbmRl
eDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmgJKHJldmlzaW9uIDI5ODMzKQor
KysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5QYWNrYWdl
V2luX0gKLSNkZWZpbmUgUGx1Z2luUGFja2FnZVdpbl9ICi0KLSNpbmNsdWRlIDx3aW5zb2NrMi5o
PgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAi
U3RyaW5nSGFzaC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAibnBm
dW5jdGlvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IE1JTUVUb0Rlc2NyaXB0aW9uc01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7Ci0KLSAgICBjbGFz
cyBQbHVnaW5QYWNrYWdlV2luIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZVdpbj4g
ewotICAgIHB1YmxpYzoKLSAgICAgICAgflBsdWdpblBhY2thZ2VXaW4oKTsKLSAgICAgICAgc3Rh
dGljIFBsdWdpblBhY2thZ2VXaW4qIGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBu
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0KLSAgICAgICAgU3RyaW5nIGZpbGVO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQotICAgICAgICBTdHJpbmcgcGFyZW50
RGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnREaXJlY3Rvcnk7IH0KLQotICAgICAg
ICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1fbWltZVRvRGVzY3JpcHRpb25zOyB9Ci0gICAgICAgIGNvbnN0IE1JTUVUb0V4
dGVuc2lvbnNNYXAmIG1pbWVUb0V4dGVuc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4
dGVuc2lvbnM7IH0KLQotICAgICAgICB1bnNpZ25lZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNoKCkg
Y29uc3Q7Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4m
IGEsIGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGIpOwotCi0gICAgICAgIGJvb2wgbG9hZCgpOwot
ICAgICAgICB2b2lkIHVubG9hZCgpOwotICAgICAgICB2b2lkIHVubG9hZFdpdGhvdXRTaHV0ZG93
bigpOwotCi0gICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzKCkgY29uc3Qg
eyByZXR1cm4gJm1fcGx1Z2luRnVuY3M7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBQbHVnaW5Q
YWNrYWdlV2luKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmll
ZCk7Ci0gICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7Ci0gICAgICAgIHZvaWQgc3RvcmVGaWxlVmVy
c2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKTsKLSAgICAgICAgYm9vbCBpc1BsdWdpbkJsYWNr
bGlzdGVkKCk7Ci0KLSAgICAgICAgYm9vbCBtX2lzTG9hZGVkOwotICAgICAgICBpbnQgbV9sb2Fk
Q291bnQ7Ci0KLSAgICAgICAgRFdPUkQgbV9maWxlVmVyc2lvbk1TOwotICAgICAgICBEV09SRCBt
X2ZpbGVWZXJzaW9uTFM7Ci0KLSAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247Ci0gICAgICAg
IFN0cmluZyBtX3BhdGg7Ci0gICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOwotICAgICAgICBTdHJp
bmcgbV9uYW1lOwotICAgICAgICBTdHJpbmcgbV9wYXJlbnREaXJlY3Rvcnk7Ci0KLSAgICAgICAg
TUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOwotICAgICAgICBNSU1F
VG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKLQotICAgICAgICBITU9EVUxFIG1f
bW9kdWxlOwotICAgICAgICBGSUxFVElNRSBtX2xhc3RNb2RpZmllZDsKLQotICAgICAgICBOUFBf
U2h1dGRvd25Qcm9jUHRyIG1fTlBQX1NodXRkb3duOwotICAgICAgICBOUFBsdWdpbkZ1bmNzIG1f
cGx1Z2luRnVuY3M7Ci0gICAgICAgIE5QTmV0c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKLQot
ICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5U29vbigpOwotICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5
VGltZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdlV2luPiopOwotICAgICAgICBUaW1lcjxQbHVn
aW5QYWNrYWdlV2luPiBtX2ZyZWVMaWJyYXJ5VGltZXI7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQ
bHVnaW5QYWNrYWdlV2luSGFzaCB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IGludCBrZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGtl
eSktPmhhc2goKTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8
UGx1Z2luUGFja2FnZVdpbj4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7IH0KLQotICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBpbnQgYSwgY29uc3QgaW50IGIpIHsgcmV0dXJuIGVx
dWFsKHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGEpLCByZWludGVycHJldF9j
YXN0PFBsdWdpblBhY2thZ2VXaW4qPihiKSk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2luUGFj
a2FnZVdpbj4mIGIpIHsgcmV0dXJuIFBsdWdpblBhY2thZ2VXaW46OmVxdWFsKCphLmdldCgpLCAq
Yi5nZXQoKSk7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LS8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gV1RGLCB3aGVyZSBp
dCdzIGltcG9zc2libGUgdG8gdXNlIGEgY3VzdG9tIEhhc2ggZnVuY3Rpb24gYnV0IHdpdGggZGVm
YXVsdCB0cmFpdHMuCi0vLyBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZG8gdGhpcyB3aXRob3V0
IGEgU3RvcmFnZVRyYWl0cyBzcGVjaWFsaXphdGlvbi4KLW5hbWVzcGFjZSBXVEYgewotICAgIHRl
bXBsYXRlPD4gc3RydWN0IEhhc2hLZXlTdG9yYWdlVHJhaXRzPFdlYkNvcmU6OlBsdWdpblBhY2th
Z2VXaW5IYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPiA+
ID4gewotICAgICAgICB0eXBlZGVmIEludFR5cGVzPHNpemVvZihSZWZQdHI8V2ViQ29yZTo6UGx1
Z2luUGFja2FnZVdpbj4pPjo6U2lnbmVkVHlwZSBJbnRUeXBlOwotICAgICAgICB0eXBlZGVmIFdl
YkNvcmU6OlBsdWdpblBhY2thZ2VXaW5IYXNoIEhhc2g7Ci0gICAgICAgIHR5cGVkZWYgSGFzaFRy
YWl0czxJbnRUeXBlPiBUcmFpdHM7Ci0gICAgfTsKLX0KLQotCi0jZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkocmV2aXNpb24gMjk4MzMpCisrKyBXZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMiAr
NDcsMTEgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2Fn
ZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJranNfYmluZGlu
Zy5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKICNp
bmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKICNp
bmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0xNTE3LDcgKzE1MTYsNyBAQCB2b2lkIFBsdWdpblZpZXdX
aW46OnNldFBhcmFtZXRlcnMoY29uc3QgCiAgICAgbV9wYXJhbUNvdW50ID0gcGFyYW1Db3VudDsK
IH0KIAotUGx1Z2luVmlld1dpbjo6UGx1Z2luVmlld1dpbihGcmFtZSogcGFyZW50RnJhbWUsIGNv
bnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSkKK1BsdWdpblZpZXdXaW46OlBsdWdpblZpZXdXaW4oRnJhbWUq
IHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4s
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiAgICAgOiBtX3BhcmVudEZyYW1lKHBh
cmVudEZyYW1lKQogICAgICwgbV9wbHVnaW4ocGx1Z2luKQogICAgICwgbV9lbGVtZW50KGVsZW1l
bnQpCkBAIC0xNjY0LDQgKzE2NjMsMjAgQEAgYm9vbCBQbHVnaW5WaWV3V2luOjppc0NhbGxpbmdQ
bHVnaW4oKQogICAgIHJldHVybiBzX2NhbGxpbmdQbHVnaW4gPiAwOwogfQogCitQbHVnaW5WaWV3
V2luKiBQbHVnaW5WaWV3V2luOjpjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKK3sK
KyAgICAvLyBpZiB3ZSBmYWlsIHRvIGZpbmQgYSBwbHVnaW4gZm9yIHRoaXMgTUlNRSB0eXBlLCBm
aW5kUGx1Z2luIHdpbGwgc2VhcmNoIGZvcgorICAgIC8vIGEgcGx1Z2luIGJ5IHRoZSBmaWxlIGV4
dGVuc2lvbiBhbmQgdXBkYXRlIHRoZSBNSU1FIHR5cGUsIHNvIHBhc3MgYSBtdXRhYmxlIFN0cmlu
ZworICAgIFN0cmluZyBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICBQbHVnaW5QYWNrYWdl
KiBwbHVnaW4gPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5maW5kUGx1Z2lu
KHVybCwgbWltZVR5cGVDb3B5KTsKKyAgICAKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0
cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIGlmICgh
cGx1Z2luICYmIHJlZnJlc2goKSkgeworICAgICAgICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsK
KyAgICAgICAgcGx1Z2luID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+Zmlu
ZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7CisgICAgfQorICAgICAgICAKKyAgICByZXR1cm4g
bmV3IFBsdWdpblZpZXdXaW4ocGFyZW50RnJhbWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJs
LCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGVDb3B5LCBsb2FkTWFudWFsbHkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpblZpZXdXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZp
ZXdXaW4uaAkocmV2aXNpb24gMjk4MzMpCisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZp
ZXdXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgTW91c2VFdmVudDsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFBs
dWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW47Ci0gICAgY2xhc3MgUGx1Z2luUGFja2FnZVdpbjsKKyAg
ICBjbGFzcyBQbHVnaW5QYWNrYWdlOwogICAgIGNsYXNzIFBsdWdpblJlcXVlc3RXaW47CiAgICAg
Y2xhc3MgUGx1Z2luU3RyZWFtOwogICAgIGNsYXNzIFJlc291cmNlRXJyb3I7CkBAIC03NiwxMCAr
NzYsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGZyaWVuZCBzdGF0aWMgTFJFU1VMVCBD
QUxMQkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiAK
ICAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpblZpZXdXaW4oRnJhbWUqIHBhcmVudEZyYW1lLCBj
b25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luLCBFbGVtZW50KiwgY29uc3Qg
S1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVh
bGx5KTsKKyAgICAgICAgc3RhdGljIFBsdWdpblZpZXdXaW4qIGNyZWF0ZVBsdWdpblZpZXcoRnJh
bWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wg
bG9hZE1hbnVhbGx5KTsKKworICAgICAgICBQbHVnaW5WaWV3V2luKEZyYW1lKiBwYXJlbnRGcmFt
ZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2thZ2UqIHBsdWdpbiwgRWxlbWVudCosIGNvbnN0
IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51
YWxseSk7CiAgICAgICAgIHZpcnR1YWwgflBsdWdpblZpZXdXaW4oKTsKIAotICAgICAgICBQbHVn
aW5QYWNrYWdlV2luKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5nZXQoKTsgfQor
ICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5n
ZXQoKTsgfQogICAgICAgICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNl
OyB9CiAKICAgICAgICAgdm9pZCBzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpOwpAQCAt
MTQ2LDcgKzE0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgTlBFcnJvciBsb2Fk
KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5v
dGlmeURhdGEpOwogICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBj
b25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxl
LCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFk
ZXJzKTsKICAgICAgICAgdm9pZCBzZXRDYWxsaW5nUGx1Z2luKGJvb2wpIGNvbnN0OwotICAgICAg
ICBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4gbV9wbHVnaW47CisgICAgICAgIFJlZlB0cjxQbHVn
aW5QYWNrYWdlPiBtX3BsdWdpbjsKICAgICAgICAgRWxlbWVudCogbV9lbGVtZW50OwogICAgICAg
ICBGcmFtZSogbV9wYXJlbnRGcmFtZTsKICAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18916</attachid>
            <date>2008-02-04 13:06:30 -0800</date>
            <delta_ts>2008-02-14 11:53:35 -0800</delta_ts>
            <desc>Updated patch against svn trunk r29968</desc>
            <filename>webkit-more-shared-plugin-api.patch</filename>
            <type>text/plain</type>
            <size>126844</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTk2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMDgtMDItMDQgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBTaGFyZWQgY2xhc3NlcyBmb3IgUGx1Z2luRGF0YWJhc2UgYW5kIFBsdWdpblBhY2thZ2UK
KyAgICAgICAgU2hhcmVkIGltcGxlbWVudGF0aW9uIG9mIFBsdWdpbkluZm9TdG9yZSBBUEkKKyAg
ICAgICAgQWRkIGlzUHJlZmVycmVkUGx1Z2luUGF0aCgpIG1ldGhvZCBmb3IgYSBwcmVmZXJyZWQg
cGx1Zy1pbiBkaXJlY3RvcnkKKyAgICAgICAgQWRkIHRoZSBuZXcgc2hhcmVkIGNsYXNzIGltcGxl
bWVudGF0aW9ucyB0byBhdXRvdG9vbHMgYW5kIHFtYWtlIGJ1aWxkcworICAgICAgICBNb3ZlIHRo
ZSBjcmVhdGVQbHVnaW5WaWV3IEFQSSB0byBQbHVnaW5WaWV3V2luLCB0byBhdm9pZCBhCisgICAg
ICAgIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2l0aCBQbHVnaW5EYXRhYmFzZQorICAgICAgICBVc2Ug
c3RhdGljIGdsb2JhbHMgZm9yIHRoZSBtX2ZpbGVWZXJzaW9ue01TLExTfSB2YXJpYWJsZXMgb24g
V2luMzIKKyAgICAgICAgTWFrZSBzdG9yZUZpbGVWZXJzaW9uIGFuZCBpc1BsdWdpbkJsYWNrbGlz
dGVkIHN0YXRpYyBpbnRlcm5hbCBDIG1ldGhvZHMKKyAgICAgICAgRGVmaW5lIFBsYXRmb3JtRmls
ZVRpbWUgYW5kIFBsYXRmb3JtTW9kdWxlIHR5cGVzCisgICAgICAgIEltcGxlbWVudCBwYXRoR2V0
RmlsZU5hbWUgZm9yIFdpbjMyIGFuZCBHVEsrCisgICAgICAgIEltcGxlbWVudCB1bmxvYWRNb2R1
bGUgZm9yIFdpbjMyIGFuZCBHVEsrCisgICAgICAgIEFkZCBub3RJbXBsZW1lbnRlZCgpcyBmb3Ig
cGF0aEdldEZpbGVOYW1lIGFuZCB1bmxvYWRNb2R1bGUgb24gUXQKKyAgICAgICAgVXBkYXRlIHRo
ZSBXaW4zMiB2Y3Byb2ogZm9yIHRoZSBwbHVnLWluIEFQSSBjaGFuZ2VzCisgICAgICAgIEFkZCB0
ZW1wb3Jhcnkgc3R1YnMgZm9yIFBsdWdpbkRhdGFiYXNlIGFuZCBQbHVnaW5QYWNrYWdlIG1ldGhv
ZHMsCisgICAgICAgIG9uIEdUSysgYW5kIFF0CisgICAgICAgIFJlbW92ZSB0ZW1wb3Jhcnkgc3R1
YnMgZm9yIFBsdWdJbkluZm9TdG9yZSBvbiBHVEsrIGFuZCBRdAorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9GaWxl
U3lzdGVtUXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5j
cHA6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHA6CisgICAgICAgICogcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5oOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luSW5mb1N0b3Jl
LmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAgICAgICAqIHBs
dWdpbnMvUGx1Z2luUGFja2FnZS5oOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdJbkluZm9T
dG9yZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3Bw
OgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmg6CisgICAgICAgICog
cGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy93aW4v
UGx1Z2luUGFja2FnZVdpbi5oOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uaDoKKwogMjAwOC0wMi0w
NCAgIERhdmlkIEhhcnJpc29uICA8aGFycmlzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFRpbSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAyOTk2OCkKKysrIFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTg0Nyw2ICs4NDcsOSBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vVGltZXIuY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9XaWRn
ZXQuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIFwKKwlXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBh
Y2thZ2UuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBcCiAJV2ViQ29y
ZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlk
aS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiAyOTk2OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTc4Miw2ICs3ODIsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9y
bS9UaW1lci5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAgICAg
cGxhdGZvcm0vV2lkZ2V0LmNwcCBcCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgXAor
ICAgIHBsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCisgICAgcGx1Z2lucy9QbHVnaW5QYWNr
YWdlLmNwcCBcCiAgICAgcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKICAgICByZW5kZXJpbmcv
QXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAgICAgcmVuZGVyaW5nL2JpZGkuY3BwIFwKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMjk5NjgpCisrKyBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03OTM3
LDEwICs3OTM3LDMwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5EYXRh
YmFzZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5JbmZvU3RvcmUuY3BwIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1
Z2luc1xQbHVnaW5QYWNrYWdlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2FnZS5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVn
aW5RdWlya1NldC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTc5NjQsMjIgKzc5ODQsMTAg
QEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsdWdpbnNcd2luXFBsdWdpbkRhdGFiYXNlV2luLmgiDQotCQkJCQk+DQotCQkJCTwvRmls
ZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1x3aW5cUGx1Z0lu
SW5mb1N0b3JlV2luLmNwcCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmNwcCINCiAJ
CQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bHVnaW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0J
CQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luVmlld1dp
bi5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0Zp
bGVTeXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAko
cmV2aXNpb24gMjk5NjgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsMTAgQEAKICNpZm5kZWYgRmlsZVN5c3RlbV9oCiAjZGVmaW5l
IEZpbGVTeXN0ZW1faAogCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGdtb2R1bGUuaD4K
KyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKIHR5cGVkZWYgY29uc3Qgc3Ry
dWN0IF9fQ0ZEYXRhKiBDRkRhdGFSZWY7CkBAIC00MSw5ICs0NSwxNyBAQCBjbGFzcyBTdHJpbmc7
CiAKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIEhBTkRMRSBQbGF0Zm9ybUZpbGVIYW5kbGU7
Cit0eXBlZGVmIEZJTEVUSU1FIFBsYXRmb3JtRmlsZVRpbWU7Cit0eXBlZGVmIEhNT0RVTEUgUGxh
dGZvcm1Nb2R1bGU7CiBjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUgaW52YWxpZFBsYXRmb3JtRmls
ZUhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogI2Vsc2UKIHR5cGVkZWYgaW50IFBsYXRm
b3JtRmlsZUhhbmRsZTsKK3R5cGVkZWYgdGltZV90IFBsYXRmb3JtRmlsZVRpbWU7CisjaWYgUExB
VEZPUk0oR1RLKQordHlwZWRlZiBHTW9kdWxlKiBQbGF0Zm9ybU1vZHVsZTsKKyNlbHNlCit0eXBl
ZGVmIHZvaWQqIFBsYXRmb3JtTW9kdWxlOworI2VuZGlmCiBjb25zdCBQbGF0Zm9ybUZpbGVIYW5k
bGUgaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IC0xOwogI2VuZGlmCiAKQEAgLTU0LDYgKzY2
LDcgQEAgYm9vbCBmaWxlU2l6ZShjb25zdCBTdHJpbmcmLCBsb25nIGxvbmcmIAogU3RyaW5nIHBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYg
Y29tcG9uZW50KTsKIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCk7
CiBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKTsKK1N0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29u
c3QgU3RyaW5nJik7CiAKIENTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0
cmluZyYpOwogCkBAIC02NCw2ICs3Nyw5IEBAIENTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29u
c3QgY2hhciogcHIKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYpOwogaW50IHdy
aXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCk7CiAKKy8qIE1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBsb2FkYWJsZSBtb2R1bGVzICovCiti
b29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSk7CisKICNpZiBQTEFURk9STShXSU4pCiBT
dHJpbmcgbG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCk7CiBTdHJpbmcgcm9hbWlu
Z1VzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0ZpbGVTeXN0ZW1HdGsuY3BwCShyZXZpc2lvbiAyOTk2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDIwIEBA
IGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGEKICAgICByZXR1cm4gcmVz
dWx0ID09IDA7CiB9CiAKK1N0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoZ19nZXRfaG9tZV9kaXIoKSk7Cit9CisKK1N0cmluZyBwYXRoR2V0
RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoTmFtZSkKK3sKKyAgICBjaGFyKiBiYXNlTmFtZSA9
IGdfcGF0aF9nZXRfYmFzZW5hbWUocGF0aE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgU3RyaW5n
IGZpbGVOYW1lID0gU3RyaW5nOjpmcm9tVVRGOChiYXNlTmFtZSk7CisgICAgZ19mcmVlKGJhc2VO
YW1lKTsKKworICAgIHJldHVybiBmaWxlTmFtZTsKK30KKwogQ1N0cmluZyBvcGVuVGVtcG9yYXJ5
RmlsZShjb25zdCBjaGFyKiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogewog
ICAgIGdjaGFyKiBmaWxlbmFtZSA9IGdfc3RyZHVwX3ByaW50ZigiJXNYWFhYWFgiLCBwcmVmaXgp
OwpAQCAtMTQ1LDQgKzE1OSw5IEBAIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUg
aGFuZGwKIAogICAgIHJldHVybiB0b3RhbEJ5dGVzV3JpdHRlbjsKIH0KKworYm9vbCB1bmxvYWRN
b2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQoreworICAgIHJldHVybiBnX21vZHVsZV9jbG9z
ZShtb2R1bGUpOworfQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlu
a1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCShyZXZpc2lvbiAyOTk2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDkgQEAKICNp
bmNsdWRlICJGVFBEaXJlY3RvcnlEb2N1bWVudC5oIgogI2luY2x1ZGUgIkdsb2JhbEhpc3Rvcnku
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9y
ZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2Fn
ZS5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKQEAgLTU3LDEyICs1OSwxMyBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5
KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFyKiwgdW5z
aWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6
Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQpIHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgp
IGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVN0cmluZyBQbHVnSW5JbmZv
U3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQotYm9vbCBXZWJDb3JlOjpQbHVnSW5J
bmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdp
bnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KK1BsdWdpblNldCBQbHVnaW5EYXRhYmFz
ZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IFBsdWdpblNl
dCBwbHVnaW5zOyByZXR1cm4gcGx1Z2luczt9CitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFz
ZTo6ZGVmYXVsdFBsdWdpblBhdGhzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyBWZWN0b3I8U3RyaW5n
PiBwYXRoczsgcmV0dXJuIHBhdGhzO30KK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVk
UGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBmYWxzZTsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKSB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiBmYWxzZTt9Cit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29u
c3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDt9Citib29sIFBsdWdpblBhY2thZ2U6OmVx
dWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmLCBjb25zdCBQbHVnaW5QYWNrYWdlJikgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKIENvbG9yIFdlYkNvcmU6OmZvY3Vz
UmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBXZWJDb3JlOjpzZXRGb2N1
c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vcXQvRmlsZVN5c3RlbVF0LmNwcAkocmV2aXNpb24gMjk5NjgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL3F0L0ZpbGVTeXN0ZW1RdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDE4IEBA
IFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3QKICAgICByZXR1cm4gUURp
cihwYXRoKS5maWxlUGF0aChjb21wb25lbnQpOwogfQogCitTdHJpbmcgcGF0aEdldEZpbGVOYW1l
KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQorCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0KIAogLy8gdmlt
OiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAJKHJldmlzaW9uIDI5OTY4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw4IEBACiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAi
UGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAjaW5jbHVkZSAiVGV4dEJv
dW5kYXJpZXMuaCIKQEAgLTY5LDYgKzcwLDE0IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3Qg
eyBub3RJbXBsZW1lbnRlZCgpOyBQbHVnaW5TZXQgcGx1Z2luczsgcmV0dXJuIHBsdWdpbnM7fQor
VmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpIHsgbm90
SW1wbGVtZW50ZWQoKTsgVmVjdG9yPFN0cmluZz4gcGF0aHM7IHJldHVybiBwYXRoczt9Citib29s
IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJikgY29u
c3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgUGx1Z2luUGFja2Fn
ZTo6ZmV0Y2hJbmZvKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7fQordW5zaWdu
ZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7fQorYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiwgY29u
c3QgUGx1Z2luUGFja2FnZSYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Citi
b29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxz
ZTsgfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFZlY3RvcjxTdHJpbmc+IHN1cHBvcnRlZEtl
eVNpemVzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsgfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDI5OTY4
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNCw2ICsxMTQsMTEgQEAgU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKICAgICBy
ZXR1cm4gIiI7CiB9CiAKK1N0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRo
KQoreworICAgIHJldHVybiBTdHJpbmcoUGF0aEZpbmRGaWxlTmFtZShTdHJpbmcocGF0aCkuY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSkpOworfQorCiBzdGF0aWMgU3RyaW5nIGJ1bmRs
ZU5hbWUoKQogewogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkOwpAQCAtMjAyLDYgKzIwNywx
MiBAQCBpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsCiAgICAgICAgIHJl
dHVybiAtMTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihieXRlc1dyaXR0ZW4pOwogfQor
Citib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUpCit7CisgICAgcmV0dXJu
IDo6RnJlZUxpYnJhcnkobW9kdWxlKTsKK30KKwogU3RyaW5nIGxvY2FsVXNlclNwZWNpZmljU3Rv
cmFnZURpcmVjdG9yeSgpCiB7CiAgICAgcmV0dXJuIGNhY2hlZFN0b3JhZ2VEaXJlY3RvcnkoQ1NJ
RExfTE9DQUxfQVBQREFUQSk7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHJl
dmlzaW9uIDI5NjI2KQkoZnJvbSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2lu
LmNwcDoyOTYyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlV2luLmgiCisKKyNpbmNsdWRlICJQbHVn
aW5QYWNrYWdlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld1dpbi5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHNobHdhcGkuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5EYXRhYmFzZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46
Omluc3RhbGxlZFBsdWdpbnMoKQoreworICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZVdpbiogcGx1
Z2lucyA9IDA7CisgICAgCisgICAgaWYgKCFwbHVnaW5zKSB7CisgICAgICAgIHBsdWdpbnMgPSBu
ZXcgUGx1Z2luRGF0YWJhc2VXaW47CisgICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBs
dWdpbkRhdGFiYXNlV2luOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSk7CisgICAgICAgIHBsdWdpbnMt
PnJlZnJlc2goKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luczsKK30KKwordm9pZCBQbHVn
aW5EYXRhYmFzZVdpbjo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sK
KyAgICBtX3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICByZWZyZXNoKCk7Cit9CisKK2Jv
b2wgUGx1Z2luRGF0YWJhc2VXaW46OnJlZnJlc2goKQoreyAgIAorICAgIFBsdWdpblNldCBuZXdQ
bHVnaW5zOworCisgICAgYm9vbCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7CisKKyAgICAvLyBD
cmVhdGUgYSBuZXcgc2V0IG9mIHBsdWdpbnMKKyAgICBuZXdQbHVnaW5zID0gZ2V0UGx1Z2luc0lu
UGF0aHMoKTsKKworICAgIGlmICghbV9wbHVnaW5zLmlzRW1wdHkoKSkgeworICAgICAgICBtX3Jl
Z2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKKworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1Rv
VW5sb2FkID0gbV9wbHVnaW5zOworCisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
ICAgICBwbHVnaW5zVG9VbmxvYWQucmVtb3ZlKCppdCk7CisKKyAgICAgICAgZW5kID0gbV9wbHVn
aW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbmV3UGx1Z2lu
cy5yZW1vdmUoKml0KTsKKworICAgICAgICAvLyBVbmxvYWQgcGx1Z2lucworICAgICAgICBlbmQg
PSBwbHVnaW5zVG9VbmxvYWQuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgICAgICBtX3BsdWdpbnMucmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gQWRkIG5ldyBw
bHVnaW5zCisgICAgICAgIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdp
blNldENoYW5nZWQgPSAhcGx1Z2luc1RvVW5sb2FkLmlzRW1wdHkoKSB8fCAhbmV3UGx1Z2lucy5p
c0VtcHR5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5zID0gbmV3UGx1Z2luczsK
KyAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgp
OworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0
KTsKKworICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIW5ld1BsdWdpbnMuaXNFbXB0eSgpOwor
ICAgIH0KKworICAgIC8vIFJlZ2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgLy8gR2V0IE1JTUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9u
cygpLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgbWFwX2l0ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7IG1hcF9p
dCAhPSBtYXBfZW5kOyArK21hcF9pdCkgeworICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5
cGVzLmFkZChtYXBfaXQtPmZpcnN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBw
bHVnaW5TZXRDaGFuZ2VkOworfQorCitWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IFBsdWdpbkRh
dGFiYXNlV2luOjpwbHVnaW5zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8UGx1Z2luUGFja2FnZVdp
bio+IHJlc3VsdDsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVn
aW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1
Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoKCpp
dCkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IGFkZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMp
Cit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJv
b3RLZXksIEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJf
S0VZUywgJmtleSk7CisKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAg
IHJldHVybjsKKworICAgIHdjaGFyX3QgbmFtZVsxMjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2Rp
ZmllZDsKKworICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBp
KyspIHsKKyAgICAgICAgRFdPUkQgbmFtZUxlbiA9IF9jb3VudG9mKG5hbWUpOworICAgICAgICBy
ZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZs
YXN0TW9kaWZpZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKKyAg
ICAgICAgRFdPUkQgcGF0aFN0clNpemUgPSBzaXplb2YocGF0aFN0cik7CisgICAgICAgIERXT1JE
IHR5cGU7CisKKyAgICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShrZXksIG5hbWUsIFRFWFQoIlBh
dGgiKSwgJnR5cGUsIChMUEJZVEUpcGF0aFN0ciwgJnBhdGhTdHJTaXplKTsKKyAgICAgICAgaWYg
KHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTIHx8IHR5cGUgIT0gUkVHX1NaKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyaWJ1dGVz
OworICAgICAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZv
U3RhbmRhcmQsICZhdHRyaWJ1dGVzKSA9PSAwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgUGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNyZWF0
ZVBhY2thZ2UoU3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEp
LCBhdHRyaWJ1dGVzLmZ0TGFzdFdyaXRlVGltZSk7CisKKyAgICAgICAgaWYgKHBhY2thZ2UpCisg
ICAgICAgICAgICBwbHVnaW5zLmFkZChwYWNrYWdlKTsKKyAgICB9CisKKyAgICBSZWdDbG9zZUtl
eShrZXkpOworfQorCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VXaW46OmdldFBsdWdpbnNJblBh
dGhzKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vu
c2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOworICAgIFBs
dWdpblNldCBwbHVnaW5zOworCisgICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFM
VUU7CisgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7CisKKyAgICBQbHVnaW5QYWNr
YWdlV2luKiBvbGRXTVBQbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2thZ2VXaW4qIG5ld1dNUFBs
dWdpbiA9IDA7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
bHVnaW5QYXRocy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IFN0cmluZyBwYXR0ZXJuID0gKml0ICsgIlxcKiI7CisKKyAgICAgICAgaEZpbmQgPSBGaW5kRmly
c3RGaWxlVyhwYXR0ZXJuLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZmaW5kRmls
ZURhdGEpOworCisgICAgICAgIGlmIChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChmaW5k
RmlsZURhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0g
U3RyaW5nKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURhdGEuY0ZpbGVO
YW1lKSk7CisgICAgICAgICAgICBpZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJucCIsIGZhbHNl
KSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoImRsbCIsIGZhbHNlKSkgJiYKKyAgICAgICAgICAgICAg
ICAoIWVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5k
c1dpdGgoIlNob2Nrd2F2ZSAxMCIsIGZhbHNlKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBmaWxlbmFtZTsK
KyAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCkuc2Vjb25kKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgICAgIFBsdWdpblBh
Y2thZ2VXaW4qIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdl
KGZ1bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1lKTsKKworICAgICAgICAgICAg
aWYgKHBsdWdpblBhY2thZ2UpIHsKKyAgICAgICAgICAgICAgICBwbHVnaW5zLmFkZChwbHVnaW5Q
YWNrYWdlKTsKKworICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFt
ZSwgIm5wZHNwbGF5LmRsbCIpKQorICAgICAgICAgICAgICAgICAgICBvbGRXTVBQbHVnaW4gPSBw
bHVnaW5QYWNrYWdlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGZpbGVuYW1lLCAibnAtbXN3bXAuZGxsIikpCisgICAgICAgICAgICAgICAgICAgIG5ld1dNUFBs
dWdpbiA9IHBsdWdpblBhY2thZ2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSB3aGlsZSAo
RmluZE5leHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0gMCk7CisKKyAgICAgICAgRmlu
ZENsb3NlKGhGaW5kKTsKKyAgICB9CisKKyAgICBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVlf
TE9DQUxfTUFDSElORSwgcGx1Z2lucyk7CisgICAgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZ
X0NVUlJFTlRfVVNFUiwgcGx1Z2lucyk7CisKKyAgICAvLyBJZiBib3RoIHRoZSBvbGQgYW5kIG5l
dyBXTVAgcGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwgCisgICAgLy8gd2Ug
cmVtb3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2luZyB0aGUgb2xkIG9u
ZS4KKyAgICBpZiAob2xkV01QUGx1Z2luICYmIG5ld1dNUFBsdWdpbikKKyAgICAgICAgcGx1Z2lu
cy5yZW1vdmUob2xkV01QUGx1Z2luKTsKKworICAgIHJldHVybiBwbHVnaW5zOworfQorCitzdGF0
aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZl
cnNpb25TdHJpbmcpCit7CisgICAgVmVjdG9yPGludD4gdmVyc2lvbjsKKworICAgIHVuc2lnbmVk
IHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7CisgICAgCisgICAgd2hpbGUgKHN0
YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgeworICAgICAgICBmb3IgKGVuZFBvcyA9
IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKKyAg
ICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJp
bmdbZW5kUG9zXSA9PSAnXycpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50
IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5k
UG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7CisgICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25D
b21wb25lbnQpOworCisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdmVyc2lvbjsKK30KKworLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEg
aXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lv
bnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lv
bkIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsr
KSB7CisgICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lv
bkJbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgd2Ug
Y29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBo
YXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQbHVnaW5QYXRocyhWZWN0b3I8
U3RyaW5nPiYgcGF0aHMpCit7CisgICAgLy8gRW51bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBk
aXJlY3RvcmllcyBpbiB0aGUgcmVnaXN0cnkKKyAgICBIS0VZIGtleTsKKyAgICBMT05HIHJlc3Vs
dDsKKyAgICAKKyAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBU
RVhUKCJTb2Z0d2FyZVxcTW96aWxsYSIpLCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJl
c3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICAg
ICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOworCisgICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlz
CisgICAgICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgICAgICBEV09SRCBuYW1l
TGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2Rp
ZmllZCk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0g
U3RyaW5nKG5hbWUsIG5hbWVMZW4pICsgIlxcRXh0ZW5zaW9ucyI7CisgICAgICAgICAgICBIS0VZ
IGV4dGVuc2lvbnNLZXk7CisKKyAgICAgICAgICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKKyAg
ICAgICAgICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIEtFWV9SRUFELCAmZXh0ZW5zaW9uc0tleSk7
CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAg
ICAgICAgIC8vIE5vdyBnZXQgdGhlIHBsdWdpbnMgcGF0aAorICAgICAgICAgICAgICAgIFdDSEFS
IHBsdWdpbnNQYXRoU3RyW19NQVhfUEFUSF07CisgICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2lu
c1BhdGhTaXplID0gc2l6ZW9mKHBsdWdpbnNQYXRoU3RyKTsKKyAgICAgICAgICAgICAgICBEV09S
RCB0eXBlOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4dGVu
c2lvbnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNQYXRo
U3RyLCAmcGx1Z2luc1BhdGhTaXplKTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0g
RVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikKKyAgICAgICAgICAgICAgICAgICAgcGF0
aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5zUGF0aFN0ciwgcGx1Z2luc1BhdGhTaXplIC8gc2l6ZW9m
KFdDSEFSKSAtIDEpKTsKKworICAgICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNL
ZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZWdDbG9z
ZUtleShrZXkpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRp
YVBsYXllclBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIC8vIFRoZSBu
ZXcgV01QIEZpcmVmb3ggcGx1Z2luIGlzIGluc3RhbGxlZCBpbiBcUEZpbGVzXFBsdWdpbnMgaWYg
aXQgY2FuJ3QgZmluZCBhbnkgRmlyZWZveCBpbnN0YWxscworICAgIFdDSEFSIHBsdWdpbkRpcmVj
dG9yeVN0cltfTUFYX1BBVEggKyAxXTsKKyAgICBEV09SRCBwbHVnaW5EaXJlY3RvcnlTaXplID0g
OjpFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKFRFWFQoIiVTWVNURU1EUklWRSVcXFBGaWxlc1xc
UGx1Z2lucyIpLCBwbHVnaW5EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHBsdWdpbkRpcmVjdG9yeVN0
cikpOworCisgICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9y
eVNpemUgPD0gX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5U3RyKSkKKyAgICAgICAgcGF0aHMuYXBw
ZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7
CisKKyAgICBEV09SRCB0eXBlOworICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltf
TUFYX1BBVEhdOworICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2Yo
aW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRW
YWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxNaWNyb3NvZnRcXE1lZGlh
UGxheWVyIiksIFRFWFQoIkluc3RhbGxhdGlvbiBEaXJlY3RvcnkiKSwgJnR5cGUsIChMUEJZVEUp
Jmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwor
CisgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQorICAg
ICAgICBwYXRocy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFs
bGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBhZGRRdWlja1RpbWVQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykK
K3sKKyAgICBEV09SRCB0eXBlOworICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltf
TUFYX1BBVEhdOworICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2Yo
aW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRW
YWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxBcHBsZSBDb21wdXRlciwg
SW5jLlxcUXVpY2tUaW1lIiksIFRFWFQoIkluc3RhbGxEaXIiKSwgJnR5cGUsIChMUEJZVEUpJmlu
c3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOworCisg
ICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKSB7CisgICAg
ICAgIFN0cmluZyBwbHVnaW5EaXIgPSBTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBp
bnN0YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxccGx1Z2lu
cyI7CisgICAgICAgIHBhdGhzLmFwcGVuZChwbHVnaW5EaXIpOworICAgIH0KK30KKworc3RhdGlj
IGlubGluZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBh
dGhzKQoreworICAgIEhLRVkga2V5OworICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4
KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRl
ciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNT
KQorICAgICAgICByZXR1cm47CisKKyAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgRklMRVRJTUUg
bGFzdE1vZGlmaWVkOworCisgICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247Cisg
ICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOworCisgICAgLy8gRW51bWVyYXRl
IHN1YmtleXMKKyAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09SRCBuYW1l
TGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgcmVzdWx0ID0gUmVn
RW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVk
KTsKKworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVyc2lv
blN0cmluZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOworICAgICAgICBpZiAoY29tcGFyZVZlcnNp
b25zKGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lvbikpIHsKKyAgICAgICAgICAg
IGxhdGVzdEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247CisgICAgICAgICAgICBsYXRl
c3RBY3JvYmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxsKCkp
IHsKKyAgICAgICAgRFdPUkQgdHlwZTsKKyAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQYXRo
U3RyW19NQVhfUEFUSF07CisgICAgICAgIERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgPSBz
aXplb2YoYWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKKworICAgICAgICBTdHJpbmcgYWNyb2JhdFBs
dWdpbktleVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxhdGVz
dEFjcm9iYXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgiOworICAgICAgICByZXN1bHQg
PSBTSEdldFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktleVBhdGguY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgJnR5cGUsIChMUEJZVEUpYWNyb2JhdElu
c3RhbGxQYXRoU3RyLCAmYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSk7CisKKyAgICAgICAgaWYgKHJl
c3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdp
blBhdGggPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0SW5zdGFsbFBhdGhT
aXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7CisgICAgICAgICAgICBwYXRo
cy5hcHBlbmQoYWNyb2JhdFBsdWdpblBhdGgpOworICAgICAgICB9CisgICAgfQorCisgICAgUmVn
Q2xvc2VLZXkoa2V5KTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc2FmYXJpUGx1Z2luc1Bh
dGgoKQoreworICAgIFdDSEFSIG1vZHVsZUZpbGVOYW1lU3RyW19NQVhfUEFUSF07CisgICAgc3Rh
dGljIFN0cmluZyBwbHVnaW5zUGF0aDsKKyAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5QYXRo
ID0gZmFsc2U7CisKKyAgICBpZiAoIWNhY2hlZFBsdWdpblBhdGgpIHsKKyAgICAgICAgY2FjaGVk
UGx1Z2luUGF0aCA9IHRydWU7CisKKyAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0
TW9kdWxlRmlsZU5hbWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7CisKKyAgICAg
ICAgaWYgKCFtb2R1bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BB
VEgpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmls
ZVNwZWMobW9kdWxlRmlsZU5hbWVTdHIpKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAg
ICAgIHBsdWdpbnNQYXRoID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMi
OworICAgIH0KK2V4aXQ6CisgICAgcmV0dXJuIHBsdWdpbnNQYXRoOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpblBhdGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykK
K3sKKyAgICBXQ0hBUiBzeXN0ZW1EaXJlY3RvcnlTdHJbTUFYX1BBVEhdOworCisgICAgaWYgKEdl
dFN5c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHN5c3RlbURpcmVj
dG9yeVN0cikpID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG1hY3JvbWVkaWFE
aXJlY3RvcnlTdHJbTUFYX1BBVEhdOworCisgICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVj
dG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcRmxhc2giKSk7Cisg
ICAgcGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOworCisgICAgUGF0aENvbWJp
bmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNy
b21lZFxcU2hvY2t3YXZlIDEwIikpOworICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0
b3J5U3RyKTsKK30KKworVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQ
bHVnaW5QYXRocygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7CisgICAgU3RyaW5nIG91
clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOworCisgICAgaWYgKCFvdXJQYXRoLmlzTnVsbCgp
KQorICAgICAgICBwYXRocy5hcHBlbmQob3VyUGF0aCk7CisgICAgYWRkUXVpY2tUaW1lUGx1Z2lu
UGF0aChwYXRocyk7CisgICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChwYXRocyk7CisgICAg
YWRkTW96aWxsYVBsdWdpblBhdGhzKHBhdGhzKTsKKyAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQ
bHVnaW5QYXRoKHBhdGhzKTsKKyAgICBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMocGF0aHMpOwor
CisgICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlV2luOjppc01JTUVU
eXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlw
ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JlZ2lzdGVyZWRN
SU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAv
LyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNl
YXJjaGluZyBhZ2FpbgorICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVU
eXBlcy5jb250YWlucyhtaW1lVHlwZSkpOworfQorCitQbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5E
YXRhYmFzZVdpbjo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sK
KyAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0
cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOworICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJp
UGx1Z2luc1BhdGgoKTsKKyAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSAwOworICAgIFBs
dWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworCisgICAgZm9y
IChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNv
bnRhaW5zKGtleSkpIHsKKyAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOworICAgICAg
ICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQorICAg
ICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW47
Cit9CisKK1N0cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0Cit7CisgICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJp
UGx1Z2luc1BhdGgoKTsKKyAgICBTdHJpbmcgbWltZVR5cGU7CisgICAgUGx1Z2luUGFja2FnZVdp
biogcGx1Z2luID0gMDsKKworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTUlNRVRvRXh0
ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5z
aW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWlt
ZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsK
KyAgICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKKyAgICAgICAg
ICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIC8v
IHByZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtaW1lVHlwZTsKK30KKworUGx1Z2lu
UGFja2FnZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJs
LCBTdHJpbmcmIG1pbWVUeXBlKQoreyAgIAorICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9
IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwu
c3RyaW5nKCk7CisgICAgCisgICAgaWYgKCFwbHVnaW4pIHsKKyAgICAgICAgU3RyaW5nIGZpbGVu
YW1lID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CisgICAgICAgIGlmICghZmlsZW5hbWUuZW5k
c1dpdGgoIi8iKSkgeworICAgICAgICAgICAgaW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1lLnJl
dmVyc2VGaW5kKCcuJyk7CisgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uUG9zICE9IC0xKSB7Cisg
ICAgICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhleHRl
bnNpb25Qb3MgKyAxKTsKKworICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVGb3JF
eHRlbnNpb24oZXh0ZW5zaW9uKTsKKyAgICAgICAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JN
SU1FVHlwZShtaW1lVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBGSVhNRTogaWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSBXaW5kb3dzIGZv
ciB0aGUgbWltZSB0eXBlIAorICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbi4K
KworICAgIHJldHVybiBwbHVnaW47Cit9CisKK1BsdWdpblZpZXdXaW4qIFBsdWdpbkRhdGFiYXNl
V2luOjpjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKK3sKKyAgICAvLyBpZiB3ZSBm
YWlsIHRvIGZpbmQgYSBwbHVnaW4gZm9yIHRoaXMgTUlNRSB0eXBlLCBmaW5kUGx1Z2luIHdpbGwg
c2VhcmNoIGZvcgorICAgIC8vIGEgcGx1Z2luIGJ5IHRoZSBmaWxlIGV4dGVuc2lvbiBhbmQgdXBk
YXRlIHRoZSBNSU1FIHR5cGUsIHNvIHBhc3MgYSBtdXRhYmxlIFN0cmluZworICAgIFN0cmluZyBt
aW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSBm
aW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKKyAgICAKKyAgICAvLyBObyBwbHVnaW4gd2Fz
IGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2Fpbgor
ICAgIGlmICghcGx1Z2luICYmIHJlZnJlc2goKSkgeworICAgICAgICBtaW1lVHlwZUNvcHkgPSBt
aW1lVHlwZTsKKyAgICAgICAgcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7
CisgICAgfQorICAgICAgICAKKyAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdXaW4ocGFyZW50RnJh
bWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywg
bWltZVR5cGVDb3B5LCBsb2FkTWFudWFsbHkpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDM2ICsyNSw0MyBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZVdpbi5oIgor
I2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2lu
LmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlld1dpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2Uu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxz
aGx3YXBpLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGx1Z2luRGF0YWJhc2VXaW4qIFBs
dWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCkKK1BsdWdpbkRhdGFiYXNlKiBQbHVn
aW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpCiB7Ci0gICAgc3RhdGljIFBsdWdpbkRhdGFi
YXNlV2luKiBwbHVnaW5zID0gMDsKKyAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIHBsdWdpbnMg
PSAwOwogICAgIAogICAgIGlmICghcGx1Z2lucykgewotICAgICAgICBwbHVnaW5zID0gbmV3IFBs
dWdpbkRhdGFiYXNlV2luOwotICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5E
YXRhYmFzZVdpbjo6ZGVmYXVsdFBsdWdpblBhdGhzKCkpOworICAgICAgICBwbHVnaW5zID0gbmV3
IFBsdWdpbkRhdGFiYXNlOworICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5E
YXRhYmFzZTo6ZGVmYXVsdFBsdWdpblBhdGhzKCkpOwogICAgICAgICBwbHVnaW5zLT5yZWZyZXNo
KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHBsdWdpbnM7CiB9CiAKLXZvaWQgUGx1Z2luRGF0YWJh
c2VXaW46OmFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCitib29sIFBsdWdp
bkRhdGFiYXNlOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQor
eworICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0
aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIHJldHVybiAocmVmcmVzaCgpICYm
IG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpOworfQorCit2b2lkIFBs
dWdpbkRhdGFiYXNlOjphZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogewog
ICAgIG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBhdGgpOwogICAgIHJlZnJlc2goKTsKIH0KIAotYm9v
bCBQbHVnaW5EYXRhYmFzZVdpbjo6cmVmcmVzaCgpCitib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZy
ZXNoKCkKIHsgICAKICAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsKIApAQCAtMTA4LDkgKzExNiw5
IEBAIGJvb2wgUGx1Z2luRGF0YWJhc2VXaW46OnJlZnJlc2goKQogICAgIHJldHVybiBwbHVnaW5T
ZXRDaGFuZ2VkOwogfQogCi1WZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IFBsdWdpbkRhdGFiYXNl
V2luOjpwbHVnaW5zKCkgY29uc3QKK1ZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gUGx1Z2luRGF0YWJh
c2U6OnBsdWdpbnMoKSBjb25zdAogewotICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gcmVz
dWx0OworICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcmVzdWx0OwogCiAgICAgUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CiAgICAgZm9yIChQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKQEAgLTExOSwzNDcgKzEyNywxOSBAQCBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IFBsdWdp
bkRhdGFiYXNlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFk
ZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMpCi17
Ci0gICAgSEtFWSBrZXk7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RL
ZXksIEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZ
UywgJmtleSk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHdjaGFyX3QgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmll
ZDsKLQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQgaSA9IDA7OyBpKysp
IHsKLSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IF9jb3VudG9mKG5hbWUpOwotICAgICAgICByZXN1
bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0
TW9kaWZpZWQpOwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAg
ICAgRFdPUkQgcGF0aFN0clNpemUgPSBzaXplb2YocGF0aFN0cik7Ci0gICAgICAgIERXT1JEIHR5
cGU7Ci0KLSAgICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShrZXksIG5hbWUsIFRFWFQoIlBhdGgi
KSwgJnR5cGUsIChMUEJZVEUpcGF0aFN0ciwgJnBhdGhTdHJTaXplKTsKLSAgICAgICAgaWYgKHJl
c3VsdCAhPSBFUlJPUl9TVUNDRVNTIHx8IHR5cGUgIT0gUkVHX1NaKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyaWJ1dGVzOwot
ICAgICAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZvU3Rh
bmRhcmQsICZhdHRyaWJ1dGVzKSA9PSAwKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgUGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBh
Y2thZ2UoU3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBh
dHRyaWJ1dGVzLmZ0TGFzdFdyaXRlVGltZSk7Ci0KLSAgICAgICAgaWYgKHBhY2thZ2UpCi0gICAg
ICAgICAgICBwbHVnaW5zLmFkZChwYWNrYWdlKTsKLSAgICB9Ci0KLSAgICBSZWdDbG9zZUtleShr
ZXkpOwotfQotCi1QbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VXaW46OmdldFBsdWdpbnNJblBhdGhz
KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0
aXZlIHNldC4KLSAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOwotICAgIFBsdWdp
blNldCBwbHVnaW5zOwotCi0gICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7
Ci0gICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7Ci0KLSAgICBQbHVnaW5QYWNrYWdl
V2luKiBvbGRXTVBQbHVnaW4gPSAwOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIG5ld1dNUFBsdWdp
biA9IDA7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVn
aW5QYXRocy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFN0
cmluZyBwYXR0ZXJuID0gKml0ICsgIlxcKiI7Ci0KLSAgICAgICAgaEZpbmQgPSBGaW5kRmlyc3RG
aWxlVyhwYXR0ZXJuLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZmaW5kRmlsZURh
dGEpOwotCi0gICAgICAgIGlmIChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChmaW5kRmls
ZURhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3Ry
aW5nKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1l
KSk7Ci0gICAgICAgICAgICBpZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8
fCAhZmlsZW5hbWUuZW5kc1dpdGgoImRsbCIsIGZhbHNlKSkgJiYKLSAgICAgICAgICAgICAgICAo
IWVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dp
dGgoIlNob2Nrd2F2ZSAxMCIsIGZhbHNlKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBmaWxlbmFtZTsKLSAg
ICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCkuc2Vjb25kKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgICAgIFBsdWdpblBhY2th
Z2VXaW4qIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKGZ1
bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1lKTsKLQotICAgICAgICAgICAgaWYg
KHBsdWdpblBhY2thZ2UpIHsKLSAgICAgICAgICAgICAgICBwbHVnaW5zLmFkZChwbHVnaW5QYWNr
YWdlKTsKLQotICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwg
Im5wZHNwbGF5LmRsbCIpKQotICAgICAgICAgICAgICAgICAgICBvbGRXTVBQbHVnaW4gPSBwbHVn
aW5QYWNrYWdlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZp
bGVuYW1lLCAibnAtbXN3bXAuZGxsIikpCi0gICAgICAgICAgICAgICAgICAgIG5ld1dNUFBsdWdp
biA9IHBsdWdpblBhY2thZ2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSB3aGlsZSAoRmlu
ZE5leHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0gMCk7Ci0KLSAgICAgICAgRmluZENs
b3NlKGhGaW5kKTsKLSAgICB9Ci0KLSAgICBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVlfTE9D
QUxfTUFDSElORSwgcGx1Z2lucyk7Ci0gICAgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZX0NV
UlJFTlRfVVNFUiwgcGx1Z2lucyk7Ci0KLSAgICAvLyBJZiBib3RoIHRoZSBvbGQgYW5kIG5ldyBX
TVAgcGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwgCi0gICAgLy8gd2UgcmVt
b3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2luZyB0aGUgb2xkIG9uZS4K
LSAgICBpZiAob2xkV01QUGx1Z2luICYmIG5ld1dNUFBsdWdpbikKLSAgICAgICAgcGx1Z2lucy5y
ZW1vdmUob2xkV01QUGx1Z2luKTsKLQotICAgIHJldHVybiBwbHVnaW5zOwotfQotCi1zdGF0aWMg
aW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNp
b25TdHJpbmcpCi17Ci0gICAgVmVjdG9yPGludD4gdmVyc2lvbjsKLQotICAgIHVuc2lnbmVkIHN0
YXJ0UG9zID0gMDsKLSAgICB1bnNpZ25lZCBlbmRQb3M7Ci0gICAgCi0gICAgd2hpbGUgKHN0YXJ0
UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgewotICAgICAgICBmb3IgKGVuZFBvcyA9IHN0
YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKLSAgICAg
ICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdb
ZW5kUG9zXSA9PSAnXycpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaW50IHZl
cnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9z
IC0gc3RhcnRQb3MpLnRvSW50KCk7Ci0gICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21w
b25lbnQpOwotCi0gICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdmVyc2lvbjsKLX0KLQotLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMg
aGlnaGVyIHRoYW4gdmVyc2lvbkIKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMo
Y29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIp
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJb
aV0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgY29t
ZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMg
YW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQbHVnaW5QYXRocyhWZWN0b3I8U3Ry
aW5nPiYgcGF0aHMpCi17Ci0gICAgLy8gRW51bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBkaXJl
Y3RvcmllcyBpbiB0aGUgcmVnaXN0cnkKLSAgICBIS0VZIGtleTsKLSAgICBMT05HIHJlc3VsdDsK
LSAgICAKLSAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhU
KCJTb2Z0d2FyZVxcTW96aWxsYSIpLCAwLCBLRVlfUkVBRCwgJmtleSk7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIFdDSEFSIG5hbWVbMTI4XTsKLSAgICAgICAg
RklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgICAgICBEV09SRCBuYW1lTGVu
ID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IFJl
Z0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmll
ZCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3Ry
aW5nKG5hbWUsIG5hbWVMZW4pICsgIlxcRXh0ZW5zaW9ucyI7Ci0gICAgICAgICAgICBIS0VZIGV4
dGVuc2lvbnNLZXk7Ci0KLSAgICAgICAgICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKLSAgICAg
ICAgICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJhY3Rl
cnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIEtFWV9SRUFELCAmZXh0ZW5zaW9uc0tleSk7Ci0K
LSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAgICAg
ICAgIC8vIE5vdyBnZXQgdGhlIHBsdWdpbnMgcGF0aAotICAgICAgICAgICAgICAgIFdDSEFSIHBs
dWdpbnNQYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2luc1Bh
dGhTaXplID0gc2l6ZW9mKHBsdWdpbnNQYXRoU3RyKTsKLSAgICAgICAgICAgICAgICBEV09SRCB0
eXBlOwotCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4dGVuc2lv
bnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNQYXRoU3Ry
LCAmcGx1Z2luc1BhdGhTaXplKTsKLQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJS
T1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikKLSAgICAgICAgICAgICAgICAgICAgcGF0aHMu
YXBwZW5kKFN0cmluZyhwbHVnaW5zUGF0aFN0ciwgcGx1Z2luc1BhdGhTaXplIC8gc2l6ZW9mKFdD
SEFSKSAtIDEpKTsKLQotICAgICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZWdDbG9zZUtl
eShrZXkpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBs
YXllclBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQotewotICAgIC8vIFRoZSBuZXcg
V01QIEZpcmVmb3ggcGx1Z2luIGlzIGluc3RhbGxlZCBpbiBcUEZpbGVzXFBsdWdpbnMgaWYgaXQg
Y2FuJ3QgZmluZCBhbnkgRmlyZWZveCBpbnN0YWxscwotICAgIFdDSEFSIHBsdWdpbkRpcmVjdG9y
eVN0cltfTUFYX1BBVEggKyAxXTsKLSAgICBEV09SRCBwbHVnaW5EaXJlY3RvcnlTaXplID0gOjpF
eHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKFRFWFQoIiVTWVNURU1EUklWRSVcXFBGaWxlc1xcUGx1
Z2lucyIpLCBwbHVnaW5EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHBsdWdpbkRpcmVjdG9yeVN0cikp
OwotCi0gICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNp
emUgPD0gX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5U3RyKSkKLSAgICAgICAgcGF0aHMuYXBwZW5k
KFN0cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7Ci0K
LSAgICBEV09SRCB0eXBlOwotICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFY
X1BBVEhdOwotICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5z
dGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1
ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxNaWNyb3NvZnRcXE1lZGlhUGxh
eWVyIiksIFRFWFQoIkluc3RhbGxhdGlvbiBEaXJlY3RvcnkiKSwgJnR5cGUsIChMUEJZVEUpJmlu
c3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwotCi0g
ICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAgICAg
ICBwYXRocy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0
aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRRdWlja1RpbWVQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsK
LSAgICBEV09SRCB0eXBlOwotICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFY
X1BBVEhdOwotICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5z
dGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1
ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxBcHBsZSBDb21wdXRlciwgSW5j
LlxcUXVpY2tUaW1lIiksIFRFWFQoIkluc3RhbGxEaXIiKSwgJnR5cGUsIChMUEJZVEUpJmluc3Rh
bGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwotCi0gICAg
aWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKSB7Ci0gICAgICAg
IFN0cmluZyBwbHVnaW5EaXIgPSBTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0
YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxccGx1Z2lucyI7
Ci0gICAgICAgIHBhdGhzLmFwcGVuZChwbHVnaW5EaXIpOwotICAgIH0KLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhz
KQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhL
RVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlciIp
LCAwLCBLRVlfUkVBRCwgJmtleSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgRklMRVRJTUUgbGFz
dE1vZGlmaWVkOwotCi0gICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247Ci0gICAg
U3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOwotCi0gICAgLy8gRW51bWVyYXRlIHN1
YmtleXMKLSAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBuYW1lTGVu
ID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKLSAgICAgICAgcmVzdWx0ID0gUmVnRW51
bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsK
LQotICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0
cmluZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOwotICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25z
KGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lvbikpIHsKLSAgICAgICAgICAgIGxh
dGVzdEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247Ci0gICAgICAgICAgICBsYXRlc3RB
Y3JvYmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxsKCkpIHsK
LSAgICAgICAgRFdPUkQgdHlwZTsKLSAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQYXRoU3Ry
W19NQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgPSBzaXpl
b2YoYWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKLQotICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdp
bktleVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxhdGVzdEFj
cm9iYXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgiOwotICAgICAgICByZXN1bHQgPSBT
SEdldFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktleVBhdGguY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgJnR5cGUsIChMUEJZVEUpYWNyb2JhdEluc3Rh
bGxQYXRoU3RyLCAmYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSk7Ci0KLSAgICAgICAgaWYgKHJlc3Vs
dCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpblBh
dGggPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0SW5zdGFsbFBhdGhTaXpl
IC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7Ci0gICAgICAgICAgICBwYXRocy5h
cHBlbmQoYWNyb2JhdFBsdWdpblBhdGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVnQ2xv
c2VLZXkoa2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc2FmYXJpUGx1Z2luc1BhdGgo
KQotewotICAgIFdDSEFSIG1vZHVsZUZpbGVOYW1lU3RyW19NQVhfUEFUSF07Ci0gICAgc3RhdGlj
IFN0cmluZyBwbHVnaW5zUGF0aDsKLSAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5QYXRoID0g
ZmFsc2U7Ci0KLSAgICBpZiAoIWNhY2hlZFBsdWdpblBhdGgpIHsKLSAgICAgICAgY2FjaGVkUGx1
Z2luUGF0aCA9IHRydWU7Ci0KLSAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9k
dWxlRmlsZU5hbWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7Ci0KLSAgICAgICAg
aWYgKCFtb2R1bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgp
Ci0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNw
ZWMobW9kdWxlRmlsZU5hbWVTdHIpKQotICAgICAgICAgICAgZ290byBleGl0OwotCi0gICAgICAg
IHBsdWdpbnNQYXRoID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMiOwot
ICAgIH0KLWV4aXQ6Ci0gICAgcmV0dXJuIHBsdWdpbnNQYXRoOwotfQotCi1zdGF0aWMgaW5saW5l
IHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpblBhdGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsK
LSAgICBXQ0hBUiBzeXN0ZW1EaXJlY3RvcnlTdHJbTUFYX1BBVEhdOwotCi0gICAgaWYgKEdldFN5
c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHN5c3RlbURpcmVjdG9y
eVN0cikpID09IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFSIG1hY3JvbWVkaWFEaXJl
Y3RvcnlTdHJbTUFYX1BBVEhdOwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9y
eVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcRmxhc2giKSk7Ci0gICAg
cGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOwotCi0gICAgUGF0aENvbWJpbmUo
bWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21l
ZFxcU2hvY2t3YXZlIDEwIikpOwotICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5
U3RyKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2VXaW46OmRlZmF1bHRQbHVn
aW5QYXRocygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0gICAgU3RyaW5nIG91clBh
dGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwotCi0gICAgaWYgKCFvdXJQYXRoLmlzTnVsbCgpKQot
ICAgICAgICBwYXRocy5hcHBlbmQob3VyUGF0aCk7Ci0gICAgYWRkUXVpY2tUaW1lUGx1Z2luUGF0
aChwYXRocyk7Ci0gICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChwYXRocyk7Ci0gICAgYWRk
TW96aWxsYVBsdWdpblBhdGhzKHBhdGhzKTsKLSAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVn
aW5QYXRoKHBhdGhzKTsKLSAgICBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMocGF0aHMpOwotCi0g
ICAgcmV0dXJuIHBhdGhzOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlV2luOjppc01JTUVUeXBl
UmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIGlmIChtaW1lVHlwZS5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1F
VHlwZXMuY29udGFpbnMobWltZVR5cGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBO
byBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJj
aGluZyBhZ2FpbgotICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBl
cy5jb250YWlucyhtaW1lVHlwZSkpOwotfQotCi1QbHVnaW5QYWNrYWdlV2luKiBQbHVnaW5EYXRh
YmFzZVdpbjo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK1BsdWdp
blBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQogewogICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgU3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7Ci0gICAgU3RyaW5nIG91
clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdp
biA9IDA7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gMDsKICAgICBQbHVnaW5TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKIAogICAgIGZvciAoUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgaWYgKCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkp
KSB7CiAgICAgICAgICAgICBwbHVnaW4gPSAoKml0KS5nZXQoKTsKLSAgICAgICAgICAgIC8vIHBy
ZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgIGlm
IChwbHVnaW4tPnBhcmVudERpcmVjdG9yeSgpID09IG91clBhdGgpCisgICAgICAgICAgICBpZiAo
aXNQcmVmZXJyZWRQbHVnaW5QYXRoKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkpKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtNDY3LDE1ICsxNDcsMTQgQEAg
UGx1Z2luUGFja2FnZVdpbiogUGx1Z2luRGF0YWJhc2VXaW46OnBsdQogICAgIHJldHVybiBwbHVn
aW47CiB9CiAKLVN0cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6TUlNRVR5cGVGb3JFeHRlbnNpb24o
Y29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0CitTdHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1J
TUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdAogewogICAg
IGlmIChleHRlbnNpb24uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAg
ICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBT
dHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7CiAgICAgU3RyaW5nIG1pbWVUeXBl
OwotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IDA7CisgICAgUGx1Z2luUGFja2FnZSog
cGx1Z2luID0gMDsKIAogICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgTUlNRVRvRXh0ZW5z
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9u
cygpLmVuZCgpOwpAQCAtNDg2LDggKzE2NSw3IEBAIFN0cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6
TUlNRVR5cGVGb3JFeHQKICAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXh0
ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkgewogICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZSA9
IG1pbWVfaXQtPmZpcnN0OwogICAgICAgICAgICAgICAgICAgICBwbHVnaW4gPSAoKml0KS5nZXQo
KTsKLSAgICAgICAgICAgICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVn
aW5zIGRpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLT5wYXJlbnREaXJl
Y3RvcnkoKSA9PSBvdXJQYXRoKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcmVmZXJyZWRQ
bHVnaW5QYXRoKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDk3LDkg
KzE3NSw5IEBAIFN0cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6TUlNRVR5cGVGb3JFeHQKICAgICBy
ZXR1cm4gbWltZVR5cGU7CiB9CiAKLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpbkRhdGFiYXNlV2lu
OjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSkKLXsgICAKLSAg
ICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7
CitQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1
cmwsIFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1
Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOwogICAgIFN0cmluZyBmaWxlbmFtZSA9IHVybC5zdHJp
bmcoKTsKICAgICAKICAgICBpZiAoIXBsdWdpbikgewpAQCAtNTIxLDIwICsxOTksNCBAQCBQbHVn
aW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6ZmluCiAgICAgcmV0dXJuIHBsdWdpbjsK
IH0KIAotUGx1Z2luVmlld1dpbiogUGx1Z2luRGF0YWJhc2VXaW46OmNyZWF0ZVBsdWdpblZpZXco
RnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wgbG9hZE1hbnVhbGx5KQotewotICAgIC8vIGlmIHdlIGZhaWwgdG8gZmluZCBhIHBsdWdpbiBm
b3IgdGhpcyBNSU1FIHR5cGUsIGZpbmRQbHVnaW4gd2lsbCBzZWFyY2ggZm9yCi0gICAgLy8gYSBw
bHVnaW4gYnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGFuZCB1cGRhdGUgdGhlIE1JTUUgdHlwZSwgc28g
cGFzcyBhIG11dGFibGUgU3RyaW5nCi0gICAgU3RyaW5nIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBl
OwotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlw
ZUNvcHkpOwotICAgIAotICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5n
IHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCi0gICAgaWYgKCFwbHVnaW4gJiYgcmVm
cmVzaCgpKSB7Ci0gICAgICAgIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOwotICAgICAgICBwbHVn
aW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKLSAgICB9Ci0gICAgICAgIAotICAg
IHJldHVybiBuZXcgUGx1Z2luVmlld1dpbihwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVt
ZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZUNvcHksIGxvYWRNYW51
YWxseSk7Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCShyZXZpc2lvbiAy
OTYyNikJKGZyb20gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5oOjI5NjI2
KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpbkRhdGFiYXNlV2lu
X0gKKyNkZWZpbmUgUGx1Z2luRGF0YWJhc2VXaW5fSAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEZy
YW1lOworICAgIGNsYXNzIEludFNpemU7CisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBQbHVn
aW5QYWNrYWdlV2luOworICAgIGNsYXNzIFBsdWdpblZpZXdXaW47CisKKyAgICB0eXBlZGVmIEhh
c2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+LCBQbHVnaW5QYWNrYWdlV2luSGFzaD4gUGx1
Z2luU2V0OworICAKKyAgICBjbGFzcyBQbHVnaW5EYXRhYmFzZVdpbiB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VXaW4qIGluc3RhbGxlZFBsdWdpbnMoKTsKKyAg
ICAgICAgUGx1Z2luVmlld1dpbiogY3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUs
IGNvbnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1W
YWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKworICAg
ICAgICBib29sIHJlZnJlc2goKTsKKyAgICAgICAgVmVjdG9yPFBsdWdpblBhY2thZ2VXaW4qPiBw
bHVnaW5zKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIHZvaWQgYWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0
IFN0cmluZyYpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc2V0UGx1Z2luUGF0aHMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1fcGx1Z2luUGF0aHMgPSBwYXRoczsgfQorICAg
ICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdDsKKworICAgICAgICBQbHVn
aW5QYWNrYWdlV2luKiBmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlw
ZSk7CisgICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpOworICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0OworCisgICAgICAgIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3Bs
dWdpblBhdGhzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVz
OworICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOworICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAkocmV2aXNp
b24gMjk2MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTIzLDQxICsyNCw0MSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lm
bmRlZiBQbHVnaW5EYXRhYmFzZVdpbl9ICi0jZGVmaW5lIFBsdWdpbkRhdGFiYXNlV2luX0gKLQot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lmbmRl
ZiBQbHVnaW5EYXRhYmFzZV9ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlX0gKIAogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1
ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3Mg
SW50U2l6ZTsKICAgICBjbGFzcyBLVVJMOwotICAgIGNsYXNzIFBsdWdpblBhY2thZ2VXaW47Ci0g
ICAgY2xhc3MgUGx1Z2luVmlld1dpbjsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlOwogCi0gICAg
dHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiwgUGx1Z2luUGFja2FnZVdp
bkhhc2g+IFBsdWdpblNldDsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2th
Z2U+LCBQbHVnaW5QYWNrYWdlSGFzaD4gUGx1Z2luU2V0OwogICAKLSAgICBjbGFzcyBQbHVnaW5E
YXRhYmFzZVdpbiB7CisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2UgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlV2luKiBpbnN0YWxsZWRQbHVnaW5zKCk7Ci0gICAg
ICAgIFBsdWdpblZpZXdXaW4qIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBj
b25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFs
dWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisgICAgICAg
IHN0YXRpYyBQbHVnaW5EYXRhYmFzZSogaW5zdGFsbGVkUGx1Z2lucygpOwogCiAgICAgICAgIGJv
b2wgcmVmcmVzaCgpOwotICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IHBsdWdpbnMo
KSBjb25zdDsKKyAgICAgICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBwbHVnaW5zKCkgY29uc3Q7
CiAgICAgICAgIGJvb2wgaXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSk7CiAgICAgICAgIHZvaWQgYWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpOworICAg
ICAgICBib29sIGlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0
OworCisgICAgICAgIFBsdWdpblBhY2thZ2UqIGZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBT
dHJpbmcmIG1pbWVUeXBlKTsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHNldFBsdWdpblBh
dGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykgeyBtX3BsdWdpblBhdGhzID0gcGF0aHM7
IH0KICAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdpbnNJblBhdGhzKCkgY29uc3Q7CiAKLSAgICAg
ICAgUGx1Z2luUGFja2FnZVdpbiogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYg
bWltZVR5cGUpOwotICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW5Gb3JNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luRm9y
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAgICAgICAgIFN0cmluZyBNSU1FVHlw
ZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3Q7CiAKICAgICAgICAg
c3RhdGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5QYXRocygpOwpJbmRleDogV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVn
aW5zL1BsdWdpbkluZm9TdG9yZS5jcHAJKHJldmlzaW9uIDI5NjI2KQkoZnJvbSBXZWJDb3JlL3Bs
dWdpbnMvd2luL1BsdWdJbkluZm9TdG9yZVdpbi5jcHA6Mjk2MjYpCisrKyBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luSW5mb1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnSW5JbmZv
U3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdp
blBhY2thZ2VXaW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5JbmZvKiBQbHVn
SW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkIGkp
IAoreyAKKyAgICBQbHVnaW5EYXRhYmFzZVdpbiAqZGIgPSBQbHVnaW5EYXRhYmFzZVdpbjo6aW5z
dGFsbGVkUGx1Z2lucygpOworICAgIFBsdWdpbkluZm8qIGluZm8gPSBuZXcgUGx1Z2luSW5mbzsK
KyAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gZGItPnBsdWdpbnMoKVtpXTsKKworICAg
IGluZm8tPm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7CisgICAgaW5mby0+ZmlsZSA9IHBhY2thZ2Ut
PmZpbGVOYW1lKCk7CisgICAgaW5mby0+ZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7CisK
KyAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBh
Y2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOworICAgIGZvciAo
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTWltZUNsYXNzSW5mbyog
bWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOworICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWlt
ZSk7CisgICAgICAgIAorICAgICAgICBtaW1lLT50eXBlID0gaXQtPmZpcnN0OworICAgICAgICBt
aW1lLT5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgbWltZS0+cGx1Z2luID0gaW5mbzsKKwor
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5z
aW9ucygpLmdldChtaW1lLT50eXBlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSA+
IDApCisgICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOworCisgICAgICAgICAg
ICBtaW1lLT5zdWZmaXhlcyArPSBleHRlbnNpb25zW2ldOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGluZm87Cit9CisKK3Vuc2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luQ291
bnQoKSBjb25zdAoreworICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1
Z2lucygpLT5wbHVnaW5zKCkuc2l6ZSgpOworfQorCisKK1N0cmluZyBQbHVnSW5JbmZvU3RvcmU6
OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIC8v
IEZJWE1FIDU2MjkxMzk6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBvbiBXaW5kb3dzLgorICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKworICAgIAorYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRz
TUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCit7CisgICAgcmV0dXJu
IFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3Rl
cmVkKG1pbWVUeXBlKTsKK30KKwordm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5Q
YWdlcykKK3sKKyAgICBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZy
ZXNoKCk7CisKKyAgICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7CisgICAgICAgIC8vIEZJWE1FOiBy
ZWxvYWQgb3BlbiBwYWdlcworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpbkluZm9TdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbklu
Zm9TdG9yZS5jcHAJKHJldmlzaW9uIDI5NjI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbklu
Zm9TdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSwxNiArMjYsMTYgQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgotI2luY2x1ZGUg
IlBsdWdpbkRhdGFiYXNlV2luLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2lu
Y2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRl
UGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQgaSkgCiB7IAotICAgIFBsdWdpbkRh
dGFiYXNlV2luICpkYiA9IFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCk7Cisg
ICAgUGx1Z2luRGF0YWJhc2UgKmRiID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMo
KTsKICAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87Ci0gICAgUGx1Z2luUGFj
a2FnZVdpbiogcGFja2FnZSA9IGRiLT5wbHVnaW5zKClbaV07CisgICAgUGx1Z2luUGFja2FnZSog
cGFja2FnZSA9IGRiLT5wbHVnaW5zKClbaV07CiAKICAgICBpbmZvLT5uYW1lID0gcGFja2FnZS0+
bmFtZSgpOwogICAgIGluZm8tPmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOwpAQCAtNjUsMjUg
KzY2LDI1IEBAIFBsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2kKIAogdW5z
aWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKS5zaXplKCk7
CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMo
KS5zaXplKCk7CiB9CiAKIAogU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgLy8gRklYTUUgNTYyOTEzOTog
SW1wbGVtZW50IHRoaXMgbWV0aG9kIG9uIFdpbmRvd3MuCisgICAgLy8gRklYTUUgNTYyOTEzOTog
SW1wbGVtZW50IHRoaXMgbWV0aG9kLgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogICAgIAog
Ym9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3Ry
aW5nJiBtaW1lVHlwZSkgCiB7Ci0gICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxs
ZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKTsKKyAgICByZXR1cm4g
UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQo
bWltZVR5cGUpOwogfQogCiB2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkT3BlblBhZ2Vz
KQogewotICAgIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2go
KTsKKyAgICBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7CiAK
ICAgICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7CiAgICAgICAgIC8vIEZJWE1FOiByZWxvYWQgb3Bl
biBwYWdlcwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2aXNpb24gMjk2MjYp
CShmcm9tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6Mjk2MjYpCisr
KyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgPHNobHdhcGkuaD4KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKworI2luY2x1
ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIm5w
cnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQbHVnaW5QYWNrYWdlV2luOjp+UGx1Z2luUGFja2FnZVdpbigpCit7CisgICAg
QVNTRVJUKCFtX2lzTG9hZGVkKTsKK30KKworc3RhdGljIFN0cmluZyBnZXRWZXJzaW9uSW5mbyhj
b25zdCBMUFZPSUQgdmVyc2lvbkluZm9EYXRhLCBjb25zdCBTdHJpbmcmIGluZm8pCit7CisgICAg
TFBWT0lEIGJ1ZmZlcjsKKyAgICBVSU5UIGJ1ZmZlckxlbmd0aDsKKyAgICBTdHJpbmcgc3ViSW5m
byA9ICJcXFN0cmluZ2ZpbGVJbmZvXFwwNDA5MDRFNFxcIiArIGluZm87CisKKyAgICBib29sIHJl
dHZhbCA9IFZlclF1ZXJ5VmFsdWVXKHZlcnNpb25JbmZvRGF0YSwgY29uc3RfY2FzdDxVQ2hhcio+
KHN1YkluZm8uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCk7CisgICAgaWYgKCFy
ZXR2YWwgfHwgYnVmZmVyTGVuZ3RoID09IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIC8vIFN1YnRyYWN0IDEgZnJvbSB0aGUgbGVuZ3RoOyB3ZSBkb24ndCB3YW50IHRoZSB0cmFp
bGluZyAwCisgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFyKj4oYnVmZmVy
KSwgYnVmZmVyTGVuZ3RoIC0gMSk7Cit9CisKK3N0YXRpYyBWZWN0b3I8U3RyaW5nPiBzcGxpdFN0
cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgY2hhciBkZWxpbWl0ZXIsIGludCBwYWRUbykKK3sKKyAg
ICBpbnQgcG9zID0gMDsKKyAgICBpbnQgbmV3UG9zOworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3Vs
dDsKKyAgICBEZXByZWNhdGVkU3RyaW5nIGRzID0gc3RyLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAg
ICBTdHJpbmcgczsKKyAgICBkbyB7CisKKyAgICAgICAgbmV3UG9zID0gZHMuZmluZChkZWxpbWl0
ZXIsIHBvcyk7CisKKyAgICAgICAgaWYgKG5ld1BvcyA9PSAtMSkKKyAgICAgICAgICAgIHMgPSBk
cy5taWQocG9zKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcyA9IGRzLm1pZChwb3MsIG5l
d1BvcyAtIHBvcyk7CisgICAgICAgIAorICAgICAgICBpZiAoIXMuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChzKTsKKworICAgICAgICBwb3MgPSBuZXdQb3MgKyAxOworICAg
IH0gd2hpbGUgKG5ld1BvcyAhPSAtMSk7CisKKyAgICB3aGlsZSAocGFkVG8gIT0gLTEgJiYgc3Rh
dGljX2Nhc3Q8aW50PihyZXN1bHQuc2l6ZSgpKSA8IHBhZFRvKQorICAgICAgICByZXN1bHQuYXBw
ZW5kKCIiKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZVdp
bjo6ZnJlZUxpYnJhcnlTb29uKCkKK3sKKyAgICBBU1NFUlQoIW1fZnJlZUxpYnJhcnlUaW1lci5p
c0FjdGl2ZSgpKTsKKyAgICBBU1NFUlQobV9tb2R1bGUpOworICAgIEFTU0VSVChtX2xvYWRDb3Vu
dCA9PSAwKTsKKworICAgIG1fZnJlZUxpYnJhcnlUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisK
K3ZvaWQgUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdp
blBhY2thZ2VXaW4+KiAvKnRpbWVyKi8pCit7CisgICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAgICBB
U1NFUlQobV9sb2FkQ291bnQgPT0gMCk7CisKKyAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsK
KyAgICBtX21vZHVsZSA9IDA7Cit9CisKK1BsdWdpblBhY2thZ2VXaW46OlBsdWdpblBhY2thZ2VX
aW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKQorICAg
IDogbV9wYXRoKHBhdGgpCisgICAgLCBtX21vZHVsZSgwKQorICAgICwgbV9sYXN0TW9kaWZpZWQo
bGFzdE1vZGlmaWVkKQorICAgICwgbV9pc0xvYWRlZChmYWxzZSkKKyAgICAsIG1fbG9hZENvdW50
KDApCisgICAgLCBtX2ZyZWVMaWJyYXJ5VGltZXIodGhpcywgJlBsdWdpblBhY2thZ2VXaW46OmZy
ZWVMaWJyYXJ5VGltZXJGaXJlZCkKKyAgICAsIG1fZmlsZVZlcnNpb25MUygwKQorICAgICwgbV9m
aWxlVmVyc2lvbk1TKDApCit7CisgICAgbV9maWxlTmFtZSA9IFN0cmluZyhQYXRoRmluZEZpbGVO
YW1lKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSk7CisgICAgbV9wYXJl
bnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxl
bmd0aCgpIC0gMSk7Cit9CisKK2ludCBQbHVnaW5QYWNrYWdlV2luOjpjb21wYXJlRmlsZVZlcnNp
b24odW5zaWduZWQgY29tcGFyZVZlcnNpb25NUywgdW5zaWduZWQgY29tcGFyZVZlcnNpb25MUykg
Y29uc3QKK3sKKyAgICAvLyByZXR1cm4gLTEsIDAsIG9yIDEgaWYgcGx1Zy1pbiB2ZXJzaW9uIGlz
IGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbgorICAgIC8vIHRoZSBwYXNzZWQg
dmVyc2lvbgorICAgIGlmIChtX2ZpbGVWZXJzaW9uTVMgIT0gY29tcGFyZVZlcnNpb25NUykKKyAg
ICAgICAgcmV0dXJuIG1fZmlsZVZlcnNpb25NUyA+IGNvbXBhcmVWZXJzaW9uTVMgPyAxIDogLTE7
CisgICAgaWYgKG1fZmlsZVZlcnNpb25MUyAhPSBjb21wYXJlVmVyc2lvbkxTKQorICAgICAgICBy
ZXR1cm4gbV9maWxlVmVyc2lvbkxTID4gY29tcGFyZVZlcnNpb25MUyA/IDEgOiAtMTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlV2luOjpzdG9yZUZpbGVWZXJzaW9uKExQ
Vk9JRCB2ZXJzaW9uSW5mb0RhdGEpCit7CisgICAgVlNfRklYRURGSUxFSU5GTyogaW5mbzsKKyAg
ICBVSU5UIGluZm9TaXplOworICAgIGlmICghVmVyUXVlcnlWYWx1ZSh2ZXJzaW9uSW5mb0RhdGEs
IFRFWFQoIlxcIiksIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNp
emVvZihWU19GSVhFREZJTEVJTkZPKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZmlsZVZlcnNp
b25MUyA9IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKKyAgICBtX2ZpbGVWZXJzaW9uTVMgPSBpbmZv
LT5kd0ZpbGVWZXJzaW9uTVM7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZVdpbjo6aXNQbHVnaW5C
bGFja2xpc3RlZCgpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNpbHZlcmxpZ2h0UGx1
Z2luTWluUmVxdWlyZWRWZXJzaW9uTVMgPSAweDAwMDEwMDAwOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxTID0gMHg1MUJFMDAw
MDsKKworICAgIGlmIChuYW1lKCkgPT0gIlNpbHZlcmxpZ2h0IFBsdWctSW4iKSB7CisgICAgICAg
IC8vIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vNTU1NzM3OT4gQ3Jhc2ggaW4gU2lsdmVybGlnaHQg
d2hlbiBvcGVuaW5nIG1pY3Jvc29mdC5jb20uCisgICAgICAgIC8vIHRoZSBsYXRlc3QgMS4wIHZl
cnNpb24gb2YgU2lsdmVybGlnaHQgZG9lcyBub3QgcmVwcm9kdWNlIHRoaXMgY3Jhc2gsIHNvIGFs
bG93IGl0CisgICAgICAgIC8vIGFuZCBhbnkgbmV3ZXIgdmVyc2lvbnMKKyAgICAgICAgaWYgKGNv
bXBhcmVGaWxlVmVyc2lvbihzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TLCBz
aWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxTKSA+PSAwKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChmaWxlTmFtZSgpID09ICJucG1vemF4LmRsbCIp
CisgICAgICAgIC8vIEJ1ZyAxNTIxNzogTW96aWxsYSBBY3RpdmVYIGNvbnRyb2wgY29tcGxhaW5z
IGFib3V0IG1pc3NpbmcgeHBjb21fY29yZS5kbGwKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZmV0Y2hJbmZvKCkK
K3sKKyAgICBEV09SRCB2ZXJzaW9uSW5mb1NpemUsIHplcm9IYW5kbGU7CisgICAgdmVyc2lvbklu
Zm9TaXplID0gR2V0RmlsZVZlcnNpb25JbmZvU2l6ZVcobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCksICZ6ZXJvSGFuZGxlKTsgCisKKyAgICBpZiAodmVyc2lvbkluZm9TaXpl
ID09IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIExQVk9JRCB2ZXJzaW9uSW5mb0Rh
dGEgPSBmYXN0TWFsbG9jKHZlcnNpb25JbmZvU2l6ZSk7CisKKyAgICBpZiAoIUdldEZpbGVWZXJz
aW9uSW5mb1cobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIHZlcnNp
b25JbmZvU2l6ZSwgdmVyc2lvbkluZm9EYXRhKSkgeworICAgICAgICBmYXN0RnJlZSh2ZXJzaW9u
SW5mb0RhdGEpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9uYW1lID0g
Z2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLCAiUHJvZHVjdE5hbWUiKTsKKyAgICBtX2Rl
c2NyaXB0aW9uID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLCAiRmlsZURlc2NyaXB0
aW9uIik7CisKKyAgICBpZiAobV9uYW1lLmlzTnVsbCgpIHx8IG1fZGVzY3JpcHRpb24uaXNOdWxs
KCkpIHsKKyAgICAgICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN0b3JlRmlsZVZlcnNpb24odmVyc2lvbkluZm9EYXRhKTsK
KworICAgIGlmIChpc1BsdWdpbkJsYWNrbGlzdGVkKCkpIHsKKyAgICAgICAgZmFzdEZyZWUodmVy
c2lvbkluZm9EYXRhKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFZlY3Rv
cjxTdHJpbmc+IG1pbWVUeXBlcyA9IHNwbGl0U3RyaW5nKGdldFZlcnNpb25JbmZvKHZlcnNpb25J
bmZvRGF0YSwgIk1JTUVUeXBlIiksICd8JywgLTEpOworICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVF
eHRlbnRzID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLCAiRmls
ZUV4dGVudHMiKSwgJ3wnLCBtaW1lVHlwZXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBk
ZXNjcmlwdGlvbnMgPSBzcGxpdFN0cmluZyhnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEs
ICJGaWxlT3Blbk5hbWUiKSwgJ3wnLCBtaW1lVHlwZXMuc2l6ZSgpKTsKKworICAgIGZhc3RGcmVl
KHZlcnNpb25JbmZvRGF0YSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZVR5
cGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIC8vIEdldCByaWQgb2YgdGhlIGV4dGVuc2lvbiBs
aXN0IGluIHRoZSBkZXNjcmlwdGlvbiBzdHJpbmcKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9u
ID0gZGVzY3JpcHRpb25zW2ldOyAgICAKKyAgICAgICAgaW50IHBvcyA9IGRlc2NyaXB0aW9uLmZp
bmQoIigqIik7CisgICAgICAgIGlmIChwb3MgIT0gLTEpIHsKKyAgICAgICAgICAgIC8vIFRoZXJl
IG1pZ2h0IGJlIGEgc3BhY2UgdGhhdCB3ZSBuZWVkIHRvIGdldCByaWQgb2YKKyAgICAgICAgICAg
IGlmIChwb3MgPiAxICYmIGRlc2NyaXB0aW9uW3BvcyAtIDFdID09ICcgJykKKyAgICAgICAgICAg
ICAgICBwb3MtLTsKKworICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5sZWZ0
KHBvcyk7CisgICAgICAgIH0KKworICAgICAgICBtaW1lVHlwZXNbaV0gPSBtaW1lVHlwZXNbaV0u
bG93ZXIoKTsKKworICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1pbWVUeXBlc1tpXSwg
c3BsaXRTdHJpbmcoZmlsZUV4dGVudHNbaV0sICcsJywgLTEpKTsKKyAgICAgICAgbV9taW1lVG9E
ZXNjcmlwdGlvbnMuYWRkKG1pbWVUeXBlc1tpXSwgZGVzY3JpcHRpb24pOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFBsdWdpblBhY2thZ2VXaW46OmxvYWQoKQoreworICAg
IGlmIChtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBBU1NFUlQobV9t
b2R1bGUpOworICAgICAgICBtX2ZyZWVMaWJyYXJ5VGltZXIuc3RvcCgpOworICAgIH0gZWxzZSBp
ZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBXQ0hBUiBjdXJyZW50UGF0aFtNQVhfUEFUSF07
CisKKyAgICAgICAgaWYgKCE6OkdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCBjdXJyZW50
UGF0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU3RyaW5nIHBhdGgg
PSBtX3BhdGguc3Vic3RyaW5nKDAsIG1fcGF0aC5yZXZlcnNlRmluZCgnXFwnKSk7CisKKyAgICAg
ICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gTG9h
ZCB0aGUgbGlicmFyeQorICAgICAgICBtX21vZHVsZSA9IDo6TG9hZExpYnJhcnlXKG1fcGF0aC5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKKworICAgICAgICBpZiAoITo6U2V0Q3Vy
cmVudERpcmVjdG9yeVcoY3VycmVudFBhdGgpKSB7CisgICAgICAgICAgICBpZiAobV9tb2R1bGUp
CisgICAgICAgICAgICAgICAgOjpGcmVlTGlicmFyeShtX21vZHVsZSk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fbW9kdWxlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5QX0dl
dEVudHJ5UG9pbnRzRnVuY1B0ciBOUF9HZXRFbnRyeVBvaW50cyA9IDA7CisgICAgTlBfSW5pdGlh
bGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7CisgICAgTlBFcnJvciBucEVycjsKKworICAg
IE5QX0luaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9t
b2R1bGUsICJOUF9Jbml0aWFsaXplIik7CisgICAgTlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0
RW50cnlQb2ludHNGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfR2V0RW50cnlQ
b2ludHMiKTsKKyAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRyKUdldFBy
b2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKKworICAgIGlmICghTlBfSW5pdGlh
bGl6ZSB8fCAhTlBfR2V0RW50cnlQb2ludHMgfHwgIW1fTlBQX1NodXRkb3duKQorICAgICAgICBn
b3RvIGFib3J0OworICAKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3Bs
dWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVu
Y3MpOworCisgICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50cygmbV9wbHVnaW5GdW5jcyk7Cisg
ICAgTE9HX05QRVJST1IobnBFcnIpOworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikK
KyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1lbXNldCgmbV9icm93c2VyRnVuY3MsIDAsIHNp
emVvZihtX2Jyb3dzZXJGdW5jcykpOworICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2Yg
KG1fYnJvd3NlckZ1bmNzKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBfVkVSU0lP
Tl9NSU5PUjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOworICAgIG1f
YnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5y
ZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJl
YW0gPSBOUE5fTmV3U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRl
OworICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJvd3NlckZ1
bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdlbnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2Mg
PSBOUE5fTWVtQWxsb2M7CisgICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVl
OworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOworICAgIG1fYnJv
d3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1
bmNzLnBvc3R1cmxub3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9
IE5QTl9TZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9J
bnZhbGlkYXRlUmVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBO
X0ludmFsaWRhdGVSZWdpb247CisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5f
Rm9yY2VSZWRyYXc7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZh
RW52OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOwor
ICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVw
c0VuYWJsZWRTdGF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUg
PSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlOworCisgICAgbV9icm93c2VyRnVuY3MucmVsZWFz
ZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyOworICAg
IG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVu
dGlmaWVyczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJ
bnRJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9O
UE5fSWRlbnRpZmllcklzU3RyaW5nOworICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRp
ZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmludGZy
b21pZGVudGlmaWVyID0gX05QTl9JbnRGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5y
ZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxl
YXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludm9r
ZSA9IF9OUE5fSW52b2tlOworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1bHQgPSBfTlBO
X0ludm9rZURlZmF1bHQ7CisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBfTlBOX0V2YWx1
YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5fU2V0UHJvcGVydHk7CisgICAg
bV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5OworICAg
IG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05QTl9IYXNQcm9wZXJ0eTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc01ldGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5l
bnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKKworICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgm
bV9icm93c2VyRnVuY3MpOworICAgIExPR19OUEVSUk9SKG5wRXJyKTsKKworICAgIGlmIChucEVy
ciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1fbG9hZENv
dW50Kys7CisgICAgcmV0dXJuIHRydWU7CithYm9ydDoKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRv
d24oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZVdpbjo6dW5s
b2FkKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICgtLW1fbG9hZENvdW50ID4gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9OUFBfU2h1dGRv
d24oKTsKKworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworfQorCit2b2lkIFBsdWdpblBh
Y2thZ2VXaW46OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCit7CisgICAgaWYgKCFtX2lzTG9hZGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9sb2FkQ291bnQgPT0gMCk7CisgICAg
QVNTRVJUKG1fbW9kdWxlKTsKKworICAgIC8vIDxyZGFyOi8vNTUzMDUxOT46IENyYXNoIHdoZW4g
Y2xvc2luZyB0YWIgd2l0aCBwZGYgZmlsZSAoUmVhZGVyIDcgb25seSkKKyAgICAvLyBJZiB0aGUg
cGx1Z2luIGhhcyBzdWJjbGFzc2VkIGl0cyBwYXJlbnQgd2luZG93LCBhcyB3aXRoIFJlYWRlciA3
LCB3ZSBtYXkgaGF2ZQorICAgIC8vIGdvdHRlbiBoZXJlIGJ5IHdheSBvZiB0aGUgcGx1Z2luJ3Mg
aW50ZXJuYWwgd2luZG93IHByb2MgZm9yd2FyZGluZyBhIG1lc3NhZ2UgdG8gb3VyCisgICAgLy8g
b3JpZ2luYWwgd2luZG93IHByb2MuIElmIHdlIGZyZWUgdGhlIHBsdWdpbiBsaWJyYXJ5IGZyb20g
aGVyZSwgd2Ugd2lsbCBqdW1wIGJhY2sKKyAgICAvLyB0byBjb2RlIHdlIGp1c3QgZnJlZWQgd2hl
biB3ZSByZXR1cm4sIHNvIGRlbGF5IGNhbGxpbmcgRnJlZUxpYnJhcnkgYXQgbGVhc3QgdW50aWwK
KyAgICAvLyB0aGUgbmV4dCBtZXNzYWdlIGxvb3AKKyAgICBmcmVlTGlicmFyeVNvb24oKTsKKwor
ICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKK30KKworUGx1Z2luUGFja2FnZVdpbiogUGx1Z2luUGFj
a2FnZVdpbjo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1F
JiBsYXN0TW9kaWZpZWQpCit7CisgICAgUGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IG5ldyBQ
bHVnaW5QYWNrYWdlV2luKHBhdGgsIGxhc3RNb2RpZmllZCk7CisKKyAgICBpZiAoIXBhY2thZ2Ut
PmZldGNoSW5mbygpKSB7CisgICAgICAgIGRlbGV0ZSBwYWNrYWdlOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHBhY2thZ2U7Cit9CisKK3Vuc2lnbmVkIFBsdWdp
blBhY2thZ2VXaW46Omhhc2goKSBjb25zdAoreyAKKyAgICB1bnNpZ25lZCBoYXNoQ29kZXNbM10g
PSB7CisgICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCisgICAgICAgIG1fbGFz
dE1vZGlmaWVkLmR3TG93RGF0ZVRpbWUsCisgICAgICAgIG1fbGFzdE1vZGlmaWVkLmR3SGlnaERh
dGVUaW1lCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWlu
dGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMyAqIHNpemVvZih1bnNpZ25lZCkgLyBz
aXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlV2luOjplcXVhbChjb25zdCBQ
bHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBiKQoreworICAgIHJl
dHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uICYmIChDb21wYXJlRmlsZVRp
bWUoJmEubV9sYXN0TW9kaWZpZWQsICZiLm1fbGFzdE1vZGlmaWVkKSA9PSAwKTsKK30KKworfQpJ
bmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2aXNpb24gMjk2MjYpCisrKyBXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywx
MCArMjQsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2luY2x1ZGUgPHNobHdhcGkuaD4K
LQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKyNp
bmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUg
IkRlcHJlY2F0ZWRTdHJpbmcuaCIKQEAgLTM1LDU1ICszNCwxMiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBsdWdpblBhY2thZ2VXaW46On5QbHVnaW5QYWNrYWdlV2luKCkKK1BsdWdpblBh
Y2thZ2U6On5QbHVnaW5QYWNrYWdlKCkKIHsKICAgICBBU1NFUlQoIW1faXNMb2FkZWQpOwogfQog
Ci1zdGF0aWMgU3RyaW5nIGdldFZlcnNpb25JbmZvKGNvbnN0IExQVk9JRCB2ZXJzaW9uSW5mb0Rh
dGEsIGNvbnN0IFN0cmluZyYgaW5mbykKLXsKLSAgICBMUFZPSUQgYnVmZmVyOwotICAgIFVJTlQg
YnVmZmVyTGVuZ3RoOwotICAgIFN0cmluZyBzdWJJbmZvID0gIlxcU3RyaW5nZmlsZUluZm9cXDA0
MDkwNEU0XFwiICsgaW5mbzsKLQotICAgIGJvb2wgcmV0dmFsID0gVmVyUXVlcnlWYWx1ZVcodmVy
c2lvbkluZm9EYXRhLCBjb25zdF9jYXN0PFVDaGFyKj4oc3ViSW5mby5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVm
ZmVyLCAmYnVmZmVyTGVuZ3RoKTsKLSAgICBpZiAoIXJldHZhbCB8fCBidWZmZXJMZW5ndGggPT0g
MCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgLy8gU3VidHJhY3QgMSBmcm9tIHRo
ZSBsZW5ndGg7IHdlIGRvbid0IHdhbnQgdGhlIHRyYWlsaW5nIDAKLSAgICByZXR1cm4gU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIpLCBidWZmZXJMZW5ndGggLSAxKTsKLX0K
LQotc3RhdGljIFZlY3RvcjxTdHJpbmc+IHNwbGl0U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyLCBj
aGFyIGRlbGltaXRlciwgaW50IHBhZFRvKQotewotICAgIGludCBwb3MgPSAwOwotICAgIGludCBu
ZXdQb3M7Ci0gICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwotICAgIERlcHJlY2F0ZWRTdHJpbmcg
ZHMgPSBzdHIuZGVwcmVjYXRlZFN0cmluZygpOwotICAgIFN0cmluZyBzOwotICAgIGRvIHsKLQot
ICAgICAgICBuZXdQb3MgPSBkcy5maW5kKGRlbGltaXRlciwgcG9zKTsKLQotICAgICAgICBpZiAo
bmV3UG9zID09IC0xKQotICAgICAgICAgICAgcyA9IGRzLm1pZChwb3MpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzID0gZHMubWlkKHBvcywgbmV3UG9zIC0gcG9zKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHMpOwot
Ci0gICAgICAgIHBvcyA9IG5ld1BvcyArIDE7Ci0gICAgfSB3aGlsZSAobmV3UG9zICE9IC0xKTsK
LQotICAgIHdoaWxlIChwYWRUbyAhPSAtMSAmJiBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC5zaXpl
KCkpIDwgcGFkVG8pCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIiIpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVNvb24oKQordm9p
ZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVNvb24oKQogewogICAgIEFTU0VSVCghbV9mcmVl
TGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpOwogICAgIEFTU0VSVChtX21vZHVsZSk7CkBAIC05Miwy
MzAgKzQ4LDI4IEBAIHZvaWQgUGx1Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlTb29uKCkKICAg
ICBtX2ZyZWVMaWJyYXJ5VGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCi12b2lkIFBsdWdpblBh
Y2thZ2VXaW46OmZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdlV2luPiog
Lyp0aW1lciovKQordm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGlt
ZXI8UGx1Z2luUGFja2FnZT4qIC8qdGltZXIqLykKIHsKICAgICBBU1NFUlQobV9tb2R1bGUpOwog
ICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsKIAotICAgIDo6RnJlZUxpYnJhcnkobV9tb2R1
bGUpOworICAgIHVubG9hZE1vZHVsZShtX21vZHVsZSk7CiAgICAgbV9tb2R1bGUgPSAwOwogfQog
Ci1QbHVnaW5QYWNrYWdlV2luOjpQbHVnaW5QYWNrYWdlV2luKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCkKLSAgICA6IG1fcGF0aChwYXRoKQorUGx1Z2lu
UGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFBsYXRmb3Jt
RmlsZVRpbWUmIGxhc3RNb2RpZmllZCkKKyAgICA6IG1faXNMb2FkZWQoZmFsc2UpCisgICAgLCBt
X2xvYWRDb3VudCgwKQorICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBtX21vZHVsZSgwKQogICAg
ICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQotICAgICwgbV9pc0xvYWRlZChmYWxzZSkK
LSAgICAsIG1fbG9hZENvdW50KDApCi0gICAgLCBtX2ZyZWVMaWJyYXJ5VGltZXIodGhpcywgJlBs
dWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5VGltZXJGaXJlZCkKLSAgICAsIG1fZmlsZVZlcnNp
b25MUygwKQotICAgICwgbV9maWxlVmVyc2lvbk1TKDApCisgICAgLCBtX2ZyZWVMaWJyYXJ5VGlt
ZXIodGhpcywgJlBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5VGltZXJGaXJlZCkKIHsKLSAgICBt
X2ZpbGVOYW1lID0gU3RyaW5nKFBhdGhGaW5kRmlsZU5hbWUobV9wYXRoLmNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCkpKTsKKyAgICBtX2ZpbGVOYW1lID0gcGF0aEdldEZpbGVOYW1lKG1f
cGF0aCk7CiAgICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3Ro
KCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7CiB9CiAKLXZvaWQgUGx1Z2luUGFja2FnZVdp
bjo6c3RvcmVGaWxlVmVyc2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKQotewotICAgIFZTX0ZJ
WEVERklMRUlORk8qIGluZm87Ci0gICAgVUlOVCBpbmZvU2l6ZTsKLSAgICBpZiAoIVZlclF1ZXJ5
VmFsdWUodmVyc2lvbkluZm9EYXRhLCBURVhUKCJcXCIpLCAoTFBWT0lEKikgJmluZm8sICZpbmZv
U2l6ZSkgfHwgaW5mb1NpemUgPCBzaXplb2YoVlNfRklYRURGSUxFSU5GTykpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2ZpbGVWZXJzaW9uTFMgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTFM7Ci0gICAg
bV9maWxlVmVyc2lvbk1TID0gaW5mby0+ZHdGaWxlVmVyc2lvbk1TOwotfQotCi1ib29sIFBsdWdp
blBhY2thZ2VXaW46OmlzUGx1Z2luQmxhY2tsaXN0ZWQoKQotewotICAgIHN0YXRpYyBjb25zdCBE
V09SRCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TRFdPUkQgPSAweDAwMDEw
MDAwOwotICAgIHN0YXRpYyBjb25zdCBEV09SRCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVk
VmVyc2lvbkxTRFdPUkQgPSAweDUxQkUwMDAwOwotCi0gICAgaWYgKG5hbWUoKSA9PSAiU2lsdmVy
bGlnaHQgUGx1Zy1JbiIpIHsKLSAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly81NTU3
Mzc5PiBDcmFzaCBpbiBTaWx2ZXJsaWdodCB3aGVuIG9wZW5pbmcgbWljcm9zb2Z0LmNvbS4KLSAg
ICAgICAgLy8gdGhlIGxhdGVzdCAxLjAgdmVyc2lvbiBvZiBTaWx2ZXJsaWdodCBkb2VzIG5vdCBy
ZXByb2R1Y2UgdGhpcyBjcmFzaCwgc28gYWxsb3cgaXQKLSAgICAgICAgLy8gYW5kIGFueSBuZXdl
ciB2ZXJzaW9ucwotICAgICAgICBpZiAobV9maWxlVmVyc2lvbk1TIDwgc2lsdmVybGlnaHRQbHVn
aW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEIHx8Ci0gICAgICAgICAgICAobV9maWxlVmVyc2lv
bk1TID09IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCAmJiBtX2Zp
bGVWZXJzaW9uTFMgPCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxTRFdPUkQp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChmaWxlTmFtZSgpID09
ICJucG1vemF4LmRsbCIpCi0gICAgICAgIC8vIEJ1ZyAxNTIxNzogTW96aWxsYSBBY3RpdmVYIGNv
bnRyb2wgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb21fY29yZS5kbGwKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZVdp
bjo6ZmV0Y2hJbmZvKCkKLXsKLSAgICBEV09SRCB2ZXJzaW9uSW5mb1NpemUsIHplcm9IYW5kbGU7
Ci0gICAgdmVyc2lvbkluZm9TaXplID0gR2V0RmlsZVZlcnNpb25JbmZvU2l6ZVcobV9wYXRoLmNo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZ6ZXJvSGFuZGxlKTsgCi0KLSAgICBpZiAo
dmVyc2lvbkluZm9TaXplID09IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExQVk9J
RCB2ZXJzaW9uSW5mb0RhdGEgPSBmYXN0TWFsbG9jKHZlcnNpb25JbmZvU2l6ZSk7Ci0KLSAgICBp
ZiAoIUdldEZpbGVWZXJzaW9uSW5mb1cobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCksIDAsIHZlcnNpb25JbmZvU2l6ZSwgdmVyc2lvbkluZm9EYXRhKSkgewotICAgICAgICBm
YXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgbV9uYW1lID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLCAiUHJvZHVjdE5h
bWUiKTsKLSAgICBtX2Rlc2NyaXB0aW9uID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRh
LCAiRmlsZURlc2NyaXB0aW9uIik7Ci0KLSAgICBpZiAobV9uYW1lLmlzTnVsbCgpIHx8IG1fZGVz
Y3JpcHRpb24uaXNOdWxsKCkpIHsKLSAgICAgICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN0b3JlRmlsZVZlcnNpb24odmVy
c2lvbkluZm9EYXRhKTsKLQotICAgIGlmIChpc1BsdWdpbkJsYWNrbGlzdGVkKCkpIHsKLSAgICAg
ICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIFZlY3RvcjxTdHJpbmc+IG1pbWVUeXBlcyA9IHNwbGl0U3RyaW5nKGdldFZlcnNp
b25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIk1JTUVUeXBlIiksICd8JywgLTEpOwotICAgIFZlY3Rv
cjxTdHJpbmc+IGZpbGVFeHRlbnRzID0gc3BsaXRTdHJpbmcoZ2V0VmVyc2lvbkluZm8odmVyc2lv
bkluZm9EYXRhLCAiRmlsZUV4dGVudHMiKSwgJ3wnLCBtaW1lVHlwZXMuc2l6ZSgpKTsKLSAgICBW
ZWN0b3I8U3RyaW5nPiBkZXNjcmlwdGlvbnMgPSBzcGxpdFN0cmluZyhnZXRWZXJzaW9uSW5mbyh2
ZXJzaW9uSW5mb0RhdGEsICJGaWxlT3Blbk5hbWUiKSwgJ3wnLCBtaW1lVHlwZXMuc2l6ZSgpKTsK
LQotICAgIGZhc3RGcmVlKHZlcnNpb25JbmZvRGF0YSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbWltZVR5cGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIC8vIEdldCByaWQgb2Yg
dGhlIGV4dGVuc2lvbiBsaXN0IGluIHRoZSBkZXNjcmlwdGlvbiBzdHJpbmcKLSAgICAgICAgU3Ry
aW5nIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb25zW2ldOyAgICAKLSAgICAgICAgaW50IHBvcyA9
IGRlc2NyaXB0aW9uLmZpbmQoIigqIik7Ci0gICAgICAgIGlmIChwb3MgIT0gLTEpIHsKLSAgICAg
ICAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIGEgc3BhY2UgdGhhdCB3ZSBuZWVkIHRvIGdldCByaWQg
b2YKLSAgICAgICAgICAgIGlmIChwb3MgPiAxICYmIGRlc2NyaXB0aW9uW3BvcyAtIDFdID09ICcg
JykKLSAgICAgICAgICAgICAgICBwb3MtLTsKLQotICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBk
ZXNjcmlwdGlvbi5sZWZ0KHBvcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBtaW1lVHlwZXNbaV0g
PSBtaW1lVHlwZXNbaV0ubG93ZXIoKTsKLQotICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRk
KG1pbWVUeXBlc1tpXSwgc3BsaXRTdHJpbmcoZmlsZUV4dGVudHNbaV0sICcsJywgLTEpKTsKLSAg
ICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVUeXBlc1tpXSwgZGVzY3JpcHRpb24p
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFBsdWdpblBhY2thZ2VXaW46
OmxvYWQoKQotewotICAgIGlmIChtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSkgewotICAg
ICAgICBBU1NFUlQobV9tb2R1bGUpOwotICAgICAgICBtX2ZyZWVMaWJyYXJ5VGltZXIuc3RvcCgp
OwotICAgIH0gZWxzZSBpZiAobV9pc0xvYWRlZCkgewotICAgICAgICBtX2xvYWRDb3VudCsrOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBXQ0hBUiBjdXJyZW50
UGF0aFtNQVhfUEFUSF07Ci0KLSAgICAgICAgaWYgKCE6OkdldEN1cnJlbnREaXJlY3RvcnlXKE1B
WF9QQVRILCBjdXJyZW50UGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgU3RyaW5nIHBhdGggPSBtX3BhdGguc3Vic3RyaW5nKDAsIG1fcGF0aC5yZXZlcnNlRmluZCgn
XFwnKSk7Ci0KLSAgICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGguY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgLy8gTG9hZCB0aGUgbGlicmFyeQotICAgICAgICBtX21vZHVsZSA9IDo6TG9hZExp
YnJhcnlXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKLQotICAgICAg
ICBpZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVcoY3VycmVudFBhdGgpKSB7Ci0gICAgICAgICAg
ICBpZiAobV9tb2R1bGUpCi0gICAgICAgICAgICAgICAgOjpGcmVlTGlicmFyeShtX21vZHVsZSk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IW1fbW9kdWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2lzTG9hZGVkID0gdHJ1
ZTsKLQotICAgIE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0ciBOUF9HZXRFbnRyeVBvaW50cyA9IDA7
Ci0gICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7Ci0gICAgTlBFcnJv
ciBucEVycjsKLQotICAgIE5QX0luaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpR2V0
UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7Ci0gICAgTlBfR2V0RW50cnlQ
b2ludHMgPSAoTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxl
LCAiTlBfR2V0RW50cnlQb2ludHMiKTsKLSAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRv
d25Qcm9jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKLQotICAg
IGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhTlBfR2V0RW50cnlQb2ludHMgfHwgIW1fTlBQX1NodXRk
b3duKQotICAgICAgICBnb3RvIGFib3J0OwotICAKLSAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3Ms
IDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7Ci0gICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6
ZW9mKG1fcGx1Z2luRnVuY3MpOwotCi0gICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50cygmbV9w
bHVnaW5GdW5jcyk7Ci0gICAgTE9HX05QRVJST1IobnBFcnIpOwotICAgIGlmIChucEVyciAhPSBO
UEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIG1lbXNldCgmbV9icm93
c2VyRnVuY3MsIDAsIHNpemVvZihtX2Jyb3dzZXJGdW5jcykpOwotICAgIG1fYnJvd3NlckZ1bmNz
LnNpemUgPSBzaXplb2YgKG1fYnJvd3NlckZ1bmNzKTsKLSAgICBtX2Jyb3dzZXJGdW5jcy52ZXJz
aW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5f
R2V0VVJMOwotICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKLSAgICBtX2Jyb3dz
ZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOwotICAgIG1fYnJvd3NlckZ1bmNzLndy
aXRlID0gTlBOX1dyaXRlOwotICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5f
RGVzdHJveVN0cmVhbTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOwot
ICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdlbnQ7Ci0gICAgbV9icm93c2Vy
RnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7Ci0gICAgbV9icm93c2VyRnVuY3MubWVtZnJl
ZSA9IE5QTl9NZW1GcmVlOwotICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNoID0gTlBOX01lbUZs
dXNoOwotICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2lu
czsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5Owot
ICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlmeTsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKLSAgICBtX2Jyb3dzZXJG
dW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlk
YXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlk
YXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247Ci0gICAgbV9icm93c2VyRnVuY3MuZm9y
Y2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YUVu
diA9IE5QTl9HZXRKYXZhRW52OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBO
X0dldEphdmFQZWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUg
PSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1
cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlOwotCi0gICAgbV9icm93
c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJ
ZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05Q
Tl9HZXRTdHJpbmdJZGVudGlmaWVyczsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlm
aWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZp
ZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOwotICAgIG1fYnJvd3NlckZ1bmNz
LnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOwotICAgIG1fYnJv
d3NlckZ1bmNzLmludGZyb21pZGVudGlmaWVyID0gX05QTl9JbnRGcm9tSWRlbnRpZmllcjsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OwotICAgIG1fYnJv
d3NlckZ1bmNzLmludm9rZSA9IF9OUE5fSW52b2tlOwotICAgIG1fYnJvd3NlckZ1bmNzLmludm9r
ZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7Ci0gICAgbV9icm93c2VyRnVuY3MuZXZhbHVh
dGUgPSBfTlBOX0V2YWx1YXRlOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3BlcnR5ID0gX05Q
Tl9HZXRQcm9wZXJ0eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5fU2V0
UHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92
ZVByb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05QTl9IYXNNZXRo
b2Q7Ci0gICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNQcm9wZXJ0eTsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKLQotICAgIG5wRXJyID0g
TlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOwotICAgIExPR19OUEVSUk9SKG5wRXJyKTsK
LQotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBhYm9ydDsK
LQotICAgIG1fbG9hZENvdW50Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci1hYm9ydDoKLSAgICB1bmxv
YWRXaXRob3V0U2h1dGRvd24oKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2lu
UGFja2FnZVdpbjo6dW5sb2FkKCkKK3ZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkKCkKIHsKICAg
ICBpZiAoIW1faXNMb2FkZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3ICs4Miw3IEBAIHZv
aWQgUGx1Z2luUGFja2FnZVdpbjo6dW5sb2FkKCkKICAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24o
KTsKIH0KIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxvYWRXaXRob3V0U2h1dGRvd24oKQor
dm9pZCBQbHVnaW5QYWNrYWdlOjp1bmxvYWRXaXRob3V0U2h1dGRvd24oKQogewogICAgIGlmICgh
bV9pc0xvYWRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzQ3LDkgKzEwMSw5IEBAIHZvaWQgUGx1
Z2luUGFja2FnZVdpbjo6dW5sb2FkV2l0aG91dFNodXQKICAgICBtX2lzTG9hZGVkID0gZmFsc2U7
CiB9CiAKLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpblBhY2thZ2VXaW46OmNyZWF0ZVBhY2thZ2Uo
Y29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKQorUGx1Z2lu
UGFja2FnZSogUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IFBsYXRmb3JtRmlsZVRpbWUmIGxhc3RNb2RpZmllZCkKIHsKLSAgICBQbHVnaW5QYWNr
YWdlV2luKiBwYWNrYWdlID0gbmV3IFBsdWdpblBhY2thZ2VXaW4ocGF0aCwgbGFzdE1vZGlmaWVk
KTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gbmV3IFBsdWdpblBhY2thZ2UocGF0aCwg
bGFzdE1vZGlmaWVkKTsKIAogICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpIHsKICAgICAg
ICAgZGVsZXRlIHBhY2thZ2U7CkBAIC0zNTksMjAgKzExMyw0IEBAIFBsdWdpblBhY2thZ2VXaW4q
IFBsdWdpblBhY2thZ2VXaW46OmNyZWEKICAgICByZXR1cm4gcGFja2FnZTsKIH0KIAotdW5zaWdu
ZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0Ci17IAotICAgIHVuc2lnbmVkIGhhc2hD
b2Rlc1szXSA9IHsKLSAgICAgICAgbV9kZXNjcmlwdGlvbi5pbXBsKCktPmhhc2goKSwKLSAgICAg
ICAgbV9sYXN0TW9kaWZpZWQuZHdMb3dEYXRlVGltZSwKLSAgICAgICAgbV9sYXN0TW9kaWZpZWQu
ZHdIaWdoRGF0ZVRpbWUKLSAgICB9OwotCi0gICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVI
YXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCAzICogc2l6ZW9mKHVuc2ln
bmVkKSAvIHNpemVvZihVQ2hhcikpOwotfQotCi1ib29sIFBsdWdpblBhY2thZ2VXaW46OmVxdWFs
KGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGIpCi17
Ci0gICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb24gJiYgKENvbXBh
cmVGaWxlVGltZSgmYS5tX2xhc3RNb2RpZmllZCwgJmIubV9sYXN0TW9kaWZpZWQpID09IDApOwot
fQotCiB9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHJldmlzaW9uIDI5NjI2KQkoZnJv
bSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uaDoyOTYyNikKKysrIFdlYkNv
cmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5QYWNrYWdlV2luX0gKKyNkZWZpbmUg
UGx1Z2luUGFja2FnZVdpbl9ICisKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdp
bmRvd3MuaD4KKworI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1J
TUVUb0Rlc2NyaXB0aW9uc01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8
U3RyaW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7CisKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdl
V2luIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZVdpbj4geworICAgIHB1YmxpYzoK
KyAgICAgICAgflBsdWdpblBhY2thZ2VXaW4oKTsKKyAgICAgICAgc3RhdGljIFBsdWdpblBhY2th
Z2VXaW4qIGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYg
bGFzdE1vZGlmaWVkKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZGVzY3JpcHRpb247IH0KKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWxlTmFtZTsgfQorICAgICAgICBTdHJpbmcgcGFyZW50RGlyZWN0b3J5KCkgY29u
c3QgeyByZXR1cm4gbV9wYXJlbnREaXJlY3Rvcnk7IH0KKworICAgICAgICBjb25zdCBNSU1FVG9E
ZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWlt
ZVRvRGVzY3JpcHRpb25zOyB9CisgICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1p
bWVUb0V4dGVuc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KKwor
ICAgICAgICB1bnNpZ25lZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3Q7CisgICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0IFBsdWdp
blBhY2thZ2VXaW4mIGIpOworCisgICAgICAgIGJvb2wgbG9hZCgpOworICAgICAgICB2b2lkIHVu
bG9hZCgpOworICAgICAgICB2b2lkIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworCisgICAgICAg
IGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzKCkgY29uc3QgeyByZXR1cm4gJm1fcGx1
Z2luRnVuY3M7IH0KKworICAgICAgICBpbnQgY29tcGFyZUZpbGVWZXJzaW9uKHVuc2lnbmVkIGNv
bXBhcmVWZXJzaW9uTVMsIHVuc2lnbmVkIGNvbXBhcmVWZXJzaW9uTFMpIGNvbnN0OworICAgIHBy
aXZhdGU6CisgICAgICAgIFBsdWdpblBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKKyAg
ICAgICAgdm9pZCBzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpOworICAg
ICAgICBib29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKTsKKworICAgICAgICBib29sIG1faXNMb2Fk
ZWQ7CisgICAgICAgIGludCBtX2xvYWRDb3VudDsKKworICAgICAgICBEV09SRCBtX2ZpbGVWZXJz
aW9uTVM7CisgICAgICAgIERXT1JEIG1fZmlsZVZlcnNpb25MUzsKKworICAgICAgICBTdHJpbmcg
bV9kZXNjcmlwdGlvbjsKKyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgU3RyaW5nIG1f
ZmlsZU5hbWU7CisgICAgICAgIFN0cmluZyBtX25hbWU7CisgICAgICAgIFN0cmluZyBtX3BhcmVu
dERpcmVjdG9yeTsKKworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXAgbV9taW1lVG9EZXNj
cmlwdGlvbnM7CisgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXAgbV9taW1lVG9FeHRlbnNpb25z
OworCisgICAgICAgIEhNT0RVTEUgbV9tb2R1bGU7CisgICAgICAgIEZJTEVUSU1FIG1fbGFzdE1v
ZGlmaWVkOworCisgICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247Cisg
ICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBOZXRzY2FwZUZ1
bmNzIG1fYnJvd3NlckZ1bmNzOworCisgICAgICAgIHZvaWQgZnJlZUxpYnJhcnlTb29uKCk7Cisg
ICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+
Kik7CisgICAgICAgIFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+IG1fZnJlZUxpYnJhcnlUaW1lcjsK
KyAgICB9OworCisgICAgc3RydWN0IFBsdWdpblBhY2thZ2VXaW5IYXNoIHsKKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxQbHVnaW5QYWNrYWdlV2luKj4oa2V5KS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYga2V5KSB7IHJldHVybiBr
ZXktPmhhc2goKTsgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBj
b25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdl
V2luKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGIpKTsgfQorICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4mIGEs
IGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2Fn
ZVdpbjo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQorICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byB1c2UgYSBjdXN0b20gSGFz
aCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRyYWl0cy4KKy8vIEl0IHNob3VsZCBiZSBwb3Nz
aWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9yYWdlVHJhaXRzIHNwZWNpYWxpemF0aW9uLgor
bmFtZXNwYWNlIFdURiB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFp
dHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbkhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNv
cmU6OlBsdWdpblBhY2thZ2VXaW4+ID4gPiB7CisgICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6
ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPik+OjpTaWduZWRUeXBlIEludFR5
cGU7CisgICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbkhhc2ggSGFzaDsK
KyAgICAgICAgdHlwZWRlZiBIYXNoVHJhaXRzPEludFR5cGU+IFRyYWl0czsKKyAgICB9OworfQor
CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCShyZXZpc2lvbiAyOTYyNikK
KysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDEyICsyMywxMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBQbHVnaW5QYWNr
YWdlV2luX0gKLSNkZWZpbmUgUGx1Z2luUGFja2FnZVdpbl9ICi0KLSNpbmNsdWRlIDx3aW5zb2Nr
Mi5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpZm5kZWYgUGx1Z2luUGFja2FnZV9ICisjZGVm
aW5lIFBsdWdpblBhY2thZ2VfSAogCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUg
IktVUkwuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtNDAsMTAgKzM5LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+
IE1JTUVUb0V4dGVuc2lvbnNNYXA7CiAKLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdlV2luIDogcHVi
bGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZVdpbj4geworICAgIGNsYXNzIFBsdWdpblBhY2th
Z2UgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlPiB7CiAgICAgcHVibGljOgotICAg
ICAgICB+UGx1Z2luUGFja2FnZVdpbigpOwotICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZVdp
biogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0
TW9kaWZpZWQpOworICAgICAgICB+UGx1Z2luUGFja2FnZSgpOworICAgICAgICBzdGF0aWMgUGx1
Z2luUGFja2FnZSogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFBsYXRm
b3JtRmlsZVRpbWUmIGxhc3RNb2RpZmllZCk7CiAgICAgICAgIAogICAgICAgICBTdHJpbmcgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24o
KSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CkBAIC01Myw4ICs1Miw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1l
VG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9uczsgfQog
ICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CiAKLSAgICAgICAgdW5zaWduZWQgUGx1
Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBQbHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBiKTsKKyAg
ICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKTsKIAogICAgICAg
ICBib29sIGxvYWQoKTsKICAgICAgICAgdm9pZCB1bmxvYWQoKTsKQEAgLTYyLDE3ICs2MSwxMyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1
Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQogICAgIHByaXZhdGU6
Ci0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxF
VElNRSYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgUGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IFBsYXRmb3JtRmlsZVRpbWUmIGxhc3RNb2RpZmllZCk7CisgICAgICAgIGJv
b2wgaXNQbHVnaW5CbGFja2xpc3RlZCgpIGNvbnN0OwogICAgICAgICBib29sIGZldGNoSW5mbygp
OwotICAgICAgICB2b2lkIHN0b3JlRmlsZVZlcnNpb24oTFBWT0lEIHZlcnNpb25JbmZvRGF0YSk7
Ci0gICAgICAgIGJvb2wgaXNQbHVnaW5CbGFja2xpc3RlZCgpOwogCiAgICAgICAgIGJvb2wgbV9p
c0xvYWRlZDsKICAgICAgICAgaW50IG1fbG9hZENvdW50OwogCi0gICAgICAgIERXT1JEIG1fZmls
ZVZlcnNpb25NUzsKLSAgICAgICAgRFdPUkQgbV9maWxlVmVyc2lvbkxTOwotCiAgICAgICAgIFN0
cmluZyBtX2Rlc2NyaXB0aW9uOwogICAgICAgICBTdHJpbmcgbV9wYXRoOwogICAgICAgICBTdHJp
bmcgbV9maWxlTmFtZTsKQEAgLTgyLDI0ICs3NywyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBtX21pbWVUb0Rlc2NyaXB0aW9uczsKICAgICAg
ICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21pbWVUb0V4dGVuc2lvbnM7CiAKLSAgICAgICAgSE1P
RFVMRSBtX21vZHVsZTsKLSAgICAgICAgRklMRVRJTUUgbV9sYXN0TW9kaWZpZWQ7CisgICAgICAg
IFBsYXRmb3JtTW9kdWxlIG1fbW9kdWxlOworICAgICAgICBQbGF0Zm9ybUZpbGVUaW1lIG1fbGFz
dE1vZGlmaWVkOwogCiAgICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247
CiAgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKICAgICAgICAgTlBOZXRzY2Fw
ZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOwogCiAgICAgICAgIHZvaWQgZnJlZUxpYnJhcnlTb29uKCk7
Ci0gICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2VX
aW4+Kik7Ci0gICAgICAgIFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+IG1fZnJlZUxpYnJhcnlUaW1l
cjsKKyAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luUGFja2Fn
ZT4qKTsKKyAgICAgICAgVGltZXI8UGx1Z2luUGFja2FnZT4gbV9mcmVlTGlicmFyeVRpbWVyOwog
ICAgIH07CiAKLSAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZVdpbkhhc2ggewotICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PFBsdWdpblBhY2thZ2VXaW4qPihrZXkpLT5oYXNoKCk7IH0KLSAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+JiBrZXkpIHsgcmV0dXJuIGtl
eS0+aGFzaCgpOyB9CisgICAgc3RydWN0IFBsdWdpblBhY2thZ2VIYXNoIHsKKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxQbHVnaW5QYWNrYWdlKj4oa2V5KS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYga2V5KSB7IHJldHVybiBrZXktPmhh
c2goKTsgfQogCi0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBp
bnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlV2luKj4o
YSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGIpKTsgfQotICAgICAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4mIGEsIGNvbnN0
IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZVdpbjo6
ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBpbnQgYSwgY29uc3QgaW50IGIpIHsgcmV0dXJuIGVxdWFsKHJlaW50ZXJwcmV0X2Nhc3Q8
UGx1Z2luUGFja2FnZSo+KGEpLCByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2UqPihiKSk7
IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+
JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGIpIHsgcmV0dXJuIFBsdWdpblBhY2th
Z2U6OmVxdWFsKCphLmdldCgpLCAqYi5nZXQoKSk7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKICAgICB9OwogCkBAIC0x
MDgsOSArMTAzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gRklYTUU6IFRoaXMgaXMgYSB3
b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byB1c2Ug
YSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRyYWl0cy4KIC8vIEl0IHNo
b3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9yYWdlVHJhaXRzIHNwZWNp
YWxpemF0aW9uLgogbmFtZXNwYWNlIFdURiB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtl
eVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbkhhc2gsIEhhc2hUcmFpdHM8
UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW4+ID4gPiB7Ci0gICAgICAgIHR5cGVkZWYg
SW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPik+OjpTaWdu
ZWRUeXBlIEludFR5cGU7Ci0gICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1Z2luUGFja2FnZVdp
bkhhc2ggSGFzaDsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFnZVRyYWl0czxX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8V2ViQ29yZTo6UGx1
Z2luUGFja2FnZT4gPiA+IHsKKyAgICAgICAgdHlwZWRlZiBJbnRUeXBlczxzaXplb2YoUmVmUHRy
PFdlYkNvcmU6OlBsdWdpblBhY2thZ2U+KT46OlNpZ25lZFR5cGUgSW50VHlwZTsKKyAgICAgICAg
dHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlSGFzaCBIYXNoOwogICAgICAgICB0eXBlZGVm
IEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvd2luL1BsdWdJbkluZm9TdG9yZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnSW5JbmZvU3RvcmVXaW4uY3BwCShyZXZpc2lvbiAyOTk2OCkKKysrIFdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z0luSW5mb1N0b3JlV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZVdpbi5o
IgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5B
dEluZGV4KHVuc2lnbmVkIGkpIAoteyAKLSAgICBQbHVnaW5EYXRhYmFzZVdpbiAqZGIgPSBQbHVn
aW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpOwotICAgIFBsdWdpbkluZm8qIGluZm8g
PSBuZXcgUGx1Z2luSW5mbzsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gZGItPnBs
dWdpbnMoKVtpXTsKLQotICAgIGluZm8tPm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7Ci0gICAgaW5m
by0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7Ci0gICAgaW5mby0+ZGVzYyA9IHBhY2thZ2Ut
PmRlc2NyaXB0aW9uKCk7Ci0KLSAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVU
b0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOwotICAgIE1JTUVU
b0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25z
LmVuZCgpOwotICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOwotICAgICAgICBpbmZv
LT5taW1lcy5hcHBlbmQobWltZSk7Ci0gICAgICAgIAotICAgICAgICBtaW1lLT50eXBlID0gaXQt
PmZpcnN0OwotICAgICAgICBtaW1lLT5kZXNjID0gaXQtPnNlY29uZDsKLSAgICAgICAgbWltZS0+
cGx1Z2luID0gaW5mbzsKLQotICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcGFj
a2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLT50eXBlKTsKLSAgICAgICAgCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICAgICAgICBpZiAoaSA+IDApCi0gICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0g
IiwiOwotCi0gICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSBleHRlbnNpb25zW2ldOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZm87Ci19Ci0KLXVuc2lnbmVkIFBsdWdJbklu
Zm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiBQbHVnaW5EYXRhYmFz
ZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCkuc2l6ZSgpOwotfQotCi0KLVN0cmlu
ZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQotewotICAgIC8vIEZJWE1FIDU2MjkxMzk6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBv
biBXaW5kb3dzLgotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotICAgIAotYm9vbCBQbHVnSW5J
bmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlw
ZSkgCi17Ci0gICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCkt
PmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKTsKLX0KLQotdm9pZCByZWZyZXNoUGx1Z2lu
cyhib29sIHJlbG9hZE9wZW5QYWdlcykKLXsKLSAgICBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFs
bGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7Ci0KLSAgICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiByZWxvYWQgb3BlbiBwYWdlcwotICAgIH0KLX0KLQotfQpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAJKHJldmlzaW9uIDI5OTY4
KQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDkgKzI0LDkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUGx1Z2luRGF0YWJhc2VXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgog
Ci0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2Uu
aCIKICNpbmNsdWRlICJQbHVnaW5WaWV3V2luLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlIDx3aW5kb3dzLmg+CkBAIC0zNCw5MSArMzQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBsdWdpbkRhdGFiYXNlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lu
cygpCi17Ci0gICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlV2luKiBwbHVnaW5zID0gMDsKLSAgICAK
LSAgICBpZiAoIXBsdWdpbnMpIHsKLSAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFz
ZVdpbjsKLSAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2VXaW46
OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKLSAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOwotICAg
IH0KLQotICAgIHJldHVybiBwbHVnaW5zOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlV2luOjph
ZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIG1fcGx1Z2luUGF0
aHMuYXBwZW5kKHBhdGgpOwotICAgIHJlZnJlc2goKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFz
ZVdpbjo6cmVmcmVzaCgpCi17ICAgCi0gICAgUGx1Z2luU2V0IG5ld1BsdWdpbnM7Ci0KLSAgICBi
b29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKLQotICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQg
b2YgcGx1Z2lucwotICAgIG5ld1BsdWdpbnMgPSBnZXRQbHVnaW5zSW5QYXRocygpOwotCi0gICAg
aWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBl
cy5jbGVhcigpOwotCi0gICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdp
bnM7Ci0KLSAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5z
LmVuZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQ
bHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHBsdWdpbnNUb1Vu
bG9hZC5yZW1vdmUoKml0KTsKLQotICAgICAgICBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAg
ICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBuZXdQbHVnaW5zLnJlbW92ZSgqaXQpOwot
Ci0gICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCi0gICAgICAgIGVuZCA9IHBsdWdpbnNUb1VubG9h
ZC5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1
Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIG1fcGx1
Z2lucy5yZW1vdmUoKml0KTsKLQotICAgICAgICAvLyBBZGQgbmV3IHBsdWdpbnMKLSAgICAgICAg
ZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBtX3BsdWdpbnMuYWRkKCppdCk7Ci0KLSAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFw
bHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpIHx8ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBtX3BsdWdpbnMgPSBuZXdQbHVnaW5zOwotICAgICAgICBQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7Ci0gICAgICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOwotCi0gICAgICAgIHBs
dWdpblNldENoYW5nZWQgPSAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgLy8g
UmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAv
LyBHZXQgTUlNRSB0eXBlcwotICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7Ci0gICAg
ICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAo
Kml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsr
bWFwX2l0KSB7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+
Zmlyc3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpblNldENoYW5nZWQ7
Ci19Ci0KLVZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gUGx1Z2luRGF0YWJhc2VXaW46OnBsdWdp
bnMoKSBjb25zdAotewotICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlV2luKj4gcmVzdWx0OwotCi0g
ICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAg
Zm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkUGx1Z2luc0Zyb21S
ZWdpc3RyeShIS0VZIHJvb3RLZXksIFBsdWdpblNldCYgcGx1Z2lucykKIHsKICAgICBIS0VZIGtl
eTsKQEAgLTE1MCw3ICs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5zRnJvbVJl
Z2lzdHIKICAgICAgICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXgocGF0aFN0ciwgR2V0RmlsZUV4
SW5mb1N0YW5kYXJkLCAmYXR0cmlidXRlcykgPT0gMCkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlV2luOjpj
cmVhdGVQYWNrYWdlKFN0cmluZyhwYXRoU3RyLCBwYXRoU3RyU2l6ZSAvIHNpemVvZihXQ0hBUikg
LSAxKSwgYXR0cmlidXRlcy5mdExhc3RXcml0ZVRpbWUpOworICAgICAgICBQbHVnaW5QYWNrYWdl
KiBwYWNrYWdlID0gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZShTdHJpbmcocGF0aFN0ciwg
cGF0aFN0clNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSksIGF0dHJpYnV0ZXMuZnRMYXN0V3JpdGVU
aW1lKTsKIAogICAgICAgICBpZiAocGFja2FnZSkKICAgICAgICAgICAgIHBsdWdpbnMuYWRkKHBh
Y2thZ2UpOwpAQCAtMTU5LDcgKzc0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFBsdWdpbnNG
cm9tUmVnaXN0cgogICAgIFJlZ0Nsb3NlS2V5KGtleSk7CiB9CiAKLVBsdWdpblNldCBQbHVnaW5E
YXRhYmFzZVdpbjo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdAorUGx1Z2luU2V0IFBsdWdpbkRh
dGFiYXNlOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCiAgICAgSGFzaFNldDxTdHJpbmc+IHVu
aXF1ZUZpbGVuYW1lczsKQEAgLTE2OCw4ICs4Myw4IEBAIFBsdWdpblNldCBQbHVnaW5EYXRhYmFz
ZVdpbjo6Z2V0UGx1Z2luc0kKICAgICBIQU5ETEUgaEZpbmQgPSBJTlZBTElEX0hBTkRMRV9WQUxV
RTsKICAgICBXSU4zMl9GSU5EX0RBVEFXIGZpbmRGaWxlRGF0YTsKIAotICAgIFBsdWdpblBhY2th
Z2VXaW4qIG9sZFdNUFBsdWdpbiA9IDA7Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogbmV3V01QUGx1
Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdlKiBvbGRXTVBQbHVnaW4gPSAwOworICAgIFBsdWdp
blBhY2thZ2UqIG5ld1dNUFBsdWdpbiA9IDA7CiAKICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQoKTsKICAgICBmb3IgKFZlY3RvcjxTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CkBAIC0xOTMsNyArMTA4LDcgQEAgUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlV2lu
OjpnZXRQbHVnaW5zSQogICAgICAgICAgICAgaWYgKCF1bmlxdWVGaWxlbmFtZXMuYWRkKGZ1bGxQ
YXRoKS5zZWNvbmQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAg
ICAgICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luUGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46
OmNyZWF0ZVBhY2thZ2UoZnVsbFBhdGgsIGZpbmRGaWxlRGF0YS5mdExhc3RXcml0ZVRpbWUpOwor
ICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luUGFja2FnZSA9IFBsdWdpblBhY2thZ2U6
OmNyZWF0ZVBhY2thZ2UoZnVsbFBhdGgsIGZpbmRGaWxlRGF0YS5mdExhc3RXcml0ZVRpbWUpOwog
CiAgICAgICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkgewogICAgICAgICAgICAgICAgIHBsdWdp
bnMuYWRkKHBsdWdpblBhY2thZ2UpOwpAQCAtNDE5LDcgKzMzNCw3IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luUGEKICAgICBwYXRocy5hcHBlbmQobWFjcm9tZWRpYURp
cmVjdG9yeVN0cik7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlV2luOjpkZWZh
dWx0UGx1Z2luUGF0aHMoKQorVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQ
bHVnaW5QYXRocygpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7CiAgICAgU3RyaW5nIG91
clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwpAQCAtNDM1LDEwNiArMzUwLDE0IEBAIFZlY3Rv
cjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlV2luOjpkZWZhdWwKICAgICByZXR1cm4gcGF0aHM7CiB9
CiAKLWJvb2wgUGx1Z2luRGF0YWJhc2VXaW46OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1l
VHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQs
IHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCi0gICAgcmV0
dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBl
KSk7Ci19Ci0KLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpwbHVnaW5Gb3JN
SU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQ
cmVmZXJyZWRQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKIHsKLSAgICBpZiAo
bWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFN0cmluZyBrZXkg
PSBtaW1lVHlwZS5sb3dlcigpOwogICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1Bh
dGgoKTsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4gPSAwOwotICAgIFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotCi0gICAgZm9yIChQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtl
eSkpIHsKLSAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOwotICAgICAgICAgICAgLy8g
cHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQotICAgICAgICAgICAg
aWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW47Ci19CiAKLVN0
cmluZyBQbHVnaW5EYXRhYmFzZVdpbjo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5n
JiBleHRlbnNpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1Bh
dGgoKTsKLSAgICBTdHJpbmcgbWltZVR5cGU7Ci0gICAgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2lu
ID0gMDsKLQotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lu
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVu
ZCgpOwotCi0gICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
bWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBt
aW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKLSAgICAgICAgICAgICAgICAg
ICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByZWZlciBw
bHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KKyAgICBpZiAoIW91clBhdGguaXNOdWxsKCkgJiYgIXBhdGguaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiBvdXJQYXRoID09IHBhdGg7CiAKLSAgICByZXR1cm4gbWltZVR5cGU7
Ci19Ci0KLVBsdWdpblBhY2thZ2VXaW4qIFBsdWdpbkRhdGFiYXNlV2luOjpmaW5kUGx1Z2luKGNv
bnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSkKLXsgICAKLSAgICBQbHVnaW5QYWNrYWdl
V2luKiBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgU3RyaW5nIGZp
bGVuYW1lID0gdXJsLnN0cmluZygpOwotICAgIAotICAgIGlmICghcGx1Z2luKSB7Ci0gICAgICAg
IFN0cmluZyBmaWxlbmFtZSA9IHVybC5sYXN0UGF0aENvbXBvbmVudCgpOwotICAgICAgICBpZiAo
IWZpbGVuYW1lLmVuZHNXaXRoKCIvIikpIHsKLSAgICAgICAgICAgIGludCBleHRlbnNpb25Qb3Mg
PSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOwotICAgICAgICAgICAgaWYgKGV4dGVuc2lvblBv
cyAhPSAtMSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBmaWxlbmFtZS5z
dWJzdHJpbmcoZXh0ZW5zaW9uUG9zICsgMSk7Ci0KLSAgICAgICAgICAgICAgICBtaW1lVHlwZSA9
IE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7Ci0gICAgICAgICAgICAgICAgcGx1Z2lu
ID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IGlmIG5vIHBsdWdpbiBjb3VsZCBiZSBmb3VuZCwgcXVl
cnkgV2luZG93cyBmb3IgdGhlIG1pbWUgdHlwZSAKLSAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBleHRlbnNpb24uCi0KLSAgICByZXR1cm4gcGx1Z2luOwotfQotCi1QbHVnaW5WaWV3V2luKiBQ
bHVnaW5EYXRhYmFzZVdpbjo6Y3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNv
bnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCi17Ci0g
ICAgLy8gaWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1Z2luIGZvciB0aGlzIE1JTUUgdHlwZSwgZmlu
ZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IKLSAgICAvLyBhIHBsdWdpbiBieSB0aGUgZmlsZSBleHRl
bnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBlLCBzbyBwYXNzIGEgbXV0YWJsZSBTdHJpbmcK
LSAgICBTdHJpbmcgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7Ci0gICAgUGx1Z2luUGFja2FnZVdp
biogcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7Ci0gICAgCi0gICAgLy8g
Tm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFy
Y2hpbmcgYWdhaW4KLSAgICBpZiAoIXBsdWdpbiAmJiByZWZyZXNoKCkpIHsKLSAgICAgICAgbWlt
ZVR5cGVDb3B5ID0gbWltZVR5cGU7Ci0gICAgICAgIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBt
aW1lVHlwZUNvcHkpOwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJuIG5ldyBQbHVnaW5WaWV3
V2luKHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9hZE1hbnVhbGx5KTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmgJ
KHJldmlzaW9uIDI5OTY4KQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBQbHVnaW5EYXRhYmFzZVdpbl9ICi0jZGVmaW5lIFBsdWdpbkRhdGFiYXNlV2luX0gKLQot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCi0j
aW5jbHVkZSAiU3RyaW5nSGFzaC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3Mg
RWxlbWVudDsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBJbnRTaXplOwotICAgIGNsYXNz
IEtVUkw7Ci0gICAgY2xhc3MgUGx1Z2luUGFja2FnZVdpbjsKLSAgICBjbGFzcyBQbHVnaW5WaWV3
V2luOwotCi0gICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiwgUGx1
Z2luUGFja2FnZVdpbkhhc2g+IFBsdWdpblNldDsKLSAgCi0gICAgY2xhc3MgUGx1Z2luRGF0YWJh
c2VXaW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlV2luKiBp
bnN0YWxsZWRQbHVnaW5zKCk7Ci0gICAgICAgIFBsdWdpblZpZXdXaW4qIGNyZWF0ZVBsdWdpblZp
ZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29s
IGxvYWRNYW51YWxseSk7Ci0KLSAgICAgICAgYm9vbCByZWZyZXNoKCk7Ci0gICAgICAgIFZlY3Rv
cjxQbHVnaW5QYWNrYWdlV2luKj4gcGx1Z2lucygpIGNvbnN0OwotICAgICAgICBib29sIGlzTUlN
RVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICB2b2lkIGFk
ZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKLSAgICBwcml2YXRlOgotICAgICAgICB2
b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykgeyBtX3BsdWdp
blBhdGhzID0gcGF0aHM7IH0KLSAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdpbnNJblBhdGhzKCkg
Y29uc3Q7Ci0KLSAgICAgICAgUGx1Z2luUGFja2FnZVdpbiogZmluZFBsdWdpbihjb25zdCBLVVJM
JiB1cmwsIFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVn
aW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgU3RyaW5nIE1J
TUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdDsKLQotICAg
ICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZGVmYXVsdFBsdWdpblBhdGhzKCk7Ci0KLSAgICAg
ICAgVmVjdG9yPFN0cmluZz4gbV9wbHVnaW5QYXRoczsKLSAgICAgICAgSGFzaFNldDxTdHJpbmc+
IG1fcmVnaXN0ZXJlZE1JTUVUeXBlczsKLSAgICAgICAgUGx1Z2luU2V0IG1fcGx1Z2luczsKLSAg
ICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCShyZXZpc2lvbiAyOTk2OCkKKysrIFdlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxzaGx3YXBpLmg+CiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5o
IgogCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCkBA
IC0zNSwxMSArMzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBsdWdpblBhY2thZ2VX
aW46On5QbHVnaW5QYWNrYWdlV2luKCkKLXsKLSAgICBBU1NFUlQoIW1faXNMb2FkZWQpOwotfQot
CiBzdGF0aWMgU3RyaW5nIGdldFZlcnNpb25JbmZvKGNvbnN0IExQVk9JRCB2ZXJzaW9uSW5mb0Rh
dGEsIGNvbnN0IFN0cmluZyYgaW5mbykKIHsKICAgICBMUFZPSUQgYnVmZmVyOwpAQCAtODMsNjkg
Kzc4LDQ4IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBzcGxpdFN0cmluZyhjb25zdCAKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBsdWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5U29v
bigpCitzdGF0aWMgTFBWT0lEIGdldFZlcnNpb25JbmZvRGF0YShjb25zdCBTdHJpbmcgcGF0aCYs
IERXT1JEIHNpemUmKQogewotICAgIEFTU0VSVCghbV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZl
KCkpOwotICAgIEFTU0VSVChtX21vZHVsZSk7Ci0gICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDAp
OworICAgIERXT1JEIHZlcnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsKKyAgICB2ZXJzaW9uSW5m
b1NpemUgPSBHZXRGaWxlVmVyc2lvbkluZm9TaXplVyhTdHJpbmcocGF0aCkuY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSwgJnplcm9IYW5kbGUpOyAKIAotICAgIG1fZnJlZUxpYnJhcnlU
aW1lci5zdGFydE9uZVNob3QoMCk7Ci19CisgICAgc2l6ZSA9IHZlcnNpb25JbmZvU2l6ZTsKIAot
dm9pZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2lu
UGFja2FnZVdpbj4qIC8qdGltZXIqLykKLXsKLSAgICBBU1NFUlQobV9tb2R1bGUpOwotICAgIEFT
U0VSVChtX2xvYWRDb3VudCA9PSAwKTsKKyAgICBpZiAodmVyc2lvbkluZm9TaXplID09IDApCisg
ICAgICAgIHJldHVybiAwOwogCi0gICAgOjpGcmVlTGlicmFyeShtX21vZHVsZSk7Ci0gICAgbV9t
b2R1bGUgPSAwOwotfQorICAgIExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEgPSBmYXN0TWFsbG9jKHZl
cnNpb25JbmZvU2l6ZSk7CiAKLVBsdWdpblBhY2thZ2VXaW46OlBsdWdpblBhY2thZ2VXaW4oY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKQotICAgIDogbV9w
YXRoKHBhdGgpCi0gICAgLCBtX21vZHVsZSgwKQotICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1v
ZGlmaWVkKQotICAgICwgbV9pc0xvYWRlZChmYWxzZSkKLSAgICAsIG1fbG9hZENvdW50KDApCi0g
ICAgLCBtX2ZyZWVMaWJyYXJ5VGltZXIodGhpcywgJlBsdWdpblBhY2thZ2VXaW46OmZyZWVMaWJy
YXJ5VGltZXJGaXJlZCkKLSAgICAsIG1fZmlsZVZlcnNpb25MUygwKQotICAgICwgbV9maWxlVmVy
c2lvbk1TKDApCi17Ci0gICAgbV9maWxlTmFtZSA9IFN0cmluZyhQYXRoRmluZEZpbGVOYW1lKG1f
cGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSk7Ci0gICAgbV9wYXJlbnREaXJl
Y3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgp
IC0gMSk7Ci19CisgICAgaWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKFN0cmluZyhwYXRoKS5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2ZXJzaW9uSW5mb1NpemUsIHZlcnNpb25J
bmZvRGF0YSkpIHsKKyAgICAgICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQogCi1pbnQgUGx1Z2luUGFja2FnZVdpbjo6Y29tcGFyZUZpbGVWZXJz
aW9uKHVuc2lnbmVkIGNvbXBhcmVWZXJzaW9uTVMsIHVuc2lnbmVkIGNvbXBhcmVWZXJzaW9uTFMp
IGNvbnN0Ci17Ci0gICAgLy8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVyc2lvbiBp
cyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4KLSAgICAvLyB0aGUgcGFzc2Vk
IHZlcnNpb24KLSAgICBpZiAobV9maWxlVmVyc2lvbk1TICE9IGNvbXBhcmVWZXJzaW9uTVMpCi0g
ICAgICAgIHJldHVybiBtX2ZpbGVWZXJzaW9uTVMgPiBjb21wYXJlVmVyc2lvbk1TID8gMSA6IC0x
OwotICAgIGlmIChtX2ZpbGVWZXJzaW9uTFMgIT0gY29tcGFyZVZlcnNpb25MUykKLSAgICAgICAg
cmV0dXJuIG1fZmlsZVZlcnNpb25MUyA+IGNvbXBhcmVWZXJzaW9uTFMgPyAxIDogLTE7Ci0gICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIHZlcnNpb25JbmZvRGF0YTsKIH0KIAotdm9pZCBQbHVnaW5Q
YWNrYWdlV2luOjpzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpCitib29s
IFBsdWdpblBhY2thZ2U6OmlzUGx1Z2luQmxhY2tsaXN0ZWQoKSBjb25zdAogeworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbk1TID0g
MHgwMDAxMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2lsdmVybGlnaHRQbHVnaW5N
aW5SZXF1aXJlZFZlcnNpb25MUyA9IDB4NTFCRTAwMDA7CisKKyAgICBEV09SRCB2ZXJzaW9uSW5m
b1NpemU7CisgICAgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSA9IGdldFZlcnNpb25JbmZvRGF0YSht
X3BhdGgsIHZlcnNpb25JbmZvU2l6ZSk7CisKKyAgICBpZiAoIXZlcnNpb25JbmZvRGF0YSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKICAgICBWU19GSVhFREZJTEVJTkZPKiBpbmZvOwogICAgIFVJ
TlQgaW5mb1NpemU7CiAgICAgaWYgKCFWZXJRdWVyeVZhbHVlKHZlcnNpb25JbmZvRGF0YSwgVEVY
VCgiXFwiKSwgKExQVk9JRCopICZpbmZvLCAmaW5mb1NpemUpIHx8IGluZm9TaXplIDwgc2l6ZW9m
KFZTX0ZJWEVERklMRUlORk8pKQotICAgICAgICByZXR1cm47Ci0gICAgbV9maWxlVmVyc2lvbkxT
ID0gaW5mby0+ZHdGaWxlVmVyc2lvbkxTOwotICAgIG1fZmlsZVZlcnNpb25NUyA9IGluZm8tPmR3
RmlsZVZlcnNpb25NUzsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjppc1BsdWdpbkJsYWNr
bGlzdGVkKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2lsdmVybGlnaHRQbHVnaW5N
aW5SZXF1aXJlZFZlcnNpb25NUyA9IDB4MDAwMTAwMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFMgPSAweDUxQkUwMDAwOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChuYW1lKCkgPT0gIlNpbHZlcmxpZ2h0IFBs
dWctSW4iKSB7CiAgICAgICAgIC8vIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vNTU1NzM3OT4gQ3Jh
c2ggaW4gU2lsdmVybGlnaHQgd2hlbiBvcGVuaW5nIG1pY3Jvc29mdC5jb20uCiAgICAgICAgIC8v
IHRoZSBsYXRlc3QgMS4wIHZlcnNpb24gb2YgU2lsdmVybGlnaHQgZG9lcyBub3QgcmVwcm9kdWNl
IHRoaXMgY3Jhc2gsIHNvIGFsbG93IGl0CiAgICAgICAgIC8vIGFuZCBhbnkgbmV3ZXIgdmVyc2lv
bnMKLSAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihzaWx2ZXJsaWdodFBsdWdpbk1pblJl
cXVpcmVkVmVyc2lvbk1TLCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxTKSA+
PSAwKQorICAgICAgICBpZiAoaW5mby0+ZHdGaWxlVmVyc2lvbk1TIDwgc2lsdmVybGlnaHRQbHVn
aW5NaW5SZXF1aXJlZFZlcnNpb25NU0RXT1JEIHx8CisgICAgICAgICAgICAoaW5mby0+ZHdGaWxl
VmVyc2lvbk1TID09IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVNEV09SRCAm
JiBpbmZvLT5kd0ZpbGVWZXJzaW9uTFMgPCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVy
c2lvbkxTRFdPUkQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIGlmIChm
aWxlTmFtZSgpID09ICJucG1vemF4LmRsbCIpCiAgICAgICAgIC8vIEJ1ZyAxNTIxNzogTW96aWxs
YSBBY3RpdmVYIGNvbnRyb2wgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb21fY29yZS5kbGwK
QEAgLTE1NCwyMCArMTI4LDEzIEBAIGJvb2wgUGx1Z2luUGFja2FnZVdpbjo6aXNQbHVnaW5CbGFj
a2xpc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZmV0
Y2hJbmZvKCkKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKIHsKLSAgICBEV09SRCB2
ZXJzaW9uSW5mb1NpemUsIHplcm9IYW5kbGU7Ci0gICAgdmVyc2lvbkluZm9TaXplID0gR2V0Rmls
ZVZlcnNpb25JbmZvU2l6ZVcobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCks
ICZ6ZXJvSGFuZGxlKTsgCi0KLSAgICBpZiAodmVyc2lvbkluZm9TaXplID09IDApCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBEV09SRCB2ZXJzaW9uSW5mb1NpemU7CisgICAgTFBWT0lEIHZl
cnNpb25JbmZvRGF0YSA9IGdldFZlcnNpb25JbmZvRGF0YShtX3BhdGgsIHZlcnNpb25JbmZvU2l6
ZSk7CiAKLSAgICBMUFZPSUQgdmVyc2lvbkluZm9EYXRhID0gZmFzdE1hbGxvYyh2ZXJzaW9uSW5m
b1NpemUpOwotCi0gICAgaWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKG1fcGF0aC5jaGFyYWN0ZXJz
V2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2ZXJzaW9uSW5mb1NpemUsIHZlcnNpb25JbmZvRGF0
YSkpIHsKLSAgICAgICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsKKyAgICBpZiAoIXZlcnNp
b25JbmZvRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAogICAgIG1fbmFtZSA9
IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIlByb2R1Y3ROYW1lIik7CiAgICAgbV9k
ZXNjcmlwdGlvbiA9IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YSwgIkZpbGVEZXNjcmlw
dGlvbiIpOwpAQCAtMTc3LDggKzE0NCw2IEBAIGJvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZmV0Y2hJ
bmZvKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHN0b3JlRmlsZVZlcnNp
b24odmVyc2lvbkluZm9EYXRhKTsKLQogICAgIGlmIChpc1BsdWdpbkJsYWNrbGlzdGVkKCkpIHsK
ICAgICAgICAgZmFzdEZyZWUodmVyc2lvbkluZm9EYXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMjExLDcgKzE3Niw3IEBAIGJvb2wgUGx1Z2luUGFja2FnZVdpbjo6ZmV0Y2hJbmZvKCkK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQbHVnaW5QYWNrYWdlV2luOjpsb2FkKCkKK2Jv
b2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCiB7CiAgICAgaWYgKG1fZnJlZUxpYnJhcnlUaW1lci5p
c0FjdGl2ZSgpKSB7CiAgICAgICAgIEFTU0VSVChtX21vZHVsZSk7CkBAIC0zMjUsNTEgKzI5MCw3
IEBAIGFib3J0OgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBQbHVnaW5QYWNrYWdlV2lu
Ojp1bmxvYWQoKQotewotICAgIGlmICghbV9pc0xvYWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX05QUF9T
aHV0ZG93bigpOwotCi0gICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Ci19Ci0KLXZvaWQgUGx1
Z2luUGFja2FnZVdpbjo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKLXsKLSAgICBpZiAoIW1faXNM
b2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsK
LSAgICBBU1NFUlQobV9tb2R1bGUpOwotCi0gICAgLy8gPHJkYXI6Ly81NTMwNTE5PjogQ3Jhc2gg
d2hlbiBjbG9zaW5nIHRhYiB3aXRoIHBkZiBmaWxlIChSZWFkZXIgNyBvbmx5KQotICAgIC8vIElm
IHRoZSBwbHVnaW4gaGFzIHN1YmNsYXNzZWQgaXRzIHBhcmVudCB3aW5kb3csIGFzIHdpdGggUmVh
ZGVyIDcsIHdlIG1heSBoYXZlCi0gICAgLy8gZ290dGVuIGhlcmUgYnkgd2F5IG9mIHRoZSBwbHVn
aW4ncyBpbnRlcm5hbCB3aW5kb3cgcHJvYyBmb3J3YXJkaW5nIGEgbWVzc2FnZSB0byBvdXIKLSAg
ICAvLyBvcmlnaW5hbCB3aW5kb3cgcHJvYy4gSWYgd2UgZnJlZSB0aGUgcGx1Z2luIGxpYnJhcnkg
ZnJvbSBoZXJlLCB3ZSB3aWxsIGp1bXAgYmFjawotICAgIC8vIHRvIGNvZGUgd2UganVzdCBmcmVl
ZCB3aGVuIHdlIHJldHVybiwgc28gZGVsYXkgY2FsbGluZyBGcmVlTGlicmFyeSBhdCBsZWFzdCB1
bnRpbAotICAgIC8vIHRoZSBuZXh0IG1lc3NhZ2UgbG9vcAotICAgIGZyZWVMaWJyYXJ5U29vbigp
OwotCi0gICAgbV9pc0xvYWRlZCA9IGZhbHNlOwotfQotCi1QbHVnaW5QYWNrYWdlV2luKiBQbHVn
aW5QYWNrYWdlV2luOjpjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklM
RVRJTUUmIGxhc3RNb2RpZmllZCkKLXsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0g
bmV3IFBsdWdpblBhY2thZ2VXaW4ocGF0aCwgbGFzdE1vZGlmaWVkKTsKLQotICAgIGlmICghcGFj
a2FnZS0+ZmV0Y2hJbmZvKCkpIHsKLSAgICAgICAgZGVsZXRlIHBhY2thZ2U7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcGFja2FnZTsKLX0KLQotdW5zaWduZWQg
UGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0Cit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpo
YXNoKCkgY29uc3QKIHsgCiAgICAgdW5zaWduZWQgaGFzaENvZGVzWzNdID0gewogICAgICAgICBt
X2Rlc2NyaXB0aW9uLmltcGwoKS0+aGFzaCgpLApAQCAtMzgwLDcgKzMwMSw3IEBAIHVuc2lnbmVk
IFBsdWdpblBhY2thZ2VXaW46Omhhc2goKSBjb25zdAogICAgIHJldHVybiBTdHJpbmdJbXBsOjpj
b21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMyAqIHNpemVv
Zih1bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKIH0KIAotYm9vbCBQbHVnaW5QYWNrYWdlV2lu
OjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2lu
JiBiKQorYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBj
b25zdCBQbHVnaW5QYWNrYWdlJiBiKQogewogICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0g
Yi5tX2Rlc2NyaXB0aW9uICYmIChDb21wYXJlRmlsZVRpbWUoJmEubV9sYXN0TW9kaWZpZWQsICZi
Lm1fbGFzdE1vZGlmaWVkKSA9PSAwKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luUGFja2FnZVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
UGFja2FnZVdpbi5oCShyZXZpc2lvbiAyOTk2OCkKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luUGFja2FnZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpZm5kZWYgUGx1Z2luUGFja2FnZVdpbl9ICi0jZGVmaW5lIFBsdWdpblBhY2th
Z2VXaW5fSAotCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0K
LSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiCi0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlw
dGlvbnNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBN
SU1FVG9FeHRlbnNpb25zTWFwOwotCi0gICAgY2xhc3MgUGx1Z2luUGFja2FnZVdpbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2VXaW4+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIH5Q
bHVnaW5QYWNrYWdlV2luKCk7Ci0gICAgICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlV2luKiBjcmVh
dGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmll
ZCk7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQotICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc2Ny
aXB0aW9uOyB9Ci0gICAgICAgIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZU5hbWU7IH0KLSAgICAgICAgU3RyaW5nIHBhcmVudERpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyZW50RGlyZWN0b3J5OyB9Ci0KLSAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25z
TWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0
aW9uczsgfQotICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9Ci0KLSAgICAgICAgdW5z
aWduZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2lu
JiBiKTsKLQotICAgICAgICBib29sIGxvYWQoKTsKLSAgICAgICAgdm9pZCB1bmxvYWQoKTsKLSAg
ICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKLQotICAgICAgICBjb25zdCBOUFBs
dWdpbkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9
Ci0KLSAgICAgICAgaW50IGNvbXBhcmVGaWxlVmVyc2lvbih1bnNpZ25lZCBjb21wYXJlVmVyc2lv
bk1TLCB1bnNpZ25lZCBjb21wYXJlVmVyc2lvbkxTKSBjb25zdDsKLSAgICBwcml2YXRlOgotICAg
ICAgICBQbHVnaW5QYWNrYWdlV2luKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUm
IGxhc3RNb2RpZmllZCk7Ci0gICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7Ci0gICAgICAgIHZvaWQg
c3RvcmVGaWxlVmVyc2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKTsKLSAgICAgICAgYm9vbCBp
c1BsdWdpbkJsYWNrbGlzdGVkKCk7Ci0KLSAgICAgICAgYm9vbCBtX2lzTG9hZGVkOwotICAgICAg
ICBpbnQgbV9sb2FkQ291bnQ7Ci0KLSAgICAgICAgRFdPUkQgbV9maWxlVmVyc2lvbk1TOwotICAg
ICAgICBEV09SRCBtX2ZpbGVWZXJzaW9uTFM7Ci0KLSAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRp
b247Ci0gICAgICAgIFN0cmluZyBtX3BhdGg7Ci0gICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOwot
ICAgICAgICBTdHJpbmcgbV9uYW1lOwotICAgICAgICBTdHJpbmcgbV9wYXJlbnREaXJlY3Rvcnk7
Ci0KLSAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOwot
ICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKLQotICAgICAg
ICBITU9EVUxFIG1fbW9kdWxlOwotICAgICAgICBGSUxFVElNRSBtX2xhc3RNb2RpZmllZDsKLQot
ICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQX1NodXRkb3duOwotICAgICAgICBOUFBs
dWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7Ci0gICAgICAgIE5QTmV0c2NhcGVGdW5jcyBtX2Jyb3dz
ZXJGdW5jczsKLQotICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5U29vbigpOwotICAgICAgICB2b2lk
IGZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdlV2luPiopOwotICAgICAg
ICBUaW1lcjxQbHVnaW5QYWNrYWdlV2luPiBtX2ZyZWVMaWJyYXJ5VGltZXI7Ci0gICAgfTsKLQot
ICAgIHN0cnVjdCBQbHVnaW5QYWNrYWdlV2luSGFzaCB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IGludCBrZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFj
a2FnZVdpbio+KGtleSktPmhhc2goKTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7
IH0KLQotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBpbnQgYSwgY29uc3QgaW50IGIp
IHsgcmV0dXJuIGVxdWFsKHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGEpLCBy
ZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihiKSk7IH0KLSAgICAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+JiBhLCBjb25zdCBSZWZQ
dHI8UGx1Z2luUGFja2FnZVdpbj4mIGIpIHsgcmV0dXJuIFBsdWdpblBhY2thZ2VXaW46OmVxdWFs
KCphLmdldCgpLCAqYi5nZXQoKSk7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLS8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4g
V1RGLCB3aGVyZSBpdCdzIGltcG9zc2libGUgdG8gdXNlIGEgY3VzdG9tIEhhc2ggZnVuY3Rpb24g
YnV0IHdpdGggZGVmYXVsdCB0cmFpdHMuCi0vLyBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZG8g
dGhpcyB3aXRob3V0IGEgU3RvcmFnZVRyYWl0cyBzcGVjaWFsaXphdGlvbi4KLW5hbWVzcGFjZSBX
VEYgewotICAgIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hLZXlTdG9yYWdlVHJhaXRzPFdlYkNvcmU6
OlBsdWdpblBhY2thZ2VXaW5IYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlV2luPiA+ID4gewotICAgICAgICB0eXBlZGVmIEludFR5cGVzPHNpemVvZihSZWZQdHI8
V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbj4pPjo6U2lnbmVkVHlwZSBJbnRUeXBlOwotICAgICAg
ICB0eXBlZGVmIFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW5IYXNoIEhhc2g7Ci0gICAgICAgIHR5
cGVkZWYgSGFzaFRyYWl0czxJbnRUeXBlPiBUcmFpdHM7Ci0gICAgfTsKLX0KLQotCi0jZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkocmV2aXNpb24gMjk5Njgp
CisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NywxMiArNDcsMTEgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiRm9jdXND
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAi
UGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRl
ICJranNfYmluZGluZy5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogI2luY2x1ZGUgImtqc193
aW5kb3cuaCIKICNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2th
Z2VXaW4uaCIKICNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUgInJ1bnRpbWVf
cm9vdC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC0xNTQzLDcgKzE1NDIsNyBAQCB2b2lk
IFBsdWdpblZpZXdXaW46OnNldFBhcmFtZXRlcnMoY29uc3QgCiAgICAgbV9wYXJhbUNvdW50ID0g
cGFyYW1Db3VudDsKIH0KIAotUGx1Z2luVmlld1dpbjo6UGx1Z2luVmlld1dpbihGcmFtZSogcGFy
ZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiwg
RWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKK1BsdWdpblZpZXdXaW46OlBsdWdpblZp
ZXdXaW4oRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNr
YWdlKiBwbHVnaW4sIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVl
cywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiAgICAgOiBtX3Bh
cmVudEZyYW1lKHBhcmVudEZyYW1lKQogICAgICwgbV9wbHVnaW4ocGx1Z2luKQogICAgICwgbV9l
bGVtZW50KGVsZW1lbnQpCkBAIC0xNjkwLDQgKzE2ODksMjAgQEAgYm9vbCBQbHVnaW5WaWV3V2lu
Ojppc0NhbGxpbmdQbHVnaW4oKQogICAgIHJldHVybiBzX2NhbGxpbmdQbHVnaW4gPiAwOwogfQog
CitQbHVnaW5WaWV3V2luKiBQbHVnaW5WaWV3V2luOjpjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBw
YXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSkKK3sKKyAgICAvLyBpZiB3ZSBmYWlsIHRvIGZpbmQgYSBwbHVnaW4gZm9yIHRoaXMg
TUlNRSB0eXBlLCBmaW5kUGx1Z2luIHdpbGwgc2VhcmNoIGZvcgorICAgIC8vIGEgcGx1Z2luIGJ5
IHRoZSBmaWxlIGV4dGVuc2lvbiBhbmQgdXBkYXRlIHRoZSBNSU1FIHR5cGUsIHNvIHBhc3MgYSBt
dXRhYmxlIFN0cmluZworICAgIFN0cmluZyBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICBQ
bHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygp
LT5maW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKKyAgICAKKyAgICAvLyBObyBwbHVnaW4g
d2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2Fp
bgorICAgIGlmICghcGx1Z2luICYmIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCkt
PnJlZnJlc2goKSkgeworICAgICAgICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICAgICAg
cGx1Z2luID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+ZmluZFBsdWdpbih1
cmwsIG1pbWVUeXBlQ29weSk7CisgICAgfQorICAgICAgICAKKyAgICByZXR1cm4gbmV3IFBsdWdp
blZpZXdXaW4ocGFyZW50RnJhbWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5h
bWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGVDb3B5LCBsb2FkTWFudWFsbHkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18938</attachid>
            <date>2008-02-05 12:04:00 -0800</date>
            <delta_ts>2008-02-14 11:53:10 -0800</delta_ts>
            <desc>Patch to only do the renaming of API, and moving of files</desc>
            <filename>webkit-plugin-rename.patch</filename>
            <type>text/plain</type>
            <size>124860</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMzAwMDkp
CisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjc1LDEwICszMjc1LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cUGx1Z0luSW5mb1N0b3JlLmgiDQotCQkJCT4N
Ci0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxQ
b3B1cE1lbnUuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC03OTMzLDE0ICs3OTI5LDM0IEBA
CiAJCQlOYW1lPSJwbHVnaW5zIg0KIAkJCT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsdWdpbnNcbnBhcGkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xucGZ1bmN0aW9ucy5oIg0KIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5E
YXRhYmFzZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5JbmZvU3RvcmUuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGx1Z2luc1xQbHVnaW5JbmZvU3RvcmUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2FnZS5oIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQ
bHVnaW5RdWlya1NldC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTc5NTIsNDEgKzc5Njgs
MjUgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luU3RyZWFtLmgiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5z
XFBsdWdpblZpZXcuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCiAJCQk8RmlsdGVyDQogCQkJCU5h
bWU9IndpbiINCiAJCQkJPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVn
aW5zXHdpblxucGFwaS5jcHAiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCiAJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luRGF0YWJhc2VXaW4uY3BwIg0K
IAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsdWdpbnNcd2luXFBsdWdpbkRhdGFiYXNlV2luLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4N
Ci0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1x3aW5cUGx1Z0luSW5m
b1N0b3JlV2luLmNwcCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmNwcCINCiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVn
aW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJ
PEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luVmlld1dpbi5j
cHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luVmlld1dpbi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+
DQogCQkJPC9GaWx0ZXI+DQogCQk8L0ZpbHRlcj4NCiAJCTxGaWx0ZXINCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAJKHJldmlzaW9uIDMwMDA5KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKICNp
bmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAi
UGx1Z2luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJranNf
d2luZG93LmgiCiAjaW5jbHVkZSA8a2pzL29iamVjdF9vYmplY3QuaD4KQEAgLTIzMSw3ICsyMzEs
NyBAQCB2b2lkIFBsdWdpbkJhc2U6OmNhY2hlUGx1Z2luRGF0YUlmTmVjZXNzCiAgICAgICAgIG1p
bWVzID0gbmV3IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj47CiAgICAgICAgIAogICAgICAgICAvLyBy
ZWFkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgUGx1Z0luSW5mb1N0b3JlIGM7CisgICAgICAgIFBs
dWdpbkluZm9TdG9yZSBjOwogICAgICAgICB1bnNpZ25lZCBwbHVnaW5Db3VudCA9IGMucGx1Z2lu
Q291bnQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBsdWdpbkNvdW50OyBu
KyspIHsKICAgICAgICAgICAgIFBsdWdpbkluZm8qIHBsdWdpbiA9IGMuY3JlYXRlUGx1Z2luSW5m
b0ZvclBsdWdpbkF0SW5kZXgobik7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5k
b3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAJ
KHJldmlzaW9uIDMwMDA5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJQYXVzZWRUaW1lb3V0cy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCi0jaW5j
bHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkluZGV4OiBXZWJDb3JlL2JyaWRnZS93aW4vRnJhbWVX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3dpbi9GcmFtZVdpbi5jcHAJKHJl
dmlzaW9uIDMwMDA5KQorKysgV2ViQ29yZS9icmlkZ2Uvd2luL0ZyYW1lV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsdWdpbi5oIgotI2luY2x1ZGUgIlBsdWdpbkRh
dGFiYXNlV2luLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlld1dpbi5oIgorI2luY2x1ZGUgIlBsdWdp
bkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlJlZ3VsYXJF
eHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJU
YWJsZUNlbGwuaCIKQEAgLTgxLDcgKzgxLDcgQEAgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZy
YW1lOjpjcmVhdGVTYwogICAgIGlmICh3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXdXaW4qPih3aWRnZXQp
LT5iaW5kaW5nSW5zdGFuY2UoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+
KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwogfQogCiAKSW5kZXg6IFdlYkNvcmUvZG9tL0Ns
aXBib2FyZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmNwcAkocmV2
aXNpb24gMzAwMDkpCisrKyBXZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgi
CisjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJ
bmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkocmV2aXNpb24gMzAwMDkpCisrKyBXZWJD
b3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDcgQEAKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgi
CisjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Np
b24uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHREb2N1bWVudC5oIgpA
QCAtMzcyLDE0ICszNzIsMTQgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRp
b246OgogCiAgICAgLy8gUERGIGlzIG9uZSBpbWFnZSB0eXBlIGZvciB3aGljaCBhIHBsdWdpbiBj
YW4gb3ZlcnJpZGUgYnVpbHQtaW4gc3VwcG9ydC4KICAgICAvLyBXZSBkbyBub3Qgd2FudCBRdWlj
a1RpbWUgdG8gdGFrZSBvdmVyIGFsbCBpbWFnZSB0eXBlcywgb2J2aW91c2x5LgotICAgIGlmICgo
dHlwZSA9PSAiYXBwbGljYXRpb24vcGRmIiB8fCB0eXBlID09ICJ0ZXh0L3BkZiIpICYmIFBsdWdJ
bkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZSh0eXBlKSkKKyAgICBpZiAoKHR5cGUgPT0gImFw
cGxpY2F0aW9uL3BkZiIgfHwgdHlwZSA9PSAidGV4dC9wZGYiKSAmJiBQbHVnaW5JbmZvU3RvcmU6
OnN1cHBvcnRzTUlNRVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBuZXcgUGx1Z2luRG9jdW1l
bnQodGhpcywgZnJhbWUpOwogICAgIGlmIChJbWFnZTo6c3VwcG9ydHNUeXBlKHR5cGUpKQogICAg
ICAgICByZXR1cm4gbmV3IEltYWdlRG9jdW1lbnQodGhpcywgZnJhbWUpOwogICAgIC8vIEV2ZXJ5
dGhpbmcgZWxzZSBleGNlcHQgdGV4dC9wbGFpbiBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwbHVnaW5z
LiBJbiBwYXJ0aWN1bGFyLCBBZG9iZSBTVkcgVmlld2VyIHNob3VsZCBiZSB1c2VkIGZvciBTVkcs
IGlmIGluc3RhbGxlZC4KICAgICAvLyBEaXNhbGxvd2luZyBwbHVnLWlucyB0byB1c2UgdGV4dC9w
bGFpbiBwcmV2ZW50cyBwbHVnLWlucyBmcm9tIGhpamFja2luZyBhIGZ1bmRhbWVudGFsIHR5cGUg
dGhhdCB0aGUgYnJvd3NlciBpcyBleHBlY3RlZCB0byBoYW5kbGUsCiAgICAgLy8gYW5kIGFsc28g
c2VydmVzIGFzIGFuIG9wdGltaXphdGlvbiB0byBwcmV2ZW50IGxvYWRpbmcgdGhlIHBsdWctaW4g
ZGF0YWJhc2UgaW4gdGhlIGNvbW1vbiBjYXNlLgotICAgIGlmICh0eXBlICE9ICJ0ZXh0L3BsYWlu
IiAmJiBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUodHlwZSkpIAorICAgIGlmICh0
eXBlICE9ICJ0ZXh0L3BsYWluIiAmJiBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUo
dHlwZSkpIAogICAgICAgICByZXR1cm4gbmV3IFBsdWdpbkRvY3VtZW50KHRoaXMsIGZyYW1lKTsK
ICAgICBpZiAoaXNUZXh0TUlNRVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBuZXcgVGV4dERv
Y3VtZW50KHRoaXMsIGZyYW1lKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9u
IDMwMDA5KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw3ICs2Niw3IEBACiAjaW5jbHVkZSAiTWFpblJlc291cmNlTG9hZGVyLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgotI2luY2x1ZGUgIlBsdWdJbklu
Zm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlByb2dy
ZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJX
aWRnZXQuaCIKQEAgLTE1OTEsNyArMTU5MSw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNob3VsZFVz
ZVBsdWdpbihjb25zdCAKICAgICAvLyBBbGxvdyBvdGhlciBwbHVnLWlucyB0byB3aW4gb3ZlciBR
dWlja1RpbWUgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGEgcGx1Zy1pbiB0aGF0
CiAgICAgLy8gY2FuIGhhbmRsZSBUSUZGICh3aGljaCBRdWlja1RpbWUgY2FuIGFsc28gaGFuZGxl
KSB0aGV5IHByb2JhYmx5IGludGVuZGVkIHRvIG92ZXJyaWRlIFFULgogICAgIGlmICgobWltZVR5
cGUgPT0gImltYWdlL3RpZmYiIHx8IG1pbWVUeXBlID09ICJpbWFnZS90aWYiIHx8IG1pbWVUeXBl
ID09ICJpbWFnZS94LXRpZmYiKSkgewotICAgICAgICBTdHJpbmcgcGx1Z2luTmFtZSA9IFBsdWdJ
bkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAgICAgU3Ry
aW5nIHBsdWdpbk5hbWUgPSBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZSht
aW1lVHlwZSk7CiAgICAgICAgIGlmICghcGx1Z2luTmFtZS5pc0VtcHR5KCkgJiYgIXBsdWdpbk5h
bWUuY29udGFpbnMoIlF1aWNrVGltZSIsIGZhbHNlKSkgCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDMwMDA5KQor
KysgV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NyArNTEsNyBAQAogI2luY2x1ZGUgIk1vdmVTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIK
KyNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJSZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUGx1Z0luSW5mb1N0b3Jl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbHVnSW5JbmZvU3RvcmUuaAkocmV2
aXNpb24gMzAwMDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BsdWdJbkluZm9TdG9yZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgUGx1Z0luSW5mb1N0b3JlX2gKLSNkZWZpbmUgUGx1Z0luSW5mb1N0b3JlX2gKLQotI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBQbHVnaW5JbmZvOwotCi1zdHJ1Y3QgTWltZUNsYXNz
SW5mbyB7Ci0gICAgU3RyaW5nIHR5cGU7Ci0gICAgU3RyaW5nIGRlc2M7Ci0gICAgU3RyaW5nIHN1
ZmZpeGVzOwotICAgIFBsdWdpbkluZm8qIHBsdWdpbjsKLX07Ci0KLXN0cnVjdCBQbHVnaW5JbmZv
IHsKLSAgICBTdHJpbmcgbmFtZTsKLSAgICBTdHJpbmcgZmlsZTsKLSAgICBTdHJpbmcgZGVzYzsK
LSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+IG1pbWVzOwotfTsKLQotY2xhc3MgUGx1Z0luSW5m
b1N0b3JlIHsKLXB1YmxpYzoKLSAgICBQbHVnaW5JbmZvICpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1
Z2luQXRJbmRleCh1bnNpZ25lZCk7Ci0gICAgdW5zaWduZWQgcGx1Z2luQ291bnQoKSBjb25zdDsK
LSAgICBzdGF0aWMgU3RyaW5nIHBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKTsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpOwotfTsKLQotdm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5QYWdl
cyk7Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDMwMDA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
VGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAog
I2luY2x1ZGUgIkZUUERpcmVjdG9yeURvY3VtZW50LmgiCiAjaW5jbHVkZSAiR2xvYmFsSGlzdG9y
eS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0
b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCkBAIC01NywxMCArNTcsMTAgQEAgVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUlu
dG9BcnJheShjb25zdAogCiBib29sIFdlYkNvcmU6Omhpc3RvcnlDb250YWlucyhjb25zdCBVQ2hh
ciosIHVuc2lnbmVkKSB7IHJldHVybiBmYWxzZTsgfQogCi1QbHVnaW5JbmZvKiBQbHVnSW5JbmZv
U3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkKSB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiAwO30KLXVuc2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2lu
Q291bnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1TdHJpbmcgUGx1
Z0luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLWJvb2wgV2ViQ29yZTo6
UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CitQbHVnaW5JbmZvKiBQbHVnaW5J
bmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiAwO30KK3Vuc2lnbmVkIFBsdWdpbkluZm9TdG9yZTo6cGx1
Z2luQ291bnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CitTdHJpbmcg
UGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KK2Jvb2wgV2ViQ29y
ZTo6UGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiB2b2lkIFdlYkNvcmU6OnJl
ZnJlc2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogCiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwCShyZXZpc2lvbiAzMDAwOSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOSw3ICsxOSw3IEBACiAgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25h
bGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKICAg
ICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2Jq
ZWN0cy4KICovCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2lu
SW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAicWRlYnVnLmgiCiAjaWYgUVRfVkVSU0lPTiA8IDB4MDQw
NDAwCiAjaW5jbHVkZSAicXdlYm9iamVjdHBsdWdpbl9wLmgiCkBAIC0yOCw5ICsyOCw5IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVh
dGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKQorUGx1Z2luSW5mbyogUGx1
Z2luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBp
KQogewotICAgIC8vcURlYnVnKCkgPDwgIj4+Pj4+Pj4+Pj4+IFBsdWdJbkluZm9TdG9yZTo6Y3Jl
YXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgoIiA8PCBpIDw8ICIpIjsKKyAgICAvL3FEZWJ1
ZygpIDw8ICI+Pj4+Pj4+Pj4+PiBQbHVnaW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQ
bHVnaW5BdEluZGV4KCIgPDwgaSA8PCAiKSI7CiAKICNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAK
ICAgICBRV2ViRmFjdG9yeUxvYWRlciAqbG9hZGVyID0gUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYo
KTsKQEAgLTU0LDMxICs1NCwzMSBAQCBQbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0
ZVBsdWdpCiAjZW5kaWYKIH0KIAotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3Vu
dCgpIGNvbnN0Cit1bnNpZ25lZCBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QK
IHsKICNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj4+Pj4+
Pj4+PiBQbHVnSW5JbmZvU3RvcmU6OmNvdW50ID0iIDw8IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxm
KCktPmtleXMoKS5jb3VudCgpOworICAgIC8vcURlYnVnKCkgPDwgIj4+Pj4+Pj4+Pj4+IFBsdWdp
bkluZm9TdG9yZTo6Y291bnQgPSIgPDwgUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+a2V5cygp
LmNvdW50KCk7CiAgICAgcmV0dXJuIFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPmtleXMoKS5j
b3VudCgpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKICNlbmRpZgogfQogCi1TdHJpbmcgUGx1Z0lu
SW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkK
K1N0cmluZyBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQogewogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBzdHViYmVkIG91
dCBhbmQgc2hvdWxkIHJlYWxseSByZXR1cm4gdGhlIG5hbWUgb2YgYSBwbHVnLWluIHBhY2thZ2Ug
Zm9yCiAgICAgLy8gYSBnaXZlbiBNSU1FIHR5cGUuCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQog
ICAgIAotYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29y
ZTo6U3RyaW5nJiBzdHJpbmcpCitib29sIFBsdWdpbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlw
ZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHN0cmluZykKIHsKICNpZiBRVF9WRVJTSU9OIDwgMHgw
NDA0MDAKICAgICBib29sIHN1cHBvcnRzID0gUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+c3Vw
cG9ydHNNaW1lVHlwZShzdHJpbmcpOwogI2Vsc2UKICAgICBib29sIHN1cHBvcnRzID0gZmFsc2U7
CiAjZW5kaWYKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj4+Pj4+Pj4+PiBQbHVnSW5JbmZvU3RvcmU6
OnN1cHBvcnRzTUlNRVR5cGUoIiA8PCBzdHJpbmcgPDwgIikgPSIgPDwgc3VwcG9ydHM7CisgICAg
Ly9xRGVidWcoKSA8PCAiPj4+Pj4+Pj4+Pj4gUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVU
eXBlKCIgPDwgc3RyaW5nIDw8ICIpID0iIDw8IHN1cHBvcnRzOwogICAgIHJldHVybiBzdXBwb3J0
czsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cAkocmV2aXNpb24gMzAwMDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNl
RXZlbnQuaCIKLSNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5J
bmZvU3RvcmUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlN5c3RlbVRp
bWUuaCIKICNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5oIgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS93aW4vU2hhcmVkVGltZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
d2luL1NoYXJlZFRpbWVyV2luLmNwcAkocmV2aXNpb24gMzAwMDkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL3dpbi9TaGFyZWRUaW1lcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKICNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSAi
UGx1Z2luVmlld1dpbi5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKICNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC02Miw3ICs2Miw3IEBAIExSRVNVTFQgQ0FMTEJBQ0sgVGltZXJX
aW5kb3dXbmRQcm9jKEhXTkQKICAgICAvLyB0byB1cyBhdCBpbmFwcHJvcHJpYXRlIHRpbWVzIGFu
ZCB3ZSB3aWxsIGNyYXNoIGlmIHdlIGhhbmRsZSB0aGVtIHdoZW4KICAgICAvLyB0aGV5IGFyZSBk
ZWxpdmVyZWQuIFdlIHJlcG9zdCBhbGwgbWVzc2FnZXMgc28gdGhhdCB3ZSB3aWxsIGdldCB0byBo
YW5kbGUKICAgICAvLyB0aGVtIG9uY2UgdGhlIG1vZGFsIGxvb3AgZXhpdHMuCi0gICAgaWYgKFBs
dWdpblZpZXdXaW46OmlzQ2FsbGluZ1BsdWdpbigpKSB7CisgICAgaWYgKFBsdWdpblZpZXc6Omlz
Q2FsbGluZ1BsdWdpbigpKSB7CiAgICAgICAgIFBvc3RNZXNzYWdlKGhXbmQsIG1lc3NhZ2UsIHdQ
YXJhbSwgbFBhcmFtKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMzAwMDkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xs
QmFyLmgiCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luSW5m
b1N0b3JlLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgpAQCAtMTE2LDEwICsxMTYsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIFdlYkNvcmU6OmZpbmRXb3JkQm91bmRhcnkoVUNoYXIg
Y29uc3QqIHN0cixpbnQgbGVuLGludCBwb3NpdGlvbixpbnQqIHN0YXJ0LCBpbnQqIGVuZCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyAqc3RhcnQ9cG9zaXRpb247ICplbmQ9cG9zaXRpb247IH0KIAotUGx1
Z2luSW5mbypQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4
KHVuc2lnbmVkKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwO30KLXVuc2lnbmVkIFBsdWdJ
bkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biAwOyB9Ci1ib29sIFdlYkNvcmU6OlBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShj
b25zdCBXZWJDb3JlOjpTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsg
fQotU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9CitQ
bHVnaW5JbmZvKlBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5k
ZXgodW5zaWduZWQpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQordW5zaWduZWQgUGx1
Z2luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIDA7IH0KK2Jvb2wgV2ViQ29yZTo6UGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBl
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNl
OyB9CitTdHJpbmcgUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0K
IHZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9
CiAKIHZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHJldmlzaW9uIDMwMDA5KQkoZnJvbSBX
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmg6MzAwMDkpCisrKyBXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luRGF0YWJhc2VXaW5fSAorI2RlZmluZSBQ
bHVnaW5EYXRhYmFzZVdpbl9ICisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
UGx1Z2luUGFja2FnZVdpbi5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xh
c3MgSW50U2l6ZTsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VXaW47
CisgICAgY2xhc3MgUGx1Z2luVmlld1dpbjsKKworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8
UGx1Z2luUGFja2FnZVdpbj4sIFBsdWdpblBhY2thZ2VXaW5IYXNoPiBQbHVnaW5TZXQ7CisgIAor
ICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlV2luIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQbHVnaW5EYXRhYmFzZVdpbiogaW5zdGFsbGVkUGx1Z2lucygpOworICAgICAgICBQbHVnaW5W
aWV3V2luKiBjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6
ZSYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworCisgICAgICAgIGJvb2wgcmVm
cmVzaCgpOworICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IHBsdWdpbnMoKSBjb25z
dDsKKyAgICAgICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKTsKKyAgICAgICAgdm9pZCBhZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJik7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRQbHVnaW5QYXRocyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGF0aHMpIHsgbV9wbHVnaW5QYXRocyA9IHBhdGhzOyB9CisgICAgICAgIFBsdWdpblNl
dCBnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0OworCisgICAgICAgIFBsdWdpblBhY2thZ2VXaW4q
IGZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAg
UGx1Z2luUGFja2FnZVdpbiogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSk7CisgICAgICAgIFN0cmluZyBNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4
dGVuc2lvbikgY29uc3Q7CisKKyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQ
bHVnaW5QYXRocygpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fcGx1Z2luUGF0aHM7Cisg
ICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXM7CisgICAgICAgIFBs
dWdpblNldCBtX3BsdWdpbnM7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCShyZXZpc2lvbiAzMDAwOSkKKysr
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywx
NCArMjMsMTQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUGx1Z2luRGF0YWJh
c2VXaW5fSAotI2RlZmluZSBQbHVnaW5EYXRhYmFzZVdpbl9ICisjaWZuZGVmIFBsdWdpbkRhdGFi
YXNlX0gKKyNkZWZpbmUgUGx1Z2luRGF0YWJhc2VfSAogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
LmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
OCwyNiArMzgsMjYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZyYW1lOwogICAg
IGNsYXNzIEludFNpemU7CiAgICAgY2xhc3MgS1VSTDsKLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdl
V2luOwotICAgIGNsYXNzIFBsdWdpblZpZXdXaW47CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZTsK
KyAgICBjbGFzcyBQbHVnaW5WaWV3OwogCi0gICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVn
aW5QYWNrYWdlV2luPiwgUGx1Z2luUGFja2FnZVdpbkhhc2g+IFBsdWdpblNldDsKKyAgICB0eXBl
ZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2U+LCBQbHVnaW5QYWNrYWdlSGFzaD4gUGx1
Z2luU2V0OwogICAKLSAgICBjbGFzcyBQbHVnaW5EYXRhYmFzZVdpbiB7CisgICAgY2xhc3MgUGx1
Z2luRGF0YWJhc2UgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNl
V2luKiBpbnN0YWxsZWRQbHVnaW5zKCk7Ci0gICAgICAgIFBsdWdpblZpZXdXaW4qIGNyZWF0ZVBs
dWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSk7CisgICAgICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZSogaW5z
dGFsbGVkUGx1Z2lucygpOworICAgICAgICBQbHVnaW5WaWV3KiBjcmVhdGVQbHVnaW5WaWV3KEZy
YW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2Fk
TWFudWFsbHkpOwogCiAgICAgICAgIGJvb2wgcmVmcmVzaCgpOwotICAgICAgICBWZWN0b3I8UGx1
Z2luUGFja2FnZVdpbio+IHBsdWdpbnMoKSBjb25zdDsKKyAgICAgICAgVmVjdG9yPFBsdWdpblBh
Y2thZ2UqPiBwbHVnaW5zKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNNSU1FVHlwZVJlZ2lzdGVy
ZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAgICAgICAgIHZvaWQgYWRkRXh0cmFQbHVnaW5Q
YXRoKGNvbnN0IFN0cmluZyYpOwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0UGx1Z2lu
UGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1fcGx1Z2luUGF0aHMgPSBwYXRo
czsgfQogICAgICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdDsKIAotICAg
ICAgICBQbHVnaW5QYWNrYWdlV2luKiBmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5n
JiBtaW1lVHlwZSk7Ci0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbkZvck1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBQbHVnaW5QYWNrYWdlKiBmaW5kUGx1
Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIFBsdWdpblBh
Y2thZ2UqIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogICAgICAg
ICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNv
bnN0OwogCiAgICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMo
KTsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCShyZXZpc2lvbiAzMDAwOSkJ
KGZyb20gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnSW5JbmZvU3RvcmVXaW4uY3BwOjMwMDA5KQor
KysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VXaW4uaCIK
KyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJ
bmRleCh1bnNpZ25lZCBpKSAKK3sgCisgICAgUGx1Z2luRGF0YWJhc2VXaW4gKmRiID0gUGx1Z2lu
RGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBQbHVnaW5JbmZvKiBpbmZvID0g
bmV3IFBsdWdpbkluZm87CisgICAgUGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IGRiLT5wbHVn
aW5zKClbaV07CisKKyAgICBpbmZvLT5uYW1lID0gcGFja2FnZS0+bmFtZSgpOworICAgIGluZm8t
PmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgIGluZm8tPmRlc2MgPSBwYWNrYWdlLT5k
ZXNjcmlwdGlvbigpOworCisgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9E
ZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICBNSU1FVG9E
ZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5l
bmQoKTsKKyAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IE1pbWVDbGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgaW5mby0+
bWltZXMuYXBwZW5kKG1pbWUpOworICAgICAgICAKKyAgICAgICAgbWltZS0+dHlwZSA9IGl0LT5m
aXJzdDsKKyAgICAgICAgbWltZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIG1pbWUtPnBs
dWdpbiA9IGluZm87CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHBhY2th
Z2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlwZSk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAg
ICAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9ICIs
IjsKKworICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBpbmZvOworfQorCit1bnNpZ25lZCBQbHVnSW5JbmZv
U3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VX
aW46Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKK30KKworCitTdHJpbmcg
UGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKK3sKKyAgICAvLyBGSVhNRSA1NjI5MTM5OiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb24g
V2luZG93cy4KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKKyAgICAKK2Jvb2wgUGx1Z0luSW5m
b1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWltZVR5cGUp
IAoreworICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5p
c01JTUVUeXBlUmVnaXN0ZXJlZChtaW1lVHlwZSk7Cit9CisKK3ZvaWQgcmVmcmVzaFBsdWdpbnMo
Ym9vbCByZWxvYWRPcGVuUGFnZXMpCit7CisgICAgUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxl
ZFBsdWdpbnMoKS0+cmVmcmVzaCgpOworCisgICAgaWYgKHJlbG9hZE9wZW5QYWdlcykgeworICAg
ICAgICAvLyBGSVhNRTogcmVsb2FkIG9wZW4gcGFnZXMKKyAgICB9Cit9CisKK30KSW5kZXg6IFdl
YkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCShyZXZpc2lvbiAzMDAwOSkKKysrIFdlYkNvcmUv
cGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNyArMjQs
MTcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z0luSW5mb1N0
b3JlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VXaW4uaCIKLSNpbmNsdWRlICJQbHVnaW5Q
YWNrYWdlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1
Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZv
Rm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKSAKK1BsdWdpbkluZm8qIFBsdWdpbkluZm9TdG9y
ZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQgaSkgCiB7IAotICAg
IFBsdWdpbkRhdGFiYXNlV2luICpkYiA9IFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVn
aW5zKCk7CisgICAgUGx1Z2luRGF0YWJhc2UgKmRiID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxl
ZFBsdWdpbnMoKTsKICAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87Ci0gICAg
UGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IGRiLT5wbHVnaW5zKClbaV07CisgICAgUGx1Z2lu
UGFja2FnZSogcGFja2FnZSA9IGRiLT5wbHVnaW5zKClbaV07CiAKICAgICBpbmZvLT5uYW1lID0g
cGFja2FnZS0+bmFtZSgpOwogICAgIGluZm8tPmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOwpA
QCAtNjMsMjcgKzYzLDI3IEBAIFBsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1
Z2kKICAgICByZXR1cm4gaW5mbzsKIH0KIAotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVn
aW5Db3VudCgpIGNvbnN0Cit1bnNpZ25lZCBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMo
KS0+cGx1Z2lucygpLnNpemUoKTsKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxl
ZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKIH0KIAogCi1TdHJpbmcgUGx1Z0luSW5mb1N0
b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK1N0cmlu
ZyBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQogewogICAgIC8vIEZJWE1FIDU2MjkxMzk6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBv
biBXaW5kb3dzLgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogICAgIAotYm9vbCBQbHVnSW5J
bmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlw
ZSkgCitib29sIFBsdWdpbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmIG1pbWVUeXBlKSAKIHsKLSAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VXaW46Omlu
c3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpOworICAgIHJl
dHVybiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0
ZXJlZChtaW1lVHlwZSk7CiB9CiAKIHZvaWQgcmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWRPcGVu
UGFnZXMpCiB7Ci0gICAgUGx1Z2luRGF0YWJhc2VXaW46Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVm
cmVzaCgpOworICAgIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2go
KTsKIAogICAgIGlmIChyZWxvYWRPcGVuUGFnZXMpIHsKICAgICAgICAgLy8gRklYTUU6IHJlbG9h
ZCBvcGVuIHBhZ2VzCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5oCShyZXZpc2lvbiAz
MDAwOSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9QbHVnSW5JbmZvU3RvcmUuaDozMDAwOSkKKysr
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdJbkluZm9T
dG9yZV9oCisjZGVmaW5lIFBsdWdJbkluZm9TdG9yZV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdHJ1Y3QgUGx1Z2luSW5mbzsKKworc3RydWN0IE1pbWVDbGFzc0luZm8geworICAgIFN0cmlu
ZyB0eXBlOworICAgIFN0cmluZyBkZXNjOworICAgIFN0cmluZyBzdWZmaXhlczsKKyAgICBQbHVn
aW5JbmZvKiBwbHVnaW47Cit9OworCitzdHJ1Y3QgUGx1Z2luSW5mbyB7CisgICAgU3RyaW5nIG5h
bWU7CisgICAgU3RyaW5nIGZpbGU7CisgICAgU3RyaW5nIGRlc2M7CisgICAgVmVjdG9yPE1pbWVD
bGFzc0luZm8qPiBtaW1lczsKK307CisKK2NsYXNzIFBsdWdJbkluZm9TdG9yZSB7CitwdWJsaWM6
CisgICAgUGx1Z2luSW5mbyAqY3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWdu
ZWQpOworICAgIHVuc2lnbmVkIHBsdWdpbkNvdW50KCkgY29uc3Q7CisgICAgc3RhdGljIFN0cmlu
ZyBwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgc3Rh
dGljIGJvb2wgc3VwcG9ydHNNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKK307CisK
K3ZvaWQgcmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWRPcGVuUGFnZXMpOworCit9CisKKyNlbmRp
ZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuaAkocmV2aXNpb24gMzAwMDkpCisrKyBX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDgg
KzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUGx1Z0luSW5mb1N0b3Jl
X2gKLSNkZWZpbmUgUGx1Z0luSW5mb1N0b3JlX2gKKyNpZm5kZWYgUGx1Z2luSW5mb1N0b3JlX2gK
KyNkZWZpbmUgUGx1Z2luSW5mb1N0b3JlX2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDcsNyArNDcsNyBAQCBzdHJ1Y3QgUGx1Z2lu
SW5mbyB7CiAgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiBtaW1lczsKIH07CiAKLWNsYXNzIFBs
dWdJbkluZm9TdG9yZSB7CitjbGFzcyBQbHVnaW5JbmZvU3RvcmUgewogcHVibGljOgogICAgIFBs
dWdpbkluZm8gKmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkKTsKICAg
ICB1bnNpZ25lZCBwbHVnaW5Db3VudCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblBhY2thZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2Fn
ZS5oCShyZXZpc2lvbiAzMDAwOSkJKGZyb20gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNr
YWdlV2luLmg6MzAwMDkpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1
Z2luUGFja2FnZVdpbl9ICisjZGVmaW5lIFBsdWdpblBhY2thZ2VXaW5fSAorCisjaW5jbHVkZSA8
d2luc29jazIuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJUaW1lci5oIgor
I2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIm5wZnVuY3Rpb25zLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOwor
CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZVdpbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBh
Y2thZ2VXaW4+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5QbHVnaW5QYWNrYWdlV2luKCk7Cisg
ICAgICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlV2luKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7CisgICAgICAgIAorICAgICAg
ICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgICAgICBTdHJpbmcg
ZGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CisgICAgICAgIFN0
cmluZyBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZU5hbWU7IH0KKyAgICAgICAgU3Ry
aW5nIHBhcmVudERpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RGlyZWN0b3J5OyB9
CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlv
bnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9uczsgfQorICAgICAgICBjb25z
dCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9taW1lVG9FeHRlbnNpb25zOyB9CisKKyAgICAgICAgdW5zaWduZWQgUGx1Z2luUGFja2FnZVdp
bjo6aGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5Q
YWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBiKTsKKworICAgICAgICBib29s
IGxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWRXaXRo
b3V0U2h1dGRvd24oKTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5j
cygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9CisKKyAgICAgICAgaW50IGNvbXBh
cmVGaWxlVmVyc2lvbih1bnNpZ25lZCBjb21wYXJlVmVyc2lvbk1TLCB1bnNpZ25lZCBjb21wYXJl
VmVyc2lvbkxTKSBjb25zdDsKKyAgICBwcml2YXRlOgorICAgICAgICBQbHVnaW5QYWNrYWdlV2lu
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7CisgICAg
ICAgIGJvb2wgZmV0Y2hJbmZvKCk7CisgICAgICAgIHZvaWQgc3RvcmVGaWxlVmVyc2lvbihMUFZP
SUQgdmVyc2lvbkluZm9EYXRhKTsKKyAgICAgICAgYm9vbCBpc1BsdWdpbkJsYWNrbGlzdGVkKCk7
CisKKyAgICAgICAgYm9vbCBtX2lzTG9hZGVkOworICAgICAgICBpbnQgbV9sb2FkQ291bnQ7CisK
KyAgICAgICAgRFdPUkQgbV9maWxlVmVyc2lvbk1TOworICAgICAgICBEV09SRCBtX2ZpbGVWZXJz
aW9uTFM7CisKKyAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247CisgICAgICAgIFN0cmluZyBt
X3BhdGg7CisgICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOworICAgICAgICBTdHJpbmcgbV9uYW1l
OworICAgICAgICBTdHJpbmcgbV9wYXJlbnREaXJlY3Rvcnk7CisKKyAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOworICAgICAgICBNSU1FVG9FeHRlbnNp
b25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKKworICAgICAgICBITU9EVUxFIG1fbW9kdWxlOwor
ICAgICAgICBGSUxFVElNRSBtX2xhc3RNb2RpZmllZDsKKworICAgICAgICBOUFBfU2h1dGRvd25Q
cm9jUHRyIG1fTlBQX1NodXRkb3duOworICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVu
Y3M7CisgICAgICAgIE5QTmV0c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKKworICAgICAgICB2
b2lkIGZyZWVMaWJyYXJ5U29vbigpOworICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5VGltZXJGaXJl
ZChUaW1lcjxQbHVnaW5QYWNrYWdlV2luPiopOworICAgICAgICBUaW1lcjxQbHVnaW5QYWNrYWdl
V2luPiBtX2ZyZWVMaWJyYXJ5VGltZXI7CisgICAgfTsKKworICAgIHN0cnVjdCBQbHVnaW5QYWNr
YWdlV2luSGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IGludCBrZXkp
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGtleSktPmhhc2go
KTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8UGx1Z2luUGFj
a2FnZVdpbj4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7IH0KKworICAgICAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBpbnQgYSwgY29uc3QgaW50IGIpIHsgcmV0dXJuIGVxdWFsKHJlaW50
ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGEpLCByZWludGVycHJldF9jYXN0PFBsdWdp
blBhY2thZ2VXaW4qPihiKSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVm
UHRyPFBsdWdpblBhY2thZ2VXaW4+JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4m
IGIpIHsgcmV0dXJuIFBsdWdpblBhY2thZ2VXaW46OmVxdWFsKCphLmdldCgpLCAqYi5nZXQoKSk7
IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSBmYWxzZTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKy8vIEZJWE1F
OiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gV1RGLCB3aGVyZSBpdCdzIGltcG9z
c2libGUgdG8gdXNlIGEgY3VzdG9tIEhhc2ggZnVuY3Rpb24gYnV0IHdpdGggZGVmYXVsdCB0cmFp
dHMuCisvLyBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZG8gdGhpcyB3aXRob3V0IGEgU3RvcmFn
ZVRyYWl0cyBzcGVjaWFsaXphdGlvbi4KK25hbWVzcGFjZSBXVEYgeworICAgIHRlbXBsYXRlPD4g
c3RydWN0IEhhc2hLZXlTdG9yYWdlVHJhaXRzPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VXaW5IYXNo
LCBIYXNoVHJhaXRzPFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPiA+ID4geworICAg
ICAgICB0eXBlZGVmIEludFR5cGVzPHNpemVvZihSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2Fn
ZVdpbj4pPjo6U2lnbmVkVHlwZSBJbnRUeXBlOworICAgICAgICB0eXBlZGVmIFdlYkNvcmU6OlBs
dWdpblBhY2thZ2VXaW5IYXNoIEhhc2g7CisgICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0czxJbnRU
eXBlPiBUcmFpdHM7CisgICAgfTsKK30KKworCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBh
Y2thZ2UuaAkocmV2aXNpb24gMzAwMDkpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2Fn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCi0jaWZuZGVmIFBsdWdpblBhY2thZ2VXaW5fSAotI2RlZmluZSBQbHVnaW5QYWNrYWdlV2lu
X0gKKyNpZm5kZWYgUGx1Z2luUGFja2FnZV9ICisjZGVmaW5lIFBsdWdpblBhY2thZ2VfSAogCiAj
aW5jbHVkZSA8d2luc29jazIuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC00MCwxMCArNDAs
MTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKIAotICAgIGNsYXNzIFBsdWdp
blBhY2thZ2VXaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlV2luPiB7CisgICAg
Y2xhc3MgUGx1Z2luUGFja2FnZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2U+IHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIH5QbHVnaW5QYWNrYWdlV2luKCk7Ci0gICAgICAgIHN0YXRp
YyBQbHVnaW5QYWNrYWdlV2luKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7CisgICAgICAgIH5QbHVnaW5QYWNrYWdlKCk7Cisg
ICAgICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7CiAgICAgICAgIAogICAgICAgICBT
dHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgICAgICBTdHJpbmcgZGVz
Y3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CkBAIC01Myw4ICs1Myw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25z
TWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0
aW9uczsgfQogICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CiAKLSAgICAgICAgdW5z
aWduZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlV2luJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlV2lu
JiBiKTsKKyAgICAgICAgdW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0OworICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVn
aW5QYWNrYWdlJiBiKTsKIAogICAgICAgICBib29sIGxvYWQoKTsKICAgICAgICAgdm9pZCB1bmxv
YWQoKTsKQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGlu
dCBjb21wYXJlRmlsZVZlcnNpb24odW5zaWduZWQgY29tcGFyZVZlcnNpb25NUywgdW5zaWduZWQg
Y29tcGFyZVZlcnNpb25MUykgY29uc3Q7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luUGFj
a2FnZVdpbihjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQp
OworICAgICAgICBQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJ
TUUmIGxhc3RNb2RpZmllZCk7CiAgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7CiAgICAgICAgIHZv
aWQgc3RvcmVGaWxlVmVyc2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKTsKICAgICAgICAgYm9v
bCBpc1BsdWdpbkJsYWNrbGlzdGVkKCk7CkBAIC05MiwxNiArOTIsMTYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBOUE5ldHNjYXBlRnVuY3MgbV9icm93c2VyRnVuY3M7CiAKICAgICAg
ICAgdm9pZCBmcmVlTGlicmFyeVNvb24oKTsKLSAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVy
RmlyZWQoVGltZXI8UGx1Z2luUGFja2FnZVdpbj4qKTsKLSAgICAgICAgVGltZXI8UGx1Z2luUGFj
a2FnZVdpbj4gbV9mcmVlTGlicmFyeVRpbWVyOworICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5VGlt
ZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdlPiopOworICAgICAgICBUaW1lcjxQbHVnaW5QYWNr
YWdlPiBtX2ZyZWVMaWJyYXJ5VGltZXI7CiAgICAgfTsKIAotICAgIHN0cnVjdCBQbHVnaW5QYWNr
YWdlV2luSGFzaCB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IGludCBrZXkp
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGtleSktPmhhc2go
KTsgfQotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8UGx1Z2luUGFj
a2FnZVdpbj4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7IH0KKyAgICBzdHJ1Y3QgUGx1Z2lu
UGFja2FnZUhhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBpbnQga2V5
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2UqPihrZXkpLT5oYXNoKCk7
IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2th
Z2U+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CiAKLSAgICAgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGludCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJl
dF9jYXN0PFBsdWdpblBhY2thZ2VXaW4qPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNr
YWdlV2luKj4oYikpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQ
bHVnaW5QYWNrYWdlV2luPiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+JiBiKSB7
IHJldHVybiBQbHVnaW5QYWNrYWdlV2luOjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1
cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYSksIHJlaW50ZXJwcmV0
X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGIpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdl
PiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZTo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsg
fQogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IGZhbHNlOwogICAgIH07CiAKQEAgLTExMCw5ICsxMTAsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIFdURiwgd2hl
cmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1c3RvbSBIYXNoIGZ1bmN0aW9uIGJ1dCB3aXRo
IGRlZmF1bHQgdHJhaXRzLgogLy8gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGRvIHRoaXMgd2l0
aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6YXRpb24uCiBuYW1lc3BhY2UgV1RGIHsKLSAg
ICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFnZVRyYWl0czxXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlV2luSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdp
bj4gPiA+IHsKLSAgICAgICAgdHlwZWRlZiBJbnRUeXBlczxzaXplb2YoUmVmUHRyPFdlYkNvcmU6
OlBsdWdpblBhY2thZ2VXaW4+KT46OlNpZ25lZFR5cGUgSW50VHlwZTsKLSAgICAgICAgdHlwZWRl
ZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luSGFzaCBIYXNoOworICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IEhhc2hLZXlTdG9yYWdlVHJhaXRzPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VIYXNoLCBIYXNo
VHJhaXRzPFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlPiA+ID4geworICAgICAgICB0eXBl
ZGVmIEludFR5cGVzPHNpemVvZihSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZT4pPjo6U2ln
bmVkVHlwZSBJbnRUeXBlOworICAgICAgICB0eXBlZGVmIFdlYkNvcmU6OlBsdWdpblBhY2thZ2VI
YXNoIEhhc2g7CiAgICAgICAgIHR5cGVkZWYgSGFzaFRyYWl0czxJbnRUeXBlPiBUcmFpdHM7CiAg
ICAgfTsKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkocmV2aXNpb24gMzAwMDkpCShmcm9tIFdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5oOjMwMDA5KQorKysgV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luVmlld1dpbl9ICisjZGVmaW5lIFBsdWdp
blZpZXdXaW5fSAorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+
CisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
IktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpblN0
cmVhbS5oIgorI2luY2x1ZGUgIlBsdWdpblF1aXJrU2V0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VS
ZXF1ZXN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNs
dWRlICJucGFwaS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEtKUyB7CisgICAgbmFtZXNw
YWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFuY2U7CisgICAgfQorfQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBGcmFtZTsKKyAg
ICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKKyAgICBjbGFzcyBLZXlib2FyZEV2ZW50OworICAg
IGNsYXNzIE1vdXNlRXZlbnQ7CisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VXaW47CisgICAgY2xhc3Mg
UGx1Z2luUmVxdWVzdFdpbjsKKyAgICBjbGFzcyBQbHVnaW5TdHJlYW07CisgICAgY2xhc3MgUmVz
b3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworCisgICAgZW51bSBQbHVn
aW5TdGF0dXMgeworICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLAorICAgICAg
ICBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNMb2Fk
ZWRTdWNjZXNzZnVsbHkKKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luVmlld1dpbiA6IHB1Ymxp
YyBXaWRnZXQsIHByaXZhdGUgUGx1Z2luU3RyZWFtQ2xpZW50IHsKKyAgICBmcmllbmQgc3RhdGlj
IExSRVNVTFQgQ0FMTEJBQ0sgUGx1Z2luVmlld1duZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBM
UEFSQU0pOworCisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5WaWV3V2luKEZyYW1lKiBwYXJl
bnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiwgRWxlbWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29s
IGxvYWRNYW51YWxseSk7CisgICAgICAgIHZpcnR1YWwgflBsdWdpblZpZXdXaW4oKTsKKworICAg
ICAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5n
ZXQoKTsgfQorICAgICAgICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNl
OyB9CisKKyAgICAgICAgdm9pZCBzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpOworICAg
ICAgICBzdGF0aWMgUGx1Z2luVmlld1dpbiogY3VycmVudFBsdWdpblZpZXcoKTsKKworICAgICAg
ICBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogYmluZGluZ0luc3RhbmNlKCk7CisKKyAgICAgICAg
UGx1Z2luU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisKKyAgICAg
ICAgLy8gTlBOIGZ1bmN0aW9ucworICAgICAgICBOUEVycm9yIGdldFVSTE5vdGlmeShjb25zdCBj
aGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAg
IE5QRXJyb3IgZ2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KTsKKyAg
ICAgICAgTlBFcnJvciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciog
dGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlLCB2b2lkKiBu
b3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29u
c3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxl
KTsKKyAgICAgICAgTlBFcnJvciBuZXdTdHJlYW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFy
KiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKTsKKyAgICAgICAgaW50MzIgd3JpdGUoTlBTdHJl
YW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpOworICAgICAgICBOUEVycm9yIGRl
c3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKKyAgICAgICAg
Y29uc3QgY2hhciogdXNlckFnZW50KCk7CisgICAgICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIq
IG1lc3NhZ2UpOworICAgICAgICBOUEVycm9yIGdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxl
LCB2b2lkKiB2YWx1ZSk7CisgICAgICAgIE5QRXJyb3Igc2V0VmFsdWUoTlBQVmFyaWFibGUgdmFy
aWFibGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChOUFJlY3Qq
KTsKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKTsKKyAgICAgICAgdm9p
ZCBmb3JjZVJlZHJhdygpOworICAgICAgICB2b2lkIHB1c2hQb3B1cHNFbmFibGVkU3RhdGUoYm9v
bCBzdGF0ZSk7CisgICAgICAgIHZvaWQgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7CisKKyAgICAg
ICAgYm9vbCBhcmVQb3B1cHNBbGxvd2VkKCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBkaXNjb25u
ZWN0U3RyZWFtKFBsdWdpblN0cmVhbSopOworICAgICAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExv
YWRpbmcoUGx1Z2luU3RyZWFtKiBzdHJlYW0pIHsgZGlzY29ubmVjdFN0cmVhbShzdHJlYW0pOyB9
CisKKyAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZW9t
ZXRyeUNoYW5nZWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGF0
dGFjaFRvV2luZG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hGcm9tV2luZG93KCk7
CisKKyAgICAgICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFS
QU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKKyAgICAgICAgV05EUFJPQyBwbHVnaW5XbmRQcm9j
KCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5XbmRQcm9jOyB9CisKKyAgICAgICAgLy8gVXNlZCBm
b3IgbWFudWFsIGxvYWRpbmcKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNo
YXIqLCBpbnQpOworICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAgdm9p
ZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKworICAgICAgICBzdGF0aWMgYm9vbCBp
c0NhbGxpbmdQbHVnaW4oKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc2V0UGFyYW1l
dGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtVmFsdWVzKTsKKyAgICAgICAgdm9pZCBpbml0KCk7CisgICAgICAgIGJvb2wgc3Rh
cnQoKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldEN1cnJl
bnRQbHVnaW5WaWV3KFBsdWdpblZpZXdXaW4qKTsKKyAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0
IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURh
dGEpOworICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lk
KiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKTsK
KyAgICAgICAgdm9pZCBzZXRDYWxsaW5nUGx1Z2luKGJvb2wpIGNvbnN0OworICAgICAgICBSZWZQ
dHI8UGx1Z2luUGFja2FnZVdpbj4gbV9wbHVnaW47CisgICAgICAgIEVsZW1lbnQqIG1fZWxlbWVu
dDsKKyAgICAgICAgRnJhbWUqIG1fcGFyZW50RnJhbWU7CisgICAgICAgIGJvb2wgbV9pc1N0YXJ0
ZWQ7CisgICAgICAgIEtVUkwgbV91cmw7CisgICAgICAgIEtVUkwgbV9iYXNlVVJMOworICAgICAg
ICBQbHVnaW5TdGF0dXMgbV9zdGF0dXM7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ludmFs
aWRSZWN0czsKKworICAgICAgICB2b2lkIHBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RXaW4q
KTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdFdpbiopOworICAg
ICAgICB2b2lkIHJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdXaW4+Kik7CisgICAg
ICAgIHZvaWQgaW52YWxpZGF0ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld1dpbj4qKTsKKyAg
ICAgICAgVGltZXI8UGx1Z2luVmlld1dpbj4gbV9yZXF1ZXN0VGltZXI7CisgICAgICAgIFRpbWVy
PFBsdWdpblZpZXdXaW4+IG1faW52YWxpZGF0ZVRpbWVyOworCisgICAgICAgIHZvaWQgcG9wUG9w
dXBzU3RhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdXaW4+Kik7CisgICAgICAgIFRpbWVy
PFBsdWdpblZpZXdXaW4+IG1fcG9wUG9wdXBzU3RhdGVUaW1lcjsKKworICAgICAgICBib29sIGRp
c3BhdGNoTlBFdmVudChOUEV2ZW50Jik7CisgICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhy
b3R0bGVyV2luPiBtX21lc3NhZ2VUaHJvdHRsZXI7CisKKyAgICAgICAgdm9pZCB1cGRhdGVXaW5k
b3coKSBjb25zdDsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSk7CisgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2
ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNl
RXZlbnQqKTsKKworICAgICAgICBpbnQgbV9tb2RlOworICAgICAgICBpbnQgbV9wYXJhbUNvdW50
OworICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOworICAgICAgICBjaGFyKiogbV9wYXJhbVZh
bHVlczsKKworICAgICAgICBDU3RyaW5nIG1fbWltZVR5cGU7CisgICAgICAgIENTdHJpbmcgbV91
c2VyQWdlbnQ7CisgICAgICAgIAorICAgICAgICBOUFAgbV9pbnN0YW5jZTsKKyAgICAgICAgTlBQ
X3QgbV9pbnN0YW5jZVN0cnVjdDsKKyAgICAgICAgTlBXaW5kb3cgbV9ucFdpbmRvdzsKKworICAg
ICAgICBWZWN0b3I8Ym9vbCwgND4gbV9wb3B1cFN0YXRlU3RhY2s7CisKKyAgICAgICAgSGFzaFNl
dDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IG1fc3RyZWFtczsKKyAgICAgICAgVmVjdG9yPFBsdWdp
blJlcXVlc3RXaW4qPiBtX3JlcXVlc3RzOworCisgICAgICAgIFBsdWdpblF1aXJrU2V0IG1fcXVp
cmtzOworICAgICAgICBib29sIG1faXNXaW5kb3dlZDsKKyAgICAgICAgYm9vbCBtX2lzVHJhbnNw
YXJlbnQ7CisgICAgICAgIGJvb2wgbV9pc1Zpc2libGU7CisgICAgICAgIGJvb2wgbV9hdHRhY2hl
ZFRvV2luZG93OworICAgICAgICBib29sIG1faGF2ZUluaXRpYWxpemVkOworCisgICAgICAgIFdO
RFBST0MgbV9wbHVnaW5XbmRQcm9jOworICAgICAgICBIV05EIG1fd2luZG93OyAvLyBmb3Igd2lu
ZG93ZWQgcGx1Zy1pbnMKKyAgICAgICAgbXV0YWJsZSBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRo
ZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVnLWluCisgICAgICAgIG11dGFi
bGUgSW50UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3aW5kb3cgcmVjdC4KKworICAgICAgICB1
bnNpZ25lZCBtX2xhc3RNZXNzYWdlOworICAgICAgICBib29sIG1faXNDYWxsaW5nUGx1Z2luV25k
UHJvYzsKKworICAgICAgICBib29sIG1fbG9hZE1hbnVhbGx5OworICAgICAgICBSZWZQdHI8UGx1
Z2luU3RyZWFtPiBtX21hbnVhbFN0cmVhbTsKKworICAgICAgICBzdGF0aWMgUGx1Z2luVmlld1dp
biogc19jdXJyZW50UGx1Z2luVmlldzsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkocmV2aXNpb24gMzAwMDkpCisrKyBX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw4
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFBsdWdpblZpZXdXaW5fSAotI2Rl
ZmluZSBQbHVnaW5WaWV3V2luX0gKKyNpZm5kZWYgUGx1Z2luVmlld19ICisjZGVmaW5lIFBsdWdp
blZpZXdfSAogCiAjaW5jbHVkZSA8d2luc29jazIuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBA
IC02MCw4ICs2MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBNb3VzZUV2ZW50
OwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjsK
LSAgICBjbGFzcyBQbHVnaW5QYWNrYWdlV2luOwotICAgIGNsYXNzIFBsdWdpblJlcXVlc3RXaW47
CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKKyAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0OwogICAg
IGNsYXNzIFBsdWdpblN0cmVhbTsKICAgICBjbGFzcyBSZXNvdXJjZUVycm9yOwogICAgIGNsYXNz
IFJlc291cmNlUmVzcG9uc2U7CkBAIC03MiwxOCArNzIsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkKICAgICB9OwogCi0gICAg
Y2xhc3MgUGx1Z2luVmlld1dpbiA6IHB1YmxpYyBXaWRnZXQsIHByaXZhdGUgUGx1Z2luU3RyZWFt
Q2xpZW50IHsKKyAgICBjbGFzcyBQbHVnaW5WaWV3IDogcHVibGljIFdpZGdldCwgcHJpdmF0ZSBQ
bHVnaW5TdHJlYW1DbGllbnQgewogICAgIGZyaWVuZCBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBQ
bHVnaW5WaWV3V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiAKICAgICBwdWJs
aWM6Ci0gICAgICAgIFBsdWdpblZpZXdXaW4oRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRT
aXplJiwgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKLSAg
ICAgICAgdmlydHVhbCB+UGx1Z2luVmlld1dpbigpOworICAgICAgICBQbHVnaW5WaWV3KEZyYW1l
KiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2thZ2UqIHBsdWdpbiwgRWxl
bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBi
b29sIGxvYWRNYW51YWxseSk7CisgICAgICAgIHZpcnR1YWwgflBsdWdpblZpZXcoKTsKIAotICAg
ICAgICBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5n
ZXQoKTsgfQorICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBt
X3BsdWdpbi5nZXQoKTsgfQogICAgICAgICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBt
X2luc3RhbmNlOyB9CiAKICAgICAgICAgdm9pZCBzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVj
dCYpOwotICAgICAgICBzdGF0aWMgUGx1Z2luVmlld1dpbiogY3VycmVudFBsdWdpblZpZXcoKTsK
KyAgICAgICAgc3RhdGljIFBsdWdpblZpZXcqIGN1cnJlbnRQbHVnaW5WaWV3KCk7CiAKICAgICAg
ICAgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGJpbmRpbmdJbnN0YW5jZSgpOwogCkBAIC0xNDIs
MTEgKzE0MiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgaW5pdCgpOwog
ICAgICAgICBib29sIHN0YXJ0KCk7CiAgICAgICAgIHZvaWQgc3RvcCgpOwotICAgICAgICBzdGF0
aWMgdm9pZCBzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3V2luKik7CisgICAgICAgIHN0
YXRpYyB2b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqKTsKICAgICAgICAgTlBF
cnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24s
IHZvaWQqIG5vdGlmeURhdGEpOwogICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
Ym9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wg
YWxsb3dIZWFkZXJzKTsKICAgICAgICAgdm9pZCBzZXRDYWxsaW5nUGx1Z2luKGJvb2wpIGNvbnN0
OwotICAgICAgICBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4gbV9wbHVnaW47CisgICAgICAgIFJl
ZlB0cjxQbHVnaW5QYWNrYWdlPiBtX3BsdWdpbjsKICAgICAgICAgRWxlbWVudCogbV9lbGVtZW50
OwogICAgICAgICBGcmFtZSogbV9wYXJlbnRGcmFtZTsKICAgICAgICAgYm9vbCBtX2lzU3RhcnRl
ZDsKQEAgLTE1NSwxNSArMTU1LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGx1
Z2luU3RhdHVzIG1fc3RhdHVzOwogICAgICAgICBWZWN0b3I8SW50UmVjdD4gbV9pbnZhbGlkUmVj
dHM7CiAKLSAgICAgICAgdm9pZCBwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0V2luKik7Ci0g
ICAgICAgIHZvaWQgc2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVlc3RXaW4qKTsKLSAgICAgICAg
dm9pZCByZXF1ZXN0VGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3V2luPiopOwotICAgICAgICB2
b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdXaW4+Kik7Ci0gICAgICAg
IFRpbWVyPFBsdWdpblZpZXdXaW4+IG1fcmVxdWVzdFRpbWVyOwotICAgICAgICBUaW1lcjxQbHVn
aW5WaWV3V2luPiBtX2ludmFsaWRhdGVUaW1lcjsKKyAgICAgICAgdm9pZCBwZXJmb3JtUmVxdWVz
dChQbHVnaW5SZXF1ZXN0Kik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJl
cXVlc3QqKTsKKyAgICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3
PiopOworICAgICAgICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXc+
Kik7CisgICAgICAgIFRpbWVyPFBsdWdpblZpZXc+IG1fcmVxdWVzdFRpbWVyOworICAgICAgICBU
aW1lcjxQbHVnaW5WaWV3PiBtX2ludmFsaWRhdGVUaW1lcjsKIAotICAgICAgICB2b2lkIHBvcFBv
cHVwc1N0YXRlVGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3V2luPiopOwotICAgICAgICBUaW1l
cjxQbHVnaW5WaWV3V2luPiBtX3BvcFBvcHVwc1N0YXRlVGltZXI7CisgICAgICAgIHZvaWQgcG9w
UG9wdXBzU3RhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXc+Kik7CisgICAgICAgIFRpbWVy
PFBsdWdpblZpZXc+IG1fcG9wUG9wdXBzU3RhdGVUaW1lcjsKIAogICAgICAgICBib29sIGRpc3Bh
dGNoTlBFdmVudChOUEV2ZW50Jik7CiAgICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luPiBtX21lc3NhZ2VUaHJvdHRsZXI7CkBAIC0xOTAsNyArMTkwLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBWZWN0b3I8Ym9vbCwgND4gbV9wb3B1cFN0YXRlU3RhY2s7CiAK
ICAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IG1fc3RyZWFtczsKLSAgICAg
ICAgVmVjdG9yPFBsdWdpblJlcXVlc3RXaW4qPiBtX3JlcXVlc3RzOworICAgICAgICBWZWN0b3I8
UGx1Z2luUmVxdWVzdCo+IG1fcmVxdWVzdHM7CiAKICAgICAgICAgUGx1Z2luUXVpcmtTZXQgbV9x
dWlya3M7CiAgICAgICAgIGJvb2wgbV9pc1dpbmRvd2VkOwpAQCAtMjEwLDcgKzIxMCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsKICAgICAgICAg
UmVmUHRyPFBsdWdpblN0cmVhbT4gbV9tYW51YWxTdHJlYW07CiAKLSAgICAgICAgc3RhdGljIFBs
dWdpblZpZXdXaW4qIHNfY3VycmVudFBsdWdpblZpZXc7CisgICAgICAgIHN0YXRpYyBQbHVnaW5W
aWV3KiBzX2N1cnJlbnRQbHVnaW5WaWV3OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL25wYXBpLmNwcAkocmV2aXNpb24gMzAwMDkpCShmcm9tIFdlYkNvcmUvcGx1Z2lu
cy93aW4vbnBhcGkuY3BwOjMwMDA5KQorKysgV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVn
aW5WaWV3V2luLmgiCisjaW5jbHVkZSAibnBhcGkuaCIgLy8gI2luY2x1ZGVzIDx3aW5kb3dzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBUaGUgcGx1Z2luIHZpZXcgaXMgYWx3
YXlzIHRoZSBuZGF0YSBvZiB0aGUgaW5zdGFuY2UsLiBTb21ldGltZXMsIHBsdWctaW5zIHdpbGwg
Y2FsbCBhbiBpbnN0YW5jZS1zcGVjaWZpYyBmdW5jdGlvbgorLy8gd2l0aCBhIE5VTEwgaW5zdGFu
Y2UuIFRvIHdvcmthcm91bmQgdGhpcywgY2FsbCB0aGUgbGFzdCBwbHVnLWluIHZpZXcgdGhhdCBt
YWRlIGEgY2FsbCB0byBhIHBsdWctaW4uCisvLyBDdXJyZW50bHksIHRoZSBjdXJyZW50IHBsdWct
aW4gdmlldyBpcyBvbmx5IHNldCBiZWZvcmUgTlBQX05ldyBpbiBQbHVnaW5WaWV3V2luOjpzdGFy
dC4KKy8vIFRoaXMgc3BlY2lmaWNhbGx5IHdvcmtzIGFyb3VuZCBGbGFzaCBhbmQgU2hvY2t3YXZl
LiBXaGVuIHdlIGNhbGwgTlBQX05ldywgdGhleSBjYWxsIE5QTl9Vc2VyYWdlbnQgd2l0aCBhIE5V
TEwgaW5zdGFuY2UuCitzdGF0aWMgUGx1Z2luVmlld1dpbiogcGx1Z2luVmlld0Zvckluc3RhbmNl
KE5QUCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UtPm5kYXRhKQor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld1dpbio+KGluc3RhbmNlLT5uZGF0
YSk7CisgICAgcmV0dXJuIFBsdWdpblZpZXdXaW46OmN1cnJlbnRQbHVnaW5WaWV3KCk7Cit9CisK
K3ZvaWQqIE5QTl9NZW1BbGxvYyh1aW50MzIgc2l6ZSkKK3sKKyAgICByZXR1cm4gbWFsbG9jKHNp
emUpOworfQorCit2b2lkIE5QTl9NZW1GcmVlKHZvaWQqIHB0cikKK3sKKyAgICBmcmVlKHB0cik7
Cit9CisKK3VpbnQzMiBOUE5fTWVtRmx1c2godWludDMyIHNpemUpCit7CisgICAgLy8gRG8gbm90
aGluZworICAgIHJldHVybiAwOworfQorCit2b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCBy
ZWxvYWRQYWdlcykKK3sKKyAgICByZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdlcyk7Cit9CisKK05Q
RXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdlKiByYW5n
ZUxpc3QpCit7CisgICAgcmV0dXJuIE5QRVJSX1NUUkVBTV9OT1RfU0VFS0FCTEU7Cit9CisKK05Q
RXJyb3IgTlBOX0dldFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29u
c3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkxOb3RpZnkodXJsLCB0YXJnZXQsIG5vdGlm
eURhdGEpOworfQorCitOUEVycm9yIE5QTl9HZXRVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvcklu
c3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMKHVybCwgdGFyZ2V0KTsKK30KKworTlBFcnJvciBOUE5f
UG9zdFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciog
dGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBu
b3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5wb3N0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSk7
Cit9CisKK05QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wg
ZmlsZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9z
dFVSTCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUpOworfQorCitOUEVycm9yIE5QTl9OZXdT
dHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwg
TlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSktPm5ld1N0cmVhbSh0eXBlLCB0YXJnZXQsIHN0cmVhbSk7Cit9CisKK2ludDMyIE5Q
Tl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCog
YnVmZmVyKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT53
cml0ZShzdHJlYW0sIGxlbiwgYnVmZmVyKTsKK30KKworTlBFcnJvciBOUE5fRGVzdHJveVN0cmVh
bShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKK3sKKyAg
ICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0cmVhbShz
dHJlYW0sIHJlYXNvbik7Cit9CisKK2NvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQIGluc3Rh
bmNlKQoreworICAgIFBsdWdpblZpZXdXaW4qIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpOworCisgICAgIC8vIEZJWE1FOiBTb21lIHBsdWctaW5zIGNhbGwgTlBOX1VzZXJB
Z2VudCB3aXRoIGEgbnVsbCBpbnN0YW5jZSBpbiB0aGVpciBOUF9pbml0aWFsaXplIGZ1bmN0aW9u
IQorICAgICAvLyBXZSdkIG5lZWQgYSB3YXkgdG8gZ2V0IGEgdXNlciBhZ2VudCB3aXRob3V0IGhh
dmluZyBhIGZyYW1lIGFyb3VuZC4KKyAgICAgaWYgKCF2aWV3KQorICAgICAgICAgcmV0dXJuIDA7
CisgCisgICAgcmV0dXJuIHZpZXctPnVzZXJBZ2VudCgpOworfQorCit2b2lkIE5QTl9TdGF0dXMo
TlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIHBsdWdpblZpZXdGb3JJ
bnN0YW5jZShpbnN0YW5jZSktPnN0YXR1cyhtZXNzYWdlKTsKK30KKwordm9pZCBOUE5fSW52YWxp
ZGF0ZVJlY3QoTlBQIGluc3RhbmNlLCBOUFJlY3QqIGludmFsaWRSZWN0KQoreworICAgIHBsdWdp
blZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFsaWRhdGVSZWN0KGludmFsaWRSZWN0KTsK
K30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlZ2lvbihOUFAgaW5zdGFuY2UsIE5QUmVnaW9uIGlu
dmFsaWRSZWdpb24pCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+aW52
YWxpZGF0ZVJlZ2lvbihpbnZhbGlkUmVnaW9uKTsKK30KKwordm9pZCBOUE5fRm9yY2VSZWRyYXco
TlBQIGluc3RhbmNlKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmZv
cmNlUmVkcmF3KCk7Cit9CisKK05QRXJyb3IgTlBOX0dldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBO
VmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3
Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQorCitO
UEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkKiB2YWx1ZSkKK3sKKyAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5zZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQorCit2b2lkKiBOUE5fR2V0SmF2YUVudigp
Cit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCogTlBOX0dl
dEphdmFQZWVyKE5QUCBpbnN0YW5jZSkKK3sKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVy
biAwOworfQorCit2b2lkCitOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2Us
IE5QQm9vbCBlbmFibGVkKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PnB1c2hQb3B1cHNFbmFibGVkU3RhdGUoZW5hYmxlZCk7Cit9CisKK3ZvaWQKK05QTl9Qb3BQb3B1
cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5j
ZShpbnN0YW5jZSktPnBvcFBvcHVwc0VuYWJsZWRTdGF0ZSgpOworfQpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL25wYXBpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3Bw
CShyZXZpc2lvbiAzMDAwOSkKKysrIFdlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDIxICsyNSwyMSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNs
dWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3V2luLmgiCisjaW5j
bHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1
ZGUgIm5wYXBpLmgiIC8vICNpbmNsdWRlcyA8d2luZG93cy5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAogLy8gVGhlIHBsdWdpbiB2aWV3IGlzIGFsd2F5cyB0aGUgbmRhdGEgb2YgdGhl
IGluc3RhbmNlLC4gU29tZXRpbWVzLCBwbHVnLWlucyB3aWxsIGNhbGwgYW4gaW5zdGFuY2Utc3Bl
Y2lmaWMgZnVuY3Rpb24KIC8vIHdpdGggYSBOVUxMIGluc3RhbmNlLiBUbyB3b3JrYXJvdW5kIHRo
aXMsIGNhbGwgdGhlIGxhc3QgcGx1Zy1pbiB2aWV3IHRoYXQgbWFkZSBhIGNhbGwgdG8gYSBwbHVn
LWluLgotLy8gQ3VycmVudGx5LCB0aGUgY3VycmVudCBwbHVnLWluIHZpZXcgaXMgb25seSBzZXQg
YmVmb3JlIE5QUF9OZXcgaW4gUGx1Z2luVmlld1dpbjo6c3RhcnQuCisvLyBDdXJyZW50bHksIHRo
ZSBjdXJyZW50IHBsdWctaW4gdmlldyBpcyBvbmx5IHNldCBiZWZvcmUgTlBQX05ldyBpbiBQbHVn
aW5WaWV3OjpzdGFydC4KIC8vIFRoaXMgc3BlY2lmaWNhbGx5IHdvcmtzIGFyb3VuZCBGbGFzaCBh
bmQgU2hvY2t3YXZlLiBXaGVuIHdlIGNhbGwgTlBQX05ldywgdGhleSBjYWxsIE5QTl9Vc2VyYWdl
bnQgd2l0aCBhIE5VTEwgaW5zdGFuY2UuCi1zdGF0aWMgUGx1Z2luVmlld1dpbiogcGx1Z2luVmll
d0Zvckluc3RhbmNlKE5QUCBpbnN0YW5jZSkKK3N0YXRpYyBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3
Rm9ySW5zdGFuY2UoTlBQIGluc3RhbmNlKQogewogICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5j
ZS0+bmRhdGEpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3V2luKj4oaW5z
dGFuY2UtPm5kYXRhKTsKLSAgICByZXR1cm4gUGx1Z2luVmlld1dpbjo6Y3VycmVudFBsdWdpblZp
ZXcoKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+
bmRhdGEpOworICAgIHJldHVybiBQbHVnaW5WaWV3OjpjdXJyZW50UGx1Z2luVmlldygpOwogfQog
CiB2b2lkKiBOUE5fTWVtQWxsb2ModWludDMyIHNpemUpCkBAIC0xMDUsNyArMTA1LDcgQEAgTlBF
cnJvciBOUE5fRGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIAogCiBjb25zdCBjaGFyKiBOUE5f
VXNlckFnZW50KE5QUCBpbnN0YW5jZSkKIHsKLSAgICBQbHVnaW5WaWV3V2luKiB2aWV3ID0gcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKIAogICAgICAvLyBGSVhNRTogU29tZSBwbHVn
LWlucyBjYWxsIE5QTl9Vc2VyQWdlbnQgd2l0aCBhIG51bGwgaW5zdGFuY2UgaW4gdGhlaXIgTlBf
aW5pdGlhbGl6ZSBmdW5jdGlvbiEKICAgICAgLy8gV2UnZCBuZWVkIGEgd2F5IHRvIGdldCBhIHVz
ZXIgYWdlbnQgd2l0aG91dCBoYXZpbmcgYSBmcmFtZSBhcm91bmQuCkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvd2luL1BsdWdJbkluZm9TdG9yZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnSW5JbmZvU3RvcmVXaW4uY3BwCShyZXZpc2lvbiAzMDAwOSkKKysrIFdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z0luSW5mb1N0b3JlV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZVdpbi5o
IgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5B
dEluZGV4KHVuc2lnbmVkIGkpIAoteyAKLSAgICBQbHVnaW5EYXRhYmFzZVdpbiAqZGIgPSBQbHVn
aW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpOwotICAgIFBsdWdpbkluZm8qIGluZm8g
PSBuZXcgUGx1Z2luSW5mbzsKLSAgICBQbHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gZGItPnBs
dWdpbnMoKVtpXTsKLQotICAgIGluZm8tPm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7Ci0gICAgaW5m
by0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7Ci0gICAgaW5mby0+ZGVzYyA9IHBhY2thZ2Ut
PmRlc2NyaXB0aW9uKCk7Ci0KLSAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVU
b0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOwotICAgIE1JTUVU
b0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25z
LmVuZCgpOwotICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOwotICAgICAgICBpbmZv
LT5taW1lcy5hcHBlbmQobWltZSk7Ci0gICAgICAgIAotICAgICAgICBtaW1lLT50eXBlID0gaXQt
PmZpcnN0OwotICAgICAgICBtaW1lLT5kZXNjID0gaXQtPnNlY29uZDsKLSAgICAgICAgbWltZS0+
cGx1Z2luID0gaW5mbzsKLQotICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcGFj
a2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLT50eXBlKTsKLSAgICAgICAgCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICAgICAgICBpZiAoaSA+IDApCi0gICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0g
IiwiOwotCi0gICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSBleHRlbnNpb25zW2ldOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZm87Ci19Ci0KLXVuc2lnbmVkIFBsdWdJbklu
Zm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiBQbHVnaW5EYXRhYmFz
ZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCkuc2l6ZSgpOwotfQotCi0KLVN0cmlu
ZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQotewotICAgIC8vIEZJWE1FIDU2MjkxMzk6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBv
biBXaW5kb3dzLgotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotICAgIAotYm9vbCBQbHVnSW5J
bmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlw
ZSkgCi17Ci0gICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlV2luOjppbnN0YWxsZWRQbHVnaW5zKCkt
PmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKTsKLX0KLQotdm9pZCByZWZyZXNoUGx1Z2lu
cyhib29sIHJlbG9hZE9wZW5QYWdlcykKLXsKLSAgICBQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFs
bGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7Ci0KLSAgICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiByZWxvYWQgb3BlbiBwYWdlcwotICAgIH0KLX0KLQotfQpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAJKHJldmlzaW9uIDMwMDA5
KQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDM2ICsyNCwzNiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJQbHVnaW5EYXRhYmFzZVdpbi5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgi
CiAKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlV2luLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlld1dp
bi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8c2hs
d2FwaS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBsdWdpbkRhdGFiYXNlV2luKiBQbHVn
aW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpCitQbHVnaW5EYXRhYmFzZSogUGx1Z2lu
RGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKQogewotICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFz
ZVdpbiogcGx1Z2lucyA9IDA7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBwbHVnaW5zID0g
MDsKICAgICAKICAgICBpZiAoIXBsdWdpbnMpIHsKLSAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVn
aW5EYXRhYmFzZVdpbjsKLSAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0
YWJhc2VXaW46OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKKyAgICAgICAgcGx1Z2lucyA9IG5ldyBQ
bHVnaW5EYXRhYmFzZTsKKyAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0
YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKICAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgp
OwogICAgIH0KIAogICAgIHJldHVybiBwbHVnaW5zOwogfQogCi12b2lkIFBsdWdpbkRhdGFiYXNl
V2luOjphZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQordm9pZCBQbHVnaW5E
YXRhYmFzZTo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBt
X3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsKICAgICByZWZyZXNoKCk7CiB9CiAKLWJvb2wgUGx1
Z2luRGF0YWJhc2VXaW46OnJlZnJlc2goKQorYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCgp
CiB7ICAgCiAgICAgUGx1Z2luU2V0IG5ld1BsdWdpbnM7CiAKQEAgLTEwOCw5ICsxMDgsOSBAQCBi
b29sIFBsdWdpbkRhdGFiYXNlV2luOjpyZWZyZXNoKCkKICAgICByZXR1cm4gcGx1Z2luU2V0Q2hh
bmdlZDsKIH0KIAotVmVjdG9yPFBsdWdpblBhY2thZ2VXaW4qPiBQbHVnaW5EYXRhYmFzZVdpbjo6
cGx1Z2lucygpIGNvbnN0CitWZWN0b3I8UGx1Z2luUGFja2FnZSo+IFBsdWdpbkRhdGFiYXNlOjpw
bHVnaW5zKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8UGx1Z2luUGFja2FnZVdpbio+IHJlc3VsdDsK
KyAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IHJlc3VsdDsKIAogICAgIFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwogICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCkBA
IC0xNTAsNyArMTUwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVnaXN0
cgogICAgICAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZv
U3RhbmRhcmQsICZhdHRyaWJ1dGVzKSA9PSAwKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgUGx1Z2luUGFja2FnZVdpbiogcGFja2FnZSA9IFBsdWdpblBhY2thZ2VXaW46OmNyZWF0
ZVBhY2thZ2UoU3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEp
LCBhdHRyaWJ1dGVzLmZ0TGFzdFdyaXRlVGltZSk7CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBh
Y2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKFN0cmluZyhwYXRoU3RyLCBwYXRo
U3RyU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSwgYXR0cmlidXRlcy5mdExhc3RXcml0ZVRpbWUp
OwogCiAgICAgICAgIGlmIChwYWNrYWdlKQogICAgICAgICAgICAgcGx1Z2lucy5hZGQocGFja2Fn
ZSk7CkBAIC0xNTksNyArMTU5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFBsdWdpbnNGcm9t
UmVnaXN0cgogICAgIFJlZ0Nsb3NlS2V5KGtleSk7CiB9CiAKLVBsdWdpblNldCBQbHVnaW5EYXRh
YmFzZVdpbjo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdAorUGx1Z2luU2V0IFBsdWdpbkRhdGFi
YXNlOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCiAgICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1
ZUZpbGVuYW1lczsKQEAgLTE2OCw4ICsxNjgsOCBAQCBQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VX
aW46OmdldFBsdWdpbnNJCiAgICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7
CiAgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7CiAKLSAgICBQbHVnaW5QYWNrYWdl
V2luKiBvbGRXTVBQbHVnaW4gPSAwOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIG5ld1dNUFBsdWdp
biA9IDA7CisgICAgUGx1Z2luUGFja2FnZSogb2xkV01QUGx1Z2luID0gMDsKKyAgICBQbHVnaW5Q
YWNrYWdlKiBuZXdXTVBQbHVnaW4gPSAwOwogCiAgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7CiAgICAgZm9yIChWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewpAQCAtMTkzLDcgKzE5Myw3IEBAIFBsdWdpblNldCBQbHVnaW5EYXRhYmFzZVdpbjo6
Z2V0UGx1Z2luc0kKICAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0
aCkuc2Vjb25kKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAg
ICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlV2luOjpj
cmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1lKTsKKyAg
ICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpj
cmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1lKTsKIAog
ICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKICAgICAgICAgICAgICAgICBwbHVnaW5z
LmFkZChwbHVnaW5QYWNrYWdlKTsKQEAgLTQxOSw3ICs0MTksNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgYWRkTWFjcm9tZWRpYVBsdWdpblBhCiAgICAgcGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJl
Y3RvcnlTdHIpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZVdpbjo6ZGVmYXVs
dFBsdWdpblBhdGhzKCkKK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1
Z2luUGF0aHMoKQogewogICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwogICAgIFN0cmluZyBvdXJQ
YXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKQEAgLTQzNSw3ICs0MzUsNyBAQCBWZWN0b3I8U3Ry
aW5nPiBQbHVnaW5EYXRhYmFzZVdpbjo6ZGVmYXVsCiAgICAgcmV0dXJuIHBhdGhzOwogfQogCi1i
b29sIFBsdWdpbkRhdGFiYXNlV2luOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQorYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTQ0NSwxNCArNDQ1LDE0IEBAIGJvb2wgUGx1Z2luRGF0YWJh
c2VXaW46OmlzTUlNRVR5cGVSZWdpc3QKICAgICByZXR1cm4gKHJlZnJlc2goKSAmJiBtX3JlZ2lz
dGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKTsKIH0KIAotUGx1Z2luUGFja2FnZVdp
biogUGx1Z2luRGF0YWJhc2VXaW46OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwog
ICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKLSAgICBQbHVnaW5QYWNr
YWdlV2luKiBwbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IDA7CiAgICAg
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CiAKICAgICBm
b3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CkBAIC00NjcsNyArNDY3LDcgQEAgUGx1Z2luUGFja2FnZVdpbiogUGx1
Z2luRGF0YWJhc2VXaW46OnBsdQogICAgIHJldHVybiBwbHVnaW47CiB9CiAKLVN0cmluZyBQbHVn
aW5EYXRhYmFzZVdpbjo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNp
b24pIGNvbnN0CitTdHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdAogewogICAgIGlmIChleHRlbnNpb24uaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC00NzUsNyArNDc1LDcgQEAgU3RyaW5n
IFBsdWdpbkRhdGFiYXNlV2luOjpNSU1FVHlwZUZvckV4dAogICAgIFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwogICAgIFN0cmluZyBvdXJQYXRoID0gc2Fm
YXJpUGx1Z2luc1BhdGgoKTsKICAgICBTdHJpbmcgbWltZVR5cGU7Ci0gICAgUGx1Z2luUGFja2Fn
ZVdpbiogcGx1Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAwOwogCiAgICAg
Zm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CkBAIC00OTcs
OSArNDk3LDkgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlV2luOjpNSU1FVHlwZUZvckV4dAogICAg
IHJldHVybiBtaW1lVHlwZTsKIH0KIAotUGx1Z2luUGFja2FnZVdpbiogUGx1Z2luRGF0YWJhc2VX
aW46OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBlKQorUGx1Z2lu
UGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJp
bmcmIG1pbWVUeXBlKQogeyAgIAotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IHBsdWdp
bkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBwbHVn
aW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CiAgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLnN0cmlu
ZygpOwogICAgIAogICAgIGlmICghcGx1Z2luKSB7CkBAIC01MjEsMTIgKzUyMSwxMiBAQCBQbHVn
aW5QYWNrYWdlV2luKiBQbHVnaW5EYXRhYmFzZVdpbjo6ZmluCiAgICAgcmV0dXJuIHBsdWdpbjsK
IH0KIAotUGx1Z2luVmlld1dpbiogUGx1Z2luRGF0YWJhc2VXaW46OmNyZWF0ZVBsdWdpblZpZXco
RnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wgbG9hZE1hbnVhbGx5KQorUGx1Z2luVmlldyogUGx1Z2luRGF0YWJhc2U6OmNyZWF0ZVBsdWdp
blZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogewogICAgIC8vIGlmIHdlIGZhaWwgdG8gZmluZCBhIHBs
dWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZpbmRQbHVnaW4gd2lsbCBzZWFyY2ggZm9yCiAgICAg
Ly8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGFuZCB1cGRhdGUgdGhlIE1JTUUgdHlw
ZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5nCiAgICAgU3RyaW5nIG1pbWVUeXBlQ29weSA9IG1p
bWVUeXBlOwotICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBt
aW1lVHlwZUNvcHkpOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJs
LCBtaW1lVHlwZUNvcHkpOwogICAgIAogICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSBy
ZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCiAgICAgaWYgKCFwbHVn
aW4gJiYgcmVmcmVzaCgpKSB7CkBAIC01MzQsNyArNTM0LDcgQEAgUGx1Z2luVmlld1dpbiogUGx1
Z2luRGF0YWJhc2VXaW46OmNyZWF0ZQogICAgICAgICBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwg
bWltZVR5cGVDb3B5KTsKICAgICB9CiAgICAgICAgIAotICAgIHJldHVybiBuZXcgUGx1Z2luVmll
d1dpbihwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMs
IHBhcmFtVmFsdWVzLCBtaW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSk7CisgICAgcmV0dXJuIG5l
dyBQbHVnaW5WaWV3KHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVsZW1lbnQsIHVybCwgcGFy
YW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9hZE1hbnVhbGx5KTsKIH0KIAog
fQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uaAkocmV2aXNpb24g
MzAwMDkpCisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBsdWdp
bkRhdGFiYXNlV2luX0gKLSNkZWZpbmUgUGx1Z2luRGF0YWJhc2VXaW5fSAotCi0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KLSNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VXaW4uaCIKLSNpbmNsdWRlICJT
dHJpbmdIYXNoLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBFbGVtZW50Owot
ICAgIGNsYXNzIEZyYW1lOwotICAgIGNsYXNzIEludFNpemU7Ci0gICAgY2xhc3MgS1VSTDsKLSAg
ICBjbGFzcyBQbHVnaW5QYWNrYWdlV2luOwotICAgIGNsYXNzIFBsdWdpblZpZXdXaW47Ci0KLSAg
ICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2VXaW4+LCBQbHVnaW5QYWNrYWdl
V2luSGFzaD4gUGx1Z2luU2V0OwotICAKLSAgICBjbGFzcyBQbHVnaW5EYXRhYmFzZVdpbiB7Ci0g
ICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VXaW4qIGluc3RhbGxlZFBs
dWdpbnMoKTsKLSAgICAgICAgUGx1Z2luVmlld1dpbiogY3JlYXRlUGx1Z2luVmlldyhGcmFtZSog
cGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVh
bGx5KTsKLQotICAgICAgICBib29sIHJlZnJlc2goKTsKLSAgICAgICAgVmVjdG9yPFBsdWdpblBh
Y2thZ2VXaW4qPiBwbHVnaW5zKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaXNNSU1FVHlwZVJlZ2lz
dGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIHZvaWQgYWRkRXh0cmFQbHVn
aW5QYXRoKGNvbnN0IFN0cmluZyYpOwotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgc2V0UGx1
Z2luUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1fcGx1Z2luUGF0aHMgPSBw
YXRoczsgfQotICAgICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdDsKLQot
ICAgICAgICBQbHVnaW5QYWNrYWdlV2luKiBmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3Ry
aW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbkZvck1JTUVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0OwotCi0gICAgICAgIHN0YXRp
YyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsKLQotICAgICAgICBWZWN0b3I8
U3RyaW5nPiBtX3BsdWdpblBhdGhzOwotICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3Rl
cmVkTUlNRVR5cGVzOwotICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOwotICAgIH07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpblBhY2thZ2VXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luUGFja2FnZVdpbi5jcHAJKHJldmlzaW9uIDMwMDA5KQorKysgV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBA
QAogI2luY2x1ZGUgPHNobHdhcGkuaD4KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2VXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAKICNpbmNs
dWRlICJUaW1lci5oIgogI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKQEAgLTM1LDcgKzM1
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QbHVnaW5QYWNrYWdlV2luOjp+UGx1Z2lu
UGFja2FnZVdpbigpCitQbHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpCiB7CiAgICAgQVNT
RVJUKCFtX2lzTG9hZGVkKTsKIH0KQEAgLTgzLDcgKzgzLDcgQEAgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IHNwbGl0U3RyaW5nKGNvbnN0IAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUGx1
Z2luUGFja2FnZVdpbjo6ZnJlZUxpYnJhcnlTb29uKCkKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZnJl
ZUxpYnJhcnlTb29uKCkKIHsKICAgICBBU1NFUlQoIW1fZnJlZUxpYnJhcnlUaW1lci5pc0FjdGl2
ZSgpKTsKICAgICBBU1NFUlQobV9tb2R1bGUpOwpAQCAtOTIsNyArOTIsNyBAQCB2b2lkIFBsdWdp
blBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5U29vbigpCiAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0
YXJ0T25lU2hvdCgwKTsKIH0KIAotdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpmcmVlTGlicmFyeVRp
bWVyRmlyZWQoVGltZXI8UGx1Z2luUGFja2FnZVdpbj4qIC8qdGltZXIqLykKK3ZvaWQgUGx1Z2lu
UGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2U+KiAvKnRp
bWVyKi8pCiB7CiAgICAgQVNTRVJUKG1fbW9kdWxlKTsKICAgICBBU1NFUlQobV9sb2FkQ291bnQg
PT0gMCk7CkBAIC0xMDEsMTMgKzEwMSwxMyBAQCB2b2lkIFBsdWdpblBhY2thZ2VXaW46OmZyZWVM
aWJyYXJ5VGltZXJGCiAgICAgbV9tb2R1bGUgPSAwOwogfQogCi1QbHVnaW5QYWNrYWdlV2luOjpQ
bHVnaW5QYWNrYWdlV2luKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RN
b2RpZmllZCkKK1BsdWdpblBhY2thZ2U6OlBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKQogICAgIDogbV9wYXRoKHBhdGgpCiAgICAg
LCBtX21vZHVsZSgwKQogICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQogICAgICwg
bV9pc0xvYWRlZChmYWxzZSkKICAgICAsIG1fbG9hZENvdW50KDApCi0gICAgLCBtX2ZyZWVMaWJy
YXJ5VGltZXIodGhpcywgJlBsdWdpblBhY2thZ2VXaW46OmZyZWVMaWJyYXJ5VGltZXJGaXJlZCkK
KyAgICAsIG1fZnJlZUxpYnJhcnlUaW1lcih0aGlzLCAmUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJh
cnlUaW1lckZpcmVkKQogICAgICwgbV9maWxlVmVyc2lvbkxTKDApCiAgICAgLCBtX2ZpbGVWZXJz
aW9uTVMoMCkKIHsKQEAgLTExNSw3ICsxMTUsNyBAQCBQbHVnaW5QYWNrYWdlV2luOjpQbHVnaW5Q
YWNrYWdlV2luKGNvbnN0CiAgICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3Bh
dGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7CiB9CiAKLWludCBQbHVnaW5Q
YWNrYWdlV2luOjpjb21wYXJlRmlsZVZlcnNpb24odW5zaWduZWQgY29tcGFyZVZlcnNpb25NUywg
dW5zaWduZWQgY29tcGFyZVZlcnNpb25MUykgY29uc3QKK2ludCBQbHVnaW5QYWNrYWdlOjpjb21w
YXJlRmlsZVZlcnNpb24odW5zaWduZWQgY29tcGFyZVZlcnNpb25NUywgdW5zaWduZWQgY29tcGFy
ZVZlcnNpb25MUykgY29uc3QKIHsKICAgICAvLyByZXR1cm4gLTEsIDAsIG9yIDEgaWYgcGx1Zy1p
biB2ZXJzaW9uIGlzIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbgogICAgIC8v
IHRoZSBwYXNzZWQgdmVyc2lvbgpAQCAtMTI2LDcgKzEyNiw3IEBAIGludCBQbHVnaW5QYWNrYWdl
V2luOjpjb21wYXJlRmlsZVZlcnNpb24KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBQbHVnaW5Q
YWNrYWdlV2luOjpzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpCit2b2lk
IFBsdWdpblBhY2thZ2U6OnN0b3JlRmlsZVZlcnNpb24oTFBWT0lEIHZlcnNpb25JbmZvRGF0YSkK
IHsKICAgICBWU19GSVhFREZJTEVJTkZPKiBpbmZvOwogICAgIFVJTlQgaW5mb1NpemU7CkBAIC0x
MzYsNyArMTM2LDcgQEAgdm9pZCBQbHVnaW5QYWNrYWdlV2luOjpzdG9yZUZpbGVWZXJzaW9uKAog
ICAgIG1fZmlsZVZlcnNpb25NUyA9IGluZm8tPmR3RmlsZVZlcnNpb25NUzsKIH0KIAotYm9vbCBQ
bHVnaW5QYWNrYWdlV2luOjppc1BsdWdpbkJsYWNrbGlzdGVkKCkKK2Jvb2wgUGx1Z2luUGFja2Fn
ZTo6aXNQbHVnaW5CbGFja2xpc3RlZCgpCiB7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNp
bHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVMgPSAweDAwMDEwMDAwOwogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxT
ID0gMHg1MUJFMDAwMDsKQEAgLTE1NCw3ICsxNTQsNyBAQCBib29sIFBsdWdpblBhY2thZ2VXaW46
OmlzUGx1Z2luQmxhY2tsaXN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFBsdWdpblBh
Y2thZ2VXaW46OmZldGNoSW5mbygpCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCiB7
CiAgICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJvSGFuZGxlOwogICAgIHZlcnNpb25JbmZv
U2l6ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLCAmemVyb0hhbmRsZSk7IApAQCAtMjExLDcgKzIxMSw3IEBAIGJvb2wgUGx1
Z2luUGFja2FnZVdpbjo6ZmV0Y2hJbmZvKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQ
bHVnaW5QYWNrYWdlV2luOjpsb2FkKCkKK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCiB7CiAg
ICAgaWYgKG1fZnJlZUxpYnJhcnlUaW1lci5pc0FjdGl2ZSgpKSB7CiAgICAgICAgIEFTU0VSVCht
X21vZHVsZSk7CkBAIC0zMjUsNyArMzI1LDcgQEAgYWJvcnQ6CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFBsdWdpblBhY2thZ2VXaW46OnVubG9hZCgpCit2b2lkIFBsdWdpblBhY2thZ2U6
OnVubG9hZCgpCiB7CiAgICAgaWYgKCFtX2lzTG9hZGVkKQogICAgICAgICByZXR1cm47CkBAIC0z
MzgsNyArMzM4LDcgQEAgdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxvYWQoKQogICAgIHVubG9h
ZFdpdGhvdXRTaHV0ZG93bigpOwogfQogCi12b2lkIFBsdWdpblBhY2thZ2VXaW46OnVubG9hZFdp
dGhvdXRTaHV0ZG93bigpCit2b2lkIFBsdWdpblBhY2thZ2U6OnVubG9hZFdpdGhvdXRTaHV0ZG93
bigpCiB7CiAgICAgaWYgKCFtX2lzTG9hZGVkKQogICAgICAgICByZXR1cm47CkBAIC0zNTcsOSAr
MzU3LDkgQEAgdm9pZCBQbHVnaW5QYWNrYWdlV2luOjp1bmxvYWRXaXRob3V0U2h1dAogICAgIG1f
aXNMb2FkZWQgPSBmYWxzZTsKIH0KIAotUGx1Z2luUGFja2FnZVdpbiogUGx1Z2luUGFja2FnZVdp
bjo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0
TW9kaWZpZWQpCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCkKIHsKLSAgICBQ
bHVnaW5QYWNrYWdlV2luKiBwYWNrYWdlID0gbmV3IFBsdWdpblBhY2thZ2VXaW4ocGF0aCwgbGFz
dE1vZGlmaWVkKTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gbmV3IFBsdWdpblBhY2th
Z2UocGF0aCwgbGFzdE1vZGlmaWVkKTsKIAogICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkp
IHsKICAgICAgICAgZGVsZXRlIHBhY2thZ2U7CkBAIC0zNjksNyArMzY5LDcgQEAgUGx1Z2luUGFj
a2FnZVdpbiogUGx1Z2luUGFja2FnZVdpbjo6Y3JlYQogICAgIHJldHVybiBwYWNrYWdlOwogfQog
Ci11bnNpZ25lZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3QKK3Vuc2lnbmVkIFBsdWdp
blBhY2thZ2U6Omhhc2goKSBjb25zdAogeyAKICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbM10gPSB7
CiAgICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCkBAIC0zODAsNyArMzgwLDcg
QEAgdW5zaWduZWQgUGx1Z2luUGFja2FnZVdpbjo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMp
LCAzICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOwogfQogCi1ib29sIFBsdWdp
blBhY2thZ2VXaW46OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0IFBsdWdp
blBhY2thZ2VXaW4mIGIpCitib29sIFBsdWdpblBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBh
Y2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2UmIGIpCiB7CiAgICAgcmV0dXJuIGEubV9kZXNj
cmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb24gJiYgKENvbXBhcmVGaWxlVGltZSgmYS5tX2xhc3RN
b2RpZmllZCwgJmIubV9sYXN0TW9kaWZpZWQpID09IDApOwogfQpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5QYWNrYWdlV2luLmgJKHJldmlzaW9uIDMwMDA5KQorKysgV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5QYWNrYWdlV2luX0gKLSNkZWZpbmUg
UGx1Z2luUGFja2FnZVdpbl9ICi0KLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdp
bmRvd3MuaD4KLQotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKLSNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1J
TUVUb0Rlc2NyaXB0aW9uc01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8
U3RyaW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7Ci0KLSAgICBjbGFzcyBQbHVnaW5QYWNrYWdl
V2luIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZVdpbj4gewotICAgIHB1YmxpYzoK
LSAgICAgICAgflBsdWdpblBhY2thZ2VXaW4oKTsKLSAgICAgICAgc3RhdGljIFBsdWdpblBhY2th
Z2VXaW4qIGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYg
bGFzdE1vZGlmaWVkKTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9Ci0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZGVzY3JpcHRpb247IH0KLSAgICAgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWxlTmFtZTsgfQotICAgICAgICBTdHJpbmcgcGFyZW50RGlyZWN0b3J5KCkgY29u
c3QgeyByZXR1cm4gbV9wYXJlbnREaXJlY3Rvcnk7IH0KLQotICAgICAgICBjb25zdCBNSU1FVG9E
ZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWlt
ZVRvRGVzY3JpcHRpb25zOyB9Ci0gICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1p
bWVUb0V4dGVuc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KLQot
ICAgICAgICB1bnNpZ25lZCBQbHVnaW5QYWNrYWdlV2luOjpoYXNoKCkgY29uc3Q7Ci0gICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VXaW4mIGEsIGNvbnN0IFBsdWdp
blBhY2thZ2VXaW4mIGIpOwotCi0gICAgICAgIGJvb2wgbG9hZCgpOwotICAgICAgICB2b2lkIHVu
bG9hZCgpOwotICAgICAgICB2b2lkIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotCi0gICAgICAg
IGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzKCkgY29uc3QgeyByZXR1cm4gJm1fcGx1
Z2luRnVuY3M7IH0KLQotICAgICAgICBpbnQgY29tcGFyZUZpbGVWZXJzaW9uKHVuc2lnbmVkIGNv
bXBhcmVWZXJzaW9uTVMsIHVuc2lnbmVkIGNvbXBhcmVWZXJzaW9uTFMpIGNvbnN0OwotICAgIHBy
aXZhdGU6Ci0gICAgICAgIFBsdWdpblBhY2thZ2VXaW4oY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKTsKLSAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKLSAg
ICAgICAgdm9pZCBzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpOwotICAg
ICAgICBib29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKTsKLQotICAgICAgICBib29sIG1faXNMb2Fk
ZWQ7Ci0gICAgICAgIGludCBtX2xvYWRDb3VudDsKLQotICAgICAgICBEV09SRCBtX2ZpbGVWZXJz
aW9uTVM7Ci0gICAgICAgIERXT1JEIG1fZmlsZVZlcnNpb25MUzsKLQotICAgICAgICBTdHJpbmcg
bV9kZXNjcmlwdGlvbjsKLSAgICAgICAgU3RyaW5nIG1fcGF0aDsKLSAgICAgICAgU3RyaW5nIG1f
ZmlsZU5hbWU7Ci0gICAgICAgIFN0cmluZyBtX25hbWU7Ci0gICAgICAgIFN0cmluZyBtX3BhcmVu
dERpcmVjdG9yeTsKLQotICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXAgbV9taW1lVG9EZXNj
cmlwdGlvbnM7Ci0gICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXAgbV9taW1lVG9FeHRlbnNpb25z
OwotCi0gICAgICAgIEhNT0RVTEUgbV9tb2R1bGU7Ci0gICAgICAgIEZJTEVUSU1FIG1fbGFzdE1v
ZGlmaWVkOwotCi0gICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247Ci0g
ICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKLSAgICAgICAgTlBOZXRzY2FwZUZ1
bmNzIG1fYnJvd3NlckZ1bmNzOwotCi0gICAgICAgIHZvaWQgZnJlZUxpYnJhcnlTb29uKCk7Ci0g
ICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+
Kik7Ci0gICAgICAgIFRpbWVyPFBsdWdpblBhY2thZ2VXaW4+IG1fZnJlZUxpYnJhcnlUaW1lcjsK
LSAgICB9OwotCi0gICAgc3RydWN0IFBsdWdpblBhY2thZ2VXaW5IYXNoIHsKLSAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxQbHVnaW5QYWNrYWdlV2luKj4oa2V5KS0+aGFzaCgpOyB9Ci0gICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYga2V5KSB7IHJldHVybiBr
ZXktPmhhc2goKTsgfQotCi0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBj
b25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdl
V2luKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZVdpbio+KGIpKTsgfQotICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZVdpbj4mIGEs
IGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlV2luPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2Fn
ZVdpbjo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQotICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwotICAgIH07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byB1c2UgYSBjdXN0b20gSGFz
aCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRyYWl0cy4KLS8vIEl0IHNob3VsZCBiZSBwb3Nz
aWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9yYWdlVHJhaXRzIHNwZWNpYWxpemF0aW9uLgot
bmFtZXNwYWNlIFdURiB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFp
dHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbkhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNv
cmU6OlBsdWdpblBhY2thZ2VXaW4+ID4gPiB7Ci0gICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6
ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlV2luPik+OjpTaWduZWRUeXBlIEludFR5
cGU7Ci0gICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1Z2luUGFja2FnZVdpbkhhc2ggSGFzaDsK
LSAgICAgICAgdHlwZWRlZiBIYXNoVHJhaXRzPEludFR5cGU+IFRyYWl0czsKLSAgICB9OwotfQot
Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCShyZXZp
c2lvbiAzMDAwOSkKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luVmlld1dpbi5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKIAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKQEAgLTQ3
LDEyICs0NywxMiBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5Q
YWNrYWdlV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgImtqc19i
aW5kaW5nLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAjaW5jbHVkZSAia2pzX3dpbmRvdy5o
IgogI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZVdpbi5o
IgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5o
IgogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC03
Niw5ICs3Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5h
bWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotY2xhc3MgUGx1Z2luUmVxdWVzdFdp
biB7CitjbGFzcyBQbHVnaW5SZXF1ZXN0IHsKIHB1YmxpYzoKLSAgICBQbHVnaW5SZXF1ZXN0V2lu
KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlm
aWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzaG91bGRBbGxvd1BvcHVwcykKKyAgICBQ
bHVnaW5SZXF1ZXN0KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJv
b2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzaG91bGRBbGxvd1Bv
cHVwcykKICAgICAgICAgOiBtX2ZyYW1lTG9hZFJlcXVlc3QoZnJhbWVMb2FkUmVxdWVzdCkKICAg
ICAgICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0YSkKICAgICAgICAgLCBtX3NlbmROb3RpZmlj
YXRpb24oc2VuZE5vdGlmaWNhdGlvbikKQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgaW50IHNf
Y2FsbGluZ1BsdWdpbjsKIAogY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbiB7CiBwdWJs
aWM6Ci0gICAgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbihQbHVnaW5WaWV3V2luKiBwbHVnaW5W
aWV3KQorICAgIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oUGx1Z2luVmlldyogcGx1Z2luVmll
dykKICAgICAgICAgOiBtX2JhY2soMCksIG1fZnJvbnQoMCkKICAgICAgICAgLCBtX3BsdWdpblZp
ZXcocGx1Z2luVmlldykKICAgICAgICAgLCBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyKHRoaXMsICZQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjptZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKQpAQCAt
MTk0LDcgKzE5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBkZWxldGUgbWVzc2FnZTsKICAg
ICB9CiAKLSAgICBQbHVnaW5WaWV3V2luKiBtX3BsdWdpblZpZXc7CisgICAgUGx1Z2luVmlldyog
bV9wbHVnaW5WaWV3OwogICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsKICAgICBQbHVnaW5NZXNz
YWdlKiBtX2Zyb250OwogCkBAIC0yMTQsOSArMjE0LDkgQEAgc3RhdGljIFN0cmluZyBzY3JpcHRT
dHJpbmdJZkphdmFTY3JpcHRVUgogICAgIHJldHVybiBLVVJMOjpkZWNvZGVfc3RyaW5nKHVybC5k
ZXByZWNhdGVkU3RyaW5nKCkubWlkKDExKSk7CiB9CiAKLVBsdWdpblZpZXdXaW4qIFBsdWdpblZp
ZXdXaW46OnNfY3VycmVudFBsdWdpblZpZXcgPSAwOworUGx1Z2luVmlldyogUGx1Z2luVmlldzo6
c19jdXJyZW50UGx1Z2luVmlldyA9IDA7CiAKLWNvbnN0IExQQ1dTVFIga1dlYlBsdWdpblZpZXdX
aW5kb3dDbGFzc05hbWUgPSBMIldlYlBsdWdpblZpZXciOworY29uc3QgTFBDV1NUUiBrV2ViUGx1
Z2luVmlld2Rvd0NsYXNzTmFtZSA9IEwiV2ViUGx1Z2luVmlldyI7CiBjb25zdCBMUENXU1RSIGtX
ZWJQbHVnaW5WaWV3UHJvcGVydHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0eSI7CiAKIHN0YXRp
YyBjb25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzOyBV
OyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94
LzIuMCI7CkBAIC0yNDYsNyArMjQ2LDcgQEAgc3RhdGljIGJvb2wgcmVnaXN0ZXJQbHVnaW5WaWV3
KCkKICAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwog
ICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAoSEJSVVNIKUNPTE9SX1dJTkRPVzsKICAgICB3Y2V4
Lmxwc3pNZW51TmFtZSAgID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0ga1dlYlBsdWdp
blZpZXdXaW5kb3dDbGFzc05hbWU7CisgICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IGtXZWJQbHVn
aW5WaWV3ZG93Q2xhc3NOYW1lOwogICAgIHdjZXguaEljb25TbSAgICAgICAgPSAwOwogCiAgICAg
cmV0dXJuICEhUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKQEAgLTI1NCwxMiArMjU0LDEyIEBAIHN0
YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmlldygpCiAKIHN0YXRpYyBMUkVTVUxUIENBTExCQUNL
IFBsdWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFt
LCBMUEFSQU0gbFBhcmFtKQogewotICAgIFBsdWdpblZpZXdXaW4qIHBsdWdpblZpZXcgPSByZWlu
dGVycHJldF9jYXN0PFBsdWdpblZpZXdXaW4qPihHZXRQcm9wKGhXbmQsIGtXZWJQbHVnaW5WaWV3
UHJvcGVydHkpKTsKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcmVpbnRlcnByZXRfY2Fz
dDxQbHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5KSk7CiAK
ICAgICByZXR1cm4gcGx1Z2luVmlldy0+d25kUHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQ
YXJhbSk7CiB9CiAKLXZvaWQgUGx1Z2luVmlld1dpbjo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVk
KFRpbWVyPFBsdWdpblZpZXdXaW4+KikKK3ZvaWQgUGx1Z2luVmlldzo6cG9wUG9wdXBzU3RhdGVU
aW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXc+KikKIHsKICAgICBwb3BQb3B1cHNFbmFibGVkU3Rh
dGUoKTsKIH0KQEAgLTI3OSw3ICsyNzksNyBAQCBzdGF0aWMgYm9vbCBpc1dpbmRvd3NNZXNzYWdl
VXNlckdlc3R1cmUoCiB9CiAKIExSRVNVTFQKLVBsdWdpblZpZXdXaW46OnduZFByb2MoSFdORCBo
V25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitQbHVnaW5W
aWV3Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFS
QU0gbFBhcmFtKQogewogICAgIC8vIDxyZGFyOi8vNTcxMTEzNj4gU29tZXRpbWVzIEZsYXNoIHdp
bGwgY2FsbCBTZXRDYXB0dXJlIGJlZm9yZSBjcmVhdGluZwogICAgIC8vIGEgZnVsbC1zY3JlZW4g
d2luZG93IGFuZCB3aWxsIG5vdCByZWxlYXNlIGl0LCB3aGljaCBjYXVzZXMgdGhlCkBAIC0zMzUs
NyArMzM1LDcgQEAgUGx1Z2luVmlld1dpbjo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUGx1Z2luVmlld1dpbjo6dXBkYXRlV2luZG93KCkg
Y29uc3QKK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRlV2luZG93KCkgY29uc3QKIHsKICAgICBpZiAo
IXBhcmVudCgpKQogICAgICAgICByZXR1cm47CkBAIC0zODAsNyArMzgwLDcgQEAgdm9pZCBQbHVn
aW5WaWV3V2luOjp1cGRhdGVXaW5kb3coKSBjb25zdAogICAgIH0KIH0KIAotSW50UmVjdCBQbHVn
aW5WaWV3V2luOjp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0CitJbnRSZWN0IFBsdWdpblZpZXc6Ondp
bmRvd0NsaXBSZWN0KCkgY29uc3QKIHsKICAgICAvLyBTdGFydCBieSBjbGlwcGluZyB0byBvdXIg
Ym91bmRzLgogICAgIEludFJlY3QgY2xpcFJlY3QobV93aW5kb3dSZWN0KTsKQEAgLTM5Myw3ICsz
OTMsNyBAQCBJbnRSZWN0IFBsdWdpblZpZXdXaW46OndpbmRvd0NsaXBSZWN0KCkgCiAgICAgcmV0
dXJuIGNsaXBSZWN0OwogfQogCi12b2lkIFBsdWdpblZpZXdXaW46OnNldEZyYW1lR2VvbWV0cnko
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgUGx1Z2luVmlldzo6c2V0RnJhbWVHZW9tZXRyeShj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmIChtX2VsZW1lbnQtPmRvY3VtZW50KCktPnBy
aW50aW5nKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNSwxMiArNDA1LDEyIEBAIHZvaWQgUGx1
Z2luVmlld1dpbjo6c2V0RnJhbWVHZW9tZXRyeShjb24KICAgICBzZXROUFdpbmRvd1JlY3QocmVj
dCk7CiB9CiAKLXZvaWQgUGx1Z2luVmlld1dpbjo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3Zv
aWQgUGx1Z2luVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKIHsKICAgICB1cGRhdGVXaW5k
b3coKTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3V2luOjpzZXRGb2N1cygpCit2b2lkIFBsdWdpblZp
ZXc6OnNldEZvY3VzKCkKIHsKICAgICBpZiAobV93aW5kb3cpCiAgICAgICAgIFNldEZvY3VzKG1f
d2luZG93KTsKQEAgLTQxOCw3ICs0MTgsNyBAQCB2b2lkIFBsdWdpblZpZXdXaW46OnNldEZvY3Vz
KCkKICAgICBXaWRnZXQ6OnNldEZvY3VzKCk7CiB9CiAKLXZvaWQgUGx1Z2luVmlld1dpbjo6c2hv
dygpCit2b2lkIFBsdWdpblZpZXc6OnNob3coKQogewogICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsK
IApAQCAtNDI4LDcgKzQyOCw3IEBAIHZvaWQgUGx1Z2luVmlld1dpbjo6c2hvdygpCiAgICAgV2lk
Z2V0OjpzaG93KCk7CiB9CiAKLXZvaWQgUGx1Z2luVmlld1dpbjo6aGlkZSgpCit2b2lkIFBsdWdp
blZpZXc6OmhpZGUoKQogewogICAgIG1faXNWaXNpYmxlID0gZmFsc2U7CiAKQEAgLTQzOCw3ICs0
MzgsNyBAQCB2b2lkIFBsdWdpblZpZXdXaW46OmhpZGUoKQogICAgIFdpZGdldDo6aGlkZSgpOwog
fQogCi12b2lkIFBsdWdpblZpZXdXaW46OnBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBQbHVnaW5WaWV3Ojpw
YWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICAgICBzdGF0aWMgSW1hZ2UqIG51bGxQbHVnaW5JbWFnZTsKICAgICBp
ZiAoIW51bGxQbHVnaW5JbWFnZSkKQEAgLTQ2MCw3ICs0NjAsNyBAQCB2b2lkIFBsdWdpblZpZXdX
aW46OnBhaW50TWlzc2luZ1BsdWdpbkljCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCi1i
b29sIFBsdWdpblZpZXdXaW46OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBucEV2ZW50KQorYm9v
bCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgbnBFdmVudCkKIHsKICAgICBp
ZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC00ODMsNyArNDgzLDcgQEAgYm9vbCBQbHVnaW5WaWV3V2luOjpkaXNwYXRjaE5QRXZlbnQo
TlBFdgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUGx1Z2luVmlld1dpbjo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBQbHVn
aW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7CiAgICAgaWYgKCFtX2lzU3RhcnRlZCkgewogICAgICAgICAvLyBEcmF3IHRoZSAibWlz
c2luZyBwbHVnaW4iIGltYWdlCkBAIC01NDEsNyArNTQxLDcgQEAgdm9pZCBQbHVnaW5WaWV3V2lu
OjpwYWludChHcmFwaGljc0NvbnRleAogICAgIGNvbnRleHQtPnJlbGVhc2VXaW5kb3dzQ29udGV4
dChoZGMsIGZyYW1lR2VvbWV0cnkoKSwgbV9pc1RyYW5zcGFyZW50KTsKIH0KIAotdm9pZCBQbHVn
aW5WaWV3V2luOjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQordm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQog
ewogICAgIE5QRXZlbnQgbnBFdmVudDsKIApAQCAtNTYzLDcgKzU2Myw3IEBAIHZvaWQgUGx1Z2lu
Vmlld1dpbjo6aGFuZGxlS2V5Ym9hcmRFdmVudCgKIGV4dGVybiBIQ1VSU09SIGxhc3RTZXRDdXJz
b3I7CiBleHRlcm4gYm9vbCBpZ25vcmVOZXh0U2V0Q3Vyc29yOwogCi12b2lkIFBsdWdpblZpZXdX
aW46OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit2b2lkIFBsdWdpblZpZXc6
OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiB7CiAgICAgTlBFdmVudCBucEV2
ZW50OwogCkBAIC02MzcsNyArNjM3LDcgQEAgdm9pZCBQbHVnaW5WaWV3V2luOjpoYW5kbGVNb3Vz
ZUV2ZW50KE1vdQogICAgIGxhc3RTZXRDdXJzb3IgPSA6OkdldEN1cnNvcigpOwogfQogCi12b2lk
IFBsdWdpblZpZXdXaW46OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKK3ZvaWQgUGx1Z2luVmll
dzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogewogICAgIGlmICghbV9wbHVnaW4gfHwgbV9p
c1dpbmRvd2VkKQogICAgICAgICByZXR1cm47CkBAIC02NDgsNyArNjQ4LDcgQEAgdm9pZCBQbHVn
aW5WaWV3V2luOjpoYW5kbGVFdmVudChFdmVudCogZQogICAgICAgICBoYW5kbGVLZXlib2FyZEV2
ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOwogfQogCi12b2lkIFBsdWdp
blZpZXdXaW46OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit2b2lkIFBsdWdpblZpZXc6
OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCiB7CiAgICAgV2lkZ2V0OjpzZXRQYXJlbnQo
cGFyZW50KTsKIApAQCAtNjY4LDcgKzY2OCw3IEBAIHZvaWQgUGx1Z2luVmlld1dpbjo6c2V0UGFy
ZW50KFNjcm9sbFZpZXcKIAogfQogCi12b2lkIFBsdWdpblZpZXdXaW46OmF0dGFjaFRvV2luZG93
KCkKK3ZvaWQgUGx1Z2luVmlldzo6YXR0YWNoVG9XaW5kb3coKQogewogICAgIGlmIChtX2F0dGFj
aGVkVG9XaW5kb3cpCiAgICAgICAgIHJldHVybjsKQEAgLTY3OCw3ICs2NzgsNyBAQCB2b2lkIFBs
dWdpblZpZXdXaW46OmF0dGFjaFRvV2luZG93KCkKICAgICAgICAgU2hvd1dpbmRvdyhtX3dpbmRv
dywgU1dfU0hPV05BKTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3V2luOjpkZXRhY2hGcm9tV2luZG93
KCkKK3ZvaWQgUGx1Z2luVmlldzo6ZGV0YWNoRnJvbVdpbmRvdygpCiB7CiAgICAgaWYgKCFtX2F0
dGFjaGVkVG9XaW5kb3cpCiAgICAgICAgIHJldHVybjsKQEAgLTY4OCw3ICs2ODgsNyBAQCB2b2lk
IFBsdWdpblZpZXdXaW46OmRldGFjaEZyb21XaW5kb3coKQogICAgIG1fYXR0YWNoZWRUb1dpbmRv
dyA9IGZhbHNlOwogfQogCi12b2lkIFBsdWdpblZpZXdXaW46OnNldE5QV2luZG93UmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAoIW1faXNTdGFydGVkKQogICAgICAgICByZXR1cm47
CkBAIC03MjIsNyArNzIyLDcgQEAgdm9pZCBQbHVnaW5WaWV3V2luOjpzZXROUFdpbmRvd1JlY3Qo
Y29ucwogICAgIH0KIH0KIAotYm9vbCBQbHVnaW5WaWV3V2luOjpzdGFydCgpCitib29sIFBsdWdp
blZpZXc6OnN0YXJ0KCkKIHsKICAgICBpZiAobV9pc1N0YXJ0ZWQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTczMSw3ICs3MzEsNyBAQCBib29sIFBsdWdpblZpZXdXaW46OnN0YXJ0KCkKICAg
ICBBU1NFUlQobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3ApOwogCiAgICAgTlBFcnJvciBu
cEVycjsKLSAgICBQbHVnaW5WaWV3V2luOjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICAgICB7CiAgICAgICAg
IEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwogICAgICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOwpAQCAtNzM5LDcgKzczOSw3IEBAIGJvb2wgUGx1Z2luVmlld1dpbjo6
c3RhcnQoKQogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKICAgICAgICAgTE9HX05Q
RVJST1IobnBFcnIpOwogICAgIH0KLSAgICBQbHVnaW5WaWV3V2luOjpzZXRDdXJyZW50UGx1Z2lu
VmlldygwKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKIAogICAg
IGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NzU2LDcgKzc1Niw3IEBAIGJvb2wgUGx1Z2luVmlld1dpbjo6c3RhcnQoKQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFBsdWdpblZpZXdXaW46OnN0b3AoKQordm9pZCBQbHVnaW5WaWV3Ojpz
dG9wKCkKIHsKICAgICBpZiAoIW1faXNTdGFydGVkKQogICAgICAgICByZXR1cm47CkBAIC04MDYs
MTIgKzgwNiwxMiBAQCB2b2lkIFBsdWdpblZpZXdXaW46OnN0b3AoKQogICAgIG1faW5zdGFuY2Ut
PnBkYXRhID0gMDsKIH0KIAotdm9pZCBQbHVnaW5WaWV3V2luOjpzZXRDdXJyZW50UGx1Z2luVmll
dyhQbHVnaW5WaWV3V2luKiBwbHVnaW5WaWV3KQordm9pZCBQbHVnaW5WaWV3OjpzZXRDdXJyZW50
UGx1Z2luVmlldyhQbHVnaW5WaWV3KiBwbHVnaW5WaWV3KQogewogICAgIHNfY3VycmVudFBsdWdp
blZpZXcgPSBwbHVnaW5WaWV3OwogfQogCi1QbHVnaW5WaWV3V2luKiBQbHVnaW5WaWV3V2luOjpj
dXJyZW50UGx1Z2luVmlldygpCitQbHVnaW5WaWV3KiBQbHVnaW5WaWV3OjpjdXJyZW50UGx1Z2lu
VmlldygpCiB7CiAgICAgcmV0dXJuIHNfY3VycmVudFBsdWdpblZpZXc7CiB9CkBAIC04NTEsNyAr
ODUxLDcgQEAgc3RhdGljIGJvb2wgZ2V0U3RyaW5nKEtKU1Byb3h5KiBwcm94eSwgSgogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIFBsdWdpblZpZXdXaW46OnBlcmZvcm1SZXF1ZXN0KFBsdWdp
blJlcXVlc3RXaW4qIHJlcXVlc3QpCit2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KFBs
dWdpblJlcXVlc3QqIHJlcXVlc3QpCiB7CiAgICAgLy8gZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0
IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25nZXIgcGFydCBvZiBhIGRvY3VtZW50IHRoYXQgaXMg
YmVpbmcgCiAgICAgLy8gZGlzcGxheWVkIHVubGVzcyB0aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1l
IGZyYW1lIGFzIHRoZSBwbHVnaW4uCkBAIC05MDUsMTIgKzkwNSwxMiBAQCB2b2lkIFBsdWdpblZp
ZXdXaW46OnBlcmZvcm1SZXF1ZXN0KFBsdWdpCiAgICAgfQogfQogCi12b2lkIFBsdWdpblZpZXdX
aW46OnJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdXaW4+KiB0aW1lcikKK3ZvaWQg
UGx1Z2luVmlldzo6cmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlldz4qIHRpbWVyKQog
ewogICAgIEFTU0VSVCh0aW1lciA9PSAmbV9yZXF1ZXN0VGltZXIpOwogICAgIEFTU0VSVChtX3Jl
cXVlc3RzLnNpemUoKSA+IDApOwogCi0gICAgUGx1Z2luUmVxdWVzdFdpbiogcmVxdWVzdCA9IG1f
cmVxdWVzdHNbMF07CisgICAgUGx1Z2luUmVxdWVzdCogcmVxdWVzdCA9IG1fcmVxdWVzdHNbMF07
CiAgICAgbV9yZXF1ZXN0cy5yZW1vdmUoMCk7CiAgICAgCiAgICAgLy8gU2NoZWR1bGUgYSBuZXcg
cmVxdWVzdCBiZWZvcmUgY2FsbGluZyBwZXJmb3JtUmVxdWVzdCBzaW5jZSB0aGUgY2FsbCB0bwpA
QCAtOTIyLDEzICs5MjIsMTMgQEAgdm9pZCBQbHVnaW5WaWV3V2luOjpyZXF1ZXN0VGltZXJGaXJl
ZChUaQogICAgIGRlbGV0ZSByZXF1ZXN0OwogfQogCi12b2lkIFBsdWdpblZpZXdXaW46OnNjaGVk
dWxlUmVxdWVzdChQbHVnaW5SZXF1ZXN0V2luKiByZXF1ZXN0KQordm9pZCBQbHVnaW5WaWV3Ojpz
Y2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBtX3JlcXVlc3Rz
LmFwcGVuZChyZXF1ZXN0KTsKICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9
CiAKLU5QRXJyb3IgUGx1Z2luVmlld1dpbjo6bG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBm
cmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEp
CitOUEVycm9yIFBsdWdpblZpZXc6OmxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVM
b2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQogewog
ICAgIEFTU0VSVChmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2Qo
KSA9PSAiR0VUIiB8fCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRo
b2QoKSA9PSAiUE9TVCIpOwogCkBAIC05NTMsNyArOTUzLDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3
V2luOjpsb2FkKGNvbnN0IEZyYW1lTAogICAgICAgICB9CiAgICAgfQogCi0gICAgUGx1Z2luUmVx
dWVzdFdpbiogcmVxdWVzdCA9IG5ldyBQbHVnaW5SZXF1ZXN0V2luKGZyYW1lTG9hZFJlcXVlc3Qs
IHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEsIGFyZVBvcHVwc0FsbG93ZWQoKSk7CisgICAg
UGx1Z2luUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBQbHVnaW5SZXF1ZXN0V2luKGZyYW1lTG9hZFJl
cXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEsIGFyZVBvcHVwc0FsbG93ZWQoKSk7
CiAgICAgc2NoZWR1bGVSZXF1ZXN0KHJlcXVlc3QpOwogCiAgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOwpAQCAtOTcwLDcgKzk3MCw3IEBAIHN0YXRpYyBLVVJMIG1ha2VVUkwoY29uc3QgS1VSTCYg
YmFzZVVSTCwKICAgICByZXR1cm4gS1VSTChiYXNlVVJMLCB1cmxTdHJpbmcpOwogfQogCi1OUEVy
cm9yIFBsdWdpblZpZXdXaW46OmdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNo
YXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VVJM
Tm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlE
YXRhKQogewogICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKIApAQCAtOTgx
LDcgKzk4MSw3IEBAIE5QRXJyb3IgUGx1Z2luVmlld1dpbjo6Z2V0VVJMTm90aWZ5KGNvbnMKICAg
ICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCB0cnVlLCBub3RpZnlEYXRhKTsKIH0KIAot
TlBFcnJvciBQbHVnaW5WaWV3V2luOjpnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFy
KiB0YXJnZXQpCitOUEVycm9yIFBsdWdpblZpZXc6OmdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCkKIHsKICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVl
c3Q7CiAKQEAgLTExNDksNyArMTE0OSw3IEBAIHN0YXRpYyBpbmxpbmUgSFRUUEhlYWRlck1hcCBw
YXJzZVJGQzgyMkgKICAgICByZXR1cm4gaGVhZGVyRmllbGRzOwogfQogCi1OUEVycm9yIFBsdWdp
blZpZXdXaW46OmhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQs
IHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRh
LCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKQorTlBFcnJvciBQbHVn
aW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1
aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwg
Ym9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycykKIHsKICAgICBpZiAoIXVy
bCB8fCAhbGVuIHx8ICFidWYpCiAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOwpA
QCAtMTIzMCwzMiArMTIzMCwzMiBAQCBOUEVycm9yIFBsdWdpblZpZXdXaW46OmhhbmRsZVBvc3Qo
Y29uc3QgCiAgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlv
biwgbm90aWZ5RGF0YSk7CiB9CiAKLU5QRXJyb3IgUGx1Z2luVmlld1dpbjo6cG9zdFVSTE5vdGlm
eShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3Qg
Y2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK05QRXJyb3IgUGx1Z2lu
Vmlldzo6cG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0
YSkKIHsKICAgICByZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUs
IG5vdGlmeURhdGEsIHRydWUsIHRydWUpOwogfQogCi1OUEVycm9yIFBsdWdpblZpZXdXaW46OnBv
c3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNv
bnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCitOUEVycm9yIFBsdWdpblZpZXc6OnBvc3RVUkwo
Y29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNo
YXIqIGJ1ZiwgTlBCb29sIGZpbGUpCiB7CiAgICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxv
dyBoZWFkZXJzIHRvIGJlIHNwZWNpZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZp
bGUuCiAgICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCAw
LCBmYWxzZSwgZmlsZSk7CiB9CiAKLU5QRXJyb3IgUGx1Z2luVmlld1dpbjo6bmV3U3RyZWFtKE5Q
TUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKK05Q
RXJyb3IgUGx1Z2luVmlldzo6bmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciog
dGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAg
IC8vIFVuc3VwcG9ydGVkCiAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CiB9CiAKLWlu
dDMyIFBsdWdpblZpZXdXaW46OndyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9p
ZCogYnVmZmVyKQoraW50MzIgUGx1Z2luVmlldzo6d3JpdGUoTlBTdHJlYW0qIHN0cmVhbSwgaW50
MzIgbGVuLCB2b2lkKiBidWZmZXIpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICAvLyBV
bnN1cHBvcnRlZAogICAgIHJldHVybiAtMTsKIH0KIAotTlBFcnJvciBQbHVnaW5WaWV3V2luOjpk
ZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKK05QRXJyb3Ig
UGx1Z2luVmlldzo6ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFz
b24pCiB7CiAgICAgUGx1Z2luU3RyZWFtKiBicm93c2VyU3RyZWFtID0gc3RhdGljX2Nhc3Q8UGx1
Z2luU3RyZWFtKj4oc3RyZWFtLT5uZGF0YSk7CiAKQEAgLTEyNjYsNyArMTI2Niw3IEBAIE5QRXJy
b3IgUGx1Z2luVmlld1dpbjo6ZGVzdHJveVN0cmVhbShOUFMKICAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7CiB9CiAKLWNvbnN0IGNoYXIqIFBsdWdpblZpZXdXaW46OnVzZXJBZ2VudCgpCitjb25z
dCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnQoKQogewogICAgIGlmIChtX3F1aXJrcy5jb250
YWlucyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCiAgICAgICAgIHJldHVybiBN
b3ppbGxhVXNlckFnZW50OwpAQCAtMTI3Niw3ICsxMjc2LDcgQEAgY29uc3QgY2hhciogUGx1Z2lu
Vmlld1dpbjo6dXNlckFnZW50KCkKICAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOwogfQog
Ci12b2lkIFBsdWdpblZpZXdXaW46OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQordm9pZCBQ
bHVnaW5WaWV3OjpzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSkKIHsKICAgICBTdHJpbmcgcyA9
IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobWVzc2FnZSk7CiAKQEAgLTEyODQsNyArMTI4
NCw3IEBAIHZvaWQgUGx1Z2luVmlld1dpbjo6c3RhdHVzKGNvbnN0IGNoYXIqIG0KICAgICAgICAg
cGFnZS0+Y2hyb21lKCktPnNldFN0YXR1c2JhclRleHQobV9wYXJlbnRGcmFtZSwgcyk7CiB9CiAK
LU5QRXJyb3IgUGx1Z2luVmlld1dpbjo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZv
aWQqIHZhbHVlKQorTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJp
YWJsZSwgdm9pZCogdmFsdWUpCiB7CiAgICAgc3dpdGNoICh2YXJpYWJsZSkgewogICAgICAgICBj
YXNlIE5QTlZXaW5kb3dOUE9iamVjdDogewpAQCAtMTMyOCw3ICsxMzI4LDcgQEAgTlBFcnJvciBQ
bHVnaW5WaWV3V2luOjpnZXRWYWx1ZShOUE5WYXJpYQogICAgIH0KIH0KIAotTlBFcnJvciBQbHVn
aW5WaWV3V2luOjpzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCitO
UEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CiAgICAgICAgIGNhc2UgTlBQVnBsdWdp
bldpbmRvd0Jvb2w6CkBAIC0xMzQzLDcgKzEzNDMsNyBAQCBOUEVycm9yIFBsdWdpblZpZXdXaW46
OnNldFZhbHVlKE5QUFZhcmlhCiAgICAgfQogfQogCi12b2lkIFBsdWdpblZpZXdXaW46OmludmFs
aWRhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdXaW4+KiB0aW1lcikKK3ZvaWQgUGx1Z2lu
Vmlldzo6aW52YWxpZGF0ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlldz4qIHRpbWVyKQogewog
ICAgIEFTU0VSVCh0aW1lciA9PSAmbV9pbnZhbGlkYXRlVGltZXIpOwogCkBAIC0xMzUzLDcgKzEz
NTMsNyBAQCB2b2lkIFBsdWdpblZpZXdXaW46OmludmFsaWRhdGVUaW1lckZpcmVkCiB9CiAKIAot
dm9pZCBQbHVnaW5WaWV3V2luOjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit2b2lkIFBs
dWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKIHsKICAgICBpZiAoIXJlY3Qp
IHsKICAgICAgICAgaW52YWxpZGF0ZSgpOwpAQCAtMTM3NSw3ICsxMzc1LDcgQEAgdm9pZCBQbHVn
aW5WaWV3V2luOjppbnZhbGlkYXRlUmVjdChOUFJlYwogICAgIH0KIH0KIAotdm9pZCBQbHVnaW5W
aWV3V2luOjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKK3ZvaWQgUGx1Z2luVmll
dzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCiB7CiAgICAgaWYgKG1faXNXaW5k
b3dlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTM5MCw3ICsxMzkwLDcgQEAgdm9pZCBQbHVnaW5W
aWV3V2luOjppbnZhbGlkYXRlUmVnaW9uKE5QUgogICAgIFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qo
cik7CiB9CiAKLXZvaWQgUGx1Z2luVmlld1dpbjo6Zm9yY2VSZWRyYXcoKQordm9pZCBQbHVnaW5W
aWV3Ojpmb3JjZVJlZHJhdygpCiB7CiAgICAgaWYgKG1faXNXaW5kb3dlZCkKICAgICAgICAgOjpV
cGRhdGVXaW5kb3cobV93aW5kb3cpOwpAQCAtMTM5OCwxNyArMTM5OCwxNyBAQCB2b2lkIFBsdWdp
blZpZXdXaW46OmZvcmNlUmVkcmF3KCkKICAgICAgICAgOjpVcGRhdGVXaW5kb3coY29udGFpbmlu
Z1dpbmRvdygpKTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3V2luOjpwdXNoUG9wdXBzRW5hYmxlZFN0
YXRlKGJvb2wgc3RhdGUpCit2b2lkIFBsdWdpblZpZXc6OnB1c2hQb3B1cHNFbmFibGVkU3RhdGUo
Ym9vbCBzdGF0ZSkKIHsKICAgICBtX3BvcHVwU3RhdGVTdGFjay5hcHBlbmQoc3RhdGUpOwogfQog
IAotdm9pZCBQbHVnaW5WaWV3V2luOjpwb3BQb3B1cHNFbmFibGVkU3RhdGUoKQordm9pZCBQbHVn
aW5WaWV3Ojpwb3BQb3B1cHNFbmFibGVkU3RhdGUoKQogewogICAgIG1fcG9wdXBTdGF0ZVN0YWNr
LnJlbW92ZUxhc3QoKTsKIH0KIAotYm9vbCBQbHVnaW5WaWV3V2luOjphcmVQb3B1cHNBbGxvd2Vk
KCkgY29uc3QKK2Jvb2wgUGx1Z2luVmlldzo6YXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX3BvcHVwU3RhdGVTdGFjay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX3Bv
cHVwU3RhdGVTdGFjay5sYXN0KCk7CkBAIC0xNDE2LDcgKzE0MTYsNyBAQCBib29sIFBsdWdpblZp
ZXdXaW46OmFyZVBvcHVwc0FsbG93ZWQoKSBjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1LSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZSogUGx1Z2luVmlld1dpbjo6YmluZGluZ0luc3RhbmNlKCkKK0tK
Uzo6QmluZGluZ3M6Okluc3RhbmNlKiBQbHVnaW5WaWV3OjpiaW5kaW5nSW5zdGFuY2UoKQogewog
ICAgIE5QT2JqZWN0KiBvYmplY3QgPSAwOwogCkBAIC0xNDQyLDcgKzE0NDIsNyBAQCBLSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZSogUGx1Z2luVmlld1dpbjo6CiAgICAgcmV0dXJuIGluc3RhbmNlOwog
fQogCi1QbHVnaW5WaWV3V2luOjp+UGx1Z2luVmlld1dpbigpCitQbHVnaW5WaWV3Ojp+UGx1Z2lu
VmlldygpCiB7CiAgICAgc3RvcCgpOwogCkBAIC0xNDYwLDE0ICsxNDYwLDE0IEBAIFBsdWdpblZp
ZXdXaW46On5QbHVnaW5WaWV3V2luKCkKICAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOwogfQog
Ci12b2lkIFBsdWdpblZpZXdXaW46OmRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtKiBzdHJl
YW0pCit2b2lkIFBsdWdpblZpZXc6OmRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtKiBzdHJl
YW0pCiB7CiAgICAgQVNTRVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0pKTsKIAogICAgIG1f
c3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3V2luOjpkZXRlcm1p
bmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3ZvaWQgUGx1Z2luVmlldzo6ZGV0ZXJt
aW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbkxTID0gMHgwMDBCMEIy
NDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbGFzdEtub3duVW5sb2FkYWJsZVJlYWxQbGF5
ZXJWZXJzaW9uTVMgPSAweDAwMDYwMDAwOwpAQCAtMTUzMCw3ICsxNTMwLDcgQEAgdm9pZCBQbHVn
aW5WaWV3V2luOjpkZXRlcm1pbmVRdWlya3MoY29ucwogICAgIH0KIH0KIAotdm9pZCBQbHVnaW5W
aWV3V2luOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit2b2lkIFBsdWdpblZpZXc6OnNldFBh
cmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbVZhbHVlcykKIHsKICAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0g
cGFyYW1WYWx1ZXMuc2l6ZSgpKTsKIApAQCAtMTU1Myw3ICsxNTUzLDcgQEAgdm9pZCBQbHVnaW5W
aWV3V2luOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IAogICAgIG1fcGFyYW1Db3VudCA9IHBhcmFtQ291
bnQ7CiB9CiAKLVBsdWdpblZpZXdXaW46OlBsdWdpblZpZXdXaW4oRnJhbWUqIHBhcmVudEZyYW1l
LCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlV2luKiBwbHVnaW4sIEVsZW1lbnQq
IGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFt
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCitQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZyYW1lKiBw
YXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luLCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogICAgIDogbV9wYXJlbnRGcmFtZShwYXJl
bnRGcmFtZSkKICAgICAsIG1fcGx1Z2luKHBsdWdpbikKICAgICAsIG1fZWxlbWVudChlbGVtZW50
KQpAQCAtMTU2MSw5ICsxNTYxLDkgQEAgUGx1Z2luVmlld1dpbjo6UGx1Z2luVmlld1dpbihGcmFt
ZSogcGFyZQogICAgICwgbV91cmwodXJsKQogICAgICwgbV9iYXNlVVJMKG1fcGFyZW50RnJhbWUt
PmxvYWRlcigpLT5jb21wbGV0ZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJM
KCkpKQogICAgICwgbV9zdGF0dXMoUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAg
ICwgbV9yZXF1ZXN0VGltZXIodGhpcywgJlBsdWdpblZpZXdXaW46OnJlcXVlc3RUaW1lckZpcmVk
KQotICAgICwgbV9pbnZhbGlkYXRlVGltZXIodGhpcywgJlBsdWdpblZpZXdXaW46OmludmFsaWRh
dGVUaW1lckZpcmVkKQotICAgICwgbV9wb3BQb3B1cHNTdGF0ZVRpbWVyKHRoaXMsICZQbHVnaW5W
aWV3V2luOjpwb3BQb3B1cHNTdGF0ZVRpbWVyRmlyZWQpCisgICAgLCBtX3JlcXVlc3RUaW1lcih0
aGlzLCAmUGx1Z2luVmlldzo6cmVxdWVzdFRpbWVyRmlyZWQpCisgICAgLCBtX2ludmFsaWRhdGVU
aW1lcih0aGlzLCAmUGx1Z2luVmlldzo6aW52YWxpZGF0ZVRpbWVyRmlyZWQpCisgICAgLCBtX3Bv
cFBvcHVwc1N0YXRlVGltZXIodGhpcywgJlBsdWdpblZpZXc6OnBvcFBvcHVwc1N0YXRlVGltZXJG
aXJlZCkKICAgICAsIG1fcGFyYW1OYW1lcygwKQogICAgICwgbV9wYXJhbVZhbHVlcygwKQogICAg
ICwgbV93aW5kb3coMCkKQEAgLTE1OTYsNyArMTU5Niw3IEBAIFBsdWdpblZpZXdXaW46OlBsdWdp
blZpZXdXaW4oRnJhbWUqIHBhcmUKICAgICByZXNpemUoc2l6ZSk7CiB9CiAKLXZvaWQgUGx1Z2lu
Vmlld1dpbjo6aW5pdCgpCit2b2lkIFBsdWdpblZpZXc6OmluaXQoKQogewogICAgIGlmIChtX2hh
dmVJbml0aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTYyNSw3ICsxNjI1LDcgQEAgdm9p
ZCBQbHVnaW5WaWV3V2luOjppbml0KCkKICAgICAgICAgaWYgKG1faXNWaXNpYmxlKQogICAgICAg
ICAgICAgZmxhZ3MgfD0gV1NfVklTSUJMRTsKIAotICAgICAgICBtX3dpbmRvdyA9IENyZWF0ZVdp
bmRvd0V4KDAsIGtXZWJQbHVnaW5WaWV3V2luZG93Q2xhc3NOYW1lLCAwLCBmbGFncywKKyAgICAg
ICAgbV93aW5kb3cgPSBDcmVhdGVXaW5kb3dFeCgwLCBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFt
ZSwgMCwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwg
MCwgbV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIDAsIFBhZ2U6Omlu
c3RhbmNlSGFuZGxlKCksIDApOwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbGluZyBTZXRXaW5k
b3dMb25nUHRyQSBoZXJlIG1ha2VzIHRoZSB3aW5kb3cgcHJvYyBBU0NJSSwgd2hpY2ggaXMgcmVx
dWlyZWQgYnkgYXQgbGVhc3QKQEAgLTE2NDcsNyArMTY0Nyw3IEBAIHZvaWQgUGx1Z2luVmlld1dp
bjo6aW5pdCgpCiAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7
CiB9CiAKLXZvaWQgUGx1Z2luVmlld1dpbjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBQbHVnaW5WaWV3OjpkaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgQVNTRVJUKG1fbG9h
ZE1hbnVhbGx5KTsKICAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKQEAgLTE2NTgsNyArMTY1
OCw3IEBAIHZvaWQgUGx1Z2luVmlld1dpbjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGMKICAgICBtX21h
bnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKIH0KIAotdm9pZCBQ
bHVnaW5WaWV3V2luOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KQordm9pZCBQbHVnaW5WaWV3OjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQogewogICAgIEFTU0VSVChtX2xvYWRNYW51YWxseSk7CiAgICAgQVNTRVJUKG1fbWFu
dWFsU3RyZWFtKTsKQEAgLTE2NjYsNyArMTY2Niw3IEBAIHZvaWQgUGx1Z2luVmlld1dpbjo6ZGlk
UmVjZWl2ZURhdGEoY29uc3QKICAgICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZURhdGEoMCwg
ZGF0YSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3V2luOjpkaWRGaW5pc2hMb2FkaW5n
KCkKK3ZvaWQgUGx1Z2luVmlldzo6ZGlkRmluaXNoTG9hZGluZygpCiB7CiAgICAgQVNTRVJUKG1f
bG9hZE1hbnVhbGx5KTsKICAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOwpAQCAtMTY3NCw3ICsx
Njc0LDcgQEAgdm9pZCBQbHVnaW5WaWV3V2luOjpkaWRGaW5pc2hMb2FkaW5nKCkKICAgICBtX21h
bnVhbFN0cmVhbS0+ZGlkRmluaXNoTG9hZGluZygwKTsKIH0KIAotdm9pZCBQbHVnaW5WaWV3V2lu
OjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBQbHVnaW5WaWV3Ojpk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewogICAgIEFTU0VSVChtX2xvYWRN
YW51YWxseSk7CiAgICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKQEAgLTE2ODIsNyArMTY4Miw3
IEBAIHZvaWQgUGx1Z2luVmlld1dpbjo6ZGlkRmFpbChjb25zdCBSZXNvdXIKICAgICBtX21hbnVh
bFN0cmVhbS0+ZGlkRmFpbCgwLCBlcnJvcik7CiB9CiAKLXZvaWQgUGx1Z2luVmlld1dpbjo6c2V0
Q2FsbGluZ1BsdWdpbihib29sIGIpIGNvbnN0Cit2b2lkIFBsdWdpblZpZXc6OnNldENhbGxpbmdQ
bHVnaW4oYm9vbCBiKSBjb25zdAogewogICAgIGlmICghbV9xdWlya3MuY29udGFpbnMoUGx1Z2lu
UXVpcmtIYXNNb2RhbE1lc3NhZ2VMb29wKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY5NSw3ICsx
Njk1LDcgQEAgdm9pZCBQbHVnaW5WaWV3V2luOjpzZXRDYWxsaW5nUGx1Z2luKGJvbwogICAgIEFT
U0VSVChzX2NhbGxpbmdQbHVnaW4gPj0gMCk7CiB9CiAKLWJvb2wgUGx1Z2luVmlld1dpbjo6aXND
YWxsaW5nUGx1Z2luKCkKK2Jvb2wgUGx1Z2luVmlldzo6aXNDYWxsaW5nUGx1Z2luKCkKIHsKICAg
ICByZXR1cm4gc19jYWxsaW5nUGx1Z2luID4gMDsKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93
aW4vUGx1Z2luVmlld1dpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luVmlld1dpbi5oCShyZXZpc2lvbiAzMDAwOSkKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luVmlld1dpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxOCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5WaWV3V2luX0gKLSNkZWZpbmUgUGx1Z2luVmll
d1dpbl9ICi0KLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQot
I2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiS1VS
TC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiUGx1Z2luU3RyZWFt
LmgiCi0jaW5jbHVkZSAiUGx1Z2luUXVpcmtTZXQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIldpZGdldC5oIgotI2luY2x1ZGUg
Im5wYXBpLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgS0pTIHsKLSAgICBuYW1lc3BhY2Ug
QmluZGluZ3MgewotICAgICAgICBjbGFzcyBJbnN0YW5jZTsKLSAgICB9Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBFbGVtZW50OwotICAgIGNsYXNzIEZyYW1lOwotICAgIHN0
cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwotICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7Ci0gICAgY2xh
c3MgTW91c2VFdmVudDsKLSAgICBjbGFzcyBLVVJMOwotICAgIGNsYXNzIFBsdWdpbk1lc3NhZ2VU
aHJvdHRsZXJXaW47Ci0gICAgY2xhc3MgUGx1Z2luUGFja2FnZVdpbjsKLSAgICBjbGFzcyBQbHVn
aW5SZXF1ZXN0V2luOwotICAgIGNsYXNzIFBsdWdpblN0cmVhbTsKLSAgICBjbGFzcyBSZXNvdXJj
ZUVycm9yOwotICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci0KLSAgICBlbnVtIFBsdWdpblN0
YXR1cyB7Ci0gICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCi0gICAgICAgIFBs
dWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW4sCi0gICAgICAgIFBsdWdpblN0YXR1c0xvYWRlZFN1
Y2Nlc3NmdWxseQotICAgIH07Ci0KLSAgICBjbGFzcyBQbHVnaW5WaWV3V2luIDogcHVibGljIFdp
ZGdldCwgcHJpdmF0ZSBQbHVnaW5TdHJlYW1DbGllbnQgewotICAgIGZyaWVuZCBzdGF0aWMgTFJF
U1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJB
TSk7Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpblZpZXdXaW4oRnJhbWUqIHBhcmVudEZy
YW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZVdpbiogcGx1Z2luLCBFbGVtZW50Kiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9h
ZE1hbnVhbGx5KTsKLSAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlld1dpbigpOwotCi0gICAgICAg
IFBsdWdpblBhY2thZ2VXaW4qIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgp
OyB9Ci0gICAgICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0K
LQotICAgICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAg
IHN0YXRpYyBQbHVnaW5WaWV3V2luKiBjdXJyZW50UGx1Z2luVmlldygpOwotCi0gICAgICAgIEtK
Uzo6QmluZGluZ3M6Okluc3RhbmNlKiBiaW5kaW5nSW5zdGFuY2UoKTsKLQotICAgICAgICBQbHVn
aW5TdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KLQotICAgICAgICAv
LyBOUE4gZnVuY3Rpb25zCi0gICAgICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKLSAgICAgICAgTlBF
cnJvciBnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOwotICAgICAg
ICBOUEVycm9yIHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlm
eURhdGEpOwotICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUpOwot
ICAgICAgICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRh
cmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pOwotICAgICAgICBpbnQzMiB3cml0ZShOUFN0cmVhbSog
c3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcik7Ci0gICAgICAgIE5QRXJyb3IgZGVzdHJv
eVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwotICAgICAgICBjb25z
dCBjaGFyKiB1c2VyQWdlbnQoKTsKLSAgICAgICAgdm9pZCBzdGF0dXMoY29uc3QgY2hhciogbWVz
c2FnZSk7Ci0gICAgICAgIE5QRXJyb3IgZ2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZv
aWQqIHZhbHVlKTsKLSAgICAgICAgTlBFcnJvciBzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJs
ZSwgdm9pZCogdmFsdWUpOwotICAgICAgICB2b2lkIGludmFsaWRhdGVSZWN0KE5QUmVjdCopOwot
ICAgICAgICB2b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pOwotICAgICAgICB2b2lkIGZv
cmNlUmVkcmF3KCk7Ci0gICAgICAgIHZvaWQgcHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShib29sIHN0
YXRlKTsKLSAgICAgICAgdm9pZCBwb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLQotICAgICAgICBi
b29sIGFyZVBvcHVwc0FsbG93ZWQoKSBjb25zdDsKLQotICAgICAgICB2b2lkIGRpc2Nvbm5lY3RT
dHJlYW0oUGx1Z2luU3RyZWFtKik7Ci0gICAgICAgIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGlu
ZyhQbHVnaW5TdHJlYW0qIHN0cmVhbSkgeyBkaXNjb25uZWN0U3RyZWFtKHN0cmVhbSk7IH0KLQot
ICAgICAgICAvLyBXaWRnZXQgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFt
ZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5
Q2hhbmdlZCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHNob3coKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
KTsKLSAgICAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCopOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNo
VG9XaW5kb3coKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaEZyb21XaW5kb3coKTsKLQot
ICAgICAgICBMUkVTVUxUIHduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pOwotICAgICAgICBXTkRQUk9DIHBsdWdpblduZFByb2MoKSBj
b25zdCB7IHJldHVybiBtX3BsdWdpblduZFByb2M7IH0KLQotICAgICAgICAvLyBVc2VkIGZvciBt
YW51YWwgbG9hZGluZwotICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7Ci0gICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhcios
IGludCk7Ci0gICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygpOwotICAgICAgICB2b2lkIGRp
ZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwotCi0gICAgICAgIHN0YXRpYyBib29sIGlzQ2Fs
bGluZ1BsdWdpbigpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXJz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1WYWx1ZXMpOwotICAgICAgICB2b2lkIGluaXQoKTsKLSAgICAgICAgYm9vbCBzdGFydCgp
OwotICAgICAgICB2b2lkIHN0b3AoKTsKLSAgICAgICAgc3RhdGljIHZvaWQgc2V0Q3VycmVudFBs
dWdpblZpZXcoUGx1Z2luVmlld1dpbiopOwotICAgICAgICBOUEVycm9yIGxvYWQoY29uc3QgRnJh
bWVMb2FkUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7
Ci0gICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIq
IHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5v
dGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOwotICAg
ICAgICB2b2lkIHNldENhbGxpbmdQbHVnaW4oYm9vbCkgY29uc3Q7Ci0gICAgICAgIFJlZlB0cjxQ
bHVnaW5QYWNrYWdlV2luPiBtX3BsdWdpbjsKLSAgICAgICAgRWxlbWVudCogbV9lbGVtZW50Owot
ICAgICAgICBGcmFtZSogbV9wYXJlbnRGcmFtZTsKLSAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsK
LSAgICAgICAgS1VSTCBtX3VybDsKLSAgICAgICAgS1VSTCBtX2Jhc2VVUkw7Ci0gICAgICAgIFBs
dWdpblN0YXR1cyBtX3N0YXR1czsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+IG1faW52YWxpZFJl
Y3RzOwotCi0gICAgICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdFdpbiopOwot
ICAgICAgICB2b2lkIHNjaGVkdWxlUmVxdWVzdChQbHVnaW5SZXF1ZXN0V2luKik7Ci0gICAgICAg
IHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld1dpbj4qKTsKLSAgICAgICAg
dm9pZCBpbnZhbGlkYXRlVGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3V2luPiopOwotICAgICAg
ICBUaW1lcjxQbHVnaW5WaWV3V2luPiBtX3JlcXVlc3RUaW1lcjsKLSAgICAgICAgVGltZXI8UGx1
Z2luVmlld1dpbj4gbV9pbnZhbGlkYXRlVGltZXI7Ci0KLSAgICAgICAgdm9pZCBwb3BQb3B1cHNT
dGF0ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld1dpbj4qKTsKLSAgICAgICAgVGltZXI8UGx1
Z2luVmlld1dpbj4gbV9wb3BQb3B1cHNTdGF0ZVRpbWVyOwotCi0gICAgICAgIGJvb2wgZGlzcGF0
Y2hOUEV2ZW50KE5QRXZlbnQmKTsKLSAgICAgICAgT3duUHRyPFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW4+IG1fbWVzc2FnZVRocm90dGxlcjsKLQotICAgICAgICB2b2lkIHVwZGF0ZVdpbmRvdygp
IGNvbnN0OwotICAgICAgICB2b2lkIGRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKTsKLSAgICAgICAgdm9pZCBwYWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCopOwotICAgICAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVu
dCopOwotCi0gICAgICAgIGludCBtX21vZGU7Ci0gICAgICAgIGludCBtX3BhcmFtQ291bnQ7Ci0g
ICAgICAgIGNoYXIqKiBtX3BhcmFtTmFtZXM7Ci0gICAgICAgIGNoYXIqKiBtX3BhcmFtVmFsdWVz
OwotCi0gICAgICAgIENTdHJpbmcgbV9taW1lVHlwZTsKLSAgICAgICAgQ1N0cmluZyBtX3VzZXJB
Z2VudDsKLSAgICAgICAgCi0gICAgICAgIE5QUCBtX2luc3RhbmNlOwotICAgICAgICBOUFBfdCBt
X2luc3RhbmNlU3RydWN0OwotICAgICAgICBOUFdpbmRvdyBtX25wV2luZG93OwotCi0gICAgICAg
IFZlY3Rvcjxib29sLCA0PiBtX3BvcHVwU3RhdGVTdGFjazsKLQotICAgICAgICBIYXNoU2V0PFJl
ZlB0cjxQbHVnaW5TdHJlYW0+ID4gbV9zdHJlYW1zOwotICAgICAgICBWZWN0b3I8UGx1Z2luUmVx
dWVzdFdpbio+IG1fcmVxdWVzdHM7Ci0KLSAgICAgICAgUGx1Z2luUXVpcmtTZXQgbV9xdWlya3M7
Ci0gICAgICAgIGJvb2wgbV9pc1dpbmRvd2VkOwotICAgICAgICBib29sIG1faXNUcmFuc3BhcmVu
dDsKLSAgICAgICAgYm9vbCBtX2lzVmlzaWJsZTsKLSAgICAgICAgYm9vbCBtX2F0dGFjaGVkVG9X
aW5kb3c7Ci0gICAgICAgIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7Ci0KLSAgICAgICAgV05EUFJP
QyBtX3BsdWdpblduZFByb2M7Ci0gICAgICAgIEhXTkQgbV93aW5kb3c7IC8vIGZvciB3aW5kb3dl
ZCBwbHVnLWlucwotICAgICAgICBtdXRhYmxlIEludFJlY3QgbV9jbGlwUmVjdDsgLy8gVGhlIGNs
aXAgcmVjdCB0byBhcHBseSB0byBhIHdpbmRvd2VkIHBsdWctaW4KLSAgICAgICAgbXV0YWJsZSBJ
bnRSZWN0IG1fd2luZG93UmVjdDsgLy8gT3VyIHdpbmRvdyByZWN0LgotCi0gICAgICAgIHVuc2ln
bmVkIG1fbGFzdE1lc3NhZ2U7Ci0gICAgICAgIGJvb2wgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9j
OwotCi0gICAgICAgIGJvb2wgbV9sb2FkTWFudWFsbHk7Ci0gICAgICAgIFJlZlB0cjxQbHVnaW5T
dHJlYW0+IG1fbWFudWFsU3RyZWFtOwotCi0gICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3V2luKiBz
X2N1cnJlbnRQbHVnaW5WaWV3OwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIApJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9ucGFwaS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9ucGFwaS5jcHAJKHJldmlzaW9uIDMwMDA5KQorKysgV2Vi
Q29yZS9wbHVnaW5zL3dpbi9ucGFwaS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiUGx1
Z0luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlld1dpbi5oIgotI2luY2x1ZGUgIm5w
YXBpLmgiIC8vICNpbmNsdWRlcyA8d2luZG93cy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotLy8gVGhlIHBsdWdpbiB2aWV3IGlzIGFsd2F5cyB0aGUgbmRhdGEgb2YgdGhlIGluc3Rh
bmNlLC4gU29tZXRpbWVzLCBwbHVnLWlucyB3aWxsIGNhbGwgYW4gaW5zdGFuY2Utc3BlY2lmaWMg
ZnVuY3Rpb24KLS8vIHdpdGggYSBOVUxMIGluc3RhbmNlLiBUbyB3b3JrYXJvdW5kIHRoaXMsIGNh
bGwgdGhlIGxhc3QgcGx1Zy1pbiB2aWV3IHRoYXQgbWFkZSBhIGNhbGwgdG8gYSBwbHVnLWluLgot
Ly8gQ3VycmVudGx5LCB0aGUgY3VycmVudCBwbHVnLWluIHZpZXcgaXMgb25seSBzZXQgYmVmb3Jl
IE5QUF9OZXcgaW4gUGx1Z2luVmlld1dpbjo6c3RhcnQuCi0vLyBUaGlzIHNwZWNpZmljYWxseSB3
b3JrcyBhcm91bmQgRmxhc2ggYW5kIFNob2Nrd2F2ZS4gV2hlbiB3ZSBjYWxsIE5QUF9OZXcsIHRo
ZXkgY2FsbCBOUE5fVXNlcmFnZW50IHdpdGggYSBOVUxMIGluc3RhbmNlLgotc3RhdGljIFBsdWdp
blZpZXdXaW4qIHBsdWdpblZpZXdGb3JJbnN0YW5jZShOUFAgaW5zdGFuY2UpCi17Ci0gICAgaWYg
KGluc3RhbmNlICYmIGluc3RhbmNlLT5uZGF0YSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFBsdWdpblZpZXdXaW4qPihpbnN0YW5jZS0+bmRhdGEpOwotICAgIHJldHVybiBQbHVnaW5WaWV3
V2luOjpjdXJyZW50UGx1Z2luVmlldygpOwotfQotCi12b2lkKiBOUE5fTWVtQWxsb2ModWludDMy
IHNpemUpCi17Ci0gICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKLX0KLQotdm9pZCBOUE5fTWVtRnJl
ZSh2b2lkKiBwdHIpCi17Ci0gICAgZnJlZShwdHIpOwotfQotCi11aW50MzIgTlBOX01lbUZsdXNo
KHVpbnQzMiBzaXplKQotewotICAgIC8vIERvIG5vdGhpbmcKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBOUE5fUmVsb2FkUGx1Z2lucyhOUEJvb2wgcmVsb2FkUGFnZXMpCi17Ci0gICAgcmVmcmVz
aFBsdWdpbnMocmVsb2FkUGFnZXMpOwotfQotCi1OUEVycm9yIE5QTl9SZXF1ZXN0UmVhZChOUFN0
cmVhbSogc3RyZWFtLCBOUEJ5dGVSYW5nZSogcmFuZ2VMaXN0KQotewotICAgIHJldHVybiBOUEVS
Ul9TVFJFQU1fTk9UX1NFRUtBQkxFOwotfQotCi1OUEVycm9yIE5QTl9HZXRVUkxOb3RpZnkoTlBQ
IGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90
aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3RpZnlEYXRhKTsKLX0KLQotTlBFcnJvciBOUE5f
R2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQp
Ci17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTCh1
cmwsIHRhcmdldCk7Ci19Ci0KLU5QRXJyb3IgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGluc3RhbmNl
LCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3Qg
Y2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4g
cGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9zdFVSTE5vdGlmeSh1cmwsIHRhcmdl
dCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEpOwotfQotCi1OUEVycm9yIE5QTl9Qb3N0VVJM
KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQz
MiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCi17Ci0gICAgcmV0dXJuIHBsdWdp
blZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBvc3RVUkwodXJsLCB0YXJnZXQsIGxlbiwgYnVm
LCBmaWxlKTsKLX0KLQotTlBFcnJvciBOUE5fTmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1F
VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKQotewotICAg
IHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5uZXdTdHJlYW0odHlwZSwg
dGFyZ2V0LCBzdHJlYW0pOwotfQotCi1pbnQzMiBOUE5fV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0
cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+d3JpdGUoc3RyZWFtLCBsZW4sIGJ1ZmZlcik7
Ci19Ci0KLU5QRXJyb3IgTlBOX0Rlc3Ryb3lTdHJlYW0oTlBQIGluc3RhbmNlLCBOUFN0cmVhbSog
c3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCi17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pOwotfQotCi1jb25z
dCBjaGFyKiBOUE5fVXNlckFnZW50KE5QUCBpbnN0YW5jZSkKLXsKLSAgICBQbHVnaW5WaWV3V2lu
KiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKLQotICAgICAvLyBGSVhN
RTogU29tZSBwbHVnLWlucyBjYWxsIE5QTl9Vc2VyQWdlbnQgd2l0aCBhIG51bGwgaW5zdGFuY2Ug
aW4gdGhlaXIgTlBfaW5pdGlhbGl6ZSBmdW5jdGlvbiEKLSAgICAgLy8gV2UnZCBuZWVkIGEgd2F5
IHRvIGdldCBhIHVzZXIgYWdlbnQgd2l0aG91dCBoYXZpbmcgYSBmcmFtZSBhcm91bmQuCi0gICAg
IGlmICghdmlldykKLSAgICAgICAgIHJldHVybiAwOwotIAotICAgIHJldHVybiB2aWV3LT51c2Vy
QWdlbnQoKTsKLX0KLQotdm9pZCBOUE5fU3RhdHVzKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciog
bWVzc2FnZSkKLXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zdGF0dXMo
bWVzc2FnZSk7Ci19Ci0KLXZvaWQgTlBOX0ludmFsaWRhdGVSZWN0KE5QUCBpbnN0YW5jZSwgTlBS
ZWN0KiBpbnZhbGlkUmVjdCkKLXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5pbnZhbGlkYXRlUmVjdChpbnZhbGlkUmVjdCk7Ci19Ci0KLXZvaWQgTlBOX0ludmFsaWRhdGVS
ZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKQotewotICAgIHBsdWdp
blZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFsaWRhdGVSZWdpb24oaW52YWxpZFJlZ2lv
bik7Ci19Ci0KLXZvaWQgTlBOX0ZvcmNlUmVkcmF3KE5QUCBpbnN0YW5jZSkKLXsKLSAgICBwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5mb3JjZVJlZHJhdygpOwotfQotCi1OUEVycm9y
IE5QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSkKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0
VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKLX0KLQotTlBFcnJvciBOUE5fU2V0VmFsdWUoTlBQIGlu
c3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCi17Ci0gICByZXR1cm4g
cGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c2V0VmFsdWUodmFyaWFibGUsIHZhbHVl
KTsKLX0KLQotdm9pZCogTlBOX0dldEphdmFFbnYoKQotewotICAgIC8vIFVuc3VwcG9ydGVkCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFAgaW5zdGFuY2UpCi17
Ci0gICAgLy8gVW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZAotTlBOX1B1c2hQ
b3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCkKLXsKLSAgICBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wdXNoUG9wdXBzRW5hYmxlZFN0YXRlKGVu
YWJsZWQpOwotfQotCi12b2lkCi1OUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5j
ZSkKLXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3BQb3B1cHNFbmFi
bGVkU3RhdGUoKTsKLX0KSW5kZXg6IFdlYktpdC93aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC93aW4vV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAzMDAwOSkKKysrIFdlYktpdC93
aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw5ICs4Nyw5IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9QbHVnSW5JbmZvU3RvcmUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGFiYXNl
V2luLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5WaWV3V2luLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QbHVnaW5JbmZvU3RvcmUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGFiYXNl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5WaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVXaW4uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgpAQCAtNDM1LDcgKzQzNSw3IEBA
IHB1YmxpYzoKICAgICBDT01QdHI8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lcj4gbV9wb2xpY3lMaXN0
ZW5lcjsKICAgICAKICAgICAvLyBQb2ludHMgdG8gdGhlIHBsdWdpbiB2aWV3IHRoYXQgZGF0YSBz
aG91bGQgYmUgcmVkaXJlY3RlZCB0by4KLSAgICBQbHVnaW5WaWV3V2luKiBtX3BsdWdpblZpZXc7
CisgICAgUGx1Z2luVmlldyogbV9wbHVnaW5WaWV3OwogICAgIGJvb2wgbV9oYXNTZW50UmVzcG9u
c2VUb1BsdWdpbjsKIH07CiAKQEAgLTIzNDAsNyArMjM0MCw3IEBAIFBhc3NSZWZQdHI8RnJhbWU+
IFdlYkZyYW1lOjpjcmVhdGVGcmFtZSgKIAogV2lkZ2V0KiBXZWJGcmFtZTo6Y3JlYXRlUGx1Z2lu
KGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFs
bHkpCiB7Ci0gICAgUGx1Z2luVmlld1dpbiogcGx1Z2luVmlldyA9IFBsdWdpbkRhdGFiYXNlV2lu
OjppbnN0YWxsZWRQbHVnaW5zKCktPmNyZWF0ZVBsdWdpblZpZXcoY29yZSh0aGlzKSwgcGx1Z2lu
U2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUsIGxv
YWRNYW51YWxseSk7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IFBsdWdpbkRhdGFiYXNl
OjppbnN0YWxsZWRQbHVnaW5zKCktPmNyZWF0ZVBsdWdpblZpZXcoY29yZSh0aGlzKSwgcGx1Z2lu
U2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUsIGxv
YWRNYW51YWxseSk7CiAKICAgICBpZiAocGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gUGx1Z2luU3Rh
dHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQogICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKQEAgLTI0
MDUsMTIgKzI0MDUsMTIgQEAgdm9pZCBXZWJGcmFtZTo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lk
ZwogewogICAgIC8vIElkZWFsbHksIHRoaXMgZnVuY3Rpb24gc2hvdWxkbid0IGJlIG5lY2Vzc2Fy
eSwgc2VlIDxyZGFyOi8vcHJvYmxlbS80ODUyODg5PgogCi0gICAgZC0+bV9wbHVnaW5WaWV3ID0g
c3RhdGljX2Nhc3Q8UGx1Z2luVmlld1dpbio+KHBsdWdpbldpZGdldCk7CisgICAgZC0+bV9wbHVn
aW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHBsdWdpbldpZGdldCk7CiB9CiAKIFdp
ZGdldCogV2ViRnJhbWU6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYgcGx1
Z2luU2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgLypiYXNlVVJMKi8sIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1W
YWx1ZXMpCiB7Ci0gICAgUGx1Z2luVmlld1dpbiogcGx1Z2luVmlldyA9IFBsdWdpbkRhdGFiYXNl
V2luOjppbnN0YWxsZWRQbHVnaW5zKCktPgorICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBQ
bHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT4KICAgICAgICAgY3JlYXRlUGx1Z2lu
Vmlldyhjb3JlKHRoaXMpLCBwbHVnaW5TaXplLCBlbGVtZW50LCBLVVJMKCksIHBhcmFtTmFtZXMs
IHBhcmFtVmFsdWVzLCAiYXBwbGljYXRpb24veC1qYXZhLWFwcGxldCIsIGZhbHNlKTsKIAogICAg
IC8vIENoZWNrIGlmIHRoZSBwbHVnaW4gY2FuIGJlIGxvYWRlZCBzdWNjZXNzZnVsbHkKQEAgLTI0
NDMsNyArMjQ0Myw3IEBAIE9iamVjdENvbnRlbnRUeXBlIFdlYkZyYW1lOjpvYmplY3RDb250ZW4K
ICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKG1pbWVU
eXBlKSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRJbWFnZTsKIAotICAg
IGlmIChQbHVnaW5EYXRhYmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVn
aXN0ZXJlZChtaW1lVHlwZSkpCisgICAgaWYgKFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVn
aW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuIFdl
YkNvcmU6Ok9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsKIAogICAgIGlmIChNSU1FVHlwZVJl
Z2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpKQpJbmRleDogV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3Bw
CShyZXZpc2lvbiAzMDAwOSkKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDkgKzgzLDkgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRF
dmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2ZW50Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybVdoZWVsRXZlbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdp
bkRhdGFiYXNlV2luLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbHVnSW5JbmZvU3RvcmUuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BsdWdpblZpZXdXaW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsdWdp
bkRhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5JbmZvU3RvcmUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1BsdWdpblZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJh
Y2tlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CkBAIC0xNTk4LDcgKzE1OTgsNyBAQCBzdGF0
aWMgTFJFU1VMVCBDQUxMQkFDSyBXZWJWaWV3V25kUHJvYyhICiAgICAgLy8gdGhleSBhcmUgZGVs
aXZlcmVkLiBXZSByZXBvc3QgcGFpbnQgbWVzc2FnZXMgc28gdGhhdCB3ZSBldmVudHVhbGx5IGdl
dAogICAgIC8vIGEgY2hhbmNlIHRvIHBhaW50IG9uY2UgdGhlIG1vZGFsIGxvb3AgaGFzIGV4aXRl
ZCwgYnV0IG90aGVyIG1lc3NhZ2VzCiAgICAgLy8gYXJlbid0IHNhZmUgdG8gcmVwb3N0LCBzbyB3
ZSBqdXN0IGRyb3AgdGhlbS4KLSAgICBpZiAoUGx1Z2luVmlld1dpbjo6aXNDYWxsaW5nUGx1Z2lu
KCkpIHsKKyAgICBpZiAoUGx1Z2luVmlldzo6aXNDYWxsaW5nUGx1Z2luKCkpIHsKICAgICAgICAg
aWYgKG1lc3NhZ2UgPT0gV01fUEFJTlQpCiAgICAgICAgICAgICBQb3N0TWVzc2FnZShoV25kLCBt
ZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTk3NSw3ICsx
OTc1LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpjYW5TaAogCiAgICAg
KmNhblNob3cgPSBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUobWlt
ZVR5cGVTdHIpIHx8CiAgICAgICAgIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTm9uSW1h
Z2VNSU1FVHlwZShtaW1lVHlwZVN0cikgfHwKLSAgICAgICAgUGx1Z0luSW5mb1N0b3JlOjpzdXBw
b3J0c01JTUVUeXBlKG1pbWVUeXBlU3RyKTsKKyAgICAgICAgUGx1Z2luSW5mb1N0b3JlOjpzdXBw
b3J0c01JTUVUeXBlKG1pbWVUeXBlU3RyKTsKICAgICAKICAgICByZXR1cm4gU19PSzsKIH0KQEAg
LTQyMDUsNyArNDIwNSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c2V0
QWwKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6YWRkQWRkaXRpb25hbFBsdWdp
blBhdGgoIAogICAgICAgICAvKiBbaW5dICovIEJTVFIgcGF0aCkKIHsKLSAgICBQbHVnaW5EYXRh
YmFzZVdpbjo6aW5zdGFsbGVkUGx1Z2lucygpLT5hZGRFeHRyYVBsdWdpblBhdGgoU3RyaW5nKHBh
dGgsIFN5c1N0cmluZ0xlbihwYXRoKSkpOworICAgIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQ
bHVnaW5zKCktPmFkZEV4dHJhUGx1Z2luUGF0aChTdHJpbmcocGF0aCwgU3lzU3RyaW5nTGVuKHBh
dGgpKSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18966</attachid>
            <date>2008-02-06 12:42:20 -0800</date>
            <delta_ts>2008-02-07 13:29:27 -0800</delta_ts>
            <desc>Patch for FileSystem changes</desc>
            <filename>webkit-filesystem.patch</filename>
            <type>text/plain</type>
            <size>6444</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDA0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMDgtMDItMDYgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBSZWRlZmluZSBzb21lIHBsYXRmb3JtLXNwZWNpZmljIHR5cGVzIGFzIGNyb3NzLXBsYXRm
b3JtIHR5cGVzCisgICAgICAgIEFkZCBwYXRoR2V0RmlsZU5hbWUgbWV0aG9kIHRvIGdldCB0aGUg
ZmlsZW5hbWUgZnJvbSBhIHBhdGggc3RyaW5nCisgICAgICAgIEFkZCB1bmxvYWRNb2R1bGUgbWV0
aG9kIHRvIHVubG9hZCBhIGxvYWRhYmxlIG1vZHVsZSBmcm9tIHRoZSBwcm9jZXNzCisgICAgICAg
IEltcGxlbWVudCBuZXcgbWV0aG9kcyBmb3IgR1RLKyBhbmQgV2luZG93cworICAgICAgICBJbXBs
ZW1lbnQgbWlzc2luZyBob21lRGlyZWN0b3J5UGF0aCBtZXRob2QgZm9yIEdUSysKKyAgICAgICAg
QWRkIHN0dWIgbWV0aG9kcyBmb3IgbmV3IGFuZCBtaXNzaW5nIG1ldGhvZHMgZm9yIFd4IGFuZCBR
dAorCisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9GaWxlU3lzdGVtR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9GaWxlU3lzdGVt
UXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS93eC9GaWxlU3lzdGVtV3guY3BwOgorIAogMjAwOC0wMi0wNiAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhhdGNo
ZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMzAwNDcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTAgQEAK
ICNpZm5kZWYgRmlsZVN5c3RlbV9oCiAjZGVmaW5lIEZpbGVTeXN0ZW1faAogCisjaWYgUExBVEZP
Uk0oR1RLKQorI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CiAKIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZEYXRhKiBDRkRhdGFSZWY7CkBA
IC00MSw5ICs0NSwxNyBAQCBjbGFzcyBTdHJpbmc7CiAKICNpZiBQTEFURk9STShXSU4pCiB0eXBl
ZGVmIEhBTkRMRSBQbGF0Zm9ybUZpbGVIYW5kbGU7Cit0eXBlZGVmIEZJTEVUSU1FIFBsYXRmb3Jt
RmlsZVRpbWU7Cit0eXBlZGVmIEhNT0RVTEUgUGxhdGZvcm1Nb2R1bGU7CiBjb25zdCBQbGF0Zm9y
bUZpbGVIYW5kbGUgaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZB
TFVFOwogI2Vsc2UKIHR5cGVkZWYgaW50IFBsYXRmb3JtRmlsZUhhbmRsZTsKK3R5cGVkZWYgdGlt
ZV90IFBsYXRmb3JtRmlsZVRpbWU7CisjaWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBHTW9kdWxl
KiBQbGF0Zm9ybU1vZHVsZTsKKyNlbHNlCit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtTW9kdWxlOwor
I2VuZGlmCiBjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUgaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRs
ZSA9IC0xOwogI2VuZGlmCiAKQEAgLTU0LDYgKzY2LDcgQEAgYm9vbCBmaWxlU2l6ZShjb25zdCBT
dHJpbmcmLCBsb25nIGxvbmcmIAogU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KTsKIGJvb2wgbWFrZUFsbERp
cmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCk7CiBTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgo
KTsKK1N0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJik7CiAKIENTdHJpbmcgZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYpOwogCkBAIC02NCw2ICs3Nyw5IEBA
IENTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgY2hhciogcHIKIHZvaWQgY2xvc2VGaWxl
KFBsYXRmb3JtRmlsZUhhbmRsZSYpOwogaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CiAKKy8qIE1ldGhvZHMgZm9yIGRlYWxp
bmcgd2l0aCBsb2FkYWJsZSBtb2R1bGVzICovCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1v
ZHVsZSk7CisKICNpZiBQTEFURk9STShXSU4pCiBTdHJpbmcgbG9jYWxVc2VyU3BlY2lmaWNTdG9y
YWdlRGlyZWN0b3J5KCk7CiBTdHJpbmcgcm9hbWluZ1VzZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3Rv
cnkoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCShyZXZpc2lv
biAzMDA0NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDIwIEBAIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNv
bnN0IFN0cmluZyYgcGEKICAgICByZXR1cm4gcmVzdWx0ID09IDA7CiB9CiAKK1N0cmluZyBob21l
RGlyZWN0b3J5UGF0aCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZ19nZXRfaG9t
ZV9kaXIoKSk7Cit9CisKK1N0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRo
TmFtZSkKK3sKKyAgICBjaGFyKiBiYXNlTmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUocGF0aE5h
bWUudXRmOCgpLmRhdGEoKSk7CisgICAgU3RyaW5nIGZpbGVOYW1lID0gU3RyaW5nOjpmcm9tVVRG
OChiYXNlTmFtZSk7CisgICAgZ19mcmVlKGJhc2VOYW1lKTsKKworICAgIHJldHVybiBmaWxlTmFt
ZTsKK30KKwogQ1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBjaGFyKiBwcmVmaXgsIFBs
YXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogewogICAgIGdjaGFyKiBmaWxlbmFtZSA9IGdfc3Ry
ZHVwX3ByaW50ZigiJXNYWFhYWFgiLCBwcmVmaXgpOwpAQCAtMTQ1LDQgKzE1OSw5IEBAIGludCB3
cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGwKIAogICAgIHJldHVybiB0b3RhbEJ5
dGVzV3JpdHRlbjsKIH0KKworYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxl
KQoreworICAgIHJldHVybiBnX21vZHVsZV9jbG9zZShtb2R1bGUpOworfQogfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0LmNwcAkocmV2aXNpb24gMzAwNDcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL3F0L0ZpbGVTeXN0ZW1RdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU3RhaWtvcyBDb21wdXRpbmcgU2VydmljZXMgSW5j
LgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIExUZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsNiArNjksMTggQEAgU3RyaW5nIHBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdAogICAgIHJldHVybiBRRGlyKHBhdGgpLmZp
bGVQYXRoKGNvbXBvbmVudCk7CiB9CiAKK1N0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3Ry
aW5nJiBwYXRoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0KIAogLy8gdmltOiB0
cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCShy
ZXZpc2lvbiAzMDA0NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDExIEBAIFN0cmluZyBob21lRGlyZWN0b3J5
UGF0aCgpCiAgICAgcmV0dXJuICIiOwogfQogCitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKFBhdGhGaW5kRmlsZU5hbWUoU3Ry
aW5nKHBhdGgpLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpKTsKK30KKwogc3RhdGlj
IFN0cmluZyBidW5kbGVOYW1lKCkKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKQEAg
LTIwMiw2ICsyMDcsMTIgQEAgaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bAogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYnl0ZXNX
cml0dGVuKTsKIH0KKworYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQor
eworICAgIHJldHVybiA6OkZyZWVMaWJyYXJ5KG1vZHVsZSk7Cit9CisKIFN0cmluZyBsb2NhbFVz
ZXJTcGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKQogewogICAgIHJldHVybiBjYWNoZWRTdG9yYWdl
RGlyZWN0b3J5KENTSURMX0xPQ0FMX0FQUERBVEEpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93
eC9GaWxlU3lzdGVtV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd3gvRmls
ZVN5c3RlbVd4LmNwcAkocmV2aXNpb24gMzAwNDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L0Zp
bGVTeXN0ZW1XeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw5IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA3IEtldmluIE9sbGl2aWVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLgogICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgpA
QCAtNjksNCArNzEsNDAgQEAgU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBT
dAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAorU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3Ry
aW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitDU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxl
KGNvbnN0IGNoYXIqIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIGhhbmRsZSA9IGludmFsaWRQbGF0Zm9ybUhhbmRsZTsKKyAgICByZXR1
cm4gQ1N0cmluZygpOworfQorCit2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2ludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1N
b2R1bGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18989</attachid>
            <date>2008-02-07 14:22:18 -0800</date>
            <delta_ts>2008-02-08 22:49:45 -0800</delta_ts>
            <desc>Updated patch to fix a few small issues with Wx and Qt changes</desc>
            <filename>webkit-filesystem.patch</filename>
            <type>text/plain</type>
            <size>6801</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDA3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMDgtMDItMDcgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBSZWRlZmluZSBzb21lIHBsYXRmb3JtLXNwZWNpZmljIHR5cGVzIGFzIGNyb3NzLXBsYXRm
b3JtIHR5cGVzCisgICAgICAgIEFkZCBwYXRoR2V0RmlsZU5hbWUgbWV0aG9kIHRvIGdldCB0aGUg
ZmlsZW5hbWUgZnJvbSBhIHBhdGggc3RyaW5nCisgICAgICAgIEFkZCB1bmxvYWRNb2R1bGUgbWV0
aG9kIHRvIHVubG9hZCBhIGxvYWRhYmxlIG1vZHVsZSBmcm9tIHRoZSBwcm9jZXNzCisgICAgICAg
IEltcGxlbWVudCBuZXcgbWV0aG9kcyBmb3IgR1RLKyBhbmQgV2luZG93cworICAgICAgICBJbXBs
ZW1lbnQgbWlzc2luZyBob21lRGlyZWN0b3J5UGF0aCBtZXRob2QgZm9yIEdUSysKKyAgICAgICAg
QWRkIHN0dWIgbWV0aG9kcyBmb3IgbmV3IGFuZCBtaXNzaW5nIG1ldGhvZHMgZm9yIFd4IGFuZCBR
dAorCisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9GaWxlU3lzdGVtR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9GaWxlU3lzdGVt
UXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS93eC9GaWxlU3lzdGVtV3guY3BwOgorCiAyMDA4LTAyLTA3ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggZm9yIGJ1ZyA2MjQ4LCBpbXBs
ZW1lbnQgdGhlIG50aC0qIENTUzMgc2VsZWN0b3JzLiAgUGF0Y2ggYmFzZWQgb24gb3JpZ2luYWwg
S0hUTUwgd29yayBmcm9tIEFsbGFuIEplbnNlbgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
U3lzdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHJl
dmlzaW9uIDMwMDczKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDEwIEBACiAjaWZuZGVmIEZpbGVTeXN0ZW1faAogI2RlZmluZSBG
aWxlU3lzdGVtX2gKIAorI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDxnbW9kdWxlLmg+Cisj
ZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCiB0eXBlZGVmIGNvbnN0IHN0cnVj
dCBfX0NGRGF0YSogQ0ZEYXRhUmVmOwpAQCAtNDEsOSArNDUsMTcgQEAgY2xhc3MgU3RyaW5nOwog
CiAjaWYgUExBVEZPUk0oV0lOKQogdHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1GaWxlSGFuZGxlOwor
dHlwZWRlZiBGSUxFVElNRSBQbGF0Zm9ybUZpbGVUaW1lOwordHlwZWRlZiBITU9EVUxFIFBsYXRm
b3JtTW9kdWxlOwogY29uc3QgUGxhdGZvcm1GaWxlSGFuZGxlIGludmFsaWRQbGF0Zm9ybUZpbGVI
YW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKICNlbHNlCiB0eXBlZGVmIGludCBQbGF0Zm9y
bUZpbGVIYW5kbGU7Cit0eXBlZGVmIHRpbWVfdCBQbGF0Zm9ybUZpbGVUaW1lOworI2lmIFBMQVRG
T1JNKEdUSykKK3R5cGVkZWYgR01vZHVsZSogUGxhdGZvcm1Nb2R1bGU7CisjZWxzZQordHlwZWRl
ZiB2b2lkKiBQbGF0Zm9ybU1vZHVsZTsKKyNlbmRpZgogY29uc3QgUGxhdGZvcm1GaWxlSGFuZGxl
IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgPSAtMTsKICNlbmRpZgogCkBAIC01NCw2ICs2Niw3
IEBAIGJvb2wgZmlsZVNpemUoY29uc3QgU3RyaW5nJiwgbG9uZyBsb25nJiAKIFN0cmluZyBwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNv
bXBvbmVudCk7CiBib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpOwog
U3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCk7CitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0
IFN0cmluZyYpOwogCiBDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJp
bmcmKTsKIApAQCAtNjQsNiArNzcsOSBAQCBDU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0
IGNoYXIqIHByCiB2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKIGludCB3cml0
ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
OwogCisvKiBNZXRob2RzIGZvciBkZWFsaW5nIHdpdGggbG9hZGFibGUgbW9kdWxlcyAqLworYm9v
bCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUpOworCiAjaWYgUExBVEZPUk0oV0lOKQogU3Ry
aW5nIGxvY2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpOwogU3RyaW5nIHJvYW1pbmdV
c2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9GaWxlU3lzdGVtR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9G
aWxlU3lzdGVtR3RrLmNwcAkocmV2aXNpb24gMzAwNzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9GaWxlU3lzdGVtR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiwyMCBAQCBi
b29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhCiAgICAgcmV0dXJuIHJlc3Vs
dCA9PSAwOwogfQogCitTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KGdfZ2V0X2hvbWVfZGlyKCkpOworfQorCitTdHJpbmcgcGF0aEdldEZp
bGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aE5hbWUpCit7CisgICAgY2hhciogYmFzZU5hbWUgPSBn
X3BhdGhfZ2V0X2Jhc2VuYW1lKHBhdGhOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIFN0cmluZyBm
aWxlTmFtZSA9IFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUpOworICAgIGdfZnJlZShiYXNlTmFt
ZSk7CisKKyAgICByZXR1cm4gZmlsZU5hbWU7Cit9CisKIENTdHJpbmcgb3BlblRlbXBvcmFyeUZp
bGUoY29uc3QgY2hhciogcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKIHsKICAg
ICBnY2hhciogZmlsZW5hbWUgPSBnX3N0cmR1cF9wcmludGYoIiVzWFhYWFhYIiwgcHJlZml4KTsK
QEAgLTE0NSw0ICsxNTksOSBAQCBpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhh
bmRsCiAKICAgICByZXR1cm4gdG90YWxCeXRlc1dyaXR0ZW47CiB9CisKK2Jvb2wgdW5sb2FkTW9k
dWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKK3sKKyAgICByZXR1cm4gZ19tb2R1bGVfY2xvc2Uo
bW9kdWxlKTsKK30KIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZpbGVTeXN0ZW1RdC5jcHAJKHJl
dmlzaW9uIDMwMDczKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IFN0YWlr
b3MgQ29tcHV0aW5nIFNlcnZpY2VzIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlcgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMVGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDYgKzI5LDExIEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDxQbGF0Zm9ybVN0cmluZy5oPgogI2luY2x1
ZGUgPFFGaWxlPgogI2luY2x1ZGUgPFFGaWxlSW5mbz4KQEAgLTY4LDYgKzc0LDE4IEBAIFN0cmlu
ZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3QKICAgICByZXR1cm4gUURpcihwYXRo
KS5maWxlUGF0aChjb21wb25lbnQpOwogfQogCitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9CiAKIC8vIHZp
bTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAkocmV2aXNpb24gMzAwNzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCwxMSBAQCBTdHJpbmcgaG9tZURpcmVj
dG9yeVBhdGgoKQogICAgIHJldHVybiAiIjsKIH0KIAorU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShj
b25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIFN0cmluZyhQYXRoRmluZEZpbGVOYW1l
KFN0cmluZyhwYXRoKS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSk7Cit9CisKIHN0
YXRpYyBTdHJpbmcgYnVuZGxlTmFtZSgpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7
CkBAIC0yMDIsNiArMjA3LDEyIEBAIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUg
aGFuZGwKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGJ5
dGVzV3JpdHRlbik7CiB9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVs
ZSkKK3sKKyAgICByZXR1cm4gOjpGcmVlTGlicmFyeShtb2R1bGUpOworfQorCiBTdHJpbmcgbG9j
YWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCkKIHsKICAgICByZXR1cm4gY2FjaGVkU3Rv
cmFnZURpcmVjdG9yeShDU0lETF9MT0NBTF9BUFBEQVRBKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vd3gvRmlsZVN5c3RlbVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4
L0ZpbGVTeXN0ZW1XeC5jcHAJKHJldmlzaW9uIDMwMDczKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93
eC9GaWxlU3lzdGVtV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsOSBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllcgotICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4KICAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1l
dDoKQEAgLTY5LDQgKzcxLDQwIEBAIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29u
c3QgU3QKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKK1N0cmluZyBob21lRGlyZWN0b3J5UGF0
aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisK
K1N0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworQ1N0cmluZyBvcGVuVGVtcG9yYXJ5
RmlsZShjb25zdCBjaGFyKiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaGFuZGxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhh
bmRsZTsKKyAgICByZXR1cm4gQ1N0cmluZygpOworfQorCit2b2lkIGNsb3NlRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2ludCB3cml0ZVRv
RmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCB1bmxvYWRN
b2R1bGUoUGxhdGZvcm1Nb2R1bGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19004</attachid>
            <date>2008-02-08 07:15:27 -0800</date>
            <delta_ts>2008-02-14 11:53:16 -0800</delta_ts>
            <desc>Updated patch per Jon&apos;s comments</desc>
            <filename>webkit-filesystem.patch</filename>
            <type>text/plain</type>
            <size>6706</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDA5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMDgtMDItMDggIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBKb24gSG9uZXljdXR0LgorCisgICAg
ICAgIFJlZGVmaW5lIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMgYXMgY3Jvc3MtcGxhdGZv
cm0gdHlwZXMKKyAgICAgICAgQWRkIHBhdGhHZXRGaWxlTmFtZSBtZXRob2QgdG8gZ2V0IHRoZSBm
aWxlbmFtZSBmcm9tIGEgcGF0aCBzdHJpbmcKKyAgICAgICAgQWRkIHVubG9hZE1vZHVsZSBtZXRo
b2QgdG8gdW5sb2FkIGEgbG9hZGFibGUgbW9kdWxlIGZyb20gdGhlIHByb2Nlc3MKKyAgICAgICAg
SW1wbGVtZW50IG5ldyBtZXRob2RzIGZvciBHVEsrIGFuZCBXaW5kb3dzCisgICAgICAgIEltcGxl
bWVudCBtaXNzaW5nIGhvbWVEaXJlY3RvcnlQYXRoIG1ldGhvZCBmb3IgR1RLKworICAgICAgICBB
ZGQgc3R1YiBtZXRob2RzIGZvciBuZXcgYW5kIG1pc3NpbmcgbWV0aG9kcyBmb3IgV3ggYW5kIFF0
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3RrL0ZpbGVTeXN0ZW1HdGsuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0ZpbGVTeXN0ZW1R
dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL3d4L0ZpbGVTeXN0ZW1XeC5jcHA6CisKIDIwMDgtMDItMDggIFBpZXJyZS1M
dWMgQmVhdWRvaW4gIDxwaWVycmUtbHVjLmJlYXVkb2luQGNvbGxhYm9yYS5jby51az4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBBbHAgVG9rZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVT
eXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAkocmV2
aXNpb24gMzAwOTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsMTAgQEAKICNpZm5kZWYgRmlsZVN5c3RlbV9oCiAjZGVmaW5lIEZp
bGVTeXN0ZW1faAogCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNl
bmRpZgorCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKIHR5cGVkZWYgY29uc3Qgc3RydWN0
IF9fQ0ZEYXRhKiBDRkRhdGFSZWY7CkBAIC00MSw5ICs0NSwxNyBAQCBjbGFzcyBTdHJpbmc7CiAK
ICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIEhBTkRMRSBQbGF0Zm9ybUZpbGVIYW5kbGU7Cit0
eXBlZGVmIEZJTEVUSU1FIFBsYXRmb3JtRmlsZVRpbWU7Cit0eXBlZGVmIEhNT0RVTEUgUGxhdGZv
cm1Nb2R1bGU7CiBjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUgaW52YWxpZFBsYXRmb3JtRmlsZUhh
bmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogI2Vsc2UKIHR5cGVkZWYgaW50IFBsYXRmb3Jt
RmlsZUhhbmRsZTsKK3R5cGVkZWYgdGltZV90IFBsYXRmb3JtRmlsZVRpbWU7CisjaWYgUExBVEZP
Uk0oR1RLKQordHlwZWRlZiBHTW9kdWxlKiBQbGF0Zm9ybU1vZHVsZTsKKyNlbHNlCit0eXBlZGVm
IHZvaWQqIFBsYXRmb3JtTW9kdWxlOworI2VuZGlmCiBjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUg
aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IC0xOwogI2VuZGlmCiAKQEAgLTU1LDYgKzY3LDcg
QEAgYm9vbCBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbgogU3RyaW5nIHBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29t
cG9uZW50KTsKIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCk7CiBT
dHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKTsKK1N0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3Qg
U3RyaW5nJik7CiAKIENTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmlu
ZyYpOwogCkBAIC02NSw2ICs3OCw5IEBAIENTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3Qg
Y2hhciogcHIKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYpOwogaW50IHdyaXRl
VG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7
CiAKKy8vIE1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCBsb2FkYWJsZSBtb2R1bGVzCitib29sIHVu
bG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSk7CisKICNpZiBQTEFURk9STShXSU4pCiBTdHJpbmcg
bG9jYWxVc2VyU3BlY2lmaWNTdG9yYWdlRGlyZWN0b3J5KCk7CiBTdHJpbmcgcm9hbWluZ1VzZXJT
cGVjaWZpY1N0b3JhZ2VEaXJlY3RvcnkoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0Zp
bGVTeXN0ZW1HdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVT
eXN0ZW1HdGsuY3BwCShyZXZpc2lvbiAzMDA5MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0Zp
bGVTeXN0ZW1HdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDIwIEBAIGJvb2wg
bWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGEKICAgICByZXR1cm4gcmVzdWx0ID09
IDA7CiB9CiAKK1N0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoZ19nZXRfaG9tZV9kaXIoKSk7Cit9CisKK1N0cmluZyBwYXRoR2V0RmlsZU5h
bWUoY29uc3QgU3RyaW5nJiBwYXRoTmFtZSkKK3sKKyAgICBjaGFyKiBiYXNlTmFtZSA9IGdfcGF0
aF9nZXRfYmFzZW5hbWUocGF0aE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgU3RyaW5nIGZpbGVO
YW1lID0gU3RyaW5nOjpmcm9tVVRGOChiYXNlTmFtZSk7CisgICAgZ19mcmVlKGJhc2VOYW1lKTsK
KworICAgIHJldHVybiBmaWxlTmFtZTsKK30KKwogQ1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShj
b25zdCBjaGFyKiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogewogICAgIGdj
aGFyKiBmaWxlbmFtZSA9IGdfc3RyZHVwX3ByaW50ZigiJXNYWFhYWFgiLCBwcmVmaXgpOwpAQCAt
MTUyLDQgKzE2Niw5IEBAIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGwK
IAogICAgIHJldHVybiB0b3RhbEJ5dGVzV3JpdHRlbjsKIH0KKworYm9vbCB1bmxvYWRNb2R1bGUo
UGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQoreworICAgIHJldHVybiBnX21vZHVsZV9jbG9zZShtb2R1
bGUpOworfQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0LmNwcAkocmV2aXNp
b24gMzAwOTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZpbGVTeXN0ZW1RdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU3RhaWtvcyBD
b21wdXRpbmcgU2VydmljZXMgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
NiArMjksMTAgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8
UUZpbGU+CkBAIC03NSw2ICs4MCwxOCBAQCBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KGNvbnN0IFN0CiAgICAgcmV0dXJuIFFEaXIocGF0aCkuZmlsZVBhdGgoY29tcG9uZW50KTsKIH0K
IAorU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIHVubG9hZE1vZHVsZShQ
bGF0Zm9ybU1vZHVsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93
aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHJldmlzaW9uIDMwMDkwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS93aW4vRmlsZVN5c3RlbVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsMTEg
QEAgU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKICAgICByZXR1cm4gIiI7CiB9CiAKK1N0cmlu
ZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBTdHJp
bmcoUGF0aEZpbmRGaWxlTmFtZShTdHJpbmcocGF0aCkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWlu
YXRpb24oKSkpOworfQorCiBzdGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWUoKQogewogICAgIHN0YXRp
YyBib29sIGluaXRpYWxpemVkOwpAQCAtMjE0LDYgKzIxOSwxMiBAQCBpbnQgd3JpdGVUb0ZpbGUo
UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsCiAgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihieXRlc1dyaXR0ZW4pOwogfQorCitib29sIHVubG9hZE1vZHVsZShQ
bGF0Zm9ybU1vZHVsZSBtb2R1bGUpCit7CisgICAgcmV0dXJuIDo6RnJlZUxpYnJhcnkobW9kdWxl
KTsKK30KKwogU3RyaW5nIGxvY2FsVXNlclNwZWNpZmljU3RvcmFnZURpcmVjdG9yeSgpCiB7CiAg
ICAgcmV0dXJuIGNhY2hlZFN0b3JhZ2VEaXJlY3RvcnkoQ1NJRExfTE9DQUxfQVBQREFUQSk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L0ZpbGVTeXN0ZW1XeC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS93eC9GaWxlU3lzdGVtV3guY3BwCShyZXZpc2lvbiAzMDA5MCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vd3gvRmlsZVN5c3RlbVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw3ICsxLDkgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgS2V2aW4gT2xsaXZpZXIKLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBM
dGQuCiAgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKICAqIGFyZSBtZXQ6CkBAIC03NSw0ICs3Nyw0MCBAQCBTdHJpbmcgcGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCitTdHJp
bmcgaG9tZURpcmVjdG9yeVBhdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0NT
dHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgY2hhciogcHJlZml4LCBQbGF0Zm9ybUZpbGVI
YW5kbGUmIGhhbmRsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGhhbmRsZSA9IGlu
dmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisgICAgcmV0dXJuIENTdHJpbmcoKTsKK30KKwordm9p
ZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19120</attachid>
            <date>2008-02-14 11:52:20 -0800</date>
            <delta_ts>2008-02-15 12:45:02 -0800</delta_ts>
            <desc>Patch to implement PluginDatabase as shared and use PluginInfoStore for GTK+, Qt, and Wx</desc>
            <filename>webkit-shared-plugindatabase.patch</filename>
            <type>text/plain</type>
            <size>57949</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDgtMDItMTQgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBBZGQgUGx1Z2luSW5mb1N0b3JlLmNwcCBhbmQgbmV3IFBsdWdpbkRhdGFiYXNlLmNwcCB0
byBHVEsrIGFuZCBRdCBwb3J0cworICAgICAgICBSZW1vdmUgb2xkIFBsdWdJbkluZm9TdG9yZVF0
LmNwcCBhcyBpdCBpcyBvYnNvbGV0ZWQgYnkgc2hhcmVkIGNvZGUKKyAgICAgICAgQWRkIFBsdWdp
bkluZm9TdG9yZSwgUGx1Z2luRGF0YWJhc2UsIGFuZCBQbHVnaW5TdHJlYW0gZmlsZXMgdG8gV3gg
YnVpbGQKKyAgICAgICAgQWRkIG5ldyBQbHVnaW5EYXRhYmFzZS5jcHAgdG8gV2luZG93cyBidWls
ZAorICAgICAgICBBZGQgdGVtcG9yYXJ5IHN0dWJzIGZvciBuZXcgUGx1Z2luRGF0YWJhc2UgYW5k
IFBsdWdpblBhY2thZ2UKKyAgICAgICAgc2hhcmVkIGNsYXNzZXMgdG8gR1RLKywgUXQsIGFuZCBX
eCBwb3J0cworICAgICAgICBDb3B5IFBsdWdpbkRhdGFiYXNlV2luLmNwcCB0byBQbHVnaW5EYXRh
YmFzZS5jcHAgdG8gcHJlc2VydmUgaGlzdG9yeQorICAgICAgICBSZW1vdmUgc2hhcmVkIGNvZGUg
ZnJvbSBQbHVnaW5EYXRhYmFzZVdpbi5jcHAKKyAgICAgICAgUmVtb3ZlIFdpbmRvd3Mtc3BlY2lm
aWMgY29kZSBmcm9tIFBsdWdpbkRhdGFiYXNlLmNwcAorICAgICAgICBVc2UgUGxhdGZvcm1Nb2R1
bGUgYW5kIFBsYXRmb3JtRmlsZVRpbWUgaW5zdGVhZCBvZiBITU9EVUxFIGFuZCBGSUxFVElNRQor
ICAgICAgICBVc2UgdW5zaWduZWQgaW5zdGVhZCBvZiBEV09SRCB3aGVyZSBhcHBsaWNhYmxlCisg
ICAgICAgIFJlbW92ZSBleHRyYW5lb3VzIFBsdWdpblBhY2thZ2U6OiBmcm9tIGhhc2goKSBjbGFz
cyBtZXRob2QgcHJvdG90eXBlCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6CisgICAgICAgICog
d2ViY29yZS1iYXNlLmJrbDoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVRdC5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3Bw
OgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5QYWNr
YWdlLmg6CisKIDIwMDgtMDItMTQgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEltcHJvdmUgdGhlIGVmZmljaWVuY3kgb2YgU2VjdXJpdHlPcmlnaW5IYXNoCkluZGV4
OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZp
bGUuYW0JKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtODQ4LDYgKzg0OCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9UaW1lci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFu
Z2UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAgXAorCVdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUu
Y3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBcCiAJV2ViQ29yZS9yZW5k
ZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAg
XApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUucHJvCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcg
Y29weSkKQEAgLTc4Nyw2ICs3ODcsOCBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9UaW1l
ci5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAgICAgcGxhdGZv
cm0vV2lkZ2V0LmNwcCBcCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgXAorICAgIHBs
dWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCiAgICAgcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3Bw
IFwKICAgICByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAgICAgcmVuZGVyaW5nL2Jp
ZGkuY3BwIFwKQEAgLTkzNiw3ICs5MzgsNiBAQCBxdC1wb3J0IHsKICAgICBwbGF0Zm9ybS9xdC9Q
bGF0Zm9ybU1vdXNlRXZlbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtU2NyZWVu
UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcm9sbEJhclF0LmNwcCBcCi0gICAg
cGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9Qb3B1
cE1lbnVRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1FXZWJQb3B1cC5jcHAgXAogICAgIHBsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiAz
MDIzMSkKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC02
MzEsNiArNjMxLDEyIEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUK
ICAgICAgICAgcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmNwcAogICAgIDwvc2V0PgogCisgICAgPHNl
dCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1BMVUdJTlMiPgorICAgICAgICBwbHVn
aW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorICAgICAgICBwbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5j
cHAKKyAgICAgICAgcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisgICAgPC9zZXQ+CisKICAgICA8
c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfR0lGIj4KICAgICAgICAgcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKICAgICAgICAgcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcApJbmRleDogV2ViQ29yZS93
ZWJjb3JlLWJhc2UuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd2ViY29yZS1iYXNlLmJrbAko
cmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL3dlYmNvcmUtYmFzZS5ia2wJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDYgKzQ4LDcgQEAgd3hXZWJDb3JlIHBvcnQgQmFrZWZpbGUgcHJvamVjdCBmaWxl
LgogICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19QQUdFKQogICAgICAgICAkKFdFQkNPUkVfU09V
UkNFU19ISVNUT1JZKQogICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19QTEFURk9STSkKKyAgICAg
ICAgJChXRUJDT1JFX1NPVVJDRVNfUExVR0lOUykKICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNf
UkVOREVSSU5HKQogICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19TVE9SQUdFKQogICAgICAgICAk
KFdFQkNPUkVfU09VUkNFU19YQk0pCkBAIC05NSw2ICs5Niw3IEBAIHd4V2ViQ29yZSBwb3J0IEJh
a2VmaWxlIHByb2plY3QgZmlsZS4KICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKTwvaW5jbHVk
ZT4KICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0Q29yZTwvaW5jbHVkZT4K
ICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVh
ZGVyczwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0Q29y
ZS9iaW5kaW5nczwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2Ny
aXB0Q29yZS9ranM8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoV0tfUk9PVCkvSmF2YVNj
cmlwdENvcmUvcGNyZTwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZh
U2NyaXB0Q29yZS93dGY8L2luY2x1ZGU+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHJldmlzaW9uIDMwMjMxKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNzk2NSw2ICs3OTY1LDEwIEBACiAJCQkJPg0K
IAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1
Z2luRGF0YWJhc2UuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIg0KIAkJCQk+DQogCQkJPC9G
aWxlPg0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw4IEBACiAjaW5jbHVkZSAiR2xv
YmFsSGlzdG9yeS5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTU5LDEyICs2MCwxNCBAQCBWZWN0
b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlz
dG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAK
LVBsdWdpbkluZm8qIFBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0
SW5kZXgodW5zaWduZWQpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQg
UGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KLVN0cmluZyBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJp
bmcoKTsgfQotYm9vbCBXZWJDb3JlOjpQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUo
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7
IH0KLXZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgp
OyB9Ci0KK1BsdWdpblNldCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25z
dCB7IG5vdEltcGxlbWVudGVkKCk7IFBsdWdpblNldCBwbHVnaW5zOyByZXR1cm4gcGx1Z2luczt9
CitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpblBhdGhzKCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyBWZWN0b3I8U3RyaW5nPiBwYXRoczsgcmV0dXJuIHBhdGhzO30KK2Jv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKSBj
b25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorYm9vbCBQbHVnaW5QYWNr
YWdlOjpmZXRjaEluZm8oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTt9Cit1bnNp
Z25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDt9Citib29sIFBsdWdpblBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmLCBj
b25zdCBQbHVnaW5QYWNrYWdlJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0K
K2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZh
bHNlOyB9CitQbHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQogCiBDb2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAw
RkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lk
ICgqKSgpKSB7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQu
Y3BwCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0
b3JlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gICAgQ29weXJp
Z2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBm
dW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQg
aHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0
aGVzZSBvYmplY3RzLgotKi8KLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRl
ICJxZGVidWcuaCIKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSNpbmNsdWRlICJxd2Vib2Jq
ZWN0cGx1Z2luX3AuaCIKLSNlbmRpZgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUGx1Z2luSW5mbyogUGx1Z2luSW5mb1N0b3JlOjpjcmVhdGVQ
bHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKQotewotICAgIC8vcURlYnVnKCkg
PDwgIj4+Pj4+Pj4+Pj4+IFBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdp
bkF0SW5kZXgoIiA8PCBpIDw8ICIpIjsKLQotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAg
IFFXZWJGYWN0b3J5TG9hZGVyICpsb2FkZXIgPSBRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpOwot
ICAgIGlmIChpID4gbG9hZGVyLT5tX3BsdWdpbkluZm8uY291bnQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgY29uc3QgUVdlYkZhY3RvcnlMb2FkZXI6OkluZm8gJnFpbmZvID0gbG9hZGVyLT5t
X3BsdWdpbkluZm8uYXQoaSk7Ci0gICAgUGx1Z2luSW5mbyAqaW5mbyA9IG5ldyBQbHVnaW5JbmZv
OwotICAgIGluZm8tPm5hbWUgPSBxaW5mby5uYW1lOwotICAgIGluZm8tPmRlc2MgPSBxaW5mby5k
ZXNjcmlwdGlvbjsKLSAgICBmb3JlYWNoIChjb25zdCBRV2ViRmFjdG9yeUxvYWRlcjo6TWltZUlu
Zm8gJm0sIHFpbmZvLm1pbWVzKSB7Ci0gICAgICAgIE1pbWVDbGFzc0luZm8gKm1pbWUgPSBuZXcg
TWltZUNsYXNzSW5mbzsKLSAgICAgICAgbWltZS0+dHlwZSA9IG0udHlwZTsKLSAgICAgICAgbWlt
ZS0+cGx1Z2luID0gaW5mbzsKLSAgICAgICAgZm9yZWFjaCAoUVN0cmluZyBleHQsIG0uZXh0ZW5z
aW9ucykKLSAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzLmFwcGVuZChleHQpOwotICAgICAgICBp
bmZvLT5taW1lcy5hcHBlbmQobWltZSk7Ci0gICAgfQotICAgIHJldHVybiBpbmZvOwotI2Vsc2UK
LSAgICByZXR1cm4gMDsgLy8gIyMjIEZJWE1FCi0jZW5kaWYKLX0KLQotdW5zaWduZWQgUGx1Z2lu
SW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0Ci17Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQw
NDAwCi0gICAgLy9xRGVidWcoKSA8PCAiPj4+Pj4+Pj4+Pj4gUGx1Z2luSW5mb1N0b3JlOjpjb3Vu
dCA9IiA8PCBRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpLT5rZXlzKCkuY291bnQoKTsKLSAgICBy
ZXR1cm4gUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+a2V5cygpLmNvdW50KCk7Ci0jZWxzZQot
ICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLVN0cmluZyBQbHVnaW5JbmZvU3RvcmU6OnBsdWdp
bk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1F
OiBUaGlzIG1ldGhvZCBpcyBzdHViYmVkIG91dCBhbmQgc2hvdWxkIHJlYWxseSByZXR1cm4gdGhl
IG5hbWUgb2YgYSBwbHVnLWluIHBhY2thZ2UgZm9yCi0gICAgLy8gYSBnaXZlbiBNSU1FIHR5cGUu
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotICAgIAotYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnN1
cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzdHJpbmcpCi17Ci0jaWYgUVRf
VkVSU0lPTiA8IDB4MDQwNDAwCi0gICAgYm9vbCBzdXBwb3J0cyA9IFFXZWJGYWN0b3J5TG9hZGVy
OjpzZWxmKCktPnN1cHBvcnRzTWltZVR5cGUoc3RyaW5nKTsKLSNlbHNlCi0gICAgYm9vbCBzdXBw
b3J0cyA9IGZhbHNlOwotI2VuZGlmCi0gICAgLy9xRGVidWcoKSA8PCAiPj4+Pj4+Pj4+Pj4gUGx1
Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKCIgPDwgc3RyaW5nIDw8ICIpID0iIDw8IHN1
cHBvcnRzOwotICAgIHJldHVybiBzdXBwb3J0czsKLX0KLQotdm9pZCByZWZyZXNoUGx1Z2lucyhi
b29sKSB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlr
b3NAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJA
a2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4KICAq
CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTU5LDcgKzYwLDggQEAKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbGF0Zm9y
bU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlN5c3Rl
bVRpbWUuaCIKQEAgLTcwLDYgKzcyLDE1IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QgeyBu
b3RJbXBsZW1lbnRlZCgpOyBQbHVnaW5TZXQgcGx1Z2luczsgcmV0dXJuIHBsdWdpbnM7fQorVmVj
dG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpIHsgbm90SW1w
bGVtZW50ZWQoKTsgVmVjdG9yPFN0cmluZz4gcGF0aHM7IHJldHVybiBwYXRoczt9Citib29sIFBs
dWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJikgY29uc3Qg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6
ZmV0Y2hJbmZvKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7fQordW5zaWduZWQg
UGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7
fQorYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiwgY29uc3Qg
UGx1Z2luUGFja2FnZSYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Citib29s
IFBsdWdpblBhY2thZ2U6OmxvYWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsg
fQorUGx1Z2luUGFja2FnZTo6flBsdWdpblBhY2thZ2UoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRLZXlTaXpl
cygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDMw
MjMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDcgKzY0LDggQEAKICNpbmNsdWRlICJQbGF0Zm9ybU1l
bnVEZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCisj
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAj
aW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZS5oIgpAQCAtMTE3LDExICsxMTksMTQgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB2b2lkIFdlYkNvcmU6OmZpbmRXb3JkQm91bmRhcnkoVUNoYXIgY29uc3QqIHN0cixp
bnQgbGVuLGludCBwb3NpdGlvbixpbnQqIHN0YXJ0LCBpbnQqIGVuZCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyAqc3RhcnQ9cG9zaXRpb247ICplbmQ9cG9zaXRpb247IH0KIAotUGx1Z2luSW5mbypQbHVn
aW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkKSB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwO30KLXVuc2lnbmVkIFBsdWdpbkluZm9TdG9yZTo6
cGx1Z2luQ291bnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29s
IFdlYkNvcmU6OlBsdWdpbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotU3RyaW5nIFBs
dWdpbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci12b2lkIFdlYkNvcmU6
OnJlZnJlc2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorUGx1Z2luU2V0IFBs
dWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgUGx1Z2luU2V0IHBsdWdpbnM7IHJldHVybiBwbHVnaW5zO30KK1ZlY3RvcjxTdHJpbmc+IFBs
dWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSB7IG5vdEltcGxlbWVudGVkKCk7IFZl
Y3RvcjxTdHJpbmc+IHBhdGhzOyByZXR1cm4gcGF0aHM7fQorYm9vbCBQbHVnaW5EYXRhYmFzZTo6
aXNQcmVmZXJyZWRQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Citib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlO30KK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6
Omhhc2goKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwO30KK2Jvb2wgUGx1Z2lu
UGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYsIGNvbnN0IFBsdWdpblBhY2thZ2Um
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorYm9vbCBQbHVnaW5QYWNrYWdl
Ojpsb2FkKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK1BsdWdpblBhY2th
Z2U6On5QbHVnaW5QYWNrYWdlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiAKIHZvaWQgV2lkZ2V0
OjpzZXRJc1NlbGVjdGVkKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogCkluZGV4OiBXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDMwMDY4KQkoZnJvbSBXZWJDb3JlL3Bs
dWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcDozMDA2OCkKKysrIFdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHNobHdh
cGkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0
YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKQoreworICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZSog
cGx1Z2lucyA9IDA7CisgICAgCisgICAgaWYgKCFwbHVnaW5zKSB7CisgICAgICAgIHBsdWdpbnMg
PSBuZXcgUGx1Z2luRGF0YWJhc2U7CisgICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBs
dWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSk7CisgICAgICAgIHBsdWdpbnMtPnJl
ZnJlc2goKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luczsKK30KKwordm9pZCBQbHVnaW5E
YXRhYmFzZTo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBt
X3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICByZWZyZXNoKCk7Cit9CisKK2Jvb2wgUGx1
Z2luRGF0YWJhc2U6OnJlZnJlc2goKQoreyAgIAorICAgIFBsdWdpblNldCBuZXdQbHVnaW5zOwor
CisgICAgYm9vbCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgYSBu
ZXcgc2V0IG9mIHBsdWdpbnMKKyAgICBuZXdQbHVnaW5zID0gZ2V0UGx1Z2luc0luUGF0aHMoKTsK
KworICAgIGlmICghbV9wbHVnaW5zLmlzRW1wdHkoKSkgeworICAgICAgICBtX3JlZ2lzdGVyZWRN
SU1FVHlwZXMuY2xlYXIoKTsKKworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkID0g
bV9wbHVnaW5zOworCisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3
UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBwbHVn
aW5zVG9VbmxvYWQucmVtb3ZlKCppdCk7CisKKyAgICAgICAgZW5kID0gbV9wbHVnaW5zLmVuZCgp
OworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbmV3UGx1Z2lucy5yZW1vdmUo
Kml0KTsKKworICAgICAgICAvLyBVbmxvYWQgcGx1Z2lucworICAgICAgICBlbmQgPSBwbHVnaW5z
VG9VbmxvYWQuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAg
ICBtX3BsdWdpbnMucmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gQWRkIG5ldyBwbHVnaW5zCisg
ICAgICAgIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5n
ZWQgPSAhcGx1Z2luc1RvVW5sb2FkLmlzRW1wdHkoKSB8fCAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5zID0gbmV3UGx1Z2luczsKKyAgICAgICAg
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAg
ICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAg
ICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAgIH0KKwor
ICAgIC8vIFJlZ2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgLy8gR2V0IE1JTUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgp
OworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFw
X2l0ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7IG1hcF9pdCAhPSBtYXBf
ZW5kOyArK21hcF9pdCkgeworICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZCht
YXBfaXQtPmZpcnN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW5TZXRD
aGFuZ2VkOworfQorCitWZWN0b3I8UGx1Z2luUGFja2FnZSo+IFBsdWdpbkRhdGFiYXNlOjpwbHVn
aW5zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IHJlc3VsdDsKKworICAg
IFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZv
ciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoKCppdCkuZ2V0KCkpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVn
aXN0cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMpCit7CisgICAgSEtFWSBrZXk7
CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29mdHdhcmVc
XE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywgJmtleSk7CisKKyAg
ICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIHdj
aGFyX3QgbmFtZVsxMjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKKworICAgIC8vIEVu
dW1lcmF0ZSBzdWJrZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKKyAgICAgICAgRFdP
UkQgbmFtZUxlbiA9IF9jb3VudG9mKG5hbWUpOworICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5
RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOworCisg
ICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdPUkQgcGF0aFN0
clNpemUgPSBzaXplb2YocGF0aFN0cik7CisgICAgICAgIERXT1JEIHR5cGU7CisKKyAgICAgICAg
cmVzdWx0ID0gU0hHZXRWYWx1ZShrZXksIG5hbWUsIFRFWFQoIlBhdGgiKSwgJnR5cGUsIChMUEJZ
VEUpcGF0aFN0ciwgJnBhdGhTdHJTaXplKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9T
VUNDRVNTIHx8IHR5cGUgIT0gUkVHX1NaKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyaWJ1dGVzOworICAgICAgICBpZiAoR2V0
RmlsZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRyaWJ1
dGVzKSA9PSAwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUGx1Z2luUGFja2Fn
ZSogcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoU3RyaW5nKHBhdGhTdHIs
IHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBhdHRyaWJ1dGVzLmZ0TGFzdFdyaXRl
VGltZSk7CisKKyAgICAgICAgaWYgKHBhY2thZ2UpCisgICAgICAgICAgICBwbHVnaW5zLmFkZChw
YWNrYWdlKTsKKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitQbHVnaW5TZXQg
UGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0
cmluZz4gdW5pcXVlRmlsZW5hbWVzOworICAgIFBsdWdpblNldCBwbHVnaW5zOworCisgICAgSEFO
RExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgV0lOMzJfRklORF9EQVRBVyBm
aW5kRmlsZURhdGE7CisKKyAgICBQbHVnaW5QYWNrYWdlKiBvbGRXTVBQbHVnaW4gPSAwOworICAg
IFBsdWdpblBhY2thZ2UqIG5ld1dNUFBsdWdpbiA9IDA7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQoKTsKKyAgICBmb3IgKFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gKml0ICsgIlxcKiI7CisK
KyAgICAgICAgaEZpbmQgPSBGaW5kRmlyc3RGaWxlVyhwYXR0ZXJuLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCksICZmaW5kRmlsZURhdGEpOworCisgICAgICAgIGlmIChoRmluZCA9PSBJ
TlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVf
QVRUUklCVVRFX0RJUkVDVE9SWSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdj
c2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7CisgICAgICAgICAgICBpZiAoKCFmaWxlbmFt
ZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoImRsbCIsIGZh
bHNlKSkgJiYKKyAgICAgICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAi
UGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAxMCIsIGZhbHNlKSkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9
ICppdCArICJcXCIgKyBmaWxlbmFtZTsKKyAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVz
LmFkZChmdWxsUGF0aCkuc2Vjb25kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAKKyAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNr
YWdlOjpjcmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1l
KTsKKworICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKKyAgICAgICAgICAgICAgICBw
bHVnaW5zLmFkZChwbHVnaW5QYWNrYWdlKTsKKworICAgICAgICAgICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wZHNwbGF5LmRsbCIpKQorICAgICAgICAgICAgICAgICAg
ICBvbGRXTVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdlOworICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAibnAtbXN3bXAuZGxsIikpCisgICAgICAgICAg
ICAgICAgICAgIG5ld1dNUFBsdWdpbiA9IHBsdWdpblBhY2thZ2U7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgfSB3aGlsZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0g
MCk7CisKKyAgICAgICAgRmluZENsb3NlKGhGaW5kKTsKKyAgICB9CisKKyAgICBhZGRQbHVnaW5z
RnJvbVJlZ2lzdHJ5KEhLRVlfTE9DQUxfTUFDSElORSwgcGx1Z2lucyk7CisgICAgYWRkUGx1Z2lu
c0Zyb21SZWdpc3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGx1Z2lucyk7CisKKyAgICAvLyBJZiBi
b3RoIHRoZSBvbGQgYW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5z
IHNldCwgCisgICAgLy8gd2UgcmVtb3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBj
aG9vc2luZyB0aGUgb2xkIG9uZS4KKyAgICBpZiAob2xkV01QUGx1Z2luICYmIG5ld1dNUFBsdWdp
bikKKyAgICAgICAgcGx1Z2lucy5yZW1vdmUob2xkV01QUGx1Z2luKTsKKworICAgIHJldHVybiBw
bHVnaW5zOworfQorCitzdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCit7CisgICAgVmVjdG9yPGludD4gdmVyc2lv
bjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7Cisg
ICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgeworICAg
ICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0
aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0g
Jy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0
cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7CisgICAgICAgIHZlcnNp
b24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOworCisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9z
ICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KKworLy8gVGhpcyByZXR1cm5z
IHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBW
ZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZl
cnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZl
cnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZl
cnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUg
c2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxz
ZQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQ
bHVnaW5QYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit7CisgICAgLy8gRW51bWVyYXRlIGFs
bCBNb3ppbGxhIHBsdWdpbiBkaXJlY3RvcmllcyBpbiB0aGUgcmVnaXN0cnkKKyAgICBIS0VZIGtl
eTsKKyAgICBMT05HIHJlc3VsdDsKKyAgICAKKyAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtF
WV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96aWxsYSIpLCAwLCBLRVlfUkVBRCwg
JmtleSk7CisgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgIFdDSEFS
IG5hbWVbMTI4XTsKKyAgICAgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOworCisgICAgICAgIC8v
IEVudW1lcmF0ZSBzdWJrZXlzCisgICAgICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAg
ICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwg
MCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gRVJS
T1JfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgU3RyaW5n
IGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pICsgIlxcRXh0ZW5zaW9ucyI7
CisgICAgICAgICAgICBIS0VZIGV4dGVuc2lvbnNLZXk7CisKKyAgICAgICAgICAgIC8vIFRyeSBv
cGVuaW5nIHRoZSBrZXkKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChrZXksIGV4
dGVuc2lvbnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIEtFWV9SRUFE
LCAmZXh0ZW5zaW9uc0tleSk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VD
Q0VTUykgeworICAgICAgICAgICAgICAgIC8vIE5vdyBnZXQgdGhlIHBsdWdpbnMgcGF0aAorICAg
ICAgICAgICAgICAgIFdDSEFSIHBsdWdpbnNQYXRoU3RyW19NQVhfUEFUSF07CisgICAgICAgICAg
ICAgICAgRFdPUkQgcGx1Z2luc1BhdGhTaXplID0gc2l6ZW9mKHBsdWdpbnNQYXRoU3RyKTsKKyAg
ICAgICAgICAgICAgICBEV09SRCB0eXBlOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVn
UXVlcnlWYWx1ZUV4KGV4dGVuc2lvbnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChM
UEJZVEUpJnBsdWdpbnNQYXRoU3RyLCAmcGx1Z2luc1BhdGhTaXplKTsKKworICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikKKyAgICAg
ICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5zUGF0aFN0ciwgcGx1Z2lu
c1BhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKKworICAgICAgICAgICAgICAgIFJlZ0Ns
b3NlS2V5KGV4dGVuc2lvbnNLZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBSZWdDbG9zZUtleShrZXkpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2
b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhz
KQoreworICAgIC8vIFRoZSBuZXcgV01QIEZpcmVmb3ggcGx1Z2luIGlzIGluc3RhbGxlZCBpbiBc
UEZpbGVzXFBsdWdpbnMgaWYgaXQgY2FuJ3QgZmluZCBhbnkgRmlyZWZveCBpbnN0YWxscworICAg
IFdDSEFSIHBsdWdpbkRpcmVjdG9yeVN0cltfTUFYX1BBVEggKyAxXTsKKyAgICBEV09SRCBwbHVn
aW5EaXJlY3RvcnlTaXplID0gOjpFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKFRFWFQoIiVTWVNU
RU1EUklWRSVcXFBGaWxlc1xcUGx1Z2lucyIpLCBwbHVnaW5EaXJlY3RvcnlTdHIsIF9jb3VudG9m
KHBsdWdpbkRpcmVjdG9yeVN0cikpOworCisgICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAw
ICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0gX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5U3RyKSkK
KyAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRp
cmVjdG9yeVNpemUgLSAxKSk7CisKKyAgICBEV09SRCB0eXBlOworICAgIFdDSEFSIGluc3RhbGxh
dGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOworICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVj
dG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKKworICAgIEhSRVNV
TFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJl
XFxNaWNyb3NvZnRcXE1lZGlhUGxheWVyIiksIFRFWFQoIkluc3RhbGxhdGlvbiBEaXJlY3Rvcnki
KSwgJnR5cGUsIChMUEJZVEUpJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlv
bkRpcmVjdG9yeVNpemUpOworCisgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5
cGUgPT0gUkVHX1NaKQorICAgICAgICBwYXRocy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRp
cmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAx
KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRRdWlja1RpbWVQbHVnaW5QYXRoKFZlY3Rv
cjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBEV09SRCB0eXBlOworICAgIFdDSEFSIGluc3RhbGxh
dGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOworICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVj
dG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKKworICAgIEhSRVNV
TFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJl
XFxBcHBsZSBDb21wdXRlciwgSW5jLlxcUXVpY2tUaW1lIiksIFRFWFQoIkluc3RhbGxEaXIiKSwg
JnR5cGUsIChMUEJZVEUpJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRp
cmVjdG9yeVNpemUpOworCisgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUg
PT0gUkVHX1NaKSB7CisgICAgICAgIFN0cmluZyBwbHVnaW5EaXIgPSBTdHJpbmcoaW5zdGFsbGF0
aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFS
KSAtIDEpICsgIlxccGx1Z2lucyI7CisgICAgICAgIHBhdGhzLmFwcGVuZChwbHVnaW5EaXIpOwor
ICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpblBhdGgo
VmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIEhLRVkga2V5OworICAgIEhSRVNVTFQgcmVz
dWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFk
b2JlXFxBY3JvYmF0IFJlYWRlciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3Vs
dCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICByZXR1cm47CisKKyAgICBXQ0hBUiBuYW1lWzEy
OF07CisgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOworCisgICAgVmVjdG9yPGludD4gbGF0ZXN0
QWNyb2JhdFZlcnNpb247CisgICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOwor
CisgICAgLy8gRW51bWVyYXRlIHN1YmtleXMKKyAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewor
ICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAg
ICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAw
LCAwLCAmbGFzdE1vZGlmaWVkKTsKKworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NF
U1MpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVy
c2lvbiA9IHBhcnNlVmVyc2lvblN0cmluZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOworICAgICAg
ICBpZiAoY29tcGFyZVZlcnNpb25zKGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lv
bikpIHsKKyAgICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247
CisgICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBu
YW1lTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNp
b25TdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgRFdPUkQgdHlwZTsKKyAgICAgICAgV0NIQVIg
YWNyb2JhdEluc3RhbGxQYXRoU3RyW19NQVhfUEFUSF07CisgICAgICAgIERXT1JEIGFjcm9iYXRJ
bnN0YWxsUGF0aFNpemUgPSBzaXplb2YoYWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKKworICAgICAg
ICBTdHJpbmcgYWNyb2JhdFBsdWdpbktleVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0
IFJlYWRlclxcIiArIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgi
OworICAgICAgICByZXN1bHQgPSBTSEdldFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2Jh
dFBsdWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgJnR5cGUs
IChMUEJZVEUpYWNyb2JhdEluc3RhbGxQYXRoU3RyLCAmYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSk7
CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgICAgICBT
dHJpbmcgYWNyb2JhdFBsdWdpblBhdGggPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBh
Y3JvYmF0SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7
CisgICAgICAgICAgICBwYXRocy5hcHBlbmQoYWNyb2JhdFBsdWdpblBhdGgpOworICAgICAgICB9
CisgICAgfQorCisgICAgUmVnQ2xvc2VLZXkoa2V5KTsKK30KKworc3RhdGljIGlubGluZSBTdHJp
bmcgc2FmYXJpUGx1Z2luc1BhdGgoKQoreworICAgIFdDSEFSIG1vZHVsZUZpbGVOYW1lU3RyW19N
QVhfUEFUSF07CisgICAgc3RhdGljIFN0cmluZyBwbHVnaW5zUGF0aDsKKyAgICBzdGF0aWMgYm9v
bCBjYWNoZWRQbHVnaW5QYXRoID0gZmFsc2U7CisKKyAgICBpZiAoIWNhY2hlZFBsdWdpblBhdGgp
IHsKKyAgICAgICAgY2FjaGVkUGx1Z2luUGF0aCA9IHRydWU7CisKKyAgICAgICAgaW50IG1vZHVs
ZUZpbGVOYW1lTGVuID0gR2V0TW9kdWxlRmlsZU5hbWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9N
QVhfUEFUSCk7CisKKyAgICAgICAgaWYgKCFtb2R1bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxl
TmFtZUxlbiA9PSBfTUFYX1BBVEgpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAg
aWYgKCFQYXRoUmVtb3ZlRmlsZVNwZWMobW9kdWxlRmlsZU5hbWVTdHIpKQorICAgICAgICAgICAg
Z290byBleGl0OworCisgICAgICAgIHBsdWdpbnNQYXRoID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1l
U3RyKSArICJcXFBsdWdpbnMiOworICAgIH0KK2V4aXQ6CisgICAgcmV0dXJuIHBsdWdpbnNQYXRo
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpblBhdGhzKFZlY3Rv
cjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBXQ0hBUiBzeXN0ZW1EaXJlY3RvcnlTdHJbTUFYX1BB
VEhdOworCisgICAgaWYgKEdldFN5c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIF9j
b3VudG9mKHN5c3RlbURpcmVjdG9yeVN0cikpID09IDApCisgICAgICAgIHJldHVybjsKKworICAg
IFdDSEFSIG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFYX1BBVEhdOworCisgICAgUGF0aENvbWJp
bmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNy
b21lZFxcRmxhc2giKSk7CisgICAgcGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIp
OworCisgICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0
b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikpOworICAgIHBhdGhzLmFwcGVu
ZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKK30KKworVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0
YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7
CisgICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOworCisgICAgaWYgKCFv
dXJQYXRoLmlzTnVsbCgpKQorICAgICAgICBwYXRocy5hcHBlbmQob3VyUGF0aCk7CisgICAgYWRk
UXVpY2tUaW1lUGx1Z2luUGF0aChwYXRocyk7CisgICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0
aChwYXRocyk7CisgICAgYWRkTW96aWxsYVBsdWdpblBhdGhzKHBhdGhzKTsKKyAgICBhZGRXaW5k
b3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRoKHBhdGhzKTsKKyAgICBhZGRNYWNyb21lZGlhUGx1Z2lu
UGF0aHMocGF0aHMpOworCisgICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFi
YXNlOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAg
IGlmIChtaW1lVHlwZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0
YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVn
aXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpOworfQorCitQbHVnaW5QYWNrYWdl
KiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKK3sKKyAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOworICAgIFN0cmluZyBvdXJQYXRoID0g
c2FmYXJpUGx1Z2luc1BhdGgoKTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAwOworICAg
IFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworCisgICAg
Zm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygp
LmNvbnRhaW5zKGtleSkpIHsKKyAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOworICAg
ICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQor
ICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVn
aW47Cit9CisKK1N0cmluZyBQbHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0Cit7CisgICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJp
UGx1Z2luc1BhdGgoKTsKKyAgICBTdHJpbmcgbWltZVR5cGU7CisgICAgUGx1Z2luUGFja2FnZSog
cGx1Z2luID0gMDsKKworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTUlNRVRvRXh0ZW5z
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9u
cygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9p
dCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKKyAgICAgICAgICAg
ICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIC8vIHBy
ZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtaW1lVHlwZTsKK30KKworUGx1Z2luUGFj
a2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcm
IG1pbWVUeXBlKQoreyAgIAorICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IHBsdWdpbkZvck1J
TUVUeXBlKG1pbWVUeXBlKTsKKyAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwuc3RyaW5nKCk7Cisg
ICAgCisgICAgaWYgKCFwbHVnaW4pIHsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLmxh
c3RQYXRoQ29tcG9uZW50KCk7CisgICAgICAgIGlmICghZmlsZW5hbWUuZW5kc1dpdGgoIi8iKSkg
eworICAgICAgICAgICAgaW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcu
Jyk7CisgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uUG9zICE9IC0xKSB7CisgICAgICAgICAgICAg
ICAgU3RyaW5nIGV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhleHRlbnNpb25Qb3MgKyAx
KTsKKworICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0
ZW5zaW9uKTsKKyAgICAgICAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1l
VHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGSVhNRTog
aWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSBXaW5kb3dzIGZvciB0aGUgbWltZSB0
eXBlIAorICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbi4KKworICAgIHJldHVy
biBwbHVnaW47Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAkocmV2
aXNpb24gMzAwNjgpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI3LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgot
I2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgPHdp
bmRvd3MuaD4KLSNpbmNsdWRlIDxzaGx3YXBpLmg+CisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1
ZGUgIlBsdWdpblBhY2thZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Nyw2ICs0
NiwxNiBAQCBQbHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlCiAgICAgcmV0
dXJuIHBsdWdpbnM7CiB9CiAKK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVSZWdpc3Rl
cmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5j
b250YWlucyhtaW1lVHlwZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIE5vIHBsdWdp
biB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFn
YWluCisgICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRh
aW5zKG1pbWVUeXBlKSk7Cit9CisKIHZvaWQgUGx1Z2luRGF0YWJhc2U6OmFkZEV4dHJhUGx1Z2lu
UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgbV9wbHVnaW5QYXRocy5hcHBlbmQocGF0
aCk7CkBAIC0xMTksMzQ3ICsxMjgsMTkgQEAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBQbHVnaW5E
YXRhYmFzZTo6cAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVkgcm9vdEtleSwgUGx1Z2luU2V0JiBwbHVnaW5zKQot
ewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4Vyhyb290
S2V5LCBMIlNvZnR3YXJlXFxNb3ppbGxhUGx1Z2lucyIsIDAsIEtFWV9FTlVNRVJBVEVfU1VCX0tF
WVMsICZrZXkpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB3Y2hhcl90IG5hbWVbMTI4XTsKLSAgICBGSUxFVElNRSBsYXN0TW9kaWZp
ZWQ7Ci0KLSAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAgIGZvciAoaW50IGkgPSAwOzsgaSsr
KSB7Ci0gICAgICAgIERXT1JEIG5hbWVMZW4gPSBfY291bnRvZihuYW1lKTsKLSAgICAgICAgcmVz
dWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFz
dE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBXQ0hBUiBwYXRoU3RyW19NQVhfUEFUSF07Ci0gICAg
ICAgIERXT1JEIHBhdGhTdHJTaXplID0gc2l6ZW9mKHBhdGhTdHIpOwotICAgICAgICBEV09SRCB0
eXBlOwotCi0gICAgICAgIHJlc3VsdCA9IFNIR2V0VmFsdWUoa2V5LCBuYW1lLCBURVhUKCJQYXRo
IiksICZ0eXBlLCAoTFBCWVRFKXBhdGhTdHIsICZwYXRoU3RyU2l6ZSk7Ci0gICAgICAgIGlmIChy
ZXN1bHQgIT0gRVJST1JfU1VDQ0VTUyB8fCB0eXBlICE9IFJFR19TWikKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgYXR0cmlidXRlczsK
LSAgICAgICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXgocGF0aFN0ciwgR2V0RmlsZUV4SW5mb1N0
YW5kYXJkLCAmYXR0cmlidXRlcykgPT0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdl
KFN0cmluZyhwYXRoU3RyLCBwYXRoU3RyU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSwgYXR0cmli
dXRlcy5mdExhc3RXcml0ZVRpbWUpOwotCi0gICAgICAgIGlmIChwYWNrYWdlKQotICAgICAgICAg
ICAgcGx1Z2lucy5hZGQocGFja2FnZSk7Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXkoa2V5KTsK
LX0KLQotUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0
Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQu
Ci0gICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKLSAgICBQbHVnaW5TZXQgcGx1
Z2luczsKLQotICAgIEhBTkRMRSBoRmluZCA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotICAgIFdJ
TjMyX0ZJTkRfREFUQVcgZmluZEZpbGVEYXRhOwotCi0gICAgUGx1Z2luUGFja2FnZSogb2xkV01Q
UGx1Z2luID0gMDsKLSAgICBQbHVnaW5QYWNrYWdlKiBuZXdXTVBQbHVnaW4gPSAwOwotCi0gICAg
VmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7
Ci0gICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBh
dGhzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTdHJpbmcgcGF0dGVybiA9
ICppdCArICJcXCoiOwotCi0gICAgICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVcocGF0dGVybi5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAmZmluZEZpbGVEYXRhKTsKLQotICAgICAg
ICBpZiAoaEZpbmQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoZmluZEZpbGVEYXRhLmR3RmlsZUF0
dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IFN0cmluZyhmaW5kRmlsZURh
dGEuY0ZpbGVOYW1lLCB3Y3NsZW4oZmluZEZpbGVEYXRhLmNGaWxlTmFtZSkpOwotICAgICAgICAg
ICAgaWYgKCghZmlsZW5hbWUuc3RhcnRzV2l0aCgibnAiLCBmYWxzZSkgfHwgIWZpbGVuYW1lLmVu
ZHNXaXRoKCJkbGwiLCBmYWxzZSkpICYmCi0gICAgICAgICAgICAgICAgKCFlcXVhbElnbm9yaW5n
Q2FzZShmaWxlbmFtZSwgIlBsdWdpbi5kbGwiKSB8fCAhaXQtPmVuZHNXaXRoKCJTaG9ja3dhdmUg
MTAiLCBmYWxzZSkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBT
dHJpbmcgZnVsbFBhdGggPSAqaXQgKyAiXFwiICsgZmlsZW5hbWU7Ci0gICAgICAgICAgICBpZiAo
IXVuaXF1ZUZpbGVuYW1lcy5hZGQoZnVsbFBhdGgpLnNlY29uZCkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgCi0gICAgICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5QYWNr
YWdlID0gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZShmdWxsUGF0aCwgZmluZEZpbGVEYXRh
LmZ0TGFzdFdyaXRlVGltZSk7Ci0KLSAgICAgICAgICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7Ci0g
ICAgICAgICAgICAgICAgcGx1Z2lucy5hZGQocGx1Z2luUGFja2FnZSk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucGRzcGxheS5kbGwiKSkKLSAg
ICAgICAgICAgICAgICAgICAgb2xkV01QUGx1Z2luID0gcGx1Z2luUGFja2FnZTsKLSAgICAgICAg
ICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wLW1zd21wLmRs
bCIpKQotICAgICAgICAgICAgICAgICAgICBuZXdXTVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdlOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgIH0gd2hpbGUgKEZpbmROZXh0RmlsZVcoaEZpbmQsICZm
aW5kRmlsZURhdGEpICE9IDApOwotCi0gICAgICAgIEZpbmRDbG9zZShoRmluZCk7Ci0gICAgfQot
Ci0gICAgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBsdWdpbnMp
OwotICAgIGFkZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtFWV9DVVJSRU5UX1VTRVIsIHBsdWdpbnMp
OwotCi0gICAgLy8gSWYgYm90aCB0aGUgb2xkIGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJlc2Vu
dCBpbiB0aGUgcGx1Z2lucyBzZXQsIAotICAgIC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBzbyB3
ZSBkb24ndCBlbmQgdXAgY2hvb3NpbmcgdGhlIG9sZCBvbmUuCi0gICAgaWYgKG9sZFdNUFBsdWdp
biAmJiBuZXdXTVBQbHVnaW4pCi0gICAgICAgIHBsdWdpbnMucmVtb3ZlKG9sZFdNUFBsdWdpbik7
Ci0KLSAgICByZXR1cm4gcGx1Z2luczsKLX0KLQotc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBw
YXJzZVZlcnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQotewotICAgIFZl
Y3RvcjxpbnQ+IHZlcnNpb247Ci0KLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7Ci0gICAgdW5z
aWduZWQgZW5kUG9zOwotICAgIAotICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcu
bGVuZ3RoKCkpIHsKLSAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVy
c2lvblN0cmluZy5sZW5ndGgoKTsgKytlbmRQb3MpCi0gICAgICAgICAgICBpZiAodmVyc2lvblN0
cmluZ1tlbmRQb3NdID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVy
c2lvblN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgp
OwotICAgICAgICB2ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKLQotICAgICAgICBz
dGFydFBvcyA9IGVuZFBvcyArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZlcnNpb247Ci19Ci0K
LS8vIFRoaXMgcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25C
Ci1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2
ZXJzaW9uQSwgY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQotewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaSA+PSB2
ZXJzaW9uQi5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAo
dmVyc2lvbkFbaV0gPiB2ZXJzaW9uQltpXSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBlbHNlIGlmICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25z
IGFyZSBlaXRoZXIgdGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwg
anVzdCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBhZGRNb3ppbGxhUGx1Z2luUGF0aHMoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQotewotICAg
IC8vIEVudW1lcmF0ZSBhbGwgTW96aWxsYSBwbHVnaW4gZGlyZWN0b3JpZXMgaW4gdGhlIHJlZ2lz
dHJ5Ci0gICAgSEtFWSBrZXk7Ci0gICAgTE9ORyByZXN1bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0g
UmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1vemlsbGEi
KSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykg
ewotICAgICAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgICAgIEZJTEVUSU1FIGxhc3RNb2RpZmll
ZDsKLQotICAgICAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAgICAgICBmb3IgKGludCBpID0g
MDs7IGkrKykgewotICAgICAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNp
emVvZihXQ0hBUik7Ci0gICAgICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwg
bmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgICAgICBp
ZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgIFN0cmluZyBleHRlbnNpb25zUGF0aCA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKSAr
ICJcXEV4dGVuc2lvbnMiOwotICAgICAgICAgICAgSEtFWSBleHRlbnNpb25zS2V5OwotCi0gICAg
ICAgICAgICAvLyBUcnkgb3BlbmluZyB0aGUga2V5Ci0gICAgICAgICAgICByZXN1bHQgPSBSZWdP
cGVuS2V5RXgoa2V5LCBleHRlbnNpb25zUGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpLCAwLCBLRVlfUkVBRCwgJmV4dGVuc2lvbnNLZXkpOwotCi0gICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0IHRoZSBw
bHVnaW5zIHBhdGgKLSAgICAgICAgICAgICAgICBXQ0hBUiBwbHVnaW5zUGF0aFN0cltfTUFYX1BB
VEhdOwotICAgICAgICAgICAgICAgIERXT1JEIHBsdWdpbnNQYXRoU2l6ZSA9IHNpemVvZihwbHVn
aW5zUGF0aFN0cik7Ci0gICAgICAgICAgICAgICAgRFdPUkQgdHlwZTsKLQotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChleHRlbnNpb25zS2V5LCBURVhUKCJQbHVnaW5z
IiksIDAsICZ0eXBlLCAoTFBCWVRFKSZwbHVnaW5zUGF0aFN0ciwgJnBsdWdpbnNQYXRoU2l6ZSk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9
PSBSRUdfU1opCi0gICAgICAgICAgICAgICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1Z2lu
c1BhdGhTdHIsIHBsdWdpbnNQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci0KLSAgICAg
ICAgICAgICAgICBSZWdDbG9zZUtleShleHRlbnNpb25zS2V5KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgUmVnQ2xvc2VLZXkoa2V5KTsKLSAgICB9Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRoKFZlY3Rv
cjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBsdWdpbiBp
cyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55IEZpcmVm
b3ggaW5zdGFsbHMKLSAgICBXQ0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRIICsgMV07
Ci0gICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1lbnRTdHJp
bmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2luRGlyZWN0
b3J5U3RyLCBfY291bnRvZihwbHVnaW5EaXJlY3RvcnlTdHIpKTsKLQotICAgIGlmIChwbHVnaW5E
aXJlY3RvcnlTaXplID4gMCAmJiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9IF9jb3VudG9mKHBsdWdp
bkRpcmVjdG9yeVN0cikpCi0gICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1Z2luRGlyZWN0
b3J5U3RyLCBwbHVnaW5EaXJlY3RvcnlTaXplIC0gMSkpOwotCi0gICAgRFdPUkQgdHlwZTsKLSAg
ICBXQ0hBUiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKLSAgICBEV09SRCBp
bnN0YWxsYXRpb25EaXJlY3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0
cik7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5F
LCBURVhUKCJTb2Z0d2FyZVxcTWljcm9zb2Z0XFxNZWRpYVBsYXllciIpLCBURVhUKCJJbnN0YWxs
YXRpb24gRGlyZWN0b3J5IiksICZ0eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3RvcnlT
dHIsICZpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplKTsKLQotICAgIGlmIChyZXN1bHQgPT0gRVJS
T1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikKLSAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmlu
ZyhpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgLyBz
aXplb2YoV0NIQVIpIC0gMSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkUXVpY2tUaW1l
UGx1Z2luUGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgRFdPUkQgdHlwZTsKLSAg
ICBXQ0hBUiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKLSAgICBEV09SRCBp
bnN0YWxsYXRpb25EaXJlY3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0
cik7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5F
LCBURVhUKCJTb2Z0d2FyZVxcQXBwbGUgQ29tcHV0ZXIsIEluYy5cXFF1aWNrVGltZSIpLCBURVhU
KCJJbnN0YWxsRGlyIiksICZ0eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIs
ICZpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplKTsKLQotICAgIGlmIChyZXN1bHQgPT0gRVJST1Jf
U1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikgewotICAgICAgICBTdHJpbmcgcGx1Z2luRGlyID0g
U3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6
ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXHBsdWdpbnMiOwotICAgICAgICBwYXRocy5hcHBl
bmQocGx1Z2luRGlyKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRBZG9iZUFj
cm9iYXRQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBIS0VZIGtleTsK
LSAgICBIUkVTVUxUIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIFRF
WFQoIlNvZnR3YXJlXFxBZG9iZVxcQWNyb2JhdCBSZWFkZXIiKSwgMCwgS0VZX1JFQUQsICZrZXkp
OwotICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV0NIQVIgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgIFZl
Y3RvcjxpbnQ+IGxhdGVzdEFjcm9iYXRWZXJzaW9uOwotICAgIFN0cmluZyBsYXRlc3RBY3JvYmF0
VmVyc2lvblN0cmluZzsKLQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQg
aSA9IDA7OyBpKyspIHsKLSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNp
emVvZihXQ0hBUik7Ci0gICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1l
LCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgaWYgKHJlc3Vs
dCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVmVjdG9y
PGludD4gYWNyb2JhdFZlcnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5hbWUsIG5h
bWVMZW4pKTsKLSAgICAgICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhhY3JvYmF0VmVyc2lvbiwgbGF0
ZXN0QWNyb2JhdFZlcnNpb24pKSB7Ci0gICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvbiA9
IGFjcm9iYXRWZXJzaW9uOwotICAgICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcg
PSBTdHJpbmcobmFtZSwgbmFtZUxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWxh
dGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIERXT1JEIHR5cGU7
Ci0gICAgICAgIFdDSEFSIGFjcm9iYXRJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOwotICAgICAg
ICBEV09SRCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGFjcm9iYXRJbnN0YWxsUGF0
aFN0cik7Ci0KLSAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5LZXlQYXRoID0gIlNvZnR3YXJl
XFxBZG9iZVxcQWNyb2JhdCBSZWFkZXJcXCIgKyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyAr
ICJcXEluc3RhbGxQYXRoIjsKLSAgICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FM
X01BQ0hJTkUsIGFjcm9iYXRQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCksIDAsICZ0eXBlLCAoTFBCWVRFKWFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFjcm9iYXRJ
bnN0YWxsUGF0aFNpemUpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykg
ewotICAgICAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5QYXRoID0gU3RyaW5nKGFjcm9iYXRJ
bnN0YWxsUGF0aFN0ciwgYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAx
KSArICJcXGJyb3dzZXIiOwotICAgICAgICAgICAgcGF0aHMuYXBwZW5kKGFjcm9iYXRQbHVnaW5Q
YXRoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZ0Nsb3NlS2V5KGtleSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgU3RyaW5nIHNhZmFyaVBsdWdpbnNQYXRoKCkKLXsKLSAgICBXQ0hBUiBtb2R1
bGVGaWxlTmFtZVN0cltfTUFYX1BBVEhdOwotICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc1BhdGg7
Ci0gICAgc3RhdGljIGJvb2wgY2FjaGVkUGx1Z2luUGF0aCA9IGZhbHNlOwotCi0gICAgaWYgKCFj
YWNoZWRQbHVnaW5QYXRoKSB7Ci0gICAgICAgIGNhY2hlZFBsdWdpblBhdGggPSB0cnVlOwotCi0g
ICAgICAgIGludCBtb2R1bGVGaWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1lKDAsIG1vZHVs
ZUZpbGVOYW1lU3RyLCBfTUFYX1BBVEgpOwotCi0gICAgICAgIGlmICghbW9kdWxlRmlsZU5hbWVM
ZW4gfHwgbW9kdWxlRmlsZU5hbWVMZW4gPT0gX01BWF9QQVRIKQotICAgICAgICAgICAgZ290byBl
eGl0OwotCi0gICAgICAgIGlmICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZpbGVOYW1lU3Ry
KSkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBwbHVnaW5zUGF0aCA9IFN0cmlu
Zyhtb2R1bGVGaWxlTmFtZVN0cikgKyAiXFxQbHVnaW5zIjsKLSAgICB9Ci1leGl0OgotICAgIHJl
dHVybiBwbHVnaW5zUGF0aDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZE1hY3JvbWVkaWFQ
bHVnaW5QYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgV0NIQVIgc3lzdGVtRGly
ZWN0b3J5U3RyW01BWF9QQVRIXTsKLQotICAgIGlmIChHZXRTeXN0ZW1EaXJlY3Rvcnkoc3lzdGVt
RGlyZWN0b3J5U3RyLCBfY291bnRvZihzeXN0ZW1EaXJlY3RvcnlTdHIpKSA9PSAwKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBXQ0hBUiBtYWNyb21lZGlhRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsK
LQotICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVjdG9y
eVN0ciwgVEVYVCgibWFjcm9tZWRcXEZsYXNoIikpOwotICAgIHBhdGhzLmFwcGVuZChtYWNyb21l
ZGlhRGlyZWN0b3J5U3RyKTsKLQotICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlT
dHIsIHN5c3RlbURpcmVjdG9yeVN0ciwgVEVYVCgibWFjcm9tZWRcXFNob2Nrd2F2ZSAxMCIpKTsK
LSAgICBwYXRocy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7Ci19Ci0KLVZlY3RvcjxT
dHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQotewotICAgIFZlY3Rv
cjxTdHJpbmc+IHBhdGhzOwotICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgo
KTsKLQotICAgIGlmICghb3VyUGF0aC5pc051bGwoKSkKLSAgICAgICAgcGF0aHMuYXBwZW5kKG91
clBhdGgpOwotICAgIGFkZFF1aWNrVGltZVBsdWdpblBhdGgocGF0aHMpOwotICAgIGFkZEFkb2Jl
QWNyb2JhdFBsdWdpblBhdGgocGF0aHMpOwotICAgIGFkZE1vemlsbGFQbHVnaW5QYXRocyhwYXRo
cyk7Ci0gICAgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luUGF0aChwYXRocyk7Ci0gICAgYWRk
TWFjcm9tZWRpYVBsdWdpblBhdGhzKHBhdGhzKTsKLQotICAgIHJldHVybiBwYXRoczsKLX0KLQot
Ym9vbCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKLXsKLSAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJl
ZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICByZXR1cm4gKHJl
ZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKTsKLX0K
LQogUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCiB7CiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKLSAgICBT
dHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7CiAgICAgUGx1Z2luUGFja2FnZSog
cGx1Z2luID0gMDsKICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lu
cy5lbmQoKTsKIAogICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1
Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKCgqaXQpLT5taW1l
VG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CiAgICAgICAgICAgICBwbHVnaW4gPSAo
Kml0KS5nZXQoKTsKLSAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1
Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgIGlmIChwbHVnaW4tPnBhcmVudERpcmVjdG9yeSgp
ID09IG91clBhdGgpCisgICAgICAgICAgICBpZiAoaXNQcmVmZXJyZWRQbHVnaW5QYXRoKHBsdWdp
bi0+cGFyZW50RGlyZWN0b3J5KCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgfQpAQCAtNDczLDcgKzE1NCw2IEBAIFN0cmluZyBQbHVnaW5EYXRhYmFzZTo6TUlNRVR5
cGVGb3JFeHRlbnMKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgU3RyaW5nIG91clBhdGgg
PSBzYWZhcmlQbHVnaW5zUGF0aCgpOwogICAgIFN0cmluZyBtaW1lVHlwZTsKICAgICBQbHVnaW5Q
YWNrYWdlKiBwbHVnaW4gPSAwOwogCkBAIC00ODYsOCArMTY2LDcgQEAgU3RyaW5nIFBsdWdpbkRh
dGFiYXNlOjpNSU1FVHlwZUZvckV4dGVucwogICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CiAgICAgICAgICAgICAgICAgICAg
IG1pbWVUeXBlID0gbWltZV9pdC0+Zmlyc3Q7CiAgICAgICAgICAgICAgICAgICAgIHBsdWdpbiA9
ICgqaXQpLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBpbiBv
dXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4t
PnBhcmVudERpcmVjdG9yeSgpID09IG91clBhdGgpCisgICAgICAgICAgICAgICAgICAgIGlmIChp
c1ByZWZlcnJlZFBsdWdpblBhdGgocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkBAIC00OTgsNyArMTc3LDcgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4
dGVucwogfQogCiBQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6ZmluZFBsdWdpbihjb25z
dCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCi17ICAgCit7CiAgICAgUGx1Z2luUGFja2Fn
ZSogcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOwogICAgIFN0cmluZyBmaWxl
bmFtZSA9IHVybC5zdHJpbmcoKTsKICAgICAKQEAgLTUyMSwyMCArMjAwLDQgQEAgUGx1Z2luUGFj
a2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaQogICAgIHJldHVybiBwbHVnaW47CiB9CiAK
LVBsdWdpblZpZXcqIFBsdWdpbkRhdGFiYXNlOjpjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJl
bnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51
YWxseSkKLXsKLSAgICAvLyBpZiB3ZSBmYWlsIHRvIGZpbmQgYSBwbHVnaW4gZm9yIHRoaXMgTUlN
RSB0eXBlLCBmaW5kUGx1Z2luIHdpbGwgc2VhcmNoIGZvcgotICAgIC8vIGEgcGx1Z2luIGJ5IHRo
ZSBmaWxlIGV4dGVuc2lvbiBhbmQgdXBkYXRlIHRoZSBNSU1FIHR5cGUsIHNvIHBhc3MgYSBtdXRh
YmxlIFN0cmluZwotICAgIFN0cmluZyBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKLSAgICBQbHVn
aW5QYWNrYWdlKiBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKLSAgICAK
LSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2Ug
YW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIGlmICghcGx1Z2luICYmIHJlZnJlc2goKSkgewotICAg
ICAgICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKLSAgICAgICAgcGx1Z2luID0gZmluZFBsdWdp
bih1cmwsIG1pbWVUeXBlQ29weSk7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1cm4gbmV3IFBs
dWdpblZpZXcocGFyZW50RnJhbWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5h
bWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGVDb3B5LCBsb2FkTWFudWFsbHkpOwotfQotCiB9Cklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAkocmV2aXNpb24gMzAyMzEpCisrKyBXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDIwICsy
NywxOSBAQAogI2lmbmRlZiBQbHVnaW5EYXRhYmFzZV9ICiAjZGVmaW5lIFBsdWdpbkRhdGFiYXNl
X0gKIAotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgot
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgi
CiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBF
bGVtZW50OwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEludFNpemU7CiAgICAgY2xhc3Mg
S1VSTDsKICAgICBjbGFzcyBQbHVnaW5QYWNrYWdlOwotICAgIGNsYXNzIFBsdWdpblZpZXc7CiAK
ICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2U+LCBQbHVnaW5QYWNrYWdl
SGFzaD4gUGx1Z2luU2V0OwogICAKQEAgLTUxLDggKzUxLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBwbHVnaW5zKCkgY29uc3Q7CiAgICAg
ICAgIGJvb2wgaXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAg
ICAgICAgIHZvaWQgYWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpOworICAgICAgICBi
b29sIGlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0OwogCiAg
ICAgICAgIFBsdWdpblBhY2thZ2UqIGZpbmRQbHVnaW4oY29uc3QgS1VSTCYsIFN0cmluZyYgbWlt
ZVR5cGUpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzZXRQbHVnaW5QYXRocyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsgbV9wbHVnaW5QYXRocyA9IHBhdGhzOyB9CiAgICAg
ICAgIFBsdWdpblNldCBnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblBhY2thZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luUGFja2FnZS5oCShyZXZpc2lvbiAzMDIzMSkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5Q
YWNrYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxMCBAQAogI2lmbmRlZiBQbHVn
aW5QYWNrYWdlX0gKICNkZWZpbmUgUGx1Z2luUGFja2FnZV9ICiAKLSNpbmNsdWRlIDx3aW5zb2Nr
Mi5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVk
ZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJUaW1lci5o
IgogI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNDMsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgUGx1Z2luUGFja2FnZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdp
blBhY2thZ2U+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIH5QbHVnaW5QYWNrYWdlKCk7Ci0gICAg
ICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7CisgICAgICAgIHN0YXRpYyBQbHVnaW5Q
YWNrYWdlKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgUGxhdGZvcm1G
aWxlVGltZSYgbGFzdE1vZGlmaWVkKTsKICAgICAgICAgCiAgICAgICAgIFN0cmluZyBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0KQEAgLTUzLDcgKzUxLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rl
c2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRGVzY3JpcHRpb25zOyB9CiAgICAg
ICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1pbWVUb0V4dGVuc2lvbnMoKSBjb25zdCB7
IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KIAotICAgICAgICB1bnNpZ25lZCBQbHVnaW5Q
YWNrYWdlOjpoYXNoKCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKICAg
ICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1
Z2luUGFja2FnZSYgYik7CiAKICAgICAgICAgYm9vbCBsb2FkKCk7CkBAIC02NCwxNiArNjIsMTUg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGludCBjb21wYXJlRmlsZVZlcnNpb24o
dW5zaWduZWQgY29tcGFyZVZlcnNpb25NUywgdW5zaWduZWQgY29tcGFyZVZlcnNpb25MUykgY29u
c3Q7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpOworICAgICAgICBQbHVnaW5QYWNrYWdl
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgUGxhdGZvcm1GaWxlVGltZSYgbGFzdE1vZGlmaWVk
KTsKICAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKLSAgICAgICAgdm9pZCBzdG9yZUZpbGVWZXJz
aW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpOwogICAgICAgICBib29sIGlzUGx1Z2luQmxhY2ts
aXN0ZWQoKTsKIAogICAgICAgICBib29sIG1faXNMb2FkZWQ7CiAgICAgICAgIGludCBtX2xvYWRD
b3VudDsKIAotICAgICAgICBEV09SRCBtX2ZpbGVWZXJzaW9uTVM7Ci0gICAgICAgIERXT1JEIG1f
ZmlsZVZlcnNpb25MUzsKKyAgICAgICAgdW5zaWduZWQgbV9maWxlVmVyc2lvbk1TOworICAgICAg
ICB1bnNpZ25lZCBtX2ZpbGVWZXJzaW9uTFM7CiAKICAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRp
b247CiAgICAgICAgIFN0cmluZyBtX3BhdGg7CkBAIC04NCw4ICs4MSw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRp
b25zOwogICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKIAot
ICAgICAgICBITU9EVUxFIG1fbW9kdWxlOwotICAgICAgICBGSUxFVElNRSBtX2xhc3RNb2RpZmll
ZDsKKyAgICAgICAgUGxhdGZvcm1Nb2R1bGUgbV9tb2R1bGU7CisgICAgICAgIFBsYXRmb3JtRmls
ZVRpbWUgbV9sYXN0TW9kaWZpZWQ7CiAKICAgICAgICAgTlBQX1NodXRkb3duUHJvY1B0ciBtX05Q
UF9TaHV0ZG93bjsKICAgICAgICAgTlBQbHVnaW5GdW5jcyBtX3BsdWdpbkZ1bmNzOwpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAJKHJldmlzaW9uIDMwMjMx
KQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDk5ICsyNiwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlBsdWdpbkRhdGFiYXNlLmgiCiAKLSNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1
ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxzaGx3YXBpLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGx1Z2luRGF0YWJhc2UqIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCkK
LXsKLSAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIHBsdWdpbnMgPSAwOwotICAgIAotICAgIGlm
ICghcGx1Z2lucykgewotICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlOwotICAg
ICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdp
blBhdGhzKCkpOwotICAgICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHBsdWdpbnM7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OmFkZEV4dHJhUGx1Z2luUGF0
aChjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgbV9wbHVnaW5QYXRocy5hcHBlbmQocGF0aCk7
Ci0gICAgcmVmcmVzaCgpOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKLXsg
ICAKLSAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsKLQotICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdl
ZCA9IGZhbHNlOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IHNldCBvZiBwbHVnaW5zCi0gICAgbmV3
UGx1Z2lucyA9IGdldFBsdWdpbnNJblBhdGhzKCk7Ci0KLSAgICBpZiAoIW1fcGx1Z2lucy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7Ci0KLSAgICAg
ICAgUGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZCA9IG1fcGx1Z2luczsKLQotICAgICAgICBQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7Ci0gICAgICAgIGZv
ciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgcGx1Z2luc1RvVW5sb2FkLnJlbW92ZSgqaXQpOwot
Ci0gICAgICAgIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgICAgIG5ld1BsdWdpbnMucmVtb3ZlKCppdCk7Ci0KLSAgICAgICAgLy8gVW5sb2Fk
IHBsdWdpbnMKLSAgICAgICAgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVuZCgpOwotICAgICAgICBm
b3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5zVG9VbmxvYWQuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgbV9wbHVnaW5zLnJlbW92ZSgqaXQpOwot
Ci0gICAgICAgIC8vIEFkZCBuZXcgcGx1Z2lucwotICAgICAgICBlbmQgPSBuZXdQbHVnaW5zLmVu
ZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVn
aW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQo
Kml0KTsKLQotICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0Vt
cHR5KCkgfHwgIW5ld1BsdWdpbnMuaXNFbXB0eSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1f
cGx1Z2lucyA9IG5ld1BsdWdpbnM7Ci0gICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBtX3BsdWdpbnMuYWRkKCppdCk7Ci0KLSAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFu
ZXdQbHVnaW5zLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICAvLyBSZWdpc3RlciBwbHVnLWluIE1J
TUUgdHlwZXMKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5l
bmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIEdldCBNSU1FIHR5cGVzCi0g
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgq
aXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKLSAgICAgICAgZm9yIChNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlw
dGlvbnMoKS5iZWdpbigpOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpIHsKLSAgICAgICAg
ICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5maXJzdCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdlZDsKLX0KLQotVmVjdG9yPFBsdWdp
blBhY2thZ2UqPiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucygpIGNvbnN0Ci17Ci0gICAgVmVjdG9y
PFBsdWdpblBhY2thZ2UqPiByZXN1bHQ7Ci0KLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXN1
bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRp
YyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVkgcm9vdEtleSwgUGx1Z2lu
U2V0JiBwbHVnaW5zKQogewogICAgIEhLRVkga2V5OwpAQCAtNDM1LDkwICszNTAsMTQgQEAgVmVj
dG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbAogICAgIHJldHVybiBwYXRoczsK
IH0KIAotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVU
eXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwg
dHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICByZXR1
cm4gKHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUp
KTsKLX0KLQotUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OnBsdWdpbkZvck1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCitib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJl
ZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewotICAgIGlmIChtaW1lVHlw
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5nIGtleSA9IG1pbWVU
eXBlLmxvd2VyKCk7CiAgICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwot
ICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IDA7Ci0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0KLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIGlmICgoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkgewotICAg
ICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAgICAgICAvLyBwcmVmZXIgcGx1
Z2lucyBpbiBvdXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5Ci0gICAgICAgICAgICBpZiAocGx1Z2lu
LT5wYXJlbnREaXJlY3RvcnkoKSA9PSBvdXJQYXRoKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpbjsKLX0KLQotU3RyaW5nIFBsdWdp
bkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikg
Y29uc3QKLXsKLSAgICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMu
ZW5kKCk7Ci0gICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwotICAgIFN0
cmluZyBtaW1lVHlwZTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAwOworICAgIGlmICgh
b3VyUGF0aC5pc051bGwoKSAmJiAhcGF0aC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG91clBh
dGggPT0gcGF0aDsKIAotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTUlNRVRvRXh0ZW5z
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9u
cygpLmVuZCgpOwotCi0gICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9p
dCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKLSAgICAgICAgICAg
ICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHBy
ZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtaW1lVHlwZTsKLX0KLQotUGx1Z2luUGFj
a2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcm
IG1pbWVUeXBlKQoteyAgIAotICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IHBsdWdpbkZvck1J
TUVUeXBlKG1pbWVUeXBlKTsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwuc3RyaW5nKCk7Ci0g
ICAgCi0gICAgaWYgKCFwbHVnaW4pIHsKLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLmxh
c3RQYXRoQ29tcG9uZW50KCk7Ci0gICAgICAgIGlmICghZmlsZW5hbWUuZW5kc1dpdGgoIi8iKSkg
ewotICAgICAgICAgICAgaW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcu
Jyk7Ci0gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uUG9zICE9IC0xKSB7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nIGV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhleHRlbnNpb25Qb3MgKyAx
KTsKLQotICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0
ZW5zaW9uKTsKLSAgICAgICAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1l
VHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGSVhNRTog
aWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSBXaW5kb3dzIGZvciB0aGUgbWltZSB0
eXBlIAotICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbi4KLQotICAgIHJldHVy
biBwbHVnaW47CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB9Cg==
</data>
<flag name="review"
          id="8354"
          type_id="1"
          status="-"
          setter="jhoneycutt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19142</attachid>
            <date>2008-02-15 12:45:02 -0800</date>
            <delta_ts>2008-02-22 16:14:04 -0800</delta_ts>
            <desc>Updated patch per Jon&apos;s comments</desc>
            <filename>webkit-shared-plugindatabase.patch</filename>
            <type>text/plain</type>
            <size>61081</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDI5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDgtMDItMTUgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBBZGQgUGx1Z2luSW5mb1N0b3JlLmNwcCBhbmQgbmV3IFBsdWdpbkRhdGFiYXNlLmNwcCB0
byBHVEsrIGFuZCBRdCBwb3J0cworICAgICAgICBSZW1vdmUgb2xkIFBsdWdJbkluZm9TdG9yZVF0
LmNwcCBhcyBpdCBpcyBvYnNvbGV0ZWQgYnkgc2hhcmVkIGNvZGUKKyAgICAgICAgQWRkIFBsdWdp
bkluZm9TdG9yZSwgUGx1Z2luRGF0YWJhc2UsIGFuZCBQbHVnaW5TdHJlYW0gZmlsZXMgdG8gV3gg
YnVpbGQKKyAgICAgICAgQWRkIG5ldyBQbHVnaW5EYXRhYmFzZS5jcHAgdG8gV2luZG93cyBidWls
ZAorICAgICAgICBBZGQgdGVtcG9yYXJ5IHN0dWJzIGZvciBuZXcgUGx1Z2luRGF0YWJhc2UgYW5k
IFBsdWdpblBhY2thZ2UKKyAgICAgICAgc2hhcmVkIGNsYXNzZXMgdG8gR1RLKywgUXQsIGFuZCBX
eCBwb3J0cworICAgICAgICBDb3B5IFBsdWdpbkRhdGFiYXNlV2luLmNwcCB0byBQbHVnaW5EYXRh
YmFzZS5jcHAgdG8gcHJlc2VydmUgaGlzdG9yeQorICAgICAgICBSZW1vdmUgc2hhcmVkIGNvZGUg
ZnJvbSBQbHVnaW5EYXRhYmFzZVdpbi5jcHAKKyAgICAgICAgUmVtb3ZlIFdpbmRvd3Mtc3BlY2lm
aWMgY29kZSBmcm9tIFBsdWdpbkRhdGFiYXNlLmNwcAorICAgICAgICBVc2UgUGxhdGZvcm1Nb2R1
bGUgYW5kIFBsYXRmb3JtRmlsZVRpbWUgaW5zdGVhZCBvZiBITU9EVUxFIGFuZCBGSUxFVElNRQor
ICAgICAgICBSZW1vdmUgZXh0cmFuZW91cyBQbHVnaW5QYWNrYWdlOjogZnJvbSBoYXNoKCkgY2xh
c3MgbWV0aG9kIHByb3RvdHlwZQorICAgICAgICBTdWJzdW1lIHN0b3JlRmlsZVZlcnNpb24gaW50
byBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNrbGlzdGVkCisgICAgICAgIE1ha2UgY29tcGFy
ZUZpbGVWZXJzaW9uIGEgc3RhdGljIGhlbHBlciBtZXRob2QgaW4gV2luZG93cyBwb3J0CisgICAg
ICAgIE1vdmUgbV9maWxlVmVyc2lvbltNTF1TIHZhcmlhYmxlcyBhcyBhZGRpdGlvbmFsIGFyZ3Vt
ZW50cyB0byB0aGUKKyAgICAgICAgY29tcGFyZUZpbGVWZXJzaW9uIHN0YXRpYyBoZWxwZXIgbWV0
aG9kLCBhcyB0aGV5IGFyZSBXaW5kb3dzLXNwZWNpZmljCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5i
a2w6CisgICAgICAgICogd2ViY29yZS1iYXNlLmJrbDoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVR
dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOgorICAgICAgICAqIHBsdWdpbnMvUGx1
Z2luRGF0YWJhc2UuY3BwOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaDoKKyAg
ICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHA6CisgICAgICAgICogcGx1
Z2lucy9QbHVnaW5QYWNrYWdlLmg6CisKIDIwMDgtMDItMTUgIFNhbSBXZWluaWcgIDxzYW1Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQko
cmV2aXNpb24gMzAyOTMpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkp
CkBAIC04NDgsNiArODQ4LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRm
b3JtL1RpbWVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5jcHAg
XAogCVdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkRhdGFiYXNlLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAgXAog
CVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9B
dXRvVGFibGVMYXlvdXQuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNwcCBcCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHJldmlzaW9uIDMwMjkzKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpA
QCAtNzg2LDYgKzc4Niw4IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL1RpbWVyLmNwcCBc
CiAgICAgcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9XaWRn
ZXQuY3BwIFwKKyAgICBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcCBcCisgICAgcGx1Z2lucy9Q
bHVnaW5JbmZvU3RvcmUuY3BwIFwKICAgICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgXAogICAg
IHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwIFwKICAgICByZW5kZXJpbmcvYmlkaS5jcHAg
XApAQCAtOTM1LDcgKzkzNyw2IEBAIHF0LXBvcnQgewogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3Jt
TW91c2VFdmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAg
XAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtU2Nyb2xsQmFyUXQuY3BwIFwKLSAgICBwbGF0Zm9y
bS9xdC9QbHVnSW5JbmZvU3RvcmVRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BvcHVwTWVudVF0
LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUVdlYlBvcHVwLmNwcCBcCiAgICAgcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRdC5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJldmlzaW9uIDMwMjkzKQor
KysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTYzMSw2ICs2
MzEsMTIgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAg
ICBwbGF0Zm9ybS9zcWwvU1FMVmFsdWUuY3BwCiAgICAgPC9zZXQ+CiAKKyAgICA8c2V0IGFwcGVu
ZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfUExVR0lOUyI+CisgICAgICAgIHBsdWdpbnMvUGx1
Z2luRGF0YWJhc2UuY3BwCisgICAgICAgIHBsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcAorICAg
ICAgICBwbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKyAgICA8L3NldD4KKwogICAgIDxzZXQgYXBw
ZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19HSUYiPgogICAgICAgICBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCkluZGV4OiBXZWJDb3JlL3dlYmNvcmUt
YmFzZS5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93ZWJjb3JlLWJhc2UuYmtsCShyZXZpc2lv
biAzMDI5MykKKysrIFdlYkNvcmUvd2ViY29yZS1iYXNlLmJrbAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNiArNDgsNyBAQCB3eFdlYkNvcmUgcG9ydCBCYWtlZmlsZSBwcm9qZWN0IGZpbGUuCiAgICAg
ICAgICQoV0VCQ09SRV9TT1VSQ0VTX1BBR0UpCiAgICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX0hJ
U1RPUlkpCiAgICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX1BMQVRGT1JNKQorICAgICAgICAkKFdF
QkNPUkVfU09VUkNFU19QTFVHSU5TKQogICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19SRU5ERVJJ
TkcpCiAgICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX1NUT1JBR0UpCiAgICAgICAgICQoV0VCQ09S
RV9TT1VSQ0VTX1hCTSkKQEAgLTk1LDYgKzk2LDcgQEAgd3hXZWJDb3JlIHBvcnQgQmFrZWZpbGUg
cHJvamVjdCBmaWxlLgogICAgICAgICA8aW5jbHVkZT4kKFdLX1JPT1QpPC9pbmNsdWRlPgogICAg
ICAgICA8aW5jbHVkZT4kKFdLX1JPT1QpL0phdmFTY3JpcHRDb3JlPC9pbmNsdWRlPgogICAgICAg
ICA8aW5jbHVkZT4kKFdLX1JPT1QpL0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFkZXJzPC9p
bmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFdLX1JPT1QpL0phdmFTY3JpcHRDb3JlL2JpbmRp
bmdzPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFdLX1JPT1QpL0phdmFTY3JpcHRDb3Jl
L2tqczwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0Q29y
ZS9wY3JlPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFdLX1JPT1QpL0phdmFTY3JpcHRD
b3JlL3d0ZjwvaW5jbHVkZT4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkocmV2aXNpb24gMzAyOTMpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC03OTY1LDYgKzc5NjUsMTAgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5EYXRh
YmFzZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbHVnaW5zXFBsdWdpbkRhdGFiYXNlLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZp
c2lvbiAzMDI5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDggQEAKICNpbmNsdWRlICJHbG9iYWxIaXN0
b3J5LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
aW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNTksMTIgKzYwLDE0IEBAIFZlY3RvcjxjaGFy
PiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QKIAogYm9vbCBXZWJDb3JlOjpoaXN0b3J5Q29u
dGFpbnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KIAotUGx1Z2lu
SW5mbyogUGx1Z2luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1
bnNpZ25lZCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDt9Ci11bnNpZ25lZCBQbHVnaW5J
bmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
MDsgfQotU3RyaW5nIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9
Ci1ib29sIFdlYkNvcmU6OlBsdWdpbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9p
ZCBXZWJDb3JlOjpyZWZyZXNoUGx1Z2lucyhib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLQor
UGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0IHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFBsdWdpblNldCgpOyB9CitWZWN0b3I8U3RyaW5nPiBQbHVn
aW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpblBhdGhzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gVmVjdG9yPFN0cmluZz4oKTsgfQorYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQ
bHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IGZhbHNlOyB9Citib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpIHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Cit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29u
c3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjpl
cXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiwgY29uc3QgUGx1Z2luUGFja2FnZSYpIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Citib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKSB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorUGx1Z2luUGFja2FnZTo6flBsdWdp
blBhY2thZ2UoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIAogQ29sb3IgV2ViQ29yZTo6Zm9jdXNS
aW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2b2lkIFdlYkNvcmU6OnNldEZvY3Vz
UmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3F0L1BsdWdJbkluZm9TdG9yZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3F0L1BsdWdJbkluZm9TdG9yZVF0LmNwcAkocmV2aXNpb24gMzAyOTMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3F0L1BsdWdJbkluZm9TdG9yZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw4OSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0g
ICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRp
bmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdlcyBmcm9tIHRoZSB3ZWIu
IEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSovCi0jaW5jbHVkZSAi
UGx1Z2luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAicWRlYnVnLmgiCi0jaWYgUVRfVkVSU0lPTiA8
IDB4MDQwNDAwCi0jaW5jbHVkZSAicXdlYm9iamVjdHBsdWdpbl9wLmgiCi0jZW5kaWYKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBsdWdpbklu
Zm8qIFBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5z
aWduZWQgaSkKLXsKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj4+Pj4+Pj4+PiBQbHVnaW5JbmZvU3Rv
cmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KCIgPDwgaSA8PCAiKSI7Ci0KLSNp
ZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICBRV2ViRmFjdG9yeUxvYWRlciAqbG9hZGVyID0g
UVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKTsKLSAgICBpZiAoaSA+IGxvYWRlci0+bV9wbHVnaW5J
bmZvLmNvdW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbnN0IFFXZWJGYWN0b3J5TG9h
ZGVyOjpJbmZvICZxaW5mbyA9IGxvYWRlci0+bV9wbHVnaW5JbmZvLmF0KGkpOwotICAgIFBsdWdp
bkluZm8gKmluZm8gPSBuZXcgUGx1Z2luSW5mbzsKLSAgICBpbmZvLT5uYW1lID0gcWluZm8ubmFt
ZTsKLSAgICBpbmZvLT5kZXNjID0gcWluZm8uZGVzY3JpcHRpb247Ci0gICAgZm9yZWFjaCAoY29u
c3QgUVdlYkZhY3RvcnlMb2FkZXI6Ok1pbWVJbmZvICZtLCBxaW5mby5taW1lcykgewotICAgICAg
ICBNaW1lQ2xhc3NJbmZvICptaW1lID0gbmV3IE1pbWVDbGFzc0luZm87Ci0gICAgICAgIG1pbWUt
PnR5cGUgPSBtLnR5cGU7Ci0gICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87Ci0gICAgICAgIGZv
cmVhY2ggKFFTdHJpbmcgZXh0LCBtLmV4dGVuc2lvbnMpCi0gICAgICAgICAgICBtaW1lLT5zdWZm
aXhlcy5hcHBlbmQoZXh0KTsKLSAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOwotICAg
IH0KLSAgICByZXR1cm4gaW5mbzsKLSNlbHNlCi0gICAgcmV0dXJuIDA7IC8vICMjIyBGSVhNRQot
I2VuZGlmCi19Ci0KLXVuc2lnbmVkIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25z
dAotewotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAgIC8vcURlYnVnKCkgPDwgIj4+Pj4+
Pj4+Pj4+IFBsdWdpbkluZm9TdG9yZTo6Y291bnQgPSIgPDwgUVdlYkZhY3RvcnlMb2FkZXI6OnNl
bGYoKS0+a2V5cygpLmNvdW50KCk7Ci0gICAgcmV0dXJuIFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxm
KCktPmtleXMoKS5jb3VudCgpOwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi1T
dHJpbmcgUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgc3R1YmJlZCBvdXQg
YW5kIHNob3VsZCByZWFsbHkgcmV0dXJuIHRoZSBuYW1lIG9mIGEgcGx1Zy1pbiBwYWNrYWdlIGZv
cgotICAgIC8vIGEgZ2l2ZW4gTUlNRSB0eXBlLgotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSAg
ICAKLWJvb2wgUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYgc3RyaW5nKQotewotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAgIGJvb2wg
c3VwcG9ydHMgPSBRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpLT5zdXBwb3J0c01pbWVUeXBlKHN0
cmluZyk7Ci0jZWxzZQotICAgIGJvb2wgc3VwcG9ydHMgPSBmYWxzZTsKLSNlbmRpZgotICAgIC8v
cURlYnVnKCkgPDwgIj4+Pj4+Pj4+Pj4+IFBsdWdpbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlw
ZSgiIDw8IHN0cmluZyA8PCAiKSA9IiA8PCBzdXBwb3J0czsKLSAgICByZXR1cm4gc3VwcG9ydHM7
Ci19Ci0KLXZvaWQgcmVmcmVzaFBsdWdpbnMoYm9vbCkgewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAJKHJldmlzaW9uIDMwMjkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQ29sbGFib3JhLCBMdGQuCiAgKgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CkBAIC01OSw3ICs2MCw4IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
ICJQYXRoLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1
Z2luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQ
bHVnaW5QYWNrYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCkBAIC03MCw2ICs3MiwxNSBAQAog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlOjpn
ZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFBsdWdp
blNldCgpOyB9CitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpblBh
dGhzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsgfQorYm9v
bCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpIGNv
bnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Citib29sIFBsdWdpblBhY2th
Z2U6OmZldGNoSW5mbygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Cit1bnNp
Z25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiwg
Y29uc3QgUGx1Z2luUGFja2FnZSYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9
Citib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBm
YWxzZTsgfQorUGx1Z2luUGFja2FnZTo6flBsdWdpblBhY2thZ2UoKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRL
ZXlTaXplcygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlz
aW9uIDMwMjkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzLDcgKzY0LDggQEAKICNpbmNsdWRlICJQbGF0
Zm9ybU1lbnVEZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3Jl
LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNp
bmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgpAQCAtMTE3LDExICsxMTksMTQgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB2b2lkIFdlYkNvcmU6OmZpbmRXb3JkQm91bmRhcnkoVUNoYXIgY29uc3Qq
IHN0cixpbnQgbGVuLGludCBwb3NpdGlvbixpbnQqIHN0YXJ0LCBpbnQqIGVuZCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyAqc3RhcnQ9cG9zaXRpb247ICplbmQ9cG9zaXRpb247IH0KIAotUGx1Z2luSW5m
bypQbHVnaW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2ln
bmVkKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwO30KLXVuc2lnbmVkIFBsdWdpbkluZm9T
dG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9
Ci1ib29sIFdlYkNvcmU6OlBsdWdpbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotU3Ry
aW5nIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci12b2lkIFdl
YkNvcmU6OnJlZnJlc2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorUGx1Z2lu
U2V0IFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0IHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIFBsdWdpblNldCgpOyB9CitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRh
YmFzZTo6ZGVmYXVsdFBsdWdpblBhdGhzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVj
dG9yPFN0cmluZz4oKTsgfQorYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5Q
YXRoKGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNl
OyB9Citib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpIHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIGZhbHNlOyB9Cit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChj
b25zdCBQbHVnaW5QYWNrYWdlJiwgY29uc3QgUGx1Z2luUGFja2FnZSYpIHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Citib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKSB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorUGx1Z2luUGFja2FnZTo6flBsdWdpblBhY2th
Z2UoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIAogdm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQo
Ym9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiAKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFi
YXNlLmNwcAkocmV2aXNpb24gMzAwNjgpCShmcm9tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
RGF0YWJhc2VXaW4uY3BwOjMwMDY4KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKworI2luY2x1
ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2Uu
aCIKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8c2hsd2FwaS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1BsdWdpbkRhdGFiYXNlKiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVk
UGx1Z2lucygpCit7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBwbHVnaW5zID0gMDsKKyAg
ICAKKyAgICBpZiAoIXBsdWdpbnMpIHsKKyAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRh
YmFzZTsKKyAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2U6OmRl
ZmF1bHRQbHVnaW5QYXRocygpKTsKKyAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOworICAgIH0K
KworICAgIHJldHVybiBwbHVnaW5zOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjphZGRFeHRy
YVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIG1fcGx1Z2luUGF0aHMuYXBw
ZW5kKHBhdGgpOworICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVm
cmVzaCgpCit7ICAgCisgICAgUGx1Z2luU2V0IG5ld1BsdWdpbnM7CisKKyAgICBib29sIHBsdWdp
blNldENoYW5nZWQgPSBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQgb2YgcGx1Z2lu
cworICAgIG5ld1BsdWdpbnMgPSBnZXRQbHVnaW5zSW5QYXRocygpOworCisgICAgaWYgKCFtX3Bs
dWdpbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigp
OworCisgICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdpbnM7CisKKyAg
ICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOwor
ICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHBsdWdpbnNUb1VubG9hZC5yZW1v
dmUoKml0KTsKKworICAgICAgICBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICAgICBuZXdQbHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAg
IC8vIFVubG9hZCBwbHVnaW5zCisgICAgICAgIGVuZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsK
KyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5s
b2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5yZW1v
dmUoKml0KTsKKworICAgICAgICAvLyBBZGQgbmV3IHBsdWdpbnMKKyAgICAgICAgZW5kID0gbmV3
UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3Bs
dWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9V
bmxvYWQuaXNFbXB0eSgpIHx8ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBtX3BsdWdpbnMgPSBuZXdQbHVnaW5zOworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENo
YW5nZWQgPSAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIg
cGx1Zy1pbiBNSU1FIHR5cGVzCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyBHZXQgTUlN
RSB0eXBlcworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1h
cF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CisgICAgICAgIGZvciAo
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWlt
ZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KSB7
CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpblNldENoYW5nZWQ7Cit9CisKK1Zl
Y3RvcjxQbHVnaW5QYWNrYWdlKj4gUGx1Z2luRGF0YWJhc2U6OnBsdWdpbnMoKSBjb25zdAorewor
ICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZIHJvb3RL
ZXksIFBsdWdpblNldCYgcGx1Z2lucykKK3sKKyAgICBIS0VZIGtleTsKKyAgICBIUkVTVUxUIHJl
c3VsdCA9IFJlZ09wZW5LZXlFeFcocm9vdEtleSwgTCJTb2Z0d2FyZVxcTW96aWxsYVBsdWdpbnMi
LCAwLCBLRVlfRU5VTUVSQVRFX1NVQl9LRVlTLCAma2V5KTsKKworICAgIGlmIChyZXN1bHQgIT0g
RVJST1JfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOworCisgICAgd2NoYXJfdCBuYW1lWzEyOF07
CisgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOworCisgICAgLy8gRW51bWVyYXRlIHN1YmtleXMK
KyAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09SRCBuYW1lTGVuID0gX2Nv
dW50b2YobmFtZSk7CisgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1l
LCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgV0NIQVIg
cGF0aFN0cltfTUFYX1BBVEhdOworICAgICAgICBEV09SRCBwYXRoU3RyU2l6ZSA9IHNpemVvZihw
YXRoU3RyKTsKKyAgICAgICAgRFdPUkQgdHlwZTsKKworICAgICAgICByZXN1bHQgPSBTSEdldFZh
bHVlKGtleSwgbmFtZSwgVEVYVCgiUGF0aCIpLCAmdHlwZSwgKExQQllURSlwYXRoU3RyLCAmcGF0
aFN0clNpemUpOworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MgfHwgdHlwZSAh
PSBSRUdfU1opCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBXSU4zMl9GSUxFX0FU
VFJJQlVURV9EQVRBIGF0dHJpYnV0ZXM7CisgICAgICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0V4
KHBhdGhTdHIsIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmF0dHJpYnV0ZXMpID09IDApCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gUGx1
Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZShTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBz
aXplb2YoV0NIQVIpIC0gMSksIGF0dHJpYnV0ZXMuZnRMYXN0V3JpdGVUaW1lKTsKKworICAgICAg
ICBpZiAocGFja2FnZSkKKyAgICAgICAgICAgIHBsdWdpbnMuYWRkKHBhY2thZ2UpOworICAgIH0K
KworICAgIFJlZ0Nsb3NlS2V5KGtleSk7Cit9CisKK1BsdWdpblNldCBQbHVnaW5EYXRhYmFzZTo6
Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxl
bmFtZXM7CisgICAgUGx1Z2luU2V0IHBsdWdpbnM7CisKKyAgICBIQU5ETEUgaEZpbmQgPSBJTlZB
TElEX0hBTkRMRV9WQUxVRTsKKyAgICBXSU4zMl9GSU5EX0RBVEFXIGZpbmRGaWxlRGF0YTsKKwor
ICAgIFBsdWdpblBhY2thZ2UqIG9sZFdNUFBsdWdpbiA9IDA7CisgICAgUGx1Z2luUGFja2FnZSog
bmV3V01QUGx1Z2luID0gMDsKKworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BsdWdpblBhdGhzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5QYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAqaXQgKyAiXFwqIjsKKworICAgICAgICBoRmluZCA9
IEZpbmRGaXJzdEZpbGVXKHBhdHRlcm4uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwg
JmZpbmRGaWxlRGF0YSk7CisKKyAgICAgICAgaWYgKGhGaW5kID09IElOVkFMSURfSEFORExFX1ZB
TFVFKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAg
aWYgKGZpbmRGaWxlRGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNU
T1JZKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBTdHJpbmcgZmls
ZW5hbWUgPSBTdHJpbmcoZmluZEZpbGVEYXRhLmNGaWxlTmFtZSwgd2NzbGVuKGZpbmRGaWxlRGF0
YS5jRmlsZU5hbWUpKTsKKyAgICAgICAgICAgIGlmICgoIWZpbGVuYW1lLnN0YXJ0c1dpdGgoIm5w
IiwgZmFsc2UpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aCgiZGxsIiwgZmFsc2UpKSAmJgorICAgICAg
ICAgICAgICAgICghZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJQbHVnaW4uZGxsIikgfHwg
IWl0LT5lbmRzV2l0aCgiU2hvY2t3YXZlIDEwIiwgZmFsc2UpKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgU3RyaW5nIGZ1bGxQYXRoID0gKml0ICsgIlxcIiArIGZp
bGVuYW1lOworICAgICAgICAgICAgaWYgKCF1bmlxdWVGaWxlbmFtZXMuYWRkKGZ1bGxQYXRoKS5z
ZWNvbmQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAg
UGx1Z2luUGFja2FnZSogcGx1Z2luUGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2th
Z2UoZnVsbFBhdGgsIGZpbmRGaWxlRGF0YS5mdExhc3RXcml0ZVRpbWUpOworCisgICAgICAgICAg
ICBpZiAocGx1Z2luUGFja2FnZSkgeworICAgICAgICAgICAgICAgIHBsdWdpbnMuYWRkKHBsdWdp
blBhY2thZ2UpOworCisgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVu
YW1lLCAibnBkc3BsYXkuZGxsIikpCisgICAgICAgICAgICAgICAgICAgIG9sZFdNUFBsdWdpbiA9
IHBsdWdpblBhY2thZ2U7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoZmlsZW5hbWUsICJucC1tc3dtcC5kbGwiKSkKKyAgICAgICAgICAgICAgICAgICAgbmV3V01Q
UGx1Z2luID0gcGx1Z2luUGFja2FnZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IHdoaWxl
IChGaW5kTmV4dEZpbGVXKGhGaW5kLCAmZmluZEZpbGVEYXRhKSAhPSAwKTsKKworICAgICAgICBG
aW5kQ2xvc2UoaEZpbmQpOworICAgIH0KKworICAgIGFkZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtF
WV9MT0NBTF9NQUNISU5FLCBwbHVnaW5zKTsKKyAgICBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhL
RVlfQ1VSUkVOVF9VU0VSLCBwbHVnaW5zKTsKKworICAgIC8vIElmIGJvdGggdGhlIG9sZCBhbmQg
bmV3IFdNUCBwbHVnaW4gYXJlIHByZXNlbnQgaW4gdGhlIHBsdWdpbnMgc2V0LCAKKyAgICAvLyB3
ZSByZW1vdmUgdGhlIG9sZCBvbmUgc28gd2UgZG9uJ3QgZW5kIHVwIGNob29zaW5nIHRoZSBvbGQg
b25lLgorICAgIGlmIChvbGRXTVBQbHVnaW4gJiYgbmV3V01QUGx1Z2luKQorICAgICAgICBwbHVn
aW5zLnJlbW92ZShvbGRXTVBQbHVnaW4pOworCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3N0
YXRpYyBpbmxpbmUgVmVjdG9yPGludD4gcGFyc2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmVyc2lvblN0cmluZykKK3sKKyAgICBWZWN0b3I8aW50PiB2ZXJzaW9uOworCisgICAgdW5zaWdu
ZWQgc3RhcnRQb3MgPSAwOworICAgIHVuc2lnbmVkIGVuZFBvczsKKyAgICAKKyAgICB3aGlsZSAo
c3RhcnRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIGZvciAoZW5kUG9z
ID0gc3RhcnRQb3M7IGVuZFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQor
ICAgICAgICAgICAgaWYgKHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0
cmluZ1tlbmRQb3NdID09ICdfJykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBp
bnQgdmVyc2lvbkNvbXBvbmVudCA9IHZlcnNpb25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBl
bmRQb3MgLSBzdGFydFBvcykudG9JbnQoKTsKKyAgICAgICAgdmVyc2lvbi5hcHBlbmQodmVyc2lv
bkNvbXBvbmVudCk7CisKKyAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAgIH0KKwor
ICAgIHJldHVybiB2ZXJzaW9uOworfQorCisvLyBUaGlzIHJldHVybnMgd2hldGhlciB2ZXJzaW9u
QSBpcyBoaWdoZXIgdGhhbiB2ZXJzaW9uQgorc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVWZXJz
aW9ucyhjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkEsIGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJz
aW9uQikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVyc2lvbkEuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgaWYgKGkgPj0gdmVyc2lvbkIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHZlcnNpb25BW2ldID4gdmVyc2lvbkJbaV0pCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmVyc2lvbkFbaV0gPCB2ZXJz
aW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB3
ZSBjb21lIGhlcmUsIHRoZSB2ZXJzaW9ucyBhcmUgZWl0aGVyIHRoZSBzYW1lIG9yIHZlcnNpb25C
IGhhcyBhbiBleHRyYSBjb21wb25lbnQsIGp1c3QgcmV0dXJuIGZhbHNlCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkTW96aWxsYVBsdWdpblBhdGhzKFZlY3Rv
cjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICAvLyBFbnVtZXJhdGUgYWxsIE1vemlsbGEgcGx1Z2lu
IGRpcmVjdG9yaWVzIGluIHRoZSByZWdpc3RyeQorICAgIEhLRVkga2V5OworICAgIExPTkcgcmVz
dWx0OworICAgIAorICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUs
IFRFWFQoIlNvZnR3YXJlXFxNb3ppbGxhIiksIDAsIEtFWV9SRUFELCAma2V5KTsKKyAgICBpZiAo
cmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgV0NIQVIgbmFtZVsxMjhdOworICAg
ICAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7CisKKyAgICAgICAgLy8gRW51bWVyYXRlIHN1Ymtl
eXMKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKKyAgICAgICAgICAgIERXT1JEIG5h
bWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOworICAgICAgICAgICAgcmVzdWx0
ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1v
ZGlmaWVkKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uc1BhdGgg
PSBTdHJpbmcobmFtZSwgbmFtZUxlbikgKyAiXFxFeHRlbnNpb25zIjsKKyAgICAgICAgICAgIEhL
RVkgZXh0ZW5zaW9uc0tleTsKKworICAgICAgICAgICAgLy8gVHJ5IG9wZW5pbmcgdGhlIGtleQor
ICAgICAgICAgICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KGtleSwgZXh0ZW5zaW9uc1BhdGguY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgS0VZX1JFQUQsICZleHRlbnNpb25zS2V5
KTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAg
ICAgICAgICAgLy8gTm93IGdldCB0aGUgcGx1Z2lucyBwYXRoCisgICAgICAgICAgICAgICAgV0NI
QVIgcGx1Z2luc1BhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgICAgICAgICBEV09SRCBwbHVn
aW5zUGF0aFNpemUgPSBzaXplb2YocGx1Z2luc1BhdGhTdHIpOworICAgICAgICAgICAgICAgIERX
T1JEIHR5cGU7CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBSZWdRdWVyeVZhbHVlRXgoZXh0
ZW5zaW9uc0tleSwgVEVYVCgiUGx1Z2lucyIpLCAwLCAmdHlwZSwgKExQQllURSkmcGx1Z2luc1Bh
dGhTdHIsICZwbHVnaW5zUGF0aFNpemUpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQorICAgICAgICAgICAgICAgICAgICBw
YXRocy5hcHBlbmQoU3RyaW5nKHBsdWdpbnNQYXRoU3RyLCBwbHVnaW5zUGF0aFNpemUgLyBzaXpl
b2YoV0NIQVIpIC0gMSkpOworCisgICAgICAgICAgICAgICAgUmVnQ2xvc2VLZXkoZXh0ZW5zaW9u
c0tleSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJlZ0Ns
b3NlS2V5KGtleSk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkV2luZG93c01l
ZGlhUGxheWVyUGx1Z2luUGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit7CisgICAgLy8gVGhl
IG5ldyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1Z2lucyBp
ZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3RhbGxzCisgICAgV0NIQVIgcGx1Z2luRGly
ZWN0b3J5U3RyW19NQVhfUEFUSCArIDFdOworICAgIERXT1JEIHBsdWdpbkRpcmVjdG9yeVNpemUg
PSA6OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxcUEZpbGVz
XFxQbHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwgX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5
U3RyKSk7CisKKyAgICBpZiAocGx1Z2luRGlyZWN0b3J5U2l6ZSA+IDAgJiYgcGx1Z2luRGlyZWN0
b3J5U2l6ZSA8PSBfY291bnRvZihwbHVnaW5EaXJlY3RvcnlTdHIpKQorICAgICAgICBwYXRocy5h
cHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAtIDEp
KTsKKworICAgIERXT1JEIHR5cGU7CisgICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3Ry
W19NQVhfUEFUSF07CisgICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSA9IHNpemVv
ZihpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBTSEdl
dFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1pY3Jvc29mdFxcTWVk
aWFQbGF5ZXIiKSwgVEVYVCgiSW5zdGFsbGF0aW9uIERpcmVjdG9yeSIpLCAmdHlwZSwgKExQQllU
RSkmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSk7
CisKKyAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisg
ICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0
YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIGFkZFF1aWNrVGltZVBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhz
KQoreworICAgIERXT1JEIHR5cGU7CisgICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3Ry
W19NQVhfUEFUSF07CisgICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSA9IHNpemVv
ZihpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBTSEdl
dFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFwcGxlIENvbXB1dGVy
LCBJbmMuXFxRdWlja1RpbWUiKSwgVEVYVCgiSW5zdGFsbERpciIpLCAmdHlwZSwgKExQQllURSkm
aW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSk7CisK
KyAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opIHsKKyAg
ICAgICAgU3RyaW5nIHBsdWdpbkRpciA9IFN0cmluZyhpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIs
IGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkgKyAiXFxwbHVn
aW5zIjsKKyAgICAgICAgcGF0aHMuYXBwZW5kKHBsdWdpbkRpcik7CisgICAgfQorfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChWZWN0b3I8U3RyaW5nPiYg
cGF0aHMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5
RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVh
ZGVyIiksIDAsIEtFWV9SRUFELCAma2V5KTsKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NF
U1MpCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICBGSUxFVElN
RSBsYXN0TW9kaWZpZWQ7CisKKyAgICBWZWN0b3I8aW50PiBsYXRlc3RBY3JvYmF0VmVyc2lvbjsK
KyAgICBTdHJpbmcgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmc7CisKKyAgICAvLyBFbnVtZXJh
dGUgc3Via2V5cworICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgIERXT1JEIG5h
bWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOworICAgICAgICByZXN1bHQgPSBS
ZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZp
ZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIFZlY3RvcjxpbnQ+IGFjcm9iYXRWZXJzaW9uID0gcGFyc2VWZXJz
aW9uU3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7CisgICAgICAgIGlmIChjb21wYXJlVmVy
c2lvbnMoYWNyb2JhdFZlcnNpb24sIGxhdGVzdEFjcm9iYXRWZXJzaW9uKSkgeworICAgICAgICAg
ICAgbGF0ZXN0QWNyb2JhdFZlcnNpb24gPSBhY3JvYmF0VmVyc2lvbjsKKyAgICAgICAgICAgIGxh
dGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZy5pc051bGwo
KSkgeworICAgICAgICBEV09SRCB0eXBlOworICAgICAgICBXQ0hBUiBhY3JvYmF0SW5zdGFsbFBh
dGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdPUkQgYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSA9
IHNpemVvZihhY3JvYmF0SW5zdGFsbFBhdGhTdHIpOworCisgICAgICAgIFN0cmluZyBhY3JvYmF0
UGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVhZGVyXFwiICsgbGF0
ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgKyAiXFxJbnN0YWxsUGF0aCI7CisgICAgICAgIHJlc3Vs
dCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBhY3JvYmF0UGx1Z2luS2V5UGF0aC5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCAmdHlwZSwgKExQQllURSlhY3JvYmF0
SW5zdGFsbFBhdGhTdHIsICZhY3JvYmF0SW5zdGFsbFBhdGhTaXplKTsKKworICAgICAgICBpZiAo
cmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIFN0cmluZyBhY3JvYmF0UGx1
Z2luUGF0aCA9IFN0cmluZyhhY3JvYmF0SW5zdGFsbFBhdGhTdHIsIGFjcm9iYXRJbnN0YWxsUGF0
aFNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkgKyAiXFxicm93c2VyIjsKKyAgICAgICAgICAgIHBh
dGhzLmFwcGVuZChhY3JvYmF0UGx1Z2luUGF0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBS
ZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBzYWZhcmlQbHVnaW5z
UGF0aCgpCit7CisgICAgV0NIQVIgbW9kdWxlRmlsZU5hbWVTdHJbX01BWF9QQVRIXTsKKyAgICBz
dGF0aWMgU3RyaW5nIHBsdWdpbnNQYXRoOworICAgIHN0YXRpYyBib29sIGNhY2hlZFBsdWdpblBh
dGggPSBmYWxzZTsKKworICAgIGlmICghY2FjaGVkUGx1Z2luUGF0aCkgeworICAgICAgICBjYWNo
ZWRQbHVnaW5QYXRoID0gdHJ1ZTsKKworICAgICAgICBpbnQgbW9kdWxlRmlsZU5hbWVMZW4gPSBH
ZXRNb2R1bGVGaWxlTmFtZSgwLCBtb2R1bGVGaWxlTmFtZVN0ciwgX01BWF9QQVRIKTsKKworICAg
ICAgICBpZiAoIW1vZHVsZUZpbGVOYW1lTGVuIHx8IG1vZHVsZUZpbGVOYW1lTGVuID09IF9NQVhf
UEFUSCkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBpZiAoIVBhdGhSZW1vdmVG
aWxlU3BlYyhtb2R1bGVGaWxlTmFtZVN0cikpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAg
ICAgICAgcGx1Z2luc1BhdGggPSBTdHJpbmcobW9kdWxlRmlsZU5hbWVTdHIpICsgIlxcUGx1Z2lu
cyI7CisgICAgfQorZXhpdDoKKyAgICByZXR1cm4gcGx1Z2luc1BhdGg7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMoVmVjdG9yPFN0cmluZz4mIHBhdGhz
KQoreworICAgIFdDSEFSIHN5c3RlbURpcmVjdG9yeVN0cltNQVhfUEFUSF07CisKKyAgICBpZiAo
R2V0U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwgX2NvdW50b2Yoc3lzdGVtRGly
ZWN0b3J5U3RyKSkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0NIQVIgbWFjcm9tZWRp
YURpcmVjdG9yeVN0cltNQVhfUEFUSF07CisKKyAgICBQYXRoQ29tYmluZShtYWNyb21lZGlhRGly
ZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxGbGFzaCIpKTsK
KyAgICBwYXRocy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7CisKKyAgICBQYXRoQ29t
YmluZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1h
Y3JvbWVkXFxTaG9ja3dhdmUgMTAiKSk7CisgICAgcGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJl
Y3RvcnlTdHIpOworfQorCitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBs
dWdpblBhdGhzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKKyAgICBTdHJpbmcgb3Vy
UGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7CisKKyAgICBpZiAoIW91clBhdGguaXNOdWxsKCkp
CisgICAgICAgIHBhdGhzLmFwcGVuZChvdXJQYXRoKTsKKyAgICBhZGRRdWlja1RpbWVQbHVnaW5Q
YXRoKHBhdGhzKTsKKyAgICBhZGRBZG9iZUFjcm9iYXRQbHVnaW5QYXRoKHBhdGhzKTsKKyAgICBh
ZGRNb3ppbGxhUGx1Z2luUGF0aHMocGF0aHMpOworICAgIGFkZFdpbmRvd3NNZWRpYVBsYXllclBs
dWdpblBhdGgocGF0aHMpOworICAgIGFkZE1hY3JvbWVkaWFQbHVnaW5QYXRocyhwYXRocyk7CisK
KyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVS
ZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVUeXBlLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVU
eXBlcy5jb250YWlucyhtaW1lVHlwZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIE5v
IHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNo
aW5nIGFnYWluCisgICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVz
LmNvbnRhaW5zKG1pbWVUeXBlKSk7Cit9CisKK1BsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNl
OjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmICht
aW1lVHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgU3RyaW5nIGtleSA9
IG1pbWVUeXBlLmxvd2VyKCk7CisgICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0
aCgpOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IDA7CisgICAgUGx1Z2luU2V0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisKKyAgICBmb3IgKFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgIGlmICgoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkg
eworICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICAvLyBwcmVm
ZXIgcGx1Z2lucyBpbiBvdXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5CisgICAgICAgICAgICBpZiAo
cGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSA9PSBvdXJQYXRoKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbjsKK30KKworU3RyaW5n
IFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVu
c2lvbikgY29uc3QKK3sKKyAgICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Bs
dWdpbnMuZW5kKCk7CisgICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwor
ICAgIFN0cmluZyBtaW1lVHlwZTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAwOworCisg
ICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CisKKyAg
ICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0g
KCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyAr
K21pbWVfaXQpIHsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25z
ID0gbWltZV9pdC0+c2Vjb25kOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkgeworICAgICAgICAgICAgICAgICAg
ICBtaW1lVHlwZSA9IG1pbWVfaXQtPmZpcnN0OworICAgICAgICAgICAgICAgICAgICBwbHVnaW4g
PSAoKml0KS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4g
b3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2lu
LT5wYXJlbnREaXJlY3RvcnkoKSA9PSBvdXJQYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIG1pbWVUeXBlOworfQorCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRh
YmFzZTo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCit7ICAg
CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUp
OworICAgIFN0cmluZyBmaWxlbmFtZSA9IHVybC5zdHJpbmcoKTsKKyAgICAKKyAgICBpZiAoIXBs
dWdpbikgeworICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwubGFzdFBhdGhDb21wb25lbnQo
KTsKKyAgICAgICAgaWYgKCFmaWxlbmFtZS5lbmRzV2l0aCgiLyIpKSB7CisgICAgICAgICAgICBp
bnQgZXh0ZW5zaW9uUG9zID0gZmlsZW5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICAgICAgICAg
IGlmIChleHRlbnNpb25Qb3MgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZXh0ZW5z
aW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGV4dGVuc2lvblBvcyArIDEpOworCisgICAgICAgICAg
ICAgICAgbWltZVR5cGUgPSBNSU1FVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24pOworICAgICAg
ICAgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291
bGQgYmUgZm91bmQsIHF1ZXJ5IFdpbmRvd3MgZm9yIHRoZSBtaW1lIHR5cGUgCisgICAgLy8gY29y
cmVzcG9uZGluZyB0byB0aGUgZXh0ZW5zaW9uLgorCisgICAgcmV0dXJuIHBsdWdpbjsKK30KKwor
fQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAzMDA2OCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNiwxMSArMjcsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsdWdpbkRh
dGFiYXNlLmgiCiAKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
Vmlldy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1
ZGUgPHNobHdhcGkuaD4KKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2Fn
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDYgKzQ2LDE2IEBAIFBsdWdpbkRh
dGFiYXNlKiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGUKICAgICByZXR1cm4gcGx1Z2luczsKIH0K
IAorYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBl
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5
IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICByZXR1cm4g
KHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKTsK
K30KKwogdm9pZCBQbHVnaW5EYXRhYmFzZTo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKICAgICBtX3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsKQEAgLTExOSwzNDcg
KzEyOCwxOSBAQCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IFBsdWdpbkRhdGFiYXNlOjpwCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVn
aXN0cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMpCi17Ci0gICAgSEtFWSBrZXk7
Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29mdHdhcmVc
XE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywgJmtleSk7Ci0KLSAg
ICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdj
aGFyX3QgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgIC8vIEVu
dW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKLSAgICAgICAgRFdP
UkQgbmFtZUxlbiA9IF9jb3VudG9mKG5hbWUpOwotICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5
RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0g
ICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgcGF0aFN0
clNpemUgPSBzaXplb2YocGF0aFN0cik7Ci0gICAgICAgIERXT1JEIHR5cGU7Ci0KLSAgICAgICAg
cmVzdWx0ID0gU0hHZXRWYWx1ZShrZXksIG5hbWUsIFRFWFQoIlBhdGgiKSwgJnR5cGUsIChMUEJZ
VEUpcGF0aFN0ciwgJnBhdGhTdHJTaXplKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9T
VUNDRVNTIHx8IHR5cGUgIT0gUkVHX1NaKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyaWJ1dGVzOwotICAgICAgICBpZiAoR2V0
RmlsZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRyaWJ1
dGVzKSA9PSAwKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUGx1Z2luUGFja2Fn
ZSogcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoU3RyaW5nKHBhdGhTdHIs
IHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBhdHRyaWJ1dGVzLmZ0TGFzdFdyaXRl
VGltZSk7Ci0KLSAgICAgICAgaWYgKHBhY2thZ2UpCi0gICAgICAgICAgICBwbHVnaW5zLmFkZChw
YWNrYWdlKTsKLSAgICB9Ci0KLSAgICBSZWdDbG9zZUtleShrZXkpOwotfQotCi1QbHVnaW5TZXQg
UGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QKLXsKLSAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KLSAgICBIYXNoU2V0PFN0
cmluZz4gdW5pcXVlRmlsZW5hbWVzOwotICAgIFBsdWdpblNldCBwbHVnaW5zOwotCi0gICAgSEFO
RExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0gICAgV0lOMzJfRklORF9EQVRBVyBm
aW5kRmlsZURhdGE7Ci0KLSAgICBQbHVnaW5QYWNrYWdlKiBvbGRXTVBQbHVnaW4gPSAwOwotICAg
IFBsdWdpblBhY2thZ2UqIG5ld1dNUFBsdWdpbiA9IDA7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQoKTsKLSAgICBmb3IgKFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFN0cmluZyBwYXR0ZXJuID0gKml0ICsgIlxcKiI7Ci0K
LSAgICAgICAgaEZpbmQgPSBGaW5kRmlyc3RGaWxlVyhwYXR0ZXJuLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCksICZmaW5kRmlsZURhdGEpOwotCi0gICAgICAgIGlmIChoRmluZCA9PSBJ
TlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRv
IHsKLSAgICAgICAgICAgIGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVf
QVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdj
c2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7Ci0gICAgICAgICAgICBpZiAoKCFmaWxlbmFt
ZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoImRsbCIsIGZh
bHNlKSkgJiYKLSAgICAgICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAi
UGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAxMCIsIGZhbHNlKSkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9
ICppdCArICJcXCIgKyBmaWxlbmFtZTsKLSAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVz
LmFkZChmdWxsUGF0aCkuc2Vjb25kKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAKLSAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNr
YWdlOjpjcmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1l
KTsKLQotICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKLSAgICAgICAgICAgICAgICBw
bHVnaW5zLmFkZChwbHVnaW5QYWNrYWdlKTsKLQotICAgICAgICAgICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wZHNwbGF5LmRsbCIpKQotICAgICAgICAgICAgICAgICAg
ICBvbGRXTVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAibnAtbXN3bXAuZGxsIikpCi0gICAgICAgICAg
ICAgICAgICAgIG5ld1dNUFBsdWdpbiA9IHBsdWdpblBhY2thZ2U7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgfSB3aGlsZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0g
MCk7Ci0KLSAgICAgICAgRmluZENsb3NlKGhGaW5kKTsKLSAgICB9Ci0KLSAgICBhZGRQbHVnaW5z
RnJvbVJlZ2lzdHJ5KEhLRVlfTE9DQUxfTUFDSElORSwgcGx1Z2lucyk7Ci0gICAgYWRkUGx1Z2lu
c0Zyb21SZWdpc3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGx1Z2lucyk7Ci0KLSAgICAvLyBJZiBi
b3RoIHRoZSBvbGQgYW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5z
IHNldCwgCi0gICAgLy8gd2UgcmVtb3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBj
aG9vc2luZyB0aGUgb2xkIG9uZS4KLSAgICBpZiAob2xkV01QUGx1Z2luICYmIG5ld1dNUFBsdWdp
bikKLSAgICAgICAgcGx1Z2lucy5yZW1vdmUob2xkV01QUGx1Z2luKTsKLQotICAgIHJldHVybiBw
bHVnaW5zOwotfQotCi1zdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCi17Ci0gICAgVmVjdG9yPGludD4gdmVyc2lv
bjsKLQotICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKLSAgICB1bnNpZ25lZCBlbmRQb3M7Ci0g
ICAgCi0gICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgewotICAg
ICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0
aCgpOyArK2VuZFBvcykKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0g
Jy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0
cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7Ci0gICAgICAgIHZlcnNp
b24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOwotCi0gICAgICAgIHN0YXJ0UG9zID0gZW5kUG9z
ICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmVyc2lvbjsKLX0KLQotLy8gVGhpcyByZXR1cm5z
IHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBW
ZWN0b3I8aW50PiYgdmVyc2lvbkIpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZl
cnNpb25BLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZl
cnNpb25CW2ldKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZl
cnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUg
c2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxz
ZQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQ
bHVnaW5QYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgLy8gRW51bWVyYXRlIGFs
bCBNb3ppbGxhIHBsdWdpbiBkaXJlY3RvcmllcyBpbiB0aGUgcmVnaXN0cnkKLSAgICBIS0VZIGtl
eTsKLSAgICBMT05HIHJlc3VsdDsKLSAgICAKLSAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtF
WV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96aWxsYSIpLCAwLCBLRVlfUkVBRCwg
JmtleSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIFdDSEFS
IG5hbWVbMTI4XTsKLSAgICAgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgICAgIC8v
IEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAg
ICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKLSAg
ICAgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwg
MCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gRVJS
T1JfU1VDQ0VTUykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgU3RyaW5n
IGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pICsgIlxcRXh0ZW5zaW9ucyI7
Ci0gICAgICAgICAgICBIS0VZIGV4dGVuc2lvbnNLZXk7Ci0KLSAgICAgICAgICAgIC8vIFRyeSBv
cGVuaW5nIHRoZSBrZXkKLSAgICAgICAgICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChrZXksIGV4
dGVuc2lvbnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIEtFWV9SRUFE
LCAmZXh0ZW5zaW9uc0tleSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VD
Q0VTUykgewotICAgICAgICAgICAgICAgIC8vIE5vdyBnZXQgdGhlIHBsdWdpbnMgcGF0aAotICAg
ICAgICAgICAgICAgIFdDSEFSIHBsdWdpbnNQYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgICAg
ICAgICAgRFdPUkQgcGx1Z2luc1BhdGhTaXplID0gc2l6ZW9mKHBsdWdpbnNQYXRoU3RyKTsKLSAg
ICAgICAgICAgICAgICBEV09SRCB0eXBlOwotCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVn
UXVlcnlWYWx1ZUV4KGV4dGVuc2lvbnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChM
UEJZVEUpJnBsdWdpbnNQYXRoU3RyLCAmcGx1Z2luc1BhdGhTaXplKTsKLQotICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikKLSAgICAg
ICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5zUGF0aFN0ciwgcGx1Z2lu
c1BhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLQotICAgICAgICAgICAgICAgIFJlZ0Ns
b3NlS2V5KGV4dGVuc2lvbnNLZXkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBSZWdDbG9zZUtleShrZXkpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2
b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhz
KQotewotICAgIC8vIFRoZSBuZXcgV01QIEZpcmVmb3ggcGx1Z2luIGlzIGluc3RhbGxlZCBpbiBc
UEZpbGVzXFBsdWdpbnMgaWYgaXQgY2FuJ3QgZmluZCBhbnkgRmlyZWZveCBpbnN0YWxscwotICAg
IFdDSEFSIHBsdWdpbkRpcmVjdG9yeVN0cltfTUFYX1BBVEggKyAxXTsKLSAgICBEV09SRCBwbHVn
aW5EaXJlY3RvcnlTaXplID0gOjpFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKFRFWFQoIiVTWVNU
RU1EUklWRSVcXFBGaWxlc1xcUGx1Z2lucyIpLCBwbHVnaW5EaXJlY3RvcnlTdHIsIF9jb3VudG9m
KHBsdWdpbkRpcmVjdG9yeVN0cikpOwotCi0gICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAw
ICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0gX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5U3RyKSkK
LSAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRp
cmVjdG9yeVNpemUgLSAxKSk7Ci0KLSAgICBEV09SRCB0eXBlOwotICAgIFdDSEFSIGluc3RhbGxh
dGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVj
dG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKLQotICAgIEhSRVNV
TFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJl
XFxNaWNyb3NvZnRcXE1lZGlhUGxheWVyIiksIFRFWFQoIkluc3RhbGxhdGlvbiBEaXJlY3Rvcnki
KSwgJnR5cGUsIChMUEJZVEUpJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlv
bkRpcmVjdG9yeVNpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5
cGUgPT0gUkVHX1NaKQotICAgICAgICBwYXRocy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRp
cmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAx
KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRRdWlja1RpbWVQbHVnaW5QYXRoKFZlY3Rv
cjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBEV09SRCB0eXBlOwotICAgIFdDSEFSIGluc3RhbGxh
dGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVj
dG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKLQotICAgIEhSRVNV
TFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJl
XFxBcHBsZSBDb21wdXRlciwgSW5jLlxcUXVpY2tUaW1lIiksIFRFWFQoIkluc3RhbGxEaXIiKSwg
JnR5cGUsIChMUEJZVEUpJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRp
cmVjdG9yeVNpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUg
PT0gUkVHX1NaKSB7Ci0gICAgICAgIFN0cmluZyBwbHVnaW5EaXIgPSBTdHJpbmcoaW5zdGFsbGF0
aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFS
KSAtIDEpICsgIlxccGx1Z2lucyI7Ci0gICAgICAgIHBhdGhzLmFwcGVuZChwbHVnaW5EaXIpOwot
ICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpblBhdGgo
VmVjdG9yPFN0cmluZz4mIHBhdGhzKQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVz
dWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFk
b2JlXFxBY3JvYmF0IFJlYWRlciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7Ci0gICAgaWYgKHJlc3Vs
dCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXQ0hBUiBuYW1lWzEy
OF07Ci0gICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgVmVjdG9yPGludD4gbGF0ZXN0
QWNyb2JhdFZlcnNpb247Ci0gICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOwot
Ci0gICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewot
ICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKLSAg
ICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAw
LCAwLCAmbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NF
U1MpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVy
c2lvbiA9IHBhcnNlVmVyc2lvblN0cmluZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOwotICAgICAg
ICBpZiAoY29tcGFyZVZlcnNpb25zKGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lv
bikpIHsKLSAgICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247
Ci0gICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBu
YW1lTGVuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNp
b25TdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgRFdPUkQgdHlwZTsKLSAgICAgICAgV0NIQVIg
YWNyb2JhdEluc3RhbGxQYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIGFjcm9iYXRJ
bnN0YWxsUGF0aFNpemUgPSBzaXplb2YoYWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKLQotICAgICAg
ICBTdHJpbmcgYWNyb2JhdFBsdWdpbktleVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0
IFJlYWRlclxcIiArIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgi
OwotICAgICAgICByZXN1bHQgPSBTSEdldFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2Jh
dFBsdWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgJnR5cGUs
IChMUEJZVEUpYWNyb2JhdEluc3RhbGxQYXRoU3RyLCAmYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSk7
Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgYWNyb2JhdFBsdWdpblBhdGggPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBh
Y3JvYmF0SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7
Ci0gICAgICAgICAgICBwYXRocy5hcHBlbmQoYWNyb2JhdFBsdWdpblBhdGgpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJp
bmcgc2FmYXJpUGx1Z2luc1BhdGgoKQotewotICAgIFdDSEFSIG1vZHVsZUZpbGVOYW1lU3RyW19N
QVhfUEFUSF07Ci0gICAgc3RhdGljIFN0cmluZyBwbHVnaW5zUGF0aDsKLSAgICBzdGF0aWMgYm9v
bCBjYWNoZWRQbHVnaW5QYXRoID0gZmFsc2U7Ci0KLSAgICBpZiAoIWNhY2hlZFBsdWdpblBhdGgp
IHsKLSAgICAgICAgY2FjaGVkUGx1Z2luUGF0aCA9IHRydWU7Ci0KLSAgICAgICAgaW50IG1vZHVs
ZUZpbGVOYW1lTGVuID0gR2V0TW9kdWxlRmlsZU5hbWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9N
QVhfUEFUSCk7Ci0KLSAgICAgICAgaWYgKCFtb2R1bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxl
TmFtZUxlbiA9PSBfTUFYX1BBVEgpCi0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICAgICAg
aWYgKCFQYXRoUmVtb3ZlRmlsZVNwZWMobW9kdWxlRmlsZU5hbWVTdHIpKQotICAgICAgICAgICAg
Z290byBleGl0OwotCi0gICAgICAgIHBsdWdpbnNQYXRoID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1l
U3RyKSArICJcXFBsdWdpbnMiOwotICAgIH0KLWV4aXQ6Ci0gICAgcmV0dXJuIHBsdWdpbnNQYXRo
OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpblBhdGhzKFZlY3Rv
cjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBXQ0hBUiBzeXN0ZW1EaXJlY3RvcnlTdHJbTUFYX1BB
VEhdOwotCi0gICAgaWYgKEdldFN5c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIF9j
b3VudG9mKHN5c3RlbURpcmVjdG9yeVN0cikpID09IDApCi0gICAgICAgIHJldHVybjsKLQotICAg
IFdDSEFSIG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFYX1BBVEhdOwotCi0gICAgUGF0aENvbWJp
bmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNy
b21lZFxcRmxhc2giKSk7Ci0gICAgcGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIp
OwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0
b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikpOwotICAgIHBhdGhzLmFwcGVu
ZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0
YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7
Ci0gICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwotCi0gICAgaWYgKCFv
dXJQYXRoLmlzTnVsbCgpKQotICAgICAgICBwYXRocy5hcHBlbmQob3VyUGF0aCk7Ci0gICAgYWRk
UXVpY2tUaW1lUGx1Z2luUGF0aChwYXRocyk7Ci0gICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0
aChwYXRocyk7Ci0gICAgYWRkTW96aWxsYVBsdWdpblBhdGhzKHBhdGhzKTsKLSAgICBhZGRXaW5k
b3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRoKHBhdGhzKTsKLSAgICBhZGRNYWNyb21lZGlhUGx1Z2lu
UGF0aHMocGF0aHMpOwotCi0gICAgcmV0dXJuIHBhdGhzOwotfQotCi1ib29sIFBsdWdpbkRhdGFi
YXNlOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAg
IGlmIChtaW1lVHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICht
X3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0
YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVn
aXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpOwotfQotCiBQbHVnaW5QYWNrYWdl
KiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKIHsKICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwotICAgIFN0cmluZyBvdXJQYXRoID0g
c2FmYXJpUGx1Z2luc1BhdGgoKTsKICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAwOwogICAg
IFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwogCiAgICAg
Zm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygp
LmNvbnRhaW5zKGtleSkpIHsKICAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOwotICAg
ICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQot
ICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAg
ICAgICAgICAgIGlmIChpc1ByZWZlcnJlZFBsdWdpblBhdGgocGx1Z2luLT5wYXJlbnREaXJlY3Rv
cnkoKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC00NzMs
NyArMTU0LDYgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVucwogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQ
YXRoKCk7CiAgICAgU3RyaW5nIG1pbWVUeXBlOwogICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9
IDA7CiAKQEAgLTQ4Niw4ICsxNjYsNyBAQCBTdHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBl
Rm9yRXh0ZW5zCiAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lv
bnNbaV0sIGV4dGVuc2lvbikpIHsKICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1l
X2l0LT5maXJzdDsKICAgICAgICAgICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBk
aXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5
KCkgPT0gb3VyUGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJlZmVycmVkUGx1Z2lu
UGF0aChwbHVnaW4tPnBhcmVudERpcmVjdG9yeSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ5OCw3ICsxNzcs
NyBAQCBTdHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zCiB9CiAKIFBsdWdp
blBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3Ry
aW5nJiBtaW1lVHlwZSkKLXsgICAKK3sKICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBwbHVn
aW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CiAgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLnN0cmlu
ZygpOwogICAgIApAQCAtNTIxLDIwICsyMDAsNCBAQCBQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRh
YmFzZTo6ZmluZFBsdWdpCiAgICAgcmV0dXJuIHBsdWdpbjsKIH0KIAotUGx1Z2luVmlldyogUGx1
Z2luRGF0YWJhc2U6OmNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJ
bnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQotewotICAgIC8v
IGlmIHdlIGZhaWwgdG8gZmluZCBhIHBsdWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZpbmRQbHVn
aW4gd2lsbCBzZWFyY2ggZm9yCi0gICAgLy8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0ZW5zaW9u
IGFuZCB1cGRhdGUgdGhlIE1JTUUgdHlwZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5nCi0gICAg
U3RyaW5nIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOwotICAgIFBsdWdpblBhY2thZ2UqIHBsdWdp
biA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOwotICAgIAotICAgIC8vIE5vIHBsdWdp
biB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFn
YWluCi0gICAgaWYgKCFwbHVnaW4gJiYgcmVmcmVzaCgpKSB7Ci0gICAgICAgIG1pbWVUeXBlQ29w
eSA9IG1pbWVUeXBlOwotICAgICAgICBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5cGVD
b3B5KTsKLSAgICB9Ci0gICAgICAgIAotICAgIHJldHVybiBuZXcgUGx1Z2luVmlldyhwYXJlbnRG
cmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVz
LCBtaW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSk7Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5oCShyZXZpc2lvbiAzMDI5MykKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
YXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMjAgKzI3LDE5IEBACiAjaWZuZGVm
IFBsdWdpbkRhdGFiYXNlX0gKICNkZWZpbmUgUGx1Z2luRGF0YWJhc2VfSAogCi0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJTdHJp
bmdIYXNoLmgiCiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xh
c3MgRnJhbWU7CiAgICAgY2xhc3MgSW50U2l6ZTsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNz
IFBsdWdpblBhY2thZ2U7Ci0gICAgY2xhc3MgUGx1Z2luVmlldzsKIAogICAgIHR5cGVkZWYgSGFz
aFNldDxSZWZQdHI8UGx1Z2luUGFja2FnZT4sIFBsdWdpblBhY2thZ2VIYXNoPiBQbHVnaW5TZXQ7
CiAgIApAQCAtNTEsOCArNTEsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBWZWN0
b3I8UGx1Z2luUGFja2FnZSo+IHBsdWdpbnMoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc01JTUVU
eXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKICAgICAgICAgdm9pZCBhZGRF
eHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJik7CisgICAgICAgIGJvb2wgaXNQcmVmZXJyZWRQ
bHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3Q7CiAKICAgICAgICAgUGx1Z2luUGFj
a2FnZSogZmluZFBsdWdpbihjb25zdCBLVVJMJiwgU3RyaW5nJiBtaW1lVHlwZSk7CisKICAgICBw
cml2YXRlOgogICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXRocykgeyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KICAgICAgICAgUGx1Z2luU2V0IGdl
dFBsdWdpbnNJblBhdGhzKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFj
a2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHJl
dmlzaW9uIDMwMjkzKQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDEwIEBACiAjaWZuZGVmIFBsdWdpblBhY2thZ2VfSAogI2Rl
ZmluZSBQbHVnaW5QYWNrYWdlX0gKIAotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8
d2luZG93cy5oPgotCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJTdHJpbmdIYXNoLmgi
CisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAibnBm
dW5jdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CkBAIC00Myw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBQbHVnaW5QYWNrYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZT4gewogICAg
IHB1YmxpYzoKICAgICAgICAgflBsdWdpblBhY2thZ2UoKTsKLSAgICAgICAgc3RhdGljIFBsdWdp
blBhY2thZ2UqIGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElN
RSYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgc3RhdGljIFBsdWdpblBhY2thZ2UqIGNyZWF0ZVBh
Y2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBQbGF0Zm9ybUZpbGVUaW1lJiBsYXN0TW9k
aWZpZWQpOwogICAgICAgICAKICAgICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXNjcmlwdGlvbjsgfQpAQCAtNTMsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KICAgICAgICAgY29uc3QgTUlNRVRv
RXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRv
RXh0ZW5zaW9uczsgfQogCi0gICAgICAgIHVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBj
b25zdDsKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogICAgICAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKTsK
IAogICAgICAgICBib29sIGxvYWQoKTsKQEAgLTYyLDE5ICs2MCwxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25z
dCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQogCi0gICAgICAgIGludCBjb21wYXJlRmlsZVZl
cnNpb24odW5zaWduZWQgY29tcGFyZVZlcnNpb25NUywgdW5zaWduZWQgY29tcGFyZVZlcnNpb25M
UykgY29uc3Q7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luUGFja2FnZShjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpOworICAgICAgICBQbHVnaW5Q
YWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgUGxhdGZvcm1GaWxlVGltZSYgbGFzdE1v
ZGlmaWVkKTsKICAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKLSAgICAgICAgdm9pZCBzdG9yZUZp
bGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpOwogICAgICAgICBib29sIGlzUGx1Z2lu
QmxhY2tsaXN0ZWQoKTsKIAogICAgICAgICBib29sIG1faXNMb2FkZWQ7CiAgICAgICAgIGludCBt
X2xvYWRDb3VudDsKIAotICAgICAgICBEV09SRCBtX2ZpbGVWZXJzaW9uTVM7Ci0gICAgICAgIERX
T1JEIG1fZmlsZVZlcnNpb25MUzsKLQogICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKICAg
ICAgICAgU3RyaW5nIG1fcGF0aDsKICAgICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CkBAIC04NCw4
ICs3Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25z
TWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOwogICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwIG1f
bWltZVRvRXh0ZW5zaW9uczsKIAotICAgICAgICBITU9EVUxFIG1fbW9kdWxlOwotICAgICAgICBG
SUxFVElNRSBtX2xhc3RNb2RpZmllZDsKKyAgICAgICAgUGxhdGZvcm1Nb2R1bGUgbV9tb2R1bGU7
CisgICAgICAgIFBsYXRmb3JtRmlsZVRpbWUgbV9sYXN0TW9kaWZpZWQ7CiAKICAgICAgICAgTlBQ
X1NodXRkb3duUHJvY1B0ciBtX05QUF9TaHV0ZG93bjsKICAgICAgICAgTlBQbHVnaW5GdW5jcyBt
X3BsdWdpbkZ1bmNzOwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdp
bi5jcHAJKHJldmlzaW9uIDMwMjkzKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRh
YmFzZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDk5ICsyNiwxNCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAKLSNpbmNsdWRlICJLVVJM
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxzaGx3YXBpLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGx1Z2luRGF0YWJhc2UqIFBsdWdpbkRhdGFiYXNl
OjppbnN0YWxsZWRQbHVnaW5zKCkKLXsKLSAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIHBsdWdp
bnMgPSAwOwotICAgIAotICAgIGlmICghcGx1Z2lucykgewotICAgICAgICBwbHVnaW5zID0gbmV3
IFBsdWdpbkRhdGFiYXNlOwotICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5E
YXRhYmFzZTo6ZGVmYXVsdFBsdWdpblBhdGhzKCkpOwotICAgICAgICBwbHVnaW5zLT5yZWZyZXNo
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpbnM7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJh
c2U6OmFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgbV9wbHVn
aW5QYXRocy5hcHBlbmQocGF0aCk7Ci0gICAgcmVmcmVzaCgpOwotfQotCi1ib29sIFBsdWdpbkRh
dGFiYXNlOjpyZWZyZXNoKCkKLXsgICAKLSAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsKLQotICAg
IGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZhbHNlOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IHNl
dCBvZiBwbHVnaW5zCi0gICAgbmV3UGx1Z2lucyA9IGdldFBsdWdpbnNJblBhdGhzKCk7Ci0KLSAg
ICBpZiAoIW1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5
cGVzLmNsZWFyKCk7Ci0KLSAgICAgICAgUGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZCA9IG1fcGx1
Z2luczsKLQotICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdp
bnMuZW5kKCk7Ci0gICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5l
d1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgcGx1Z2luc1Rv
VW5sb2FkLnJlbW92ZSgqaXQpOwotCi0gICAgICAgIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAg
ICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIG5ld1BsdWdpbnMucmVtb3ZlKCppdCk7
Ci0KLSAgICAgICAgLy8gVW5sb2FkIHBsdWdpbnMKLSAgICAgICAgZW5kID0gcGx1Z2luc1RvVW5s
b2FkLmVuZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
bHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgbV9w
bHVnaW5zLnJlbW92ZSgqaXQpOwotCi0gICAgICAgIC8vIEFkZCBuZXcgcGx1Z2lucwotICAgICAg
ICBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKLQotICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0g
IXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5KCkgfHwgIW5ld1BsdWdpbnMuaXNFbXB0eSgpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIG1fcGx1Z2lucyA9IG5ld1BsdWdpbnM7Ci0gICAgICAgIFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9y
IChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7Ci0KLSAgICAgICAg
cGx1Z2luU2V0Q2hhbmdlZCA9ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICAv
LyBSZWdpc3RlciBwbHVnLWluIE1JTUUgdHlwZXMKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IC8vIEdldCBNSU1FIHR5cGVzCi0gICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKLSAg
ICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9
ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOyBtYXBfaXQgIT0gbWFwX2VuZDsg
KyttYXBfaXQpIHsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0
LT5maXJzdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdl
ZDsKLX0KLQotVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucygp
IGNvbnN0Ci17Ci0gICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiByZXN1bHQ7Ci0KLSAgICBQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBs
dWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5
KEhLRVkgcm9vdEtleSwgUGx1Z2luU2V0JiBwbHVnaW5zKQogewogICAgIEhLRVkga2V5OwpAQCAt
NDM1LDkwICszNTAsMTQgQEAgVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQ
bAogICAgIHJldHVybiBwYXRoczsKIH0KIAotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1FVHlw
ZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAobWltZVR5cGUu
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9yZWdpc3RlcmVkTUlN
RVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8g
Tm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFy
Y2hpbmcgYWdhaW4KLSAgICByZXR1cm4gKHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlw
ZXMuY29udGFpbnMobWltZVR5cGUpKTsKLX0KLQotUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJh
c2U6OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCitib29sIFBsdWdp
bkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25z
dAogewotICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgU3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7CiAgICAgU3RyaW5nIG91clBhdGggPSBz
YWZhcmlQbHVnaW5zUGF0aCgpOwotICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IDA7Ci0gICAg
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0KLSAgICBm
b3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCku
Y29udGFpbnMoa2V5KSkgewotICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAg
ICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBpbiBvdXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5Ci0g
ICAgICAgICAgICBpZiAocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSA9PSBvdXJQYXRoKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdp
bjsKLX0KLQotU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25z
dCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QKLXsKLSAgICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQ
bHVnaW5zUGF0aCgpOwotICAgIFN0cmluZyBtaW1lVHlwZTsKLSAgICBQbHVnaW5QYWNrYWdlKiBw
bHVnaW4gPSAwOworICAgIGlmICghb3VyUGF0aC5pc051bGwoKSAmJiAhcGF0aC5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIG91clBhdGggPT0gcGF0aDsKIAotICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAo
Kml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwotCi0gICAgICAgIGZvciAoTUlNRVRvRXh0
ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNp
b25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0gICAgICAg
ICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNb
aV0sIGV4dGVuc2lvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0
LT5maXJzdDsKLSAgICAgICAgICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJl
Y3RvcnkKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkg
PT0gb3VyUGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtaW1l
VHlwZTsKLX0KLQotUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29u
c3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBlKQoteyAgIAotICAgIFBsdWdpblBhY2thZ2Uq
IHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBTdHJpbmcgZmlsZW5h
bWUgPSB1cmwuc3RyaW5nKCk7Ci0gICAgCi0gICAgaWYgKCFwbHVnaW4pIHsKLSAgICAgICAgU3Ry
aW5nIGZpbGVuYW1lID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7Ci0gICAgICAgIGlmICghZmls
ZW5hbWUuZW5kc1dpdGgoIi8iKSkgewotICAgICAgICAgICAgaW50IGV4dGVuc2lvblBvcyA9IGZp
bGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uUG9zICE9
IC0xKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0
cmluZyhleHRlbnNpb25Qb3MgKyAxKTsKLQotICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gTUlN
RVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKLSAgICAgICAgICAgICAgICBwbHVnaW4gPSBw
bHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogaWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSBX
aW5kb3dzIGZvciB0aGUgbWltZSB0eXBlIAotICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4
dGVuc2lvbi4KLQotICAgIHJldHVybiBwbHVnaW47CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB9
CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHJldmlzaW9u
IDMwMjkzKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE2LDM3ICsxMTYsMzQgQEAgUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFj
a2FnZShjb25zdCBTdHJpbgogICAgIG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9w
YXRoLmxlbmd0aCgpIC0gbV9maWxlTmFtZS5sZW5ndGgoKSAtIDEpOwogfQogCi1pbnQgUGx1Z2lu
UGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKHVuc2lnbmVkIGNvbXBhcmVWZXJzaW9uTVMsIHVu
c2lnbmVkIGNvbXBhcmVWZXJzaW9uTFMpIGNvbnN0CitzdGF0aWMgaW50IGNvbXBhcmVGaWxlVmVy
c2lvbih1bnNpZ25lZCBjb21wYXJlVmVyc2lvbk1TLCB1bnNpZ25lZCBjb21wYXJlVmVyc2lvbkxT
LCB1bnNpZ25lZCBmaWxlVmVyc2lvbk1TLCB1bnNpZ25lZCBmaWxlVmVyc2lvbkxTKQogewogICAg
IC8vIHJldHVybiAtMSwgMCwgb3IgMSBpZiBwbHVnLWluIHZlcnNpb24gaXMgbGVzcyB0aGFuLCBl
cXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuCiAgICAgLy8gdGhlIHBhc3NlZCB2ZXJzaW9uCi0gICAg
aWYgKG1fZmlsZVZlcnNpb25NUyAhPSBjb21wYXJlVmVyc2lvbk1TKQotICAgICAgICByZXR1cm4g
bV9maWxlVmVyc2lvbk1TID4gY29tcGFyZVZlcnNpb25NUyA/IDEgOiAtMTsKLSAgICBpZiAobV9m
aWxlVmVyc2lvbkxTICE9IGNvbXBhcmVWZXJzaW9uTFMpCi0gICAgICAgIHJldHVybiBtX2ZpbGVW
ZXJzaW9uTFMgPiBjb21wYXJlVmVyc2lvbkxTID8gMSA6IC0xOworICAgIGlmIChmaWxlVmVyc2lv
bk1TICE9IGNvbXBhcmVWZXJzaW9uTVMpCisgICAgICAgIHJldHVybiBmaWxlVmVyc2lvbk1TID4g
Y29tcGFyZVZlcnNpb25NUyA/IDEgOiAtMTsKKyAgICBpZiAoZmlsZVZlcnNpb25MUyAhPSBjb21w
YXJlVmVyc2lvbkxTKQorICAgICAgICByZXR1cm4gZmlsZVZlcnNpb25MUyA+IGNvbXBhcmVWZXJz
aW9uTFMgPyAxIDogLTE7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUGx1Z2luUGFja2FnZTo6
c3RvcmVGaWxlVmVyc2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKQorYm9vbCBQbHVnaW5QYWNr
YWdlOjppc1BsdWdpbkJsYWNrbGlzdGVkKCkKIHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
c2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NUyA9IDB4MDAwMTAwMDA7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9u
TFMgPSAweDUxQkUwMDAwOworCiAgICAgVlNfRklYRURGSUxFSU5GTyogaW5mbzsKICAgICBVSU5U
IGluZm9TaXplOwogICAgIGlmICghVmVyUXVlcnlWYWx1ZSh2ZXJzaW9uSW5mb0RhdGEsIFRFWFQo
IlxcIiksIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNpemVvZihW
U19GSVhFREZJTEVJTkZPKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fZmlsZVZlcnNpb25MUyA9
IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKLSAgICBtX2ZpbGVWZXJzaW9uTVMgPSBpbmZvLT5kd0Zp
bGVWZXJzaW9uTVM7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3Rl
ZCgpCi17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVx
dWlyZWRWZXJzaW9uTVMgPSAweDAwMDEwMDAwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
aWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxTID0gMHg1MUJFMDAwMDsKKyAgICB1
bnNpZ25lZCBmaWxlVmVyc2lvbkxTID0gaW5mby0+ZHdGaWxlVmVyc2lvbkxTOworICAgIHVuc2ln
bmVkIGZpbGVWZXJzaW9uTVMgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTVM7CiAKICAgICBpZiAobmFt
ZSgpID09ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgewogICAgICAgICAvLyB3b3JrYXJvdW5kIGZv
ciA8cmRhcjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZlcmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNy
b3NvZnQuY29tLgogICAgICAgICAvLyB0aGUgbGF0ZXN0IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxp
Z2h0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNoLCBzbyBhbGxvdyBpdAogICAgICAgICAv
LyBhbmQgYW55IG5ld2VyIHZlcnNpb25zCi0gICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24o
c2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25NUywgc2lsdmVybGlnaHRQbHVnaW5N
aW5SZXF1aXJlZFZlcnNpb25MUykgPCAwKQorICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9u
KHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVMsIHNpbHZlcmxpZ2h0UGx1Z2lu
TWluUmVxdWlyZWRWZXJzaW9uTFMsIGZpbGVWZXJzaW9uTFMsIGZpbGVWZXJzaW9uTVMpIDwgMCkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxzZSBpZiAoZmlsZU5hbWUoKSA9PSAi
bnBtb3pheC5kbGwiKQogICAgICAgICAvLyBCdWcgMTUyMTc6IE1vemlsbGEgQWN0aXZlWCBjb250
cm9sIGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHhwY29tX2NvcmUuZGxsCkBAIC0xNzgsOCArMTc1
LDYgQEAgYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgc3RvcmVGaWxlVmVyc2lvbih2ZXJzaW9uSW5mb0RhdGEpOwotCiAg
ICAgaWYgKGlzUGx1Z2luQmxhY2tsaXN0ZWQoKSkgewogICAgICAgICBmYXN0RnJlZSh2ZXJzaW9u
SW5mb0RhdGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7Cg==
</data>
<flag name="review"
          id="8361"
          type_id="1"
          status="-"
          setter="jhoneycutt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19284</attachid>
            <date>2008-02-22 16:14:04 -0800</date>
            <delta_ts>2008-02-25 07:45:02 -0800</delta_ts>
            <desc>Updated patch to move determineQuirks to PluginPackage also</desc>
            <filename>webkit-shared-plugindatabase.patch</filename>
            <type>text/plain</type>
            <size>76987</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDQ5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDgtMDItMjEgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBBZGQgUGx1Z2luSW5mb1N0b3JlLmNwcCBhbmQgbmV3IFBsdWdpbkRhdGFiYXNlLmNwcCB0
byBHVEsrIGFuZCBRdCBwb3J0cworICAgICAgICBSZW1vdmUgb2xkIFBsdWdJbkluZm9TdG9yZVF0
LmNwcCBhcyBpdCBpcyBvYnNvbGV0ZWQgYnkgc2hhcmVkIGNvZGUKKyAgICAgICAgQWRkIFBsdWdp
bkluZm9TdG9yZSwgUGx1Z2luRGF0YWJhc2UsIGFuZCBQbHVnaW5TdHJlYW0gZmlsZXMgdG8gV3gg
YnVpbGQKKyAgICAgICAgQWRkIG5ldyBQbHVnaW5EYXRhYmFzZS5jcHAgdG8gV2luZG93cyBidWls
ZAorICAgICAgICBBZGQgdGVtcG9yYXJ5IHN0dWJzIGZvciBuZXcgUGx1Z2luRGF0YWJhc2UgYW5k
IFBsdWdpblBhY2thZ2UKKyAgICAgICAgc2hhcmVkIGNsYXNzZXMgdG8gR1RLKywgUXQsIGFuZCBX
eCBwb3J0cworICAgICAgICBDb3B5IFBsdWdpbkRhdGFiYXNlV2luLmNwcCB0byBQbHVnaW5EYXRh
YmFzZS5jcHAgdG8gcHJlc2VydmUgaGlzdG9yeQorICAgICAgICBSZW1vdmUgc2hhcmVkIGNvZGUg
ZnJvbSBQbHVnaW5EYXRhYmFzZVdpbi5jcHAKKyAgICAgICAgUmVtb3ZlIFdpbmRvd3Mtc3BlY2lm
aWMgY29kZSBmcm9tIFBsdWdpbkRhdGFiYXNlLmNwcAorICAgICAgICBVc2UgUGxhdGZvcm1Nb2R1
bGUgYW5kIFBsYXRmb3JtRmlsZVRpbWUgaW5zdGVhZCBvZiBITU9EVUxFIGFuZCBGSUxFVElNRQor
ICAgICAgICBSZW1vdmUgZXh0cmFuZW91cyBQbHVnaW5QYWNrYWdlOjogZnJvbSBoYXNoKCkgY2xh
c3MgbWV0aG9kIHByb3RvdHlwZQorICAgICAgICBTdWJzdW1lIHN0b3JlRmlsZVZlcnNpb24gaW50
byBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8KKyAgICAgICAgQWRkIGNyb3NzLXBsYXRmb3JtIFBs
YXRmb3JtTW9kdWxlVmVyc2lvbiB0eXBlIGRlZmluaXRpb24KKyAgICAgICAgVXNlIFBsYXRmb3Jt
TW9kdWxlVmVyc2lvIHRvIHN0b3JlIHRoZSBtb2R1bGUgdmVyc2lvbgorICAgICAgICBSZW5hbWUg
bV9maWxlVmVyc2lvbltNTF1TIHRvIG1fbW9kdWxlVmVyc2lvbgorICAgICAgICBDaGFuZ2UgY29t
cGFyZUZpbGVWZXJzaW9uIHRvIHVzZSBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gYXMgdGhlIGFyZ3Vt
ZW50CisgICAgICAgIE1vdmUgUGx1Z2luVmlldzo6ZGV0ZXJtaW5lUXVpcmtzIGFuZCBtX3F1aXJr
cyB0byBQbHVnaW5QYWNrYWdlCisgICAgICAgIFVwZGF0ZWQgZGV0ZXJtaW5lUXVpcmtzIGZvciB0
aGUgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6CisgICAg
ICAgICogd2ViY29yZS1iYXNlLmJrbDoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVRdC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93
eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJh
c2UuY3BwOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaDoKKyAgICAgICAgKiBw
bHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy9QbHVn
aW5QYWNrYWdlLmg6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICogcGx1Z2lucy93aW4v
UGx1Z2luVmlld1dpbi5jcHA6CisKIDIwMDgtMDItMjIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkLCB0d2Vha2VkIGFuZCBsYW5kZWQgYnkgU2FtLgpJ
bmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCShyZXZpc2lvbiAzMDQ5MCkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTg0Myw2ICs4NDMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdl
YkNvcmUvcGxhdGZvcm0vVGltZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29k
ZVJhbmdlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuY3BwIFwKKwlXZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0
b3JlLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgXAogCVdlYkNvcmUv
cmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL2JpZGku
Y3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnBybwkocmV2aXNpb24gMzA0OTApCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC03ODUsNiArNzg1LDggQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0v
VGltZXIuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5jcHAgXAogICAgIHBs
YXRmb3JtL1dpZGdldC5jcHAgXAorICAgIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIFwKKyAg
ICBwbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAgXAogICAgIHBsdWdpbnMvUGx1Z2luU3RyZWFt
LmNwcCBcCiAgICAgcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAgXAogICAgIHJlbmRlcmlu
Zy9iaWRpLmNwcCBcCkBAIC05MzQsNyArOTM2LDYgQEAgcXQtcG9ydCB7CiAgICAgcGxhdGZvcm0v
cXQvUGxhdGZvcm1Nb3VzZUV2ZW50UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybVNj
cmVlblF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JvbGxCYXJRdC5jcHAgXAot
ICAgIHBsYXRmb3JtL3F0L1BsdWdJbkluZm9TdG9yZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQv
UG9wdXBNZW51UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9RV2ViUG9wdXAuY3BwIFwKICAgICBw
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmVTb3Vy
Y2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkocmV2aXNp
b24gMzA0OTApCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpA
QCAtNjMwLDYgKzYzMCwxMiBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMg
bmVlCiAgICAgICAgIHBsYXRmb3JtL3NxbC9TUUxWYWx1ZS5jcHAKICAgICA8L3NldD4KIAorICAg
IDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19QTFVHSU5TIj4KKyAgICAgICAg
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKyAgICAgICAgcGx1Z2lucy9QbHVnaW5JbmZvU3Rv
cmUuY3BwCisgICAgICAgIHBsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAorICAgIDwvc2V0PgorCiAg
ICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0dJRiI+CiAgICAgICAgIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKSW5kZXg6IFdlYkNv
cmUvd2ViY29yZS1iYXNlLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dlYmNvcmUtYmFzZS5i
a2wJKHJldmlzaW9uIDMwNDkwKQorKysgV2ViQ29yZS93ZWJjb3JlLWJhc2UuYmtsCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHd4V2ViQ29yZSBwb3J0IEJha2VmaWxlIHByb2plY3Qg
ZmlsZS4KICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfUEFHRSkKICAgICAgICAgJChXRUJDT1JF
X1NPVVJDRVNfSElTVE9SWSkKICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfUExBVEZPUk0pCisg
ICAgICAgICQoV0VCQ09SRV9TT1VSQ0VTX1BMVUdJTlMpCiAgICAgICAgICQoV0VCQ09SRV9TT1VS
Q0VTX1JFTkRFUklORykKICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfU1RPUkFHRSkKICAgICAg
ICAgJChXRUJDT1JFX1NPVVJDRVNfWEJNKQpAQCAtOTUsNiArOTYsNyBAQCB3eFdlYkNvcmUgcG9y
dCBCYWtlZmlsZSBwcm9qZWN0IGZpbGUuCiAgICAgICAgIDxpbmNsdWRlPiQoV0tfUk9PVCk8L2lu
Y2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoV0tfUk9PVCkvSmF2YVNjcmlwdENvcmU8L2luY2x1
ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoV0tfUk9PVCkvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGlu
Z0hlYWRlcnM8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoV0tfUk9PVCkvSmF2YVNjcmlw
dENvcmUvYmluZGluZ3M8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoV0tfUk9PVCkvSmF2
YVNjcmlwdENvcmUva2pzPC9pbmNsdWRlPgogICAgICAgICA8aW5jbHVkZT4kKFdLX1JPT1QpL0ph
dmFTY3JpcHRDb3JlL3BjcmU8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoV0tfUk9PVCkv
SmF2YVNjcmlwdENvcmUvd3RmPC9pbmNsdWRlPgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCShyZXZpc2lvbiAzMDQ5MCkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTc5NjEsNiArNzk2MSwxMCBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5z
XFBsdWdpbkRhdGFiYXNlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuaCINCiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHAJKHJldmlzaW9uIDMwNDkwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOCBAQAogI2luY2x1ZGUg
Ikdsb2JhbEhpc3RvcnkuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5E
YXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC01OSwxMiArNjAsMTQgQEAg
VmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdAogCiBib29sIFdlYkNvcmU6
Omhpc3RvcnlDb250YWlucyhjb25zdCBVQ2hhciosIHVuc2lnbmVkKSB7IHJldHVybiBmYWxzZTsg
fQogCi1QbHVnaW5JbmZvKiBQbHVnaW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVn
aW5BdEluZGV4KHVuc2lnbmVkKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwO30KLXVuc2ln
bmVkIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiAwOyB9Ci1TdHJpbmcgUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
U3RyaW5nKCk7IH0KLWJvb2wgV2ViQ29yZTo6UGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVU
eXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZh
bHNlOyB9Ci12b2lkIFdlYkNvcmU6OnJlZnJlc2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQotCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkg
Y29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gUGx1Z2luU2V0KCk7IH0KK1ZlY3RvcjxT
dHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9Citib29sIFBsdWdpbkRhdGFiYXNlOjpp
c1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJikgY29uc3QgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6
Omhhc2goKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Citib29sIFBsdWdp
blBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmLCBjb25zdCBQbHVnaW5QYWNrYWdl
JikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgUGx1Z2luUGFja2Fn
ZTo6bG9hZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CitQbHVnaW5QYWNr
YWdlOjp+UGx1Z2luUGFja2FnZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogCiBDb2xvciBXZWJD
b3JlOjpmb2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZvaWQgV2ViQ29y
ZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwCShyZXZpc2lvbiAzMDQ5
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xs
dGVjaCBBU0EKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRl
ZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZy
b20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotKi8K
LSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRlICJxZGVidWcuaCIKLSNpZiBR
VF9WRVJTSU9OIDwgMHgwNDA0MDAKLSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luX3AuaCIKLSNl
bmRpZgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotUGx1Z2luSW5mbyogUGx1Z2luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2lu
QXRJbmRleCh1bnNpZ25lZCBpKQotewotICAgIC8vcURlYnVnKCkgPDwgIj4+Pj4+Pj4+Pj4+IFBs
dWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgoIiA8PCBpIDw8
ICIpIjsKLQotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAgIFFXZWJGYWN0b3J5TG9hZGVy
ICpsb2FkZXIgPSBRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpOwotICAgIGlmIChpID4gbG9hZGVy
LT5tX3BsdWdpbkluZm8uY291bnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29uc3QgUVdl
YkZhY3RvcnlMb2FkZXI6OkluZm8gJnFpbmZvID0gbG9hZGVyLT5tX3BsdWdpbkluZm8uYXQoaSk7
Ci0gICAgUGx1Z2luSW5mbyAqaW5mbyA9IG5ldyBQbHVnaW5JbmZvOwotICAgIGluZm8tPm5hbWUg
PSBxaW5mby5uYW1lOwotICAgIGluZm8tPmRlc2MgPSBxaW5mby5kZXNjcmlwdGlvbjsKLSAgICBm
b3JlYWNoIChjb25zdCBRV2ViRmFjdG9yeUxvYWRlcjo6TWltZUluZm8gJm0sIHFpbmZvLm1pbWVz
KSB7Ci0gICAgICAgIE1pbWVDbGFzc0luZm8gKm1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKLSAg
ICAgICAgbWltZS0+dHlwZSA9IG0udHlwZTsKLSAgICAgICAgbWltZS0+cGx1Z2luID0gaW5mbzsK
LSAgICAgICAgZm9yZWFjaCAoUVN0cmluZyBleHQsIG0uZXh0ZW5zaW9ucykKLSAgICAgICAgICAg
IG1pbWUtPnN1ZmZpeGVzLmFwcGVuZChleHQpOwotICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQo
bWltZSk7Ci0gICAgfQotICAgIHJldHVybiBpbmZvOwotI2Vsc2UKLSAgICByZXR1cm4gMDsgLy8g
IyMjIEZJWE1FCi0jZW5kaWYKLX0KLQotdW5zaWduZWQgUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5D
b3VudCgpIGNvbnN0Ci17Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0gICAgLy9xRGVidWco
KSA8PCAiPj4+Pj4+Pj4+Pj4gUGx1Z2luSW5mb1N0b3JlOjpjb3VudCA9IiA8PCBRV2ViRmFjdG9y
eUxvYWRlcjo6c2VsZigpLT5rZXlzKCkuY291bnQoKTsKLSAgICByZXR1cm4gUVdlYkZhY3RvcnlM
b2FkZXI6OnNlbGYoKS0+a2V5cygpLmNvdW50KCk7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2Vu
ZGlmCi19Ci0KLVN0cmluZyBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBz
dHViYmVkIG91dCBhbmQgc2hvdWxkIHJlYWxseSByZXR1cm4gdGhlIG5hbWUgb2YgYSBwbHVnLWlu
IHBhY2thZ2UgZm9yCi0gICAgLy8gYSBnaXZlbiBNSU1FIHR5cGUuCi0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotICAgIAotYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiBzdHJpbmcpCi17Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAw
Ci0gICAgYm9vbCBzdXBwb3J0cyA9IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPnN1cHBvcnRz
TWltZVR5cGUoc3RyaW5nKTsKLSNlbHNlCi0gICAgYm9vbCBzdXBwb3J0cyA9IGZhbHNlOwotI2Vu
ZGlmCi0gICAgLy9xRGVidWcoKSA8PCAiPj4+Pj4+Pj4+Pj4gUGx1Z2luSW5mb1N0b3JlOjpzdXBw
b3J0c01JTUVUeXBlKCIgPDwgc3RyaW5nIDw8ICIpID0iIDw8IHN1cHBvcnRzOwotICAgIHJldHVy
biBzdXBwb3J0czsKLX0KLQotdm9pZCByZWZyZXNoUGx1Z2lucyhib29sKSB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMzA0OTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KICAqIENv
cHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4KICAqCiAgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKQEAgLTU5LDcgKzYwLDggQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNp
bmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgor
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKQEAgLTcwLDYg
KzcyLDE1IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitQbHVnaW5TZXQgUGx1Z2lu
RGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gUGx1Z2luU2V0KCk7IH0KK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZh
dWx0UGx1Z2luUGF0aHMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8U3RyaW5n
PigpOyB9Citib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3Qg
U3RyaW5nJikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wg
UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFs
c2U7IH0KK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiAwOyB9Citib29sIFBsdWdpblBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdp
blBhY2thZ2UmLCBjb25zdCBQbHVnaW5QYWNrYWdlJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gZmFsc2U7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpIHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIGZhbHNlOyB9CitQbHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFZlY3RvcjxTdHJpbmc+
IHN1cHBvcnRlZEtleVNpemVzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVjdG9yPFN0
cmluZz4oKTsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJz
LmNwcAkocmV2aXNpb24gMzA0OTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxp
bmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjMsNyArNjQsOCBAQAogI2lu
Y2x1ZGUgIlBsYXRmb3JtTWVudURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3Vz
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKLSNpbmNsdWRlICJQbHVn
aW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCkBAIC0xMTcsMTEgKzExOSwxNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeShV
Q2hhciBjb25zdCogc3RyLGludCBsZW4saW50IHBvc2l0aW9uLGludCogc3RhcnQsIGludCogZW5k
KSB7IG5vdEltcGxlbWVudGVkKCk7ICpzdGFydD1wb3NpdGlvbjsgKmVuZD1wb3NpdGlvbjsgfQog
Ci1QbHVnaW5JbmZvKlBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0
SW5kZXgodW5zaWduZWQpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQg
UGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KLWJvb2wgV2ViQ29yZTo6UGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVU
eXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZh
bHNlOyB9Ci1TdHJpbmcgUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7
IH0KLXZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgp
OyB9CitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3Qg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gUGx1Z2luU2V0KCk7IH0KK1ZlY3RvcjxTdHJpbmc+
IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9Citib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZl
cnJlZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gZmFsc2U7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2go
KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Citib29sIFBsdWdpblBhY2th
Z2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmLCBjb25zdCBQbHVnaW5QYWNrYWdlJikgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9h
ZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CitQbHVnaW5QYWNrYWdlOjp+
UGx1Z2luUGFja2FnZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogCiB2b2lkIFdpZGdldDo6c2V0
SXNTZWxlY3RlZChib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIApJbmRleDogV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAzMDQ2NSkJKGZyb20gV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHA6MzA0NjUpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTI0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5o
IgorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxzaGx3YXBpLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luRGF0YWJhc2UqIFBsdWdpbkRhdGFiYXNl
OjppbnN0YWxsZWRQbHVnaW5zKCkKK3sKKyAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIHBsdWdp
bnMgPSAwOworICAgIAorICAgIGlmICghcGx1Z2lucykgeworICAgICAgICBwbHVnaW5zID0gbmV3
IFBsdWdpbkRhdGFiYXNlOworICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5E
YXRhYmFzZTo6ZGVmYXVsdFBsdWdpblBhdGhzKCkpOworICAgICAgICBwbHVnaW5zLT5yZWZyZXNo
KCk7CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJh
c2U6OmFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgbV9wbHVn
aW5QYXRocy5hcHBlbmQocGF0aCk7CisgICAgcmVmcmVzaCgpOworfQorCitib29sIFBsdWdpbkRh
dGFiYXNlOjpyZWZyZXNoKCkKK3sgICAKKyAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsKKworICAg
IGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZhbHNlOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IHNl
dCBvZiBwbHVnaW5zCisgICAgbmV3UGx1Z2lucyA9IGdldFBsdWdpbnNJblBhdGhzKCk7CisKKyAg
ICBpZiAoIW1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5
cGVzLmNsZWFyKCk7CisKKyAgICAgICAgUGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZCA9IG1fcGx1
Z2luczsKKworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdp
bnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5l
d1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgcGx1Z2luc1Rv
VW5sb2FkLnJlbW92ZSgqaXQpOworCisgICAgICAgIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAg
ICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG5ld1BsdWdpbnMucmVtb3ZlKCppdCk7
CisKKyAgICAgICAgLy8gVW5sb2FkIHBsdWdpbnMKKyAgICAgICAgZW5kID0gcGx1Z2luc1RvVW5s
b2FkLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
bHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9w
bHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIEFkZCBuZXcgcGx1Z2lucworICAgICAg
ICBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0g
IXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5KCkgfHwgIW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1fcGx1Z2lucyA9IG5ld1BsdWdpbnM7CisgICAgICAgIFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9y
IChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAg
cGx1Z2luU2V0Q2hhbmdlZCA9ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICAv
LyBSZWdpc3RlciBwbHVnLWluIE1JTUUgdHlwZXMKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IC8vIEdldCBNSU1FIHR5cGVzCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKKyAg
ICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9
ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOyBtYXBfaXQgIT0gbWFwX2VuZDsg
KyttYXBfaXQpIHsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0
LT5maXJzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdl
ZDsKK30KKworVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucygp
IGNvbnN0Cit7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiByZXN1bHQ7CisKKyAgICBQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBs
dWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5
KEhLRVkgcm9vdEtleSwgUGx1Z2luU2V0JiBwbHVnaW5zKQoreworICAgIEhLRVkga2V5OworICAg
IEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNvZnR3YXJlXFxNb3pp
bGxhUGx1Z2lucyIsIDAsIEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkpOworCisgICAgaWYg
KHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICByZXR1cm47CisKKyAgICB3Y2hhcl90
IG5hbWVbMTI4XTsKKyAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7CisKKyAgICAvLyBFbnVtZXJh
dGUgc3Via2V5cworICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgIERXT1JEIG5h
bWVMZW4gPSBfY291bnRvZihuYW1lKTsKKyAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4Vyhr
ZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKKworICAgICAg
ICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBXQ0hBUiBwYXRoU3RyW19NQVhfUEFUSF07CisgICAgICAgIERXT1JEIHBhdGhTdHJTaXpl
ID0gc2l6ZW9mKHBhdGhTdHIpOworICAgICAgICBEV09SRCB0eXBlOworCisgICAgICAgIHJlc3Vs
dCA9IFNIR2V0VmFsdWUoa2V5LCBuYW1lLCBURVhUKCJQYXRoIiksICZ0eXBlLCAoTFBCWVRFKXBh
dGhTdHIsICZwYXRoU3RyU2l6ZSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VT
UyB8fCB0eXBlICE9IFJFR19TWikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFdJ
TjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgYXR0cmlidXRlczsKKyAgICAgICAgaWYgKEdldEZpbGVB
dHRyaWJ1dGVzRXgocGF0aFN0ciwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmYXR0cmlidXRlcykg
PT0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBh
Y2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKFN0cmluZyhwYXRoU3RyLCBwYXRo
U3RyU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSwgYXR0cmlidXRlcy5mdExhc3RXcml0ZVRpbWUp
OworCisgICAgICAgIGlmIChwYWNrYWdlKQorICAgICAgICAgICAgcGx1Z2lucy5hZGQocGFja2Fn
ZSk7CisgICAgfQorCisgICAgUmVnQ2xvc2VLZXkoa2V5KTsKK30KKworUGx1Z2luU2V0IFBsdWdp
bkRhdGFiYXNlOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCisgICAgSGFzaFNldDxTdHJpbmc+
IHVuaXF1ZUZpbGVuYW1lczsKKyAgICBQbHVnaW5TZXQgcGx1Z2luczsKKworICAgIEhBTkRMRSBo
RmluZCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIFdJTjMyX0ZJTkRfREFUQVcgZmluZEZp
bGVEYXRhOworCisgICAgUGx1Z2luUGFja2FnZSogb2xkV01QUGx1Z2luID0gMDsKKyAgICBQbHVn
aW5QYWNrYWdlKiBuZXdXTVBQbHVnaW4gPSAwOworCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICppdCArICJcXCoiOworCisgICAg
ICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVcocGF0dGVybi5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpLCAmZmluZEZpbGVEYXRhKTsKKworICAgICAgICBpZiAoaEZpbmQgPT0gSU5WQUxJ
RF9IQU5ETEVfVkFMVUUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICBpZiAoZmluZEZpbGVEYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJ
QlVURV9ESVJFQ1RPUlkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IFN0cmluZyBmaWxlbmFtZSA9IFN0cmluZyhmaW5kRmlsZURhdGEuY0ZpbGVOYW1lLCB3Y3NsZW4o
ZmluZEZpbGVEYXRhLmNGaWxlTmFtZSkpOworICAgICAgICAgICAgaWYgKCghZmlsZW5hbWUuc3Rh
cnRzV2l0aCgibnAiLCBmYWxzZSkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKCJkbGwiLCBmYWxzZSkp
ICYmCisgICAgICAgICAgICAgICAgKCFlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIlBsdWdp
bi5kbGwiKSB8fCAhaXQtPmVuZHNXaXRoKCJTaG9ja3dhdmUgMTAiLCBmYWxzZSkpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSAqaXQg
KyAiXFwiICsgZmlsZW5hbWU7CisgICAgICAgICAgICBpZiAoIXVuaXF1ZUZpbGVuYW1lcy5hZGQo
ZnVsbFBhdGgpLnNlY29uZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisg
ICAgICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2FnZTo6
Y3JlYXRlUGFja2FnZShmdWxsUGF0aCwgZmluZEZpbGVEYXRhLmZ0TGFzdFdyaXRlVGltZSk7CisK
KyAgICAgICAgICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7CisgICAgICAgICAgICAgICAgcGx1Z2lu
cy5hZGQocGx1Z2luUGFja2FnZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UoZmlsZW5hbWUsICJucGRzcGxheS5kbGwiKSkKKyAgICAgICAgICAgICAgICAgICAgb2xk
V01QUGx1Z2luID0gcGx1Z2luUGFja2FnZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wLW1zd21wLmRsbCIpKQorICAgICAgICAgICAgICAg
ICAgICBuZXdXTVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdlOworICAgICAgICAgICAgfQorCisgICAg
ICAgIH0gd2hpbGUgKEZpbmROZXh0RmlsZVcoaEZpbmQsICZmaW5kRmlsZURhdGEpICE9IDApOwor
CisgICAgICAgIEZpbmRDbG9zZShoRmluZCk7CisgICAgfQorCisgICAgYWRkUGx1Z2luc0Zyb21S
ZWdpc3RyeShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBsdWdpbnMpOworICAgIGFkZFBsdWdpbnNGcm9t
UmVnaXN0cnkoSEtFWV9DVVJSRU5UX1VTRVIsIHBsdWdpbnMpOworCisgICAgLy8gSWYgYm90aCB0
aGUgb2xkIGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJlc2VudCBpbiB0aGUgcGx1Z2lucyBzZXQs
IAorICAgIC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBzbyB3ZSBkb24ndCBlbmQgdXAgY2hvb3Np
bmcgdGhlIG9sZCBvbmUuCisgICAgaWYgKG9sZFdNUFBsdWdpbiAmJiBuZXdXTVBQbHVnaW4pCisg
ICAgICAgIHBsdWdpbnMucmVtb3ZlKG9sZFdNUFBsdWdpbik7CisKKyAgICByZXR1cm4gcGx1Z2lu
czsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBwYXJzZVZlcnNpb25TdHJpbmcoY29u
c3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQoreworICAgIFZlY3RvcjxpbnQ+IHZlcnNpb247CisK
KyAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7CisgICAgdW5zaWduZWQgZW5kUG9zOworICAgIAor
ICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCkpIHsKKyAgICAgICAg
Zm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKTsg
KytlbmRQb3MpCisgICAgICAgICAgICBpZiAodmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICcuJyB8
fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVyc2lvblN0cmluZy5zdWJzdHJpbmco
c3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgpOworICAgICAgICB2ZXJzaW9uLmFw
cGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKKworICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyArIDE7
CisgICAgfQorCisgICAgcmV0dXJuIHZlcnNpb247Cit9CisKKy8vIFRoaXMgcmV0dXJucyB3aGV0
aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25CCitzdGF0aWMgaW5saW5lIGJvb2wg
Y29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29uc3QgVmVjdG9y
PGludD4mIHZlcnNpb25CKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJzaW9u
QS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXplKCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodmVyc2lvbkFbaV0gPiB2ZXJzaW9u
QltpXSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBlbHNlIGlmICh2ZXJzaW9u
QVtpXSA8IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25zIGFyZSBlaXRoZXIgdGhlIHNhbWUg
b3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwganVzdCByZXR1cm4gZmFsc2UKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1Z2lu
UGF0aHMoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIC8vIEVudW1lcmF0ZSBhbGwgTW96
aWxsYSBwbHVnaW4gZGlyZWN0b3JpZXMgaW4gdGhlIHJlZ2lzdHJ5CisgICAgSEtFWSBrZXk7Cisg
ICAgTE9ORyByZXN1bHQ7CisgICAgCisgICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9D
QUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1vemlsbGEiKSwgMCwgS0VZX1JFQUQsICZrZXkp
OworICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICBXQ0hBUiBuYW1l
WzEyOF07CisgICAgICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKKworICAgICAgICAvLyBFbnVt
ZXJhdGUgc3Via2V5cworICAgICAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICAg
ICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7CisgICAgICAg
ICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAs
IDAsICZsYXN0TW9kaWZpZWQpOworCisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NV
Q0NFU1MpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIFN0cmluZyBleHRl
bnNpb25zUGF0aCA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKSArICJcXEV4dGVuc2lvbnMiOworICAg
ICAgICAgICAgSEtFWSBleHRlbnNpb25zS2V5OworCisgICAgICAgICAgICAvLyBUcnkgb3Blbmlu
ZyB0aGUga2V5CisgICAgICAgICAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoa2V5LCBleHRlbnNp
b25zUGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCBLRVlfUkVBRCwgJmV4
dGVuc2lvbnNLZXkpOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1Mp
IHsKKyAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0IHRoZSBwbHVnaW5zIHBhdGgKKyAgICAgICAg
ICAgICAgICBXQ0hBUiBwbHVnaW5zUGF0aFN0cltfTUFYX1BBVEhdOworICAgICAgICAgICAgICAg
IERXT1JEIHBsdWdpbnNQYXRoU2l6ZSA9IHNpemVvZihwbHVnaW5zUGF0aFN0cik7CisgICAgICAg
ICAgICAgICAgRFdPUkQgdHlwZTsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFJlZ1F1ZXJ5
VmFsdWVFeChleHRlbnNpb25zS2V5LCBURVhUKCJQbHVnaW5zIiksIDAsICZ0eXBlLCAoTFBCWVRF
KSZwbHVnaW5zUGF0aFN0ciwgJnBsdWdpbnNQYXRoU2l6ZSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisgICAgICAgICAg
ICAgICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1Z2luc1BhdGhTdHIsIHBsdWdpbnNQYXRo
U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7CisKKyAgICAgICAgICAgICAgICBSZWdDbG9zZUtl
eShleHRlbnNpb25zS2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgUmVnQ2xvc2VLZXkoa2V5KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sK
KyAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBsdWdpbiBpcyBpbnN0YWxsZWQgaW4gXFBGaWxl
c1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55IEZpcmVmb3ggaW5zdGFsbHMKKyAgICBXQ0hB
UiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRIICsgMV07CisgICAgRFdPUkQgcGx1Z2luRGly
ZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzVyhURVhUKCIlU1lTVEVNRFJJ
VkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2luRGlyZWN0b3J5U3RyLCBfY291bnRvZihwbHVn
aW5EaXJlY3RvcnlTdHIpKTsKKworICAgIGlmIChwbHVnaW5EaXJlY3RvcnlTaXplID4gMCAmJiBw
bHVnaW5EaXJlY3RvcnlTaXplIDw9IF9jb3VudG9mKHBsdWdpbkRpcmVjdG9yeVN0cikpCisgICAg
ICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1Z2luRGlyZWN0b3J5U3RyLCBwbHVnaW5EaXJlY3Rv
cnlTaXplIC0gMSkpOworCisgICAgRFdPUkQgdHlwZTsKKyAgICBXQ0hBUiBpbnN0YWxsYXRpb25E
aXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKKyAgICBEV09SRCBpbnN0YWxsYXRpb25EaXJlY3RvcnlT
aXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cik7CisKKyAgICBIUkVTVUxUIHJl
c3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTWlj
cm9zb2Z0XFxNZWRpYVBsYXllciIpLCBURVhUKCJJbnN0YWxsYXRpb24gRGlyZWN0b3J5IiksICZ0
eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsICZpbnN0YWxsYXRpb25EaXJl
Y3RvcnlTaXplKTsKKworICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09
IFJFR19TWikKKyAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhpbnN0YWxsYXRpb25EaXJlY3Rv
cnlTdHIsIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkpOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkUXVpY2tUaW1lUGx1Z2luUGF0aChWZWN0b3I8U3Ry
aW5nPiYgcGF0aHMpCit7CisgICAgRFdPUkQgdHlwZTsKKyAgICBXQ0hBUiBpbnN0YWxsYXRpb25E
aXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKKyAgICBEV09SRCBpbnN0YWxsYXRpb25EaXJlY3RvcnlT
aXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cik7CisKKyAgICBIUkVTVUxUIHJl
c3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcQXBw
bGUgQ29tcHV0ZXIsIEluYy5cXFF1aWNrVGltZSIpLCBURVhUKCJJbnN0YWxsRGlyIiksICZ0eXBl
LCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsICZpbnN0YWxsYXRpb25EaXJlY3Rv
cnlTaXplKTsKKworICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJF
R19TWikgeworICAgICAgICBTdHJpbmcgcGx1Z2luRGlyID0gU3RyaW5nKGluc3RhbGxhdGlvbkRp
cmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAx
KSArICJcXHBsdWdpbnMiOworICAgICAgICBwYXRocy5hcHBlbmQocGx1Z2luRGlyKTsKKyAgICB9
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRBZG9iZUFjcm9iYXRQbHVnaW5QYXRoKFZlY3Rv
cjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBIS0VZIGtleTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9
IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxBZG9iZVxc
QWNyb2JhdCBSZWFkZXIiKSwgMCwgS0VZX1JFQUQsICZrZXkpOworICAgIGlmIChyZXN1bHQgIT0g
RVJST1JfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOworCisgICAgV0NIQVIgbmFtZVsxMjhdOwor
ICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKKworICAgIFZlY3RvcjxpbnQ+IGxhdGVzdEFjcm9i
YXRWZXJzaW9uOworICAgIFN0cmluZyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZzsKKworICAg
IC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKKyAgICAg
ICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7CisgICAgICAg
IHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwg
Jmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgVmVjdG9yPGludD4gYWNyb2JhdFZlcnNpb24g
PSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5hbWUsIG5hbWVMZW4pKTsKKyAgICAgICAgaWYg
KGNvbXBhcmVWZXJzaW9ucyhhY3JvYmF0VmVyc2lvbiwgbGF0ZXN0QWNyb2JhdFZlcnNpb24pKSB7
CisgICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvbiA9IGFjcm9iYXRWZXJzaW9uOworICAg
ICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgPSBTdHJpbmcobmFtZSwgbmFtZUxl
bik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWxhdGVzdEFjcm9iYXRWZXJzaW9uU3Ry
aW5nLmlzTnVsbCgpKSB7CisgICAgICAgIERXT1JEIHR5cGU7CisgICAgICAgIFdDSEFSIGFjcm9i
YXRJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOworICAgICAgICBEV09SRCBhY3JvYmF0SW5zdGFs
bFBhdGhTaXplID0gc2l6ZW9mKGFjcm9iYXRJbnN0YWxsUGF0aFN0cik7CisKKyAgICAgICAgU3Ry
aW5nIGFjcm9iYXRQbHVnaW5LZXlQYXRoID0gIlNvZnR3YXJlXFxBZG9iZVxcQWNyb2JhdCBSZWFk
ZXJcXCIgKyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyArICJcXEluc3RhbGxQYXRoIjsKKyAg
ICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIGFjcm9iYXRQbHVn
aW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsICZ0eXBlLCAoTFBC
WVRFKWFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFjcm9iYXRJbnN0YWxsUGF0aFNpemUpOworCisg
ICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgICAgU3RyaW5n
IGFjcm9iYXRQbHVnaW5QYXRoID0gU3RyaW5nKGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgYWNyb2Jh
dEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXGJyb3dzZXIiOworICAg
ICAgICAgICAgcGF0aHMuYXBwZW5kKGFjcm9iYXRQbHVnaW5QYXRoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFJlZ0Nsb3NlS2V5KGtleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHNh
ZmFyaVBsdWdpbnNQYXRoKCkKK3sKKyAgICBXQ0hBUiBtb2R1bGVGaWxlTmFtZVN0cltfTUFYX1BB
VEhdOworICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc1BhdGg7CisgICAgc3RhdGljIGJvb2wgY2Fj
aGVkUGx1Z2luUGF0aCA9IGZhbHNlOworCisgICAgaWYgKCFjYWNoZWRQbHVnaW5QYXRoKSB7Cisg
ICAgICAgIGNhY2hlZFBsdWdpblBhdGggPSB0cnVlOworCisgICAgICAgIGludCBtb2R1bGVGaWxl
TmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1lKDAsIG1vZHVsZUZpbGVOYW1lU3RyLCBfTUFYX1BB
VEgpOworCisgICAgICAgIGlmICghbW9kdWxlRmlsZU5hbWVMZW4gfHwgbW9kdWxlRmlsZU5hbWVM
ZW4gPT0gX01BWF9QQVRIKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIGlmICgh
UGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZpbGVOYW1lU3RyKSkKKyAgICAgICAgICAgIGdvdG8g
ZXhpdDsKKworICAgICAgICBwbHVnaW5zUGF0aCA9IFN0cmluZyhtb2R1bGVGaWxlTmFtZVN0cikg
KyAiXFxQbHVnaW5zIjsKKyAgICB9CitleGl0OgorICAgIHJldHVybiBwbHVnaW5zUGF0aDsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIGFkZE1hY3JvbWVkaWFQbHVnaW5QYXRocyhWZWN0b3I8U3Ry
aW5nPiYgcGF0aHMpCit7CisgICAgV0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsK
KworICAgIGlmIChHZXRTeXN0ZW1EaXJlY3Rvcnkoc3lzdGVtRGlyZWN0b3J5U3RyLCBfY291bnRv
ZihzeXN0ZW1EaXJlY3RvcnlTdHIpKSA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBXQ0hB
UiBtYWNyb21lZGlhRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKKworICAgIFBhdGhDb21iaW5lKG1h
Y3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0ciwgVEVYVCgibWFjcm9tZWRc
XEZsYXNoIikpOworICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKKwor
ICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0
ciwgVEVYVCgibWFjcm9tZWRcXFNob2Nrd2F2ZSAxMCIpKTsKKyAgICBwYXRocy5hcHBlbmQobWFj
cm9tZWRpYURpcmVjdG9yeVN0cik7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNl
OjpkZWZhdWx0UGx1Z2luUGF0aHMoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOworICAg
IFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKKworICAgIGlmICghb3VyUGF0
aC5pc051bGwoKSkKKyAgICAgICAgcGF0aHMuYXBwZW5kKG91clBhdGgpOworICAgIGFkZFF1aWNr
VGltZVBsdWdpblBhdGgocGF0aHMpOworICAgIGFkZEFkb2JlQWNyb2JhdFBsdWdpblBhdGgocGF0
aHMpOworICAgIGFkZE1vemlsbGFQbHVnaW5QYXRocyhwYXRocyk7CisgICAgYWRkV2luZG93c01l
ZGlhUGxheWVyUGx1Z2luUGF0aChwYXRocyk7CisgICAgYWRkTWFjcm9tZWRpYVBsdWdpblBhdGhz
KHBhdGhzKTsKKworICAgIHJldHVybiBwYXRoczsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZTo6
aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAo
bWltZVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9yZWdp
c3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNl
IGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICByZXR1cm4gKHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVy
ZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKTsKK30KKworUGx1Z2luUGFja2FnZSogUGx1
Z2luRGF0YWJhc2U6OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7
CisgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBT
dHJpbmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKKyAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFy
aVBsdWdpbnNQYXRoKCk7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gMDsKKyAgICBQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKworICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250
YWlucyhrZXkpKSB7CisgICAgICAgICAgICBwbHVnaW4gPSAoKml0KS5nZXQoKTsKKyAgICAgICAg
ICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKKyAgICAg
ICAgICAgIGlmIChwbHVnaW4tPnBhcmVudERpcmVjdG9yeSgpID09IG91clBhdGgpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luOwor
fQorCitTdHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgZXh0ZW5zaW9uKSBjb25zdAoreworICAgIGlmIChleHRlbnNpb24uaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdp
bnNQYXRoKCk7CisgICAgU3RyaW5nIG1pbWVUeXBlOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdp
biA9IDA7CisKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdp
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5l
bmQoKTsKKworICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7IG1pbWVfaXQgIT0g
bWltZV9lbmQ7ICsrbWltZV9pdCkgeworICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CisgICAgICAg
ICAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+Zmlyc3Q7CisgICAgICAgICAgICAgICAg
ICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOworICAgICAgICAgICAgICAgICAgICAvLyBwcmVmZXIg
cGx1Z2lucyBpbiBvdXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAg
IGlmIChwbHVnaW4tPnBhcmVudERpcmVjdG9yeSgpID09IG91clBhdGgpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWltZVR5cGU7Cit9CisKK1BsdWdpblBhY2thZ2Uq
IFBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBtaW1l
VHlwZSkKK3sgICAKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlw
ZShtaW1lVHlwZSk7CisgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLnN0cmluZygpOworICAgIAor
ICAgIGlmICghcGx1Z2luKSB7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IHVybC5sYXN0UGF0
aENvbXBvbmVudCgpOworICAgICAgICBpZiAoIWZpbGVuYW1lLmVuZHNXaXRoKCIvIikpIHsKKyAg
ICAgICAgICAgIGludCBleHRlbnNpb25Qb3MgPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOwor
ICAgICAgICAgICAgaWYgKGV4dGVuc2lvblBvcyAhPSAtMSkgeworICAgICAgICAgICAgICAgIFN0
cmluZyBleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZXh0ZW5zaW9uUG9zICsgMSk7CisK
KyAgICAgICAgICAgICAgICBtaW1lVHlwZSA9IE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lv
bik7CisgICAgICAgICAgICAgICAgcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gRklYTUU6IGlmIG5v
IHBsdWdpbiBjb3VsZCBiZSBmb3VuZCwgcXVlcnkgV2luZG93cyBmb3IgdGhlIG1pbWUgdHlwZSAK
KyAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCisKKyAgICByZXR1cm4gcGx1
Z2luOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHJldmlzaW9u
IDMwNDY1KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI5LDggKzMwLDYgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSA8d2luZG93cy5o
PgotI2luY2x1ZGUgPHNobHdhcGkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Nyw2
ICs0NiwxNiBAQCBQbHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlCiAgICAg
cmV0dXJuIHBsdWdpbnM7CiB9CiAKK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVSZWdp
c3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVUeXBlLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVUeXBl
cy5jb250YWlucyhtaW1lVHlwZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIE5vIHBs
dWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5n
IGFnYWluCisgICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNv
bnRhaW5zKG1pbWVUeXBlKSk7Cit9CisKIHZvaWQgUGx1Z2luRGF0YWJhc2U6OmFkZEV4dHJhUGx1
Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgbV9wbHVnaW5QYXRocy5hcHBlbmQo
cGF0aCk7CkBAIC0xMTksMzQ3ICsxMjgsMTkgQEAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBQbHVn
aW5EYXRhYmFzZTo6cAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9p
ZCBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVkgcm9vdEtleSwgUGx1Z2luU2V0JiBwbHVnaW5z
KQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4Vyhy
b290S2V5LCBMIlNvZnR3YXJlXFxNb3ppbGxhUGx1Z2lucyIsIDAsIEtFWV9FTlVNRVJBVEVfU1VC
X0tFWVMsICZrZXkpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB3Y2hhcl90IG5hbWVbMTI4XTsKLSAgICBGSUxFVElNRSBsYXN0TW9k
aWZpZWQ7Ci0KLSAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAgIGZvciAoaW50IGkgPSAwOzsg
aSsrKSB7Ci0gICAgICAgIERXT1JEIG5hbWVMZW4gPSBfY291bnRvZihuYW1lKTsKLSAgICAgICAg
cmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAm
bGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBXQ0hBUiBwYXRoU3RyW19NQVhfUEFUSF07Ci0g
ICAgICAgIERXT1JEIHBhdGhTdHJTaXplID0gc2l6ZW9mKHBhdGhTdHIpOwotICAgICAgICBEV09S
RCB0eXBlOwotCi0gICAgICAgIHJlc3VsdCA9IFNIR2V0VmFsdWUoa2V5LCBuYW1lLCBURVhUKCJQ
YXRoIiksICZ0eXBlLCAoTFBCWVRFKXBhdGhTdHIsICZwYXRoU3RyU2l6ZSk7Ci0gICAgICAgIGlm
IChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUyB8fCB0eXBlICE9IFJFR19TWikKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgYXR0cmlidXRl
czsKLSAgICAgICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXgocGF0aFN0ciwgR2V0RmlsZUV4SW5m
b1N0YW5kYXJkLCAmYXR0cmlidXRlcykgPT0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNr
YWdlKFN0cmluZyhwYXRoU3RyLCBwYXRoU3RyU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSwgYXR0
cmlidXRlcy5mdExhc3RXcml0ZVRpbWUpOwotCi0gICAgICAgIGlmIChwYWNrYWdlKQotICAgICAg
ICAgICAgcGx1Z2lucy5hZGQocGFja2FnZSk7Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXkoa2V5
KTsKLX0KLQotUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5zSW5QYXRocygpIGNv
bnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBz
ZXQuCi0gICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKLSAgICBQbHVnaW5TZXQg
cGx1Z2luczsKLQotICAgIEhBTkRMRSBoRmluZCA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotICAg
IFdJTjMyX0ZJTkRfREFUQVcgZmluZEZpbGVEYXRhOwotCi0gICAgUGx1Z2luUGFja2FnZSogb2xk
V01QUGx1Z2luID0gMDsKLSAgICBQbHVnaW5QYWNrYWdlKiBuZXdXTVBQbHVnaW4gPSAwOwotCi0g
ICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5k
KCk7Ci0gICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdp
blBhdGhzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTdHJpbmcgcGF0dGVy
biA9ICppdCArICJcXCoiOwotCi0gICAgICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVcocGF0dGVy
bi5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAmZmluZEZpbGVEYXRhKTsKLQotICAg
ICAgICBpZiAoaEZpbmQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoZmluZEZpbGVEYXRhLmR3Rmls
ZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IFN0cmluZyhmaW5kRmls
ZURhdGEuY0ZpbGVOYW1lLCB3Y3NsZW4oZmluZEZpbGVEYXRhLmNGaWxlTmFtZSkpOwotICAgICAg
ICAgICAgaWYgKCghZmlsZW5hbWUuc3RhcnRzV2l0aCgibnAiLCBmYWxzZSkgfHwgIWZpbGVuYW1l
LmVuZHNXaXRoKCJkbGwiLCBmYWxzZSkpICYmCi0gICAgICAgICAgICAgICAgKCFlcXVhbElnbm9y
aW5nQ2FzZShmaWxlbmFtZSwgIlBsdWdpbi5kbGwiKSB8fCAhaXQtPmVuZHNXaXRoKCJTaG9ja3dh
dmUgMTAiLCBmYWxzZSkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICBTdHJpbmcgZnVsbFBhdGggPSAqaXQgKyAiXFwiICsgZmlsZW5hbWU7Ci0gICAgICAgICAgICBp
ZiAoIXVuaXF1ZUZpbGVuYW1lcy5hZGQoZnVsbFBhdGgpLnNlY29uZCkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5Q
YWNrYWdlID0gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZShmdWxsUGF0aCwgZmluZEZpbGVE
YXRhLmZ0TGFzdFdyaXRlVGltZSk7Ci0KLSAgICAgICAgICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7
Ci0gICAgICAgICAgICAgICAgcGx1Z2lucy5hZGQocGx1Z2luUGFja2FnZSk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucGRzcGxheS5kbGwiKSkK
LSAgICAgICAgICAgICAgICAgICAgb2xkV01QUGx1Z2luID0gcGx1Z2luUGFja2FnZTsKLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wLW1zd21w
LmRsbCIpKQotICAgICAgICAgICAgICAgICAgICBuZXdXTVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdl
OwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gd2hpbGUgKEZpbmROZXh0RmlsZVcoaEZpbmQs
ICZmaW5kRmlsZURhdGEpICE9IDApOwotCi0gICAgICAgIEZpbmRDbG9zZShoRmluZCk7Ci0gICAg
fQotCi0gICAgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBsdWdp
bnMpOwotICAgIGFkZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtFWV9DVVJSRU5UX1VTRVIsIHBsdWdp
bnMpOwotCi0gICAgLy8gSWYgYm90aCB0aGUgb2xkIGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJl
c2VudCBpbiB0aGUgcGx1Z2lucyBzZXQsIAotICAgIC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBz
byB3ZSBkb24ndCBlbmQgdXAgY2hvb3NpbmcgdGhlIG9sZCBvbmUuCi0gICAgaWYgKG9sZFdNUFBs
dWdpbiAmJiBuZXdXTVBQbHVnaW4pCi0gICAgICAgIHBsdWdpbnMucmVtb3ZlKG9sZFdNUFBsdWdp
bik7Ci0KLSAgICByZXR1cm4gcGx1Z2luczsKLX0KLQotc3RhdGljIGlubGluZSBWZWN0b3I8aW50
PiBwYXJzZVZlcnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQotewotICAg
IFZlY3RvcjxpbnQ+IHZlcnNpb247Ci0KLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7Ci0gICAg
dW5zaWduZWQgZW5kUG9zOwotICAgIAotICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJp
bmcubGVuZ3RoKCkpIHsKLSAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwg
dmVyc2lvblN0cmluZy5sZW5ndGgoKTsgKytlbmRQb3MpCi0gICAgICAgICAgICBpZiAodmVyc2lv
blN0cmluZ1tlbmRQb3NdID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0g
dmVyc2lvblN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0lu
dCgpOwotICAgICAgICB2ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKLQotICAgICAg
ICBzdGFydFBvcyA9IGVuZFBvcyArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZlcnNpb247Ci19
Ci0KLS8vIFRoaXMgcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNp
b25CCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+
JiB2ZXJzaW9uQSwgY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQotewotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaSA+
PSB2ZXJzaW9uQi5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBp
ZiAodmVyc2lvbkFbaV0gPiB2ZXJzaW9uQltpXSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBlbHNlIGlmICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNp
b25zIGFyZSBlaXRoZXIgdGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVu
dCwganVzdCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgdm9pZCBhZGRNb3ppbGxhUGx1Z2luUGF0aHMoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQotewot
ICAgIC8vIEVudW1lcmF0ZSBhbGwgTW96aWxsYSBwbHVnaW4gZGlyZWN0b3JpZXMgaW4gdGhlIHJl
Z2lzdHJ5Ci0gICAgSEtFWSBrZXk7Ci0gICAgTE9ORyByZXN1bHQ7Ci0gICAgCi0gICAgcmVzdWx0
ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1vemls
bGEiKSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VT
UykgewotICAgICAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgICAgIEZJTEVUSU1FIGxhc3RNb2Rp
ZmllZDsKLQotICAgICAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAgICAgICBmb3IgKGludCBp
ID0gMDs7IGkrKykgewotICAgICAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAv
IHNpemVvZihXQ0hBUik7Ci0gICAgICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwg
aSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgICAg
ICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb25zUGF0aCA9IFN0cmluZyhuYW1lLCBuYW1lTGVu
KSArICJcXEV4dGVuc2lvbnMiOwotICAgICAgICAgICAgSEtFWSBleHRlbnNpb25zS2V5OwotCi0g
ICAgICAgICAgICAvLyBUcnkgb3BlbmluZyB0aGUga2V5Ci0gICAgICAgICAgICByZXN1bHQgPSBS
ZWdPcGVuS2V5RXgoa2V5LCBleHRlbnNpb25zUGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLCAwLCBLRVlfUkVBRCwgJmV4dGVuc2lvbnNLZXkpOwotCi0gICAgICAgICAgICBpZiAo
cmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0IHRo
ZSBwbHVnaW5zIHBhdGgKLSAgICAgICAgICAgICAgICBXQ0hBUiBwbHVnaW5zUGF0aFN0cltfTUFY
X1BBVEhdOwotICAgICAgICAgICAgICAgIERXT1JEIHBsdWdpbnNQYXRoU2l6ZSA9IHNpemVvZihw
bHVnaW5zUGF0aFN0cik7Ci0gICAgICAgICAgICAgICAgRFdPUkQgdHlwZTsKLQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChleHRlbnNpb25zS2V5LCBURVhUKCJQbHVn
aW5zIiksIDAsICZ0eXBlLCAoTFBCWVRFKSZwbHVnaW5zUGF0aFN0ciwgJnBsdWdpbnNQYXRoU2l6
ZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlw
ZSA9PSBSRUdfU1opCi0gICAgICAgICAgICAgICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1
Z2luc1BhdGhTdHIsIHBsdWdpbnNQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci0KLSAg
ICAgICAgICAgICAgICBSZWdDbG9zZUtleShleHRlbnNpb25zS2V5KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUmVnQ2xvc2VLZXkoa2V5KTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRoKFZl
Y3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBsdWdp
biBpcyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55IEZp
cmVmb3ggaW5zdGFsbHMKLSAgICBXQ0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRIICsg
MV07Ci0gICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1lbnRT
dHJpbmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2luRGly
ZWN0b3J5U3RyLCBfY291bnRvZihwbHVnaW5EaXJlY3RvcnlTdHIpKTsKLQotICAgIGlmIChwbHVn
aW5EaXJlY3RvcnlTaXplID4gMCAmJiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9IF9jb3VudG9mKHBs
dWdpbkRpcmVjdG9yeVN0cikpCi0gICAgICAgIHBhdGhzLmFwcGVuZChTdHJpbmcocGx1Z2luRGly
ZWN0b3J5U3RyLCBwbHVnaW5EaXJlY3RvcnlTaXplIC0gMSkpOwotCi0gICAgRFdPUkQgdHlwZTsK
LSAgICBXQ0hBUiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKLSAgICBEV09S
RCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9y
eVN0cik7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNI
SU5FLCBURVhUKCJTb2Z0d2FyZVxcTWljcm9zb2Z0XFxNZWRpYVBsYXllciIpLCBURVhUKCJJbnN0
YWxsYXRpb24gRGlyZWN0b3J5IiksICZ0eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3Rv
cnlTdHIsICZpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplKTsKLQotICAgIGlmIChyZXN1bHQgPT0g
RVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikKLSAgICAgICAgcGF0aHMuYXBwZW5kKFN0
cmluZyhpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUg
LyBzaXplb2YoV0NIQVIpIC0gMSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkUXVpY2tU
aW1lUGx1Z2luUGF0aChWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgRFdPUkQgdHlwZTsK
LSAgICBXQ0hBUiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKLSAgICBEV09S
RCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9y
eVN0cik7Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9MT0NBTF9NQUNI
SU5FLCBURVhUKCJTb2Z0d2FyZVxcQXBwbGUgQ29tcHV0ZXIsIEluYy5cXFF1aWNrVGltZSIpLCBU
RVhUKCJJbnN0YWxsRGlyIiksICZ0eXBlLCAoTFBCWVRFKSZpbnN0YWxsYXRpb25EaXJlY3RvcnlT
dHIsICZpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplKTsKLQotICAgIGlmIChyZXN1bHQgPT0gRVJS
T1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikgewotICAgICAgICBTdHJpbmcgcGx1Z2luRGly
ID0gU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXHBsdWdpbnMiOwotICAgICAgICBwYXRocy5h
cHBlbmQocGx1Z2luRGlyKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRBZG9i
ZUFjcm9iYXRQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBIS0VZIGtl
eTsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUs
IFRFWFQoIlNvZnR3YXJlXFxBZG9iZVxcQWNyb2JhdCBSZWFkZXIiKSwgMCwgS0VZX1JFQUQsICZr
ZXkpOwotICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgV0NIQVIgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAg
IFZlY3RvcjxpbnQ+IGxhdGVzdEFjcm9iYXRWZXJzaW9uOwotICAgIFN0cmluZyBsYXRlc3RBY3Jv
YmF0VmVyc2lvblN0cmluZzsKLQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChp
bnQgaSA9IDA7OyBpKyspIHsKLSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAv
IHNpemVvZihXQ0hBUik7Ci0gICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBu
YW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgaWYgKHJl
c3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVmVj
dG9yPGludD4gYWNyb2JhdFZlcnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5hbWUs
IG5hbWVMZW4pKTsKLSAgICAgICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhhY3JvYmF0VmVyc2lvbiwg
bGF0ZXN0QWNyb2JhdFZlcnNpb24pKSB7Ci0gICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lv
biA9IGFjcm9iYXRWZXJzaW9uOwotICAgICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJp
bmcgPSBTdHJpbmcobmFtZSwgbmFtZUxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IWxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIERXT1JEIHR5
cGU7Ci0gICAgICAgIFdDSEFSIGFjcm9iYXRJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOwotICAg
ICAgICBEV09SRCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGFjcm9iYXRJbnN0YWxs
UGF0aFN0cik7Ci0KLSAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5LZXlQYXRoID0gIlNvZnR3
YXJlXFxBZG9iZVxcQWNyb2JhdCBSZWFkZXJcXCIgKyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmlu
ZyArICJcXEluc3RhbGxQYXRoIjsKLSAgICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xP
Q0FMX01BQ0hJTkUsIGFjcm9iYXRQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIDAsICZ0eXBlLCAoTFBCWVRFKWFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFjcm9i
YXRJbnN0YWxsUGF0aFNpemUpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VT
UykgewotICAgICAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5QYXRoID0gU3RyaW5nKGFjcm9i
YXRJbnN0YWxsUGF0aFN0ciwgYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikg
LSAxKSArICJcXGJyb3dzZXIiOwotICAgICAgICAgICAgcGF0aHMuYXBwZW5kKGFjcm9iYXRQbHVn
aW5QYXRoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZ0Nsb3NlS2V5KGtleSk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgU3RyaW5nIHNhZmFyaVBsdWdpbnNQYXRoKCkKLXsKLSAgICBXQ0hBUiBt
b2R1bGVGaWxlTmFtZVN0cltfTUFYX1BBVEhdOwotICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc1Bh
dGg7Ci0gICAgc3RhdGljIGJvb2wgY2FjaGVkUGx1Z2luUGF0aCA9IGZhbHNlOwotCi0gICAgaWYg
KCFjYWNoZWRQbHVnaW5QYXRoKSB7Ci0gICAgICAgIGNhY2hlZFBsdWdpblBhdGggPSB0cnVlOwot
Ci0gICAgICAgIGludCBtb2R1bGVGaWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1lKDAsIG1v
ZHVsZUZpbGVOYW1lU3RyLCBfTUFYX1BBVEgpOwotCi0gICAgICAgIGlmICghbW9kdWxlRmlsZU5h
bWVMZW4gfHwgbW9kdWxlRmlsZU5hbWVMZW4gPT0gX01BWF9QQVRIKQotICAgICAgICAgICAgZ290
byBleGl0OwotCi0gICAgICAgIGlmICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZpbGVOYW1l
U3RyKSkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBwbHVnaW5zUGF0aCA9IFN0
cmluZyhtb2R1bGVGaWxlTmFtZVN0cikgKyAiXFxQbHVnaW5zIjsKLSAgICB9Ci1leGl0OgotICAg
IHJldHVybiBwbHVnaW5zUGF0aDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZE1hY3JvbWVk
aWFQbHVnaW5QYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgV0NIQVIgc3lzdGVt
RGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKLQotICAgIGlmIChHZXRTeXN0ZW1EaXJlY3Rvcnkoc3lz
dGVtRGlyZWN0b3J5U3RyLCBfY291bnRvZihzeXN0ZW1EaXJlY3RvcnlTdHIpKSA9PSAwKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBXQ0hBUiBtYWNyb21lZGlhRGlyZWN0b3J5U3RyW01BWF9QQVRI
XTsKLQotICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVj
dG9yeVN0ciwgVEVYVCgibWFjcm9tZWRcXEZsYXNoIikpOwotICAgIHBhdGhzLmFwcGVuZChtYWNy
b21lZGlhRGlyZWN0b3J5U3RyKTsKLQotICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3Rv
cnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0ciwgVEVYVCgibWFjcm9tZWRcXFNob2Nrd2F2ZSAxMCIp
KTsKLSAgICBwYXRocy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7Ci19Ci0KLVZlY3Rv
cjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQotewotICAgIFZl
Y3RvcjxTdHJpbmc+IHBhdGhzOwotICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1Bh
dGgoKTsKLQotICAgIGlmICghb3VyUGF0aC5pc051bGwoKSkKLSAgICAgICAgcGF0aHMuYXBwZW5k
KG91clBhdGgpOwotICAgIGFkZFF1aWNrVGltZVBsdWdpblBhdGgocGF0aHMpOwotICAgIGFkZEFk
b2JlQWNyb2JhdFBsdWdpblBhdGgocGF0aHMpOwotICAgIGFkZE1vemlsbGFQbHVnaW5QYXRocyhw
YXRocyk7Ci0gICAgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luUGF0aChwYXRocyk7Ci0gICAg
YWRkTWFjcm9tZWRpYVBsdWdpblBhdGhzKHBhdGhzKTsKLQotICAgIHJldHVybiBwYXRoczsKLX0K
LQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKLXsKLSAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBl
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5
IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICByZXR1cm4g
KHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKTsK
LX0KLQogUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OnBsdWdpbkZvck1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKLSAg
ICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7CiAgICAgUGx1Z2luUGFja2Fn
ZSogcGx1Z2luID0gMDsKICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1
Z2lucy5lbmQoKTsKIAogICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKCgqaXQpLT5t
aW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CiAgICAgICAgICAgICBwbHVnaW4g
PSAoKml0KS5nZXQoKTsKLSAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBvd24g
cGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgIGlmIChwbHVnaW4tPnBhcmVudERpcmVjdG9y
eSgpID09IG91clBhdGgpCisgICAgICAgICAgICBpZiAoaXNQcmVmZXJyZWRQbHVnaW5QYXRoKHBs
dWdpbi0+cGFyZW50RGlyZWN0b3J5KCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNDczLDcgKzE1NCw2IEBAIFN0cmluZyBQbHVnaW5EYXRhYmFzZTo6TUlN
RVR5cGVGb3JFeHRlbnMKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgU3RyaW5nIG91clBh
dGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwogICAgIFN0cmluZyBtaW1lVHlwZTsKICAgICBQbHVn
aW5QYWNrYWdlKiBwbHVnaW4gPSAwOwogCkBAIC00ODYsOCArMTY2LDcgQEAgU3RyaW5nIFBsdWdp
bkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVucwogICAgICAgICAgICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CiAgICAgICAgICAgICAgICAg
ICAgIG1pbWVUeXBlID0gbWltZV9pdC0+Zmlyc3Q7CiAgICAgICAgICAgICAgICAgICAgIHBsdWdp
biA9ICgqaXQpLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBp
biBvdXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwbHVn
aW4tPnBhcmVudERpcmVjdG9yeSgpID09IG91clBhdGgpCisgICAgICAgICAgICAgICAgICAgIGlm
IChpc1ByZWZlcnJlZFBsdWdpblBhdGgocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CkBAIC00OTgsNyArMTc3LDcgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZv
ckV4dGVucwogfQogCiBQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6ZmluZFBsdWdpbihj
b25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCi17ICAgCit7CiAgICAgUGx1Z2luUGFj
a2FnZSogcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOwogICAgIFN0cmluZyBm
aWxlbmFtZSA9IHVybC5zdHJpbmcoKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFz
ZS5oCShyZXZpc2lvbiAzMDQ5MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMjAgKzI3LDE5IEBACiAjaWZuZGVmIFBsdWdpbkRh
dGFiYXNlX0gKICNkZWZpbmUgUGx1Z2luRGF0YWJhc2VfSAogCi0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgi
CiAKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRnJhbWU7
CiAgICAgY2xhc3MgSW50U2l6ZTsKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIFBsdWdpblBh
Y2thZ2U7Ci0gICAgY2xhc3MgUGx1Z2luVmlldzsKIAogICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQ
dHI8UGx1Z2luUGFja2FnZT4sIFBsdWdpblBhY2thZ2VIYXNoPiBQbHVnaW5TZXQ7CiAgIApAQCAt
NTEsOCArNTEsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBWZWN0b3I8UGx1Z2lu
UGFja2FnZSo+IHBsdWdpbnMoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0
ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKICAgICAgICAgdm9pZCBhZGRFeHRyYVBsdWdp
blBhdGgoY29uc3QgU3RyaW5nJik7CisgICAgICAgIGJvb2wgaXNQcmVmZXJyZWRQbHVnaW5QYXRo
KGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3Q7CiAKICAgICAgICAgUGx1Z2luUGFja2FnZSogZmlu
ZFBsdWdpbihjb25zdCBLVVJMJiwgU3RyaW5nJiBtaW1lVHlwZSk7CisKICAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykg
eyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KICAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdpbnNJ
blBhdGhzKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJKHJldmlzaW9uIDMw
NDkwKQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTYgKzI2LDIxIEBACiAjaWZuZGVmIFBsdWdpblBhY2thZ2VfSAogI2RlZmluZSBQbHVn
aW5QYWNrYWdlX0gKIAotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5o
PgotCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVk
ZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
UGx1Z2luUXVpcmtTZXQuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVGlt
ZXIuaCIKICNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAorI2lmIFBMQVRGT1JNKFdJTikKK3R5cGVk
ZWYgc3RydWN0IHsgdW5zaWduZWQgbGVhc3RTaWc7IHVuc2lnbmVkIG1vc3RTaWc7IH0gUGxhdGZv
cm1Nb2R1bGVWZXJzaW9uOworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgUGxhdGZvcm1Nb2R1bGVW
ZXJzaW9uOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IE1JTUVUb0Rlc2NyaXB0aW9uc01hcDsKICAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7CkBAIC00
Myw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBQbHVnaW5QYWNrYWdl
IDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZT4gewogICAgIHB1YmxpYzoKICAgICAg
ICAgflBsdWdpblBhY2thZ2UoKTsKLSAgICAgICAgc3RhdGljIFBsdWdpblBhY2thZ2UqIGNyZWF0
ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVk
KTsKKyAgICAgICAgc3RhdGljIFBsdWdpblBhY2thZ2UqIGNyZWF0ZVBhY2thZ2UoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBQbGF0Zm9ybUZpbGVUaW1lJiBsYXN0TW9kaWZpZWQpOwogICAgICAg
ICAKICAgICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICAg
ICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQpA
QCAtNTMsNyArNTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IE1JTUVU
b0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9t
aW1lVG9EZXNjcmlwdGlvbnM7IH0KICAgICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYg
bWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQog
Ci0gICAgICAgIHVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdDsKKyAgICAgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0OwogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQ
bHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKTsKIAogICAgICAgICBib29s
IGxvYWQoKTsKQEAgLTYxLDMxICs2NiwzMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CiAKICAgICAgICAgY29uc3QgTlBQbHVnaW5G
dW5jcyogcGx1Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQorICAg
ICAgICBpbnQgY29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYp
IGNvbnN0OworCisgICAgICAgIFBsdWdpblF1aXJrU2V0IG1fcXVpcmtzOwogCi0gICAgICAgIGlu
dCBjb21wYXJlRmlsZVZlcnNpb24odW5zaWduZWQgY29tcGFyZVZlcnNpb25NUywgdW5zaWduZWQg
Y29tcGFyZVZlcnNpb25MUykgY29uc3Q7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luUGFj
a2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpOwor
ICAgICAgICBQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgUGxhdGZvcm1G
aWxlVGltZSYgbGFzdE1vZGlmaWVkKTsKICAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKLSAgICAg
ICAgdm9pZCBzdG9yZUZpbGVWZXJzaW9uKExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEpOwogICAgICAg
ICBib29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKTsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWly
a3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAKICAgICAgICAgYm9vbCBtX2lzTG9hZGVkOwog
ICAgICAgICBpbnQgbV9sb2FkQ291bnQ7CiAKLSAgICAgICAgRFdPUkQgbV9maWxlVmVyc2lvbk1T
OwotICAgICAgICBEV09SRCBtX2ZpbGVWZXJzaW9uTFM7Ci0KICAgICAgICAgU3RyaW5nIG1fZGVz
Y3JpcHRpb247CiAgICAgICAgIFN0cmluZyBtX3BhdGg7CiAgICAgICAgIFN0cmluZyBtX2ZpbGVO
YW1lOwogICAgICAgICBTdHJpbmcgbV9uYW1lOwogICAgICAgICBTdHJpbmcgbV9wYXJlbnREaXJl
Y3Rvcnk7CiAKKyAgICAgICAgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIG1fbW9kdWxlVmVyc2lvbjsK
KwogICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXAgbV9taW1lVG9EZXNjcmlwdGlvbnM7CiAg
ICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXAgbV9taW1lVG9FeHRlbnNpb25zOwogCi0gICAgICAg
IEhNT0RVTEUgbV9tb2R1bGU7Ci0gICAgICAgIEZJTEVUSU1FIG1fbGFzdE1vZGlmaWVkOworICAg
ICAgICBQbGF0Zm9ybU1vZHVsZSBtX21vZHVsZTsKKyAgICAgICAgUGxhdGZvcm1GaWxlVGltZSBt
X2xhc3RNb2RpZmllZDsKIAogICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQX1NodXRk
b3duOwogICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5WaWV3LmgJKHJldmlzaW9uIDMwNDkwKQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlBsdWdpblN0cmVhbS5oIgotI2lu
Y2x1ZGUgIlBsdWdpblF1aXJrU2V0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKQEAgLTE3MSw3ICsxNzAsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luPiBtX21lc3NhZ2VUaHJvdHRsZXI7CiAKICAgICAgICAgdm9pZCB1cGRhdGVXaW5kb3co
KSBjb25zdDsKLSAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSk7CiAgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50
KEtleWJvYXJkRXZlbnQqKTsKQEAgLTE5NCw3ICsxOTIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBtX3N0cmVhbXM7CiAgICAg
ICAgIFZlY3RvcjxQbHVnaW5SZXF1ZXN0Kj4gbV9yZXF1ZXN0czsKIAotICAgICAgICBQbHVnaW5R
dWlya1NldCBtX3F1aXJrczsKICAgICAgICAgYm9vbCBtX2lzV2luZG93ZWQ7CiAgICAgICAgIGJv
b2wgbV9pc1RyYW5zcGFyZW50OwogICAgICAgICBib29sIG1faXNWaXNpYmxlOwpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAJKHJldmlzaW9uIDMwNDkwKQor
KysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDk5ICsyNiwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBs
dWdpbkRhdGFiYXNlLmgiCiAKLSNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUg
PHdpbmRvd3MuaD4KICNpbmNsdWRlIDxzaGx3YXBpLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUGx1Z2luRGF0YWJhc2UqIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCkKLXsK
LSAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIHBsdWdpbnMgPSAwOwotICAgIAotICAgIGlmICgh
cGx1Z2lucykgewotICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlOwotICAgICAg
ICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpblBh
dGhzKCkpOwotICAgICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHBsdWdpbnM7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OmFkZEV4dHJhUGx1Z2luUGF0aChj
b25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgbV9wbHVnaW5QYXRocy5hcHBlbmQocGF0aCk7Ci0g
ICAgcmVmcmVzaCgpOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKLXsgICAK
LSAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsKLQotICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9
IGZhbHNlOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IHNldCBvZiBwbHVnaW5zCi0gICAgbmV3UGx1
Z2lucyA9IGdldFBsdWdpbnNJblBhdGhzKCk7Ci0KLSAgICBpZiAoIW1fcGx1Z2lucy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7Ci0KLSAgICAgICAg
UGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZCA9IG1fcGx1Z2luczsKLQotICAgICAgICBQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7Ci0gICAgICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICAgICAgcGx1Z2luc1RvVW5sb2FkLnJlbW92ZSgqaXQpOwotCi0g
ICAgICAgIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIG5ld1BsdWdpbnMucmVtb3ZlKCppdCk7Ci0KLSAgICAgICAgLy8gVW5sb2FkIHBs
dWdpbnMKLSAgICAgICAgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVuZCgpOwotICAgICAgICBmb3Ig
KFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgbV9wbHVnaW5zLnJlbW92ZSgqaXQpOwotCi0g
ICAgICAgIC8vIEFkZCBuZXcgcGx1Z2lucwotICAgICAgICBlbmQgPSBuZXdQbHVnaW5zLmVuZCgp
OwotICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0
KTsKLQotICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5
KCkgfHwgIW5ld1BsdWdpbnMuaXNFbXB0eSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcGx1
Z2lucyA9IG5ld1BsdWdpbnM7Ci0gICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbmV3UGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAg
ICBtX3BsdWdpbnMuYWRkKCppdCk7Ci0KLSAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFuZXdQ
bHVnaW5zLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICAvLyBSZWdpc3RlciBwbHVnLWluIE1JTUUg
dHlwZXMKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQo
KTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIEdldCBNSU1FIHR5cGVzCi0gICAg
ICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQp
LT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKLSAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlw
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlv
bnMoKS5iZWdpbigpOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpIHsKLSAgICAgICAgICAg
IG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5maXJzdCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdlZDsKLX0KLQotVmVjdG9yPFBsdWdpblBh
Y2thZ2UqPiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucygpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPFBs
dWdpblBhY2thZ2UqPiByZXN1bHQ7Ci0KLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXN1bHQu
YXBwZW5kKCgqaXQpLmdldCgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBp
bmxpbmUgdm9pZCBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVkgcm9vdEtleSwgUGx1Z2luU2V0
JiBwbHVnaW5zKQogewogICAgIEhLRVkga2V5OwpAQCAtNDM1LDkwICszNTAsMTQgQEAgVmVjdG9y
PFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbAogICAgIHJldHVybiBwYXRoczsKIH0K
IAotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKLXsKLSAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBl
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5
IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICByZXR1cm4g
KHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKTsK
LX0KLQotUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OnBsdWdpbkZvck1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCitib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBs
dWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAogewotICAgIGlmIChtaW1lVHlwZS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5nIGtleSA9IG1pbWVUeXBl
Lmxvd2VyKCk7CiAgICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwotICAg
IFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IDA7Ci0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0KLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IGlmICgoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkgewotICAgICAg
ICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAgICAgICAvLyBwcmVmZXIgcGx1Z2lu
cyBpbiBvdXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5Ci0gICAgICAgICAgICBpZiAocGx1Z2luLT5w
YXJlbnREaXJlY3RvcnkoKSA9PSBvdXJQYXRoKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpbjsKLX0KLQotU3RyaW5nIFBsdWdpbkRh
dGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29u
c3QKLXsKLSAgICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5k
KCk7Ci0gICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwotICAgIFN0cmlu
ZyBtaW1lVHlwZTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAwOworICAgIGlmICghb3Vy
UGF0aC5pc051bGwoKSAmJiAhcGF0aC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG91clBhdGgg
PT0gcGF0aDsKIAotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1
Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgTUlNRVRvRXh0ZW5zaW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygp
LmVuZCgpOwotCi0gICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAh
PSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKLSAgICAgICAgICAgICAg
ICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByZWZl
ciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtaW1lVHlwZTsKLX0KLQotUGx1Z2luUGFja2Fn
ZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1p
bWVUeXBlKQoteyAgIAotICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVU
eXBlKG1pbWVUeXBlKTsKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwuc3RyaW5nKCk7Ci0gICAg
Ci0gICAgaWYgKCFwbHVnaW4pIHsKLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLmxhc3RQ
YXRoQ29tcG9uZW50KCk7Ci0gICAgICAgIGlmICghZmlsZW5hbWUuZW5kc1dpdGgoIi8iKSkgewot
ICAgICAgICAgICAgaW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7
Ci0gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uUG9zICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIGV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhleHRlbnNpb25Qb3MgKyAxKTsK
LQotICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5z
aW9uKTsKLSAgICAgICAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlw
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogaWYg
bm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSBXaW5kb3dzIGZvciB0aGUgbWltZSB0eXBl
IAotICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbi4KLQotICAgIHJldHVybiBw
bHVnaW47CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93
aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHJldmlzaW9uIDMwNDkwKQorKysgV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNDQgKzgx
LDMyIEBAIFBsdWdpblBhY2thZ2U6OlBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW4KICAgICAsIG1f
aXNMb2FkZWQoZmFsc2UpCiAgICAgLCBtX2xvYWRDb3VudCgwKQogICAgICwgbV9mcmVlTGlicmFy
eVRpbWVyKHRoaXMsICZQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQpCi0gICAg
LCBtX2ZpbGVWZXJzaW9uTFMoMCkKLSAgICAsIG1fZmlsZVZlcnNpb25NUygwKQorICAgICwgbV9t
b2R1bGVWZXJzaW9uKDApCiB7CiAgICAgbV9maWxlTmFtZSA9IFN0cmluZyhQYXRoRmluZEZpbGVO
YW1lKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSk7CiAgICAgbV9wYXJl
bnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxl
bmd0aCgpIC0gMSk7CiB9CiAKLWludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24o
dW5zaWduZWQgY29tcGFyZVZlcnNpb25NUywgdW5zaWduZWQgY29tcGFyZVZlcnNpb25MUykgY29u
c3QKK2ludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24oY29uc3QgUGxhdGZvcm1N
b2R1bGVWZXJzaW9uJiBjb21wYXJlVmVyc2lvbikKIHsKICAgICAvLyByZXR1cm4gLTEsIDAsIG9y
IDEgaWYgcGx1Zy1pbiB2ZXJzaW9uIGlzIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIg
dGhhbgogICAgIC8vIHRoZSBwYXNzZWQgdmVyc2lvbgotICAgIGlmIChtX2ZpbGVWZXJzaW9uTVMg
IT0gY29tcGFyZVZlcnNpb25NUykKLSAgICAgICAgcmV0dXJuIG1fZmlsZVZlcnNpb25NUyA+IGNv
bXBhcmVWZXJzaW9uTVMgPyAxIDogLTE7Ci0gICAgaWYgKG1fZmlsZVZlcnNpb25MUyAhPSBjb21w
YXJlVmVyc2lvbkxTKQotICAgICAgICByZXR1cm4gbV9maWxlVmVyc2lvbkxTID4gY29tcGFyZVZl
cnNpb25MUyA/IDEgOiAtMTsKKyAgICBpZiAobV9tb2R1bGVWZXJzaW9uLm1vc3RTaWcgIT0gY29t
cGFyZVZlcnNpb24ubW9zdFNpZykKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbi5tb3N0
U2lnID4gY29tcGFyZVZlcnNpb24ubW9zdFNpZyA/IDEgOiAtMTsKKyAgICBpZiAobV9tb2R1bGVW
ZXJzaW9uLmxlYXN0U2lnICE9IGNvbXBhcmVWZXJzaW9uLmxlYXN0U2lnKQorICAgICAgICByZXR1
cm4gbV9tb2R1bGVWZXJzaW9uLmxlYXN0U2lnID4gY29tcGFyZVZlcnNpb24ubGVhc3RTaWcgPyAx
IDogLTE7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUGx1Z2luUGFja2FnZTo6c3RvcmVGaWxl
VmVyc2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKQotewotICAgIExQVk9JRCBpbmZvOwotICAg
IFVJTlQgaW5mb1NpemU7Ci0gICAgaWYgKCFWZXJRdWVyeVZhbHVlKHZlcnNpb25JbmZvRGF0YSwg
VEVYVCgiXFwiKSwgJmluZm8sICZpbmZvU2l6ZSkgfHwgaW5mb1NpemUgPCBzaXplb2YoVlNfRklY
RURGSUxFSU5GTykpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2ZpbGVWZXJzaW9uTFMgPSBzdGF0
aWNfY2FzdDxWU19GSVhFREZJTEVJTkZPKj4oaW5mbyktPmR3RmlsZVZlcnNpb25MUzsKLSAgICBt
X2ZpbGVWZXJzaW9uTVMgPSBzdGF0aWNfY2FzdDxWU19GSVhFREZJTEVJTkZPKj4oaW5mbyktPmR3
RmlsZVZlcnNpb25NUzsKLX0KLQogYm9vbCBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNrbGlz
dGVkKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2lsdmVybGlnaHRQbHVnaW5NaW5S
ZXF1aXJlZFZlcnNpb25NUyA9IDB4MDAwMTAwMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFMgPSAweDUxQkUwMDAwOworICAg
IHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gc2xQbHVnaW5NaW5SZXF1aXJlZCA9
IHsgMHg1MUJFMDAwMCwgMHgwMDAxMDAwMCB9OwogCiAgICAgaWYgKG5hbWUoKSA9PSAiU2lsdmVy
bGlnaHQgUGx1Zy1JbiIpIHsKICAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly81NTU3
Mzc5PiBDcmFzaCBpbiBTaWx2ZXJsaWdodCB3aGVuIG9wZW5pbmcgbWljcm9zb2Z0LmNvbS4KICAg
ICAgICAgLy8gdGhlIGxhdGVzdCAxLjAgdmVyc2lvbiBvZiBTaWx2ZXJsaWdodCBkb2VzIG5vdCBy
ZXByb2R1Y2UgdGhpcyBjcmFzaCwgc28gYWxsb3cgaXQKICAgICAgICAgLy8gYW5kIGFueSBuZXdl
ciB2ZXJzaW9ucwotICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKHNpbHZlcmxpZ2h0UGx1
Z2luTWluUmVxdWlyZWRWZXJzaW9uTVMsIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJz
aW9uTFMpIDwgMCkKKyAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihzbFBsdWdpbk1pblJl
cXVpcmVkKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGZp
bGVOYW1lKCkgPT0gIm5wbW96YXguZGxsIikKICAgICAgICAgLy8gQnVnIDE1MjE3OiBNb3ppbGxh
IEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyB4cGNvbV9jb3JlLmRsbApA
QCAtMTI3LDYgKzExNSw3MiBAQCBib29sIFBsdWdpblBhY2thZ2U6OmlzUGx1Z2luQmxhY2tsaXN0
ZWQoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFBsdWdpblZpZXc6OmRldGVybWluZVF1
aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9y
bU1vZHVsZVZlcnNpb24gbGFzdEtub3duVW5sb2FkYWJsZVJlYWxQbGF5ZXJWZXJzaW9uID0geyAw
eDAwMEIwQjI0LCAweDAwMDYwMDAwIH07CisKKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0
aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9u
bHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNl
ciBhZ2VudAorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2Vy
QWdlbnQpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRh
dGUpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNP
bmVNZXNzYWdlcyk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90
aWZ5QnVnKTsKKyAgICB9CisKKyAgICBpZiAobmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAm
JiBuYW1lKCkuY29udGFpbnMoIldpbmRvd3MgTWVkaWEiKSkgeworICAgICAgICAvLyBUaGUgV01Q
IHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5k
IG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisgICAgICAgIC8vIGNhbGwgU2V0V2luZG93IHdo
ZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgICAgICBtX3F1aXJrcy5h
ZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7CisKKyAgICAgICAgLy8gV2lu
ZG93bGVzcyBtb2RlIGRvZXMgbm90IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28g
anVzdCByZW1vdmUgdGhhdCBwYXJhbWV0ZXIgCisgICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0
IHRvIHRoZSBwbHVnLWluLgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZW1vdmVX
aW5kb3dsZXNzVmlkZW9QYXJhbSk7CisKKyAgICAgICAgLy8gV01QIGhhcyBhIG1vZGFsIG1lc3Nh
Z2UgbG9vcCB0aGF0IGl0IGVudGVycyB3aGVuZXZlciB3ZSBjYWxsIGl0IG9yCisgICAgICAgIC8v
IGFzayBpdCB0byBwYWludC4gVGhpcyBtb2RhbCBsb29wIGNhbiBkZWxpdmVyIG1lc3NhZ2VzIHRv
IG90aGVyCisgICAgICAgIC8vIHdpbmRvd3MgaW4gV2ViS2l0IGF0IHRpbWVzIHdoZW4gdGhleSBh
cmUgbm90IGV4cGVjdGluZyB0aGVtIChmb3IKKyAgICAgICAgLy8gZXhhbXBsZSwgZGVsaXZlcmlu
ZyBhIFdNX1BBSU5UIG1lc3NhZ2UgZHVyaW5nIGEgbGF5b3V0KSwgYW5kIHRoZXNlCisgICAgICAg
IC8vIGNhbiBjYXVzZSBjcmFzaGVzLgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtI
YXNNb2RhbE1lc3NhZ2VMb29wKTsKKyAgICB9CisKKyAgICAvLyBWTEMgaGFuZ3Mgb24gTlBQX0Rl
c3Ryb3kgaWYgd2UgY2FsbCBOUFBfU2V0V2luZG93IHdpdGggYSBudWxsIHdpbmRvdyBoYW5kbGUK
KyAgICBpZiAobmFtZSgpID09ICJWTEMgTXVsdGltZWRpYSBQbHVnaW4iKQorICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSk7CisK
KyAgICAvLyBUaGUgRGl2WCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1Nl
dFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNhbGwg
U2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgIGlm
IChtaW1lVHlwZSA9PSAidmlkZW8vZGl2eCIpCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
d29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7IGlmIGEg
cGx1Zy1pbiBjcmVhdGVzIGFuCisgICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0byBhIGZ1
bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRoYXQgTlBP
YmplY3QgYmVsb25ncyB0by4KKyAgICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQgdGhlIG9i
amVjdCBzaG91bGQgYmUgaW52YWxpZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5jZSBnb2Vz
IGF3YXkuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KKyAgICBpZiAobWlt
ZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQiKQorICAgICAgICBtX3F1aXJrcy5h
ZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKKworICAgIGlmIChNSU1FVHlwZVJlZ2lz
dHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShtaW1lVHlwZSkpIHsKKyAgICAgICAgLy8gQmVjYXVz
ZSBhIHNpbmdsZSBwcm9jZXNzIGNhbm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQgd2UgY2Fu
bm90IHJlbGlhYmx5IHVubG9hZCBhCisgICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5vdCB1bmxv
YWQgdGhlIEphdmEgcGx1Z2luLCBvciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIgb25seSBW
TQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKKwor
ICAgICAgICAvLyBTZXR0aW5nIHRoZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJlZ2lvbiBj
YXVzZXMgYmFkIHNjcm9sbGluZyByZXBhaW50IHByb2JsZW1zCisgICAgICAgIC8vIHdpdGggdGhl
IEphdmEgcGx1Zy1pbi4KKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENsaXBU
b1plcm9SZWN0V2hlblNjcm9sbGluZyk7CisgICAgfQorCisgICAgaWYgKG1pbWVUeXBlID09ICJh
dWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iKSB7CisgICAgICAgIC8vIFByZXZlbnQgdGhlIFJl
YWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHksIGNhdXNp
bmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93LgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVp
cmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KTsKKworICAgICAgICAv
LyBVbmxvYWRpbmcgUmVhbFBsYXllciB2ZXJzaW9ucyBuZXdlciB0aGFuIDEwLjUgY2FuIGNhdXNl
IGEgaGFuZzsgc2VlIHJkYXI6Ly81NjY5MzE3LgorICAgICAgICAvLyBGSVhNRTogUmVzdW1lIHVu
bG9hZGluZyB3aGVuIHRoaXMgYnVnIGluIHRoZSBSZWFsUGxheWVyIFBsdWctSW4gaXMgZml4ZWQg
KHJkYXI6Ly81NzEzMTQ3KQorICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKGxhc3RLbm93
blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbikgPiAwKQorICAgICAgICAgICAgbV9xdWlya3Mu
YWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7CisgICAgfQorfQorCiBib29sIFBsdWdp
blBhY2thZ2U6OmZldGNoSW5mbygpCiB7CiAgICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJv
SGFuZGxlOwpAQCAtMTM5LDEyICsxOTMsMjMgQEAgYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaElu
Zm8oKQogICAgIGlmICghR2V0RmlsZVZlcnNpb25JbmZvVyhtX3BhdGguY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKSwgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJzaW9uSW5mb0RhdGEuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBtX25hbWUgPSBnZXRWZXJzaW9uSW5m
byh2ZXJzaW9uSW5mb0RhdGEsICJQcm9kdWN0TmFtZSIpOworICAgIG1fZGVzY3JpcHRpb24gPSBn
ZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEsICJGaWxlRGVzY3JpcHRpb24iKTsKKworICAg
IGlmIChtX25hbWUuaXNOdWxsKCkgfHwgbV9kZXNjcmlwdGlvbi5pc051bGwoKSkgeworICAgICAg
ICBmYXN0RnJlZSh2ZXJzaW9uSW5mb0RhdGEpOworCiAgICAgbV9uYW1lID0gZ2V0VmVyc2lvbklu
Zm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiUHJvZHVjdE5hbWUiKTsKICAgICBtX2Rlc2NyaXB0
aW9uID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZURlc2NyaXB0
aW9uIik7CiAgICAgaWYgKG1fbmFtZS5pc051bGwoKSB8fCBtX2Rlc2NyaXB0aW9uLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdG9yZUZpbGVWZXJzaW9uKHZlcnNpb25J
bmZvRGF0YS5nZXQoKSk7CisgICAgVlNfRklYRURGSUxFSU5GTyogaW5mbzsKKyAgICBVSU5UIGlu
Zm9TaXplOworICAgIGlmICghVmVyUXVlcnlWYWx1ZSh2ZXJzaW9uSW5mb0RhdGEsIFRFWFQoIlxc
IiksIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNpemVvZihWU19G
SVhFREZJTEVJTkZPKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fbW9kdWxlVmVyc2lv
bi5sZWFzdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKKyAgICBtX21kb3VsZVZlcnNpb24u
bW9zdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25NUzsKIAogICAgIGlmIChpc1BsdWdpbkJsYWNr
bGlzdGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3Myw2ICsyMzgsOSBAQCBib29s
IFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCiAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRl
c2NyaXB0aW9uLmxlZnQocG9zKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIERldGVybWluZSB0
aGUgcXVpcmtzIGZvciB0aGUgTUlNRSB0eXBlcyB0aGlzIHBsdWctaW4gc3VwcG9ydHMKKwlkZXRl
cm1pbmVRdWlya3ModHlwZSk7CisKICAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZCh0eXBl
LCBleHRlbnNpb25zVmVjdG9yKTsKICAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKHR5
cGUsIGRlc2NyaXB0aW9uKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdp
blZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmll
d1dpbi5jcHAJKHJldmlzaW9uIDMwNDkwKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5W
aWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAwLDEyICszMDAsMTIgQEAgUGx1Z2luVmll
dzo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzcwogICAgIH0KIAogICAgIGlmIChtZXNzYWdl
ID09IG1fbGFzdE1lc3NhZ2UgJiYKLSAgICAgICAgbV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVp
cmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KSAmJiAKKyAgICAgICAg
bV9wbHVnaW4tPm1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9y
U2FtZU1lc3NhZ2VSZWN1cnNpdmVseSkgJiYgCiAgICAgICAgIG1faXNDYWxsaW5nUGx1Z2luV25k
UHJvYykKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICBpZiAobWVzc2FnZSA9PSBXTV9VU0VSICsg
MSAmJgotICAgICAgICBtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya1Rocm90dGxlV01Vc2Vy
UGx1c09uZU1lc3NhZ2VzKSkgeworICAgICAgICBtX3BsdWdpbi0+bV9xdWlya3MuY29udGFpbnMo
UGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcykpIHsKICAgICAgICAgaWYg
KCFtX21lc3NhZ2VUaHJvdHRsZXIpCiAgICAgICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZXIuc2V0
KG5ldyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKHRoaXMpKTsKIApAQCAtMzU5LDcgKzM1OSw3
IEBAIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlV2luZG93KCkgY29uc3QKICAgICAgICAgLy8gVG8g
cHJldmVudCBmbGFzaGVzIHdoaWxlIHNjcm9sbGluZywgd2UgZGlzYWJsZSBkcmF3aW5nIGR1cmlu
ZyB0aGUgd2luZG93CiAgICAgICAgIC8vIHVwZGF0ZSBwcm9jZXNzIGJ5IGNsaXBwaW5nIHRoZSB3
aW5kb3cgdG8gdGhlIHplcm8gcmVjdC4KIAotICAgICAgICBib29sIGNsaXBUb1plcm9SZWN0ID0g
IW1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9s
bGluZyk7CisgICAgICAgIGJvb2wgY2xpcFRvWmVyb1JlY3QgPSAhbV9wbHVnaW4tPm1fcXVpcmtz
LmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyk7CiAK
ICAgICAgICAgaWYgKGNsaXBUb1plcm9SZWN0KSB7CiAgICAgICAgICAgICByZ24gPSA6OkNyZWF0
ZVJlY3RSZ24oMCwgMCwgMCwgMCk7CkBAIC03ODUsNyArNzg1LDcgQEAgdm9pZCBQbHVnaW5WaWV3
OjpzdG9wKCkKIAogICAgIC8vIENsZWFyIHRoZSB3aW5kb3cKICAgICBtX25wV2luZG93LndpbmRv
dyA9IDA7Ci0gICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cgJiYgIW1f
cXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ry
b3kpKSB7CisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cgJiYgIW1f
cGx1Z2luLT5tX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0RvbnRTZXROdWxsV2luZG93SGFu
ZGxlT25EZXN0cm95KSkgewogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAg
ICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2lu
ZG93KTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC04NjgsNyArODY4LDcg
QEAgdm9pZCBQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZQogICAgICAgICAvLyBp
ZiB0aGlzIGlzIG5vdCBhIHRhcmdldGVkIHJlcXVlc3QsIGNyZWF0ZSBhIHN0cmVhbSBmb3IgaXQu
IG90aGVyd2lzZSwKICAgICAgICAgLy8ganVzdCBwYXNzIGl0IG9mZiB0byB0aGUgbG9hZGVyCiAg
ICAgICAgIGlmICh0YXJnZXRGcmFtZU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBQbHVn
aW5TdHJlYW0qIHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgbV9wYXJlbnRGcmFtZSwg
cmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5z
ZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdp
bkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcXVpcmtzKTsKKyAgICAgICAgICAgIFBsdWdpblN0cmVh
bSogc3RyZWFtID0gbmV3IFBsdWdpblN0cmVhbSh0aGlzLCBtX3BhcmVudEZyYW1lLCByZXF1ZXN0
LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QtPnNlbmROb3Rp
ZmljYXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpLCBwbHVnaW4oKS0+cGx1Z2luRnVuY3Mo
KSwgaW5zdGFuY2UoKSwgbV9wbHVnaW4tPm1fcXVpcmtzKTsKICAgICAgICAgICAgIG1fc3RyZWFt
cy5hZGQoc3RyZWFtKTsKICAgICAgICAgICAgIHN0cmVhbS0+c3RhcnQoKTsKICAgICAgICAgfSBl
bHNlIHsKQEAgLTkwMCw3ICs5MDAsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0
KFBsdWdpblJlCiAgICAgICAgIGlmIChnZXRTdHJpbmcocGFyZW50RnJhbWUtPnNjcmlwdFByb3h5
KCksIHJlc3VsdCwgcmVzdWx0U3RyaW5nKSkKICAgICAgICAgICAgIGNzdHIgPSByZXN1bHRTdHJp
bmcudXRmOCgpOwogCi0gICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHN0cmVhbSA9IG5ldyBQ
bHVnaW5TdHJlYW0odGhpcywgbV9wYXJlbnRGcmFtZSwgcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVz
dCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCksIHJlcXVl
c3QtPm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1f
cXVpcmtzKTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gc3RyZWFtID0gbmV3IFBsdWdp
blN0cmVhbSh0aGlzLCBtX3BhcmVudEZyYW1lLCByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCku
cmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSwgcmVxdWVzdC0+
bm90aWZ5RGF0YSgpLCBwbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSwgaW5zdGFuY2UoKSwgbV9wbHVn
aW4tPm1fcXVpcmtzKTsKICAgICAgICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOwogICAgICAgICBz
dHJlYW0tPnNlbmRKYXZhU2NyaXB0U3RyZWFtKHJlcXVlc3RVUkwsIGNzdHIpOwogICAgIH0KQEAg
LTEyNjksNyArMTI2OSw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6ZGVzdHJveVN0cmVhbShOUFN0
cmUKIAogY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkKIHsKLSAgICBpZiAobV9x
dWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpKQorICAgIGlm
IChtX3BsdWdpbi0+bV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2Vy
QWdlbnQpKQogICAgICAgICByZXR1cm4gTW96aWxsYVVzZXJBZ2VudDsKIAogICAgIGlmIChtX3Vz
ZXJBZ2VudC5pc051bGwoKSkKQEAgLTEzNjUsNyArMTM2NSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6
aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiAKICAgICAgICAgUkVDVCBpbnZhbGlkUmVjdChyKTsKICAg
ICAgICAgSW52YWxpZGF0ZVJlY3QobV93aW5kb3csICZpbnZhbGlkUmVjdCwgRkFMU0UpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya1Rocm90
dGxlSW52YWxpZGF0ZSkpIHsKKyAgICAgICAgaWYgKG1fcGx1Z2luLT5tX3F1aXJrcy5jb250YWlu
cyhQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSkpIHsKICAgICAgICAgICAgIG1faW52YWxp
ZFJlY3RzLmFwcGVuZChyKTsKICAgICAgICAgICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNB
Y3RpdmUoKSkKICAgICAgICAgICAgICAgICBtX2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3Qo
MC4wMDEpOwpAQCAtMTQ1NSw3ICsxNDU1LDcgQEAgUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQog
CiAgICAgbV9wYXJlbnRGcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7
CiAKLSAgICBpZiAobV9wbHVnaW4gJiYgIW1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9u
dFVubG9hZFBsdWdpbikpCisgICAgaWYgKG1fcGx1Z2luICYmICFtX3BsdWdpbi0+bV9xdWlya3Mu
Y29udGFpbnMoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKSkKICAgICAgICAgbV9wbHVnaW4t
PnVubG9hZCgpOwogfQogCkBAIC0xNDY2LDczICsxNDY2LDYgQEAgdm9pZCBQbHVnaW5WaWV3Ojpk
aXNjb25uZWN0U3RyZWFtKFBsdWdpbgogICAgIG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKIH0K
IAotdm9pZCBQbHVnaW5WaWV3OjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbGFzdEtub3duVW5sb2FkYWJsZVJlYWxQ
bGF5ZXJWZXJzaW9uTFMgPSAweDAwMEIwQjI0OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBs
YXN0S25vd25VbmxvYWRhYmxlUmVhbFBsYXllclZlcnNpb25NUyA9IDB4MDAwNjAwMDA7Ci0KLSAg
ICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgewotICAg
ICAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5z
IGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAotICAgICAgICBtX3F1aXJrcy5hZGQo
UGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOwotICAgICAgICBtX3F1aXJrcy5hZGQo
UGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOwotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1
Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcyk7Ci0gICAgICAgIG1fcXVpcmtz
LmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnKTsKLSAgICB9Ci0KLSAgICBpZiAobV9w
bHVnaW4tPm5hbWUoKS5jb250YWlucygiTWljcm9zb2Z0IikgJiYgbV9wbHVnaW4tPm5hbWUoKS5j
b250YWlucygiV2luZG93cyBNZWRpYSIpKSB7Ci0gICAgICAgIC8vIFRoZSBXTVAgcGx1Z2luIHNl
dHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBk
YXRlcyBpdHMgc2l6ZSwgc28KLSAgICAgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1
Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKTsKLQotICAgICAgICAvLyBXaW5kb3dsZXNzIG1v
ZGUgZG9lcyBub3Qgd29yayBhdCBhbGwgd2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJlbW92
ZSB0aGF0IHBhcmFtZXRlciAKLSAgICAgICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhlIHBs
dWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NW
aWRlb1BhcmFtKTsKLQotICAgICAgICAvLyBXTVAgaGFzIGEgbW9kYWwgbWVzc2FnZSBsb29wIHRo
YXQgaXQgZW50ZXJzIHdoZW5ldmVyIHdlIGNhbGwgaXQgb3IKLSAgICAgICAgLy8gYXNrIGl0IHRv
IHBhaW50LiBUaGlzIG1vZGFsIGxvb3AgY2FuIGRlbGl2ZXIgbWVzc2FnZXMgdG8gb3RoZXIKLSAg
ICAgICAgLy8gd2luZG93cyBpbiBXZWJLaXQgYXQgdGltZXMgd2hlbiB0aGV5IGFyZSBub3QgZXhw
ZWN0aW5nIHRoZW0gKGZvcgotICAgICAgICAvLyBleGFtcGxlLCBkZWxpdmVyaW5nIGEgV01fUEFJ
TlQgbWVzc2FnZSBkdXJpbmcgYSBsYXlvdXQpLCBhbmQgdGhlc2UKLSAgICAgICAgLy8gY2FuIGNh
dXNlIGNyYXNoZXMuCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0hhc01vZGFsTWVz
c2FnZUxvb3ApOwotICAgIH0KLQotICAgIC8vIFZMQyBoYW5ncyBvbiBOUFBfRGVzdHJveSBpZiB3
ZSBjYWxsIE5QUF9TZXRXaW5kb3cgd2l0aCBhIG51bGwgd2luZG93IGhhbmRsZQotICAgIGlmICht
X3BsdWdpbi0+bmFtZSgpID09ICJWTEMgTXVsdGltZWRpYSBQbHVnaW4iKQotICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSk7Ci0K
LSAgICAvLyBUaGUgRGl2WCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1Nl
dFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbwotICAgIC8vIGNhbGwg
U2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQotICAgIGlm
IChtaW1lVHlwZSA9PSAidmlkZW8vZGl2eCIpCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
d29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7IGlmIGEg
cGx1Zy1pbiBjcmVhdGVzIGFuCi0gICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0byBhIGZ1
bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRoYXQgTlBP
YmplY3QgYmVsb25ncyB0by4KLSAgICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQgdGhlIG9i
amVjdCBzaG91bGQgYmUgaW52YWxpZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5jZSBnb2Vz
IGF3YXkuCi0gICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KLSAgICBpZiAobWlt
ZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQiKQotICAgICAgICBtX3F1aXJrcy5h
ZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKLQotICAgIGlmIChNSU1FVHlwZVJlZ2lz
dHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShtaW1lVHlwZSkpIHsKLSAgICAgICAgLy8gQmVjYXVz
ZSBhIHNpbmdsZSBwcm9jZXNzIGNhbm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQgd2UgY2Fu
bm90IHJlbGlhYmx5IHVubG9hZCBhCi0gICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5vdCB1bmxv
YWQgdGhlIEphdmEgcGx1Z2luLCBvciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIgb25seSBW
TQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKLQot
ICAgICAgICAvLyBTZXR0aW5nIHRoZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJlZ2lvbiBj
YXVzZXMgYmFkIHNjcm9sbGluZyByZXBhaW50IHByb2JsZW1zCi0gICAgICAgIC8vIHdpdGggdGhl
IEphdmEgcGx1Zy1pbi4KLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENsaXBU
b1plcm9SZWN0V2hlblNjcm9sbGluZyk7Ci0gICAgfQotCi0gICAgaWYgKG1pbWVUeXBlID09ICJh
dWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iKSB7Ci0gICAgICAgIC8vIFByZXZlbnQgdGhlIFJl
YWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHksIGNhdXNp
bmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93LgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVp
cmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KTsKLQotICAgICAgICAv
LyBVbmxvYWRpbmcgUmVhbFBsYXllciB2ZXJzaW9ucyBuZXdlciB0aGFuIDEwLjUgY2FuIGNhdXNl
IGEgaGFuZzsgc2VlIHJkYXI6Ly81NjY5MzE3LgotICAgICAgICAvLyBGSVhNRTogUmVzdW1lIHVu
bG9hZGluZyB3aGVuIHRoaXMgYnVnIGluIHRoZSBSZWFsUGxheWVyIFBsdWctSW4gaXMgZml4ZWQg
KHJkYXI6Ly81NzEzMTQ3KQotICAgICAgICBpZiAobV9wbHVnaW4tPmNvbXBhcmVGaWxlVmVyc2lv
bihsYXN0S25vd25VbmxvYWRhYmxlUmVhbFBsYXllclZlcnNpb25NUywgbGFzdEtub3duVW5sb2Fk
YWJsZVJlYWxQbGF5ZXJWZXJzaW9uTFMpID4gMCkKLSAgICAgICAgICAgIG1fcXVpcmtzLmFkZChQ
bHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOwotICAgIH0KLX0KLQogdm9pZCBQbHVnaW5WaWV3
OjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCiB7CiAgICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6
ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7CkBAIC0xNTQ0LDcgKzE0NzcsNyBAQCB2b2lkIFBs
dWdpblZpZXc6OnNldFBhcmFtZXRlcnMoY29uc3QgVmVjCiAgICAgbV9wYXJhbVZhbHVlcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGlm
IChtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFt
KSAmJiBlcXVhbElnbm9yaW5nQ2FzZShwYXJhbU5hbWVzW2ldLCAid2luZG93bGVzc3ZpZGVvIikp
CisgICAgICAgIGlmIChtX3BsdWdpbi0+bV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtSZW1v
dmVXaW5kb3dsZXNzVmlkZW9QYXJhbSkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UocGFyYW1OYW1lc1tp
XSwgIndpbmRvd2xlc3N2aWRlbyIpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
bV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbU5hbWVzW2ld
KTsKQEAgLTE1OTAsNyArMTUyMyw2IEBAIFBsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJhbWUqIHBh
cmVudEZyYW0KICAgICBtX2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7CiAKICAgICBtX21pbWVUeXBl
ID0gbWltZVR5cGUudXRmOCgpOwotICAgIGRldGVybWluZVF1aXJrcyhtaW1lVHlwZSk7CiAKICAg
ICBzZXRQYXJhbWV0ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKIApAQCAtMTY0NCw3ICsx
NTc2LDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojppbml0KCkKICAgICAgICAgbV9ucFdpbmRvdy53aW5k
b3cgPSAwOwogICAgIH0KIAotICAgIGlmICghbV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtE
ZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpCisgICAgaWYgKCFtX3BsdWdpbi0+bV9xdWlya3MuY29u
dGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpCiAgICAgICAgIHNldE5Q
V2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOwogCiAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHk7CkBAIC0xNjU1LDcgKzE1ODcsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zCiAgICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsK
ICAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKIAotICAgIG1fbWFudWFsU3RyZWFtID0gbmV3
IFBsdWdpblN0cmVhbSh0aGlzLCBtX3BhcmVudEZyYW1lLCBtX3BhcmVudEZyYW1lLT5sb2FkZXIo
KS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLCBmYWxzZSwgMCwgcGx1Z2luKCkt
PnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcXVpcmtzKTsKKyAgICBtX21hbnVhbFN0cmVh
bSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgbV9wYXJlbnRGcmFtZSwgbV9wYXJlbnRGcmFtZS0+
bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSwgZmFsc2UsIDAsIHBs
dWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3BsdWdpbi0+bV9xdWlya3MpOwog
ICAgIG1fbWFudWFsU3RyZWFtLT5zZXRMb2FkTWFudWFsbHkodHJ1ZSk7CiAKICAgICBtX21hbnVh
bFN0cmVhbS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKQEAgLTE2ODcsNyArMTYx
OSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUUKIAogdm9pZCBQ
bHVnaW5WaWV3OjpzZXRDYWxsaW5nUGx1Z2luKGJvb2wgYikgY29uc3QKIHsKLSAgICBpZiAoIW1f
cXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrSGFzTW9kYWxNZXNzYWdlTG9vcCkpCisgICAgaWYg
KCFtX3BsdWdpbi0+bV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtIYXNNb2RhbE1lc3NhZ2VM
b29wKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19348</attachid>
            <date>2008-02-25 07:45:02 -0800</date>
            <delta_ts>2008-02-25 12:39:28 -0800</delta_ts>
            <desc>Updated patch to resolve more Windows build issues</desc>
            <filename>webkit-shared-plugindatabase.patch</filename>
            <type>text/plain</type>
            <size>77750</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDU2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDgtMDItMjUgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBBZGQgUGx1Z2luSW5mb1N0b3JlLmNwcCBhbmQgbmV3IFBsdWdpbkRhdGFiYXNlLmNwcCB0
byBHVEsrIGFuZCBRdCBwb3J0cworICAgICAgICBSZW1vdmUgb2xkIFBsdWdJbkluZm9TdG9yZVF0
LmNwcCBhcyBpdCBpcyBvYnNvbGV0ZWQgYnkgc2hhcmVkIGNvZGUKKyAgICAgICAgQWRkIFBsdWdp
bkluZm9TdG9yZSwgUGx1Z2luRGF0YWJhc2UsIGFuZCBQbHVnaW5TdHJlYW0gZmlsZXMgdG8gV3gg
YnVpbGQKKyAgICAgICAgQWRkIG5ldyBQbHVnaW5EYXRhYmFzZS5jcHAgdG8gV2luZG93cyBidWls
ZAorICAgICAgICBBZGQgdGVtcG9yYXJ5IHN0dWJzIGZvciBuZXcgUGx1Z2luRGF0YWJhc2UgYW5k
IFBsdWdpblBhY2thZ2UKKyAgICAgICAgc2hhcmVkIGNsYXNzZXMgdG8gR1RLKywgUXQsIGFuZCBX
eCBwb3J0cworICAgICAgICBDb3B5IFBsdWdpbkRhdGFiYXNlV2luLmNwcCB0byBQbHVnaW5EYXRh
YmFzZS5jcHAgdG8gcHJlc2VydmUgaGlzdG9yeQorICAgICAgICBSZW1vdmUgc2hhcmVkIGNvZGUg
ZnJvbSBQbHVnaW5EYXRhYmFzZVdpbi5jcHAKKyAgICAgICAgUmVtb3ZlIFdpbmRvd3Mtc3BlY2lm
aWMgY29kZSBmcm9tIFBsdWdpbkRhdGFiYXNlLmNwcAorICAgICAgICBVc2UgUGxhdGZvcm1Nb2R1
bGUgYW5kIFBsYXRmb3JtRmlsZVRpbWUgaW5zdGVhZCBvZiBITU9EVUxFIGFuZCBGSUxFVElNRQor
ICAgICAgICBSZW1vdmUgZXh0cmFuZW91cyBQbHVnaW5QYWNrYWdlOjogZnJvbSBoYXNoKCkgY2xh
c3MgbWV0aG9kIHByb3RvdHlwZQorICAgICAgICBTdWJzdW1lIHN0b3JlRmlsZVZlcnNpb24gaW50
byBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8KKyAgICAgICAgQWRkIGNyb3NzLXBsYXRmb3JtIFBs
YXRmb3JtTW9kdWxlVmVyc2lvbiB0eXBlIGRlZmluaXRpb24KKyAgICAgICAgVXNlIFBsYXRmb3Jt
TW9kdWxlVmVyc2lvIHRvIHN0b3JlIHRoZSBtb2R1bGUgdmVyc2lvbgorICAgICAgICBSZW5hbWUg
bV9maWxlVmVyc2lvbltNTF1TIHRvIG1fbW9kdWxlVmVyc2lvbgorICAgICAgICBDaGFuZ2UgY29t
cGFyZUZpbGVWZXJzaW9uIHRvIHVzZSBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gYXMgdGhlIGFyZ3Vt
ZW50CisgICAgICAgIE1vdmUgUGx1Z2luVmlldzo6ZGV0ZXJtaW5lUXVpcmtzIGFuZCBtX3F1aXJr
cyB0byBQbHVnaW5QYWNrYWdlCisgICAgICAgIFVwZGF0ZWQgZGV0ZXJtaW5lUXVpcmtzIGZvciB0
aGUgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6CisgICAg
ICAgICogd2ViY29yZS1iYXNlLmJrbDoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVRdC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93
eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJh
c2UuY3BwOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaDoKKyAgICAgICAgKiBw
bHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy9QbHVn
aW5QYWNrYWdlLmg6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICogcGx1Z2lucy93aW4v
UGx1Z2luVmlld1dpbi5jcHA6CisKIDIwMDgtMDItMjUgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21h
bm5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2UuCkluZGV4OiBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKHJldmlzaW9uIDMwNTY0KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBj
b3B5KQpAQCAtODQ5LDYgKzg0OSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9UaW1lci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2Uu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZS5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3Bw
IFwKIAlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJp
bmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgXApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiAzMDU2NCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTc4OSw2ICs3ODksOCBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9UaW1lci5j
cHAgXAogICAgIHBsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAgICAgcGxhdGZvcm0v
V2lkZ2V0LmNwcCBcCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgXAorICAgIHBsdWdp
bnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCiAgICAgcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwK
ICAgICByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAgICAgcmVuZGVyaW5nL2JpZGku
Y3BwIFwKQEAgLTkzOSw3ICs5NDEsNiBAQCBxdC1wb3J0IHsKICAgICBwbGF0Zm9ybS9xdC9QbGF0
Zm9ybU1vdXNlRXZlbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtU2NyZWVuUXQu
Y3BwIFwKICAgICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcm9sbEJhclF0LmNwcCBcCi0gICAgcGxh
dGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9Qb3B1cE1l
bnVRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1FXZWJQb3B1cC5jcHAgXAogICAgIHBsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUXQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmts
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiAzMDU2
NCkKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC02MzMs
NiArNjMzLDEyIEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAg
ICAgICAgcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmNwcAogICAgIDwvc2V0PgogCisgICAgPHNldCBh
cHBlbmQ9IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1BMVUdJTlMiPgorICAgICAgICBwbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcAorICAgICAgICBwbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAK
KyAgICAgICAgcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisgICAgPC9zZXQ+CisKICAgICA8c2V0
IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfR0lGIj4KICAgICAgICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKICAgICAgICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcApJbmRleDogV2ViQ29yZS93ZWJj
b3JlLWJhc2UuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd2ViY29yZS1iYXNlLmJrbAkocmV2
aXNpb24gMzA1NjQpCisrKyBXZWJDb3JlL3dlYmNvcmUtYmFzZS5ia2wJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDYgKzQ4LDcgQEAgd3hXZWJDb3JlIHBvcnQgQmFrZWZpbGUgcHJvamVjdCBmaWxlLgog
ICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19QQUdFKQogICAgICAgICAkKFdFQkNPUkVfU09VUkNF
U19ISVNUT1JZKQogICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19QTEFURk9STSkKKyAgICAgICAg
JChXRUJDT1JFX1NPVVJDRVNfUExVR0lOUykKICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfUkVO
REVSSU5HKQogICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19TVE9SQUdFKQogICAgICAgICAkKFdF
QkNPUkVfU09VUkNFU19YQk0pCkBAIC05NSw2ICs5Niw3IEBAIHd4V2ViQ29yZSBwb3J0IEJha2Vm
aWxlIHByb2plY3QgZmlsZS4KICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKTwvaW5jbHVkZT4K
ICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0Q29yZTwvaW5jbHVkZT4KICAg
ICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVy
czwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0Q29yZS9i
aW5kaW5nczwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0
Q29yZS9ranM8L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoV0tfUk9PVCkvSmF2YVNjcmlw
dENvcmUvcGNyZTwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2Ny
aXB0Q29yZS93dGY8L2luY2x1ZGU+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHJldmlzaW9uIDMwNTY0KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNzk3Nyw2ICs3OTc3LDEwIEBACiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2lu
RGF0YWJhc2UuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIg0KIAkJCQk+DQogCQkJPC9GaWxl
Pg0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAko
cmV2aXNpb24gMzA1NjQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw4IEBACiAjaW5jbHVkZSAiR2xvYmFs
SGlzdG9yeS5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNl
LmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTU5LDEyICs2MCwxNCBAQCBWZWN0b3I8
Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9y
eUNvbnRhaW5zKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBs
dWdpbkluZm8qIFBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5k
ZXgodW5zaWduZWQpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1
Z2luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIDA7IH0KLVN0cmluZyBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmco
KTsgfQotYm9vbCBXZWJDb3JlOjpQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0K
LXZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9
Ci0KK1BsdWdpblNldCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBQbHVnaW5TZXQoKTsgfQorVmVjdG9yPFN0cmluZz4g
UGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpIHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0KK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVy
cmVkUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiBmYWxzZTsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKSB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgp
IGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK2Jvb2wgUGx1Z2luUGFja2Fn
ZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYsIGNvbnN0IFBsdWdpblBhY2thZ2UmKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2Fk
KCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK1BsdWdpblBhY2thZ2U6On5Q
bHVnaW5QYWNrYWdlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiAKIENvbG9yIFdlYkNvcmU6OmZv
Y3VzUmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBXZWJDb3JlOjpzZXRG
b2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVRdC5jcHAJKHJldmlzaW9uIDMwNTY0KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsODkgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFT
QQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBs
b2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUg
d2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotI2luY2x1
ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgotI2luY2x1ZGUgInFkZWJ1Zy5oIgotI2lmIFFUX1ZFUlNJ
T04gPCAweDA0MDQwMAotI2luY2x1ZGUgInF3ZWJvYmplY3RwbHVnaW5fcC5oIgotI2VuZGlmCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QbHVn
aW5JbmZvKiBQbHVnaW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4
KHVuc2lnbmVkIGkpCi17Ci0gICAgLy9xRGVidWcoKSA8PCAiPj4+Pj4+Pj4+Pj4gUGx1Z2luSW5m
b1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCgiIDw8IGkgPDwgIikiOwot
Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0gICAgUVdlYkZhY3RvcnlMb2FkZXIgKmxvYWRl
ciA9IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCk7Ci0gICAgaWYgKGkgPiBsb2FkZXItPm1fcGx1
Z2luSW5mby5jb3VudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBRV2ViRmFjdG9y
eUxvYWRlcjo6SW5mbyAmcWluZm8gPSBsb2FkZXItPm1fcGx1Z2luSW5mby5hdChpKTsKLSAgICBQ
bHVnaW5JbmZvICppbmZvID0gbmV3IFBsdWdpbkluZm87Ci0gICAgaW5mby0+bmFtZSA9IHFpbmZv
Lm5hbWU7Ci0gICAgaW5mby0+ZGVzYyA9IHFpbmZvLmRlc2NyaXB0aW9uOwotICAgIGZvcmVhY2gg
KGNvbnN0IFFXZWJGYWN0b3J5TG9hZGVyOjpNaW1lSW5mbyAmbSwgcWluZm8ubWltZXMpIHsKLSAg
ICAgICAgTWltZUNsYXNzSW5mbyAqbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOwotICAgICAgICBt
aW1lLT50eXBlID0gbS50eXBlOwotICAgICAgICBtaW1lLT5wbHVnaW4gPSBpbmZvOwotICAgICAg
ICBmb3JlYWNoIChRU3RyaW5nIGV4dCwgbS5leHRlbnNpb25zKQotICAgICAgICAgICAgbWltZS0+
c3VmZml4ZXMuYXBwZW5kKGV4dCk7Ci0gICAgICAgIGluZm8tPm1pbWVzLmFwcGVuZChtaW1lKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGluZm87Ci0jZWxzZQotICAgIHJldHVybiAwOyAvLyAjIyMgRklY
TUUKLSNlbmRpZgotfQotCi11bnNpZ25lZCBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkg
Y29uc3QKLXsKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICAvL3FEZWJ1ZygpIDw8ICI+
Pj4+Pj4+Pj4+PiBQbHVnaW5JbmZvU3RvcmU6OmNvdW50ID0iIDw8IFFXZWJGYWN0b3J5TG9hZGVy
OjpzZWxmKCktPmtleXMoKS5jb3VudCgpOwotICAgIHJldHVybiBRV2ViRmFjdG9yeUxvYWRlcjo6
c2VsZigpLT5rZXlzKCkuY291bnQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0K
LQotU3RyaW5nIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGlzIHN0dWJiZWQg
b3V0IGFuZCBzaG91bGQgcmVhbGx5IHJldHVybiB0aGUgbmFtZSBvZiBhIHBsdWctaW4gcGFja2Fn
ZSBmb3IKLSAgICAvLyBhIGdpdmVuIE1JTUUgdHlwZS4KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19
Ci0gICAgCi1ib29sIFBsdWdpbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJD
b3JlOjpTdHJpbmcmIHN0cmluZykKLXsKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICBi
b29sIHN1cHBvcnRzID0gUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+c3VwcG9ydHNNaW1lVHlw
ZShzdHJpbmcpOwotI2Vsc2UKLSAgICBib29sIHN1cHBvcnRzID0gZmFsc2U7Ci0jZW5kaWYKLSAg
ICAvL3FEZWJ1ZygpIDw8ICI+Pj4+Pj4+Pj4+PiBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlN
RVR5cGUoIiA8PCBzdHJpbmcgPDwgIikgPSIgPDwgc3VwcG9ydHM7Ci0gICAgcmV0dXJuIHN1cHBv
cnRzOwotfQotCi12b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wpIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwCShyZXZpc2lvbiAzMDU2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgpAQCAtNTksNyArNjAsOCBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5j
bHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUg
IlBsdWdpbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgpAQCAtNzAsNiArNzIsMTUg
QEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK1BsdWdpblNldCBQbHVnaW5EYXRhYmFz
ZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBQ
bHVnaW5TZXQoKTsgfQorVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVn
aW5QYXRocygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0K
K2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJpbmcm
KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorYm9vbCBQbHVnaW5Q
YWNrYWdlOjpmZXRjaEluZm8oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQor
dW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2Fn
ZSYsIGNvbnN0IFBsdWdpblBhY2thZ2UmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxz
ZTsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gZmFsc2U7IH0KK1BsdWdpblBhY2thZ2U6On5QbHVnaW5QYWNrYWdlKCkgeyBub3RJbXBsZW1l
bnRlZCgpOyB9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogVmVjdG9yPFN0cmluZz4gc3VwcG9y
dGVkS2V5U2l6ZXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8U3RyaW5nPigp
OyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShy
ZXZpc2lvbiAzMDU2NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Myw3ICs2NCw4IEBACiAjaW5jbHVkZSAi
UGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9T
dG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFj
a2FnZS5oIgogI2luY2x1ZGUgIlBvcHVwTWVudS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKQEAgLTExNywxMSArMTE5LDE0IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdm9pZCBXZWJDb3JlOjpmaW5kV29yZEJvdW5kYXJ5KFVDaGFyIGNv
bnN0KiBzdHIsaW50IGxlbixpbnQgcG9zaXRpb24saW50KiBzdGFydCwgaW50KiBlbmQpIHsgbm90
SW1wbGVtZW50ZWQoKTsgKnN0YXJ0PXBvc2l0aW9uOyAqZW5kPXBvc2l0aW9uOyB9CiAKLVBsdWdp
bkluZm8qUGx1Z2luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1
bnNpZ25lZCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDt9Ci11bnNpZ25lZCBQbHVnaW5J
bmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
MDsgfQotYm9vbCBXZWJDb3JlOjpQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0K
LVN0cmluZyBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQotdm9p
ZCBXZWJDb3JlOjpyZWZyZXNoUGx1Z2lucyhib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK1Bs
dWdpblNldCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiBQbHVnaW5TZXQoKTsgfQorVmVjdG9yPFN0cmluZz4gUGx1Z2lu
RGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IFZlY3RvcjxTdHJpbmc+KCk7IH0KK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1
Z2luUGF0aChjb25zdCBTdHJpbmcmKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBm
YWxzZTsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKSB7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiBmYWxzZTsgfQordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZXF1
YWwoY29uc3QgUGx1Z2luUGFja2FnZSYsIGNvbnN0IFBsdWdpblBhY2thZ2UmKSB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK1BsdWdpblBhY2thZ2U6On5QbHVnaW5Q
YWNrYWdlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiAKIHZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVj
dGVkKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
YXRhYmFzZS5jcHAJKHJldmlzaW9uIDMwNDY1KQkoZnJvbSBXZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpbkRhdGFiYXNlV2luLmNwcDozMDQ2NSkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRh
YmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisKKyNp
bmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNr
YWdlLmgiCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHNobHdhcGkuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0YWJhc2U6Omluc3Rh
bGxlZFBsdWdpbnMoKQoreworICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZSogcGx1Z2lucyA9IDA7
CisgICAgCisgICAgaWYgKCFwbHVnaW5zKSB7CisgICAgICAgIHBsdWdpbnMgPSBuZXcgUGx1Z2lu
RGF0YWJhc2U7CisgICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBsdWdpbkRhdGFiYXNl
OjpkZWZhdWx0UGx1Z2luUGF0aHMoKSk7CisgICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gcGx1Z2luczsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6YWRk
RXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBtX3BsdWdpblBhdGhz
LmFwcGVuZChwYXRoKTsKKyAgICByZWZyZXNoKCk7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2U6
OnJlZnJlc2goKQoreyAgIAorICAgIFBsdWdpblNldCBuZXdQbHVnaW5zOworCisgICAgYm9vbCBw
bHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgc2V0IG9mIHBs
dWdpbnMKKyAgICBuZXdQbHVnaW5zID0gZ2V0UGx1Z2luc0luUGF0aHMoKTsKKworICAgIGlmICgh
bV9wbHVnaW5zLmlzRW1wdHkoKSkgeworICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xl
YXIoKTsKKworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkID0gbV9wbHVnaW5zOwor
CisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQo
KTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lu
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBwbHVnaW5zVG9VbmxvYWQu
cmVtb3ZlKCppdCk7CisKKyAgICAgICAgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgICAgICBm
b3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbmV3UGx1Z2lucy5yZW1vdmUoKml0KTsKKworICAg
ICAgICAvLyBVbmxvYWQgcGx1Z2lucworICAgICAgICBlbmQgPSBwbHVnaW5zVG9VbmxvYWQuZW5k
KCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsdWdpbnNU
b1VubG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMu
cmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gQWRkIG5ldyBwbHVnaW5zCisgICAgICAgIGVuZCA9
IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAg
bV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhcGx1Z2lu
c1RvVW5sb2FkLmlzRW1wdHkoKSB8fCAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9wbHVnaW5zID0gbmV3UGx1Z2luczsKKyAgICAgICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVnaW5T
ZXRDaGFuZ2VkID0gIW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAgIH0KKworICAgIC8vIFJlZ2lz
dGVyIHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8gR2V0
IE1JTUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOworICAgICAgICBm
b3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCppdCkt
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9p
dCkgeworICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW5TZXRDaGFuZ2VkOworfQor
CitWZWN0b3I8UGx1Z2luUGFja2FnZSo+IFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5zKCkgY29uc3QK
K3sKKyAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IHJlc3VsdDsKKworICAgIFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoKCppdCkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtFWSBy
b290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VM
VCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29mdHdhcmVcXE1vemlsbGFQbHVn
aW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywgJmtleSk7CisKKyAgICBpZiAocmVzdWx0
ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIHdjaGFyX3QgbmFtZVsx
MjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKKworICAgIC8vIEVudW1lcmF0ZSBzdWJr
ZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKKyAgICAgICAgRFdPUkQgbmFtZUxlbiA9
IF9jb3VudG9mKG5hbWUpOworICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwg
bmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOworCisgICAgICAgIGlmIChy
ZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIFdD
SEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdPUkQgcGF0aFN0clNpemUgPSBzaXpl
b2YocGF0aFN0cik7CisgICAgICAgIERXT1JEIHR5cGU7CisKKyAgICAgICAgcmVzdWx0ID0gU0hH
ZXRWYWx1ZShrZXksIG5hbWUsIFRFWFQoIlBhdGgiKSwgJnR5cGUsIChMUEJZVEUpcGF0aFN0ciwg
JnBhdGhTdHJTaXplKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTIHx8IHR5
cGUgIT0gUkVHX1NaKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgV0lOMzJfRklM
RV9BVFRSSUJVVEVfREFUQSBhdHRyaWJ1dGVzOworICAgICAgICBpZiAoR2V0RmlsZUF0dHJpYnV0
ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRyaWJ1dGVzKSA9PSAwKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9
IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoU3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXpl
IC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBhdHRyaWJ1dGVzLmZ0TGFzdFdyaXRlVGltZSk7CisKKyAg
ICAgICAgaWYgKHBhY2thZ2UpCisgICAgICAgICAgICBwbHVnaW5zLmFkZChwYWNrYWdlKTsKKyAg
ICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJh
c2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVl
RmlsZW5hbWVzOworICAgIFBsdWdpblNldCBwbHVnaW5zOworCisgICAgSEFORExFIGhGaW5kID0g
SU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7
CisKKyAgICBQbHVnaW5QYWNrYWdlKiBvbGRXTVBQbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2th
Z2UqIG5ld1dNUFBsdWdpbiA9IDA7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIFN0cmluZyBwYXR0ZXJuID0gKml0ICsgIlxcKiI7CisKKyAgICAgICAgaEZp
bmQgPSBGaW5kRmlyc3RGaWxlVyhwYXR0ZXJuLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCksICZmaW5kRmlsZURhdGEpOworCisgICAgICAgIGlmIChoRmluZCA9PSBJTlZBTElEX0hBTkRM
RV9WQUxVRSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJ
UkVDVE9SWSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgU3RyaW5n
IGZpbGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbihmaW5kRmls
ZURhdGEuY0ZpbGVOYW1lKSk7CisgICAgICAgICAgICBpZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRo
KCJucCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoImRsbCIsIGZhbHNlKSkgJiYKKyAg
ICAgICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIp
IHx8ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAxMCIsIGZhbHNlKSkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9ICppdCArICJcXCIg
KyBmaWxlbmFtZTsKKyAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0
aCkuc2Vjb25kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAg
ICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQ
YWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1lKTsKKworICAgICAg
ICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKKyAgICAgICAgICAgICAgICBwbHVnaW5zLmFkZChw
bHVnaW5QYWNrYWdlKTsKKworICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShm
aWxlbmFtZSwgIm5wZHNwbGF5LmRsbCIpKQorICAgICAgICAgICAgICAgICAgICBvbGRXTVBQbHVn
aW4gPSBwbHVnaW5QYWNrYWdlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKGZpbGVuYW1lLCAibnAtbXN3bXAuZGxsIikpCisgICAgICAgICAgICAgICAgICAgIG5l
d1dNUFBsdWdpbiA9IHBsdWdpblBhY2thZ2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSB3
aGlsZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0gMCk7CisKKyAgICAg
ICAgRmluZENsb3NlKGhGaW5kKTsKKyAgICB9CisKKyAgICBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5
KEhLRVlfTE9DQUxfTUFDSElORSwgcGx1Z2lucyk7CisgICAgYWRkUGx1Z2luc0Zyb21SZWdpc3Ry
eShIS0VZX0NVUlJFTlRfVVNFUiwgcGx1Z2lucyk7CisKKyAgICAvLyBJZiBib3RoIHRoZSBvbGQg
YW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwgCisgICAg
Ly8gd2UgcmVtb3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2luZyB0aGUg
b2xkIG9uZS4KKyAgICBpZiAob2xkV01QUGx1Z2luICYmIG5ld1dNUFBsdWdpbikKKyAgICAgICAg
cGx1Z2lucy5yZW1vdmUob2xkV01QUGx1Z2luKTsKKworICAgIHJldHVybiBwbHVnaW5zOworfQor
CitzdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJp
bmcmIHZlcnNpb25TdHJpbmcpCit7CisgICAgVmVjdG9yPGludD4gdmVyc2lvbjsKKworICAgIHVu
c2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7CisgICAgCisgICAgd2hp
bGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgeworICAgICAgICBmb3IgKGVu
ZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBv
cykKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNp
b25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBv
cywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7CisgICAgICAgIHZlcnNpb24uYXBwZW5kKHZl
cnNpb25Db21wb25lbnQpOworCisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9
CisKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KKworLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVy
c2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJl
VmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYg
dmVyc2lvbkIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUo
KTsgaSsrKSB7CisgICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwg
dmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8g
SWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJz
aW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQorICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQbHVnaW5QYXRocyhW
ZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit7CisgICAgLy8gRW51bWVyYXRlIGFsbCBNb3ppbGxhIHBs
dWdpbiBkaXJlY3RvcmllcyBpbiB0aGUgcmVnaXN0cnkKKyAgICBIS0VZIGtleTsKKyAgICBMT05H
IHJlc3VsdDsKKyAgICAKKyAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNI
SU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96aWxsYSIpLCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAg
aWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgIFdDSEFSIG5hbWVbMTI4XTsK
KyAgICAgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOworCisgICAgICAgIC8vIEVudW1lcmF0ZSBz
dWJrZXlzCisgICAgICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgICAgICBEV09S
RCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxh
c3RNb2RpZmllZCk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQ
YXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pICsgIlxcRXh0ZW5zaW9ucyI7CisgICAgICAgICAg
ICBIS0VZIGV4dGVuc2lvbnNLZXk7CisKKyAgICAgICAgICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBr
ZXkKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChrZXksIGV4dGVuc2lvbnNQYXRo
LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIEtFWV9SRUFELCAmZXh0ZW5zaW9u
c0tleSk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAg
ICAgICAgICAgICAgIC8vIE5vdyBnZXQgdGhlIHBsdWdpbnMgcGF0aAorICAgICAgICAgICAgICAg
IFdDSEFSIHBsdWdpbnNQYXRoU3RyW19NQVhfUEFUSF07CisgICAgICAgICAgICAgICAgRFdPUkQg
cGx1Z2luc1BhdGhTaXplID0gc2l6ZW9mKHBsdWdpbnNQYXRoU3RyKTsKKyAgICAgICAgICAgICAg
ICBEV09SRCB0eXBlOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4
KGV4dGVuc2lvbnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdp
bnNQYXRoU3RyLCAmcGx1Z2luc1BhdGhTaXplKTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikKKyAgICAgICAgICAgICAgICAg
ICAgcGF0aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5zUGF0aFN0ciwgcGx1Z2luc1BhdGhTaXplIC8g
c2l6ZW9mKFdDSEFSKSAtIDEpKTsKKworICAgICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVu
c2lvbnNLZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBS
ZWdDbG9zZUtleShrZXkpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZFdpbmRv
d3NNZWRpYVBsYXllclBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIC8v
IFRoZSBuZXcgV01QIEZpcmVmb3ggcGx1Z2luIGlzIGluc3RhbGxlZCBpbiBcUEZpbGVzXFBsdWdp
bnMgaWYgaXQgY2FuJ3QgZmluZCBhbnkgRmlyZWZveCBpbnN0YWxscworICAgIFdDSEFSIHBsdWdp
bkRpcmVjdG9yeVN0cltfTUFYX1BBVEggKyAxXTsKKyAgICBEV09SRCBwbHVnaW5EaXJlY3RvcnlT
aXplID0gOjpFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKFRFWFQoIiVTWVNURU1EUklWRSVcXFBG
aWxlc1xcUGx1Z2lucyIpLCBwbHVnaW5EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHBsdWdpbkRpcmVj
dG9yeVN0cikpOworCisgICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRp
cmVjdG9yeVNpemUgPD0gX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5U3RyKSkKKyAgICAgICAgcGF0
aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9yeVNpemUg
LSAxKSk7CisKKyAgICBEV09SRCB0eXBlOworICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9y
eVN0cltfTUFYX1BBVEhdOworICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBz
aXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0g
U0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxNaWNyb3NvZnRc
XE1lZGlhUGxheWVyIiksIFRFWFQoIkluc3RhbGxhdGlvbiBEaXJlY3RvcnkiKSwgJnR5cGUsIChM
UEJZVEUpJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNp
emUpOworCisgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1Na
KQorICAgICAgICBwYXRocy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwg
aW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBhZGRRdWlja1RpbWVQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBw
YXRocykKK3sKKyAgICBEV09SRCB0eXBlOworICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9y
eVN0cltfTUFYX1BBVEhdOworICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBz
aXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0g
U0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxBcHBsZSBDb21w
dXRlciwgSW5jLlxcUXVpY2tUaW1lIiksIFRFWFQoIkluc3RhbGxEaXIiKSwgJnR5cGUsIChMUEJZ
VEUpJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUp
OworCisgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKSB7
CisgICAgICAgIFN0cmluZyBwbHVnaW5EaXIgPSBTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U3RyLCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxc
cGx1Z2lucyI7CisgICAgICAgIHBhdGhzLmFwcGVuZChwbHVnaW5EaXIpOworICAgIH0KK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpblBhdGgoVmVjdG9yPFN0cmlu
Zz4mIHBhdGhzKQoreworICAgIEhLRVkga2V5OworICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3Bl
bktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0
IFJlYWRlciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9T
VUNDRVNTKQorICAgICAgICByZXR1cm47CisKKyAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgRklM
RVRJTUUgbGFzdE1vZGlmaWVkOworCisgICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNp
b247CisgICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOworCisgICAgLy8gRW51
bWVyYXRlIHN1YmtleXMKKyAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09S
RCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgcmVzdWx0
ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1v
ZGlmaWVkKTsKKworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNl
VmVyc2lvblN0cmluZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOworICAgICAgICBpZiAoY29tcGFy
ZVZlcnNpb25zKGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lvbikpIHsKKyAgICAg
ICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247CisgICAgICAgICAg
ICBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNO
dWxsKCkpIHsKKyAgICAgICAgRFdPUkQgdHlwZTsKKyAgICAgICAgV0NIQVIgYWNyb2JhdEluc3Rh
bGxQYXRoU3RyW19NQVhfUEFUSF07CisgICAgICAgIERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNp
emUgPSBzaXplb2YoYWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKKworICAgICAgICBTdHJpbmcgYWNy
b2JhdFBsdWdpbktleVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiAr
IGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgiOworICAgICAgICBy
ZXN1bHQgPSBTSEdldFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktleVBh
dGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgJnR5cGUsIChMUEJZVEUpYWNy
b2JhdEluc3RhbGxQYXRoU3RyLCAmYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSk7CisKKyAgICAgICAg
aWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgICAgICBTdHJpbmcgYWNyb2Jh
dFBsdWdpblBhdGggPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0SW5zdGFs
bFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7CisgICAgICAgICAg
ICBwYXRocy5hcHBlbmQoYWNyb2JhdFBsdWdpblBhdGgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgUmVnQ2xvc2VLZXkoa2V5KTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc2FmYXJpUGx1
Z2luc1BhdGgoKQoreworICAgIFdDSEFSIG1vZHVsZUZpbGVOYW1lU3RyW19NQVhfUEFUSF07Cisg
ICAgc3RhdGljIFN0cmluZyBwbHVnaW5zUGF0aDsKKyAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVn
aW5QYXRoID0gZmFsc2U7CisKKyAgICBpZiAoIWNhY2hlZFBsdWdpblBhdGgpIHsKKyAgICAgICAg
Y2FjaGVkUGx1Z2luUGF0aCA9IHRydWU7CisKKyAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVu
ID0gR2V0TW9kdWxlRmlsZU5hbWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7CisK
KyAgICAgICAgaWYgKCFtb2R1bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBf
TUFYX1BBVEgpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWYgKCFQYXRoUmVt
b3ZlRmlsZVNwZWMobW9kdWxlRmlsZU5hbWVTdHIpKQorICAgICAgICAgICAgZ290byBleGl0Owor
CisgICAgICAgIHBsdWdpbnNQYXRoID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBs
dWdpbnMiOworICAgIH0KK2V4aXQ6CisgICAgcmV0dXJuIHBsdWdpbnNQYXRoOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpblBhdGhzKFZlY3RvcjxTdHJpbmc+JiBw
YXRocykKK3sKKyAgICBXQ0hBUiBzeXN0ZW1EaXJlY3RvcnlTdHJbTUFYX1BBVEhdOworCisgICAg
aWYgKEdldFN5c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHN5c3Rl
bURpcmVjdG9yeVN0cikpID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG1hY3Jv
bWVkaWFEaXJlY3RvcnlTdHJbTUFYX1BBVEhdOworCisgICAgUGF0aENvbWJpbmUobWFjcm9tZWRp
YURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcRmxhc2gi
KSk7CisgICAgcGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOworCisgICAgUGF0
aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhU
KCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikpOworICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlh
RGlyZWN0b3J5U3RyKTsKK30KKworVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1
bHRQbHVnaW5QYXRocygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7CisgICAgU3RyaW5n
IG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOworCisgICAgaWYgKCFvdXJQYXRoLmlzTnVs
bCgpKQorICAgICAgICBwYXRocy5hcHBlbmQob3VyUGF0aCk7CisgICAgYWRkUXVpY2tUaW1lUGx1
Z2luUGF0aChwYXRocyk7CisgICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChwYXRocyk7Cisg
ICAgYWRkTW96aWxsYVBsdWdpblBhdGhzKHBhdGhzKTsKKyAgICBhZGRXaW5kb3dzTWVkaWFQbGF5
ZXJQbHVnaW5QYXRoKHBhdGhzKTsKKyAgICBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMocGF0aHMp
OworCisgICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjppc01JTUVU
eXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlw
ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JlZ2lzdGVyZWRN
SU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAv
LyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNl
YXJjaGluZyBhZ2FpbgorICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVU
eXBlcy5jb250YWlucyhtaW1lVHlwZSkpOworfQorCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRh
YmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBp
ZiAobWltZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZyBr
ZXkgPSBtaW1lVHlwZS5sb3dlcigpOworICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2lu
c1BhdGgoKTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAwOworICAgIFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworCisgICAgZm9yIChQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtl
eSkpIHsKKyAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOworICAgICAgICAgICAgLy8g
cHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQorICAgICAgICAgICAg
aWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW47Cit9CisKK1N0
cmluZyBQbHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBl
eHRlbnNpb24pIGNvbnN0Cit7CisgICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9wbHVnaW5zLmVuZCgpOworICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgo
KTsKKyAgICBTdHJpbmcgbWltZVR5cGU7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gMDsK
KworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwor
CisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9p
dCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2Vu
ZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5z
aW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKKyAgICAgICAgICAgICAgICAgICAgcGx1
Z2luID0gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5z
IGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBs
dWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBtaW1lVHlwZTsKK30KKworUGx1Z2luUGFja2FnZSogUGx1Z2lu
RGF0YWJhc2U6OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBlKQor
eyAgIAorICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVU
eXBlKTsKKyAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwuc3RyaW5nKCk7CisgICAgCisgICAgaWYg
KCFwbHVnaW4pIHsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLmxhc3RQYXRoQ29tcG9u
ZW50KCk7CisgICAgICAgIGlmICghZmlsZW5hbWUuZW5kc1dpdGgoIi8iKSkgeworICAgICAgICAg
ICAgaW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7CisgICAgICAg
ICAgICBpZiAoZXh0ZW5zaW9uUG9zICE9IC0xKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGV4
dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhleHRlbnNpb25Qb3MgKyAxKTsKKworICAgICAg
ICAgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKKyAg
ICAgICAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGSVhNRTogaWYgbm8gcGx1Z2lu
IGNvdWxkIGJlIGZvdW5kLCBxdWVyeSBXaW5kb3dzIGZvciB0aGUgbWltZSB0eXBlIAorICAgIC8v
IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbi4KKworICAgIHJldHVybiBwbHVnaW47Cit9
CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMzA0NjUp
CisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwg
THRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjksOCArMzAsNiBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5j
bHVkZSA8c2hsd2FwaS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDYgKzQ2LDE2
IEBAIFBsdWdpbkRhdGFiYXNlKiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGUKICAgICByZXR1cm4g
cGx1Z2luczsKIH0KIAorYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRh
aW5zKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gTm8gcGx1Z2luIHdh
cyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4K
KyAgICByZXR1cm4gKHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMo
bWltZVR5cGUpKTsKK30KKwogdm9pZCBQbHVnaW5EYXRhYmFzZTo6YWRkRXh0cmFQbHVnaW5QYXRo
KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBtX3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsK
QEAgLTExOSwzNDcgKzEyOCwxOSBAQCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IFBsdWdpbkRhdGFi
YXNlOjpwCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkZFBs
dWdpbnNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMpCi17Ci0g
ICAgSEtFWSBrZXk7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXks
IEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywg
JmtleSk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHdjaGFyX3QgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsK
LQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsK
LSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IF9jb3VudG9mKG5hbWUpOwotICAgICAgICByZXN1bHQg
PSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9k
aWZpZWQpOwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAg
RFdPUkQgcGF0aFN0clNpemUgPSBzaXplb2YocGF0aFN0cik7Ci0gICAgICAgIERXT1JEIHR5cGU7
Ci0KLSAgICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShrZXksIG5hbWUsIFRFWFQoIlBhdGgiKSwg
JnR5cGUsIChMUEJZVEUpcGF0aFN0ciwgJnBhdGhTdHJTaXplKTsKLSAgICAgICAgaWYgKHJlc3Vs
dCAhPSBFUlJPUl9TVUNDRVNTIHx8IHR5cGUgIT0gUkVHX1NaKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyaWJ1dGVzOwotICAg
ICAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZvU3RhbmRh
cmQsICZhdHRyaWJ1dGVzKSA9PSAwKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
UGx1Z2luUGFja2FnZSogcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoU3Ry
aW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBhdHRyaWJ1dGVz
LmZ0TGFzdFdyaXRlVGltZSk7Ci0KLSAgICAgICAgaWYgKHBhY2thZ2UpCi0gICAgICAgICAgICBw
bHVnaW5zLmFkZChwYWNrYWdlKTsKLSAgICB9Ci0KLSAgICBSZWdDbG9zZUtleShrZXkpOwotfQot
Ci1QbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KLSAg
ICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOwotICAgIFBsdWdpblNldCBwbHVnaW5z
OwotCi0gICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0gICAgV0lOMzJf
RklORF9EQVRBVyBmaW5kRmlsZURhdGE7Ci0KLSAgICBQbHVnaW5QYWNrYWdlKiBvbGRXTVBQbHVn
aW4gPSAwOwotICAgIFBsdWdpblBhY2thZ2UqIG5ld1dNUFBsdWdpbiA9IDA7Ci0KLSAgICBWZWN0
b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQoKTsKLSAg
ICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luUGF0aHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFN0cmluZyBwYXR0ZXJuID0gKml0
ICsgIlxcKiI7Ci0KLSAgICAgICAgaEZpbmQgPSBGaW5kRmlyc3RGaWxlVyhwYXR0ZXJuLmNoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZmaW5kRmlsZURhdGEpOwotCi0gICAgICAgIGlm
IChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmli
dXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0YS5j
RmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7Ci0gICAgICAgICAgICBp
ZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5kc1dp
dGgoImRsbCIsIGZhbHNlKSkgJiYKLSAgICAgICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdDYXNl
KGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAxMCIs
IGZhbHNlKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmlu
ZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBmaWxlbmFtZTsKLSAgICAgICAgICAgIGlmICghdW5p
cXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCkuc2Vjb25kKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAKLSAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpblBhY2thZ2Ug
PSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRM
YXN0V3JpdGVUaW1lKTsKLQotICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKLSAgICAg
ICAgICAgICAgICBwbHVnaW5zLmFkZChwbHVnaW5QYWNrYWdlKTsKLQotICAgICAgICAgICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wZHNwbGF5LmRsbCIpKQotICAgICAg
ICAgICAgICAgICAgICBvbGRXTVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdlOwotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAibnAtbXN3bXAuZGxsIikp
Ci0gICAgICAgICAgICAgICAgICAgIG5ld1dNUFBsdWdpbiA9IHBsdWdpblBhY2thZ2U7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgfSB3aGlsZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZpbmRG
aWxlRGF0YSkgIT0gMCk7Ci0KLSAgICAgICAgRmluZENsb3NlKGhGaW5kKTsKLSAgICB9Ci0KLSAg
ICBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVlfTE9DQUxfTUFDSElORSwgcGx1Z2lucyk7Ci0g
ICAgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGx1Z2lucyk7Ci0K
LSAgICAvLyBJZiBib3RoIHRoZSBvbGQgYW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBwcmVzZW50IGlu
IHRoZSBwbHVnaW5zIHNldCwgCi0gICAgLy8gd2UgcmVtb3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRv
bid0IGVuZCB1cCBjaG9vc2luZyB0aGUgb2xkIG9uZS4KLSAgICBpZiAob2xkV01QUGx1Z2luICYm
IG5ld1dNUFBsdWdpbikKLSAgICAgICAgcGx1Z2lucy5yZW1vdmUob2xkV01QUGx1Z2luKTsKLQot
ICAgIHJldHVybiBwbHVnaW5zOwotfQotCi1zdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNl
VmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCi17Ci0gICAgVmVjdG9y
PGludD4gdmVyc2lvbjsKLQotICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKLSAgICB1bnNpZ25l
ZCBlbmRQb3M7Ci0gICAgCi0gICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5n
dGgoKSkgewotICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9u
U3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5n
W2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9u
U3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7Ci0g
ICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOwotCi0gICAgICAgIHN0YXJ0
UG9zID0gZW5kUG9zICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmVyc2lvbjsKLX0KLQotLy8g
VGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKLXN0
YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNp
b25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpID49IHZlcnNp
b25CLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmICh2ZXJz
aW9uQVtpXSA+IHZlcnNpb25CW2ldKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJl
IGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0
IHJldHVybiBmYWxzZQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lk
IGFkZE1vemlsbGFQbHVnaW5QYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgLy8g
RW51bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBkaXJlY3RvcmllcyBpbiB0aGUgcmVnaXN0cnkK
LSAgICBIS0VZIGtleTsKLSAgICBMT05HIHJlc3VsdDsKLSAgICAKLSAgICByZXN1bHQgPSBSZWdP
cGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96aWxsYSIpLCAw
LCBLRVlfUkVBRCwgJmtleSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0g
ICAgICAgIFdDSEFSIG5hbWVbMTI4XTsKLSAgICAgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwot
Ci0gICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgICAgIGZvciAoaW50IGkgPSAwOzsg
aSsrKSB7Ci0gICAgICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9m
KFdDSEFSKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1l
LCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgICAgIGlmIChy
ZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pICsgIlxc
RXh0ZW5zaW9ucyI7Ci0gICAgICAgICAgICBIS0VZIGV4dGVuc2lvbnNLZXk7Ci0KLSAgICAgICAg
ICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKLSAgICAgICAgICAgIHJlc3VsdCA9IFJlZ09wZW5L
ZXlFeChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCks
IDAsIEtFWV9SRUFELCAmZXh0ZW5zaW9uc0tleSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQg
PT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIC8vIE5vdyBnZXQgdGhlIHBsdWdp
bnMgcGF0aAotICAgICAgICAgICAgICAgIFdDSEFSIHBsdWdpbnNQYXRoU3RyW19NQVhfUEFUSF07
Ci0gICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2luc1BhdGhTaXplID0gc2l6ZW9mKHBsdWdpbnNQ
YXRoU3RyKTsKLSAgICAgICAgICAgICAgICBEV09SRCB0eXBlOwotCi0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4dGVuc2lvbnNLZXksIFRFWFQoIlBsdWdpbnMiKSwg
MCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNQYXRoU3RyLCAmcGx1Z2luc1BhdGhTaXplKTsKLQot
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJF
R19TWikKLSAgICAgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5zUGF0
aFN0ciwgcGx1Z2luc1BhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLQotICAgICAgICAg
ICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBSZWdDbG9zZUtleShrZXkpOwotICAgIH0KLX0KLQotc3Rh
dGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpblBhdGgoVmVjdG9yPFN0
cmluZz4mIHBhdGhzKQotewotICAgIC8vIFRoZSBuZXcgV01QIEZpcmVmb3ggcGx1Z2luIGlzIGlu
c3RhbGxlZCBpbiBcUEZpbGVzXFBsdWdpbnMgaWYgaXQgY2FuJ3QgZmluZCBhbnkgRmlyZWZveCBp
bnN0YWxscwotICAgIFdDSEFSIHBsdWdpbkRpcmVjdG9yeVN0cltfTUFYX1BBVEggKyAxXTsKLSAg
ICBEV09SRCBwbHVnaW5EaXJlY3RvcnlTaXplID0gOjpFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NX
KFRFWFQoIiVTWVNURU1EUklWRSVcXFBGaWxlc1xcUGx1Z2lucyIpLCBwbHVnaW5EaXJlY3RvcnlT
dHIsIF9jb3VudG9mKHBsdWdpbkRpcmVjdG9yeVN0cikpOwotCi0gICAgaWYgKHBsdWdpbkRpcmVj
dG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0gX2NvdW50b2YocGx1Z2luRGly
ZWN0b3J5U3RyKSkKLSAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlT
dHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7Ci0KLSAgICBEV09SRCB0eXBlOwotICAgIFdD
SEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JEIGluc3Rh
bGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsK
LQotICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRF
WFQoIlNvZnR3YXJlXFxNaWNyb3NvZnRcXE1lZGlhUGxheWVyIiksIFRFWFQoIkluc3RhbGxhdGlv
biBEaXJlY3RvcnkiKSwgJnR5cGUsIChMUEJZVEUpJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwg
Jmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9T
VUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAgICAgICBwYXRocy5hcHBlbmQoU3RyaW5nKGlu
c3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVv
ZihXQ0hBUikgLSAxKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRRdWlja1RpbWVQbHVn
aW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBEV09SRCB0eXBlOwotICAgIFdD
SEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JEIGluc3Rh
bGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsK
LQotICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRF
WFQoIlNvZnR3YXJlXFxBcHBsZSBDb21wdXRlciwgSW5jLlxcUXVpY2tUaW1lIiksIFRFWFQoIklu
c3RhbGxEaXIiKSwgJnR5cGUsIChMUEJZVEUpJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmlu
c3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUND
RVNTICYmIHR5cGUgPT0gUkVHX1NaKSB7Ci0gICAgICAgIFN0cmluZyBwbHVnaW5EaXIgPSBTdHJp
bmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplIC8g
c2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxccGx1Z2lucyI7Ci0gICAgICAgIHBhdGhzLmFwcGVuZChw
bHVnaW5EaXIpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZEFkb2JlQWNyb2Jh
dFBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQotewotICAgIEhLRVkga2V5OwotICAg
IEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgi
U29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICBX
Q0hBUiBuYW1lWzEyOF07Ci0gICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgVmVjdG9y
PGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247Ci0gICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJz
aW9uU3RyaW5nOwotCi0gICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBmb3IgKGludCBpID0g
MDs7IGkrKykgewotICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9m
KFdDSEFSKTsKLSAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZu
YW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9
IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBWZWN0b3I8aW50
PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmluZyhTdHJpbmcobmFtZSwgbmFtZUxl
bikpOwotICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RB
Y3JvYmF0VmVyc2lvbikpIHsKLSAgICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uID0gYWNy
b2JhdFZlcnNpb247Ci0gICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyA9IFN0
cmluZyhuYW1lLCBuYW1lTGVuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbGF0ZXN0
QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgRFdPUkQgdHlwZTsKLSAg
ICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgIERX
T1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgPSBzaXplb2YoYWNyb2JhdEluc3RhbGxQYXRoU3Ry
KTsKLQotICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpbktleVBhdGggPSAiU29mdHdhcmVcXEFk
b2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nICsgIlxc
SW5zdGFsbFBhdGgiOwotICAgICAgICByZXN1bHQgPSBTSEdldFZhbHVlKEhLRVlfTE9DQUxfTUFD
SElORSwgYWNyb2JhdFBsdWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24o
KSwgMCwgJnR5cGUsIChMUEJZVEUpYWNyb2JhdEluc3RhbGxQYXRoU3RyLCAmYWNyb2JhdEluc3Rh
bGxQYXRoU2l6ZSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0g
ICAgICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpblBhdGggPSBTdHJpbmcoYWNyb2JhdEluc3Rh
bGxQYXRoU3RyLCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsg
IlxcYnJvd3NlciI7Ci0gICAgICAgICAgICBwYXRocy5hcHBlbmQoYWNyb2JhdFBsdWdpblBhdGgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQotc3RhdGlj
IGlubGluZSBTdHJpbmcgc2FmYXJpUGx1Z2luc1BhdGgoKQotewotICAgIFdDSEFSIG1vZHVsZUZp
bGVOYW1lU3RyW19NQVhfUEFUSF07Ci0gICAgc3RhdGljIFN0cmluZyBwbHVnaW5zUGF0aDsKLSAg
ICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5QYXRoID0gZmFsc2U7Ci0KLSAgICBpZiAoIWNhY2hl
ZFBsdWdpblBhdGgpIHsKLSAgICAgICAgY2FjaGVkUGx1Z2luUGF0aCA9IHRydWU7Ci0KLSAgICAg
ICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9kdWxlRmlsZU5hbWUoMCwgbW9kdWxlRmls
ZU5hbWVTdHIsIF9NQVhfUEFUSCk7Ci0KLSAgICAgICAgaWYgKCFtb2R1bGVGaWxlTmFtZUxlbiB8
fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgpCi0gICAgICAgICAgICBnb3RvIGV4aXQ7
Ci0KLSAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNwZWMobW9kdWxlRmlsZU5hbWVTdHIpKQot
ICAgICAgICAgICAgZ290byBleGl0OwotCi0gICAgICAgIHBsdWdpbnNQYXRoID0gU3RyaW5nKG1v
ZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMiOwotICAgIH0KLWV4aXQ6Ci0gICAgcmV0dXJu
IHBsdWdpbnNQYXRoOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdp
blBhdGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBXQ0hBUiBzeXN0ZW1EaXJlY3Rv
cnlTdHJbTUFYX1BBVEhdOwotCi0gICAgaWYgKEdldFN5c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJl
Y3RvcnlTdHIsIF9jb3VudG9mKHN5c3RlbURpcmVjdG9yeVN0cikpID09IDApCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdDSEFSIG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFYX1BBVEhdOwotCi0g
ICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3Ry
LCBURVhUKCJtYWNyb21lZFxcRmxhc2giKSk7Ci0gICAgcGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFE
aXJlY3RvcnlTdHIpOwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwg
c3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikpOwotICAg
IHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKLX0KLQotVmVjdG9yPFN0cmlu
Zz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpCi17Ci0gICAgVmVjdG9yPFN0
cmluZz4gcGF0aHM7Ci0gICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwot
Ci0gICAgaWYgKCFvdXJQYXRoLmlzTnVsbCgpKQotICAgICAgICBwYXRocy5hcHBlbmQob3VyUGF0
aCk7Ci0gICAgYWRkUXVpY2tUaW1lUGx1Z2luUGF0aChwYXRocyk7Ci0gICAgYWRkQWRvYmVBY3Jv
YmF0UGx1Z2luUGF0aChwYXRocyk7Ci0gICAgYWRkTW96aWxsYVBsdWdpblBhdGhzKHBhdGhzKTsK
LSAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRoKHBhdGhzKTsKLSAgICBhZGRNYWNy
b21lZGlhUGx1Z2luUGF0aHMocGF0aHMpOwotCi0gICAgcmV0dXJuIHBhdGhzOwotfQotCi1ib29s
IFBsdWdpbkRhdGFiYXNlOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQotewotICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVz
aGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIHJldHVybiAocmVmcmVz
aCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpOwotfQotCiBQ
bHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSkKIHsKICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwotICAgIFN0cmlu
ZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKICAgICBQbHVnaW5QYWNrYWdlKiBwbHVn
aW4gPSAwOwogICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVu
ZCgpOwogCiAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rl
c2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKICAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQp
LmdldCgpOwotICAgICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5z
IGRpcmVjdG9yeQotICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0g
b3VyUGF0aCkKKyAgICAgICAgICAgIGlmIChpc1ByZWZlcnJlZFBsdWdpblBhdGgocGx1Z2luLT5w
YXJlbnREaXJlY3RvcnkoKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICB9CkBAIC00NzMsNyArMTU0LDYgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZv
ckV4dGVucwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBTdHJpbmcgb3VyUGF0aCA9IHNh
ZmFyaVBsdWdpbnNQYXRoKCk7CiAgICAgU3RyaW5nIG1pbWVUeXBlOwogICAgIFBsdWdpblBhY2th
Z2UqIHBsdWdpbiA9IDA7CiAKQEAgLTQ4Niw4ICsxNjYsNyBAQCBTdHJpbmcgUGx1Z2luRGF0YWJh
c2U6Ok1JTUVUeXBlRm9yRXh0ZW5zCiAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKICAgICAgICAgICAgICAgICAgICAgbWlt
ZVR5cGUgPSBtaW1lX2l0LT5maXJzdDsKICAgICAgICAgICAgICAgICAgICAgcGx1Z2luID0gKCpp
dCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBv
d24gcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFy
ZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJl
ZmVycmVkUGx1Z2luUGF0aChwbHVnaW4tPnBhcmVudERpcmVjdG9yeSgpKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAg
LTQ5OCw3ICsxNzcsNyBAQCBTdHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5z
CiB9CiAKIFBsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKGNvbnN0IEtV
UkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSkKLXsgICAKK3sKICAgICBQbHVnaW5QYWNrYWdlKiBw
bHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CiAgICAgU3RyaW5nIGZpbGVuYW1l
ID0gdXJsLnN0cmluZygpOwogICAgIApJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFi
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHJl
dmlzaW9uIDMwNTY0KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiwyMCArMjcsMTkgQEAKICNpZm5kZWYgUGx1Z2luRGF0YWJhc2Vf
SAogI2RlZmluZSBQbHVnaW5EYXRhYmFzZV9ICiAKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKIAorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRWxlbWVudDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBj
bGFzcyBJbnRTaXplOwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUGx1Z2luUGFja2FnZTsK
LSAgICBjbGFzcyBQbHVnaW5WaWV3OwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVn
aW5QYWNrYWdlPiwgUGx1Z2luUGFja2FnZUhhc2g+IFBsdWdpblNldDsKICAgCkBAIC01MSw4ICs1
MSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdl
Kj4gcGx1Z2lucygpIGNvbnN0OwogICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOwogICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChj
b25zdCBTdHJpbmcmKTsKKyAgICAgICAgYm9vbCBpc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3Qg
U3RyaW5nJiBwYXRoKSBjb25zdDsKIAogICAgICAgICBQbHVnaW5QYWNrYWdlKiBmaW5kUGx1Z2lu
KGNvbnN0IEtVUkwmLCBTdHJpbmcmIG1pbWVUeXBlKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAg
IHZvaWQgc2V0UGx1Z2luUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1fcGx1
Z2luUGF0aHMgPSBwYXRoczsgfQogICAgICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0aHMo
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAkocmV2aXNpb24gMzA1NjQpCisr
KyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjYsMTYgKzI3LDM3IEBACiAjaWZuZGVmIFBsdWdpblBhY2thZ2VfSAogI2RlZmluZSBQbHVnaW5Q
YWNrYWdlX0gKIAotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgot
Ci0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUGx1
Z2luUXVpcmtTZXQuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVGltZXIu
aCIKICNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAorI2lmIFBMQVRGT1JNKFdJTikKK3N0cnVjdCBQ
bGF0Zm9ybU1vZHVsZVZlcnNpb24geworICAgIHVuc2lnbmVkIGxlYXN0U2lnOworICAgIHVuc2ln
bmVkIG1vc3RTaWc7CisKKyAgICBQbGF0Zm9ybU1vZHVsZVZlcnNpb24odW5zaWduZWQpCisgICAg
ICAgIDogbGVhc3RTaWcoMCkKKyAgICAgICAgLCBtb3N0U2lnKDApCisgICAgeworICAgIH0KKwor
ICAgIFBsYXRmb3JtTW9kdWxlVmVyc2lvbih1bnNpZ25lZCBsc2IsIHVuc2lnbmVkIG1zYikKKyAg
ICAgICAgOiBsZWFzdFNpZyhsc2IpCisgICAgICAgICwgbW9zdFNpZyhtc2IpCisgICAgeworICAg
IH0KKworfTsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIFBsYXRmb3JtTW9kdWxlVmVyc2lvbjsK
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOwpAQCAtNDMsNyArNjUs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUGx1Z2luUGFja2FnZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2U+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIH5QbHVn
aW5QYWNrYWdlKCk7Ci0gICAgICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlKiBjcmVhdGVQYWNrYWdl
KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7CisgICAg
ICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgUGxhdGZvcm1GaWxlVGltZSYgbGFzdE1vZGlmaWVkKTsKICAgICAgICAgCiAgICAg
ICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgICAgIFN0cmlu
ZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0KQEAgLTUzLDcg
Kzc1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlw
dGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRGVz
Y3JpcHRpb25zOyB9CiAgICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1pbWVUb0V4
dGVuc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KIAotICAgICAg
ICB1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdDsKICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFj
a2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYik7CiAKICAgICAgICAgYm9vbCBsb2FkKCk7
CkBAIC02MSwzMSArODMsMzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVu
bG9hZFdpdGhvdXRTaHV0ZG93bigpOwogCiAgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBs
dWdpbkZ1bmNzKCkgY29uc3QgeyByZXR1cm4gJm1fcGx1Z2luRnVuY3M7IH0KKyAgICAgICAgaW50
IGNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mKSBjb25zdDsK
KworICAgICAgICBQbHVnaW5RdWlya1NldCBtX3F1aXJrczsKIAotICAgICAgICBpbnQgY29tcGFy
ZUZpbGVWZXJzaW9uKHVuc2lnbmVkIGNvbXBhcmVWZXJzaW9uTVMsIHVuc2lnbmVkIGNvbXBhcmVW
ZXJzaW9uTFMpIGNvbnN0OwogICAgIHByaXZhdGU6Ci0gICAgICAgIFBsdWdpblBhY2thZ2UoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBGSUxFVElNRSYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAg
UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFBsYXRmb3JtRmlsZVRpbWUm
IGxhc3RNb2RpZmllZCk7CiAgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7Ci0gICAgICAgIHZvaWQg
c3RvcmVGaWxlVmVyc2lvbihMUFZPSUQgdmVyc2lvbkluZm9EYXRhKTsKICAgICAgICAgYm9vbCBp
c1BsdWdpbkJsYWNrbGlzdGVkKCk7CisgICAgICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpOwogCiAgICAgICAgIGJvb2wgbV9pc0xvYWRlZDsKICAgICAgICAg
aW50IG1fbG9hZENvdW50OwogCi0gICAgICAgIERXT1JEIG1fZmlsZVZlcnNpb25NUzsKLSAgICAg
ICAgRFdPUkQgbV9maWxlVmVyc2lvbkxTOwotCiAgICAgICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9u
OwogICAgICAgICBTdHJpbmcgbV9wYXRoOwogICAgICAgICBTdHJpbmcgbV9maWxlTmFtZTsKICAg
ICAgICAgU3RyaW5nIG1fbmFtZTsKICAgICAgICAgU3RyaW5nIG1fcGFyZW50RGlyZWN0b3J5Owog
CisgICAgICAgIFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBtX21vZHVsZVZlcnNpb247CisKICAgICAg
ICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOwogICAgICAgICBN
SU1FVG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKIAotICAgICAgICBITU9EVUxF
IG1fbW9kdWxlOwotICAgICAgICBGSUxFVElNRSBtX2xhc3RNb2RpZmllZDsKKyAgICAgICAgUGxh
dGZvcm1Nb2R1bGUgbV9tb2R1bGU7CisgICAgICAgIFBsYXRmb3JtRmlsZVRpbWUgbV9sYXN0TW9k
aWZpZWQ7CiAKICAgICAgICAgTlBQX1NodXRkb3duUHJvY1B0ciBtX05QUF9TaHV0ZG93bjsKICAg
ICAgICAgTlBQbHVnaW5GdW5jcyBtX3BsdWdpbkZ1bmNzOwpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5o
CShyZXZpc2lvbiAzMDU2NCkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJQbHVnaW5TdHJlYW0uaCIKLSNpbmNsdWRlICJQ
bHVnaW5RdWlya1NldC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCkBAIC0xNzEsNyArMTcwLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBPd25QdHI8UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbj4g
bV9tZXNzYWdlVGhyb3R0bGVyOwogCiAgICAgICAgIHZvaWQgdXBkYXRlV2luZG93KCkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwog
ICAgICAgICB2b2lkIHBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYpOwogCiAgICAgICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2Fy
ZEV2ZW50Kik7CkBAIC0xOTQsNyArMTkyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4gbV9zdHJlYW1zOwogICAgICAgICBWZWN0
b3I8UGx1Z2luUmVxdWVzdCo+IG1fcmVxdWVzdHM7CiAKLSAgICAgICAgUGx1Z2luUXVpcmtTZXQg
bV9xdWlya3M7CiAgICAgICAgIGJvb2wgbV9pc1dpbmRvd2VkOwogICAgICAgICBib29sIG1faXNU
cmFuc3BhcmVudDsKICAgICAgICAgYm9vbCBtX2lzVmlzaWJsZTsKSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCShyZXZpc2lvbiAzMDU2NCkKKysrIFdlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRk
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsOTkgKzI3LDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
RGF0YWJhc2UuaCIKIAotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAjaW5jbHVkZSA8d2lu
ZG93cy5oPgogI2luY2x1ZGUgPHNobHdhcGkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
bHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKQotewotICAg
IHN0YXRpYyBQbHVnaW5EYXRhYmFzZSogcGx1Z2lucyA9IDA7Ci0gICAgCi0gICAgaWYgKCFwbHVn
aW5zKSB7Ci0gICAgICAgIHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2U7Ci0gICAgICAgIHBs
dWdpbnMtPnNldFBsdWdpblBhdGhzKFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0aHMo
KSk7Ci0gICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGx1
Z2luczsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0
IFN0cmluZyYgcGF0aCkKLXsKLSAgICBtX3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsKLSAgICBy
ZWZyZXNoKCk7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OnJlZnJlc2goKQoteyAgIAotICAg
IFBsdWdpblNldCBuZXdQbHVnaW5zOwotCi0gICAgYm9vbCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFs
c2U7Ci0KLSAgICAvLyBDcmVhdGUgYSBuZXcgc2V0IG9mIHBsdWdpbnMKLSAgICBuZXdQbHVnaW5z
ID0gZ2V0UGx1Z2luc0luUGF0aHMoKTsKLQotICAgIGlmICghbV9wbHVnaW5zLmlzRW1wdHkoKSkg
ewotICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKLQotICAgICAgICBQbHVn
aW5TZXQgcGx1Z2luc1RvVW5sb2FkID0gbV9wbHVnaW5zOwotCi0gICAgICAgIFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICBwbHVnaW5zVG9VbmxvYWQucmVtb3ZlKCppdCk7Ci0KLSAgICAg
ICAgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAgICAgbmV3UGx1Z2lucy5yZW1vdmUoKml0KTsKLQotICAgICAgICAvLyBVbmxvYWQgcGx1Z2lu
cwotICAgICAgICBlbmQgPSBwbHVnaW5zVG9VbmxvYWQuZW5kKCk7Ci0gICAgICAgIGZvciAoUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtX3BsdWdpbnMucmVtb3ZlKCppdCk7Ci0KLSAgICAg
ICAgLy8gQWRkIG5ldyBwbHVnaW5zCi0gICAgICAgIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7Ci0g
ICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOwot
Ci0gICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhcGx1Z2luc1RvVW5sb2FkLmlzRW1wdHkoKSB8
fCAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9wbHVnaW5z
ID0gbmV3UGx1Z2luczsKLSAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBu
ZXdQbHVnaW5zLmVuZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIG1f
cGx1Z2lucy5hZGQoKml0KTsKLQotICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIW5ld1BsdWdp
bnMuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIC8vIFJlZ2lzdGVyIHBsdWctaW4gTUlNRSB0eXBl
cwotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwot
ICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgLy8gR2V0IE1JTUUgdHlwZXMKLSAgICAgICAg
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1p
bWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOwotICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygp
LmJlZ2luKCk7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9pdCkgewotICAgICAgICAgICAgbV9y
ZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0KTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiBwbHVnaW5TZXRDaGFuZ2VkOwotfQotCi1WZWN0b3I8UGx1Z2luUGFja2Fn
ZSo+IFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5zKCkgY29uc3QKLXsKLSAgICBWZWN0b3I8UGx1Z2lu
UGFja2FnZSo+IHJlc3VsdDsKLQotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9wbHVnaW5zLmVuZCgpOwotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoKCppdCkuZ2V0KCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIGlubGlu
ZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBs
dWdpbnMpCiB7CiAgICAgSEtFWSBrZXk7CkBAIC00MzUsOTAgKzM1MSwxNCBAQCBWZWN0b3I8U3Ry
aW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsCiAgICAgcmV0dXJuIHBhdGhzOwogfQogCi1i
b29sIFBsdWdpbkRhdGFiYXNlOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQotewotICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVm
cmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIHJldHVybiAocmVm
cmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpOwotfQot
Ci1QbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2lu
UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiB7Ci0gICAgaWYgKG1pbWVUeXBlLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93
ZXIoKTsKICAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7Ci0gICAgUGx1
Z2luUGFja2FnZSogcGx1Z2luID0gMDsKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2lucy5lbmQoKTsKLQotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7Ci0gICAgICAgICAg
ICBwbHVnaW4gPSAoKml0KS5nZXQoKTsKLSAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGlu
IG91ciBvd24gcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgIGlmIChwbHVnaW4tPnBhcmVu
dERpcmVjdG9yeSgpID09IG91clBhdGgpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcGx1Z2luOwotfQotCi1TdHJpbmcgUGx1Z2luRGF0YWJh
c2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdAot
ewotICAgIGlmIChleHRlbnNpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsK
LSAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7Ci0gICAgU3RyaW5nIG1p
bWVUeXBlOwotICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IDA7CisgICAgaWYgKCFvdXJQYXRo
LmlzTnVsbCgpICYmICFwYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gb3VyUGF0aCA9PSBw
YXRoOwogCi0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5k
KCk7Ci0KLSAgICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBt
aW1lX2l0ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1p
bWVfZW5kOyArK21pbWVfaXQpIHsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBl
eHRlbnNpb25zID0gbWltZV9pdC0+c2Vjb25kOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkgewotICAgICAgICAg
ICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVfaXQtPmZpcnN0OwotICAgICAgICAgICAgICAgICAg
ICBwbHVnaW4gPSAoKml0KS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gcHJlZmVyIHBs
dWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICBp
ZiAocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSA9PSBvdXJQYXRoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVUeXBlOwotfQotCi1QbHVnaW5QYWNrYWdlKiBQ
bHVnaW5EYXRhYmFzZTo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5
cGUpCi17ICAgCi0gICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUo
bWltZVR5cGUpOwotICAgIFN0cmluZyBmaWxlbmFtZSA9IHVybC5zdHJpbmcoKTsKLSAgICAKLSAg
ICBpZiAoIXBsdWdpbikgewotICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwubGFzdFBhdGhD
b21wb25lbnQoKTsKLSAgICAgICAgaWYgKCFmaWxlbmFtZS5lbmRzV2l0aCgiLyIpKSB7Ci0gICAg
ICAgICAgICBpbnQgZXh0ZW5zaW9uUG9zID0gZmlsZW5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKLSAg
ICAgICAgICAgIGlmIChleHRlbnNpb25Qb3MgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICBTdHJp
bmcgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGV4dGVuc2lvblBvcyArIDEpOwotCi0g
ICAgICAgICAgICAgICAgbWltZVR5cGUgPSBNSU1FVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24p
OwotICAgICAgICAgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZJWE1FOiBpZiBubyBw
bHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IFdpbmRvd3MgZm9yIHRoZSBtaW1lIHR5cGUgCi0g
ICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0ZW5zaW9uLgotCi0gICAgcmV0dXJuIHBsdWdp
bjsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luUGFja2FnZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9Q
bHVnaW5QYWNrYWdlV2luLmNwcAkocmV2aXNpb24gMzA1NjQpCisrKyBXZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Niw0OSArNzcs
MzcgQEAgdm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZQogUGx1Z2luUGFj
a2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBs
YXN0TW9kaWZpZWQpCiAgICAgOiBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2U+KDApCiAgICAgLCBt
X3BhdGgocGF0aCkKKyAgICAsIG1fbW9kdWxlVmVyc2lvbigwKQogICAgICwgbV9tb2R1bGUoMCkK
ICAgICAsIG1fbGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCkKICAgICAsIG1faXNMb2FkZWQoZmFs
c2UpCiAgICAgLCBtX2xvYWRDb3VudCgwKQogICAgICwgbV9mcmVlTGlicmFyeVRpbWVyKHRoaXMs
ICZQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQpCi0gICAgLCBtX2ZpbGVWZXJz
aW9uTFMoMCkKLSAgICAsIG1fZmlsZVZlcnNpb25NUygwKQogewogICAgIG1fZmlsZU5hbWUgPSBT
dHJpbmcoUGF0aEZpbmRGaWxlTmFtZShtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKSkpOwogICAgIG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxlbmd0
aCgpIC0gbV9maWxlTmFtZS5sZW5ndGgoKSAtIDEpOwogfQogCi1pbnQgUGx1Z2luUGFja2FnZTo6
Y29tcGFyZUZpbGVWZXJzaW9uKHVuc2lnbmVkIGNvbXBhcmVWZXJzaW9uTVMsIHVuc2lnbmVkIGNv
bXBhcmVWZXJzaW9uTFMpIGNvbnN0CitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJz
aW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0CiB7
CiAgICAgLy8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRo
YW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4KICAgICAvLyB0aGUgcGFzc2VkIHZlcnNpb24K
LSAgICBpZiAobV9maWxlVmVyc2lvbk1TICE9IGNvbXBhcmVWZXJzaW9uTVMpCi0gICAgICAgIHJl
dHVybiBtX2ZpbGVWZXJzaW9uTVMgPiBjb21wYXJlVmVyc2lvbk1TID8gMSA6IC0xOwotICAgIGlm
IChtX2ZpbGVWZXJzaW9uTFMgIT0gY29tcGFyZVZlcnNpb25MUykKLSAgICAgICAgcmV0dXJuIG1f
ZmlsZVZlcnNpb25MUyA+IGNvbXBhcmVWZXJzaW9uTFMgPyAxIDogLTE7CisgICAgaWYgKG1fbW9k
dWxlVmVyc2lvbi5tb3N0U2lnICE9IGNvbXBhcmVWZXJzaW9uLm1vc3RTaWcpCisgICAgICAgIHJl
dHVybiBtX21vZHVsZVZlcnNpb24ubW9zdFNpZyA+IGNvbXBhcmVWZXJzaW9uLm1vc3RTaWcgPyAx
IDogLTE7CisgICAgaWYgKG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyAhPSBjb21wYXJlVmVyc2lv
bi5sZWFzdFNpZykKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyA+IGNv
bXBhcmVWZXJzaW9uLmxlYXN0U2lnID8gMSA6IC0xOwogICAgIHJldHVybiAwOwogfQogCi12b2lk
IFBsdWdpblBhY2thZ2U6OnN0b3JlRmlsZVZlcnNpb24oTFBWT0lEIHZlcnNpb25JbmZvRGF0YSkK
LXsKLSAgICBMUFZPSUQgaW5mbzsKLSAgICBVSU5UIGluZm9TaXplOwotICAgIGlmICghVmVyUXVl
cnlWYWx1ZSh2ZXJzaW9uSW5mb0RhdGEsIFRFWFQoIlxcIiksICZpbmZvLCAmaW5mb1NpemUpIHx8
IGluZm9TaXplIDwgc2l6ZW9mKFZTX0ZJWEVERklMRUlORk8pKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9maWxlVmVyc2lvbkxTID0gc3RhdGljX2Nhc3Q8VlNfRklYRURGSUxFSU5GTyo+KGluZm8p
LT5kd0ZpbGVWZXJzaW9uTFM7Ci0gICAgbV9maWxlVmVyc2lvbk1TID0gc3RhdGljX2Nhc3Q8VlNf
RklYRURGSUxFSU5GTyo+KGluZm8pLT5kd0ZpbGVWZXJzaW9uTVM7Ci19Ci0KIGJvb2wgUGx1Z2lu
UGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCgpCiB7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVMgPSAweDAwMDEwMDAwOwot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaWx2ZXJsaWdodFBsdWdpbk1pblJlcXVpcmVkVmVy
c2lvbkxTID0gMHg1MUJFMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJz
aW9uIHNsUGx1Z2luTWluUmVxdWlyZWQoMHg1MUJFMDAwMCwgMHgwMDAxMDAwMCApOwogCiAgICAg
aWYgKG5hbWUoKSA9PSAiU2lsdmVybGlnaHQgUGx1Zy1JbiIpIHsKICAgICAgICAgLy8gd29ya2Fy
b3VuZCBmb3IgPHJkYXI6Ly81NTU3Mzc5PiBDcmFzaCBpbiBTaWx2ZXJsaWdodCB3aGVuIG9wZW5p
bmcgbWljcm9zb2Z0LmNvbS4KICAgICAgICAgLy8gdGhlIGxhdGVzdCAxLjAgdmVyc2lvbiBvZiBT
aWx2ZXJsaWdodCBkb2VzIG5vdCByZXByb2R1Y2UgdGhpcyBjcmFzaCwgc28gYWxsb3cgaXQKICAg
ICAgICAgLy8gYW5kIGFueSBuZXdlciB2ZXJzaW9ucwotICAgICAgICBpZiAoY29tcGFyZUZpbGVW
ZXJzaW9uKHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTVMsIHNpbHZlcmxpZ2h0
UGx1Z2luTWluUmVxdWlyZWRWZXJzaW9uTFMpIDwgMCkKKyAgICAgICAgaWYgKGNvbXBhcmVGaWxl
VmVyc2lvbihzbFBsdWdpbk1pblJlcXVpcmVkKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9IGVsc2UgaWYgKGZpbGVOYW1lKCkgPT0gIm5wbW96YXguZGxsIikKICAgICAgICAg
Ly8gQnVnIDE1MjE3OiBNb3ppbGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMgYWJvdXQgbWlz
c2luZyB4cGNvbV9jb3JlLmRsbApAQCAtMTI3LDYgKzExNiw3MiBAQCBib29sIFBsdWdpblBhY2th
Z2U6OmlzUGx1Z2luQmxhY2tsaXN0ZWQoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFBs
dWdpblBhY2thZ2U6OmRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorewor
ICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gbGFzdEtub3duVW5sb2FkYWJs
ZVJlYWxQbGF5ZXJWZXJzaW9uKDB4MDAwQjBCMjQsIDB4MDAwNjAwMDApOworCisgICAgaWYgKG1p
bWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKKyAgICAgICAgLy8g
VGhlIGZsYXNoIHBsdWdpbiBvbmx5IHJlcXVlc3RzIHdpbmRvd2xlc3MgcGx1Z2lucyBpZiB3ZSBy
ZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1
aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1
aXJrVGhyb3R0bGVJbnZhbGlkYXRlKTsKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJr
VGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1
Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1Zyk7CisgICAgfQorCisgICAgaWYgKG5hbWUoKS5jb250
YWlucygiTWljcm9zb2Z0IikgJiYgbmFtZSgpLmNvbnRhaW5zKCJXaW5kb3dzIE1lZGlhIikpIHsK
KyAgICAgICAgLy8gVGhlIFdNUCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQ
X1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgICAgICAv
LyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUK
KyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwp
OworCisgICAgICAgIC8vIFdpbmRvd2xlc3MgbW9kZSBkb2VzIG5vdCB3b3JrIGF0IGFsbCB3aXRo
IHRoZSBXTVAgcGx1Z2luIHNvIGp1c3QgcmVtb3ZlIHRoYXQgcGFyYW1ldGVyIAorICAgICAgICAv
LyBhbmQgZG9uJ3QgcGFzcyBpdCB0byB0aGUgcGx1Zy1pbi4KKyAgICAgICAgbV9xdWlya3MuYWRk
KFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0pOworCisgICAgICAgIC8vIFdN
UCBoYXMgYSBtb2RhbCBtZXNzYWdlIGxvb3AgdGhhdCBpdCBlbnRlcnMgd2hlbmV2ZXIgd2UgY2Fs
bCBpdCBvcgorICAgICAgICAvLyBhc2sgaXQgdG8gcGFpbnQuIFRoaXMgbW9kYWwgbG9vcCBjYW4g
ZGVsaXZlciBtZXNzYWdlcyB0byBvdGhlcgorICAgICAgICAvLyB3aW5kb3dzIGluIFdlYktpdCBh
dCB0aW1lcyB3aGVuIHRoZXkgYXJlIG5vdCBleHBlY3RpbmcgdGhlbSAoZm9yCisgICAgICAgIC8v
IGV4YW1wbGUsIGRlbGl2ZXJpbmcgYSBXTV9QQUlOVCBtZXNzYWdlIGR1cmluZyBhIGxheW91dCks
IGFuZCB0aGVzZQorICAgICAgICAvLyBjYW4gY2F1c2UgY3Jhc2hlcy4KKyAgICAgICAgbV9xdWly
a3MuYWRkKFBsdWdpblF1aXJrSGFzTW9kYWxNZXNzYWdlTG9vcCk7CisgICAgfQorCisgICAgLy8g
VkxDIGhhbmdzIG9uIE5QUF9EZXN0cm95IGlmIHdlIGNhbGwgTlBQX1NldFdpbmRvdyB3aXRoIGEg
bnVsbCB3aW5kb3cgaGFuZGxlCisgICAgaWYgKG5hbWUoKSA9PSAiVkxDIE11bHRpbWVkaWEgUGx1
Z2luIikKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dI
YW5kbGVPbkRlc3Ryb3kpOworCisgICAgLy8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRzIHNpemUg
b24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6
ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBj
b3JyZWN0IHNpemUKKyAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2RpdngiKQorICAgICAgICBt
X3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7CisKKyAgICAv
LyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50
aW1lIGJpbmRpbmdzOyBpZiBhIHBsdWctaW4gY3JlYXRlcyBhbgorICAgIC8vIE5QT2JqZWN0IGFu
ZCBwYXNzZXMgaXQgdG8gYSBmdW5jdGlvbiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZWUgd2hhdCBy
b290IG9iamVjdCB0aGF0IE5QT2JqZWN0IGJlbG9uZ3MgdG8uCisgICAgLy8gVGh1cywgd2UgZG9u
J3Qga25vdyB0aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJlIGludmFsaWRhdGVkIHdoZW4gdGhlIHBs
dWctaW4gaW5zdGFuY2UgZ29lcyBhd2F5LgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4
Nzc0Mj4uCisgICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0IikK
KyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7CisKKyAg
ICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUpKSB7
CisgICAgICAgIC8vIEJlY2F1c2UgYSBzaW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11bHRp
cGxlIFZNcywgYW5kIHdlIGNhbm5vdCByZWxpYWJseSB1bmxvYWQgYQorICAgICAgICAvLyBKYXZh
IFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRoZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSByZWZl
cmVuY2UgdG8gb3VyIG9ubHkgVk0KKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9u
dFVubG9hZFBsdWdpbik7CisKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0
byBhbiBlbXB0eSByZWdpb24gY2F1c2VzIGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVtcwor
ICAgICAgICAvLyB3aXRoIHRoZSBKYXZhIHBsdWctaW4uCisgICAgICAgIG1fcXVpcmtzLmFkZChQ
bHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOworICAgIH0KKworICAg
IGlmIChtaW1lVHlwZSA9PSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIikgeworICAgICAg
ICAvLyBQcmV2ZW50IHRoZSBSZWFsIHBsdWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9j
IHJlY3Vyc2l2ZWx5LCBjYXVzaW5nIHRoZSBzdGFjayB0byBvdmVyZmxvdy4KKyAgICAgICAgbV9x
dWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNp
dmVseSk7CisKKyAgICAgICAgLy8gVW5sb2FkaW5nIFJlYWxQbGF5ZXIgdmVyc2lvbnMgbmV3ZXIg
dGhhbiAxMC41IGNhbiBjYXVzZSBhIGhhbmc7IHNlZSByZGFyOi8vNTY2OTMxNy4KKyAgICAgICAg
Ly8gRklYTUU6IFJlc3VtZSB1bmxvYWRpbmcgd2hlbiB0aGlzIGJ1ZyBpbiB0aGUgUmVhbFBsYXll
ciBQbHVnLUluIGlzIGZpeGVkIChyZGFyOi8vNTcxMzE0NykKKyAgICAgICAgaWYgKGNvbXBhcmVG
aWxlVmVyc2lvbihsYXN0S25vd25VbmxvYWRhYmxlUmVhbFBsYXllclZlcnNpb24pID4gMCkKKyAg
ICAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOworICAg
IH0KK30KKwogYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQogewogICAgIERXT1JEIHZl
cnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsKQEAgLTE0NCw3ICsxOTksMTIgQEAgYm9vbCBQbHVn
aW5QYWNrYWdlOjpmZXRjaEluZm8oKQogICAgIGlmIChtX25hbWUuaXNOdWxsKCkgfHwgbV9kZXNj
cmlwdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RvcmVGaWxl
VmVyc2lvbih2ZXJzaW9uSW5mb0RhdGEuZ2V0KCkpOworICAgIFZTX0ZJWEVERklMRUlORk8qIGlu
Zm87CisgICAgVUlOVCBpbmZvU2l6ZTsKKyAgICBpZiAoIVZlclF1ZXJ5VmFsdWUodmVyc2lvbklu
Zm9EYXRhLmdldCgpLCBURVhUKCJcXCIpLCAoTFBWT0lEKikgJmluZm8sICZpbmZvU2l6ZSkgfHwg
aW5mb1NpemUgPCBzaXplb2YoVlNfRklYRURGSUxFSU5GTykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBtX21vZHVsZVZlcnNpb24ubGVhc3RTaWcgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTFM7
CisgICAgbV9tb2R1bGVWZXJzaW9uLm1vc3RTaWcgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTVM7CiAK
ICAgICBpZiAoaXNQbHVnaW5CbGFja2xpc3RlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xNzMsNiArMjMzLDkgQEAgYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQogICAgICAg
ICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5sZWZ0KHBvcyk7CiAgICAgICAgIH0KIAor
ICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHF1aXJrcyBmb3IgdGhlIE1JTUUgdHlwZXMgdGhpcyBw
bHVnLWluIHN1cHBvcnRzCisJZGV0ZXJtaW5lUXVpcmtzKHR5cGUpOworCiAgICAgICAgIG1fbWlt
ZVRvRXh0ZW5zaW9ucy5hZGQodHlwZSwgZXh0ZW5zaW9uc1ZlY3Rvcik7CiAgICAgICAgIG1fbWlt
ZVRvRGVzY3JpcHRpb25zLmFkZCh0eXBlLCBkZXNjcmlwdGlvbik7CiAgICAgfQpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCShyZXZpc2lvbiAzMDU2NCkKKysrIFdlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCwx
MiArMzAwLDEyIEBAIFBsdWdpblZpZXc6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3MKICAg
ICB9CiAKICAgICBpZiAobWVzc2FnZSA9PSBtX2xhc3RNZXNzYWdlICYmCi0gICAgICAgIG1fcXVp
cmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1
cnNpdmVseSkgJiYgCisgICAgICAgIG1fcGx1Z2luLT5tX3F1aXJrcy5jb250YWlucyhQbHVnaW5R
dWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHkpICYmIAogICAgICAg
ICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MpCiAgICAgICAgIHJldHVybiAxOwogCiAgICAgaWYg
KG1lc3NhZ2UgPT0gV01fVVNFUiArIDEgJiYKLSAgICAgICAgbV9xdWlya3MuY29udGFpbnMoUGx1
Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcykpIHsKKyAgICAgICAgbV9wbHVn
aW4tPm1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVz
c2FnZXMpKSB7CiAgICAgICAgIGlmICghbV9tZXNzYWdlVGhyb3R0bGVyKQogICAgICAgICAgICAg
bV9tZXNzYWdlVGhyb3R0bGVyLnNldChuZXcgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbih0aGlz
KSk7CiAKQEAgLTM1OSw3ICszNTksNyBAQCB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdpbmRvdygp
IGNvbnN0CiAgICAgICAgIC8vIFRvIHByZXZlbnQgZmxhc2hlcyB3aGlsZSBzY3JvbGxpbmcsIHdl
IGRpc2FibGUgZHJhd2luZyBkdXJpbmcgdGhlIHdpbmRvdwogICAgICAgICAvLyB1cGRhdGUgcHJv
Y2VzcyBieSBjbGlwcGluZyB0aGUgd2luZG93IHRvIHRoZSB6ZXJvIHJlY3QuCiAKLSAgICAgICAg
Ym9vbCBjbGlwVG9aZXJvUmVjdCA9ICFtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0RvbnRD
bGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOworICAgICAgICBib29sIGNsaXBUb1plcm9SZWN0
ID0gIW1fcGx1Z2luLT5tX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJv
UmVjdFdoZW5TY3JvbGxpbmcpOwogCiAgICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewogICAg
ICAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0UmduKDAsIDAsIDAsIDApOwpAQCAtNzg1LDcgKzc4
NSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c3RvcCgpCiAKICAgICAvLyBDbGVhciB0aGUgd2luZG93
CiAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOwotICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+c2V0d2luZG93ICYmICFtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0RvbnRTZXRO
dWxsV2luZG93SGFuZGxlT25EZXN0cm95KSkgeworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+c2V0d2luZG93ICYmICFtX3BsdWdpbi0+bV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVp
cmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSkpIHsKICAgICAgICAgc2V0Q2FsbGlu
Z1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRv
dyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFs
c2UpOwpAQCAtODY4LDcgKzg2OCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3Qo
UGx1Z2luUmUKICAgICAgICAgLy8gaWYgdGhpcyBpcyBub3QgYSB0YXJnZXRlZCByZXF1ZXN0LCBj
cmVhdGUgYSBzdHJlYW0gZm9yIGl0LiBvdGhlcndpc2UsCiAgICAgICAgIC8vIGp1c3QgcGFzcyBp
dCBvZmYgdG8gdGhlIGxvYWRlcgogICAgICAgICBpZiAodGFyZ2V0RnJhbWVOYW1lLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgUGx1Z2luU3RyZWFtKiBzdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFt
KHRoaXMsIG1fcGFyZW50RnJhbWUsIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJj
ZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlE
YXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3F1aXJrcyk7Cisg
ICAgICAgICAgICBQbHVnaW5TdHJlYW0qIHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywg
bV9wYXJlbnRGcmFtZSwgcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVz
dCgpLCByZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSwg
cGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2luLT5tX3F1aXJrcyk7
CiAgICAgICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CiAgICAgICAgICAgICBzdHJlYW0t
PnN0YXJ0KCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC05MDAsNyArOTAwLDcgQEAgdm9pZCBQbHVn
aW5WaWV3OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZQogICAgICAgICBpZiAoZ2V0U3RyaW5nKHBh
cmVudEZyYW1lLT5zY3JpcHRQcm94eSgpLCByZXN1bHQsIHJlc3VsdFN0cmluZykpCiAgICAgICAg
ICAgICBjc3RyID0gcmVzdWx0U3RyaW5nLnV0ZjgoKTsKIAotICAgICAgICBSZWZQdHI8UGx1Z2lu
U3RyZWFtPiBzdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtKHRoaXMsIG1fcGFyZW50RnJhbWUsIHJl
cXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2Vu
ZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVnaW5G
dW5jcygpLCBpbnN0YW5jZSgpLCBtX3F1aXJrcyk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJl
YW0+IHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgbV9wYXJlbnRGcmFtZSwgcmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90
aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNz
KCksIGluc3RhbmNlKCksIG1fcGx1Z2luLT5tX3F1aXJrcyk7CiAgICAgICAgIG1fc3RyZWFtcy5h
ZGQoc3RyZWFtKTsKICAgICAgICAgc3RyZWFtLT5zZW5kSmF2YVNjcmlwdFN0cmVhbShyZXF1ZXN0
VVJMLCBjc3RyKTsKICAgICB9CkBAIC0xMjY5LDcgKzEyNjksNyBAQCBOUEVycm9yIFBsdWdpblZp
ZXc6OmRlc3Ryb3lTdHJlYW0oTlBTdHJlCiAKIGNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJB
Z2VudCgpCiB7Ci0gICAgaWYgKG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNNb3pp
bGxhVXNlckFnZW50KSkKKyAgICBpZiAobV9wbHVnaW4tPm1fcXVpcmtzLmNvbnRhaW5zKFBsdWdp
blF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KSkKICAgICAgICAgcmV0dXJuIE1vemlsbGFVc2Vy
QWdlbnQ7CiAKICAgICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpCkBAIC0xMzY1LDcgKzEzNjUs
NyBAQCB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogCiAgICAgICAgIFJF
Q1QgaW52YWxpZFJlY3Qocik7CiAgICAgICAgIEludmFsaWRhdGVSZWN0KG1fd2luZG93LCAmaW52
YWxpZFJlY3QsIEZBTFNFKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9xdWlya3MuY29u
dGFpbnMoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpKSB7CisgICAgICAgIGlmIChtX3Bs
dWdpbi0+bV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpKSB7
CiAgICAgICAgICAgICBtX2ludmFsaWRSZWN0cy5hcHBlbmQocik7CiAgICAgICAgICAgICBpZiAo
IW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgICAgICAgICAgbV9pbnZhbGlk
YXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMDAxKTsKQEAgLTE0NTUsNyArMTQ1NSw3IEBAIFBsdWdp
blZpZXc6On5QbHVnaW5WaWV3KCkKIAogICAgIG1fcGFyZW50RnJhbWUtPmNsZWFudXBTY3JpcHRP
YmplY3RzRm9yUGx1Z2luKHRoaXMpOwogCi0gICAgaWYgKG1fcGx1Z2luICYmICFtX3F1aXJrcy5j
b250YWlucyhQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pKQorICAgIGlmIChtX3BsdWdpbiAm
JiAhbV9wbHVnaW4tPm1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdp
bikpCiAgICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKIH0KIApAQCAtMTQ2Niw3MyArMTQ2Niw2
IEBAIHZvaWQgUGx1Z2luVmlldzo6ZGlzY29ubmVjdFN0cmVhbShQbHVnaW4KICAgICBtX3N0cmVh
bXMucmVtb3ZlKHN0cmVhbSk7CiB9CiAKLXZvaWQgUGx1Z2luVmlldzo6ZGV0ZXJtaW5lUXVpcmtz
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxh
c3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbkxTID0gMHgwMDBCMEIyNDsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbGFzdEtub3duVW5sb2FkYWJsZVJlYWxQbGF5ZXJWZXJzaW9u
TVMgPSAweDAwMDYwMDAwOwotCi0gICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNo
b2Nrd2F2ZS1mbGFzaCIpIHsKLSAgICAgICAgLy8gVGhlIGZsYXNoIHBsdWdpbiBvbmx5IHJlcXVl
c3RzIHdpbmRvd2xlc3MgcGx1Z2lucyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQK
LSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsK
LSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlKTsKLSAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2Fn
ZXMpOwotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1Zyk7
Ci0gICAgfQotCi0gICAgaWYgKG1fcGx1Z2luLT5uYW1lKCkuY29udGFpbnMoIk1pY3Jvc29mdCIp
ICYmIG1fcGx1Z2luLT5uYW1lKCkuY29udGFpbnMoIldpbmRvd3MgTWVkaWEiKSkgewotICAgICAg
ICAvLyBUaGUgV01QIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2lu
ZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCi0gICAgICAgIC8vIGNhbGwg
U2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQotICAgICAg
ICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7Ci0KLSAg
ICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRvZXMgbm90IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdN
UCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhhdCBwYXJhbWV0ZXIgCi0gICAgICAgIC8vIGFuZCBk
b24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWluLgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSk7Ci0KLSAgICAgICAgLy8gV01QIGhhcyBh
IG1vZGFsIG1lc3NhZ2UgbG9vcCB0aGF0IGl0IGVudGVycyB3aGVuZXZlciB3ZSBjYWxsIGl0IG9y
Ci0gICAgICAgIC8vIGFzayBpdCB0byBwYWludC4gVGhpcyBtb2RhbCBsb29wIGNhbiBkZWxpdmVy
IG1lc3NhZ2VzIHRvIG90aGVyCi0gICAgICAgIC8vIHdpbmRvd3MgaW4gV2ViS2l0IGF0IHRpbWVz
IHdoZW4gdGhleSBhcmUgbm90IGV4cGVjdGluZyB0aGVtIChmb3IKLSAgICAgICAgLy8gZXhhbXBs
ZSwgZGVsaXZlcmluZyBhIFdNX1BBSU5UIG1lc3NhZ2UgZHVyaW5nIGEgbGF5b3V0KSwgYW5kIHRo
ZXNlCi0gICAgICAgIC8vIGNhbiBjYXVzZSBjcmFzaGVzLgotICAgICAgICBtX3F1aXJrcy5hZGQo
UGx1Z2luUXVpcmtIYXNNb2RhbE1lc3NhZ2VMb29wKTsKLSAgICB9Ci0KLSAgICAvLyBWTEMgaGFu
Z3Mgb24gTlBQX0Rlc3Ryb3kgaWYgd2UgY2FsbCBOUFBfU2V0V2luZG93IHdpdGggYSBudWxsIHdp
bmRvdyBoYW5kbGUKLSAgICBpZiAobV9wbHVnaW4tPm5hbWUoKSA9PSAiVkxDIE11bHRpbWVkaWEg
UGx1Z2luIikKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5k
b3dIYW5kbGVPbkRlc3Ryb3kpOwotCi0gICAgLy8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRzIHNp
emUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMg
c2l6ZSwgc28KLSAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMg
YSBjb3JyZWN0IHNpemUKLSAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2RpdngiKQotICAgICAg
ICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7Ci0KLSAg
ICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSBpbiBvdXIgTlBS
dW50aW1lIGJpbmRpbmdzOyBpZiBhIHBsdWctaW4gY3JlYXRlcyBhbgotICAgIC8vIE5QT2JqZWN0
IGFuZCBwYXNzZXMgaXQgdG8gYSBmdW5jdGlvbiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZWUgd2hh
dCByb290IG9iamVjdCB0aGF0IE5QT2JqZWN0IGJlbG9uZ3MgdG8uCi0gICAgLy8gVGh1cywgd2Ug
ZG9uJ3Qga25vdyB0aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJlIGludmFsaWRhdGVkIHdoZW4gdGhl
IHBsdWctaW4gaW5zdGFuY2UgZ29lcyBhd2F5LgotICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0v
NTQ4Nzc0Mj4uCi0gICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0
IikKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0K
LSAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUp
KSB7Ci0gICAgICAgIC8vIEJlY2F1c2UgYSBzaW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11
bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCByZWxpYWJseSB1bmxvYWQgYQotICAgICAgICAvLyBK
YXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRoZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSBy
ZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJr
RG9udFVubG9hZFBsdWdpbik7Ci0KLSAgICAgICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lv
biB0byBhbiBlbXB0eSByZWdpb24gY2F1c2VzIGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVt
cwotICAgICAgICAvLyB3aXRoIHRoZSBKYXZhIHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFk
ZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOwotICAgIH0KLQot
ICAgIGlmIChtaW1lVHlwZSA9PSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIikgewotICAg
ICAgICAvLyBQcmV2ZW50IHRoZSBSZWFsIHBsdWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQ
cm9jIHJlY3Vyc2l2ZWx5LCBjYXVzaW5nIHRoZSBzdGFjayB0byBvdmVyZmxvdy4KLSAgICAgICAg
bV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1
cnNpdmVseSk7Ci0KLSAgICAgICAgLy8gVW5sb2FkaW5nIFJlYWxQbGF5ZXIgdmVyc2lvbnMgbmV3
ZXIgdGhhbiAxMC41IGNhbiBjYXVzZSBhIGhhbmc7IHNlZSByZGFyOi8vNTY2OTMxNy4KLSAgICAg
ICAgLy8gRklYTUU6IFJlc3VtZSB1bmxvYWRpbmcgd2hlbiB0aGlzIGJ1ZyBpbiB0aGUgUmVhbFBs
YXllciBQbHVnLUluIGlzIGZpeGVkIChyZGFyOi8vNTcxMzE0NykKLSAgICAgICAgaWYgKG1fcGx1
Z2luLT5jb21wYXJlRmlsZVZlcnNpb24obGFzdEtub3duVW5sb2FkYWJsZVJlYWxQbGF5ZXJWZXJz
aW9uTVMsIGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbkxTKSA+IDApCi0gICAg
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKLSAgICB9
Ci19Ci0KIHZvaWQgUGx1Z2luVmlldzo6c2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQogewogICAg
IEFTU0VSVChwYXJhbU5hbWVzLnNpemUoKSA9PSBwYXJhbVZhbHVlcy5zaXplKCkpOwpAQCAtMTU0
NCw3ICsxNDc3LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlYwog
ICAgIG1fcGFyYW1WYWx1ZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhz
aXplb2YoY2hhciopICogc2l6ZSkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7IGkrKykgewotICAgICAgICBpZiAobV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtSZW1v
dmVXaW5kb3dsZXNzVmlkZW9QYXJhbSkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UocGFyYW1OYW1lc1tp
XSwgIndpbmRvd2xlc3N2aWRlbyIpKQorICAgICAgICBpZiAobV9wbHVnaW4tPm1fcXVpcmtzLmNv
bnRhaW5zKFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0pICYmIGVxdWFsSWdu
b3JpbmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3aW5kb3dsZXNzdmlkZW8iKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIG1fcGFyYW1OYW1lc1twYXJhbUNvdW50XSA9IGNyZWF0ZVVU
RjhTdHJpbmcocGFyYW1OYW1lc1tpXSk7CkBAIC0xNTkwLDcgKzE1MjMsNiBAQCBQbHVnaW5WaWV3
OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtCiAgICAgbV9pbnN0YW5jZS0+bmRhdGEgPSB0
aGlzOwogCiAgICAgbV9taW1lVHlwZSA9IG1pbWVUeXBlLnV0ZjgoKTsKLSAgICBkZXRlcm1pbmVR
dWlya3MobWltZVR5cGUpOwogCiAgICAgc2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZh
bHVlcyk7CiAKQEAgLTE2NDQsNyArMTU3Niw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aW5pdCgpCiAg
ICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKICAgICB9CiAKLSAgICBpZiAoIW1fcXVpcmtz
LmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKQorICAgIGlmICgh
bV9wbHVnaW4tPm1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRv
d0NhbGwpKQogICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKIAogICAg
IG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OwpAQCAtMTY1NSw3ICsx
NTg3LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29ucwogICAgIEFT
U0VSVChtX2xvYWRNYW51YWxseSk7CiAgICAgQVNTRVJUKCFtX21hbnVhbFN0cmVhbSk7CiAKLSAg
ICBtX21hbnVhbFN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgbV9wYXJlbnRGcmFtZSwg
bV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnJlcXVlc3Qo
KSwgZmFsc2UsIDAsIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3F1aXJr
cyk7CisgICAgbV9tYW51YWxTdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtKHRoaXMsIG1fcGFyZW50
RnJhbWUsIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5y
ZXF1ZXN0KCksIGZhbHNlLCAwLCBwbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSwgaW5zdGFuY2UoKSwg
bV9wbHVnaW4tPm1fcXVpcmtzKTsKICAgICBtX21hbnVhbFN0cmVhbS0+c2V0TG9hZE1hbnVhbGx5
KHRydWUpOwogCiAgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVSZXNwb25zZSgwLCByZXNw
b25zZSk7CkBAIC0xNjg3LDcgKzE2MTksNyBAQCB2b2lkIFBsdWdpblZpZXc6OmRpZEZhaWwoY29u
c3QgUmVzb3VyY2VFCiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0Q2FsbGluZ1BsdWdpbihib29sIGIp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0hhc01vZGFs
TWVzc2FnZUxvb3ApKQorICAgIGlmICghbV9wbHVnaW4tPm1fcXVpcmtzLmNvbnRhaW5zKFBsdWdp
blF1aXJrSGFzTW9kYWxNZXNzYWdlTG9vcCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChi
KQo=
</data>
<flag name="review"
          id="8462"
          type_id="1"
          status="+"
          setter="jhoneycutt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19354</attachid>
            <date>2008-02-25 12:39:28 -0800</date>
            <delta_ts>2008-02-25 14:10:14 -0800</delta_ts>
            <desc>Updated patch to fix last minor issues</desc>
            <filename>webkit-shared-plugindatabase.patch</filename>
            <type>text/plain</type>
            <size>78749</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDU3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMDgtMDItMjUgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBKb24gSG9uZXljdXR0LgorCisgICAg
ICAgIEFkZCBQbHVnaW5JbmZvU3RvcmUuY3BwIGFuZCBuZXcgUGx1Z2luRGF0YWJhc2UuY3BwIHRv
IEdUSysgYW5kIFF0IHBvcnRzLgorICAgICAgICBSZW1vdmUgb2xkIFBsdWdJbkluZm9TdG9yZVF0
LmNwcCBhcyBpdCBpcyBvYnNvbGV0ZWQgYnkgc2hhcmVkIGNvZGUuCisgICAgICAgIEFkZCBQbHVn
aW5JbmZvU3RvcmUsIFBsdWdpbkRhdGFiYXNlLCBhbmQgUGx1Z2luU3RyZWFtIGZpbGVzIHRvIFd4
IGJ1aWxkLgorICAgICAgICBBZGQgbmV3IFBsdWdpbkRhdGFiYXNlLmNwcCB0byBXaW5kb3dzIGJ1
aWxkLgorICAgICAgICBBZGQgdGVtcG9yYXJ5IHN0dWJzIGZvciBuZXcgUGx1Z2luRGF0YWJhc2Ug
YW5kIFBsdWdpblBhY2thZ2UuCisgICAgICAgIHNoYXJlZCBjbGFzc2VzIHRvIEdUSyssIFF0LCBh
bmQgV3ggcG9ydHMuCisgICAgICAgIENvcHkgUGx1Z2luRGF0YWJhc2VXaW4uY3BwIHRvIFBsdWdp
bkRhdGFiYXNlLmNwcCB0byBwcmVzZXJ2ZSBoaXN0b3J5LgorICAgICAgICBSZW1vdmUgc2hhcmVk
IGNvZGUgZnJvbSBQbHVnaW5EYXRhYmFzZVdpbi5jcHAuCisgICAgICAgIFJlbW92ZSBXaW5kb3dz
LXNwZWNpZmljIGNvZGUgZnJvbSBQbHVnaW5EYXRhYmFzZS5jcHAuCisgICAgICAgIFVzZSBQbGF0
Zm9ybU1vZHVsZSBhbmQgUGxhdGZvcm1GaWxlVGltZSBpbnN0ZWFkIG9mIEhNT0RVTEUgYW5kIEZJ
TEVUSU1FLgorICAgICAgICBSZW1vdmUgZXh0cmFuZW91cyBQbHVnaW5QYWNrYWdlOjogZnJvbSBo
YXNoKCkgY2xhc3MgbWV0aG9kIHByb3RvdHlwZS4KKyAgICAgICAgU3Vic3VtZSBzdG9yZUZpbGVW
ZXJzaW9uIGludG8gUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvLgorICAgICAgICBBZGQgY3Jvc3Mt
cGxhdGZvcm0gUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHR5cGUgZGVmaW5pdGlvbi4KKyAgICAgICAg
VXNlIFBsYXRmb3JtTW9kdWxlVmVyc2lvbiB0byBzdG9yZSB0aGUgbW9kdWxlIHZlcnNpb24uCisg
ICAgICAgIFJlbmFtZSBtX2ZpbGVWZXJzaW9uW01MXVMgdG8gbV9tb2R1bGVWZXJzaW9uLgorICAg
ICAgICBDaGFuZ2UgY29tcGFyZUZpbGVWZXJzaW9uIHRvIHVzZSBQbGF0Zm9ybU1vZHVsZVZlcnNp
b24gYXMgdGhlIGFyZ3VtZW50LgorICAgICAgICBNb3ZlIFBsdWdpblZpZXc6OmRldGVybWluZVF1
aXJrcyBhbmQgbV9xdWlya3MgdG8gUGx1Z2luUGFja2FnZS4KKyAgICAgICAgVXBkYXRlZCBkZXRl
cm1pbmVRdWlya3MgZm9yIHRoZSBQbGF0Zm9ybU1vZHVsZVZlcnNpb24uCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
U291cmNlcy5ia2w6CisgICAgICAgICogd2ViY29yZS1iYXNlLmJrbDoKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBQbGF0Zm9ybS9GaWxlU3lzdGVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vd3gvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNw
cDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmg6CisgICAgICAgICogcGx1Z2lu
cy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luUGFj
a2FnZS5oOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwOgorICAg
ICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdp
blZpZXdXaW4uY3BwOgorCiAyMDA4LTAyLTI1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlz
aW9uIDMwNTcyKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAt
ODQ5LDYgKzg0OSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9U
aW1lci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuY3BwIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRh
YmFzZS5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwIFwKIAlXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1Rh
YmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgXApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZp
c2lvbiAzMDU3MikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTc4
OSw2ICs3ODksOCBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9UaW1lci5jcHAgXAogICAg
IHBsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAgICAgcGxhdGZvcm0vV2lkZ2V0LmNw
cCBcCisgICAgcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgXAorICAgIHBsdWdpbnMvUGx1Z2lu
SW5mb1N0b3JlLmNwcCBcCiAgICAgcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKICAgICByZW5k
ZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAgICAgcmVuZGVyaW5nL2JpZGkuY3BwIFwKQEAg
LTkzOSw3ICs5NDEsNiBAQCBxdC1wb3J0IHsKICAgICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybU1vdXNl
RXZlbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtU2NyZWVuUXQuY3BwIFwKICAg
ICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcm9sbEJhclF0LmNwcCBcCi0gICAgcGxhdGZvcm0vcXQv
UGx1Z0luSW5mb1N0b3JlUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9Qb3B1cE1lbnVRdC5jcHAg
XAogICAgIHBsYXRmb3JtL3F0L1FXZWJQb3B1cC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiAzMDU3MikKKysrIFdl
YkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC02MzMsNiArNjMzLDEy
IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgcGxh
dGZvcm0vc3FsL1NRTFZhbHVlLmNwcAogICAgIDwvc2V0PgogCisgICAgPHNldCBhcHBlbmQ9IjEi
IHZhcj0iV0VCQ09SRV9TT1VSQ0VTX1BMVUdJTlMiPgorICAgICAgICBwbHVnaW5zL1BsdWdpbkRh
dGFiYXNlLmNwcAorICAgICAgICBwbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5jcHAKKyAgICAgICAg
cGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisgICAgPC9zZXQ+CisKICAgICA8c2V0IGFwcGVuZD0i
MSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfR0lGIj4KICAgICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKICAgICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcApJbmRleDogV2ViQ29yZS93ZWJjb3JlLWJhc2Uu
YmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd2ViY29yZS1iYXNlLmJrbAkocmV2aXNpb24gMzA1
NzIpCisrKyBXZWJDb3JlL3dlYmNvcmUtYmFzZS5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYg
KzQ4LDcgQEAgd3hXZWJDb3JlIHBvcnQgQmFrZWZpbGUgcHJvamVjdCBmaWxlLgogICAgICAgICAk
KFdFQkNPUkVfU09VUkNFU19QQUdFKQogICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19ISVNUT1JZ
KQogICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19QTEFURk9STSkKKyAgICAgICAgJChXRUJDT1JF
X1NPVVJDRVNfUExVR0lOUykKICAgICAgICAgJChXRUJDT1JFX1NPVVJDRVNfUkVOREVSSU5HKQog
ICAgICAgICAkKFdFQkNPUkVfU09VUkNFU19TVE9SQUdFKQogICAgICAgICAkKFdFQkNPUkVfU09V
UkNFU19YQk0pCkBAIC05NSw2ICs5Niw3IEBAIHd4V2ViQ29yZSBwb3J0IEJha2VmaWxlIHByb2pl
Y3QgZmlsZS4KICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKTwvaW5jbHVkZT4KICAgICAgICAg
PGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0Q29yZTwvaW5jbHVkZT4KICAgICAgICAgPGlu
Y2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVyczwvaW5jbHVk
ZT4KKyAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5nczwv
aW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0Q29yZS9ranM8
L2luY2x1ZGU+CiAgICAgICAgIDxpbmNsdWRlPiQoV0tfUk9PVCkvSmF2YVNjcmlwdENvcmUvcGNy
ZTwvaW5jbHVkZT4KICAgICAgICAgPGluY2x1ZGU+JChXS19ST09UKS9KYXZhU2NyaXB0Q29yZS93
dGY8L2luY2x1ZGU+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJl
dmlzaW9uIDMwNTcyKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtNzk3Nyw2ICs3OTc3LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YWJhc2Uu
Y3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vRmlsZVN5c3RlbS5oCShyZXZpc2lvbiAzMDU3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
RmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwyNCBAQCB0eXBlZGVmIEhB
TkRMRSBQbGF0Zm9ybUZpbGVIYW5kbGU7CiB0eXBlZGVmIEZJTEVUSU1FIFBsYXRmb3JtRmlsZVRp
bWU7CiB0eXBlZGVmIEhNT0RVTEUgUGxhdGZvcm1Nb2R1bGU7CiBjb25zdCBQbGF0Zm9ybUZpbGVI
YW5kbGUgaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwor
CitzdHJ1Y3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHsKKyAgICB1bnNpZ25lZCBsZWFzdFNpZzsK
KyAgICB1bnNpZ25lZCBtb3N0U2lnOworCisgICAgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uKHVuc2ln
bmVkKQorICAgICAgICA6IGxlYXN0U2lnKDApCisgICAgICAgICwgbW9zdFNpZygwKQorICAgIHsK
KyAgICB9CisKKyAgICBQbGF0Zm9ybU1vZHVsZVZlcnNpb24odW5zaWduZWQgbHNiLCB1bnNpZ25l
ZCBtc2IpCisgICAgICAgIDogbGVhc3RTaWcobHNiKQorICAgICAgICAsIG1vc3RTaWcobXNiKQor
ICAgIHsKKyAgICB9CisKK307CiAjZWxzZQogdHlwZWRlZiBpbnQgUGxhdGZvcm1GaWxlSGFuZGxl
OwogdHlwZWRlZiB0aW1lX3QgUGxhdGZvcm1GaWxlVGltZTsKQEAgLTU5LDYgKzc3LDggQEAgdHlw
ZWRlZiBHTW9kdWxlKiBQbGF0Zm9ybU1vZHVsZTsKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1Nb2R1
bGU7CiAjZW5kaWYKIGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRsZSBpbnZhbGlkUGxhdGZvcm1GaWxl
SGFuZGxlID0gLTE7CisKK3R5cGVkZWYgdW5zaWduZWQgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uOwog
I2VuZGlmCiAKIGJvb2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMzA1NzIpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw4IEBACiAjaW5jbHVkZSAiR2xvYmFsSGlzdG9yeS5oIgogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsdWdp
bkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKQEAgLTU5LDEyICs2MCwxNCBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNl
SW50b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVD
aGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbkluZm8qIFBsdWdpbklu
Zm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z2luSW5mb1N0b3JlOjpwbHVn
aW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVN0cmluZyBQ
bHVnaW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQotYm9vbCBXZWJDb3Jl
OjpQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5n
JikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgV2ViQ29yZTo6cmVm
cmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KK1BsdWdpblNldCBQbHVn
aW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiBQbHVnaW5TZXQoKTsgfQorVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRl
ZmF1bHRQbHVnaW5QYXRocygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3RvcjxTdHJp
bmc+KCk7IH0KK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25z
dCBTdHJpbmcmKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorYm9v
bCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBm
YWxzZTsgfQordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIDA7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1
Z2luUGFja2FnZSYsIGNvbnN0IFBsdWdpblBhY2thZ2UmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiBmYWxzZTsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gZmFsc2U7IH0KK1BsdWdpblBhY2thZ2U6On5QbHVnaW5QYWNrYWdlKCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9CiAKIENvbG9yIFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKCkgeyBy
ZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBXZWJDb3JlOjpzZXRGb2N1c1JpbmdDb2xvckNoYW5n
ZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbHVn
SW5JbmZvU3RvcmVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbHVn
SW5JbmZvU3RvcmVRdC5jcHAJKHJldmlzaW9uIDMwNTcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9x
dC9QbHVnSW5JbmZvU3RvcmVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODkgKzAsMCBAQAot
LyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3Mg
cHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5
bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1v
cnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9y
ZS5oIgotI2luY2x1ZGUgInFkZWJ1Zy5oIgotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotI2lu
Y2x1ZGUgInF3ZWJvYmplY3RwbHVnaW5fcC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QbHVnaW5JbmZvKiBQbHVnaW5JbmZv
U3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkIGkpCi17Ci0g
ICAgLy9xRGVidWcoKSA8PCAiPj4+Pj4+Pj4+Pj4gUGx1Z2luSW5mb1N0b3JlOjpjcmVhdGVQbHVn
aW5JbmZvRm9yUGx1Z2luQXRJbmRleCgiIDw8IGkgPDwgIikiOwotCi0jaWYgUVRfVkVSU0lPTiA8
IDB4MDQwNDAwCi0gICAgUVdlYkZhY3RvcnlMb2FkZXIgKmxvYWRlciA9IFFXZWJGYWN0b3J5TG9h
ZGVyOjpzZWxmKCk7Ci0gICAgaWYgKGkgPiBsb2FkZXItPm1fcGx1Z2luSW5mby5jb3VudCgpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBRV2ViRmFjdG9yeUxvYWRlcjo6SW5mbyAmcWlu
Zm8gPSBsb2FkZXItPm1fcGx1Z2luSW5mby5hdChpKTsKLSAgICBQbHVnaW5JbmZvICppbmZvID0g
bmV3IFBsdWdpbkluZm87Ci0gICAgaW5mby0+bmFtZSA9IHFpbmZvLm5hbWU7Ci0gICAgaW5mby0+
ZGVzYyA9IHFpbmZvLmRlc2NyaXB0aW9uOwotICAgIGZvcmVhY2ggKGNvbnN0IFFXZWJGYWN0b3J5
TG9hZGVyOjpNaW1lSW5mbyAmbSwgcWluZm8ubWltZXMpIHsKLSAgICAgICAgTWltZUNsYXNzSW5m
byAqbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOwotICAgICAgICBtaW1lLT50eXBlID0gbS50eXBl
OwotICAgICAgICBtaW1lLT5wbHVnaW4gPSBpbmZvOwotICAgICAgICBmb3JlYWNoIChRU3RyaW5n
IGV4dCwgbS5leHRlbnNpb25zKQotICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMuYXBwZW5kKGV4
dCk7Ci0gICAgICAgIGluZm8tPm1pbWVzLmFwcGVuZChtaW1lKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGluZm87Ci0jZWxzZQotICAgIHJldHVybiAwOyAvLyAjIyMgRklYTUUKLSNlbmRpZgotfQotCi11
bnNpZ25lZCBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKLXsKLSNpZiBRVF9W
RVJTSU9OIDwgMHgwNDA0MDAKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj4+Pj4+Pj4+PiBQbHVnaW5J
bmZvU3RvcmU6OmNvdW50ID0iIDw8IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPmtleXMoKS5j
b3VudCgpOwotICAgIHJldHVybiBRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpLT5rZXlzKCkuY291
bnQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotU3RyaW5nIFBsdWdpbklu
Zm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17
Ci0gICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGlzIHN0dWJiZWQgb3V0IGFuZCBzaG91bGQgcmVh
bGx5IHJldHVybiB0aGUgbmFtZSBvZiBhIHBsdWctaW4gcGFja2FnZSBmb3IKLSAgICAvLyBhIGdp
dmVuIE1JTUUgdHlwZS4KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0gICAgCi1ib29sIFBsdWdp
bkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHN0cmlu
ZykKLXsKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICBib29sIHN1cHBvcnRzID0gUVdl
YkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+c3VwcG9ydHNNaW1lVHlwZShzdHJpbmcpOwotI2Vsc2UK
LSAgICBib29sIHN1cHBvcnRzID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAvL3FEZWJ1ZygpIDw8ICI+
Pj4+Pj4+Pj4+PiBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoIiA8PCBzdHJpbmcg
PDwgIikgPSIgPDwgc3VwcG9ydHM7Ci0gICAgcmV0dXJuIHN1cHBvcnRzOwotfQotCi12b2lkIHJl
ZnJlc2hQbHVnaW5zKGJvb2wpIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAz
MDU3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2Ug
U3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVl
bGxlciA8bXVlbGxlckBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSwgTHRkLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNTksNyArNjAs
OCBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5o
IgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5o
IgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAj
aW5jbHVkZSAiU3lzdGVtVGltZS5oIgpAQCAtNzAsNiArNzIsMTUgQEAKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKK1BsdWdpblNldCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luc0luUGF0
aHMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBQbHVnaW5TZXQoKTsgfQorVmVj
dG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0KK2Jvb2wgUGx1Z2luRGF0YWJh
c2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKSBjb25zdCB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8o
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQordW5zaWduZWQgUGx1Z2luUGFj
a2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK2Jvb2wg
UGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYsIGNvbnN0IFBsdWdpblBh
Y2thZ2UmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorYm9vbCBQbHVnaW5Q
YWNrYWdlOjpsb2FkKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK1BsdWdp
blBhY2thZ2U6On5QbHVnaW5QYWNrYWdlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkS2V5U2l6ZXMoKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAzMDU3MikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02Myw3ICs2NCw4IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVNjcm9sbEJhci5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgorI2luY2x1ZGUg
IlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogI2luY2x1ZGUg
IlBvcHVwTWVudS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGUuaCIKQEAgLTExNywxMSArMTE5LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dm9pZCBXZWJDb3JlOjpmaW5kV29yZEJvdW5kYXJ5KFVDaGFyIGNvbnN0KiBzdHIsaW50IGxlbixp
bnQgcG9zaXRpb24saW50KiBzdGFydCwgaW50KiBlbmQpIHsgbm90SW1wbGVtZW50ZWQoKTsgKnN0
YXJ0PXBvc2l0aW9uOyAqZW5kPXBvc2l0aW9uOyB9CiAKLVBsdWdpbkluZm8qUGx1Z2luSW5mb1N0
b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gMDt9Ci11bnNpZ25lZCBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbkNv
dW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBXZWJDb3Jl
OjpQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5n
JikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLVN0cmluZyBQbHVnaW5JbmZv
U3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQotdm9pZCBXZWJDb3JlOjpyZWZyZXNo
UGx1Z2lucyhib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK1BsdWdpblNldCBQbHVnaW5EYXRh
YmFzZTo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBQbHVnaW5TZXQoKTsgfQorVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQ
bHVnaW5QYXRocygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
IH0KK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJp
bmcmKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorYm9vbCBQbHVn
aW5QYWNrYWdlOjpmZXRjaEluZm8oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsg
fQordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFj
a2FnZSYsIGNvbnN0IFBsdWdpblBhY2thZ2UmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBm
YWxzZTsgfQorYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gZmFsc2U7IH0KK1BsdWdpblBhY2thZ2U6On5QbHVnaW5QYWNrYWdlKCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9CiAKIHZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQogCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDMwNDY1KQkoZnJvbSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNw
cDozMDQ2NSkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSA8
d2luZG93cy5oPgorI2luY2x1ZGUgPHNobHdhcGkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQbHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKQorewor
ICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZSogcGx1Z2lucyA9IDA7CisgICAgCisgICAgaWYgKCFw
bHVnaW5zKSB7CisgICAgICAgIHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2U7CisgICAgICAg
IHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luUGF0
aHMoKSk7CisgICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cGx1Z2luczsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6YWRkRXh0cmFQbHVnaW5QYXRoKGNv
bnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBtX3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsKKyAg
ICByZWZyZXNoKCk7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2U6OnJlZnJlc2goKQoreyAgIAor
ICAgIFBsdWdpblNldCBuZXdQbHVnaW5zOworCisgICAgYm9vbCBwbHVnaW5TZXRDaGFuZ2VkID0g
ZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgc2V0IG9mIHBsdWdpbnMKKyAgICBuZXdQbHVn
aW5zID0gZ2V0UGx1Z2luc0luUGF0aHMoKTsKKworICAgIGlmICghbV9wbHVnaW5zLmlzRW1wdHko
KSkgeworICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKKworICAgICAgICBQ
bHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkID0gbV9wbHVnaW5zOworCisgICAgICAgIFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICAgICBwbHVnaW5zVG9VbmxvYWQucmVtb3ZlKCppdCk7CisKKyAg
ICAgICAgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICAgICAgbmV3UGx1Z2lucy5yZW1vdmUoKml0KTsKKworICAgICAgICAvLyBVbmxvYWQgcGx1
Z2lucworICAgICAgICBlbmQgPSBwbHVnaW5zVG9VbmxvYWQuZW5kKCk7CisgICAgICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMucmVtb3ZlKCppdCk7CisKKyAg
ICAgICAgLy8gQWRkIG5ldyBwbHVnaW5zCisgICAgICAgIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7
CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQp
OworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhcGx1Z2luc1RvVW5sb2FkLmlzRW1wdHko
KSB8fCAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wbHVn
aW5zID0gbmV3UGx1Z2luczsKKyAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAg
IG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIW5ld1Bs
dWdpbnMuaXNFbXB0eSgpOworICAgIH0KKworICAgIC8vIFJlZ2lzdGVyIHBsdWctaW4gTUlNRSB0
eXBlcworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgp
OworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8gR2V0IE1JTUUgdHlwZXMKKyAgICAg
ICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCkt
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9u
cygpLmJlZ2luKCk7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9pdCkgeworICAgICAgICAgICAg
bV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBwbHVnaW5TZXRDaGFuZ2VkOworfQorCitWZWN0b3I8UGx1Z2luUGFj
a2FnZSo+IFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8UGx1
Z2luUGFja2FnZSo+IHJlc3VsdDsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoKCppdCkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBQbHVnaW5TZXQm
IHBsdWdpbnMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVu
S2V5RXhXKHJvb3RLZXksIEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1F
UkFURV9TVUJfS0VZUywgJmtleSk7CisKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1Mp
CisgICAgICAgIHJldHVybjsKKworICAgIHdjaGFyX3QgbmFtZVsxMjhdOworICAgIEZJTEVUSU1F
IGxhc3RNb2RpZmllZDsKKworICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgZm9yIChpbnQg
aSA9IDA7OyBpKyspIHsKKyAgICAgICAgRFdPUkQgbmFtZUxlbiA9IF9jb3VudG9mKG5hbWUpOwor
ICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAs
IDAsIDAsICZsYXN0TW9kaWZpZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VD
Q0VTUykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9Q
QVRIXTsKKyAgICAgICAgRFdPUkQgcGF0aFN0clNpemUgPSBzaXplb2YocGF0aFN0cik7CisgICAg
ICAgIERXT1JEIHR5cGU7CisKKyAgICAgICAgcmVzdWx0ID0gU0hHZXRWYWx1ZShrZXksIG5hbWUs
IFRFWFQoIlBhdGgiKSwgJnR5cGUsIChMUEJZVEUpcGF0aFN0ciwgJnBhdGhTdHJTaXplKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTIHx8IHR5cGUgIT0gUkVHX1NaKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBh
dHRyaWJ1dGVzOworICAgICAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRG
aWxlRXhJbmZvU3RhbmRhcmQsICZhdHRyaWJ1dGVzKSA9PSAwKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNy
ZWF0ZVBhY2thZ2UoU3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAt
IDEpLCBhdHRyaWJ1dGVzLmZ0TGFzdFdyaXRlVGltZSk7CisKKyAgICAgICAgaWYgKHBhY2thZ2Up
CisgICAgICAgICAgICBwbHVnaW5zLmFkZChwYWNrYWdlKTsKKyAgICB9CisKKyAgICBSZWdDbG9z
ZUtleShrZXkpOworfQorCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpbnNJblBh
dGhzKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vu
c2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOworICAgIFBs
dWdpblNldCBwbHVnaW5zOworCisgICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFM
VUU7CisgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7CisKKyAgICBQbHVnaW5QYWNr
YWdlKiBvbGRXTVBQbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2thZ2UqIG5ld1dNUFBsdWdpbiA9
IDA7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5Q
YXRocy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFN0cmlu
ZyBwYXR0ZXJuID0gKml0ICsgIlxcKiI7CisKKyAgICAgICAgaEZpbmQgPSBGaW5kRmlyc3RGaWxl
VyhwYXR0ZXJuLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZmaW5kRmlsZURhdGEp
OworCisgICAgICAgIGlmIChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChmaW5kRmlsZURh
dGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3RyaW5n
KGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7
CisgICAgICAgICAgICBpZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8fCAh
ZmlsZW5hbWUuZW5kc1dpdGgoImRsbCIsIGZhbHNlKSkgJiYKKyAgICAgICAgICAgICAgICAoIWVx
dWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dpdGgo
IlNob2Nrd2F2ZSAxMCIsIGZhbHNlKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBmaWxlbmFtZTsKKyAgICAg
ICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCkuc2Vjb25kKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgICAgIFBsdWdpblBhY2thZ2Uq
IHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBm
aW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1lKTsKKworICAgICAgICAgICAgaWYgKHBsdWdpblBh
Y2thZ2UpIHsKKyAgICAgICAgICAgICAgICBwbHVnaW5zLmFkZChwbHVnaW5QYWNrYWdlKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wZHNwbGF5
LmRsbCIpKQorICAgICAgICAgICAgICAgICAgICBvbGRXTVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdl
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAi
bnAtbXN3bXAuZGxsIikpCisgICAgICAgICAgICAgICAgICAgIG5ld1dNUFBsdWdpbiA9IHBsdWdp
blBhY2thZ2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSB3aGlsZSAoRmluZE5leHRGaWxl
VyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0gMCk7CisKKyAgICAgICAgRmluZENsb3NlKGhGaW5k
KTsKKyAgICB9CisKKyAgICBhZGRQbHVnaW5zRnJvbVJlZ2lzdHJ5KEhLRVlfTE9DQUxfTUFDSElO
RSwgcGx1Z2lucyk7CisgICAgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZX0NVUlJFTlRfVVNF
UiwgcGx1Z2lucyk7CisKKyAgICAvLyBJZiBib3RoIHRoZSBvbGQgYW5kIG5ldyBXTVAgcGx1Z2lu
IGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwgCisgICAgLy8gd2UgcmVtb3ZlIHRoZSBv
bGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2luZyB0aGUgb2xkIG9uZS4KKyAgICBpZiAo
b2xkV01QUGx1Z2luICYmIG5ld1dNUFBsdWdpbikKKyAgICAgICAgcGx1Z2lucy5yZW1vdmUob2xk
V01QUGx1Z2luKTsKKworICAgIHJldHVybiBwbHVnaW5zOworfQorCitzdGF0aWMgaW5saW5lIFZl
Y3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcp
Cit7CisgICAgVmVjdG9yPGludD4gdmVyc2lvbjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0g
MDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7CisgICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVy
c2lvblN0cmluZy5sZW5ndGgoKSkgeworICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBl
bmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAgIGlm
ICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9
PSAnXycpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHZlcnNpb25Db21w
b25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQ
b3MpLnRvSW50KCk7CisgICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOwor
CisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVy
c2lvbjsKK30KKworLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRo
YW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVj
dG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAgICAg
IGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0
aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEg
Y29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQbHVnaW5QYXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0
aHMpCit7CisgICAgLy8gRW51bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBkaXJlY3RvcmllcyBp
biB0aGUgcmVnaXN0cnkKKyAgICBIS0VZIGtleTsKKyAgICBMT05HIHJlc3VsdDsKKyAgICAKKyAg
ICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2Fy
ZVxcTW96aWxsYSIpLCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCA9PSBFUlJP
Ul9TVUNDRVNTKSB7CisgICAgICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICAgICAgRklMRVRJTUUg
bGFzdE1vZGlmaWVkOworCisgICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9m
KG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlF
eFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKG5hbWUs
IG5hbWVMZW4pICsgIlxcRXh0ZW5zaW9ucyI7CisgICAgICAgICAgICBIS0VZIGV4dGVuc2lvbnNL
ZXk7CisKKyAgICAgICAgICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKKyAgICAgICAgICAgIHJl
c3VsdCA9IFJlZ09wZW5LZXlFeChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCksIDAsIEtFWV9SRUFELCAmZXh0ZW5zaW9uc0tleSk7CisKKyAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIC8vIE5v
dyBnZXQgdGhlIHBsdWdpbnMgcGF0aAorICAgICAgICAgICAgICAgIFdDSEFSIHBsdWdpbnNQYXRo
U3RyW19NQVhfUEFUSF07CisgICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2luc1BhdGhTaXplID0g
c2l6ZW9mKHBsdWdpbnNQYXRoU3RyKTsKKyAgICAgICAgICAgICAgICBEV09SRCB0eXBlOworCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4dGVuc2lvbnNLZXksIFRF
WFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNQYXRoU3RyLCAmcGx1Z2lu
c1BhdGhTaXplKTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VT
UyAmJiB0eXBlID09IFJFR19TWikKKyAgICAgICAgICAgICAgICAgICAgcGF0aHMuYXBwZW5kKFN0
cmluZyhwbHVnaW5zUGF0aFN0ciwgcGx1Z2luc1BhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEp
KTsKKworICAgICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZWdDbG9zZUtleShrZXkpOwor
ICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdp
blBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIC8vIFRoZSBuZXcgV01QIEZpcmVm
b3ggcGx1Z2luIGlzIGluc3RhbGxlZCBpbiBcUEZpbGVzXFBsdWdpbnMgaWYgaXQgY2FuJ3QgZmlu
ZCBhbnkgRmlyZWZveCBpbnN0YWxscworICAgIFdDSEFSIHBsdWdpbkRpcmVjdG9yeVN0cltfTUFY
X1BBVEggKyAxXTsKKyAgICBEV09SRCBwbHVnaW5EaXJlY3RvcnlTaXplID0gOjpFeHBhbmRFbnZp
cm9ubWVudFN0cmluZ3NXKFRFWFQoIiVTWVNURU1EUklWRSVcXFBGaWxlc1xcUGx1Z2lucyIpLCBw
bHVnaW5EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHBsdWdpbkRpcmVjdG9yeVN0cikpOworCisgICAg
aWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0gX2Nv
dW50b2YocGx1Z2luRGlyZWN0b3J5U3RyKSkKKyAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhw
bHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7CisKKyAgICBEV09S
RCB0eXBlOworICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwor
ICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9u
RGlyZWN0b3J5U3RyKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xP
Q0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxNaWNyb3NvZnRcXE1lZGlhUGxheWVyIiksIFRF
WFQoIkluc3RhbGxhdGlvbiBEaXJlY3RvcnkiKSwgJnR5cGUsIChMUEJZVEUpJmluc3RhbGxhdGlv
bkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOworCisgICAgaWYgKHJl
c3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQorICAgICAgICBwYXRocy5h
cHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0
b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRRdWlja1RpbWVQbHVnaW5QYXRoKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBEV09S
RCB0eXBlOworICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwor
ICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9u
RGlyZWN0b3J5U3RyKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xP
Q0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxBcHBsZSBDb21wdXRlciwgSW5jLlxcUXVpY2tU
aW1lIiksIFRFWFQoIkluc3RhbGxEaXIiKSwgJnR5cGUsIChMUEJZVEUpJmluc3RhbGxhdGlvbkRp
cmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOworCisgICAgaWYgKHJlc3Vs
dCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKSB7CisgICAgICAgIFN0cmluZyBw
bHVnaW5EaXIgPSBTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxsYXRpb25E
aXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxccGx1Z2lucyI7CisgICAgICAg
IHBhdGhzLmFwcGVuZChwbHVnaW5EaXIpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lk
IGFkZEFkb2JlQWNyb2JhdFBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAg
IEhLRVkga2V5OworICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxf
TUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlciIpLCAwLCBLRVlf
UkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVk
OworCisgICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247CisgICAgU3RyaW5nIGxh
dGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOworCisgICAgLy8gRW51bWVyYXRlIHN1YmtleXMKKyAg
ICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9m
KG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4Vyhr
ZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKKworICAgICAg
ICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmluZyhTdHJp
bmcobmFtZSwgbmFtZUxlbikpOworICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGFjcm9iYXRW
ZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lvbikpIHsKKyAgICAgICAgICAgIGxhdGVzdEFjcm9i
YXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247CisgICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVy
c2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAg
RFdPUkQgdHlwZTsKKyAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQYXRoU3RyW19NQVhfUEFU
SF07CisgICAgICAgIERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgPSBzaXplb2YoYWNyb2Jh
dEluc3RhbGxQYXRoU3RyKTsKKworICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpbktleVBhdGgg
PSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxhdGVzdEFjcm9iYXRWZXJz
aW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgiOworICAgICAgICByZXN1bHQgPSBTSEdldFZhbHVl
KEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKSwgMCwgJnR5cGUsIChMUEJZVEUpYWNyb2JhdEluc3RhbGxQYXRoU3Ry
LCAmYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJP
Ul9TVUNDRVNTKSB7CisgICAgICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpblBhdGggPSBTdHJp
bmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9m
KFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7CisgICAgICAgICAgICBwYXRocy5hcHBlbmQoYWNy
b2JhdFBsdWdpblBhdGgpOworICAgICAgICB9CisgICAgfQorCisgICAgUmVnQ2xvc2VLZXkoa2V5
KTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc2FmYXJpUGx1Z2luc1BhdGgoKQoreworICAg
IFdDSEFSIG1vZHVsZUZpbGVOYW1lU3RyW19NQVhfUEFUSF07CisgICAgc3RhdGljIFN0cmluZyBw
bHVnaW5zUGF0aDsKKyAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5QYXRoID0gZmFsc2U7CisK
KyAgICBpZiAoIWNhY2hlZFBsdWdpblBhdGgpIHsKKyAgICAgICAgY2FjaGVkUGx1Z2luUGF0aCA9
IHRydWU7CisKKyAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9kdWxlRmlsZU5h
bWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7CisKKyAgICAgICAgaWYgKCFtb2R1
bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgpCisgICAgICAg
ICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNwZWMobW9kdWxl
RmlsZU5hbWVTdHIpKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIHBsdWdpbnNQ
YXRoID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMiOworICAgIH0KK2V4
aXQ6CisgICAgcmV0dXJuIHBsdWdpbnNQYXRoOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRk
TWFjcm9tZWRpYVBsdWdpblBhdGhzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBXQ0hB
UiBzeXN0ZW1EaXJlY3RvcnlTdHJbTUFYX1BBVEhdOworCisgICAgaWYgKEdldFN5c3RlbURpcmVj
dG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHN5c3RlbURpcmVjdG9yeVN0cikpID09
IDApCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJb
TUFYX1BBVEhdOworCisgICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lz
dGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcRmxhc2giKSk7CisgICAgcGF0aHMuYXBw
ZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOworCisgICAgUGF0aENvbWJpbmUobWFjcm9tZWRp
YURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hvY2t3
YXZlIDEwIikpOworICAgIHBhdGhzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKK30K
KworVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5QYXRocygpCit7
CisgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7CisgICAgU3RyaW5nIG91clBhdGggPSBzYWZhcmlQ
bHVnaW5zUGF0aCgpOworCisgICAgaWYgKCFvdXJQYXRoLmlzTnVsbCgpKQorICAgICAgICBwYXRo
cy5hcHBlbmQob3VyUGF0aCk7CisgICAgYWRkUXVpY2tUaW1lUGx1Z2luUGF0aChwYXRocyk7Cisg
ICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChwYXRocyk7CisgICAgYWRkTW96aWxsYVBsdWdp
blBhdGhzKHBhdGhzKTsKKyAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5QYXRoKHBhdGhz
KTsKKyAgICBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMocGF0aHMpOworCisgICAgcmV0dXJuIHBh
dGhzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMo
bWltZVR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZv
dW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAg
IHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1l
VHlwZSkpOworfQorCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dl
cigpOworICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKKyAgICBQbHVn
aW5QYWNrYWdlKiBwbHVnaW4gPSAwOworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9wbHVnaW5zLmVuZCgpOworCisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAo
KCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKKyAgICAgICAgICAg
IHBsdWdpbiA9ICgqaXQpLmdldCgpOworICAgICAgICAgICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4g
b3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQorICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50
RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW47Cit9CisKK1N0cmluZyBQbHVnaW5EYXRhYmFz
ZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0Cit7
CisgICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwor
ICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1BhdGgoKTsKKyAgICBTdHJpbmcgbWlt
ZVR5cGU7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gMDsKKworICAgIGZvciAoUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9l
bmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9F
eHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Cisg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNp
emUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVu
c2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBt
aW1lX2l0LT5maXJzdDsKKyAgICAgICAgICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7
CisgICAgICAgICAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lu
cyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0
b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBtaW1lVHlwZTsKK30KKworUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVn
aW4oY29uc3QgS1VSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBlKQoreyAgIAorICAgIFBsdWdpblBh
Y2thZ2UqIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBTdHJpbmcg
ZmlsZW5hbWUgPSB1cmwuc3RyaW5nKCk7CisgICAgCisgICAgaWYgKCFwbHVnaW4pIHsKKyAgICAg
ICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CisgICAgICAgIGlm
ICghZmlsZW5hbWUuZW5kc1dpdGgoIi8iKSkgeworICAgICAgICAgICAgaW50IGV4dGVuc2lvblBv
cyA9IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7CisgICAgICAgICAgICBpZiAoZXh0ZW5zaW9u
UG9zICE9IC0xKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IGZpbGVuYW1l
LnN1YnN0cmluZyhleHRlbnNpb25Qb3MgKyAxKTsKKworICAgICAgICAgICAgICAgIG1pbWVUeXBl
ID0gTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKKyAgICAgICAgICAgICAgICBwbHVn
aW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBGSVhNRTogaWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBx
dWVyeSBXaW5kb3dzIGZvciB0aGUgbWltZSB0eXBlIAorICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIGV4dGVuc2lvbi4KKworICAgIHJldHVybiBwbHVnaW47Cit9CisKK30KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVn
aW5zL1BsdWdpbkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMzA0NjUpCisrKyBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOCArMzAsNiBA
QAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBsdWdp
blBhY2thZ2UuaCIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDYgKzQ2LDE2IEBAIFBsdWdpbkRhdGFiYXNl
KiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGUKICAgICByZXR1cm4gcGx1Z2luczsKIH0KIAorYm9v
bCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJl
c2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICByZXR1cm4gKHJlZnJl
c2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKTsKK30KKwog
dm9pZCBQbHVnaW5EYXRhYmFzZTo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0
aCkKIHsKICAgICBtX3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsKQEAgLTExOSwzNDcgKzEyOCwx
OSBAQCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IFBsdWdpbkRhdGFiYXNlOjpwCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFkZFBsdWdpbnNGcm9tUmVnaXN0cnko
SEtFWSByb290S2V5LCBQbHVnaW5TZXQmIHBsdWdpbnMpCi17Ci0gICAgSEtFWSBrZXk7Ci0gICAg
SFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29mdHdhcmVcXE1vemls
bGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywgJmtleSk7Ci0KLSAgICBpZiAo
cmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdjaGFyX3Qg
bmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgIC8vIEVudW1lcmF0
ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKLSAgICAgICAgRFdPUkQgbmFt
ZUxlbiA9IF9jb3VudG9mKG5hbWUpOwotICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtl
eSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAg
IGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgcGF0aFN0clNpemUg
PSBzaXplb2YocGF0aFN0cik7Ci0gICAgICAgIERXT1JEIHR5cGU7Ci0KLSAgICAgICAgcmVzdWx0
ID0gU0hHZXRWYWx1ZShrZXksIG5hbWUsIFRFWFQoIlBhdGgiKSwgJnR5cGUsIChMUEJZVEUpcGF0
aFN0ciwgJnBhdGhTdHJTaXplKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNT
IHx8IHR5cGUgIT0gUkVHX1NaKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgV0lO
MzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyaWJ1dGVzOwotICAgICAgICBpZiAoR2V0RmlsZUF0
dHJpYnV0ZXNFeChwYXRoU3RyLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRyaWJ1dGVzKSA9
PSAwKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUGx1Z2luUGFja2FnZSogcGFj
a2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoU3RyaW5nKHBhdGhTdHIsIHBhdGhT
dHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpLCBhdHRyaWJ1dGVzLmZ0TGFzdFdyaXRlVGltZSk7
Ci0KLSAgICAgICAgaWYgKHBhY2thZ2UpCi0gICAgICAgICAgICBwbHVnaW5zLmFkZChwYWNrYWdl
KTsKLSAgICB9Ci0KLSAgICBSZWdDbG9zZUtleShrZXkpOwotfQotCi1QbHVnaW5TZXQgUGx1Z2lu
RGF0YWJhc2U6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KLSAgICBIYXNoU2V0PFN0cmluZz4g
dW5pcXVlRmlsZW5hbWVzOwotICAgIFBsdWdpblNldCBwbHVnaW5zOwotCi0gICAgSEFORExFIGhG
aW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0gICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmls
ZURhdGE7Ci0KLSAgICBQbHVnaW5QYWNrYWdlKiBvbGRXTVBQbHVnaW4gPSAwOwotICAgIFBsdWdp
blBhY2thZ2UqIG5ld1dNUFBsdWdpbiA9IDA7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFN0cmluZyBwYXR0ZXJuID0gKml0ICsgIlxcKiI7Ci0KLSAgICAg
ICAgaEZpbmQgPSBGaW5kRmlyc3RGaWxlVyhwYXR0ZXJuLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksICZmaW5kRmlsZURhdGEpOwotCi0gICAgICAgIGlmIChoRmluZCA9PSBJTlZBTElE
X0hBTkRMRV9WQUxVRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRvIHsKLSAg
ICAgICAgICAgIGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklC
VVRFX0RJUkVDVE9SWSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
U3RyaW5nIGZpbGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbihm
aW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7Ci0gICAgICAgICAgICBpZiAoKCFmaWxlbmFtZS5zdGFy
dHNXaXRoKCJucCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoImRsbCIsIGZhbHNlKSkg
JiYKLSAgICAgICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAiUGx1Z2lu
LmRsbCIpIHx8ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAxMCIsIGZhbHNlKSkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9ICppdCAr
ICJcXCIgKyBmaWxlbmFtZTsKLSAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVzLmFkZChm
dWxsUGF0aCkuc2Vjb25kKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAg
ICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpj
cmVhdGVQYWNrYWdlKGZ1bGxQYXRoLCBmaW5kRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1lKTsKLQot
ICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKLSAgICAgICAgICAgICAgICBwbHVnaW5z
LmFkZChwbHVnaW5QYWNrYWdlKTsKLQotICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShmaWxlbmFtZSwgIm5wZHNwbGF5LmRsbCIpKQotICAgICAgICAgICAgICAgICAgICBvbGRX
TVBQbHVnaW4gPSBwbHVnaW5QYWNrYWdlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKGZpbGVuYW1lLCAibnAtbXN3bXAuZGxsIikpCi0gICAgICAgICAgICAgICAg
ICAgIG5ld1dNUFBsdWdpbiA9IHBsdWdpblBhY2thZ2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgfSB3aGlsZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0gMCk7Ci0K
LSAgICAgICAgRmluZENsb3NlKGhGaW5kKTsKLSAgICB9Ci0KLSAgICBhZGRQbHVnaW5zRnJvbVJl
Z2lzdHJ5KEhLRVlfTE9DQUxfTUFDSElORSwgcGx1Z2lucyk7Ci0gICAgYWRkUGx1Z2luc0Zyb21S
ZWdpc3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGx1Z2lucyk7Ci0KLSAgICAvLyBJZiBib3RoIHRo
ZSBvbGQgYW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwg
Ci0gICAgLy8gd2UgcmVtb3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2lu
ZyB0aGUgb2xkIG9uZS4KLSAgICBpZiAob2xkV01QUGx1Z2luICYmIG5ld1dNUFBsdWdpbikKLSAg
ICAgICAgcGx1Z2lucy5yZW1vdmUob2xkV01QUGx1Z2luKTsKLQotICAgIHJldHVybiBwbHVnaW5z
OwotfQotCi1zdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25z
dCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCi17Ci0gICAgVmVjdG9yPGludD4gdmVyc2lvbjsKLQot
ICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKLSAgICB1bnNpZ25lZCBlbmRQb3M7Ci0gICAgCi0g
ICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgewotICAgICAgICBm
b3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyAr
K2VuZFBvcykKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8
IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhz
dGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7Ci0gICAgICAgIHZlcnNpb24uYXBw
ZW5kKHZlcnNpb25Db21wb25lbnQpOwotCi0gICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdmVyc2lvbjsKLX0KLQotLy8gVGhpcyByZXR1cm5zIHdoZXRo
ZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKLXN0YXRpYyBpbmxpbmUgYm9vbCBj
b21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8
aW50PiYgdmVyc2lvbkIpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25B
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25C
W2ldKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHZlcnNpb25B
W2ldIDwgdmVyc2lvbkJbaV0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBv
ciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQbHVnaW5Q
YXRocyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCi17Ci0gICAgLy8gRW51bWVyYXRlIGFsbCBNb3pp
bGxhIHBsdWdpbiBkaXJlY3RvcmllcyBpbiB0aGUgcmVnaXN0cnkKLSAgICBIS0VZIGtleTsKLSAg
ICBMT05HIHJlc3VsdDsKLSAgICAKLSAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NB
TF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96aWxsYSIpLCAwLCBLRVlfUkVBRCwgJmtleSk7
Ci0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIFdDSEFSIG5hbWVb
MTI4XTsKLSAgICAgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgICAgIC8vIEVudW1l
cmF0ZSBzdWJrZXlzCi0gICAgICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgICAg
ICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwg
MCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VD
Q0VTUykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgU3RyaW5nIGV4dGVu
c2lvbnNQYXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pICsgIlxcRXh0ZW5zaW9ucyI7Ci0gICAg
ICAgICAgICBIS0VZIGV4dGVuc2lvbnNLZXk7Ci0KLSAgICAgICAgICAgIC8vIFRyeSBvcGVuaW5n
IHRoZSBrZXkKLSAgICAgICAgICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChrZXksIGV4dGVuc2lv
bnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIEtFWV9SRUFELCAmZXh0
ZW5zaW9uc0tleSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykg
ewotICAgICAgICAgICAgICAgIC8vIE5vdyBnZXQgdGhlIHBsdWdpbnMgcGF0aAotICAgICAgICAg
ICAgICAgIFdDSEFSIHBsdWdpbnNQYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgICAgICAgICAg
RFdPUkQgcGx1Z2luc1BhdGhTaXplID0gc2l6ZW9mKHBsdWdpbnNQYXRoU3RyKTsKLSAgICAgICAg
ICAgICAgICBEV09SRCB0eXBlOwotCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlW
YWx1ZUV4KGV4dGVuc2lvbnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUp
JnBsdWdpbnNQYXRoU3RyLCAmcGx1Z2luc1BhdGhTaXplKTsKLQotICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19TWikKLSAgICAgICAgICAg
ICAgICAgICAgcGF0aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5zUGF0aFN0ciwgcGx1Z2luc1BhdGhT
aXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLQotICAgICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5
KGV4dGVuc2lvbnNLZXkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBSZWdDbG9zZUtleShrZXkpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFk
ZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpblBhdGgoVmVjdG9yPFN0cmluZz4mIHBhdGhzKQotewot
ICAgIC8vIFRoZSBuZXcgV01QIEZpcmVmb3ggcGx1Z2luIGlzIGluc3RhbGxlZCBpbiBcUEZpbGVz
XFBsdWdpbnMgaWYgaXQgY2FuJ3QgZmluZCBhbnkgRmlyZWZveCBpbnN0YWxscwotICAgIFdDSEFS
IHBsdWdpbkRpcmVjdG9yeVN0cltfTUFYX1BBVEggKyAxXTsKLSAgICBEV09SRCBwbHVnaW5EaXJl
Y3RvcnlTaXplID0gOjpFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKFRFWFQoIiVTWVNURU1EUklW
RSVcXFBGaWxlc1xcUGx1Z2lucyIpLCBwbHVnaW5EaXJlY3RvcnlTdHIsIF9jb3VudG9mKHBsdWdp
bkRpcmVjdG9yeVN0cikpOwotCi0gICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBs
dWdpbkRpcmVjdG9yeVNpemUgPD0gX2NvdW50b2YocGx1Z2luRGlyZWN0b3J5U3RyKSkKLSAgICAg
ICAgcGF0aHMuYXBwZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9y
eVNpemUgLSAxKSk7Ci0KLSAgICBEV09SRCB0eXBlOwotICAgIFdDSEFSIGluc3RhbGxhdGlvbkRp
cmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNp
emUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKLQotICAgIEhSRVNVTFQgcmVz
dWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxNaWNy
b3NvZnRcXE1lZGlhUGxheWVyIiksIFRFWFQoIkluc3RhbGxhdGlvbiBEaXJlY3RvcnkiKSwgJnR5
cGUsIChMUEJZVEUpJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVj
dG9yeVNpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0g
UkVHX1NaKQotICAgICAgICBwYXRocy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9y
eVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRRdWlja1RpbWVQbHVnaW5QYXRoKFZlY3RvcjxTdHJp
bmc+JiBwYXRocykKLXsKLSAgICBEV09SRCB0eXBlOwotICAgIFdDSEFSIGluc3RhbGxhdGlvbkRp
cmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNp
emUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKLQotICAgIEhSRVNVTFQgcmVz
dWx0ID0gU0hHZXRWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxBcHBs
ZSBDb21wdXRlciwgSW5jLlxcUXVpY2tUaW1lIiksIFRFWFQoIkluc3RhbGxEaXIiKSwgJnR5cGUs
IChMUEJZVEUpJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9y
eVNpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVH
X1NaKSB7Ci0gICAgICAgIFN0cmluZyBwbHVnaW5EaXIgPSBTdHJpbmcoaW5zdGFsbGF0aW9uRGly
ZWN0b3J5U3RyLCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEp
ICsgIlxccGx1Z2lucyI7Ci0gICAgICAgIHBhdGhzLmFwcGVuZChwbHVnaW5EaXIpOwotICAgIH0K
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpblBhdGgoVmVjdG9y
PFN0cmluZz4mIHBhdGhzKQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0ID0g
UmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFkb2JlXFxB
Y3JvYmF0IFJlYWRlciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBF
UlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXQ0hBUiBuYW1lWzEyOF07Ci0g
ICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2Jh
dFZlcnNpb247Ci0gICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOwotCi0gICAg
Ly8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewotICAgICAg
ICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKLSAgICAgICAg
cmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAm
bGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9
IHBhcnNlVmVyc2lvblN0cmluZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOwotICAgICAgICBpZiAo
Y29tcGFyZVZlcnNpb25zKGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lvbikpIHsK
LSAgICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247Ci0gICAg
ICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVu
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJp
bmcuaXNOdWxsKCkpIHsKLSAgICAgICAgRFdPUkQgdHlwZTsKLSAgICAgICAgV0NIQVIgYWNyb2Jh
dEluc3RhbGxQYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIGFjcm9iYXRJbnN0YWxs
UGF0aFNpemUgPSBzaXplb2YoYWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKLQotICAgICAgICBTdHJp
bmcgYWNyb2JhdFBsdWdpbktleVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRl
clxcIiArIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgiOwotICAg
ICAgICByZXN1bHQgPSBTSEdldFZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdp
bktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgJnR5cGUsIChMUEJZ
VEUpYWNyb2JhdEluc3RhbGxQYXRoU3RyLCAmYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSk7Ci0KLSAg
ICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBTdHJpbmcg
YWNyb2JhdFBsdWdpblBhdGggPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0
SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7Ci0gICAg
ICAgICAgICBwYXRocy5hcHBlbmQoYWNyb2JhdFBsdWdpblBhdGgpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgUmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc2Fm
YXJpUGx1Z2luc1BhdGgoKQotewotICAgIFdDSEFSIG1vZHVsZUZpbGVOYW1lU3RyW19NQVhfUEFU
SF07Ci0gICAgc3RhdGljIFN0cmluZyBwbHVnaW5zUGF0aDsKLSAgICBzdGF0aWMgYm9vbCBjYWNo
ZWRQbHVnaW5QYXRoID0gZmFsc2U7Ci0KLSAgICBpZiAoIWNhY2hlZFBsdWdpblBhdGgpIHsKLSAg
ICAgICAgY2FjaGVkUGx1Z2luUGF0aCA9IHRydWU7Ci0KLSAgICAgICAgaW50IG1vZHVsZUZpbGVO
YW1lTGVuID0gR2V0TW9kdWxlRmlsZU5hbWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFU
SCk7Ci0KLSAgICAgICAgaWYgKCFtb2R1bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxl
biA9PSBfTUFYX1BBVEgpCi0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICAgICAgaWYgKCFQ
YXRoUmVtb3ZlRmlsZVNwZWMobW9kdWxlRmlsZU5hbWVTdHIpKQotICAgICAgICAgICAgZ290byBl
eGl0OwotCi0gICAgICAgIHBsdWdpbnNQYXRoID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSAr
ICJcXFBsdWdpbnMiOwotICAgIH0KLWV4aXQ6Ci0gICAgcmV0dXJuIHBsdWdpbnNQYXRoOwotfQot
Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpblBhdGhzKFZlY3RvcjxTdHJp
bmc+JiBwYXRocykKLXsKLSAgICBXQ0hBUiBzeXN0ZW1EaXJlY3RvcnlTdHJbTUFYX1BBVEhdOwot
Ci0gICAgaWYgKEdldFN5c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIF9jb3VudG9m
KHN5c3RlbURpcmVjdG9yeVN0cikpID09IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFS
IG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFYX1BBVEhdOwotCi0gICAgUGF0aENvbWJpbmUobWFj
cm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxc
Rmxhc2giKSk7Ci0gICAgcGF0aHMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOwotCi0g
ICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3Ry
LCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikpOwotICAgIHBhdGhzLmFwcGVuZChtYWNy
b21lZGlhRGlyZWN0b3J5U3RyKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6
OmRlZmF1bHRQbHVnaW5QYXRocygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0gICAg
U3RyaW5nIG91clBhdGggPSBzYWZhcmlQbHVnaW5zUGF0aCgpOwotCi0gICAgaWYgKCFvdXJQYXRo
LmlzTnVsbCgpKQotICAgICAgICBwYXRocy5hcHBlbmQob3VyUGF0aCk7Ci0gICAgYWRkUXVpY2tU
aW1lUGx1Z2luUGF0aChwYXRocyk7Ci0gICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2luUGF0aChwYXRo
cyk7Ci0gICAgYWRkTW96aWxsYVBsdWdpblBhdGhzKHBhdGhzKTsKLSAgICBhZGRXaW5kb3dzTWVk
aWFQbGF5ZXJQbHVnaW5QYXRoKHBhdGhzKTsKLSAgICBhZGRNYWNyb21lZGlhUGx1Z2luUGF0aHMo
cGF0aHMpOwotCi0gICAgcmV0dXJuIHBhdGhzOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjpp
c01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIGlmICht
aW1lVHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3JlZ2lz
dGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2Ug
YW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJl
ZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpOwotfQotCiBQbHVnaW5QYWNrYWdlKiBQbHVn
aW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsK
ICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFN0
cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwotICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJp
UGx1Z2luc1BhdGgoKTsKICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAwOwogICAgIFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwogCiAgICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRh
aW5zKGtleSkpIHsKICAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOwotICAgICAgICAg
ICAgLy8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQotICAgICAg
ICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKKyAgICAgICAg
ICAgIGlmIChpc1ByZWZlcnJlZFBsdWdpblBhdGgocGx1Z2luLT5wYXJlbnREaXJlY3RvcnkoKSkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC00NzMsNyArMTU0
LDYgQEAgU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVucwogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAKICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cGx1Z2lucy5lbmQoKTsKLSAgICBTdHJpbmcgb3VyUGF0aCA9IHNhZmFyaVBsdWdpbnNQYXRoKCk7
CiAgICAgU3RyaW5nIG1pbWVUeXBlOwogICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IDA7CiAK
QEAgLTQ4Niw4ICsxNjYsNyBAQCBTdHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0
ZW5zCiAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0s
IGV4dGVuc2lvbikpIHsKICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0LT5m
aXJzdDsKICAgICAgICAgICAgICAgICAgICAgcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIHByZWZlciBwbHVnaW5zIGluIG91ciBvd24gcGx1Z2lucyBkaXJlY3Rv
cnkKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0g
b3VyUGF0aCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJlZmVycmVkUGx1Z2luUGF0aChw
bHVnaW4tPnBhcmVudERpcmVjdG9yeSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ5OCw3ICsxNzcsNyBAQCBT
dHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zCiB9CiAKIFBsdWdpblBhY2th
Z2UqIFBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBt
aW1lVHlwZSkKLXsgICAKK3sKICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBwbHVnaW5Gb3JN
SU1FVHlwZShtaW1lVHlwZSk7CiAgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLnN0cmluZygpOwog
ICAgIApJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHJldmlzaW9uIDMwNTcyKQorKysg
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NiwyMCArMjcsMTkgQEAKICNpZm5kZWYgUGx1Z2luRGF0YWJhc2VfSAogI2RlZmluZSBQbHVnaW5E
YXRhYmFzZV9ICiAKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KLQogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFj
a2FnZS5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKIAorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgRWxlbWVudDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBJbnRTaXplOwogICAg
IGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKLSAgICBjbGFzcyBQbHVnaW5W
aWV3OwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlPiwgUGx1Z2lu
UGFja2FnZUhhc2g+IFBsdWdpblNldDsKICAgCkBAIC01MSw4ICs1MSwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcGx1Z2lucygpIGNvbnN0
OwogICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpOwogICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAg
ICAgICAgYm9vbCBpc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25z
dDsKIAogICAgICAgICBQbHVnaW5QYWNrYWdlKiBmaW5kUGx1Z2luKGNvbnN0IEtVUkwmLCBTdHJp
bmcmIG1pbWVUeXBlKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0UGx1Z2luUGF0
aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1fcGx1Z2luUGF0aHMgPSBwYXRoczsg
fQogICAgICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdDsKSW5kZXg6IFdl
YkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblBhY2thZ2UuaAkocmV2aXNpb24gMzA1NzIpCisrKyBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luUGFja2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTIgKzI3LDExIEBACiAj
aWZuZGVmIFBsdWdpblBhY2thZ2VfSAogI2RlZmluZSBQbHVnaW5QYWNrYWdlX0gKIAotI2luY2x1
ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotCi0jaW5jbHVkZSAiVGltZXIu
aCIKLSNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUGx1Z2luUXVpcmtTZXQuaCIKKyNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJucGZ1
bmN0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IFBsdWdpblBhY2thZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlPiB7CiAgICAg
cHVibGljOgogICAgICAgICB+UGx1Z2luUGFja2FnZSgpOwotICAgICAgICBzdGF0aWMgUGx1Z2lu
UGFja2FnZSogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEZJTEVUSU1F
JiBsYXN0TW9kaWZpZWQpOworICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZSogY3JlYXRlUGFj
a2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFBsYXRmb3JtRmlsZVRpbWUmIGxhc3RNb2Rp
ZmllZCk7CiAgICAgICAgIAogICAgICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZTsgfQogICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rl
c2NyaXB0aW9uOyB9CkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9uczsgfQogICAgICAgICBjb25zdCBNSU1FVG9F
eHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9F
eHRlbnNpb25zOyB9CiAKLSAgICAgICAgdW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNv
bnN0OworICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2UmIGIpOwog
CiAgICAgICAgIGJvb2wgbG9hZCgpOwpAQCAtNjEsMzEgKzYxLDMxIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKIAogICAgICAgICBj
b25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdp
bkZ1bmNzOyB9CisgICAgICAgIGludCBjb21wYXJlRmlsZVZlcnNpb24oY29uc3QgUGxhdGZvcm1N
b2R1bGVWZXJzaW9uJikgY29uc3Q7CisgICAgICAgIFBsdWdpblF1aXJrU2V0IHF1aXJrcygpIGNv
bnN0IHsgcmV0dXJuIG1fcXVpcmtzOyB9CiAKLSAgICAgICAgaW50IGNvbXBhcmVGaWxlVmVyc2lv
bih1bnNpZ25lZCBjb21wYXJlVmVyc2lvbk1TLCB1bnNpZ25lZCBjb21wYXJlVmVyc2lvbkxTKSBj
b25zdDsKICAgICBwcml2YXRlOgotICAgICAgICBQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgRklMRVRJTUUmIGxhc3RNb2RpZmllZCk7CisgICAgICAgIFBsdWdpblBhY2th
Z2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBQbGF0Zm9ybUZpbGVUaW1lJiBsYXN0TW9kaWZp
ZWQpOwogICAgICAgICBib29sIGZldGNoSW5mbygpOwotICAgICAgICB2b2lkIHN0b3JlRmlsZVZl
cnNpb24oTFBWT0lEIHZlcnNpb25JbmZvRGF0YSk7CiAgICAgICAgIGJvb2wgaXNQbHVnaW5CbGFj
a2xpc3RlZCgpOworICAgICAgICB2b2lkIGRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKTsKIAogICAgICAgICBib29sIG1faXNMb2FkZWQ7CiAgICAgICAgIGludCBtX2xvYWRD
b3VudDsKIAotICAgICAgICBEV09SRCBtX2ZpbGVWZXJzaW9uTVM7Ci0gICAgICAgIERXT1JEIG1f
ZmlsZVZlcnNpb25MUzsKLQogICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKICAgICAgICAg
U3RyaW5nIG1fcGF0aDsKICAgICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CiAgICAgICAgIFN0cmlu
ZyBtX25hbWU7CiAgICAgICAgIFN0cmluZyBtX3BhcmVudERpcmVjdG9yeTsKIAorICAgICAgICBQ
bGF0Zm9ybU1vZHVsZVZlcnNpb24gbV9tb2R1bGVWZXJzaW9uOworCiAgICAgICAgIE1JTUVUb0Rl
c2NyaXB0aW9uc01hcCBtX21pbWVUb0Rlc2NyaXB0aW9uczsKICAgICAgICAgTUlNRVRvRXh0ZW5z
aW9uc01hcCBtX21pbWVUb0V4dGVuc2lvbnM7CiAKLSAgICAgICAgSE1PRFVMRSBtX21vZHVsZTsK
LSAgICAgICAgRklMRVRJTUUgbV9sYXN0TW9kaWZpZWQ7CisgICAgICAgIFBsYXRmb3JtTW9kdWxl
IG1fbW9kdWxlOworICAgICAgICBQbGF0Zm9ybUZpbGVUaW1lIG1fbGFzdE1vZGlmaWVkOwogCiAg
ICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247CiAgICAgICAgIE5QUGx1
Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKQEAgLTk0LDYgKzk0LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5U29vbigpOwogICAgICAgICB2b2lkIGZyZWVM
aWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5QYWNrYWdlPiopOwogICAgICAgICBUaW1lcjxQ
bHVnaW5QYWNrYWdlPiBtX2ZyZWVMaWJyYXJ5VGltZXI7CisKKyAgICAgICAgUGx1Z2luUXVpcmtT
ZXQgbV9xdWlya3M7CiAgICAgfTsKIAogICAgIHN0cnVjdCBQbHVnaW5QYWNrYWdlSGFzaCB7Cklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmgJKHJldmlzaW9uIDMwNTcyKQorKysgV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUg
IktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlBsdWdpblN0
cmVhbS5oIgotI2luY2x1ZGUgIlBsdWdpblF1aXJrU2V0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKQEAgLTE3
MSw3ICsxNzAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE93blB0cjxQbHVnaW5N
ZXNzYWdlVGhyb3R0bGVyV2luPiBtX21lc3NhZ2VUaHJvdHRsZXI7CiAKICAgICAgICAgdm9pZCB1
cGRhdGVXaW5kb3coKSBjb25zdDsKLSAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSk7CiAgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICAgICAgdm9pZCBoYW5kbGVL
ZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKQEAgLTE5NCw3ICsxOTIsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBtX3N0
cmVhbXM7CiAgICAgICAgIFZlY3RvcjxQbHVnaW5SZXF1ZXN0Kj4gbV9yZXF1ZXN0czsKIAotICAg
ICAgICBQbHVnaW5RdWlya1NldCBtX3F1aXJrczsKICAgICAgICAgYm9vbCBtX2lzV2luZG93ZWQ7
CiAgICAgICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50OwogICAgICAgICBib29sIG1faXNWaXNpYmxl
OwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAJKHJldmlz
aW9uIDMwNTcyKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw5OSArMjcsMTQgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogCi0jaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsdWdpblBhY2th
Z2UuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8c2hsd2FwaS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVBsdWdpbkRhdGFiYXNlKiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFs
bGVkUGx1Z2lucygpCi17Ci0gICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBwbHVnaW5zID0gMDsK
LSAgICAKLSAgICBpZiAoIXBsdWdpbnMpIHsKLSAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5E
YXRhYmFzZTsKLSAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2U6
OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKLSAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOwotICAg
IH0KLQotICAgIHJldHVybiBwbHVnaW5zOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjphZGRF
eHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIG1fcGx1Z2luUGF0aHMu
YXBwZW5kKHBhdGgpOwotICAgIHJlZnJlc2goKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6
cmVmcmVzaCgpCi17ICAgCi0gICAgUGx1Z2luU2V0IG5ld1BsdWdpbnM7Ci0KLSAgICBib29sIHBs
dWdpblNldENoYW5nZWQgPSBmYWxzZTsKLQotICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQgb2YgcGx1
Z2lucwotICAgIG5ld1BsdWdpbnMgPSBnZXRQbHVnaW5zSW5QYXRocygpOwotCi0gICAgaWYgKCFt
X3BsdWdpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVh
cigpOwotCi0gICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdpbnM7Ci0K
LSAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgp
OwotICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIHBsdWdpbnNUb1VubG9hZC5y
ZW1vdmUoKml0KTsKLQotICAgICAgICBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgICAgIGZv
ciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBuZXdQbHVnaW5zLnJlbW92ZSgqaXQpOwotCi0gICAg
ICAgIC8vIFVubG9hZCBwbHVnaW5zCi0gICAgICAgIGVuZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQo
KTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1Rv
VW5sb2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIG1fcGx1Z2lucy5y
ZW1vdmUoKml0KTsKLQotICAgICAgICAvLyBBZGQgbmV3IHBsdWdpbnMKLSAgICAgICAgZW5kID0g
bmV3UGx1Z2lucy5lbmQoKTsKLSAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBt
X3BsdWdpbnMuYWRkKCppdCk7Ci0KLSAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5z
VG9VbmxvYWQuaXNFbXB0eSgpIHx8ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBtX3BsdWdpbnMgPSBuZXdQbHVnaW5zOwotICAgICAgICBQbHVnaW5TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7Ci0gICAgICAgIGZvciAoUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOwotCi0gICAgICAgIHBsdWdpblNl
dENoYW5nZWQgPSAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgLy8gUmVnaXN0
ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAvLyBHZXQg
TUlNRSB0eXBlcwotICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7Ci0gICAgICAgIGZv
ciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+
bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0
KSB7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3Qp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpblNldENoYW5nZWQ7Ci19Ci0K
LVZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gUGx1Z2luRGF0YWJhc2U6OnBsdWdpbnMoKSBjb25zdAot
ewotICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcmVzdWx0OwotCi0gICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgcmVzdWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkUGx1Z2luc0Zyb21SZWdpc3RyeShIS0VZIHJv
b3RLZXksIFBsdWdpblNldCYgcGx1Z2lucykKIHsKICAgICBIS0VZIGtleTsKQEAgLTQzNSw5MCAr
MzUxLDE0IEBAIFZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGwKICAgICBy
ZXR1cm4gcGF0aHM7CiB9CiAKLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVSZWdpc3Rl
cmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5j
b250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIE5vIHBsdWdp
biB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFn
YWluCi0gICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRh
aW5zKG1pbWVUeXBlKSk7Ci19Ci0KLVBsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpwbHVn
aW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorYm9vbCBQbHVnaW5EYXRhYmFz
ZTo6aXNQcmVmZXJyZWRQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKIHsKLSAg
ICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFN0cmlu
ZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwogICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1
Z2luc1BhdGgoKTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAwOwotICAgIFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotCi0gICAgZm9yIChQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5z
KGtleSkpIHsKLSAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOwotICAgICAgICAgICAg
Ly8gcHJlZmVyIHBsdWdpbnMgaW4gb3VyIG93biBwbHVnaW5zIGRpcmVjdG9yeQotICAgICAgICAg
ICAgaWYgKHBsdWdpbi0+cGFyZW50RGlyZWN0b3J5KCkgPT0gb3VyUGF0aCkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW47Ci19Ci0K
LVN0cmluZyBQbHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5n
JiBleHRlbnNpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIFN0cmluZyBvdXJQYXRoID0gc2FmYXJpUGx1Z2luc1Bh
dGgoKTsKLSAgICBTdHJpbmcgbWltZVR5cGU7Ci0gICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0g
MDsKKyAgICBpZiAoIW91clBhdGguaXNOdWxsKCkgJiYgIXBhdGguaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBvdXJQYXRoID09IHBhdGg7CiAKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1p
bWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKLQotICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJl
Z2luKCk7IG1pbWVfaXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgewotICAgICAgICAgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgewot
ICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRl
bnNpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+Zmlyc3Q7
Ci0gICAgICAgICAgICAgICAgICAgIHBsdWdpbiA9ICgqaXQpLmdldCgpOwotICAgICAgICAgICAg
ICAgICAgICAvLyBwcmVmZXIgcGx1Z2lucyBpbiBvdXIgb3duIHBsdWdpbnMgZGlyZWN0b3J5Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4tPnBhcmVudERpcmVjdG9yeSgpID09IG91clBh
dGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWltZVR5cGU7Ci19
Ci0KLVBsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwm
IHVybCwgU3RyaW5nJiBtaW1lVHlwZSkKLXsgICAKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4g
PSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgU3RyaW5nIGZpbGVuYW1lID0gdXJs
LnN0cmluZygpOwotICAgIAotICAgIGlmICghcGx1Z2luKSB7Ci0gICAgICAgIFN0cmluZyBmaWxl
bmFtZSA9IHVybC5sYXN0UGF0aENvbXBvbmVudCgpOwotICAgICAgICBpZiAoIWZpbGVuYW1lLmVu
ZHNXaXRoKCIvIikpIHsKLSAgICAgICAgICAgIGludCBleHRlbnNpb25Qb3MgPSBmaWxlbmFtZS5y
ZXZlcnNlRmluZCgnLicpOwotICAgICAgICAgICAgaWYgKGV4dGVuc2lvblBvcyAhPSAtMSkgewot
ICAgICAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZXh0
ZW5zaW9uUG9zICsgMSk7Ci0KLSAgICAgICAgICAgICAgICBtaW1lVHlwZSA9IE1JTUVUeXBlRm9y
RXh0ZW5zaW9uKGV4dGVuc2lvbik7Ci0gICAgICAgICAgICAgICAgcGx1Z2luID0gcGx1Z2luRm9y
TUlNRVR5cGUobWltZVR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gRklYTUU6IGlmIG5vIHBsdWdpbiBjb3VsZCBiZSBmb3VuZCwgcXVlcnkgV2luZG93cyBm
b3IgdGhlIG1pbWUgdHlwZSAKLSAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24u
Ci0KLSAgICByZXR1cm4gcGx1Z2luOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogfQpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCShyZXZpc2lvbiAzMDU3MikK
KysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJv
cmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI4LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQ
bHVnaW5QYWNrYWdlLmgiCiAKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSAiUGx1Z2luRGVidWcuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIm5wcnVudGlt
ZV9pbXBsLmgiCkBAIC03Niw0OSArNzgsMzcgQEAgdm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGli
cmFyeVRpbWVyRmlyZQogUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IEZJTEVUSU1FJiBsYXN0TW9kaWZpZWQpCiAgICAgOiBSZWZDb3VudGVkPFBs
dWdpblBhY2thZ2U+KDApCiAgICAgLCBtX3BhdGgocGF0aCkKKyAgICAsIG1fbW9kdWxlVmVyc2lv
bigwKQogICAgICwgbV9tb2R1bGUoMCkKICAgICAsIG1fbGFzdE1vZGlmaWVkKGxhc3RNb2RpZmll
ZCkKICAgICAsIG1faXNMb2FkZWQoZmFsc2UpCiAgICAgLCBtX2xvYWRDb3VudCgwKQogICAgICwg
bV9mcmVlTGlicmFyeVRpbWVyKHRoaXMsICZQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVy
RmlyZWQpCi0gICAgLCBtX2ZpbGVWZXJzaW9uTFMoMCkKLSAgICAsIG1fZmlsZVZlcnNpb25NUygw
KQogewogICAgIG1fZmlsZU5hbWUgPSBTdHJpbmcoUGF0aEZpbmRGaWxlTmFtZShtX3BhdGguY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSkpOwogICAgIG1fcGFyZW50RGlyZWN0b3J5ID0g
bV9wYXRoLmxlZnQobV9wYXRoLmxlbmd0aCgpIC0gbV9maWxlTmFtZS5sZW5ndGgoKSAtIDEpOwog
fQogCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKHVuc2lnbmVkIGNvbXBh
cmVWZXJzaW9uTVMsIHVuc2lnbmVkIGNvbXBhcmVWZXJzaW9uTFMpIGNvbnN0CitpbnQgUGx1Z2lu
UGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYg
Y29tcGFyZVZlcnNpb24pIGNvbnN0CiB7CiAgICAgLy8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBs
dWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4KICAg
ICAvLyB0aGUgcGFzc2VkIHZlcnNpb24KLSAgICBpZiAobV9maWxlVmVyc2lvbk1TICE9IGNvbXBh
cmVWZXJzaW9uTVMpCi0gICAgICAgIHJldHVybiBtX2ZpbGVWZXJzaW9uTVMgPiBjb21wYXJlVmVy
c2lvbk1TID8gMSA6IC0xOwotICAgIGlmIChtX2ZpbGVWZXJzaW9uTFMgIT0gY29tcGFyZVZlcnNp
b25MUykKLSAgICAgICAgcmV0dXJuIG1fZmlsZVZlcnNpb25MUyA+IGNvbXBhcmVWZXJzaW9uTFMg
PyAxIDogLTE7CisgICAgaWYgKG1fbW9kdWxlVmVyc2lvbi5tb3N0U2lnICE9IGNvbXBhcmVWZXJz
aW9uLm1vc3RTaWcpCisgICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24ubW9zdFNpZyA+IGNv
bXBhcmVWZXJzaW9uLm1vc3RTaWcgPyAxIDogLTE7CisgICAgaWYgKG1fbW9kdWxlVmVyc2lvbi5s
ZWFzdFNpZyAhPSBjb21wYXJlVmVyc2lvbi5sZWFzdFNpZykKKyAgICAgICAgcmV0dXJuIG1fbW9k
dWxlVmVyc2lvbi5sZWFzdFNpZyA+IGNvbXBhcmVWZXJzaW9uLmxlYXN0U2lnID8gMSA6IC0xOwog
ICAgIHJldHVybiAwOwogfQogCi12b2lkIFBsdWdpblBhY2thZ2U6OnN0b3JlRmlsZVZlcnNpb24o
TFBWT0lEIHZlcnNpb25JbmZvRGF0YSkKLXsKLSAgICBMUFZPSUQgaW5mbzsKLSAgICBVSU5UIGlu
Zm9TaXplOwotICAgIGlmICghVmVyUXVlcnlWYWx1ZSh2ZXJzaW9uSW5mb0RhdGEsIFRFWFQoIlxc
IiksICZpbmZvLCAmaW5mb1NpemUpIHx8IGluZm9TaXplIDwgc2l6ZW9mKFZTX0ZJWEVERklMRUlO
Rk8pKQotICAgICAgICByZXR1cm47Ci0gICAgbV9maWxlVmVyc2lvbkxTID0gc3RhdGljX2Nhc3Q8
VlNfRklYRURGSUxFSU5GTyo+KGluZm8pLT5kd0ZpbGVWZXJzaW9uTFM7Ci0gICAgbV9maWxlVmVy
c2lvbk1TID0gc3RhdGljX2Nhc3Q8VlNfRklYRURGSUxFSU5GTyo+KGluZm8pLT5kd0ZpbGVWZXJz
aW9uTVM7Ci19Ci0KIGJvb2wgUGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCgpCiB7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNpbHZlcmxpZ2h0UGx1Z2luTWluUmVxdWlyZWRW
ZXJzaW9uTVMgPSAweDAwMDEwMDAwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaWx2ZXJs
aWdodFBsdWdpbk1pblJlcXVpcmVkVmVyc2lvbkxTID0gMHg1MUJFMDAwMDsKKyAgICBzdGF0aWMg
Y29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHNsUGx1Z2luTWluUmVxdWlyZWQoMHg1MUJFMDAw
MCwgMHgwMDAxMDAwMCk7CiAKICAgICBpZiAobmFtZSgpID09ICJTaWx2ZXJsaWdodCBQbHVnLUlu
IikgewogICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRhcjovLzU1NTczNzk+IENyYXNoIGlu
IFNpbHZlcmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQuY29tLgogICAgICAgICAvLyB0aGUg
bGF0ZXN0IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGlz
IGNyYXNoLCBzbyBhbGxvdyBpdAogICAgICAgICAvLyBhbmQgYW55IG5ld2VyIHZlcnNpb25zCi0g
ICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJl
ZFZlcnNpb25NUywgc2lsdmVybGlnaHRQbHVnaW5NaW5SZXF1aXJlZFZlcnNpb25MUykgPCAwKQor
ICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKHNsUGx1Z2luTWluUmVxdWlyZWQpIDwgMCkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxzZSBpZiAoZmlsZU5hbWUoKSA9PSAi
bnBtb3pheC5kbGwiKQogICAgICAgICAvLyBCdWcgMTUyMTc6IE1vemlsbGEgQWN0aXZlWCBjb250
cm9sIGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHhwY29tX2NvcmUuZGxsCkBAIC0xMjcsNiArMTE3
LDcyIEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCgKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgc3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVy
c2lvbiBsYXN0S25vd25VbmxvYWRhYmxlUmVhbFBsYXllclZlcnNpb24oMHgwMDBCMEIyNCwgMHgw
MDA2MDAwMCk7CisKKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZl
LWZsYXNoIikgeworICAgICAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVzdHMgd2lu
ZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgICAg
ICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOworICAgICAg
ICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOworICAgICAgICBt
X3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcyk7Cisg
ICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnKTsKKyAgICB9
CisKKyAgICBpZiAobmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAmJiBuYW1lKCkuY29udGFp
bnMoIldpbmRvd3MgTWVkaWEiKSkgeworICAgICAgICAvLyBUaGUgV01QIHBsdWdpbiBzZXRzIGl0
cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMg
aXRzIHNpemUsIHNvCisgICAgICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2
aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtE
ZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7CisKKyAgICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRv
ZXMgbm90IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhh
dCBwYXJhbWV0ZXIgCisgICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWlu
LgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9Q
YXJhbSk7CisKKyAgICAgICAgLy8gV01QIGhhcyBhIG1vZGFsIG1lc3NhZ2UgbG9vcCB0aGF0IGl0
IGVudGVycyB3aGVuZXZlciB3ZSBjYWxsIGl0IG9yCisgICAgICAgIC8vIGFzayBpdCB0byBwYWlu
dC4gVGhpcyBtb2RhbCBsb29wIGNhbiBkZWxpdmVyIG1lc3NhZ2VzIHRvIG90aGVyCisgICAgICAg
IC8vIHdpbmRvd3MgaW4gV2ViS2l0IGF0IHRpbWVzIHdoZW4gdGhleSBhcmUgbm90IGV4cGVjdGlu
ZyB0aGVtIChmb3IKKyAgICAgICAgLy8gZXhhbXBsZSwgZGVsaXZlcmluZyBhIFdNX1BBSU5UIG1l
c3NhZ2UgZHVyaW5nIGEgbGF5b3V0KSwgYW5kIHRoZXNlCisgICAgICAgIC8vIGNhbiBjYXVzZSBj
cmFzaGVzLgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtIYXNNb2RhbE1lc3NhZ2VM
b29wKTsKKyAgICB9CisKKyAgICAvLyBWTEMgaGFuZ3Mgb24gTlBQX0Rlc3Ryb3kgaWYgd2UgY2Fs
bCBOUFBfU2V0V2luZG93IHdpdGggYSBudWxsIHdpbmRvdyBoYW5kbGUKKyAgICBpZiAobmFtZSgp
ID09ICJWTEMgTXVsdGltZWRpYSBQbHVnaW4iKQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSk7CisKKyAgICAvLyBUaGUgRGl2
WCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFu
ZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4g
dGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgIGlmIChtaW1lVHlwZSA9PSAi
dmlkZW8vZGl2eCIpCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RT
ZXRXaW5kb3dDYWxsKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3Ig
YSBwcm9ibGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7IGlmIGEgcGx1Zy1pbiBjcmVhdGVz
IGFuCisgICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0byBhIGZ1bmN0aW9uIGl0J3Mgbm90
IHBvc3NpYmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRoYXQgTlBPYmplY3QgYmVsb25ncyB0
by4KKyAgICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQgdGhlIG9iamVjdCBzaG91bGQgYmUg
aW52YWxpZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5jZSBnb2VzIGF3YXkuCisgICAgLy8g
U2VlIDxyZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxp
Y2F0aW9uL3gtc2lsdmVybGlnaHQiKQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtE
b250VW5sb2FkUGx1Z2luKTsKKworICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBs
ZXRNSU1FVHlwZShtaW1lVHlwZSkpIHsKKyAgICAgICAgLy8gQmVjYXVzZSBhIHNpbmdsZSBwcm9j
ZXNzIGNhbm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQgd2UgY2Fubm90IHJlbGlhYmx5IHVu
bG9hZCBhCisgICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5vdCB1bmxvYWQgdGhlIEphdmEgcGx1
Z2luLCBvciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIgb25seSBWTQorICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKKworICAgICAgICAvLyBTZXR0
aW5nIHRoZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJlZ2lvbiBjYXVzZXMgYmFkIHNjcm9s
bGluZyByZXBhaW50IHByb2JsZW1zCisgICAgICAgIC8vIHdpdGggdGhlIEphdmEgcGx1Zy1pbi4K
KyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNj
cm9sbGluZyk7CisgICAgfQorCisgICAgaWYgKG1pbWVUeXBlID09ICJhdWRpby94LXBuLXJlYWxh
dWRpby1wbHVnaW4iKSB7CisgICAgICAgIC8vIFByZXZlbnQgdGhlIFJlYWwgcGx1Z2luIGZyb20g
Y2FsbGluZyB0aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHksIGNhdXNpbmcgdGhlIHN0YWNrIHRv
IG92ZXJmbG93LgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2FsbFduZFBy
b2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KTsKKworICAgICAgICAvLyBVbmxvYWRpbmcgUmVh
bFBsYXllciB2ZXJzaW9ucyBuZXdlciB0aGFuIDEwLjUgY2FuIGNhdXNlIGEgaGFuZzsgc2VlIHJk
YXI6Ly81NjY5MzE3LgorICAgICAgICAvLyBGSVhNRTogUmVzdW1lIHVubG9hZGluZyB3aGVuIHRo
aXMgYnVnIGluIHRoZSBSZWFsUGxheWVyIFBsdWctSW4gaXMgZml4ZWQgKHJkYXI6Ly81NzEzMTQ3
KQorICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKGxhc3RLbm93blVubG9hZGFibGVSZWFs
UGxheWVyVmVyc2lvbikgPiAwKQorICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJr
RG9udFVubG9hZFBsdWdpbik7CisgICAgfQorfQorCiBib29sIFBsdWdpblBhY2thZ2U6OmZldGNo
SW5mbygpCiB7CiAgICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJvSGFuZGxlOwpAQCAtMTQ0
LDcgKzIwMCwxMiBAQCBib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCiAgICAgaWYgKG1f
bmFtZS5pc051bGwoKSB8fCBtX2Rlc2NyaXB0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBzdG9yZUZpbGVWZXJzaW9uKHZlcnNpb25JbmZvRGF0YS5nZXQoKSk7Cisg
ICAgVlNfRklYRURGSUxFSU5GTyogaW5mbzsKKyAgICBVSU5UIGluZm9TaXplOworICAgIGlmICgh
VmVyUXVlcnlWYWx1ZSh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksIFRFWFQoIlxcIiksIChMUFZPSUQq
KSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNpemVvZihWU19GSVhFREZJTEVJTkZP
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyA9
IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKKyAgICBtX21vZHVsZVZlcnNpb24ubW9zdFNpZyA9IGlu
Zm8tPmR3RmlsZVZlcnNpb25NUzsKIAogICAgIGlmIChpc1BsdWdpbkJsYWNrbGlzdGVkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3Myw2ICsyMzQsOSBAQCBib29sIFBsdWdpblBhY2th
Z2U6OmZldGNoSW5mbygpCiAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmxl
ZnQocG9zKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIERldGVybWluZSB0aGUgcXVpcmtzIGZv
ciB0aGUgTUlNRSB0eXBlcyB0aGlzIHBsdWctaW4gc3VwcG9ydHMKKyAgICAgICAgZGV0ZXJtaW5l
UXVpcmtzKHR5cGUpOworCiAgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQodHlwZSwgZXh0
ZW5zaW9uc1ZlY3Rvcik7CiAgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZCh0eXBlLCBk
ZXNjcmlwdGlvbik7CiAgICAgfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwCShyZXZpc2lvbiAzMDU3MikKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCwxMiArMzAwLDEyIEBAIFBsdWdpblZpZXc6Ondu
ZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3MKICAgICB9CiAKICAgICBpZiAobWVzc2FnZSA9PSBt
X2xhc3RNZXNzYWdlICYmCi0gICAgICAgIG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9u
dENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseSkgJiYgCisgICAgICAgIG1fcGx1
Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVN
ZXNzYWdlUmVjdXJzaXZlbHkpICYmIAogICAgICAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2Mp
CiAgICAgICAgIHJldHVybiAxOwogCiAgICAgaWYgKG1lc3NhZ2UgPT0gV01fVVNFUiArIDEgJiYK
LSAgICAgICAgbV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNP
bmVNZXNzYWdlcykpIHsKKyAgICAgICAgbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdp
blF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMpKSB7CiAgICAgICAgIGlmICghbV9t
ZXNzYWdlVGhyb3R0bGVyKQogICAgICAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVyLnNldChuZXcg
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbih0aGlzKSk7CiAKQEAgLTM1OSw3ICszNTksNyBAQCB2
b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdpbmRvdygpIGNvbnN0CiAgICAgICAgIC8vIFRvIHByZXZl
bnQgZmxhc2hlcyB3aGlsZSBzY3JvbGxpbmcsIHdlIGRpc2FibGUgZHJhd2luZyBkdXJpbmcgdGhl
IHdpbmRvdwogICAgICAgICAvLyB1cGRhdGUgcHJvY2VzcyBieSBjbGlwcGluZyB0aGUgd2luZG93
IHRvIHRoZSB6ZXJvIHJlY3QuCiAKLSAgICAgICAgYm9vbCBjbGlwVG9aZXJvUmVjdCA9ICFtX3F1
aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcp
OworICAgICAgICBib29sIGNsaXBUb1plcm9SZWN0ID0gIW1fcGx1Z2luLT5xdWlya3MoKS5jb250
YWlucyhQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOwogCiAgICAg
ICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewogICAgICAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0
UmduKDAsIDAsIDAsIDApOwpAQCAtNzg1LDcgKzc4NSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c3Rv
cCgpCiAKICAgICAvLyBDbGVhciB0aGUgd2luZG93CiAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAw
OwotICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93ICYmICFtX3F1aXJr
cy5jb250YWlucyhQbHVnaW5RdWlya0RvbnRTZXROdWxsV2luZG93SGFuZGxlT25EZXN0cm95KSkg
eworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93ICYmICFtX3BsdWdp
bi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9u
RGVzdHJveSkpIHsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7
CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtODY4LDcgKzg2OCw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3QoUGx1Z2luUmUKICAgICAgICAgLy8gaWYgdGhp
cyBpcyBub3QgYSB0YXJnZXRlZCByZXF1ZXN0LCBjcmVhdGUgYSBzdHJlYW0gZm9yIGl0LiBvdGhl
cndpc2UsCiAgICAgICAgIC8vIGp1c3QgcGFzcyBpdCBvZmYgdG8gdGhlIGxvYWRlcgogICAgICAg
ICBpZiAodGFyZ2V0RnJhbWVOYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUGx1Z2luU3Ry
ZWFtKiBzdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtKHRoaXMsIG1fcGFyZW50RnJhbWUsIHJlcXVl
c3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5v
dGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5j
cygpLCBpbnN0YW5jZSgpLCBtX3F1aXJrcyk7CisgICAgICAgICAgICBQbHVnaW5TdHJlYW0qIHN0
cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgbV9wYXJlbnRGcmFtZSwgcmVxdWVzdC0+ZnJh
bWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90aWZpY2F0
aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGlu
c3RhbmNlKCksIG1fcGx1Z2luLT5xdWlya3MoKSk7CiAgICAgICAgICAgICBtX3N0cmVhbXMuYWRk
KHN0cmVhbSk7CiAgICAgICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7CiAgICAgICAgIH0gZWxzZSB7
CkBAIC05MDAsNyArOTAwLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdChQbHVn
aW5SZQogICAgICAgICBpZiAoZ2V0U3RyaW5nKHBhcmVudEZyYW1lLT5zY3JpcHRQcm94eSgpLCBy
ZXN1bHQsIHJlc3VsdFN0cmluZykpCiAgICAgICAgICAgICBjc3RyID0gcmVzdWx0U3RyaW5nLnV0
ZjgoKTsKIAotICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBzdHJlYW0gPSBuZXcgUGx1Z2lu
U3RyZWFtKHRoaXMsIG1fcGFyZW50RnJhbWUsIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5y
ZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5u
b3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3F1aXJr
cyk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJl
YW0odGhpcywgbV9wYXJlbnRGcmFtZSwgcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291
cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5vdGlm
eURhdGEoKSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2luLT5x
dWlya3MoKSk7CiAgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKICAgICAgICAgc3RyZWFt
LT5zZW5kSmF2YVNjcmlwdFN0cmVhbShyZXF1ZXN0VVJMLCBjc3RyKTsKICAgICB9CkBAIC0xMjY5
LDcgKzEyNjksNyBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmRlc3Ryb3lTdHJlYW0oTlBTdHJlCiAK
IGNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCiB7Ci0gICAgaWYgKG1fcXVpcmtz
LmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KSkKKyAgICBpZiAobV9w
bHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50
KSkKICAgICAgICAgcmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7CiAKICAgICBpZiAobV91c2VyQWdl
bnQuaXNOdWxsKCkpCkBAIC0xMzY1LDcgKzEzNjUsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmludmFs
aWRhdGVSZWN0KE5QUmVjdCogCiAgICAgICAgIFJFQ1QgaW52YWxpZFJlY3Qocik7CiAgICAgICAg
IEludmFsaWRhdGVSZWN0KG1fd2luZG93LCAmaW52YWxpZFJlY3QsIEZBTFNFKTsKICAgICB9IGVs
c2UgewotICAgICAgICBpZiAobV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtUaHJvdHRsZUlu
dmFsaWRhdGUpKSB7CisgICAgICAgIGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1
Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpKSB7CiAgICAgICAgICAgICBtX2ludmFsaWRSZWN0
cy5hcHBlbmQocik7CiAgICAgICAgICAgICBpZiAoIW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0aXZl
KCkpCiAgICAgICAgICAgICAgICAgbV9pbnZhbGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMDAx
KTsKQEAgLTE0NTUsNyArMTQ1NSw3IEBAIFBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkKIAogICAg
IG1fcGFyZW50RnJhbWUtPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHRoaXMpOwogCi0g
ICAgaWYgKG1fcGx1Z2luICYmICFtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0RvbnRVbmxv
YWRQbHVnaW4pKQorICAgIGlmIChtX3BsdWdpbiAmJiAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRh
aW5zKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbikpCiAgICAgICAgIG1fcGx1Z2luLT51bmxv
YWQoKTsKIH0KIApAQCAtMTQ2Niw3MyArMTQ2Niw2IEBAIHZvaWQgUGx1Z2luVmlldzo6ZGlzY29u
bmVjdFN0cmVhbShQbHVnaW4KICAgICBtX3N0cmVhbXMucmVtb3ZlKHN0cmVhbSk7CiB9CiAKLXZv
aWQgUGx1Z2luVmlldzo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVy
VmVyc2lvbkxTID0gMHgwMDBCMEIyNDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbGFzdEtu
b3duVW5sb2FkYWJsZVJlYWxQbGF5ZXJWZXJzaW9uTVMgPSAweDAwMDYwMDAwOwotCi0gICAgaWYg
KG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKLSAgICAgICAg
Ly8gVGhlIGZsYXNoIHBsdWdpbiBvbmx5IHJlcXVlc3RzIHdpbmRvd2xlc3MgcGx1Z2lucyBpZiB3
ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdp
blF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdp
blF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlKTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1
aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMpOwotICAgICAgICBtX3F1aXJrcy5hZGQo
UGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1Zyk7Ci0gICAgfQotCi0gICAgaWYgKG1fcGx1Z2lu
LT5uYW1lKCkuY29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG1fcGx1Z2luLT5uYW1lKCkuY29udGFp
bnMoIldpbmRvd3MgTWVkaWEiKSkgewotICAgICAgICAvLyBUaGUgV01QIHBsdWdpbiBzZXRzIGl0
cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMg
aXRzIHNpemUsIHNvCi0gICAgICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2
aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtE
ZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7Ci0KLSAgICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRv
ZXMgbm90IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhh
dCBwYXJhbWV0ZXIgCi0gICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWlu
LgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9Q
YXJhbSk7Ci0KLSAgICAgICAgLy8gV01QIGhhcyBhIG1vZGFsIG1lc3NhZ2UgbG9vcCB0aGF0IGl0
IGVudGVycyB3aGVuZXZlciB3ZSBjYWxsIGl0IG9yCi0gICAgICAgIC8vIGFzayBpdCB0byBwYWlu
dC4gVGhpcyBtb2RhbCBsb29wIGNhbiBkZWxpdmVyIG1lc3NhZ2VzIHRvIG90aGVyCi0gICAgICAg
IC8vIHdpbmRvd3MgaW4gV2ViS2l0IGF0IHRpbWVzIHdoZW4gdGhleSBhcmUgbm90IGV4cGVjdGlu
ZyB0aGVtIChmb3IKLSAgICAgICAgLy8gZXhhbXBsZSwgZGVsaXZlcmluZyBhIFdNX1BBSU5UIG1l
c3NhZ2UgZHVyaW5nIGEgbGF5b3V0KSwgYW5kIHRoZXNlCi0gICAgICAgIC8vIGNhbiBjYXVzZSBj
cmFzaGVzLgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtIYXNNb2RhbE1lc3NhZ2VM
b29wKTsKLSAgICB9Ci0KLSAgICAvLyBWTEMgaGFuZ3Mgb24gTlBQX0Rlc3Ryb3kgaWYgd2UgY2Fs
bCBOUFBfU2V0V2luZG93IHdpdGggYSBudWxsIHdpbmRvdyBoYW5kbGUKLSAgICBpZiAobV9wbHVn
aW4tPm5hbWUoKSA9PSAiVkxDIE11bHRpbWVkaWEgUGx1Z2luIikKLSAgICAgICAgbV9xdWlya3Mu
YWRkKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpOwotCi0gICAg
Ly8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5k
b3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KLSAgICAvLyBjYWxsIFNldFdp
bmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUKLSAgICBpZiAobWlt
ZVR5cGUgPT0gInZpZGVvL2RpdngiKQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtE
ZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmth
cm91bmQgZm9yIGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50aW1lIGJpbmRpbmdzOyBpZiBhIHBsdWct
aW4gY3JlYXRlcyBhbgotICAgIC8vIE5QT2JqZWN0IGFuZCBwYXNzZXMgaXQgdG8gYSBmdW5jdGlv
biBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZWUgd2hhdCByb290IG9iamVjdCB0aGF0IE5QT2JqZWN0
IGJlbG9uZ3MgdG8uCi0gICAgLy8gVGh1cywgd2UgZG9uJ3Qga25vdyB0aGF0IHRoZSBvYmplY3Qg
c2hvdWxkIGJlIGludmFsaWRhdGVkIHdoZW4gdGhlIHBsdWctaW4gaW5zdGFuY2UgZ29lcyBhd2F5
LgotICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4Nzc0Mj4uCi0gICAgaWYgKG1pbWVUeXBl
ID09ICJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0IikKLSAgICAgICAgbV9xdWlya3MuYWRkKFBs
dWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0KLSAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6
aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUpKSB7Ci0gICAgICAgIC8vIEJlY2F1c2UgYSBz
aW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCBy
ZWxpYWJseSB1bmxvYWQgYQotICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRo
ZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KLSAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0KLSAgICAg
ICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSByZWdpb24gY2F1c2Vz
IGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVtcwotICAgICAgICAvLyB3aXRoIHRoZSBKYXZh
IHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJv
UmVjdFdoZW5TY3JvbGxpbmcpOwotICAgIH0KLQotICAgIGlmIChtaW1lVHlwZSA9PSAiYXVkaW8v
eC1wbi1yZWFsYXVkaW8tcGx1Z2luIikgewotICAgICAgICAvLyBQcmV2ZW50IHRoZSBSZWFsIHBs
dWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vyc2l2ZWx5LCBjYXVzaW5nIHRo
ZSBzdGFjayB0byBvdmVyZmxvdy4KLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9u
dENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseSk7Ci0KLSAgICAgICAgLy8gVW5s
b2FkaW5nIFJlYWxQbGF5ZXIgdmVyc2lvbnMgbmV3ZXIgdGhhbiAxMC41IGNhbiBjYXVzZSBhIGhh
bmc7IHNlZSByZGFyOi8vNTY2OTMxNy4KLSAgICAgICAgLy8gRklYTUU6IFJlc3VtZSB1bmxvYWRp
bmcgd2hlbiB0aGlzIGJ1ZyBpbiB0aGUgUmVhbFBsYXllciBQbHVnLUluIGlzIGZpeGVkIChyZGFy
Oi8vNTcxMzE0NykKLSAgICAgICAgaWYgKG1fcGx1Z2luLT5jb21wYXJlRmlsZVZlcnNpb24obGFz
dEtub3duVW5sb2FkYWJsZVJlYWxQbGF5ZXJWZXJzaW9uTVMsIGxhc3RLbm93blVubG9hZGFibGVS
ZWFsUGxheWVyVmVyc2lvbkxTKSA+IDApCi0gICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtEb250VW5sb2FkUGx1Z2luKTsKLSAgICB9Ci19Ci0KIHZvaWQgUGx1Z2luVmlldzo6c2V0
UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzKQogewogICAgIEFTU0VSVChwYXJhbU5hbWVzLnNpemUoKSA9
PSBwYXJhbVZhbHVlcy5zaXplKCkpOwpAQCAtMTU0NCw3ICsxNDc3LDcgQEAgdm9pZCBQbHVnaW5W
aWV3OjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlYwogICAgIG1fcGFyYW1WYWx1ZXMgPSByZWludGVy
cHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOwogCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBpZiAobV9x
dWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSkgJiYg
ZXF1YWxJZ25vcmluZ0Nhc2UocGFyYW1OYW1lc1tpXSwgIndpbmRvd2xlc3N2aWRlbyIpKQorICAg
ICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVtb3ZlV2lu
ZG93bGVzc1ZpZGVvUGFyYW0pICYmIGVxdWFsSWdub3JpbmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3
aW5kb3dsZXNzdmlkZW8iKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIG1fcGFy
YW1OYW1lc1twYXJhbUNvdW50XSA9IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1OYW1lc1tpXSk7CkBA
IC0xNTkwLDcgKzE1MjMsNiBAQCBQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRG
cmFtCiAgICAgbV9pbnN0YW5jZS0+bmRhdGEgPSB0aGlzOwogCiAgICAgbV9taW1lVHlwZSA9IG1p
bWVUeXBlLnV0ZjgoKTsKLSAgICBkZXRlcm1pbmVRdWlya3MobWltZVR5cGUpOwogCiAgICAgc2V0
UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAKQEAgLTE2NDQsNyArMTU3Niw3
IEBAIHZvaWQgUGx1Z2luVmlldzo6aW5pdCgpCiAgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0g
MDsKICAgICB9CiAKLSAgICBpZiAoIW1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJG
aXJzdFNldFdpbmRvd0NhbGwpKQorICAgIGlmICghbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5z
KFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKQogICAgICAgICBzZXROUFdpbmRv
d1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKIAogICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9h
ZGVkU3VjY2Vzc2Z1bGx5OwpAQCAtMTY1NSw3ICsxNTg3LDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpk
aWRSZWNlaXZlUmVzcG9uc2UoY29ucwogICAgIEFTU0VSVChtX2xvYWRNYW51YWxseSk7CiAgICAg
QVNTRVJUKCFtX21hbnVhbFN0cmVhbSk7CiAKLSAgICBtX21hbnVhbFN0cmVhbSA9IG5ldyBQbHVn
aW5TdHJlYW0odGhpcywgbV9wYXJlbnRGcmFtZSwgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmFj
dGl2ZURvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSwgZmFsc2UsIDAsIHBsdWdpbigpLT5wbHVn
aW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3F1aXJrcyk7CisgICAgbV9tYW51YWxTdHJlYW0gPSBu
ZXcgUGx1Z2luU3RyZWFtKHRoaXMsIG1fcGFyZW50RnJhbWUsIG1fcGFyZW50RnJhbWUtPmxvYWRl
cigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCksIGZhbHNlLCAwLCBwbHVnaW4o
KS0+cGx1Z2luRnVuY3MoKSwgaW5zdGFuY2UoKSwgbV9wbHVnaW4tPnF1aXJrcygpKTsKICAgICBt
X21hbnVhbFN0cmVhbS0+c2V0TG9hZE1hbnVhbGx5KHRydWUpOwogCiAgICAgbV9tYW51YWxTdHJl
YW0tPmRpZFJlY2VpdmVSZXNwb25zZSgwLCByZXNwb25zZSk7CkBAIC0xNjg3LDcgKzE2MTksNyBA
QCB2b2lkIFBsdWdpblZpZXc6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFCiAKIHZvaWQgUGx1Z2lu
Vmlldzo6c2V0Q2FsbGluZ1BsdWdpbihib29sIGIpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3F1aXJr
cy5jb250YWlucyhQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApKQorICAgIGlmICghbV9w
bHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrSGFzTW9kYWxNZXNzYWdlTG9vcCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChiKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>