<?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>40607</bug_id>
          
          <creation_ts>2010-06-14 20:01:29 -0700</creation_ts>
          <short_desc>Implement the sync DB API in workers</short_desc>
          <delta_ts>2010-07-22 13:15:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>41216</dependson>
          <blocked>34990</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Dumitru Daniliuc">dumi</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>aroben</cc>
    
    <cc>beidson</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ericu</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>levin</cc>
    
    <cc>michaeln</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>238212</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-14 20:01:29 -0700</bug_when>
    <thetext>Implement the sync DB API in workers. If there&apos;s another bug opened for this already, please merge them -- I couldn&apos;t find any.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238221</commentid>
    <comment_count>1</comment_count>
      <attachid>58744</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-14 20:29:46 -0700</bug_when>
    <thetext>Created attachment 58744
patch #1: implement DatabaseSync::openDatabaseSync()

All new code in DatabaseSync.cpp was copy-pasted from Database.cpp (with a couple of trivial changes, such as removing calls to DatabaseThread).

The plan is to:
1. Implement DatabaseSync.cpp one &quot;feature&quot; at a time (openDatabaseSync(), transaction(), clean up everything properly when the worker shuts down in the middle of a DB operation, etc.)
2. Copy-paste code from Database.cpp to DatabaseSync.cpp and modify it as needed, in order to make each feature in DatabaseSync.cpp work.
3. Once feature &apos;n&apos; is landed in DatabaseSync.cpp, work on feature &apos;n + 1&apos;, and in parallel work on moving the duplicate code introduced in feature &apos;n&apos; to AbstractDatabase.

I think the advantages of this approach are:
1. We _know_ what code is duplicated when moving it from Database/DatabaseSync to AbstractDatabase, instead of guessing.
2. Moving duplicate code to AbstractDatabase doesn&apos;t block the DatabaseSync implementation; instead, it can be done in parallel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238222</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-14 20:30:25 -0700</bug_when>
    <thetext>Attachment 58744 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/storage/DatabaseSync.cpp:343:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238226</commentid>
    <comment_count>3</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-14 20:34:17 -0700</bug_when>
    <thetext>&gt; WebCore/storage/DatabaseSync.cpp:343:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]

This code is copy-pasted from Database.cpp. I think it might be easier to review this patch if the new code in DatabaseSync matches exactly the existing one in Database. I can fix this style problem when moving this common code to AbstractDatabase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239315</commentid>
    <comment_count>4</comment_count>
      <attachid>58972</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-17 03:05:46 -0700</bug_when>
    <thetext>Created attachment 58972
patch #2: Add the SQLException class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239324</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-17 03:41:30 -0700</bug_when>
    <thetext>Attachment 58972 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/bindings/js/JSExceptionBase.cpp:39:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 7 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239327</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-17 04:07:51 -0700</bug_when>
    <thetext>Attachment 58972 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3278278</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239588</commentid>
    <comment_count>7</comment_count>
      <attachid>59039</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-17 14:43:51 -0700</bug_when>
    <thetext>Created attachment 59039
patch #2: Add the SQLException class

Same patch, converted line endings in JSExceptionBase.cpp from CRLF to LF.

The Chromium bot fails because apparently it misses a step that regenerates .h/.cpp files from .idl files. I tried the patch in a local Chromium client and had no issues with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239616</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-17 16:10:06 -0700</bug_when>
    <thetext>Attachment 59039 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3295338</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239645</commentid>
    <comment_count>9</comment_count>
      <attachid>59039</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-17 16:57:04 -0700</bug_when>
    <thetext>Comment on attachment 59039
patch #2: Add the SQLException class

WebCore/bindings/js/JSExceptionBase.cpp:65
 +          return reinterpret_cast&lt;ExceptionBase*&gt;(pathException);
Why does this diff look so funny?

WebCore/page/DOMWindow.idl:733
 +          attribute SQLExceptionConstructor SQLException;
Do you need to update the results of the tests that enumerate the global object for all the ports?

WebCore/storage/SQLException.h:7
 +   * version 2 of the License, or (at your option) any later version.
2.0?  I thought we used 2.1..  Google usually contributes under BSD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239646</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-17 16:57:33 -0700</bug_when>
    <thetext>Did you run the tests?  That patch is likely to need updated expectations for some.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239664</commentid>
    <comment_count>11</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-17 17:19:49 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 59039 [details])
&gt; WebCore/bindings/js/JSExceptionBase.cpp:65
&gt;  +          return reinterpret_cast&lt;ExceptionBase*&gt;(pathException);
&gt; Why does this diff look so funny?

JSExceptionBase.cpp currently uses CRLF line endings, and I had to convert them all to LF to make the style checker happy.

Working on the other comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239861</commentid>
    <comment_count>12</comment_count>
      <attachid>59095</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-18 04:30:10 -0700</bug_when>
    <thetext>Created attachment 59095
patch #2: Add the SQLException class

patch #2 should be ready for another look.

Fixed the copyright header.

Fixed the expectations of the failing tests on Mac + the expectations for those tests on all other ports that I could find.

The patch passes all tests on Mac; a whole bunch of tests fail in the Qt port, but none of them seems related to this patch (most of them are in css1/, editing/ and fast/dom/Geolocation/ -- maybe I didn&apos;t pass in some flags?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239867</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-18 05:08:12 -0700</bug_when>
    <thetext>Attachment 59095 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3266343</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240395</commentid>
    <comment_count>14</comment_count>
      <attachid>59095</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-19 17:19:13 -0700</bug_when>
    <thetext>Comment on attachment 59095
patch #2: Add the SQLException class

Adding things to the global scope is a bit of a pain.  Please watch the bots carefully to make sure you&apos;ve got all the expectation updates.

WebCore/WebCore.xcodeproj/project.pbxproj:11037
 +  				81CC114011BEAA9D00D0D856 /* IDBKeyRange.idl */,
Did you mean to add these files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240548</commentid>
    <comment_count>15</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-20 17:27:16 -0700</bug_when>
    <thetext>&gt; WebCore/WebCore.xcodeproj/project.pbxproj:11037
&gt;  +                  81CC114011BEAA9D00D0D856 /* IDBKeyRange.idl */,
&gt; Did you mean to add these files?

No. Hmm, not sure how they got there. Thanks for catching this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240613</commentid>
    <comment_count>16</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-21 00:10:50 -0700</bug_when>
    <thetext>patch #2 landed as r61531.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240620</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-21 01:03:31 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61531 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240621</commentid>
    <comment_count>18</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-21 01:04:47 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; http://trac.webkit.org/changeset/61531 might have broken GTK Linux 64-bit Debug

Missed the GTK expectations for 2 tests, should be fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240834</commentid>
    <comment_count>19</comment_count>
      <attachid>59095</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-06-21 13:10:10 -0700</bug_when>
    <thetext>Comment on attachment 59095
patch #2: Add the SQLException class

This change caused fast/dom/prototype-inheritance.html to fail on Windows. New results need to be landed. See http://build.webkit.org/results/Windows%20Debug%20(Tests)/r61558%20(15282)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240848</commentid>
    <comment_count>20</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-21 13:27:46 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 59095 [details])
&gt; This change caused fast/dom/prototype-inheritance.html to fail on Windows. New results need to be landed. See http://build.webkit.org/results/Windows%20Debug%20(Tests)/r61558%20(15282)/results.html

Updated the expectations in r61570.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241028</commentid>
    <comment_count>21</comment_count>
      <attachid>59320</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-21 18:04:53 -0700</bug_when>
    <thetext>Created attachment 59320
patch #1: implement DatabaseSync::openDatabaseSync()

Michael, I changed patch #1 as we discussed (I think...). Basically, I moved performOpenAndVerify() + some fields + simple getters for those fields from Database to AbstractDatabase. I also moved all guid-related methods to AbstractDatabase, but the plan is to move them to a separate class once this patch is landed. I also made a trivial change to DatabaseTracker, in order to remove the dependency on Database. I haven&apos;t changed the logic at all.

I can already see a few ways to clean up Database further, but I&apos;ll work on those in separate patches.

All tests in storage/ passed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241029</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-21 18:07:18 -0700</bug_when>
    <thetext>Attachment 59320 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/storage/AbstractDatabase.cpp:334:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/storage/DatabaseAuthorizer.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/storage/Database.cpp:477:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 3 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241038</commentid>
    <comment_count>23</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-21 18:21:55 -0700</bug_when>
    <thetext>&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
&gt; WebCore/storage/AbstractDatabase.cpp:334:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; WebCore/storage/DatabaseAuthorizer.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
&gt; WebCore/storage/Database.cpp:477:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Total errors found: 3 in 12 files

Fix all style problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241400</commentid>
    <comment_count>24</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-06-22 12:47:21 -0700</bug_when>
    <thetext>&gt; void DatabaseSync::markAsDeletedAndClose()
&gt; {
&gt;     // FIXME: we probably need to do something else in here other than calling closeImmediately().
&gt;     closeImmediately();
&gt; }
&gt; 
&gt; void DatabaseSync::closeImmediately()
&gt; {
&gt;     // FIXME: probably need to do more things in here
&gt;     closeDatabase();
&gt;     DatabaseTracker::tracker().removeOpenDatabase(this);
&gt; }

These methods are not called on the ScriptExecutionContext&apos;s thread, but the closeDatabase() method uses the sqlite3 database handle. That looks like a threading violation that needs to be resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241421</commentid>
    <comment_count>25</comment_count>
      <attachid>59039</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-22 13:24:33 -0700</bug_when>
    <thetext>Comment on attachment 59039
patch #2: Add the SQLException class

Cleared Adam Barth&apos;s review+ from obsolete attachment 59039 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242040</commentid>
    <comment_count>26</comment_count>
      <attachid>59556</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-23 12:58:57 -0700</bug_when>
    <thetext>Created attachment 59556
patch #1: implement DatabaseSync::openDatabaseSync()

(In reply to comment #24)
&gt; &gt; void DatabaseSync::markAsDeletedAndClose()
&gt; &gt; {
&gt; &gt;     // FIXME: we probably need to do something else in here other than calling closeImmediately().
&gt; &gt;     closeImmediately();
&gt; &gt; }
&gt; &gt; 
&gt; &gt; void DatabaseSync::closeImmediately()
&gt; &gt; {
&gt; &gt;     // FIXME: probably need to do more things in here
&gt; &gt;     closeDatabase();
&gt; &gt;     DatabaseTracker::tracker().removeOpenDatabase(this);
&gt; &gt; }
&gt; 
&gt; These methods are not called on the ScriptExecutionContext&apos;s thread, but the closeDatabase() method uses the sqlite3 database handle. That looks like a threading violation that needs to be resolved.

fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242113</commentid>
    <comment_count>27</comment_count>
      <attachid>59566</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-23 15:17:23 -0700</bug_when>
    <thetext>Created attachment 59566
patch #1: implement DatabaseSync::openDatabaseSync()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242136</commentid>
    <comment_count>28</comment_count>
      <attachid>59573</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-23 16:14:31 -0700</bug_when>
    <thetext>Created attachment 59573
patch #1: implement DatabaseSync::openDatabaseSync()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242592</commentid>
    <comment_count>29</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-06-24 11:02:48 -0700</bug_when>
    <thetext>This refactoring LGTM. Mostly moving code, only altering what needs altering to be shared with the sync case.

&gt; Implementing DatabaseSync::openDatabaseSync().

The CL description could use some word smithing to briefly describe the changes made in support of implementing openDatabaseSync().

* Hoisted many methods involved in opening a web database from Database to AbstractDatabase for reuse in DatabaseSync.
* Virtualized performOpenAndVerify() to keep interactions with the DatabaseThread out of the base class as that only applies to the Database class and not DatabaseSync.
* Avoided storing a reference to the creation callback in the base class since its not needed beyond return from the static constructor method in the sync case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242640</commentid>
    <comment_count>30</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-06-24 13:26:34 -0700</bug_when>
    <thetext>Oooops... I spoke a little too some on the code part being ready. Couple of things to look at.

* In the usual case where a DatabaseSync is not closed forcibly thru closeImmediately() or markAsDeletedAndClose(), looks like we&apos;re leaving dangling pointers in the &apos;tracker&apos; and cruft in the various GUID map goo maintained by the base class.

* The FIXME comments on closeImmediately() and markAsDeletedAndClose() are vague. Please be more clear about what has to happen or not.

I think you&apos;ve got a good impl of closeImmediately() in place already and can simply remove the FIXME in that method.

I haven&apos;t understood the semantics of markAsDeletedAndClose() until about an hour ago. Similar semantics to closeImmediately() except its expected to be done in a sync fashion and there are additional side effects around the version() method (and around the callers of the public deleted() method). The impl in the most recent patch is not correct since it doesn&apos;t behave syncly. I think its OK to leave this undone for now, and just put in a FIXME for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242652</commentid>
    <comment_count>31</comment_count>
      <attachid>59696</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-24 13:49:30 -0700</bug_when>
    <thetext>Created attachment 59696
patch #1: implement DatabaseSync::openDatabaseSync()

Addressed Michael&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242743</commentid>
    <comment_count>32</comment_count>
      <attachid>59696</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-06-24 17:07:27 -0700</bug_when>
    <thetext>Comment on attachment 59696
patch #1: implement DatabaseSync::openDatabaseSync()

&gt; +void DatabaseSync::closeImmediately()
&gt;  {
&gt; -    ASSERT(m_scriptExecutionContext-&gt;isContextThread());
&gt; -    return m_scriptExecutionContext.get();
&gt; +    if (!opened())
&gt; +        return;

I think you should move the call to opened() down so that the method is called on the context thread.

&gt; +
&gt; +    if (!m_scriptExecutionContext-&gt;isContextThread()) {
&gt; +        m_scriptExecutionContext-&gt;postTask(CloseSyncDatabaseOnContextThreadTask::create(this));
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    DatabaseTracker::tracker().removeOpenDatabase(this);
&gt; +
&gt; +    closeDatabase();
&gt;  }


&gt; DatabaseSync::~DatabaseSync()
&gt; {
&gt;     ASSERT(m_scriptExecutionContext-&gt;isContextThread());
&gt; +    closeImmediately();
&gt; }

Oh, thats a virtual method. Probably want to avoid calling that from the dtor.
http://www.artima.com/cppsource/nevercall.html

A seperate, private, non-virtual DatabaseSync::closeAndRemoveFromTracker() method thats only be called on the context thread may help that can be called from the virtual closeImmediately and from the dtor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242760</commentid>
    <comment_count>33</comment_count>
      <attachid>59713</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-24 17:32:12 -0700</bug_when>
    <thetext>Created attachment 59713
patch #1: implement DatabaseSync::openDatabaseSync()

(In reply to comment #32)
&gt; (From update of attachment 59696 [details])
&gt; &gt; +void DatabaseSync::closeImmediately()
&gt; &gt;  {
&gt; &gt; -    ASSERT(m_scriptExecutionContext-&gt;isContextThread());
&gt; &gt; -    return m_scriptExecutionContext.get();
&gt; &gt; +    if (!opened())
&gt; &gt; +        return;
&gt; 
&gt; I think you should move the call to opened() down so that the method is called on the context thread.

done.

&gt; &gt; DatabaseSync::~DatabaseSync()
&gt; &gt; {
&gt; &gt;     ASSERT(m_scriptExecutionContext-&gt;isContextThread());
&gt; &gt; +    closeImmediately();
&gt; &gt; }
&gt; 
&gt; Oh, thats a virtual method. Probably want to avoid calling that from the dtor.
&gt; http://www.artima.com/cppsource/nevercall.html

gotta love C++... i changed the call to closeImmediately() to:

if (opened()) {
    DatabaseTracker.tracker().removeOpenDatabase(this);
    closeDatabase();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242761</commentid>
    <comment_count>34</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-06-24 17:36:17 -0700</bug_when>
    <thetext>lgtm!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242765</commentid>
    <comment_count>35</comment_count>
      <attachid>59713</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-24 17:45:01 -0700</bug_when>
    <thetext>Comment on attachment 59713
patch #1: implement DatabaseSync::openDatabaseSync()

This a pretty big patch to make sure all the code is getting move around properly, but the patch appears correct.

WebCore/storage/AbstractDatabase.cpp:137
 +      if (origin.endsWith(&quot;/&quot;))
I still don&apos;t understand how origin can ever end with a /

WebCore/storage/AbstractDatabase.cpp:390
 +      DEFINE_STATIC_LOCAL(String, setVersionQuery, (&quot;INSERT INTO &quot; + databaseInfoTableName() + &quot; (key, value) VALUES (&apos;&quot; + databaseVersionKey() + &quot;&apos;, ?);&quot;));
Does this mean that this table name is visible to web content?  That would be unfortunate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242767</commentid>
    <comment_count>36</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-24 17:53:44 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 59713 [details])
&gt; This a pretty big patch to make sure all the code is getting move around properly, but the patch appears correct.
&gt; 
&gt; WebCore/storage/AbstractDatabase.cpp:137
&gt;  +      if (origin.endsWith(&quot;/&quot;))
&gt; I still don&apos;t understand how origin can ever end with a /

Techinically, SecurityOrigin::toString() can return &quot;file://&quot;. However, I don&apos;t think it matters: we just need a string that uniquely identifies the origin + DB name, and adding another &apos;/&apos; in case of &quot;file://&quot; doesn&apos;t change that. So I removed the check and changed this code to always use origin + &apos;/&apos; + name as a unique DB identifier.

&gt; WebCore/storage/AbstractDatabase.cpp:390
&gt;  +      DEFINE_STATIC_LOCAL(String, setVersionQuery, (&quot;INSERT INTO &quot; + databaseInfoTableName() + &quot; (key, value) VALUES (&apos;&quot; + databaseVersionKey() + &quot;&apos;, ?);&quot;));
&gt; Does this mean that this table name is visible to web content?  That would be unfortunate.

It&apos;s not. DatabaseAuthorizer doesn&apos;t allow the web app to do anything on this table (not even read it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242776</commentid>
    <comment_count>37</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-24 18:08:02 -0700</bug_when>
    <thetext>patch #1 landed as r61812.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243364</commentid>
    <comment_count>38</comment_count>
      <attachid>59831</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-26 04:56:21 -0700</bug_when>
    <thetext>Created attachment 59831
patch #1: implement DatabaseSync::openDatabaseSync()

Same patch, with minor changes:
1. Made ScriptExecutionContext aware of sync DBs, because we need a place to close them before the destructor runs (calling DatabaseTracker::removeOpenDatabase() in the destructor leads to weird things in Chromium).
2. Because of #1, moved 2 sync DB-specific lines from the loop in ScriptExecutionContext::stopDatabases() to Database::stop().
3. Commented out some test cases in the layout test, because they fail in V8. The failure happens because unlike JSC, v8 suppresses the errors in toString(). I&apos;m investigating why this is so, and what can be done to make JSC and V8 behave the same way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243365</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-26 04:57:50 -0700</bug_when>
    <thetext>Attachment 59831 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/ChangeLog:13:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:15:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243367</commentid>
    <comment_count>40</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-26 05:00:25 -0700</bug_when>
    <thetext>&gt; WebCore/ChangeLog:13:  Line contains tab character.  [whitespace/tab] [5]
&gt; WebCore/ChangeLog:15:  Line contains tab character.  [whitespace/tab] [5]
&gt; Total errors found: 2 in 16 files

Will fix these on landing or when uploading a new version of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243368</commentid>
    <comment_count>41</comment_count>
      <attachid>59833</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-26 05:19:18 -0700</bug_when>
    <thetext>Created attachment 59833
patch #1: implement DatabaseSync::openDatabaseSync()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244179</commentid>
    <comment_count>42</comment_count>
      <attachid>59713</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-29 03:17:24 -0700</bug_when>
    <thetext>Comment on attachment 59713
patch #1: implement DatabaseSync::openDatabaseSync()

Cleared Adam Barth&apos;s review+ from obsolete attachment 59713 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244387</commentid>
    <comment_count>43</comment_count>
      <attachid>59833</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-06-29 11:18:56 -0700</bug_when>
    <thetext>Comment on attachment 59833
patch #1: implement DatabaseSync::openDatabaseSync()

I see where ScriptExecutionContext&apos;s collection of open databases has been modified to accept DatabaseSync instances as well as Database instances, but I don&apos;t see where the DatabaseSync instances are ever added/removed to/from that collection. Maybe i&apos;m missing something, could you walk me thru how that happens?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244538</commentid>
    <comment_count>44</comment_count>
      <attachid>60066</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-29 16:03:10 -0700</bug_when>
    <thetext>Created attachment 60066
patch #1: implement DatabaseSync::openDatabaseSync()

Should be the final version...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244559</commentid>
    <comment_count>45</comment_count>
      <attachid>60066</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-06-29 16:51:25 -0700</bug_when>
    <thetext>Comment on attachment 60066
patch #1: implement DatabaseSync::openDatabaseSync()

lgtm (the ChangeLog description should be modified since 4 and 5 no longer apply)

&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Implementing DatabaseSync::openDatabaseSync().
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=40607
&gt; +
&gt; +        1. Moved some common code from Database to AbstractDatabase.
&gt; +        2. Made performOpenAndVerify() virtual, since DatabaseSync doesn&apos;t
&gt; +           need to interact with DatabaseThread.
&gt; +        3. Removed the m_creationCallback field, since it&apos;s only needed in
&gt; +           the openDatabase{Sync} methods.
&gt; +        4. Made ScriptExecutionContext aware of sync DBs, so we can close
&gt; +           the sync DBs before the destructor is called.
&gt; +        5. Moved a couple of async DB-specific lines from
&gt; +           ScriptExecutionContext::stopDatabases() to Database::stop().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244560</commentid>
    <comment_count>46</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-29 16:58:33 -0700</bug_when>
    <thetext>&gt; lgtm (the ChangeLog description should be modified since 4 and 5 no longer apply)
&gt; 
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        Implementing DatabaseSync::openDatabaseSync().
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=40607
&gt; &gt; +
&gt; &gt; +        1. Moved some common code from Database to AbstractDatabase.
&gt; &gt; +        2. Made performOpenAndVerify() virtual, since DatabaseSync doesn&apos;t
&gt; &gt; +           need to interact with DatabaseThread.
&gt; &gt; +        3. Removed the m_creationCallback field, since it&apos;s only needed in
&gt; &gt; +           the openDatabase{Sync} methods.
&gt; &gt; +        4. Made ScriptExecutionContext aware of sync DBs, so we can close
&gt; &gt; +           the sync DBs before the destructor is called.
&gt; &gt; +        5. Moved a couple of async DB-specific lines from
&gt; &gt; +           ScriptExecutionContext::stopDatabases() to Database::stop().

oops, will do on landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244573</commentid>
    <comment_count>47</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-29 17:31:11 -0700</bug_when>
    <thetext>patch #1 re-landed as r62153.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245695</commentid>
    <comment_count>48</comment_count>
      <attachid>60325</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-01 18:51:03 -0700</bug_when>
    <thetext>Created attachment 60325
patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245696</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-01 18:57:16 -0700</bug_when>
    <thetext>Attachment 60325 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/storage/chromium/SQLTransactionSyncClientChromium.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 65 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245697</commentid>
    <comment_count>50</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-01 18:58:28 -0700</bug_when>
    <thetext>&gt; WebCore/storage/chromium/SQLTransactionSyncClientChromium.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]

Fixed. Will wait for more comments before I upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245867</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-02 03:39:45 -0700</bug_when>
    <thetext>Attachment 60325 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3349346</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246124</commentid>
    <comment_count>52</comment_count>
      <attachid>60412</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-02 15:24:03 -0700</bug_when>
    <thetext>Created attachment 60412
patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests

Same patch, should fix the style problem, and should build on Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246163</commentid>
    <comment_count>53</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-02 17:01:24 -0700</bug_when>
    <thetext>Attachment 60412 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3408082</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246281</commentid>
    <comment_count>54</comment_count>
      <attachid>60445</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-03 02:54:43 -0700</bug_when>
    <thetext>Created attachment 60445
patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests

Addressed the problems Michael and I talked about offline:
1. An attempt to run a transaction inside another transaction should immediately result in an exception being thrown; added a test for that too.
2. Removed the SQLTransactionSyncClient class, and changed SQLTransactionClient to be usable by both sync and async transactions.
3. Changed SQLStatementSync.cpp to be a &apos;svn copy&apos; of SQLStatement.cpp.
4. Replaced &apos;typedef int ExceptionCode&apos; with &apos;#include &quot;ExceptionCode.h&quot;&apos; in all DB header files.
5. Changed the name of the SQLTransactionClient::didCommitTransaction() method to didCommitWriteTransaction().

I also changed &apos;#include &lt;wtf/Threading.h&gt;&apos; to &apos;#include &lt;wtf/ThreadSafeShared.h&gt;&apos; in a few callbacks, removed a few unnecessary #includes in SQLTransactionClientChromium.cpp, and moved the code that runs a transaction to a separate DatabaseSync::runTransaction() method, so it can be shared by DatabaseSync::transaction() and DatabaseSync::changeVersion().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246282</commentid>
    <comment_count>55</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-03 02:59:28 -0700</bug_when>
    <thetext>Attachment 60445 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/storage/SQLTransactionSync.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 77 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246290</commentid>
    <comment_count>56</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-03 04:00:46 -0700</bug_when>
    <thetext>&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
&gt; WebCore/storage/SQLTransactionSync.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
&gt; Total errors found: 1 in 77 files

Fixed, will wait for more comments before re-uploading the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247468</commentid>
    <comment_count>57</comment_count>
      <attachid>60445</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-07 04:10:31 -0700</bug_when>
    <thetext>Comment on attachment 60445
patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests

This patch is huge.  I only reviewed the first half of it and there&apos;s already some concerning stuff.  :(

WebCore/storage/DatabaseSync.cpp:95
 +          return new ChangeVersionPreflightStep(expectedVersion);
AdoptRef ???  This looks like a leak.

WebCore/storage/DatabaseSync.cpp:115
 +      ChangeVersionPreflightStep(const String&amp; expectedVersion) : m_expectedVersion(expectedVersion) { }
explicit?  Please make this more than one line.

WebCore/storage/DatabaseSync.cpp:123
 +          return new ChangeVersionPostflightStep(newVersion);
adoptRef.  If you haven&apos;t already, please read http://webkit.org/coding/RefPtr.html

WebCore/storage/DatabaseSync.cpp:138
 +      ChangeVersionPostflightStep(const String&amp; newVersion) : m_newVersion(newVersion) { }
explicit, multiline.

WebCore/storage/DatabaseSync.cpp:162
 +      if (!transaction-&gt;begin(ec) || !transaction-&gt;execute(ec) || !transaction-&gt;commit(ec))
Can these return ec and also true?  If not, that seems redundant.

WebCore/storage/SQLStatementSync.cpp:27
 +   */
missing space

WebCore/storage/SQLStatementSync.cpp:59
 +  bool SQLStatement::execute(Database* db)
This function is too complicated for me to understand at 4am.

WebCore/storage/SQLStatementSync.cpp:2
 +   * Copyright (C) 2010 Google Inc. All rights reserved.
Woah there.  You can&apos;t just change the copyright on a file from Apple to Google.  What&apos;s going on here with the license block?

WebCore/storage/SQLStatementSync.cpp:75
 +      for (unsigned int i = 0; i &lt; m_arguments.size(); ++i) {
We usually just say &quot;unsigned&quot;

WebCore/storage/SQLStatementSync.h:54
 +  
Extra blank line.

WebCore/storage/SQLTransaction.h: 
 +  typedef int ExceptionCode;
Who review this line of code?  It&apos;s nonsense.  (Hope it wasn&apos;t me!)

WebCore/storage/SQLTransactionClient.h:44
 +  class SQLTransactionClient : public Noncopyable {
If this is a client, why aren&apos;t the methods virtual?

WebCore/storage/SQLTransactionSync.cpp:80
 +  PassRefPtr&lt;SQLResultSet&gt; SQLTransactionSync::executeSQL(const String&amp; sqlStatement, const Vector&lt;SQLValue&gt;&amp; arguments, ExceptionCode&amp; ec)
again, too big for my little brain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247882</commentid>
    <comment_count>58</comment_count>
      <attachid>60812</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-07 17:34:59 -0700</bug_when>
    <thetext>Created attachment 60812
patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests

&gt; This patch is huge.

the layout tests are probably more than half of it. another good chunk of it is changes to build files.

&gt; I only reviewed the first half of it and there&apos;s already some concerning stuff.  :(

happy to fix them. :)

&gt; WebCore/storage/DatabaseSync.cpp:95
&gt;  +          return new ChangeVersionPreflightStep(expectedVersion);
&gt; AdoptRef ???  This looks like a leak.

fixed.

&gt; WebCore/storage/DatabaseSync.cpp:115
&gt;  +      ChangeVersionPreflightStep(const String&amp; expectedVersion) : m_expectedVersion(expectedVersion) { }
&gt; explicit?  Please make this more than one line.

done.

&gt; WebCore/storage/DatabaseSync.cpp:123
&gt;  +          return new ChangeVersionPostflightStep(newVersion);
&gt; adoptRef.  If you haven&apos;t already, please read http://webkit.org/coding/RefPtr.html

done. i thought PassRefPtr::PassRefPtr(T*) and adoptRef() did the same thing.

&gt; WebCore/storage/DatabaseSync.cpp:138
&gt;  +      ChangeVersionPostflightStep(const String&amp; newVersion) : m_newVersion(newVersion) { }
&gt; explicit, multiline.

done.

&gt; WebCore/storage/DatabaseSync.cpp:162
&gt;  +      if (!transaction-&gt;begin(ec) || !transaction-&gt;execute(ec) || !transaction-&gt;commit(ec))
&gt; Can these return ec and also true?  If not, that seems redundant.

you&apos;re right, they are redundant. fixed, made these functions return an ExceptionCode.

&gt; WebCore/storage/SQLStatementSync.cpp:27
&gt;  +   */
&gt; missing space

not sure what you mean, didn&apos;t change anything.

&gt; WebCore/storage/SQLStatementSync.cpp:59
&gt;  +  bool SQLStatement::execute(Database* db)
&gt; This function is too complicated for me to understand at 4am.

SQLStatement{Sync}::execute() do the following:
1. changes the authorizer mode to read-only, if it&apos;s a read-only transaction (to make sure write-statements are disallowed).
2. prepares the statement.
3. makes sure the number of arguments matches the number of &apos;?&apos;s in the statements.
4. bind all arguments.
5. step through the statement, and add data to the result set, one row at a time.

&gt; WebCore/storage/SQLStatementSync.cpp:2
&gt;  +   * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; Woah there.  You can&apos;t just change the copyright on a file from Apple to Google.  What&apos;s going on here with the license block?

oops, reverted, and added a 1-line google copyright. also fixed the copyright notice in all other sync classes (they should all have the google copyright header).

&gt; WebCore/storage/SQLStatementSync.cpp:75
&gt;  +      for (unsigned int i = 0; i &lt; m_arguments.size(); ++i) {
&gt; We usually just say &quot;unsigned&quot;

fixed.

&gt; WebCore/storage/SQLStatementSync.h:54
&gt;  +  
&gt; Extra blank line.

removed.

&gt; WebCore/storage/SQLTransaction.h: 
&gt;  +  typedef int ExceptionCode;
&gt; Who review this line of code?  It&apos;s nonsense.  (Hope it wasn&apos;t me!)

it was around since... forever. michael had the same comment, so i removed the &apos;typedef int ExceptionCode;&apos; line from all DB header files and added &apos;#include &quot;ExceptionCode.h&quot;&apos;.

&gt; WebCore/storage/SQLTransactionClient.h:44
&gt;  +  class SQLTransactionClient : public Noncopyable {
&gt; If this is a client, why aren&apos;t the methods virtual?

made them virtual, even though this is the only implementation we have (well, 1 implementation for chromium, and 1 for all other ports), and i think it&apos;s quite unlikely we&apos;ll ever have another one.

&gt; WebCore/storage/SQLTransactionSync.cpp:80
&gt;  +  PassRefPtr&lt;SQLResultSet&gt; SQLTransactionSync::executeSQL(const String&amp; sqlStatement, const Vector&lt;SQLValue&gt;&amp; arguments, ExceptionCode&amp; ec)
&gt; again, too big for my little brain.

same code as SQLTransaction::executeSQL(), only instead of storing a SQLError, we set a SQLException.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247885</commentid>
    <comment_count>59</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-07 17:38:18 -0700</bug_when>
    <thetext>&quot;typedef int ExceptionCode&quot; was historically the standard way to “forward-declare” the ExceptionCode type, so we didn’t have to include ExceptionCode.h in every single header.

The idea was that header contained the actual exception code constants, but if you only needed the WebCore::ExceptionCode type you could typedef it to int. Any files that included both your header and ExceptionCode.h would end up checking it for you. If the typedef didn&apos;t match the compiler would generate an error.

Still-older code simply used int, which I felt was less self-documenting.

It’s fine to just include ExceptionCode.h in more places and get rid of that old usage, but it was standard at one time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247908</commentid>
    <comment_count>60</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-07 17:58:39 -0700</bug_when>
    <thetext>Attachment 60812 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/3448001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247911</commentid>
    <comment_count>61</comment_count>
      <attachid>60817</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-07 18:03:18 -0700</bug_when>
    <thetext>Created attachment 60817
patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests

Same patch, should build on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248242</commentid>
    <comment_count>62</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-08 09:01:10 -0700</bug_when>
    <thetext>&gt; It’s fine to just include ExceptionCode.h in more places and get rid of that old usage, but it was standard at one time.

Thanks, I didn&apos;t know that.  It seems suboptimal to duplicate that declaration everywhere.  I&apos;m glad we&apos;re moving away from that pattern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248673</commentid>
    <comment_count>63</comment_count>
      <attachid>60817</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-07-08 18:55:32 -0700</bug_when>
    <thetext>Comment on attachment 60817
patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests

This is a big patch, I haven&apos;t looked at the test cases yet, but I am glad that you have put together a bunch of them to verify that this code works.

WebCore/storage/DatabaseSync.cpp:159
 +      RefPtr&lt;SQLTransactionSync&gt; transaction = transactionPrP;
Do you need to local variable here? Seems like deref&apos;ing the prp is all you need.

WebCore/storage/SQLStatementSync.cpp:122
 +      return resultSet.release();
Can you just return resultSet here the local var is going out of scope momentarily. I&apos;m not really sure which is preferred usage in webkit, please check.

WebCore/storage/SQLTransactionClient.h:49
 +      virtual bool didExceedQuota(AbstractDatabase*);
These really don&apos;t have to be virtual. It&apos;s not the type of &apos;client&apos; interface that&apos;s is designed to be overriden. Perhaps using the term &apos;client&apos; was a poor choice in webkit? If the need ever arises we can make them virtual at that time..

WebCore/storage/SQLTransactionSync.cpp:142
 +          ExceptionCode preflightExceptionCode = m_preflightStep-&gt;performStep(this);
This pre/post flight mechanism is used to read/write the version stored in the database. Shouldn&apos;t we be doing these reads and writes in the transaction?

Are there any other use cases for the pre/post stuff besides the version change use case? It may be overkill for just this use case. Instead of using runTransaction(), the changeVersion() method could be a slightly modified form of runTransaction() essentially.

void changeVersion(...) {
  trans.begin();
  read version from db and compare with expected;
  trans.execute(); // invoke the user callback 
  write new version to db;
  trans.commit();
}

wdyt?

WebCore/storage/SQLTransactionSync.cpp:208
 +      return postflightExceptionCode;
Ditto shouldn&apos;t we be doing this in the transaction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248686</commentid>
    <comment_count>64</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-07-08 19:23:30 -0700</bug_when>
    <thetext>(In reply to comment #63) 
&gt; WebCore/storage/SQLStatementSync.cpp:122
&gt;  +      return resultSet.release();
&gt; Can you just return resultSet here the local var is going out of scope momentarily. I&apos;m not really sure which is preferred usage in webkit, please check.

fwiw, the way it is written is the preferred usage.

&quot;If a function’s result is a new object or ownership is being transferred for any other reason, the result should be a PassRefPtr. Since local variables are typically RefPtr, it’s common to call release in the return statement to transfer the RefPtr to the PassRefPtr.&quot; -- http://webkit.org/coding/RefPtr.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248765</commentid>
    <comment_count>65</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-08 23:33:13 -0700</bug_when>
    <thetext>(In reply to comment #64)
&gt; (In reply to comment #63) 
&gt; &gt; WebCore/storage/SQLStatementSync.cpp:122
&gt; &gt;  +      return resultSet.release();
&gt; &gt; Can you just return resultSet here the local var is going out of scope momentarily. I&apos;m not really sure which is preferred usage in webkit, please check.
&gt; 
&gt; fwiw, the way it is written is the preferred usage.
&gt; 
&gt; &quot;If a function’s result is a new object or ownership is being transferred for any other reason, the result should be a PassRefPtr. Since local variables are typically RefPtr, it’s common to call release in the return statement to transfer the RefPtr to the PassRefPtr.&quot; -- http://webkit.org/coding/RefPtr.html

Yes, the release() is preferred.

If you forget to do the release(), then the reference count gets incremented and then decremented. If you remember to do the release(), then the reference count isn&apos;t touched. So it&apos;s a bit more efficient if you do the release(). There’s no correctness problem either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248787</commentid>
    <comment_count>66</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-09 00:14:28 -0700</bug_when>
    <thetext>&gt; WebCore/storage/DatabaseSync.cpp:159
&gt;  +      RefPtr&lt;SQLTransactionSync&gt; transaction = transactionPrP;
&gt; Do you need to local variable here? Seems like deref&apos;ing the prp is all you need.

removed the runTransaction() method, so this statement went away.

&gt; WebCore/storage/SQLStatementSync.cpp:122
&gt;  +      return resultSet.release();
&gt; Can you just return resultSet here the local var is going out of scope momentarily. I&apos;m not really sure which is preferred usage in webkit, please check.

as Dave and Darin have said, this should be the right way to do this.

&gt; WebCore/storage/SQLTransactionClient.h:49
&gt;  +      virtual bool didExceedQuota(AbstractDatabase*);
&gt; These really don&apos;t have to be virtual. It&apos;s not the type of &apos;client&apos; interface that&apos;s is designed to be overriden. Perhaps using the term &apos;client&apos; was a poor choice in webkit? If the need ever arises we can make them virtual at that time..

reverted. i&apos;ll see if adam has any objection to this.

&gt; WebCore/storage/SQLTransactionSync.cpp:142
&gt;  +          ExceptionCode preflightExceptionCode = m_preflightStep-&gt;performStep(this);
&gt; This pre/post flight mechanism is used to read/write the version stored in the database. Shouldn&apos;t we be doing these reads and writes in the transaction?

i think the spec contradicts itself: http://dev.w3.org/html5/webdatabase/#dom-database-sync-changeversion. on one hand, it says that check version + invoke callback + update version should be done atomically. on the other hand, if you look at the step by step description, it looks to me like things should be done in this order:

1. begin transaction
2. check version
3. invoke callback
4. commit transaction
5. update version

i think doing it atomically is the right way to do it, so in the code i moved the &quot;check version&quot; and &quot;update version&quot; steps inside the transaction. i&apos;ll send an email to hixie and ask him for a clarification (and we should probably make it more clear in the spec too).

&gt; Are there any other use cases for the pre/post stuff besides the version change use case? It may be overkill for just this use case. Instead of using runTransaction(), the changeVersion() method could be a slightly modified form of runTransaction() essentially.
&gt; 
&gt; void changeVersion(...) {
&gt;   trans.begin();
&gt;   read version from db and compare with expected;
&gt;   trans.execute(); // invoke the user callback 
&gt;   write new version to db;
&gt;   trans.commit();
&gt; }
&gt; 
&gt; wdyt?

done. initially i thought that &quot;optional transaction steps&quot; might be cool, but now i&apos;m thinking that it&apos;s quite unlikely that we&apos;ll ever need to use them for anything else.

&gt; WebCore/storage/SQLTransactionSync.cpp:208
&gt;  +      return postflightExceptionCode;
&gt; Ditto shouldn&apos;t we be doing this in the transaction.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248831</commentid>
    <comment_count>67</comment_count>
      <attachid>61015</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-09 01:34:58 -0700</bug_when>
    <thetext>Created attachment 61015
patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248835</commentid>
    <comment_count>68</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-09 01:43:29 -0700</bug_when>
    <thetext>Attachment 61015 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/3499062</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248868</commentid>
    <comment_count>69</comment_count>
      <attachid>61025</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-09 02:56:44 -0700</bug_when>
    <thetext>Created attachment 61025
patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests

Same patch, should make gcc happy this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249369</commentid>
    <comment_count>70</comment_count>
      <attachid>61025</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-07-09 17:25:22 -0700</bug_when>
    <thetext>Comment on attachment 61025
patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests

I think the db logic looks correct and the new classes are nicely composed. How the SQLTransactionClient class is used is kind of funky. A stateless object but we&apos;re making global static instance.

51 static SQLTransactionClient* transactionClient()
52 {
53     DEFINE_STATIC_LOCAL(SQLTransactionClient, transactionClient, ());
54     return &amp;transactionClient;
55 }

I don&apos;t think DEFINE_STATIC_LOCAL construction macro is thread safe and this getter will definitely be called on different threads. It may be better to just add an SQLTransactionClient data member to SQLTransactionSync and call the methods thru that instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249370</commentid>
    <comment_count>71</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-07-09 17:26:29 -0700</bug_when>
    <thetext>otherwise, i think this looks good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249420</commentid>
    <comment_count>72</comment_count>
      <attachid>61134</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-09 18:21:50 -0700</bug_when>
    <thetext>Created attachment 61134
patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests

(In reply to comment #70)
&gt; (From update of attachment 61025 [details])
&gt; I think the db logic looks correct and the new classes are nicely composed. How the SQLTransactionClient class is used is kind of funky. A stateless object but we&apos;re making global static instance.
&gt; 
&gt; 51 static SQLTransactionClient* transactionClient()
&gt; 52 {
&gt; 53     DEFINE_STATIC_LOCAL(SQLTransactionClient, transactionClient, ());
&gt; 54     return &amp;transactionClient;
&gt; 55 }
&gt; 
&gt; I don&apos;t think DEFINE_STATIC_LOCAL construction macro is thread safe and this getter will definitely be called on different threads. It may be better to just add an SQLTransactionClient data member to SQLTransactionSync and call the methods thru that instance.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250714</commentid>
    <comment_count>73</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-07-13 13:41:59 -0700</bug_when>
    <thetext>Hi webkit reviewers that happen to be chromium developers too. This patch makes it possible to use sync db api in workers. Would be nice to get it into M6.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250830</commentid>
    <comment_count>74</comment_count>
      <attachid>61134</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-13 17:03:53 -0700</bug_when>
    <thetext>Comment on attachment 61134
patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250946</commentid>
    <comment_count>75</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-13 21:55:10 -0700</bug_when>
    <thetext>patch #3 landed: r63278.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251303</commentid>
    <comment_count>76</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-07-14 11:21:52 -0700</bug_when>
    <thetext>Ooops, it looks like the change actually committed is still setting the version outside of the transaction?


93	void DatabaseSync::changeVersion(const String&amp; oldVersion, const String&amp; newVersion, 
...
125	    if ((ec = transaction-&gt;commit()))
126	        return;
127	
128	    setExpectedVersion(newVersion);
129	}


&gt; &gt; Are there any other use cases for the pre/post stuff besides the version change use case? It may be overkill
&gt; &gt; for just this use case. Instead of using runTransaction(), the changeVersion() method could be a slightly 
&gt; &gt; modified form of runTransaction() essentially.
&gt; &gt; 
&gt; &gt; void changeVersion(...) {
&gt; &gt;   trans.begin();
&gt; &gt;   read version from db and compare with expected;
&gt; &gt;   trans.execute(); // invoke the user callback 
&gt; &gt;   write new version to db;
&gt; &gt;   trans.commit();
&gt; &gt; }
&gt; &gt; 
&gt; &gt; wdyt?
&gt; 
&gt; &gt; WebCore/storage/SQLTransactionSync.cpp:208
&gt; &gt;  +      return postflightExceptionCode;
&gt; &gt; Ditto shouldn&apos;t we be doing this in the transaction.
&gt; 
&gt; done.
&gt;
&gt; i think doing it atomically is the right way to do it, so in the code i moved the &quot;check version&quot; and &quot;update
&gt; version&quot; steps inside the transaction. i&apos;ll send an email to hixie and ask him for a clarification (and we
&gt; should probably make it more clear in the spec too).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251325</commentid>
    <comment_count>77</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-07-14 11:39:14 -0700</bug_when>
    <thetext>Oh... nevermind :)

120	    if (!setVersionInDatabase(newVersion)) {
121	        ec = SQLException::UNKNOWN_ERR;
122	        return;
123	    }
124	
125	    if ((ec = transaction-&gt;commit()))
126	        return;
127	
128	    setExpectedVersion(newVersion);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254696</commentid>
    <comment_count>78</comment_count>
      <attachid>62275</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-22 01:47:39 -0700</bug_when>
    <thetext>Created attachment 62275
patch #4: interrupt all DB operations when the worker is shutting down</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254920</commentid>
    <comment_count>79</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-07-22 12:19:54 -0700</bug_when>
    <thetext>(In reply to comment #78)
&gt; Created an attachment (id=62275) [details]
&gt; patch #4: interrupt all DB operations when the worker is shutting down

Can you move this patch to a separate bug? This could serve as an umbrella bug, but for the sake of committing/reviewing, each bug should have one patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254943</commentid>
    <comment_count>80</comment_count>
      <attachid>62275</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-22 13:15:25 -0700</bug_when>
    <thetext>Comment on attachment 62275
patch #4: interrupt all DB operations when the worker is shutting down

moving patch #4 to bug 42843, and closing this bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58744</attachid>
            <date>2010-06-14 20:29:46 -0700</date>
            <delta_ts>2010-06-21 18:04:53 -0700</delta_ts>
            <desc>patch #1: implement DatabaseSync::openDatabaseSync()</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21557</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTE3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMDYtMTQgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKCkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3Bl
bkRhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlU3luYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpndWlkTXV0ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Z3VpZFRvVmVyc2lvbk1h
cCk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVHdWlkVmVyc2lvbk1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpndWlkRm9yT3JpZ2luQW5kTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhYmFz
ZVZlcnNpb25LZXkpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJh
c2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6RGF0YWJhc2VTeW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6b3BlbkFuZFZlcmlmeSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6cGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpzZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVN5bmM6OnN0cmluZ0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VTeW5jOjpkaXNwbGF5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5
bmM6OmVzdGltYXRlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpmaWxl
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpnZXRWZXJzaW9uRnJvbURhdGFiYXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFRleHRWYWx1ZUluRGF0YWJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpzZXRWZXJzaW9uSW5EYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVN5bmM6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVN5bmM6OmNsb3NlSW1tZWRpYXRlbHkpOgorICAgICAgICAqIHN0b3Jh
Z2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OmlzTmV3
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6b3BlbmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlU3luYzo6ZGF0YWJhc2VEZWJ1Z05hbWUpOgorCiAyMDEwLTA2LTE0ICBF
cmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE9saXZlciBIdW50LgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHJldmlzaW9u
IDYxMTU4KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDE2ICszMCw4NiBAQAogI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgogCiAjaWYg
RU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgogI2luY2x1
ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
IlNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50
LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKKy8vIEZJWE1FOiBtb3ZlIEd1aWRWZXJzaW9uTWFwIHRvIEFic3RyYWN0RGF0YWJh
c2UuIFdlIG5lZWQgdG8gdXNlIHRoZSBzYW1lCisvLyBtYXBwaW5ncyBpbiBEYXRhYmFzZSBhbmQg
RGF0YWJhc2VTeW5jLgorc3RhdGljIE11dGV4JiBndWlkTXV0ZXgoKQoreworICAgIC8vIE5vdGU6
IFdlIGRvbid0IGhhdmUgdG8gdXNlIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyBoZXJlIGJl
Y2F1c2UKKyAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGluIHRoZSBjb25zdHJ1
Y3RvciBvbiB0aGUgbWFpbiB0aHJlYWQKKyAgICAvLyBiZWZvcmUgYW55IG90aGVyIHRocmVhZHMg
dGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQuCisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChNdXRleCwgbXV0ZXgsICgpKTsKKyAgICByZXR1cm4gbXV0ZXg7Cit9CisKK3R5cGVkZWYgSGFz
aE1hcDxpbnQsIFN0cmluZz4gR3VpZFZlcnNpb25NYXA7CitzdGF0aWMgR3VpZFZlcnNpb25NYXAm
IGd1aWRUb1ZlcnNpb25NYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoR3VpZFZlcnNp
b25NYXAsIG1hcCwgKCkpOworICAgIHJldHVybiBtYXA7Cit9CisKKy8vIE5PVEU6IENhbGxlciBt
dXN0IGxvY2sgZ3VpZE11dGV4KCkuCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlR3VpZFZlcnNp
b25NYXAoaW50IGd1aWQsIFN0cmluZyBuZXdWZXJzaW9uKQoreworICAgIC8vIEVuc3VyZSB0aGUg
dGhlIG11dGV4IGlzIGxvY2tlZC4KKyAgICBBU1NFUlQoIWd1aWRNdXRleCgpLnRyeUxvY2soKSk7
CisKKyAgICAvLyBOb3RlOiBJdCBpcyBub3Qgc2FmZSB0byBwdXQgYW4gZW1wdHkgc3RyaW5nIGlu
dG8gdGhlIGd1aWRUb1ZlcnNpb25NYXAoKSBtYXAuCisgICAgLy8gVGhhdCdzIGJlY2F1c2UgdGhl
IG1hcCBpcyBjcm9zcy10aHJlYWQsIGJ1dCBlbXB0eSBzdHJpbmdzIGFyZSBwZXItdGhyZWFkLgor
ICAgIC8vIFRoZSBjb3B5KCkgZnVuY3Rpb24gbWFrZXMgYSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcg
eW91IGNhbiB1c2Ugb24gdGhlIGN1cnJlbnQKKyAgICAvLyB0aHJlYWQsIGJ1dCB3ZSBuZWVkIGEg
c3RyaW5nIHdlIGNhbiBrZWVwIGluIGEgY3Jvc3MtdGhyZWFkIGRhdGEgc3RydWN0dXJlLgorICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGEgcXVpdGUtYXdrd2FyZCByZXN0cmljdGlvbiB0byBoYXZlIHRv
IHByb2dyYW0gd2l0aC4KKworICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcg
KHNlZSBjb21tZW50IGFib3ZlKS4KKyAgICBndWlkVG9WZXJzaW9uTWFwKCkuc2V0KGd1aWQsIG5l
d1ZlcnNpb24uaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBuZXdWZXJzaW9uLnRocmVhZHNhZmVDb3B5
KCkpOworfQorCitzdGF0aWMgaW50IGd1aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYg
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgU3RyaW5nIHN0cmluZ0lEOworICAg
IGlmIChvcmlnaW4uZW5kc1dpdGgoIi8iKSkKKyAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyBu
YW1lOworICAgIGVsc2UKKyAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyAiLyIgKyBuYW1lOwor
CisgICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVk
U3RhdGljIGhlcmUgYmVjYXVzZQorICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2Ug
aW4gdGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRocmVhZAorICAgIC8vIGJlZm9yZSBhbnkg
b3RoZXIgdGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBhcmUgdXNlZC4KKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKE11dGV4LCBzdHJpbmdJZGVudGlmaWVyTXV0ZXgsICgpKTsKKyAgICBN
dXRleExvY2tlciBsb2NrZXIoc3RyaW5nSWRlbnRpZmllck11dGV4KTsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBpbnQ+IElER3VpZE1hcDsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKElE
R3VpZE1hcCwgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcCwgKCkpOworICAgIGludCBndWlkID0g
c3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcC5nZXQoc3RyaW5nSUQpOworICAgIGlmICghZ3VpZCkg
eworICAgICAgICBzdGF0aWMgaW50IGN1cnJlbnROZXdHVUlEID0gMTsKKyAgICAgICAgZ3VpZCA9
IGN1cnJlbnROZXdHVUlEKys7CisgICAgICAgIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuc2V0
KHN0cmluZ0lELCBndWlkKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ3VpZDsKK30KKworc3RhdGlj
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VWZXJzaW9uS2V5KCkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywga2V5LCAoIldlYktpdERhdGFiYXNlVmVyc2lvbktleSIpKTsKKyAgICBy
ZXR1cm4ga2V5OworfQorCiBjb25zdCBTdHJpbmcmIERhdGFiYXNlU3luYzo6ZGF0YWJhc2VJbmZv
VGFibGVOYW1lKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgbmFtZSwgKCJf
X1dlYktpdERhdGFiYXNlSW5mb1RhYmxlX18iKSk7CkBAIC01OCwxNCArMTI4LDMzIEBAIGJvb2wg
RGF0YWJhc2VTeW5jOjppc0F2YWlsYWJsZSgpCiAgICAgcmV0dXJuIGlzU3luY0RhdGFiYXNlQXZh
aWxhYmxlOwogfQogCi1QYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJhc2VTeW5jOjpvcGVu
RGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLCBQYXNzUmVmUHRyPERhdGFi
YXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8RGF0YWJhc2VTeW5j
PiBEYXRhYmFzZVN5bmM6Om9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
LCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIC8vIEZJWE1FOiB1bmNvbW1lbnQgdGhlIGFzc2VydCBvbmNlIHdl
IHVzZSB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogcGFyYW1ldGVyCi0gICAgLy9BU1NFUlQo
Y29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRl
eHRUaHJlYWQoKSk7CisKKyAgICBpZiAoIURhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNhbkVz
dGFibGlzaERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
KSkgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGZvciBvcmlnaW4gJXMg
bm90IGFsbG93ZWQgdG8gYmUgZXN0YWJsaXNoZWQiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBjb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2Ug
PSBhZG9wdFJlZihuZXcgRGF0YWJhc2VTeW5jKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lv
biwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2spKTsKKworICAg
IGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnkoZWMpKSB7CisgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiRmFpbGVkIHRvIG9wZW4gYW5kIHZlcmlmeSB2ZXJzaW9uIChleHBlY3RlZCAlcykgb2Yg
ZGF0YWJhc2UgJXMiLCBleHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlLT5k
YXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgRGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0
RGF0YWJhc2VEZXRhaWxzKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlO
YW1lLCBlc3RpbWF0ZWRTaXplKTsKKworICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAmJiBkYXRh
YmFzZS0+bV9jcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7CisgICAgICAgIGRhdGFiYXNlLT5tX2V4
cGVjdGVkVmVyc2lvbiA9ICIiOworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkludm9raW5nIHRo
ZSBjcmVhdGlvbiBjYWxsYmFjayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsK
KyAgICAgICAgZGF0YWJhc2UtPnBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKCk7CisgICAgfQogCi0g
ICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRhdGFiYXNl
OwogfQogCiBEYXRhYmFzZVN5bmM6OkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJz
aW9uLApAQCAtNzgsNiArMTY3LDE2IEBAIERhdGFiYXNlU3luYzo6RGF0YWJhc2VTeW5jKFNjcmlw
dEV4ZWN1dGkKICAgICAsIG1fY3JlYXRpb25DYWxsYmFjayhjcmVhdGlvbkNhbGxiYWNrKQogewog
ICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9zZWN1cml0eU9y
aWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKKworICAg
IG1fZGF0YWJhc2VBdXRob3JpemVyID0gRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGUoKTsKKwor
ICAgIGlmIChtX25hbWUuaXNOdWxsKCkpCisgICAgICAgIG1fbmFtZSA9ICIiOworICAgIG1fZ3Vp
ZCA9IGd1aWRGb3JPcmlnaW5BbmROYW1lKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5h
bWUpOworCisgICAgbV9maWxlbmFtZSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmZ1bGxQ
YXRoRm9yRGF0YWJhc2Uoc2VjdXJpdHlPcmlnaW4oKSwgbV9uYW1lKTsKKyAgICBEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5hZGRPcGVuRGF0YWJhc2UodGhpcyk7CiB9CiAKIERhdGFiYXNlU3lu
Yzo6fkRhdGFiYXNlU3luYygpCkBAIC0xMDcsNyArMjA2LDIxNyBAQCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBEYXRhYmFzZVN5bmM6OnNjCiAgICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5nZXQoKTsKIH0KIAorYm9vbCBEYXRhYmFzZVN5bmM6Om9wZW5BbmRWZXJpZnkoRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KGVjKTsKK30K
Kworc3RhdGljIGNvbnN0IGludCBtYXhTcWxpdGVCdXN5V2FpdFRpbWUgPSAzMDAwMDsKK2Jvb2wg
RGF0YWJhc2VTeW5jOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2Uub3BlbihtX2ZpbGVuYW1lLCB0cnVlKSkgeworICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIGRhdGFiYXNlIGF0IHBhdGggJXMiLCBtX2Zp
bGVuYW1lLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2Uu
dHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKCkpCisgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIHR1cm4gb24gaW5jcmVtZW50YWwgYXV0by12YWN1dW0gZm9yIGRhdGFiYXNlICVzIiwgbV9m
aWxlbmFtZS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6
ZXIpOworICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0aG9y
aXplcik7CisgICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChtYXhTcWxpdGVCdXN5
V2FpdFRpbWUpOworCisgICAgU3RyaW5nIGN1cnJlbnRWZXJzaW9uOworICAgIHsKKyAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKworICAgICAgICBHdWlkVmVyc2lvbk1h
cDo6aXRlcmF0b3IgZW50cnkgPSBndWlkVG9WZXJzaW9uTWFwKCkuZmluZChtX2d1aWQpOworICAg
ICAgICBpZiAoZW50cnkgIT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmVuZCgpKSB7CisgICAgICAgICAg
ICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgdXBkYXRlR3VpZFZlcnNp
b25NYXAoKSkuCisgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT5zZWNvbmQuaXNO
dWxsKCkgPyBTdHJpbmcoIiIpIDogZW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiQ3VycmVudCBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSBpcyAlcyIsIG1fZ3Vp
ZCwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJObyBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSIs
IG1fZ3VpZCk7CisKKyAgICAgICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50YWJsZUV4aXN0
cyhkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBtX25ldyA9IHRy
dWU7CisKKyAgICAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoIkNSRUFURSBUQUJMRSAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIChrZXkgVEVY
VCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLHZh
bHVlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIHRhYmxlICVzIGluIGRhdGFiYXNlICVz
IiwgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkuYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdO
YW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURf
U1RBVEVfRVJSOworICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRo
ZSBkYXRhYmFzZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNs
b3NlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2V0VmVyc2lvbkZyb21EYXRh
YmFzZShjdXJyZW50VmVyc2lvbikpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBnZXQgY3VycmVudCB2ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVn
TmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RB
VEVfRVJSOworICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFi
YXNlIGZpbGUuCisgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChjdXJyZW50VmVyc2lvbi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiUmV0cmlldmVkIGN1cnJlbnQgdmVyc2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzIiwgY3Vy
cmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5k
YXRhKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICghbV9uZXcgfHwgIW1fY3JlYXRpb25DYWxs
YmFjaykgeworICAgICAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2V0dGluZyB2ZXJzaW9u
ICVzIGluIGRhdGFiYXNlICVzIHRoYXQgd2FzIGp1c3QgY3JlYXRlZCIsIG1fZXhwZWN0ZWRWZXJz
aW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXNldFZlcnNpb25JbkRhdGFiYXNlKG1fZXhwZWN0ZWRWZXJz
aW9uKSkgeworICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdmVy
c2lvbiAlcyBpbiBkYXRhYmFzZSAlcyIsIG1fZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgp
LCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2Ug
dGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgbV9z
cWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gbV9l
eHBlY3RlZFZlcnNpb247CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVwZGF0ZUd1aWRW
ZXJzaW9uTWFwKG1fZ3VpZCwgY3VycmVudFZlcnNpb24pOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKGN1cnJlbnRWZXJzaW9uLmlzTnVsbCgpKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiRGF0YWJhc2UgJXMgZG9lcyBub3QgaGF2ZSBpdHMgdmVyc2lvbiBzZXQiLCBkYXRhYmFzZURl
YnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgY3VycmVudFZlcnNpb24gPSAiIjsK
KyAgICB9CisKKyAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpc24ndCB0aGUgZW1wdHkg
c3RyaW5nLCBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBkYXRhYmFzZSB2ZXJzaW9uIHdlIGhhdmUg
bWF0Y2hlcyB0aGF0IHZlcnNpb24uIE90aGVyd2lzZSwgc2V0IGFuIGV4Y2VwdGlvbi4KKyAgICAv
LyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHdlIGFs
d2F5cyByZXR1cm4gd2l0aCB3aGF0ZXZlciB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSB3ZSBoYXZl
LgorICAgIGlmICgoIW1fbmV3IHx8ICFtX2NyZWF0aW9uQ2FsbGJhY2spICYmIG1fZXhwZWN0ZWRW
ZXJzaW9uLmxlbmd0aCgpICYmIG1fZXhwZWN0ZWRWZXJzaW9uICE9IGN1cnJlbnRWZXJzaW9uKSB7
CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAicGFnZSBleHBlY3RzIHZlcnNpb24gJXMgZnJvbSBk
YXRhYmFzZSAlcywgd2hpY2ggYWN0dWFsbHkgaGFzIHZlcnNpb24gbmFtZSAlcyAtIG9wZW5EYXRh
YmFzZSgpIGNhbGwgd2lsbCBmYWlsIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCks
CisgICAgICAgICAgICBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBjdXJyZW50
VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
CisgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAg
ICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIG1fb3BlbmVkID0gdHJ1ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IERhdGFiYXNlU3luYzo6cGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2soKQoreworICAgIG1fY3JlYXRp
b25DYWxsYmFjay0+aGFuZGxlRXZlbnQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0
aGlzKTsKK30KKworU2VjdXJpdHlPcmlnaW4qIERhdGFiYXNlU3luYzo6c2VjdXJpdHlPcmlnaW4o
KSBjb25zdAoreworICAgIHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOworfQorCitTdHJp
bmcgRGF0YWJhc2VTeW5jOjpzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICAvLyBSZXR1
cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5CisgICAgcmV0dXJu
IG1fbmFtZS50aHJlYWRzYWZlQ29weSgpOworfQorCitTdHJpbmcgRGF0YWJhc2VTeW5jOjpkaXNw
bGF5TmFtZSgpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291
bnRpbmcgdGhyZWFkIHNhZmV0eQorICAgIHJldHVybiBtX2Rpc3BsYXlOYW1lLnRocmVhZHNhZmVD
b3B5KCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgRGF0YWJhc2VTeW5jOjplc3RpbWF0ZWRTaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9lc3RpbWF0ZWRTaXplOworfQorCitTdHJpbmcgRGF0YWJh
c2VTeW5jOjpmaWxlTmFtZSgpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZv
ciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQorICAgIHJldHVybiBtX2ZpbGVuYW1lLnRocmVh
ZHNhZmVDb3B5KCk7Cit9CisKK3N0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3VsdEZyb21EYXRh
YmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0cmluZyYgcmVz
dWx0U3RyaW5nKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsK
KyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKKworICAgIGlmIChyZXN1bHQg
IT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHByZXBhcmlu
ZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcykiLCByZXN1
bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxS
ZXN1bHRSb3cpIHsKKyAgICAgICAgcmVzdWx0U3RyaW5nID0gc3RhdGVtZW50LmdldENvbHVtblRl
eHQoMCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IFNR
TFJlc3VsdERvbmUpIHsKKyAgICAgICAgcmVzdWx0U3RyaW5nID0gU3RyaW5nKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVp
KSByZWFkaW5nIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnku
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29s
IERhdGFiYXNlU3luYzo6Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24pCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGdldFZlcnNpb25RdWVyeSwgKCJTRUxF
Q1QgdmFsdWUgRlJPTSAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIFdIRVJFIGtleSA9
ICciICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAiJzsiKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0
aG9yaXplci0+ZGlzYWJsZSgpOworCisgICAgYm9vbCByZXN1bHQgPSByZXRyaWV2ZVRleHRSZXN1
bHRGcm9tRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgZ2V0VmVyc2lvblF1ZXJ5LnRocmVhZHNh
ZmVDb3B5KCksIHZlcnNpb24pOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byByZXRyaWV2ZSB2ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURl
YnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5l
bmFibGUoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBib29sIHNldFRleHRW
YWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIs
IHF1ZXJ5KTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKKworICAgIGlm
IChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
cHJlcGFyZSBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0
ZW1lbnQuYmluZFRleHQoMSwgdmFsdWUpOworCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KTsKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gc3RlcCBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcyki
LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEYXRhYmFzZVN5bmM6OnNldFZlcnNpb25JbkRh
dGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICAvLyBUaGUgSU5TRVJUIHdpbGwg
cmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeSBmb3IgdGhlIGRhdGFiYXNlIHdpdGggdGhlIG5ldyB2
ZXJzaW9uIG51bWJlciwgZHVlIHRvIHRoZSBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRQorICAg
IC8vIGNsYXVzZSBpbiB0aGUgQ1JFQVRFIHN0YXRlbWVudCAoc2VlIERhdGFiYXNlOjpwZXJmb3Jt
T3BlbkFuZFZlcmlmeSgpKS4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc2V0VmVy
c2lvblF1ZXJ5LCAoIklOU0VSVCBJTlRPICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIg
KGtleSwgdmFsdWUpIFZBTFVFUyAoJyIgKyBkYXRhYmFzZVZlcnNpb25LZXkoKSArICInLCA/KTsi
KSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOworCisgICAgYm9vbCBy
ZXN1bHQgPSBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIHNldFZlcnNp
b25RdWVyeS50aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgKCVz
KSIsIHZlcnNpb24uYXNjaWkoKS5kYXRhKCksIHNldFZlcnNpb25RdWVyeS5hc2NpaSgpLmRhdGEo
KSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIERhdGFiYXNlU3luYzo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkK
K3sKKyAgICAvLyBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBkbyBzb21ldGhpbmcgZWxzZSBp
biBoZXJlIG90aGVyIHRoYW4gY2FsbGluZyBjbG9zZUltbWVkaWF0ZWx5KCkuCisgICAgY2xvc2VJ
bW1lZGlhdGVseSgpOworfQorCit2b2lkIERhdGFiYXNlU3luYzo6Y2xvc2VJbW1lZGlhdGVseSgp
Cit7CisgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQotCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlU3luYy5oCShyZXZpc2lvbiA2MTE1OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5
bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTkgKzMwLDI2IEBACiAjZGVmaW5lIERhdGFiYXNl
U3luY19oCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFz
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJh
c2UuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgRGF0YWJhc2VBdXRob3JpemVyOwogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKIGNsYXNzIFNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
K2NsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiAv
LyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5
IG9uIHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KLWNsYXNzIERhdGFiYXNlU3luYyA6IHB1
YmxpYyBSZWZDb3VudGVkPERhdGFiYXNlU3luYz4geworY2xhc3MgRGF0YWJhc2VTeW5jIDogcHVi
bGljIEFic3RyYWN0RGF0YWJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldElzQXZh
aWxhYmxlKGJvb2wpOwogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CkBAIC01Niw4ICs2
MywxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xk
VmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgdHJhbnNhY3Rpb24o
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wgcmVhZE9ubHksIEV4
Y2VwdGlvbkNvZGUmKTsKIAotICAgIC8vIEludGVybmFsIGVuZ2luZSBzdXBwb3J0Ci0gICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAg
IHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0OworICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29u
c3Q7CisgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0OworICAgIHZp
cnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTmFtZSgp
IGNvbnN0OworCisgICAgYm9vbCBpc05ldygpIGNvbnN0IHsgcmV0dXJuIG1fbmV3OyB9CisgICAg
Ym9vbCBvcGVuZWQoKSBjb25zdCB7IHJldHVybiBtX29wZW5lZDsgfQorCisgICAgdmlydHVhbCB2
b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZUltbWVk
aWF0ZWx5KCk7CiAKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5h
bWUoKTsKIApAQCAtNjUsMTUgKzgyLDMyIEBAIHByaXZhdGU6CiAgICAgRGF0YWJhc2VTeW5jKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxs
YmFjaz4pOwogCisgICAgYm9vbCBvcGVuQW5kVmVyaWZ5KEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBi
b29sIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHBlcmZv
cm1DcmVhdGlvbkNhbGxiYWNrKCk7CisKKyAgICBib29sIGdldFZlcnNpb25Gcm9tRGF0YWJhc2Uo
U3RyaW5nJik7CisgICAgYm9vbCBzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmKTsK
KwogICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogICAg
IFN0cmluZyBtX25hbWU7CiAgICAgU3RyaW5nIG1fZXhwZWN0ZWRWZXJzaW9uOwogICAgIFN0cmlu
ZyBtX2Rpc3BsYXlOYW1lOwogICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOwogICAg
IFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBtX2NyZWF0aW9uQ2FsbGJhY2s7CiAKKyAgICBib29s
IG1fbmV3OworICAgIGJvb2wgbV9vcGVuZWQ7CisKKyAgICBpbnQgbV9ndWlkOworICAgIFN0cmlu
ZyBtX2ZpbGVuYW1lOworCisgICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFzZTsKKyAg
ICBSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVyPiBtX2RhdGFiYXNlQXV0aG9yaXplcjsKKwogI2lm
bmRlZiBOREVCVUcKLSAgICBTdHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25zdCB7IHJldHVy
biBTdHJpbmcoKTsgfQorICAgIFN0cmluZyBkYXRhYmFzZURlYnVnTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9CiAjZW5k
aWYKIH07CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYxMTcyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDYtMTQgIER1bWl0cnUg
RGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVbmNvbW1lbnQgYWxsIHRlc3QgY2FzZXMgaW4gb3Blbi1k
YXRhYmFzZS1zeW5jLWlucHV0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNjA3CisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVu
LWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qczoKKwogMjAx
MC0wNi0xNCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3lu
Yy1pbnB1dHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MTE1OCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC01LDQgKzUsNiBAQCBQQVNTOiB1bmRlZmluZWQKIFBBU1M6IHVu
ZGVmaW5lZAogUEFTUzogdW5kZWZpbmVkCiBQQVNTOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4
Y2VwdGlvbiAxNworUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4KK1BBU1M6IGNh
bGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGggYSBjcmVhdGlvbiBjYWxsYmFjayBzdWNjZWVk
ZWQuCiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9v
cGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpz
CShyZXZpc2lvbiA2MTE1OCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jl
c291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxOSArNDYsMTggQEAgdHJ5IHsKICAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNz
YWdlKTsKIH0KIAotLy8gRklYTUU6IFVuY29tbWVudCB0aGVzZSB0ZXN0cyB3aGVuIHRoZSBzeW5j
IERCIEFQSSBpcyBpbXBsZW1lbnRlZC4KLS8vdHJ5IHsKLS8vICAgIGRiID0gb3BlbkRhdGFiYXNl
U3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7Ci0vLyAg
ICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4iKTsKLS8v
fSBjYXRjaCAoZXJyKSB7Ci0vLyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdl
KTsKLS8vfQotLy8KLS8vdHJ5IHsKLS8vICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1l
IiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwgZnVuY3Rpb24oZGIpIHsgfSk7
Ci0vLyAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0
aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4iKTsKLS8vfSBjYXRjaCAoZXJyKSB7Ci0v
LyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKLS8vfQordHJ5IHsKKyAg
ICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlw
dGlvbiIsIDEwMjQpOworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkg
c3VjY2VlZGVkLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIg
KyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJE
Qk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0LCBmdW5jdGlvbihkYikg
eyB9KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkg
d2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4iKTsKK30gY2F0Y2ggKGVycikgewor
ICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQogCiBwb3N0TWVzc2Fn
ZSgiZG9uZSIpOwo=
</data>
<flag name="commit-queue"
          id="45174"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58972</attachid>
            <date>2010-06-17 03:05:46 -0700</date>
            <delta_ts>2010-06-17 14:43:51 -0700</delta_ts>
            <desc>patch #2: Add the SQLException class</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24648</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTMxNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMDYtMTcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgdGhlIFNRTEV4Y2VwdGlvbiBjbGFzcyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gcmVw
b3J0IHN5bmMgREIgZXJyb3JzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDA2MDcKKworICAgICAgICAqIEFuZHJvaWQuZGVyaXZlZC5qc2NiaW5kaW5n
cy5tazoKKyAgICAgICAgKiBBbmRyb2lkLmRlcml2ZWQudjhiaW5kaW5ncy5tazoKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5jcHA6CisgICAgICAg
ICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpzZXRET01FeGNlcHRpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRXhjZXB0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0V4Y2VwdGlvbkJh
c2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFBy
b3h5Lmg6CisgICAgICAgICogZG9tL0V4Y2VwdGlvbkNvZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbik6Cisg
ICAgICAgICogZG9tL0V4Y2VwdGlvbkNvZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAg
ICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHN0b3JhZ2UvU1FMRXhjZXB0aW9u
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1FMRXhjZXB0aW9uOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMRXhjZXB0aW9uOjopOgorICAgICAgICAoV2ViQ29yZTo6U1FMRXhj
ZXB0aW9uOjpTUUxFeGNlcHRpb24pOgorICAgICAgICAqIHN0b3JhZ2UvU1FMRXhjZXB0aW9uLmlk
bDogQWRkZWQuCisKIDIwMTAtMDUtMjggIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5r
by52aWF0Y2hlc2xhdkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1
c21hbm4sIEFudHRpIEtvaXZpc3RvCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQuZGVyaXZlZC5qc2Ni
aW5kaW5ncy5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQuZGVyaXZlZC5qc2NiaW5k
aW5ncy5tawkocmV2aXNpb24gNjEzMTQpCisrKyBXZWJDb3JlL0FuZHJvaWQuZGVyaXZlZC5qc2Ni
aW5kaW5ncy5tawkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNyw3IEBAICQocGF0c3Vic3Qg
JS5oLCUuY3BwLCQoR0VOKSk6ICQoaW50ZXJtZWQKIEdFTiA6PSBcCiAgICAgJChpbnRlcm1lZGlh
dGVzKS9zdG9yYWdlL0pTRGF0YWJhc2UuaCBcCiAgICAgJChpbnRlcm1lZGlhdGVzKS9zdG9yYWdl
L0pTU1FMRXJyb3IuaCBcCisgICAgJChpbnRlcm1lZGlhdGVzKS9zdG9yYWdlL0pTU1FMRXhjZXB0
aW9uLmggXAogICAgICQoaW50ZXJtZWRpYXRlcykvc3RvcmFnZS9KU1NRTFJlc3VsdFNldC5oIFwK
ICAgICAkKGludGVybWVkaWF0ZXMpL3N0b3JhZ2UvSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggXAog
ICAgICQoaW50ZXJtZWRpYXRlcykvc3RvcmFnZS9KU1NRTFRyYW5zYWN0aW9uLmgKSW5kZXg6IFdl
YkNvcmUvQW5kcm9pZC5kZXJpdmVkLnY4YmluZGluZ3MubWsKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9BbmRyb2lkLmRlcml2ZWQudjhiaW5kaW5ncy5tawkocmV2aXNpb24gNjEzMTQpCisrKyBXZWJD
b3JlL0FuZHJvaWQuZGVyaXZlZC52OGJpbmRpbmdzLm1rCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgs
NiArMzA4LDcgQEAgJChwYXRzdWJzdCAlLmgsJS5jcHAsJChHRU4pKTogJChpbnRlcm1lZAogR0VO
IDo9IFwKICAgICAkKGludGVybWVkaWF0ZXMpL2JpbmRpbmdzL1Y4RGF0YWJhc2UuaCBcCiAgICAg
JChpbnRlcm1lZGlhdGVzKS9iaW5kaW5ncy9WOFNRTEVycm9yLmggXAorICAgICQoaW50ZXJtZWRp
YXRlcykvYmluZGluZ3MvVjhTUUxFeGNlcHRpb24uaCBcCiAgICAgJChpbnRlcm1lZGlhdGVzKS9i
aW5kaW5ncy9WOFNRTFJlc3VsdFNldC5oIFwKICAgICAkKGludGVybWVkaWF0ZXMpL2JpbmRpbmdz
L1Y4U1FMUmVzdWx0U2V0Um93TGlzdC5oIFwKICAgICAkKGludGVybWVkaWF0ZXMpL2JpbmRpbmdz
L1Y4U1FMVHJhbnNhY3Rpb24uaApJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA2MTMxNCkKKysrIFdlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMzNSw2ICszMzUsNyBAQCBTRVQo
V2ViQ29yZV9JRExfRklMRVMKICAgICBzdG9yYWdlL0lEQlN1Y2Nlc3NFdmVudC5pZGwKICAgICBz
dG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaWRsCiAgICAgc3RvcmFnZS9TUUxFcnJvci5p
ZGwKKyAgICBzdG9yYWdlL1NRTEV4Y2VwdGlvbi5pZGwKICAgICBzdG9yYWdlL1NRTFJlc3VsdFNl
dC5pZGwKICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCiAgICAgc3RvcmFnZS9T
UUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwKSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3BwCShyZXZpc2lvbiA2MTMx
NCkKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEs
NiArMjIxLDcgQEAKICNpbmNsdWRlICJKU1NoYXJlZFdvcmtlci5jcHAiCiAjaW5jbHVkZSAiSlNT
aGFyZWRXb3JrZXJDb250ZXh0LmNwcCIKICNpbmNsdWRlICJKU1NRTEVycm9yLmNwcCIKKyNpbmNs
dWRlICJKU1NRTEV4Y2VwdGlvbi5jcHAiCiAjaW5jbHVkZSAiSlNTUUxSZXN1bHRTZXQuY3BwIgog
I2luY2x1ZGUgIkpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAiCiAjaW5jbHVkZSAiSlNTUUxTdGF0
ZW1lbnRDYWxsYmFjay5jcHAiCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiA2MTMxNCkK
KysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMjY1LDYg
KzI2NSw3IEBAIERPTV9DTEFTU0VTID0gXAogICAgIFNjcmlwdFByb2ZpbGUgXAogICAgIFNjcmlw
dFByb2ZpbGVOb2RlIFwKICAgICBTUUxFcnJvciBcCisgICAgU1FMRXhjZXB0aW9uIFwKICAgICBT
UUxSZXN1bHRTZXQgXAogICAgIFNRTFJlc3VsdFNldFJvd0xpc3QgXAogICAgIFNRTFN0YXRlbWVu
dENhbGxiYWNrIFwKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjEzMTQpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc4LDYgKzIzNzgsNyBAQCBJRExfQklORElO
R1MgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmlkbCBcCiAJV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5p
ZGwgXAorCVdlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU1FMUmVzdWx0U2V0LmlkbCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xp
c3QuaWRsIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsIFwKQEAg
LTI0MzMsNiArMjQzNCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9zdG9yYWdl
L09yaWdpblVzYWdlUmVjb3JkLmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVj
b3JkLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5oIFwKKwlXZWJDb3JlL3N0b3JhZ2Uv
U1FMRXhjZXB0aW9uLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwIFwKIAlX
ZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmggXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1
bHRTZXRSb3dMaXN0LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjEzMTQpCisrKyBXZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjM4LDYgKzIzOCw3IEBACiAgICAgICAgICAg
ICAnc3RvcmFnZS9JREJTdWNjZXNzRXZlbnQuaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL0lu
ZGV4ZWREYXRhYmFzZVJlcXVlc3QuaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTEVycm9y
LmlkbCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsJywKICAgICAgICAg
ICAgICdzdG9yYWdlL1NRTFJlc3VsdFNldC5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FM
UmVzdWx0U2V0Um93TGlzdC5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMU3RhdGVtZW50
Q2FsbGJhY2suaWRsJywKQEAgLTM0MTMsNiArMzQxNCw3IEBACiAgICAgICAgICAgICAnc3RvcmFn
ZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvT3JpZ2luVXNh
Z2VSZWNvcmQuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxFcnJvci5oJywKKyAgICAgICAg
ICAgICdzdG9yYWdlL1NRTEV4Y2VwdGlvbi5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFJl
c3VsdFNldC5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmgnLAogICAg
ICAgICAgICAgJ3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAnLApJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJpCShyZXZpc2lv
biA2MTMxNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTQ3MSw2
ICs0NzEsNyBAQCBJRExfQklORElOR1MgKz0gXAogICAgIHN0b3JhZ2UvU3RvcmFnZS5pZGwgXAog
ICAgIHN0b3JhZ2UvU3RvcmFnZUV2ZW50LmlkbCBcCiAgICAgc3RvcmFnZS9TUUxFcnJvci5pZGwg
XAorICAgIHN0b3JhZ2UvU1FMRXhjZXB0aW9uLmlkbCBcCiAgICAgc3RvcmFnZS9TUUxSZXN1bHRT
ZXQuaWRsIFwKICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsIFwKICAgICBzdG9y
YWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDYxMzE0KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY0MTMsNiArNDY0MTMsMTAgQEAK
IAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3Rv
cmFnZVxTUUxFeGNlcHRpb24uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMUmVzdWx0U2V0LmNwcCINCiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gNjEzMTQpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDIxNywxMCArNDIxNywxMyBAQAogCQlCNTIzQ0Yw
OTExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjNDRjAyMTE4MjY3NTQwMEVCQjI5
QyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuY3BwICovOyB9OwogCQlCNTIzQ0YwQTExODI2NzU0MDBF
QkIyOUMgLyogRGF0YWJhc2VTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEI1MjNDRjAzMTE4MjY3NTQwMEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMu
Y3BwICovOyB9OwogCQlCNTIzQ0YwQjExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTIzQ0YwNDEx
ODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmggKi87IH07CisJCUI1MjVBOTY1MTFDQTIz
NDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhj
ZXB0aW9uLmggKi87IH07CisJCUI1MjVBOTY2MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2Vw
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
NTI1QTk2NDExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24uY3BwICovOyB9OwogCQlC
NTVENUFBNDExOTEzMUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RDVBQTIx
MTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCAqLzsgfTsK
IAkJQjU1RDVBQTUxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1
RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3Bw
ICovOyB9OwogCQlCNTVENUFBODExOTEzMjUwMDBCQ0MzMTUgLyogSlNEYXRhYmFzZVN5bmNDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1
RDVBQTYxMTkxMzI1MDAwQkNDMzE1IC8qIEpTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcCAqLzsgfTsK
IAkJQjU1RDVBQTkxMTkxMzI1MDAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NUQ1
QUE3MTE5MTMyNTAwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAgKi87
IH07CisJCUI1NkVCQTg1MTFDOUZGODEwMEIwNDQ3NyAvKiBTUUxFeGNlcHRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NkVCQTgzMTFDOUZGODEw
MEIwNDQ3NyAvKiBTUUxFeGNlcHRpb24uaCAqLzsgfTsKIAkJQjU4Q0VCNjkxMTkxMzYwNzAwMkE2
NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCNThDRUI2NzExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRhYmFzZVN5bmMu
aCAqLzsgfTsKIAkJQjU4Q0VCNkExMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1OENFQjY4
MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNlU3luYy5jcHAgKi87IH07CiAJCUI1OENFQjZE
MTE5MTM2MUMwMDJBNjc5MCAvKiBKU1NRTFRyYW5zYWN0aW9uU3luYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU4Q0VCNkIxMTkxMzYxQzAwMkE2Nzkw
IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jLmggKi87IH07CkBAIC05Njk2LDYgKzk2OTksOCBAQAog
CQlCNTIzQ0YwMjExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uU3luYy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1MjNDRjAzMTE4MjY3NTQwMEVCQjI5QyAv
KiBEYXRhYmFzZVN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGF0YWJhc2VTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjUyM0NGMDQx
MTgyNjc1NDAwRUJCMjlDIC8qIERhdGFiYXNlU3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEYXRhYmFzZVN5bmMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMRXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUI1MjVBOTY0MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTEV4Y2VwdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUEyMTE5MTMxRkMwMEJDQzMx
NSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUI1NUQ1QUE2MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFiYXNlU3lu
Y0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NzAzLDYgKzk3MDgs
OCBAQAogCQlCNTVENUFCQjExOTEzMjcyMDBCQ0MzMTUgLyogRGF0YWJhc2VTeW5jLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBEYXRhYmFzZVN5bmMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCNTVENUFCQzExOTEzMjcyMDBCQ0MzMTUgLyogU1FMVHJhbnNhY3Rpb25TeW5j
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTUUxUcmFuc2FjdGlvblN5bmMuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFCRDExOTEzMjcyMDBCQ0MzMTUgLyogU1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNRTFRy
YW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QjU2RUJBODMxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTUUxFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQjU2RUJBODQxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlvbi5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1FMRXhjZXB0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjU4Q0VCNjcxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YWJhc2VTeW5jLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OENFQjY4MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0Rh
dGFiYXNlU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Rh
dGFiYXNlU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OENFQjZCMTE5
MTM2MUMwMDJBNjc5MCAvKiBKU1NRTFRyYW5zYWN0aW9uU3luYy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uU3luYy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTEwMTksNiArMTEwMjYsOCBAQAogCQkxQUU4MkVDOTBDQUFFMTc3MDAy
MjM3QUUgLyogc3RvcmFnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJQjU2RUJBODMxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlvbi5oICovLAor
CQkJCUI1NkVCQTg0MTFDOUZGODEwMEIwNDQ3NyAvKiBTUUxFeGNlcHRpb24uaWRsICovLAogCQkJ
CTgxQ0MxMTQwMTFCRUFBOUQwMEQwRDg1NiAvKiBJREJLZXlSYW5nZS5pZGwgKi8sCiAJCQkJODE2
QzgwNjYxMUJFODg3RTAwOUE0NUU5IC8qIElEQktleVJhbmdlLmNwcCAqLywKIAkJCQk4MTZDODA2
NzExQkU4ODdFMDA5QTQ1RTkgLyogSURCS2V5UmFuZ2UuaCAqLywKQEAgLTE0NDczLDYgKzE0NDgy
LDggQEAKIAkJCQlDNUY0RjQwRjExOTMwNkMwMDBGREZBREQgLyogSlNJbmRleGVkRGF0YWJhc2VS
ZXF1ZXN0LmggKi8sCiAJCQkJNTE0Qzc2MzUwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMRXJyb3Iu
Y3BwICovLAogCQkJCUJDODI0MzI1MEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTEVycm9yLmggKi8s
CisJCQkJQjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggKi8sCisJ
CQkJQjUyNUE5NjQxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmNwcCAqLywKIAkJ
CQkxQUU4MkZFQTBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuY3BwICovLAogCQkJ
CTFBRTgyRkVCMENBQjA3RUUwMDIyMzdBRSAvKiBKU1NRTFJlc3VsdFNldC5oICovLAogCQkJCTFB
RkUxMTk3MENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovLApA
QCAtMTk0MjUsNiArMTk0MzYsOCBAQAogCQkJCTgxNkM4MEFGMTFCRTk5MEQwMDlBNDVFOSAvKiBK
U0lEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODUzRDczNDExQzkxMDkwMDBCMkZE
NDIgLyogU1ZHVGV4dFF1ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUZGQkYzRjExQzkzRUUz
MDA2QTcxMTggLyogV2ViR0xMYXllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU2RUJBODUxMUM5
RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjUyNUE5
NjUxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTIxNzMyLDYgKzIxNzQ1LDcgQEAKIAkJCQkwODUzRDczMjExQzkxMDkwMDBCMkZENDIgLyogU1ZH
VGV4dENodW5rTGF5b3V0SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODUzRDczMzExQzkx
MDkwMDBCMkZENDIgLyogU1ZHVGV4dFF1ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RkZC
RjQwMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
QjUyNUE5NjYxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gNjEz
MTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDYgKzcxLDExIEBACiAjaW5jbHVkZSAiWFBhdGhFeGNlcHRpb24uaCIKICNlbmRp
ZgogCisjaWYgRU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUgIkpTU1FMRXhjZXB0aW9uLmgiCisj
aW5jbHVkZSAiU1FMRXhjZXB0aW9uLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjAwLDYgKzYwNSwxMSBAQCB2b2lkIHNldERPTUV4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAgICAgICAgICAgICBlcnJvck9iamVjdCA9IHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBYUGF0aEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9u
KSk7CiAgICAgICAgICAgICBicmVhazsKICNlbmRpZgorI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAg
ICAgICAgY2FzZSBTUUxFeGNlcHRpb25UeXBlOgorICAgICAgICAgICAgZXJyb3JPYmplY3QgPSB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24p
KTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgfQogCiAgICAgQVNTRVJUKGVycm9y
T2JqZWN0KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhjZXB0aW9uQmFzZS5jcHAJKHJl
dmlzaW9uIDYxMzE0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBACiAjaWYgRU5BQkxFKFhQQVRIKQ0KICNp
bmNsdWRlICJKU1hQYXRoRXhjZXB0aW9uLmgiDQogI2VuZGlmDQorI2lmIEVOQUJMRShYUEFUSCkN
CisjaW5jbHVkZSAiSlNTUUxFeGNlcHRpb24uaCINCisjZW5kaWYNCiAgDQogbmFtZXNwYWNlIFdl
YkNvcmUgew0KICANCkBAIC01Nyw2ICs2MCwxMCBAQCBFeGNlcHRpb25CYXNlKiB0b0V4Y2VwdGlv
bkJhc2UoSlNDOjpKU1ZhCiAgICAgaWYgKFhQYXRoRXhjZXB0aW9uKiBwYXRoRXhjZXB0aW9uID0g
dG9YUGF0aEV4Y2VwdGlvbih2YWx1ZSkpDQogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxFeGNlcHRpb25CYXNlKj4ocGF0aEV4Y2VwdGlvbik7DQogI2VuZGlmDQorI2lmIEVOQUJMRShE
QVRBQkFTRSkNCisgICAgaWYgKFNRTEV4Y2VwdGlvbiogcGF0aEV4Y2VwdGlvbiA9IHRvU1FMRXhj
ZXB0aW9uKHZhbHVlKSkNCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEV4Y2VwdGlv
bkJhc2UqPihwYXRoRXhjZXB0aW9uKTsNCisjZW5kaWYNCiAgICAgDQogICAgIHJldHVybiAwOw0K
IH0NCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDYxMzE0KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUs
NyBAQAogI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiVjhJc29s
YXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOFJhbmdlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAi
VjhTUUxFeGNlcHRpb24uaCIKICNpbmNsdWRlICJWOFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiVjhYUGF0aEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQu
aCIKQEAgLTY3Nyw2ICs2NzgsMTEgQEAgdm9pZCBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oaW50
IGV4Y2VwdAogICAgICAgICBleGNlcHRpb24gPSB0b1Y4KFhQYXRoRXhjZXB0aW9uOjpjcmVhdGUo
ZGVzY3JpcHRpb24pKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKKyNpZiBFTkFCTEUoREFUQUJB
U0UpCisgICAgY2FzZSBTUUxFeGNlcHRpb25UeXBlOgorICAgICAgICBleGNlcHRpb24gPSB0b1Y4
KFNRTEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworI2Vu
ZGlmCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHJldmlzaW9uIDYxMzE0KQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICszNTMsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogc3ZnRXhjZXB0aW9u
TmFtZShpbnQgZXhjZXB0aW9uQ29kZSk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShEQVRBQkFTRSkK
KyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNxbEV4Y2VwdGlvbk5hbWUoaW50IGV4Y2VwdGlv
bkNvZGUpOworI2VuZGlmCisKICAgICAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAgICAgICAgLy8g
Rm9yIHRoZSBtb21lbnQsIHdlIGhhdmUgb25lIG9mIHRoZXNlLiAgU29vbiB3ZSB3aWxsIGhhdmUg
b25lIHBlciBET01XcmFwcGVyV29ybGQuCkluZGV4OiBXZWJDb3JlL2RvbS9FeGNlcHRpb25Db2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FeGNlcHRpb25Db2RlLmNwcAkocmV2aXNp
b24gNjEzMTQpCisrKyBXZWJDb3JlL2RvbS9FeGNlcHRpb25Db2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNiArMzgsMTAgQEAKICNpbmNsdWRlICJYUGF0aEV4Y2VwdGlvbi5oIgogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5jbHVkZSAiU1FMRXhjZXB0aW9uLmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZXhj
ZXB0aW9uTmFtZXNbXSA9IHsKQEAgLTE0NSw2ICsxNDksMzAgQEAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IHN2Z0V4Y2VwdGlvbkRlcwogfTsKICNlbmRpZgogCisjaWYgRU5BQkxFKERBVEFCQVNF
KQorc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNxbEV4Y2VwdGlvbk5hbWVzW10gPSB7CisgICAg
IlVOS05PV05fRVJSIiwKKyAgICAiREFUQUJBU0VfRVJSIiwKKyAgICAiVkVSU0lPTl9FUlIiLAor
ICAgICJUT09fTEFSR0VfRVJSIiwKKyAgICAiUVVPVEFfRVJSIiwKKyAgICAiU1lOVEFYX0VSUiIs
CisgICAgIkNPTlNUUkFJTlRfRVJSIiwKKyAgICAiVElNRU9VVF9FUlIiCit9OworCitzdGF0aWMg
Y29uc3QgY2hhciogY29uc3Qgc3FsRXhjZXB0aW9uRGVzY3JpcHRpb25zW10gPSB7CisgICAgIlRo
ZSBvcGVyYXRpb24gZmFpbGVkIGZvciByZWFzb25zIHVucmVsYXRlZCB0byB0aGUgZGF0YWJhc2Uu
IiwKKyAgICAiVGhlIG9wZXJhdGlvbiBmYWlsZWQgZm9yIHNvbWUgcmVhc29uIHJlbGF0ZWQgdG8g
dGhlIGRhdGFiYXNlLiIsCisgICAgIlRoZSBhY3R1YWwgZGF0YWJhc2UgdmVyc2lvbiBkaWQgbm90
IG1hdGNoIHRoZSBleHBlY3RlZCB2ZXJzaW9uLiIsCisgICAgIkRhdGEgcmV0dXJuZWQgZnJvbSB0
aGUgZGF0YWJhc2UgaXMgdG9vIGxhcmdlLiIsCisgICAgIlF1b3RhIHdhcyBleGNlZWRlZC4iLAor
ICAgICJJbnZhbGlkIG9yIHVuYXV0aG9yaXplZCBzdGF0ZW1lbnQ7IG9yIHRoZSBudW1iZXIgb2Yg
YXJndW1lbnRzIGRpZCBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiA/IHBsYWNlaG9sZGVycy4iLAor
ICAgICJBIGNvbnN0cmFpbnQgd2FzIHZpb2xhdGVkLiIsCisgICAgIkEgdHJhbnNhY3Rpb24gbG9j
ayBjb3VsZCBub3QgYmUgYWNxdWlyZWQgaW4gYSByZWFzb25hYmxlIHRpbWUuIgorfTsKKyNlbmRp
ZgorCiB2b2lkIGdldEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihFeGNlcHRpb25Db2RlIGVjLCBF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewogICAgIEFTU0VSVChlYyk7
CkBAIC0xNTYsNyArMTg0LDcgQEAgdm9pZCBnZXRFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24oRXhj
ZXB0aQogICAgIGludCBuYW1lVGFibGVTaXplOwogICAgIGludCBuYW1lVGFibGVPZmZzZXQ7CiAg
ICAgRXhjZXB0aW9uVHlwZSB0eXBlOwotICAgIAorCiAgICAgaWYgKGNvZGUgPj0gUmFuZ2VFeGNl
cHRpb246OlJhbmdlRXhjZXB0aW9uT2Zmc2V0ICYmIGNvZGUgPD0gUmFuZ2VFeGNlcHRpb246OlJh
bmdlRXhjZXB0aW9uTWF4KSB7CiAgICAgICAgIHR5cGUgPSBSYW5nZUV4Y2VwdGlvblR5cGU7CiAg
ICAgICAgIHR5cGVOYW1lID0gIkRPTSBSYW5nZSI7CkBAIC0yMDMsNiArMjMxLDE2IEBAIHZvaWQg
Z2V0RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKEV4Y2VwdGkKICAgICAgICAgbmFtZVRhYmxlU2l6
ZSA9IHNpemVvZihzdmdFeGNlcHRpb25OYW1lcykgLyBzaXplb2Yoc3ZnRXhjZXB0aW9uTmFtZXNb
MF0pOwogICAgICAgICBuYW1lVGFibGVPZmZzZXQgPSBTVkdFeGNlcHRpb246OlNWR19XUk9OR19U
WVBFX0VSUjsKICNlbmRpZgorI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICB9IGVsc2UgaWYgKGNv
ZGUgPj0gU1FMRXhjZXB0aW9uOjpTUUxFeGNlcHRpb25PZmZzZXQgJiYgY29kZSA8PSBTUUxFeGNl
cHRpb246OlNRTEV4Y2VwdGlvbk1heCkgeworICAgICAgICB0eXBlID0gU1FMRXhjZXB0aW9uVHlw
ZTsKKyAgICAgICAgdHlwZU5hbWUgPSAiRE9NIFNRTCI7CisgICAgICAgIGNvZGUgLT0gU1FMRXhj
ZXB0aW9uOjpTUUxFeGNlcHRpb25PZmZzZXQ7CisgICAgICAgIG5hbWVUYWJsZSA9IHNxbEV4Y2Vw
dGlvbk5hbWVzOworICAgICAgICBkZXNjcmlwdGlvblRhYmxlID0gc3FsRXhjZXB0aW9uRGVzY3Jp
cHRpb25zOworICAgICAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKHNxbEV4Y2VwdGlvbk5hbWVz
KSAvIHNpemVvZihzcWxFeGNlcHRpb25OYW1lc1swXSk7CisgICAgICAgIG5hbWVUYWJsZU9mZnNl
dCA9IFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7CisjZW5kaWYKICAgICB9IGVsc2UgewogICAg
ICAgICB0eXBlID0gRE9NRXhjZXB0aW9uVHlwZTsKICAgICAgICAgdHlwZU5hbWUgPSAiRE9NIjsK
SW5kZXg6IFdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9FeGNlcHRpb25Db2RlLmgJKHJldmlzaW9uIDYxMzE0KQorKysgV2ViQ29yZS9kb20vRXhj
ZXB0aW9uQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw4ICs3OCwxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgLCBTVkdFeGNlcHRpb25UeXBlCiAj
ZW5kaWYKLSAgICB9OyAgICAgICAgCi0gICAgCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgICAg
ICAsIFNRTEV4Y2VwdGlvblR5cGUKKyNlbmRpZgorICAgIH07CisKIAogICAgIHN0cnVjdCBFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gewogICAgICAgICBjb25zdCBjaGFyKiB0eXBlTmFtZTsgLy8g
aGFzIHNwYWNlcyBhbmQgaXMgc3VpdGFibGUgZm9yIHVzZSBpbiBleGNlcHRpb24gZGVzY3JpcHRp
b24gc3RyaW5nczsgbWF4aW11bSBsZW5ndGggaXMgMTAgY2hhcmFjdGVycwpJbmRleDogV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5pZGwJKHJldmlzaW9uIDYxMzE0KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTcyOSw2ICs3MjksMTAgQEAgbW9kdWxlIHdpbmRvdyB7CiAjZW5kaWYK
ICNlbmRpZgogCisjaWYgZGVmaW5lZChFTkFCTEVfREFUQUJBU0UpCisgICAgICAgIGF0dHJpYnV0
ZSBTUUxFeGNlcHRpb25Db25zdHJ1Y3RvciBTUUxFeGNlcHRpb247CisjZW5kaWYKKwogICAgICAg
ICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPVRPVUNIX0VWRU5UU10gVG91Y2hFdmVudENvbnN0cnVj
dG9yIFRvdWNoRXZlbnQ7CiAKICAgICAgICAgYXR0cmlidXRlIERPTUZvcm1EYXRhQ29uc3RydWN0
b3IgRm9ybURhdGE7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTEV4Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9zdG9yYWdlL1NRTEV4Y2VwdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFNRTEV4Y2VwdGlvbl9oCisjZGVmaW5lIFNRTEV4Y2VwdGlvbl9o
CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisKKyNpbmNsdWRlICJFeGNlcHRpb25CYXNlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1FMRXhjZXB0aW9uIDogcHVibGljIEV4Y2Vw
dGlvbkJhc2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTEV4Y2VwdGlvbj4g
Y3JlYXRlKGNvbnN0IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTEV4Y2VwdGlvbihkZXNjcmlwdGlvbikp
OworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBpbnQgU1FMRXhjZXB0aW9uT2Zmc2V0ID0gMTAw
MDsKKyAgICBzdGF0aWMgY29uc3QgaW50IFNRTEV4Y2VwdGlvbk1heCA9IDEwOTk7CisKKyAgICBl
bnVtIFNRTEV4Y2VwdGlvbkNvZGUgeworICAgICAgICBVTktOT1dOX0VSUiA9IFNRTEV4Y2VwdGlv
bk9mZnNldCwKKyAgICAgICAgREFUQUJBU0VfRVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0ICsgMSwK
KyAgICAgICAgVkVSU0lPTl9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyAyLAorICAgICAgICBU
T09fTEFSR0VfRVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0ICsgMywKKyAgICAgICAgUVVPVEFfRVJS
ID0gU1FMRXhjZXB0aW9uT2Zmc2V0ICsgNCwKKyAgICAgICAgU1lOVEFYX0VSUiA9IFNRTEV4Y2Vw
dGlvbk9mZnNldCArIDUsCisgICAgICAgIENPTlNUUkFJTlRfRVJSID0gU1FMRXhjZXB0aW9uT2Zm
c2V0ICsgNiwKKyAgICAgICAgVElNRU9VVF9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyA3Cisg
ICAgfTsKKworcHJpdmF0ZToKKyAgICBTUUxFeGNlcHRpb24oY29uc3QgRXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKKyAgICAgICAgOiBFeGNlcHRpb25CYXNlKGRlc2NyaXB0
aW9uKQorICAgIHsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREFUQUJBU0UpCisKKyNlbmRpZiAvLyBTUUxFeGNlcHRpb25faApJbmRleDog
V2ViQ29yZS9zdG9yYWdlL1NRTEV4Y2VwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1NRTEV4Y2VwdGlvbi5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
U1FMRXhjZXB0aW9uLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBz
dG9yYWdlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPURBVEFCQVNF
LAorICAgICAgICBOb1N0YXRpY1RhYmxlcworICAgIF0gU1FMRXhjZXB0aW9uIHsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgY29kZTsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBtZXNzYWdlOworCisgICAgICAgIC8vIFNRTEV4Y2VwdGlvbkNv
ZGU6IHVzZWQgb25seSBpbiB0aGUgc3luYyBEQiBBUEkKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgVU5LTk9XTl9FUlIgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBEQVRB
QkFTRV9FUlIgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBWRVJTSU9OX0VSUiA9
IDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFRPT19MQVJHRV9FUlIgPSAzOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBRVU9UQV9FUlIgPSA0OworICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBTWU5UQVhfRVJSID0gNTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgQ09OU1RSQUlOVF9FUlIgPSA2OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBUSU1F
T1VUX0VSUiA9IDc7CisgICAgfTsKK30K
</data>
<flag name="commit-queue"
          id="45541"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59039</attachid>
            <date>2010-06-17 14:43:51 -0700</date>
            <delta_ts>2010-06-22 13:24:33 -0700</delta_ts>
            <desc>patch #2: Add the SQLException class</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>29639</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTM0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMDYtMTcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgdGhlIFNRTEV4Y2VwdGlvbiBjbGFzcyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gcmVw
b3J0IHN5bmMgREIgZXJyb3JzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDA2MDcKKworICAgICAgICAqIEFuZHJvaWQuZGVyaXZlZC5qc2NiaW5kaW5n
cy5tazoKKyAgICAgICAgKiBBbmRyb2lkLmRlcml2ZWQudjhiaW5kaW5ncy5tazoKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5jcHA6CisgICAgICAg
ICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpzZXRET01FeGNlcHRpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRXhjZXB0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0V4Y2VwdGlvbkJh
c2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFBy
b3h5Lmg6CisgICAgICAgICogZG9tL0V4Y2VwdGlvbkNvZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbik6Cisg
ICAgICAgICogZG9tL0V4Y2VwdGlvbkNvZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAg
ICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHN0b3JhZ2UvU1FMRXhjZXB0aW9u
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1FMRXhjZXB0aW9uOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMRXhjZXB0aW9uOjopOgorICAgICAgICAoV2ViQ29yZTo6U1FMRXhj
ZXB0aW9uOjpTUUxFeGNlcHRpb24pOgorICAgICAgICAqIHN0b3JhZ2UvU1FMRXhjZXB0aW9uLmlk
bDogQWRkZWQuCisKIDIwMTAtMDYtMTcgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEppYW4gTGkuCkluZGV4OiBXZWJDb3JlL0FuZHJv
aWQuZGVyaXZlZC5qc2NiaW5kaW5ncy5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQu
ZGVyaXZlZC5qc2NiaW5kaW5ncy5tawkocmV2aXNpb24gNjEzNDkpCisrKyBXZWJDb3JlL0FuZHJv
aWQuZGVyaXZlZC5qc2NiaW5kaW5ncy5tawkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNyw3
IEBAICQocGF0c3Vic3QgJS5oLCUuY3BwLCQoR0VOKSk6ICQoaW50ZXJtZWQKIEdFTiA6PSBcCiAg
ICAgJChpbnRlcm1lZGlhdGVzKS9zdG9yYWdlL0pTRGF0YWJhc2UuaCBcCiAgICAgJChpbnRlcm1l
ZGlhdGVzKS9zdG9yYWdlL0pTU1FMRXJyb3IuaCBcCisgICAgJChpbnRlcm1lZGlhdGVzKS9zdG9y
YWdlL0pTU1FMRXhjZXB0aW9uLmggXAogICAgICQoaW50ZXJtZWRpYXRlcykvc3RvcmFnZS9KU1NR
TFJlc3VsdFNldC5oIFwKICAgICAkKGludGVybWVkaWF0ZXMpL3N0b3JhZ2UvSlNTUUxSZXN1bHRT
ZXRSb3dMaXN0LmggXAogICAgICQoaW50ZXJtZWRpYXRlcykvc3RvcmFnZS9KU1NRTFRyYW5zYWN0
aW9uLmgKSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5kZXJpdmVkLnY4YmluZGluZ3MubWsKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLmRlcml2ZWQudjhiaW5kaW5ncy5tawkocmV2aXNpb24g
NjEzNDkpCisrKyBXZWJDb3JlL0FuZHJvaWQuZGVyaXZlZC52OGJpbmRpbmdzLm1rCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDgsNiArMzA4LDcgQEAgJChwYXRzdWJzdCAlLmgsJS5jcHAsJChHRU4pKTog
JChpbnRlcm1lZAogR0VOIDo9IFwKICAgICAkKGludGVybWVkaWF0ZXMpL2JpbmRpbmdzL1Y4RGF0
YWJhc2UuaCBcCiAgICAgJChpbnRlcm1lZGlhdGVzKS9iaW5kaW5ncy9WOFNRTEVycm9yLmggXAor
ICAgICQoaW50ZXJtZWRpYXRlcykvYmluZGluZ3MvVjhTUUxFeGNlcHRpb24uaCBcCiAgICAgJChp
bnRlcm1lZGlhdGVzKS9iaW5kaW5ncy9WOFNRTFJlc3VsdFNldC5oIFwKICAgICAkKGludGVybWVk
aWF0ZXMpL2JpbmRpbmdzL1Y4U1FMUmVzdWx0U2V0Um93TGlzdC5oIFwKICAgICAkKGludGVybWVk
aWF0ZXMpL2JpbmRpbmdzL1Y4U1FMVHJhbnNhY3Rpb24uaApJbmRleDogV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA2
MTM0OSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMzNSw2
ICszMzUsNyBAQCBTRVQoV2ViQ29yZV9JRExfRklMRVMKICAgICBzdG9yYWdlL0lEQlN1Y2Nlc3NF
dmVudC5pZGwKICAgICBzdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaWRsCiAgICAgc3Rv
cmFnZS9TUUxFcnJvci5pZGwKKyAgICBzdG9yYWdlL1NRTEV4Y2VwdGlvbi5pZGwKICAgICBzdG9y
YWdlL1NRTFJlc3VsdFNldC5pZGwKICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRs
CiAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwKSW5kZXg6IFdlYkNvcmUvRGVy
aXZlZFNvdXJjZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3Bw
CShyZXZpc2lvbiA2MTM0OSkKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjEsNiArMjIxLDcgQEAKICNpbmNsdWRlICJKU1NoYXJlZFdvcmtlci5jcHAi
CiAjaW5jbHVkZSAiSlNTaGFyZWRXb3JrZXJDb250ZXh0LmNwcCIKICNpbmNsdWRlICJKU1NRTEVy
cm9yLmNwcCIKKyNpbmNsdWRlICJKU1NRTEV4Y2VwdGlvbi5jcHAiCiAjaW5jbHVkZSAiSlNTUUxS
ZXN1bHRTZXQuY3BwIgogI2luY2x1ZGUgIkpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAiCiAjaW5j
bHVkZSAiSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAiCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShy
ZXZpc2lvbiA2MTM0OSkKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBj
b3B5KQpAQCAtMjY1LDYgKzI2NSw3IEBAIERPTV9DTEFTU0VTID0gXAogICAgIFNjcmlwdFByb2Zp
bGUgXAogICAgIFNjcmlwdFByb2ZpbGVOb2RlIFwKICAgICBTUUxFcnJvciBcCisgICAgU1FMRXhj
ZXB0aW9uIFwKICAgICBTUUxSZXN1bHRTZXQgXAogICAgIFNRTFJlc3VsdFNldFJvd0xpc3QgXAog
ICAgIFNRTFN0YXRlbWVudENhbGxiYWNrIFwKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjEzNDkpCisr
KyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc4LDYgKzIzNzgs
NyBAQCBJRExfQklORElOR1MgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNr
LmlkbCBcCiAJV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwgXAogCVdlYkNvcmUvc3Rv
cmFnZS9TUUxFcnJvci5pZGwgXAorCVdlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsIFwK
IAlXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NR
TFJlc3VsdFNldFJvd0xpc3QuaWRsIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2Fs
bGJhY2suaWRsIFwKQEAgLTI0MzMsNiArMjQzNCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdl
L09yaWdpblVzYWdlUmVjb3JkLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5oIFwKKwlX
ZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1
bHRTZXQuY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmggXAogCVdlYkNvcmUv
c3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjEzNDkp
CisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjM4LDYgKzIzOCw3
IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9JREJTdWNjZXNzRXZlbnQuaWRsJywKICAgICAgICAg
ICAgICdzdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaWRsJywKICAgICAgICAgICAgICdz
dG9yYWdlL1NRTEVycm9yLmlkbCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxFeGNlcHRpb24u
aWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFJlc3VsdFNldC5pZGwnLAogICAgICAgICAg
ICAgJ3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwnLAogICAgICAgICAgICAgJ3N0b3Jh
Z2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsJywKQEAgLTM0MTMsNiArMzQxNCw3IEBACiAgICAg
ICAgICAgICAnc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAnLAogICAgICAgICAgICAgJ3N0
b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxFcnJv
ci5oJywKKyAgICAgICAgICAgICdzdG9yYWdlL1NRTEV4Y2VwdGlvbi5oJywKICAgICAgICAgICAg
ICdzdG9yYWdlL1NRTFJlc3VsdFNldC5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMUmVz
dWx0U2V0LmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAn
LApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUucHJpCShyZXZpc2lvbiA2MTM0OSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcmkJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NCw2ICs0NzQsNyBAQCBJRExfQklORElOR1MgKz0gXAogICAgIHN0b3JhZ2Uv
U3RvcmFnZS5pZGwgXAogICAgIHN0b3JhZ2UvU3RvcmFnZUV2ZW50LmlkbCBcCiAgICAgc3RvcmFn
ZS9TUUxFcnJvci5pZGwgXAorICAgIHN0b3JhZ2UvU1FMRXhjZXB0aW9uLmlkbCBcCiAgICAgc3Rv
cmFnZS9TUUxSZXN1bHRTZXQuaWRsIFwKICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3Qu
aWRsIFwKICAgICBzdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbCBcCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDYxMzQ5KQorKysgV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY0MTMs
NiArNDY0MTMsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxFeGNlcHRpb24uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMUmVzdWx0U2V0LmNw
cCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjEzNDkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDIxNywxMCArNDIxNywx
MyBAQAogCQlCNTIzQ0YwOTExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjNDRjAy
MTE4MjY3NTQwMEVCQjI5QyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuY3BwICovOyB9OwogCQlCNTIz
Q0YwQTExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjNDRjAzMTE4MjY3NTQwMEVCQjI5QyAv
KiBEYXRhYmFzZVN5bmMuY3BwICovOyB9OwogCQlCNTIzQ0YwQjExODI2NzU0MDBFQkIyOUMgLyog
RGF0YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNTIzQ0YwNDExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmggKi87IH07CisJ
CUI1MjVBOTY1MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUyNUE5NjMxMUNBMjM0MDAwM0Ey
M0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggKi87IH07CisJCUI1MjVBOTY2MTFDQTIzNDAwMDNBMjNB
OCAvKiBKU1NRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCNTI1QTk2NDExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24u
Y3BwICovOyB9OwogCQlCNTVENUFBNDExOTEzMUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjU1RDVBQTIxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2Fs
bGJhY2suaCAqLzsgfTsKIAkJQjU1RDVBQTUxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2suY3BwICovOyB9OwogCQlCNTVENUFBODExOTEzMjUwMDBCQ0MzMTUgLyogSlNE
YXRhYmFzZVN5bmNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjU1RDVBQTYxMTkxMzI1MDAwQkNDMzE1IC8qIEpTRGF0YWJhc2VTeW5jQ3Vz
dG9tLmNwcCAqLzsgfTsKIAkJQjU1RDVBQTkxMTkxMzI1MDAwQkNDMzE1IC8qIEpTU1FMVHJhbnNh
Y3Rpb25TeW5jQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEI1NUQ1QUE3MTE5MTMyNTAwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3lu
Y0N1c3RvbS5jcHAgKi87IH07CisJCUI1NkVCQTg1MTFDOUZGODEwMEIwNDQ3NyAvKiBTUUxFeGNl
cHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1
NkVCQTgzMTFDOUZGODEwMEIwNDQ3NyAvKiBTUUxFeGNlcHRpb24uaCAqLzsgfTsKIAkJQjU4Q0VC
NjkxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNThDRUI2NzExOTEzNjA3MDAyQTY3OTAgLyog
SlNEYXRhYmFzZVN5bmMuaCAqLzsgfTsKIAkJQjU4Q0VCNkExMTkxMzYwNzAwMkE2NzkwIC8qIEpT
RGF0YWJhc2VTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI1OENFQjY4MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNlU3luYy5jcHAgKi87
IH07CiAJCUI1OENFQjZEMTE5MTM2MUMwMDJBNjc5MCAvKiBKU1NRTFRyYW5zYWN0aW9uU3luYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU4Q0VCNkIx
MTkxMzYxQzAwMkE2NzkwIC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jLmggKi87IH07CkBAIC05Njk2
LDYgKzk2OTksOCBAQAogCQlCNTIzQ0YwMjExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rp
b25TeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFRyYW5z
YWN0aW9uU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1MjNDRjAzMTE4
MjY3NTQwMEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRGF0YWJhc2VTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjUyM0NGMDQxMTgyNjc1NDAwRUJCMjlDIC8qIERhdGFiYXNlU3luYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZVN5bmMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMRXhjZXB0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI1MjVBOTY0MTFDQTIzNDAwMDNBMjNBOCAvKiBK
U1NRTEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1NRTEV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUEy
MTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1
IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUE2MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0Rh
dGFiYXNlU3luY0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05NzAzLDYgKzk3MDgsOCBAQAogCQlCNTVENUFCQjExOTEzMjcyMDBCQ0MzMTUgLyogRGF0YWJh
c2VTeW5jLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEYXRhYmFzZVN5bmMuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFCQzExOTEzMjcyMDBCQ0MzMTUgLyogU1FM
VHJhbnNhY3Rpb25TeW5jLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTUUxUcmFuc2FjdGlv
blN5bmMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFCRDExOTEzMjcy
MDBCQ0MzMTUgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQjU2RUJBODMxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxFeGNlcHRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjU2RUJBODQxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4
Y2VwdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1FMRXhjZXB0aW9uLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU4Q0VCNjcxMTkxMzYwNzAwMkE2NzkwIC8qIEpT
RGF0YWJhc2VTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YWJh
c2VTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OENFQjY4MTE5MTM2MDcw
MDJBNjc5MCAvKiBKU0RhdGFiYXNlU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0RhdGFiYXNlU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUI1OENFQjZCMTE5MTM2MUMwMDJBNjc5MCAvKiBKU1NRTFRyYW5zYWN0aW9uU3luYy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uU3luYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEwMTksNiArMTEwMjYsOCBAQAogCQkxQUU4
MkVDOTBDQUFFMTc3MDAyMjM3QUUgLyogc3RvcmFnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQjU2RUJBODMxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4
Y2VwdGlvbi5oICovLAorCQkJCUI1NkVCQTg0MTFDOUZGODEwMEIwNDQ3NyAvKiBTUUxFeGNlcHRp
b24uaWRsICovLAogCQkJCTgxQ0MxMTQwMTFCRUFBOUQwMEQwRDg1NiAvKiBJREJLZXlSYW5nZS5p
ZGwgKi8sCiAJCQkJODE2QzgwNjYxMUJFODg3RTAwOUE0NUU5IC8qIElEQktleVJhbmdlLmNwcCAq
LywKIAkJCQk4MTZDODA2NzExQkU4ODdFMDA5QTQ1RTkgLyogSURCS2V5UmFuZ2UuaCAqLywKQEAg
LTE0NDczLDYgKzE0NDgyLDggQEAKIAkJCQlDNUY0RjQwRjExOTMwNkMwMDBGREZBREQgLyogSlNJ
bmRleGVkRGF0YWJhc2VSZXF1ZXN0LmggKi8sCiAJCQkJNTE0Qzc2MzUwQ0U5MjI1RTAwN0VGM0NE
IC8qIEpTU1FMRXJyb3IuY3BwICovLAogCQkJCUJDODI0MzI1MEQwQ0U4QTIwMDQ2MEM4RiAvKiBK
U1NRTEVycm9yLmggKi8sCisJCQkJQjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhj
ZXB0aW9uLmggKi8sCisJCQkJQjUyNUE5NjQxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0
aW9uLmNwcCAqLywKIAkJCQkxQUU4MkZFQTBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRT
ZXQuY3BwICovLAogCQkJCTFBRTgyRkVCMENBQjA3RUUwMDIyMzdBRSAvKiBKU1NRTFJlc3VsdFNl
dC5oICovLAogCQkJCTFBRkUxMTk3MENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJv
d0xpc3QuY3BwICovLApAQCAtMTk0MjUsNiArMTk0MzYsOCBAQAogCQkJCTgxNkM4MEFGMTFCRTk5
MEQwMDlBNDVFOSAvKiBKU0lEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODUzRDcz
NDExQzkxMDkwMDBCMkZENDIgLyogU1ZHVGV4dFF1ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OUZGQkYzRjExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQjU2RUJBODUxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQjUyNUE5NjUxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTIxNzMyLDYgKzIxNzQ1LDcgQEAKIAkJCQkwODUzRDczMjExQzkxMDkw
MDBCMkZENDIgLyogU1ZHVGV4dENodW5rTGF5b3V0SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwODUzRDczMzExQzkxMDkwMDBCMkZENDIgLyogU1ZHVGV4dFF1ZXJ5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ5RkZCRjQwMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJQjUyNUE5NjYxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cAkocmV2aXNpb24gNjEzNDkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDExIEBACiAjaW5jbHVkZSAiWFBhdGhFeGNl
cHRpb24uaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUgIkpTU1FM
RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiU1FMRXhjZXB0aW9uLmgiCisjZW5kaWYKKwogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjAwLDYgKzYwNSwxMSBA
QCB2b2lkIHNldERPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAgICAgICAgICAgICBl
cnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBYUGF0aEV4Y2VwdGlvbjo6Y3Jl
YXRlKGRlc2NyaXB0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKICNlbmRpZgorI2lmIEVOQUJM
RShEQVRBQkFTRSkKKyAgICAgICAgY2FzZSBTUUxFeGNlcHRpb25UeXBlOgorICAgICAgICAgICAg
ZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpjcmVh
dGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgfQogCiAg
ICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFeGNl
cHRpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhjZXB0
aW9uQmFzZS5jcHAJKHJldmlzaW9uIDYxMzQ5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V4
Y2VwdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY0ICsxLDcxIEBACi0vKg0KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotICoN
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQNCi0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCi0gKiBhcmUgbWV0Og0KLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
DQotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLg0KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uDQotICoNCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkNCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUg0KLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
DQotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsDQotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLA0KLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUg0KLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkNCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQNCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KLSAq
Lw0KLQ0KLSNpbmNsdWRlICJjb25maWcuaCINCi0jaW5jbHVkZSAiSlNFeGNlcHRpb25CYXNlLmgi
DQotDQotI2luY2x1ZGUgIkpTRE9NQ29yZUV4Y2VwdGlvbi5oIg0KLSNpbmNsdWRlICJKU0V2ZW50
RXhjZXB0aW9uLmgiDQotI2luY2x1ZGUgIkpTUmFuZ2VFeGNlcHRpb24uaCINCi0jaW5jbHVkZSAi
SlNYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5oIg0KLSNpZiBFTkFCTEUoU1ZHKQ0KLSNpbmNsdWRl
ICJKU1NWR0V4Y2VwdGlvbi5oIg0KLSNlbmRpZg0KLSNpZiBFTkFCTEUoWFBBVEgpDQotI2luY2x1
ZGUgIkpTWFBhdGhFeGNlcHRpb24uaCINCi0jZW5kaWYNCi0gDQotbmFtZXNwYWNlIFdlYkNvcmUg
ew0KLSANCi1FeGNlcHRpb25CYXNlKiB0b0V4Y2VwdGlvbkJhc2UoSlNDOjpKU1ZhbHVlIHZhbHVl
KQ0KLXsNCi0gICAgaWYgKERPTUNvcmVFeGNlcHRpb24qIGRvbUV4Y2VwdGlvbiA9IHRvRE9NQ29y
ZUV4Y2VwdGlvbih2YWx1ZSkpDQotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxFeGNl
cHRpb25CYXNlKj4oZG9tRXhjZXB0aW9uKTsNCi0gICAgaWYgKFJhbmdlRXhjZXB0aW9uKiByYW5n
ZUV4Y2VwdGlvbiA9IHRvUmFuZ2VFeGNlcHRpb24odmFsdWUpKQ0KLSAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8RXhjZXB0aW9uQmFzZSo+KHJhbmdlRXhjZXB0aW9uKTsNCi0gICAgaWYg
KEV2ZW50RXhjZXB0aW9uKiBldmVudEV4Y2VwdGlvbiA9IHRvRXZlbnRFeGNlcHRpb24odmFsdWUp
KQ0KLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RXhjZXB0aW9uQmFzZSo+KGV2ZW50
RXhjZXB0aW9uKTsNCi0gICAgaWYgKFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uKiB4bWxIdHRwRXhj
ZXB0aW9uID0gdG9YTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbih2YWx1ZSkpDQotICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxFeGNlcHRpb25CYXNlKj4oeG1sSHR0cEV4Y2VwdGlvbik7DQot
I2lmIEVOQUJMRShTVkcpDQotICAgIGlmIChTVkdFeGNlcHRpb24qIHN2Z0V4Y2VwdGlvbiA9IHRv
U1ZHRXhjZXB0aW9uKHZhbHVlKSkNCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEV4
Y2VwdGlvbkJhc2UqPihzdmdFeGNlcHRpb24pOw0KLSNlbmRpZg0KLSNpZiBFTkFCTEUoWFBBVEgp
DQotICAgIGlmIChYUGF0aEV4Y2VwdGlvbiogcGF0aEV4Y2VwdGlvbiA9IHRvWFBhdGhFeGNlcHRp
b24odmFsdWUpKQ0KLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RXhjZXB0aW9uQmFz
ZSo+KHBhdGhFeGNlcHRpb24pOw0KLSNlbmRpZg0KLSAgICANCi0gICAgcmV0dXJuIDA7DQotfQ0K
LQ0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUNCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRXhjZXB0
aW9uQmFzZS5oIgorCisjaW5jbHVkZSAiSlNET01Db3JlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAi
SlNFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkpTUmFuZ2VFeGNlcHRpb24uaCIKKyNpbmNs
dWRlICJKU1hNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmgiCisjaWYgRU5BQkxFKFNWRykKKyNpbmNs
dWRlICJKU1NWR0V4Y2VwdGlvbi5oIgorI2VuZGlmCisjaWYgRU5BQkxFKFhQQVRIKQorI2luY2x1
ZGUgIkpTWFBhdGhFeGNlcHRpb24uaCIKKyNlbmRpZgorI2lmIEVOQUJMRShYUEFUSCkKKyNpbmNs
dWRlICJKU1NRTEV4Y2VwdGlvbi5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
RXhjZXB0aW9uQmFzZSogdG9FeGNlcHRpb25CYXNlKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBpZiAoRE9NQ29yZUV4Y2VwdGlvbiogZG9tRXhjZXB0aW9uID0gdG9ET01Db3JlRXhjZXB0aW9u
KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RXhjZXB0aW9uQmFzZSo+
KGRvbUV4Y2VwdGlvbik7CisgICAgaWYgKFJhbmdlRXhjZXB0aW9uKiByYW5nZUV4Y2VwdGlvbiA9
IHRvUmFuZ2VFeGNlcHRpb24odmFsdWUpKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxFeGNlcHRpb25CYXNlKj4ocmFuZ2VFeGNlcHRpb24pOworICAgIGlmIChFdmVudEV4Y2VwdGlv
biogZXZlbnRFeGNlcHRpb24gPSB0b0V2ZW50RXhjZXB0aW9uKHZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RXhjZXB0aW9uQmFzZSo+KGV2ZW50RXhjZXB0aW9uKTsKKyAg
ICBpZiAoWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24qIHhtbEh0dHBFeGNlcHRpb24gPSB0b1hNTEh0
dHBSZXF1ZXN0RXhjZXB0aW9uKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8RXhjZXB0aW9uQmFzZSo+KHhtbEh0dHBFeGNlcHRpb24pOworI2lmIEVOQUJMRShTVkcpCisg
ICAgaWYgKFNWR0V4Y2VwdGlvbiogc3ZnRXhjZXB0aW9uID0gdG9TVkdFeGNlcHRpb24odmFsdWUp
KQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxFeGNlcHRpb25CYXNlKj4oc3ZnRXhj
ZXB0aW9uKTsKKyNlbmRpZgorI2lmIEVOQUJMRShYUEFUSCkKKyAgICBpZiAoWFBhdGhFeGNlcHRp
b24qIHBhdGhFeGNlcHRpb24gPSB0b1hQYXRoRXhjZXB0aW9uKHZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RXhjZXB0aW9uQmFzZSo+KHBhdGhFeGNlcHRpb24pOworI2Vu
ZGlmCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIGlmIChTUUxFeGNlcHRpb24qIHBhdGhFeGNl
cHRpb24gPSB0b1NRTEV4Y2VwdGlvbih2YWx1ZSkpCisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEV4Y2VwdGlvbkJhc2UqPihwYXRoRXhjZXB0aW9uKTsKKyNlbmRpZgorCisgICAgcmV0
dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmNwcAkocmV2aXNpb24gNjEzNDkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiVjhIaWRkZW5Q
cm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUg
IlY4UmFuZ2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJWOFNRTEV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIlY4WE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaCIKICNpbmNsdWRlICJWOFhQYXRoRXhjZXB0
aW9uLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgpAQCAtNjc3LDYgKzY3OCwxMSBAQCB2
b2lkIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihpbnQgZXhjZXB0CiAgICAgICAgIGV4Y2VwdGlv
biA9IHRvVjgoWFBhdGhFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwogICAgICAgICBi
cmVhazsKICNlbmRpZgorI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBjYXNlIFNRTEV4Y2VwdGlv
blR5cGU6CisgICAgICAgIGV4Y2VwdGlvbiA9IHRvVjgoU1FMRXhjZXB0aW9uOjpjcmVhdGUoZGVz
Y3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAko
cmV2aXNpb24gNjEzNDkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzU3LDYgKzM1NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBzdmdFeGNlcHRpb25OYW1lKGludCBleGNlcHRpb25Db2RlKTsK
ICNlbmRpZgogCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgICAgICBzdGF0aWMgY29uc3QgY2hh
ciogc3FsRXhjZXB0aW9uTmFtZShpbnQgZXhjZXB0aW9uQ29kZSk7CisjZW5kaWYKKwogICAgICAg
ICBGcmFtZSogbV9mcmFtZTsKIAogICAgICAgICAvLyBGb3IgdGhlIG1vbWVudCwgd2UgaGF2ZSBv
bmUgb2YgdGhlc2UuICBTb29uIHdlIHdpbGwgaGF2ZSBvbmUgcGVyIERPTVdyYXBwZXJXb3JsZC4K
SW5kZXg6IFdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0V4Y2VwdGlvbkNvZGUuY3BwCShyZXZpc2lvbiA2MTM0OSkKKysrIFdlYkNvcmUvZG9t
L0V4Y2VwdGlvbkNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMCBAQAogI2lu
Y2x1ZGUgIlhQYXRoRXhjZXB0aW9uLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShEQVRBQkFTRSkK
KyNpbmNsdWRlICJTUUxFeGNlcHRpb24uaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBleGNlcHRpb25OYW1lc1tdID0gewpAQCAtMTQ1
LDYgKzE0OSwzMCBAQCBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc3ZnRXhjZXB0aW9uRGVzCiB9
OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoREFUQUJBU0UpCitzdGF0aWMgY29uc3QgY2hhciogY29u
c3Qgc3FsRXhjZXB0aW9uTmFtZXNbXSA9IHsKKyAgICAiVU5LTk9XTl9FUlIiLAorICAgICJEQVRB
QkFTRV9FUlIiLAorICAgICJWRVJTSU9OX0VSUiIsCisgICAgIlRPT19MQVJHRV9FUlIiLAorICAg
ICJRVU9UQV9FUlIiLAorICAgICJTWU5UQVhfRVJSIiwKKyAgICAiQ09OU1RSQUlOVF9FUlIiLAor
ICAgICJUSU1FT1VUX0VSUiIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzcWxFeGNl
cHRpb25EZXNjcmlwdGlvbnNbXSA9IHsKKyAgICAiVGhlIG9wZXJhdGlvbiBmYWlsZWQgZm9yIHJl
YXNvbnMgdW5yZWxhdGVkIHRvIHRoZSBkYXRhYmFzZS4iLAorICAgICJUaGUgb3BlcmF0aW9uIGZh
aWxlZCBmb3Igc29tZSByZWFzb24gcmVsYXRlZCB0byB0aGUgZGF0YWJhc2UuIiwKKyAgICAiVGhl
IGFjdHVhbCBkYXRhYmFzZSB2ZXJzaW9uIGRpZCBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHZlcnNp
b24uIiwKKyAgICAiRGF0YSByZXR1cm5lZCBmcm9tIHRoZSBkYXRhYmFzZSBpcyB0b28gbGFyZ2Uu
IiwKKyAgICAiUXVvdGEgd2FzIGV4Y2VlZGVkLiIsCisgICAgIkludmFsaWQgb3IgdW5hdXRob3Jp
emVkIHN0YXRlbWVudDsgb3IgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgZGlkIG5vdCBtYXRjaCB0
aGUgbnVtYmVyIG9mID8gcGxhY2Vob2xkZXJzLiIsCisgICAgIkEgY29uc3RyYWludCB3YXMgdmlv
bGF0ZWQuIiwKKyAgICAiQSB0cmFuc2FjdGlvbiBsb2NrIGNvdWxkIG5vdCBiZSBhY3F1aXJlZCBp
biBhIHJlYXNvbmFibGUgdGltZS4iCit9OworI2VuZGlmCisKIHZvaWQgZ2V0RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uKEV4Y2VwdGlvbkNvZGUgZWMsIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24pCiB7CiAgICAgQVNTRVJUKGVjKTsKQEAgLTE1Niw3ICsxODQsNyBAQCB2b2lk
IGdldEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihFeGNlcHRpCiAgICAgaW50IG5hbWVUYWJsZVNp
emU7CiAgICAgaW50IG5hbWVUYWJsZU9mZnNldDsKICAgICBFeGNlcHRpb25UeXBlIHR5cGU7Ci0g
ICAgCisKICAgICBpZiAoY29kZSA+PSBSYW5nZUV4Y2VwdGlvbjo6UmFuZ2VFeGNlcHRpb25PZmZz
ZXQgJiYgY29kZSA8PSBSYW5nZUV4Y2VwdGlvbjo6UmFuZ2VFeGNlcHRpb25NYXgpIHsKICAgICAg
ICAgdHlwZSA9IFJhbmdlRXhjZXB0aW9uVHlwZTsKICAgICAgICAgdHlwZU5hbWUgPSAiRE9NIFJh
bmdlIjsKQEAgLTIwMyw2ICsyMzEsMTYgQEAgdm9pZCBnZXRFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24oRXhjZXB0aQogICAgICAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKHN2Z0V4Y2VwdGlvbk5h
bWVzKSAvIHNpemVvZihzdmdFeGNlcHRpb25OYW1lc1swXSk7CiAgICAgICAgIG5hbWVUYWJsZU9m
ZnNldCA9IFNWR0V4Y2VwdGlvbjo6U1ZHX1dST05HX1RZUEVfRVJSOwogI2VuZGlmCisjaWYgRU5B
QkxFKERBVEFCQVNFKQorICAgIH0gZWxzZSBpZiAoY29kZSA+PSBTUUxFeGNlcHRpb246OlNRTEV4
Y2VwdGlvbk9mZnNldCAmJiBjb2RlIDw9IFNRTEV4Y2VwdGlvbjo6U1FMRXhjZXB0aW9uTWF4KSB7
CisgICAgICAgIHR5cGUgPSBTUUxFeGNlcHRpb25UeXBlOworICAgICAgICB0eXBlTmFtZSA9ICJE
T00gU1FMIjsKKyAgICAgICAgY29kZSAtPSBTUUxFeGNlcHRpb246OlNRTEV4Y2VwdGlvbk9mZnNl
dDsKKyAgICAgICAgbmFtZVRhYmxlID0gc3FsRXhjZXB0aW9uTmFtZXM7CisgICAgICAgIGRlc2Ny
aXB0aW9uVGFibGUgPSBzcWxFeGNlcHRpb25EZXNjcmlwdGlvbnM7CisgICAgICAgIG5hbWVUYWJs
ZVNpemUgPSBzaXplb2Yoc3FsRXhjZXB0aW9uTmFtZXMpIC8gc2l6ZW9mKHNxbEV4Y2VwdGlvbk5h
bWVzWzBdKTsKKyAgICAgICAgbmFtZVRhYmxlT2Zmc2V0ID0gU1FMRXhjZXB0aW9uOjpVTktOT1dO
X0VSUjsKKyNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIHR5cGUgPSBET01FeGNlcHRpb25U
eXBlOwogICAgICAgICB0eXBlTmFtZSA9ICJET00iOwpJbmRleDogV2ViQ29yZS9kb20vRXhjZXB0
aW9uQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUuaAkocmV2
aXNpb24gNjEzNDkpCisrKyBXZWJDb3JlL2RvbS9FeGNlcHRpb25Db2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDggKzc4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoU1ZH
KQogICAgICAgICAsIFNWR0V4Y2VwdGlvblR5cGUKICNlbmRpZgotICAgIH07ICAgICAgICAKLSAg
ICAKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgICAgICwgU1FMRXhjZXB0aW9uVHlwZQorI2Vu
ZGlmCisgICAgfTsKKwogCiAgICAgc3RydWN0IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiB7CiAg
ICAgICAgIGNvbnN0IGNoYXIqIHR5cGVOYW1lOyAvLyBoYXMgc3BhY2VzIGFuZCBpcyBzdWl0YWJs
ZSBmb3IgdXNlIGluIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbiBzdHJpbmdzOyBtYXhpbXVtIGxlbmd0
aCBpcyAxMCBjaGFyYWN0ZXJzCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gNjEzNDkpCisr
KyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNzI5LDYgKzcy
OSwxMCBAQCBtb2R1bGUgd2luZG93IHsKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKEVO
QUJMRV9EQVRBQkFTRSkKKyAgICAgICAgYXR0cmlidXRlIFNRTEV4Y2VwdGlvbkNvbnN0cnVjdG9y
IFNRTEV4Y2VwdGlvbjsKKyNlbmRpZgorCiAgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9
VE9VQ0hfRVZFTlRTXSBUb3VjaEV2ZW50Q29uc3RydWN0b3IgVG91Y2hFdmVudDsKIAogICAgICAg
ICBhdHRyaWJ1dGUgRE9NRm9ybURhdGFDb25zdHJ1Y3RvciBGb3JtRGF0YTsKSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
U1FMRXhjZXB0aW9uLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0
aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgU1FMRXhj
ZXB0aW9uX2gKKyNkZWZpbmUgU1FMRXhjZXB0aW9uX2gKKworI2lmIEVOQUJMRShEQVRBQkFTRSkK
KworI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTUUxFeGNlcHRpb24gOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U1FMRXhjZXB0aW9uPiBjcmVhdGUoY29uc3QgRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU1FMRXhjZXB0aW9uKGRlc2NyaXB0aW9uKSk7CisgICAgfQorCisgICAgc3RhdGljIGNv
bnN0IGludCBTUUxFeGNlcHRpb25PZmZzZXQgPSAxMDAwOworICAgIHN0YXRpYyBjb25zdCBpbnQg
U1FMRXhjZXB0aW9uTWF4ID0gMTA5OTsKKworICAgIGVudW0gU1FMRXhjZXB0aW9uQ29kZSB7Cisg
ICAgICAgIFVOS05PV05fRVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0LAorICAgICAgICBEQVRBQkFT
RV9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyAxLAorICAgICAgICBWRVJTSU9OX0VSUiA9IFNR
TEV4Y2VwdGlvbk9mZnNldCArIDIsCisgICAgICAgIFRPT19MQVJHRV9FUlIgPSBTUUxFeGNlcHRp
b25PZmZzZXQgKyAzLAorICAgICAgICBRVU9UQV9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyA0
LAorICAgICAgICBTWU5UQVhfRVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0ICsgNSwKKyAgICAgICAg
Q09OU1RSQUlOVF9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyA2LAorICAgICAgICBUSU1FT1VU
X0VSUiA9IFNRTEV4Y2VwdGlvbk9mZnNldCArIDcKKyAgICB9OworCitwcml2YXRlOgorICAgIFNR
TEV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQor
ICAgICAgICA6IEV4Y2VwdGlvbkJhc2UoZGVzY3JpcHRpb24pCisgICAgeworICAgIH0KK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKKwor
I2VuZGlmIC8vIFNRTEV4Y2VwdGlvbl9oCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0
aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmlkbAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNl
IFsKKyAgICAgICAgQ29uZGl0aW9uYWw9REFUQUJBU0UsCisgICAgICAgIE5vU3RhdGljVGFibGVz
CisgICAgXSBTUUxFeGNlcHRpb24geworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBjb2RlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3Nh
Z2U7CisKKyAgICAgICAgLy8gU1FMRXhjZXB0aW9uQ29kZTogdXNlZCBvbmx5IGluIHRoZSBzeW5j
IERCIEFQSQorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTktOT1dOX0VSUiA9IDA7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERBVEFCQVNFX0VSUiA9IDE7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IFZFUlNJT05fRVJSID0gMjsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgVE9PX0xBUkdFX0VSUiA9IDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IFFVT1RBX0VSUiA9IDQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNZTlRBWF9FUlIg
PSA1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05TVFJBSU5UX0VSUiA9IDY7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFRJTUVPVVRfRVJSID0gNzsKKyAgICB9OworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59095</attachid>
            <date>2010-06-18 04:30:10 -0700</date>
            <delta_ts>2010-06-21 13:10:10 -0700</delta_ts>
            <desc>patch #2: Add the SQLException class</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>45847</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTM5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDYtMTggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworMjAxMC0w
Ni0xNyAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyB0aGUgU1FMRXhjZXB0
aW9uIGNsYXNzIHdoaWNoIHdpbGwgYmUgdXNlZCB0byByZXBvcnQgc3luYyBEQiBlcnJvcnMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisg
ICAgICAgICogQW5kcm9pZC5kZXJpdmVkLmpzY2JpbmRpbmdzLm1rOgorICAgICAgICAqIEFuZHJv
aWQuZGVyaXZlZC52OGJpbmRpbmdzLm1rOgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLmNwcDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtl
OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnByaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dERPTUV4Y2VwdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnRvRXhjZXB0aW9uQmFzZSk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpzZXRET01FeGNl
cHRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKiBkb20v
RXhjZXB0aW9uQ29kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKToKKyAgICAgICAgKiBkb20vRXhjZXB0aW9u
Q29kZS5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5p
ZGw6CisgICAgICAgICogc3RvcmFnZS9TUUxFeGNlcHRpb24uaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTUUxFeGNlcHRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxFeGNl
cHRpb246Oik6CisgICAgICAgIChXZWJDb3JlOjpTUUxFeGNlcHRpb246OlNRTEV4Y2VwdGlvbik6
CisgICAgICAgICogc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsOiBBZGRlZC4KKwogMjAxMC0wNi0x
OCAgTHVjYXMgRGUgTWFyY2hpICA8bHVjYXMuZGVtYXJjaGlAcHJvZnVzaW9uLm1vYmk+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQuZGVy
aXZlZC5qc2NiaW5kaW5ncy5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQuZGVyaXZl
ZC5qc2NiaW5kaW5ncy5tawkocmV2aXNpb24gNjEzOTEpCisrKyBXZWJDb3JlL0FuZHJvaWQuZGVy
aXZlZC5qc2NiaW5kaW5ncy5tawkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNyw3IEBAICQo
cGF0c3Vic3QgJS5oLCUuY3BwLCQoR0VOKSk6ICQoaW50ZXJtZWQKIEdFTiA6PSBcCiAgICAgJChp
bnRlcm1lZGlhdGVzKS9zdG9yYWdlL0pTRGF0YWJhc2UuaCBcCiAgICAgJChpbnRlcm1lZGlhdGVz
KS9zdG9yYWdlL0pTU1FMRXJyb3IuaCBcCisgICAgJChpbnRlcm1lZGlhdGVzKS9zdG9yYWdlL0pT
U1FMRXhjZXB0aW9uLmggXAogICAgICQoaW50ZXJtZWRpYXRlcykvc3RvcmFnZS9KU1NRTFJlc3Vs
dFNldC5oIFwKICAgICAkKGludGVybWVkaWF0ZXMpL3N0b3JhZ2UvSlNTUUxSZXN1bHRTZXRSb3dM
aXN0LmggXAogICAgICQoaW50ZXJtZWRpYXRlcykvc3RvcmFnZS9KU1NRTFRyYW5zYWN0aW9uLmgK
SW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5kZXJpdmVkLnY4YmluZGluZ3MubWsKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9BbmRyb2lkLmRlcml2ZWQudjhiaW5kaW5ncy5tawkocmV2aXNpb24gNjEzOTEp
CisrKyBXZWJDb3JlL0FuZHJvaWQuZGVyaXZlZC52OGJpbmRpbmdzLm1rCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDgsNiArMzA4LDcgQEAgJChwYXRzdWJzdCAlLmgsJS5jcHAsJChHRU4pKTogJChpbnRl
cm1lZAogR0VOIDo9IFwKICAgICAkKGludGVybWVkaWF0ZXMpL2JpbmRpbmdzL1Y4RGF0YWJhc2Uu
aCBcCiAgICAgJChpbnRlcm1lZGlhdGVzKS9iaW5kaW5ncy9WOFNRTEVycm9yLmggXAorICAgICQo
aW50ZXJtZWRpYXRlcykvYmluZGluZ3MvVjhTUUxFeGNlcHRpb24uaCBcCiAgICAgJChpbnRlcm1l
ZGlhdGVzKS9iaW5kaW5ncy9WOFNRTFJlc3VsdFNldC5oIFwKICAgICAkKGludGVybWVkaWF0ZXMp
L2JpbmRpbmdzL1Y4U1FMUmVzdWx0U2V0Um93TGlzdC5oIFwKICAgICAkKGludGVybWVkaWF0ZXMp
L2JpbmRpbmdzL1Y4U1FMVHJhbnNhY3Rpb24uaApJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA2MTM5MSkK
KysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMzNSw2ICszMzUs
NyBAQCBTRVQoV2ViQ29yZV9JRExfRklMRVMKICAgICBzdG9yYWdlL0lEQlN1Y2Nlc3NFdmVudC5p
ZGwKICAgICBzdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaWRsCiAgICAgc3RvcmFnZS9T
UUxFcnJvci5pZGwKKyAgICBzdG9yYWdlL1NRTEV4Y2VwdGlvbi5pZGwKICAgICBzdG9yYWdlL1NR
TFJlc3VsdFNldC5pZGwKICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCiAgICAg
c3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwKSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNv
dXJjZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3BwCShyZXZp
c2lvbiA2MTM5MSkKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjEsNiArMjIxLDcgQEAKICNpbmNsdWRlICJKU1NoYXJlZFdvcmtlci5jcHAiCiAjaW5j
bHVkZSAiSlNTaGFyZWRXb3JrZXJDb250ZXh0LmNwcCIKICNpbmNsdWRlICJKU1NRTEVycm9yLmNw
cCIKKyNpbmNsdWRlICJKU1NRTEV4Y2VwdGlvbi5jcHAiCiAjaW5jbHVkZSAiSlNTUUxSZXN1bHRT
ZXQuY3BwIgogI2luY2x1ZGUgIkpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAiCiAjaW5jbHVkZSAi
SlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAiCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biA2MTM5MSkKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMjY1LDYgKzI2NSw3IEBAIERPTV9DTEFTU0VTID0gXAogICAgIFNjcmlwdFByb2ZpbGUgXAog
ICAgIFNjcmlwdFByb2ZpbGVOb2RlIFwKICAgICBTUUxFcnJvciBcCisgICAgU1FMRXhjZXB0aW9u
IFwKICAgICBTUUxSZXN1bHRTZXQgXAogICAgIFNRTFJlc3VsdFNldFJvd0xpc3QgXAogICAgIFNR
TFN0YXRlbWVudENhbGxiYWNrIFwKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjEzOTEpCisrKyBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgyLDYgKzIzODIsNyBAQCBJ
RExfQklORElOR1MgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmlkbCBc
CiAJV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwgXAogCVdlYkNvcmUvc3RvcmFnZS9T
UUxFcnJvci5pZGwgXAorCVdlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsIFwKIAlXZWJD
b3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3Vs
dFNldFJvd0xpc3QuaWRsIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2su
aWRsIFwKQEAgLTI0MzcsNiArMjQzOCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdlL09yaWdp
blVzYWdlUmVjb3JkLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5oIFwKKwlXZWJDb3Jl
L3N0b3JhZ2UvU1FMRXhjZXB0aW9uLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQu
Y3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmggXAogCVdlYkNvcmUvc3RvcmFn
ZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjEzOTEpCisrKyBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjM4LDYgKzIzOCw3IEBACiAg
ICAgICAgICAgICAnc3RvcmFnZS9JREJTdWNjZXNzRXZlbnQuaWRsJywKICAgICAgICAgICAgICdz
dG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaWRsJywKICAgICAgICAgICAgICdzdG9yYWdl
L1NRTEVycm9yLmlkbCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsJywK
ICAgICAgICAgICAgICdzdG9yYWdlL1NRTFJlc3VsdFNldC5pZGwnLAogICAgICAgICAgICAgJ3N0
b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FM
U3RhdGVtZW50Q2FsbGJhY2suaWRsJywKQEAgLTM0MTcsNiArMzQxOCw3IEBACiAgICAgICAgICAg
ICAnc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2Uv
T3JpZ2luVXNhZ2VSZWNvcmQuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxFcnJvci5oJywK
KyAgICAgICAgICAgICdzdG9yYWdlL1NRTEV4Y2VwdGlvbi5oJywKICAgICAgICAgICAgICdzdG9y
YWdlL1NRTFJlc3VsdFNldC5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMUmVzdWx0U2V0
LmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAnLApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJp
CShyZXZpc2lvbiA2MTM5MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcmkJKHdvcmtpbmcgY29weSkK
QEAgLTQ3NCw2ICs0NzQsNyBAQCBJRExfQklORElOR1MgKz0gXAogICAgIHN0b3JhZ2UvU3RvcmFn
ZS5pZGwgXAogICAgIHN0b3JhZ2UvU3RvcmFnZUV2ZW50LmlkbCBcCiAgICAgc3RvcmFnZS9TUUxF
cnJvci5pZGwgXAorICAgIHN0b3JhZ2UvU1FMRXhjZXB0aW9uLmlkbCBcCiAgICAgc3RvcmFnZS9T
UUxSZXN1bHRTZXQuaWRsIFwKICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsIFwK
ICAgICBzdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmlkbCBcCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDYxMzkxKQorKysgV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDY0MjksNiArNDY0
MjksMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3RvcmFnZVxTUUxFeGNlcHRpb24uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMUmVzdWx0U2V0LmNwcCINCiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gNjEzOTEpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDIyMSwxMCArNDIyMSwxMyBAQAog
CQlCNTIzQ0YwOTExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjNDRjAyMTE4MjY3
NTQwMEVCQjI5QyAvKiBTUUxUcmFuc2FjdGlvblN5bmMuY3BwICovOyB9OwogCQlCNTIzQ0YwQTEx
ODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjNDRjAzMTE4MjY3NTQwMEVCQjI5QyAvKiBEYXRh
YmFzZVN5bmMuY3BwICovOyB9OwogCQlCNTIzQ0YwQjExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJh
c2VTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
NTIzQ0YwNDExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmggKi87IH07CisJCUI1MjVB
OTY1MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4IC8q
IEpTU1FMRXhjZXB0aW9uLmggKi87IH07CisJCUI1MjVBOTY2MTFDQTIzNDAwMDNBMjNBOCAvKiBK
U1NRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCNTI1QTk2NDExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24uY3BwICov
OyB9OwogCQlCNTVENUFBNDExOTEzMUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjU1RDVBQTIxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2su
aCAqLzsgfTsKIAkJQjU1RDVBQTUxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2Fs
bGJhY2suY3BwICovOyB9OwogCQlCNTVENUFBODExOTEzMjUwMDBCQ0MzMTUgLyogSlNEYXRhYmFz
ZVN5bmNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjU1RDVBQTYxMTkxMzI1MDAwQkNDMzE1IC8qIEpTRGF0YWJhc2VTeW5jQ3VzdG9tLmNw
cCAqLzsgfTsKIAkJQjU1RDVBQTkxMTkxMzI1MDAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25T
eW5jQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEI1NUQ1QUE3MTE5MTMyNTAwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0N1c3Rv
bS5jcHAgKi87IH07CisJCUI1NkVCQTg1MTFDOUZGODEwMEIwNDQ3NyAvKiBTUUxFeGNlcHRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NkVCQTgz
MTFDOUZGODEwMEIwNDQ3NyAvKiBTUUxFeGNlcHRpb24uaCAqLzsgfTsKIAkJQjU4Q0VCNjkxMTkx
MzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNThDRUI2NzExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRh
YmFzZVN5bmMuaCAqLzsgfTsKIAkJQjU4Q0VCNkExMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJh
c2VTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI1OENFQjY4MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNlU3luYy5jcHAgKi87IH07CiAJ
CUI1OENFQjZEMTE5MTM2MUMwMDJBNjc5MCAvKiBKU1NRTFRyYW5zYWN0aW9uU3luYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU4Q0VCNkIxMTkxMzYx
QzAwMkE2NzkwIC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jLmggKi87IH07CkBAIC05NzA0LDYgKzk3
MDcsOCBAQAogCQlCNTIzQ0YwMjExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5j
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9u
U3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1MjNDRjAzMTE4MjY3NTQw
MEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGF0YWJhc2VTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjUyM0NGMDQxMTgyNjc1NDAwRUJCMjlDIC8qIERhdGFiYXNlU3luYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZVN5bmMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMRXhjZXB0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUI1MjVBOTY0MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4
Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTEV4
Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUEyMTE5MTMx
RkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpT
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUE2MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNl
U3luY0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Rh
dGFiYXNlU3luY0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NzEx
LDYgKzk3MTYsOCBAQAogCQlCNTVENUFCQjExOTEzMjcyMDBCQ0MzMTUgLyogRGF0YWJhc2VTeW5j
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEYXRhYmFzZVN5bmMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFCQzExOTEzMjcyMDBCQ0MzMTUgLyogU1FMVHJhbnNh
Y3Rpb25TeW5jLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTUUxUcmFuc2FjdGlvblN5bmMu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFCRDExOTEzMjcyMDBCQ0Mz
MTUgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQjU2RUJBODMxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQjU2RUJBODQxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlv
bi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1FMRXhjZXB0aW9uLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU4Q0VCNjcxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJh
c2VTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YWJhc2VTeW5j
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OENFQjY4MTE5MTM2MDcwMDJBNjc5
MCAvKiBKU0RhdGFiYXNlU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RhdGFiYXNlU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1
OENFQjZCMTE5MTM2MUMwMDJBNjc5MCAvKiBKU1NRTFRyYW5zYWN0aW9uU3luYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uU3luYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEwMjcsNiArMTEwMzQsMTUgQEAKIAkJMUFFODJFQzkw
Q0FBRTE3NzAwMjIzN0FFIC8qIHN0b3JhZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTgxQ0MxMTQwMTFCRUFBOUQwMEQwRDg1NiAvKiBJREJLZXlSYW5n
ZS5pZGwgKi8sCisJCQkJODE2QzgwNjYxMUJFODg3RTAwOUE0NUU5IC8qIElEQktleVJhbmdlLmNw
cCAqLywKKwkJCQk4MTZDODA2NzExQkU4ODdFMDA5QTQ1RTkgLyogSURCS2V5UmFuZ2UuaCAqLywK
KwkJCQlCNkIwNTQwNzExQjY4RjEwMDAyNTY0QzUgLyogSURCT2JqZWN0U3RvcmVJbXBsLmNwcCAq
LywKKwkJCQlCNkIwNTQwODExQjY4RjEwMDAyNTY0QzUgLyogSURCT2JqZWN0U3RvcmVJbXBsLmgg
Ki8sCisJCQkJQjY2OTNFRUYxMUFENjNGNjAwM0YyNzcwIC8qIElEQk9iamVjdFN0b3JlUmVxdWVz
dC5pZGwgKi8sCisJCQkJQjY2OTNFRTgxMUFENjNFNjAwM0YyNzcwIC8qIElEQk9iamVjdFN0b3Jl
LmggKi8sCisJCQkJQjY2OTNFRTkxMUFENjNFNjAwM0YyNzcwIC8qIElEQk9iamVjdFN0b3JlUmVx
dWVzdC5jcHAgKi8sCisJCQkJQjY2OTNFRUExMUFENjNFNjAwM0YyNzcwIC8qIElEQk9iamVjdFN0
b3JlUmVxdWVzdC5oICovLAogCQkJCUI1QjVEQzY3MTE5QkIzRDUwMDJBODc5MCAvKiBBYnN0cmFj
dERhdGFiYXNlLmNwcCAqLywKIAkJCQlCNUI1REM2ODExOUJCM0Q1MDAyQTg3OTAgLyogQWJzdHJh
Y3REYXRhYmFzZS5oICovLAogCQkJCTUxNDE4NUVEMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VW
ZXJzaW9uV3JhcHBlci5jcHAgKi8sCkBAIC0xMTExMyw2ICsxMTEyOSw4IEBACiAJCQkJNTFBOTI2
N0IwRDUzRjA1NzAwNjNFQ0MyIC8qIE9yaWdpblVzYWdlUmVjb3JkLmggKi8sCiAJCQkJNTFFQzky
NTcwQ0U5MERCNDAwRjkwMzA4IC8qIFNRTEVycm9yLmggKi8sCiAJCQkJNTFFQzkyNTgwQ0U5MERC
NDAwRjkwMzA4IC8qIFNRTEVycm9yLmlkbCAqLywKKwkJCQlCNTZFQkE4MzExQzlGRjgxMDBCMDQ0
NzcgLyogU1FMRXhjZXB0aW9uLmggKi8sCisJCQkJQjU2RUJBODQxMUM5RkY4MTAwQjA0NDc3IC8q
IFNRTEV4Y2VwdGlvbi5pZGwgKi8sCiAJCQkJNTE5NjExNjcwQ0FDNTY1NzAwMTBBODBDIC8qIFNR
TFJlc3VsdFNldC5jcHAgKi8sCiAJCQkJNTE5NjExNjgwQ0FDNTY1NzAwMTBBODBDIC8qIFNRTFJl
c3VsdFNldC5oICovLAogCQkJCTUxOTYxMTY5MENBQzU2NTcwMDEwQTgwQyAvKiBTUUxSZXN1bHRT
ZXQuaWRsICovLApAQCAtMTQ0ODUsNiArMTQ1MDMsOCBAQAogCQkJCUM1RjRGNDBGMTE5MzA2QzAw
MEZERkFERCAvKiBKU0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaCAqLywKIAkJCQk1MTRDNzYzNTBD
RTkyMjVFMDA3RUYzQ0QgLyogSlNTUUxFcnJvci5jcHAgKi8sCiAJCQkJQkM4MjQzMjUwRDBDRThB
MjAwNDYwQzhGIC8qIEpTU1FMRXJyb3IuaCAqLywKKwkJCQlCNTI1QTk2MzExQ0EyMzQwMDAzQTIz
QTggLyogSlNTUUxFeGNlcHRpb24uaCAqLywKKwkJCQlCNTI1QTk2NDExQ0EyMzQwMDAzQTIzQTgg
LyogSlNTUUxFeGNlcHRpb24uY3BwICovLAogCQkJCTFBRTgyRkVBMENBQjA3RUUwMDIyMzdBRSAv
KiBKU1NRTFJlc3VsdFNldC5jcHAgKi8sCiAJCQkJMUFFODJGRUIwQ0FCMDdFRTAwMjIzN0FFIC8q
IEpTU1FMUmVzdWx0U2V0LmggKi8sCiAJCQkJMUFGRTExOTcwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpT
U1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgKi8sCkBAIC0xOTQzOSw2ICsxOTQ1OSw4IEBACiAJCQkJ
RTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNFMTcyRTAxMTEzNkU4Q0UwMDYyQTUzMyAvKiBab29tTW9kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQjU2RUJBODUxMUM5RkY4MTAwQjA0NDc3IC8qIFNRTEV4Y2VwdGlvbi5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQjUyNUE5NjUxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhj
ZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIxNzQ4LDYgKzIxNzcwLDcgQEAKIAkJCQk5M0Yx
OUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVk
aXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNTI1QTk2NjExQ0EyMzQwMDAzQTIzQTggLyog
SlNTUUxFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA2MTM5MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTEgQEAKICNpbmNs
dWRlICJYUGF0aEV4Y2VwdGlvbi5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisj
aW5jbHVkZSAiSlNTUUxFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJTUUxFeGNlcHRpb24uaCIKKyNl
bmRpZgorCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02
MDAsNiArNjA1LDExIEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXgK
ICAgICAgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFhQYXRo
RXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogI2Vu
ZGlmCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgICAgICBjYXNlIFNRTEV4Y2VwdGlvblR5cGU6
CisgICAgICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTUUxF
eGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisjZW5k
aWYKICAgICB9CiAKICAgICBBU1NFUlQoZXJyb3JPYmplY3QpOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNFeGNlcHRpb25CYXNlLmNwcAkocmV2aXNpb24gNjEzOTEpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXhjZXB0aW9uQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzEs
NzEgQEAKLS8qDQotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4NCi0gKg0KLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KLSAqIGFyZSBtZXQ6
DQotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQNCi0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCi0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlDQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCi0gKg0KLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQ0KLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSDQotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1INCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwNCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sDQotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SDQotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQ0KLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuDQotICovDQotDQotI2luY2x1ZGUgImNvbmZpZy5oIg0KLSNpbmNsdWRlICJKU0V4
Y2VwdGlvbkJhc2UuaCINCi0NCi0jaW5jbHVkZSAiSlNET01Db3JlRXhjZXB0aW9uLmgiDQotI2lu
Y2x1ZGUgIkpTRXZlbnRFeGNlcHRpb24uaCINCi0jaW5jbHVkZSAiSlNSYW5nZUV4Y2VwdGlvbi5o
Ig0KLSNpbmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmgiDQotI2lmIEVOQUJMRShT
VkcpDQotI2luY2x1ZGUgIkpTU1ZHRXhjZXB0aW9uLmgiDQotI2VuZGlmDQotI2lmIEVOQUJMRShY
UEFUSCkNCi0jaW5jbHVkZSAiSlNYUGF0aEV4Y2VwdGlvbi5oIg0KLSNlbmRpZg0KLSANCi1uYW1l
c3BhY2UgV2ViQ29yZSB7DQotIA0KLUV4Y2VwdGlvbkJhc2UqIHRvRXhjZXB0aW9uQmFzZShKU0M6
OkpTVmFsdWUgdmFsdWUpDQotew0KLSAgICBpZiAoRE9NQ29yZUV4Y2VwdGlvbiogZG9tRXhjZXB0
aW9uID0gdG9ET01Db3JlRXhjZXB0aW9uKHZhbHVlKSkNCi0gICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEV4Y2VwdGlvbkJhc2UqPihkb21FeGNlcHRpb24pOw0KLSAgICBpZiAoUmFuZ2VF
eGNlcHRpb24qIHJhbmdlRXhjZXB0aW9uID0gdG9SYW5nZUV4Y2VwdGlvbih2YWx1ZSkpDQotICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxFeGNlcHRpb25CYXNlKj4ocmFuZ2VFeGNlcHRp
b24pOw0KLSAgICBpZiAoRXZlbnRFeGNlcHRpb24qIGV2ZW50RXhjZXB0aW9uID0gdG9FdmVudEV4
Y2VwdGlvbih2YWx1ZSkpDQotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxFeGNlcHRp
b25CYXNlKj4oZXZlbnRFeGNlcHRpb24pOw0KLSAgICBpZiAoWE1MSHR0cFJlcXVlc3RFeGNlcHRp
b24qIHhtbEh0dHBFeGNlcHRpb24gPSB0b1hNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uKHZhbHVlKSkN
Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEV4Y2VwdGlvbkJhc2UqPih4bWxIdHRw
RXhjZXB0aW9uKTsNCi0jaWYgRU5BQkxFKFNWRykNCi0gICAgaWYgKFNWR0V4Y2VwdGlvbiogc3Zn
RXhjZXB0aW9uID0gdG9TVkdFeGNlcHRpb24odmFsdWUpKQ0KLSAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8RXhjZXB0aW9uQmFzZSo+KHN2Z0V4Y2VwdGlvbik7DQotI2VuZGlmDQotI2lm
IEVOQUJMRShYUEFUSCkNCi0gICAgaWYgKFhQYXRoRXhjZXB0aW9uKiBwYXRoRXhjZXB0aW9uID0g
dG9YUGF0aEV4Y2VwdGlvbih2YWx1ZSkpDQotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxFeGNlcHRpb25CYXNlKj4ocGF0aEV4Y2VwdGlvbik7DQotI2VuZGlmDQotICAgIA0KLSAgICBy
ZXR1cm4gMDsNCi19DQotDQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNFeGNlcHRpb25CYXNlLmgiCisKKyNpbmNsdWRlICJKU0RPTUNvcmVFeGNlcHRpb24u
aCIKKyNpbmNsdWRlICJKU0V2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSlNSYW5nZUV4Y2Vw
dGlvbi5oIgorI2luY2x1ZGUgIkpTWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaCIKKyNpZiBFTkFC
TEUoU1ZHKQorI2luY2x1ZGUgIkpTU1ZHRXhjZXB0aW9uLmgiCisjZW5kaWYKKyNpZiBFTkFCTEUo
WFBBVEgpCisjaW5jbHVkZSAiSlNYUGF0aEV4Y2VwdGlvbi5oIgorI2VuZGlmCisjaWYgRU5BQkxF
KFhQQVRIKQorI2luY2x1ZGUgIkpTU1FMRXhjZXB0aW9uLmgiCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitFeGNlcHRpb25CYXNlKiB0b0V4Y2VwdGlvbkJhc2UoSlNDOjpKU1ZhbHVl
IHZhbHVlKQoreworICAgIGlmIChET01Db3JlRXhjZXB0aW9uKiBkb21FeGNlcHRpb24gPSB0b0RP
TUNvcmVFeGNlcHRpb24odmFsdWUpKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxF
eGNlcHRpb25CYXNlKj4oZG9tRXhjZXB0aW9uKTsKKyAgICBpZiAoUmFuZ2VFeGNlcHRpb24qIHJh
bmdlRXhjZXB0aW9uID0gdG9SYW5nZUV4Y2VwdGlvbih2YWx1ZSkpCisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PEV4Y2VwdGlvbkJhc2UqPihyYW5nZUV4Y2VwdGlvbik7CisgICAgaWYg
KEV2ZW50RXhjZXB0aW9uKiBldmVudEV4Y2VwdGlvbiA9IHRvRXZlbnRFeGNlcHRpb24odmFsdWUp
KQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxFeGNlcHRpb25CYXNlKj4oZXZlbnRF
eGNlcHRpb24pOworICAgIGlmIChYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbiogeG1sSHR0cEV4Y2Vw
dGlvbiA9IHRvWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24odmFsdWUpKQorICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxFeGNlcHRpb25CYXNlKj4oeG1sSHR0cEV4Y2VwdGlvbik7CisjaWYg
RU5BQkxFKFNWRykKKyAgICBpZiAoU1ZHRXhjZXB0aW9uKiBzdmdFeGNlcHRpb24gPSB0b1NWR0V4
Y2VwdGlvbih2YWx1ZSkpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEV4Y2VwdGlv
bkJhc2UqPihzdmdFeGNlcHRpb24pOworI2VuZGlmCisjaWYgRU5BQkxFKFhQQVRIKQorICAgIGlm
IChYUGF0aEV4Y2VwdGlvbiogcGF0aEV4Y2VwdGlvbiA9IHRvWFBhdGhFeGNlcHRpb24odmFsdWUp
KQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxFeGNlcHRpb25CYXNlKj4ocGF0aEV4
Y2VwdGlvbik7CisjZW5kaWYKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgaWYgKFNRTEV4Y2Vw
dGlvbiogcGF0aEV4Y2VwdGlvbiA9IHRvU1FMRXhjZXB0aW9uKHZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RXhjZXB0aW9uQmFzZSo+KHBhdGhFeGNlcHRpb24pOworI2Vu
ZGlmCisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UHJveHkuY3BwCShyZXZpc2lvbiA2MTM5MSkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNs
dWRlICJWOEhpZGRlblByb3BlcnR5TmFtZS5oIgogI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0
LmgiCiAjaW5jbHVkZSAiVjhSYW5nZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlY4U1FMRXhjZXB0
aW9uLmgiCiAjaW5jbHVkZSAiVjhYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUg
IlY4WFBhdGhFeGNlcHRpb24uaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCkBAIC02Nzcs
NiArNjc4LDExIEBAIHZvaWQgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGludCBleGNlcHQKICAg
ICAgICAgZXhjZXB0aW9uID0gdG9WOChYUGF0aEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9u
KSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIGNh
c2UgU1FMRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXhjZXB0aW9uID0gdG9WOChTUUxFeGNlcHRp
b246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhQcm94eS5oCShyZXZpc2lvbiA2MTM5MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsNiArMzU3LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN2Z0V4Y2VwdGlvbk5hbWUoaW50IGV4
Y2VwdGlvbkNvZGUpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBzcWxFeGNlcHRpb25OYW1lKGludCBleGNlcHRpb25Db2RlKTsKKyNl
bmRpZgorCiAgICAgICAgIEZyYW1lKiBtX2ZyYW1lOwogCiAgICAgICAgIC8vIEZvciB0aGUgbW9t
ZW50LCB3ZSBoYXZlIG9uZSBvZiB0aGVzZS4gIFNvb24gd2Ugd2lsbCBoYXZlIG9uZSBwZXIgRE9N
V3JhcHBlcldvcmxkLgpJbmRleDogV2ViQ29yZS9kb20vRXhjZXB0aW9uQ29kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRXhjZXB0aW9uQ29kZS5jcHAJKHJldmlzaW9uIDYxMzkxKQor
KysgV2ViQ29yZS9kb20vRXhjZXB0aW9uQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYg
KzM4LDEwIEBACiAjaW5jbHVkZSAiWFBhdGhFeGNlcHRpb24uaCIKICNlbmRpZgogCisjaWYgRU5B
QkxFKERBVEFCQVNFKQorI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgorI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGV4Y2VwdGlvbk5hbWVz
W10gPSB7CkBAIC0xNDUsNiArMTQ5LDMwIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzdmdF
eGNlcHRpb25EZXMKIH07CiAjZW5kaWYKIAorI2lmIEVOQUJMRShEQVRBQkFTRSkKK3N0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBzcWxFeGNlcHRpb25OYW1lc1tdID0geworICAgICJVTktOT1dOX0VS
UiIsCisgICAgIkRBVEFCQVNFX0VSUiIsCisgICAgIlZFUlNJT05fRVJSIiwKKyAgICAiVE9PX0xB
UkdFX0VSUiIsCisgICAgIlFVT1RBX0VSUiIsCisgICAgIlNZTlRBWF9FUlIiLAorICAgICJDT05T
VFJBSU5UX0VSUiIsCisgICAgIlRJTUVPVVRfRVJSIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IHNxbEV4Y2VwdGlvbkRlc2NyaXB0aW9uc1tdID0geworICAgICJUaGUgb3BlcmF0aW9u
IGZhaWxlZCBmb3IgcmVhc29ucyB1bnJlbGF0ZWQgdG8gdGhlIGRhdGFiYXNlLiIsCisgICAgIlRo
ZSBvcGVyYXRpb24gZmFpbGVkIGZvciBzb21lIHJlYXNvbiByZWxhdGVkIHRvIHRoZSBkYXRhYmFz
ZS4iLAorICAgICJUaGUgYWN0dWFsIGRhdGFiYXNlIHZlcnNpb24gZGlkIG5vdCBtYXRjaCB0aGUg
ZXhwZWN0ZWQgdmVyc2lvbi4iLAorICAgICJEYXRhIHJldHVybmVkIGZyb20gdGhlIGRhdGFiYXNl
IGlzIHRvbyBsYXJnZS4iLAorICAgICJRdW90YSB3YXMgZXhjZWVkZWQuIiwKKyAgICAiSW52YWxp
ZCBvciB1bmF1dGhvcml6ZWQgc3RhdGVtZW50OyBvciB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBk
aWQgbm90IG1hdGNoIHRoZSBudW1iZXIgb2YgPyBwbGFjZWhvbGRlcnMuIiwKKyAgICAiQSBjb25z
dHJhaW50IHdhcyB2aW9sYXRlZC4iLAorICAgICJBIHRyYW5zYWN0aW9uIGxvY2sgY291bGQgbm90
IGJlIGFjcXVpcmVkIGluIGEgcmVhc29uYWJsZSB0aW1lLiIKK307CisjZW5kaWYKKwogdm9pZCBn
ZXRFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24oRXhjZXB0aW9uQ29kZSBlYywgRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBBU1NFUlQoZWMpOwpAQCAtMTU2LDcg
KzE4NCw3IEBAIHZvaWQgZ2V0RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKEV4Y2VwdGkKICAgICBp
bnQgbmFtZVRhYmxlU2l6ZTsKICAgICBpbnQgbmFtZVRhYmxlT2Zmc2V0OwogICAgIEV4Y2VwdGlv
blR5cGUgdHlwZTsKLSAgICAKKwogICAgIGlmIChjb2RlID49IFJhbmdlRXhjZXB0aW9uOjpSYW5n
ZUV4Y2VwdGlvbk9mZnNldCAmJiBjb2RlIDw9IFJhbmdlRXhjZXB0aW9uOjpSYW5nZUV4Y2VwdGlv
bk1heCkgewogICAgICAgICB0eXBlID0gUmFuZ2VFeGNlcHRpb25UeXBlOwogICAgICAgICB0eXBl
TmFtZSA9ICJET00gUmFuZ2UiOwpAQCAtMjAzLDYgKzIzMSwxNiBAQCB2b2lkIGdldEV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbihFeGNlcHRpCiAgICAgICAgIG5hbWVUYWJsZVNpemUgPSBzaXplb2Yo
c3ZnRXhjZXB0aW9uTmFtZXMpIC8gc2l6ZW9mKHN2Z0V4Y2VwdGlvbk5hbWVzWzBdKTsKICAgICAg
ICAgbmFtZVRhYmxlT2Zmc2V0ID0gU1ZHRXhjZXB0aW9uOjpTVkdfV1JPTkdfVFlQRV9FUlI7CiAj
ZW5kaWYKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgfSBlbHNlIGlmIChjb2RlID49IFNRTEV4
Y2VwdGlvbjo6U1FMRXhjZXB0aW9uT2Zmc2V0ICYmIGNvZGUgPD0gU1FMRXhjZXB0aW9uOjpTUUxF
eGNlcHRpb25NYXgpIHsKKyAgICAgICAgdHlwZSA9IFNRTEV4Y2VwdGlvblR5cGU7CisgICAgICAg
IHR5cGVOYW1lID0gIkRPTSBTUUwiOworICAgICAgICBjb2RlIC09IFNRTEV4Y2VwdGlvbjo6U1FM
RXhjZXB0aW9uT2Zmc2V0OworICAgICAgICBuYW1lVGFibGUgPSBzcWxFeGNlcHRpb25OYW1lczsK
KyAgICAgICAgZGVzY3JpcHRpb25UYWJsZSA9IHNxbEV4Y2VwdGlvbkRlc2NyaXB0aW9uczsKKyAg
ICAgICAgbmFtZVRhYmxlU2l6ZSA9IHNpemVvZihzcWxFeGNlcHRpb25OYW1lcykgLyBzaXplb2Yo
c3FsRXhjZXB0aW9uTmFtZXNbMF0pOworICAgICAgICBuYW1lVGFibGVPZmZzZXQgPSBTUUxFeGNl
cHRpb246OlVOS05PV05fRVJSOworI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgdHlwZSA9
IERPTUV4Y2VwdGlvblR5cGU7CiAgICAgICAgIHR5cGVOYW1lID0gIkRPTSI7CkluZGV4OiBXZWJD
b3JlL2RvbS9FeGNlcHRpb25Db2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXhjZXB0
aW9uQ29kZS5oCShyZXZpc2lvbiA2MTM5MSkKKysrIFdlYkNvcmUvZG9tL0V4Y2VwdGlvbkNvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNzgsOCArNzgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
I2lmIEVOQUJMRShTVkcpCiAgICAgICAgICwgU1ZHRXhjZXB0aW9uVHlwZQogI2VuZGlmCi0gICAg
fTsgICAgICAgIAotICAgIAorI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICAgICAgLCBTUUxFeGNl
cHRpb25UeXBlCisjZW5kaWYKKyAgICB9OworCiAKICAgICBzdHJ1Y3QgRXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIHsKICAgICAgICAgY29uc3QgY2hhciogdHlwZU5hbWU7IC8vIGhhcyBzcGFjZXMg
YW5kIGlzIHN1aXRhYmxlIGZvciB1c2UgaW4gZXhjZXB0aW9uIGRlc2NyaXB0aW9uIHN0cmluZ3M7
IG1heGltdW0gbGVuZ3RoIGlzIDEwIGNoYXJhY3RlcnMKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCShyZXZp
c2lvbiA2MTM5MSkKKysrIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC03MjksNiArNzI5LDEwIEBAIG1vZHVsZSB3aW5kb3cgewogI2VuZGlmCiAjZW5kaWYKIAor
I2lmIGRlZmluZWQoRU5BQkxFX0RBVEFCQVNFKQorICAgICAgICBhdHRyaWJ1dGUgU1FMRXhjZXB0
aW9uQ29uc3RydWN0b3IgU1FMRXhjZXB0aW9uOworI2VuZGlmCisKICAgICAgICAgYXR0cmlidXRl
IFtDb25kaXRpb25hbD1UT1VDSF9FVkVOVFNdIFRvdWNoRXZlbnRDb25zdHJ1Y3RvciBUb3VjaEV2
ZW50OwogCiAgICAgICAgIGF0dHJpYnV0ZSBET01Gb3JtRGF0YUNvbnN0cnVjdG9yIEZvcm1EYXRh
OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTEV4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TUUxFeGNlcHRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U1FMRXhjZXB0aW9uX2gKKyNkZWZpbmUgU1FMRXhjZXB0aW9uX2gKKworI2lmIEVOQUJMRShEQVRB
QkFTRSkKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTUUxFeGNlcHRpb24gOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMRXhjZXB0aW9uPiBjcmVhdGUoY29uc3QgRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU1FMRXhjZXB0aW9uKGRlc2NyaXB0aW9uKSk7CisgICAgfQorCisgICAgc3Rh
dGljIGNvbnN0IGludCBTUUxFeGNlcHRpb25PZmZzZXQgPSAxMDAwOworICAgIHN0YXRpYyBjb25z
dCBpbnQgU1FMRXhjZXB0aW9uTWF4ID0gMTA5OTsKKworICAgIGVudW0gU1FMRXhjZXB0aW9uQ29k
ZSB7CisgICAgICAgIFVOS05PV05fRVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0LAorICAgICAgICBE
QVRBQkFTRV9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyAxLAorICAgICAgICBWRVJTSU9OX0VS
UiA9IFNRTEV4Y2VwdGlvbk9mZnNldCArIDIsCisgICAgICAgIFRPT19MQVJHRV9FUlIgPSBTUUxF
eGNlcHRpb25PZmZzZXQgKyAzLAorICAgICAgICBRVU9UQV9FUlIgPSBTUUxFeGNlcHRpb25PZmZz
ZXQgKyA0LAorICAgICAgICBTWU5UQVhfRVJSID0gU1FMRXhjZXB0aW9uT2Zmc2V0ICsgNSwKKyAg
ICAgICAgQ09OU1RSQUlOVF9FUlIgPSBTUUxFeGNlcHRpb25PZmZzZXQgKyA2LAorICAgICAgICBU
SU1FT1VUX0VSUiA9IFNRTEV4Y2VwdGlvbk9mZnNldCArIDcKKyAgICB9OworCitwcml2YXRlOgor
ICAgIFNRTEV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uKQorICAgICAgICA6IEV4Y2VwdGlvbkJhc2UoZGVzY3JpcHRpb24pCisgICAgeworICAgIH0K
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFT
RSkKKworI2VuZGlmIC8vIFNRTEV4Y2VwdGlvbl9oCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FM
RXhjZXB0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMRXhjZXB0aW9u
LmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaWRsCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJm
YWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9REFUQUJBU0UsCisgICAgICAgIE5vU3RhdGljVGFi
bGVzCisgICAgXSBTUUxFeGNlcHRpb24geworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBjb2RlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1l
c3NhZ2U7CisKKyAgICAgICAgLy8gU1FMRXhjZXB0aW9uQ29kZTogdXNlZCBvbmx5IGluIHRoZSBz
eW5jIERCIEFQSQorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTktOT1dOX0VSUiA9IDA7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERBVEFCQVNFX0VSUiA9IDE7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IFZFUlNJT05fRVJSID0gMjsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgVE9PX0xBUkdFX0VSUiA9IDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IFFVT1RBX0VSUiA9IDQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNZTlRBWF9F
UlIgPSA1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05TVFJBSU5UX0VSUiA9IDY7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFRJTUVPVVRfRVJSID0gNzsKKyAgICB9Owor
fQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gNjEzOTIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0wNi0xOCAgRHVtaXRydSBEYW5pbGl1
YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGluZyB0aGUgU1FMRXhjZXB0aW9uIGNsYXNzIHdoaWNoIHdpbGwg
YmUgdXNlZCB0byByZXBvcnQgc3luYyBEQiBlcnJvcnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisgICAgICAgICogZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2RvbS9X
aW5kb3cvd2luZG93LXByb3BlcnR5LWRlc2NyaXB0b3JzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2RvbS9wcm90b3R5cGUtaW5oZXJpdGFuY2UtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGZhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vZmFzdC9kb20vcHJvdG90eXBlLWluaGVyaXRhbmNlLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0
aWVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZmFzdC9kb20vcHJvdG90
eXBlLWluaGVyaXRhbmNlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0
L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBs
YXRmb3JtL3F0L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydHktZGVzY3JpcHRvcnMtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL3F0L2Zhc3QvZG9tL3Byb3RvdHlwZS1pbmhl
cml0YW5jZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9qcy9nbG9i
YWwtY29uc3RydWN0b3JzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vZmFz
dC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0eS1kZXNjcmlwdG9ycy1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogcGxhdGZvcm0vd2luL2Zhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1leHBlY3Rl
ZC50eHQ6CisKIDIwMTAtMDYtMTggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZG9tL3Byb3RvdHlwZS1pbmhlcml0YW5jZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vcHJvdG90eXBlLWluaGVyaXRhbmNlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNjEzOTEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUtaW5oZXJpdGFu
Y2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNiArMjg1LDggQEAgUEFTUyBp
bm5lci5SZWN0LmlzSW5uZXIgaXMgdHJ1ZQogUEFTUyBpbm5lci5SZWN0LmNvbnN0cnVjdG9yLmlz
SW5uZXIgaXMgdHJ1ZQogUEFTUyBpbm5lci5SZWZlcmVuY2VFcnJvci5pc0lubmVyIGlzIHRydWUK
IFBBU1MgaW5uZXIuUmVmZXJlbmNlRXJyb3IuY29uc3RydWN0b3IuaXNJbm5lciBpcyB0cnVlCitQ
QVNTIGlubmVyLlNRTEV4Y2VwdGlvbi5pc0lubmVyIGlzIHRydWUKK1BBU1MgaW5uZXIuU1FMRXhj
ZXB0aW9uLmNvbnN0cnVjdG9yLmlzSW5uZXIgaXMgdHJ1ZQogUEFTUyBpbm5lci5TVkdBRWxlbWVu
dC5pc0lubmVyIGlzIHRydWUKIFBBU1MgaW5uZXIuU1ZHQUVsZW1lbnQuY29uc3RydWN0b3IuaXNJ
bm5lciBpcyB0cnVlCiBQQVNTIGlubmVyLlNWR0FsdEdseXBoRWxlbWVudC5pc0lubmVyIGlzIHRy
dWUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dp
bmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjEzOTEpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjkyLDYgKzEyOTIsMjQgQEAgd2luZG93LlJhbmdlRXhjZXB0aW9uLnBy
b3RvdHlwZS5JTlZBTElEXwogd2luZG93LlJlY3QgW29iamVjdCBSZWN0Q29uc3RydWN0b3JdCiB3
aW5kb3cuUmVjdC5wcm90b3R5cGUgW29iamVjdCBSZWN0UHJvdG90eXBlXQogd2luZG93LlJlZmVy
ZW5jZUVycm9yIFtmdW5jdGlvbl0KK3dpbmRvdy5TUUxFeGNlcHRpb24gW29iamVjdCBTUUxFeGNl
cHRpb25Db25zdHJ1Y3Rvcl0KK3dpbmRvdy5TUUxFeGNlcHRpb24uQ09OU1RSQUlOVF9FUlIgW251
bWJlcl0KK3dpbmRvdy5TUUxFeGNlcHRpb24uREFUQUJBU0VfRVJSIFtudW1iZXJdCit3aW5kb3cu
U1FMRXhjZXB0aW9uLlFVT1RBX0VSUiBbbnVtYmVyXQord2luZG93LlNRTEV4Y2VwdGlvbi5TWU5U
QVhfRVJSIFtudW1iZXJdCit3aW5kb3cuU1FMRXhjZXB0aW9uLlRJTUVPVVRfRVJSIFtudW1iZXJd
Cit3aW5kb3cuU1FMRXhjZXB0aW9uLlRPT19MQVJHRV9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxF
eGNlcHRpb24uVU5LTk9XTl9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxFeGNlcHRpb24uVkVSU0lP
Tl9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxFeGNlcHRpb24ucHJvdG90eXBlIFtvYmplY3QgU1FM
RXhjZXB0aW9uUHJvdG90eXBlXQord2luZG93LlNRTEV4Y2VwdGlvbi5wcm90b3R5cGUuQ09OU1RS
QUlOVF9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxFeGNlcHRpb24ucHJvdG90eXBlLkRBVEFCQVNF
X0VSUiBbbnVtYmVyXQord2luZG93LlNRTEV4Y2VwdGlvbi5wcm90b3R5cGUuUVVPVEFfRVJSIFtu
dW1iZXJdCit3aW5kb3cuU1FMRXhjZXB0aW9uLnByb3RvdHlwZS5TWU5UQVhfRVJSIFtudW1iZXJd
Cit3aW5kb3cuU1FMRXhjZXB0aW9uLnByb3RvdHlwZS5USU1FT1VUX0VSUiBbbnVtYmVyXQord2lu
ZG93LlNRTEV4Y2VwdGlvbi5wcm90b3R5cGUuVE9PX0xBUkdFX0VSUiBbbnVtYmVyXQord2luZG93
LlNRTEV4Y2VwdGlvbi5wcm90b3R5cGUuVU5LTk9XTl9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxF
eGNlcHRpb24ucHJvdG90eXBlLlZFUlNJT05fRVJSIFtudW1iZXJdCiB3aW5kb3cuU1ZHQUVsZW1l
bnQgW29iamVjdCBTVkdBRWxlbWVudENvbnN0cnVjdG9yXQogd2luZG93LlNWR0FFbGVtZW50LnBy
b3RvdHlwZSBbcHJpbnRlZCBhYm92ZSBhcyB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGVdCiB3aW5k
b3cuU1ZHQWx0R2x5cGhFbGVtZW50IFtvYmplY3QgU1ZHQWx0R2x5cGhFbGVtZW50Q29uc3RydWN0
b3JdCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnR5LWRl
c2NyaXB0b3JzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9XaW5kb3cvd2luZG93LXByb3BlcnR5LWRlc2NyaXB0b3JzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gNjEzOTEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnR5
LWRlc2NyaXB0b3JzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1Niw3
IEBAIFBBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXAKIFBBU1MgdHlwZW9m
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnUmVjdCcpIGlzICdvYmpl
Y3QnCiBQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywg
J1JlZmVyZW5jZUVycm9yJykgaXMgJ29iamVjdCcKIFBBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnUmVnRXhwJykgaXMgJ29iamVjdCcKK1BBU1MgdHlw
ZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnU1FMRXhjZXB0aW9u
JykgaXMgJ29iamVjdCcKIFBBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3Iod2luZG93LCAnU1ZHQUVsZW1lbnQnKSBpcyAnb2JqZWN0JwogUEFTUyB0eXBlb2YgT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdTVkdBbHRHbHlwaEVsZW1lbnQnKSBp
cyAnb2JqZWN0JwogUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3
aW5kb3csICdTVkdBbmdsZScpIGlzICdvYmplY3QnCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pz
L2dsb2JhbC1jb25zdHJ1Y3RvcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYx
MzkxKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSw3IEBAIFBBU1MgUkdCQ29sb3IudG9T
dHJpbmcoKSBpcyAnW29iamVjdCBSR0IKIFBBU1MgUmFuZ2UudG9TdHJpbmcoKSBpcyAnW29iamVj
dCBSYW5nZUNvbnN0cnVjdG9yXScKIFBBU1MgUmFuZ2VFeGNlcHRpb24udG9TdHJpbmcoKSBpcyAn
W29iamVjdCBSYW5nZUV4Y2VwdGlvbkNvbnN0cnVjdG9yXScKIFBBU1MgUmVjdC50b1N0cmluZygp
IGlzICdbb2JqZWN0IFJlY3RDb25zdHJ1Y3Rvcl0nCitQQVNTIFNRTEV4Y2VwdGlvbi50b1N0cmlu
ZygpIGlzICdbb2JqZWN0IFNRTEV4Y2VwdGlvbkNvbnN0cnVjdG9yXScKIFBBU1MgU1ZHQUVsZW1l
bnQudG9TdHJpbmcoKSBpcyAnW29iamVjdCBTVkdBRWxlbWVudENvbnN0cnVjdG9yXScKIFBBU1Mg
U1ZHQWx0R2x5cGhFbGVtZW50LnRvU3RyaW5nKCkgaXMgJ1tvYmplY3QgU1ZHQWx0R2x5cGhFbGVt
ZW50Q29uc3RydWN0b3JdJwogUEFTUyBTVkdBbmdsZS50b1N0cmluZygpIGlzICdbb2JqZWN0IFNW
R0FuZ2xlQ29uc3RydWN0b3JdJwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
ZmFzdC9kb20vcHJvdG90eXBlLWluaGVyaXRhbmNlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2RvbS9wcm90b3R5cGUtaW5oZXJp
dGFuY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MTM5MSkKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2Zhc3QvZG9tL3Byb3RvdHlwZS1pbmhlcml0YW5jZS1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTI3NSw2ICsyNzUsOCBAQCBQQVNTIGlubmVyLlJhbmdlRXhjZXB0
aW9uLmlzSW5uZXIgaXMgdHJ1CiBQQVNTIGlubmVyLlJhbmdlRXhjZXB0aW9uLmNvbnN0cnVjdG9y
LmlzSW5uZXIgaXMgdHJ1ZQogUEFTUyBpbm5lci5SZWN0LmlzSW5uZXIgaXMgdHJ1ZQogUEFTUyBp
bm5lci5SZWN0LmNvbnN0cnVjdG9yLmlzSW5uZXIgaXMgdHJ1ZQorUEFTUyBpbm5lci5TUUxFeGNl
cHRpb24uaXNJbm5lciBpcyB0cnVlCitQQVNTIGlubmVyLlNRTEV4Y2VwdGlvbi5jb25zdHJ1Y3Rv
ci5pc0lubmVyIGlzIHRydWUKIFBBU1MgaW5uZXIuU1ZHQUVsZW1lbnQuaXNJbm5lciBpcyB0cnVl
CiBQQVNTIGlubmVyLlNWR0FFbGVtZW50LmNvbnN0cnVjdG9yLmlzSW5uZXIgaXMgdHJ1ZQogUEFT
UyBpbm5lci5TVkdBbHRHbHlwaEVsZW1lbnQuaXNJbm5lciBpcyB0cnVlCkBAIC03NjEsNCArNzYz
LDQgQEAgUEFTUyBpbm5lci53aW5kb3cuaXNJbm5lciBpcyB0cnVlCiBQQVNTIGlubmVyLndpbmRv
dy5jb25zdHJ1Y3Rvci5pc0lubmVyIGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKIAotVEVTVCBDT01QTEVURQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK1RFU1Qg
Q09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2RvbS9wcm90b3R5
cGUtaW5oZXJpdGFuY2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9mYXN0L2RvbS9wcm90b3R5cGUtaW5oZXJpdGFuY2UtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA2MTM5MSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2RvbS9wcm90
b3R5cGUtaW5oZXJpdGFuY2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNiAr
MjgxLDggQEAgUEFTUyBpbm5lci5SZWN0LmlzSW5uZXIgaXMgdHJ1ZQogUEFTUyBpbm5lci5SZWN0
LmNvbnN0cnVjdG9yLmlzSW5uZXIgaXMgdHJ1ZQogUEFTUyBpbm5lci5SZWZlcmVuY2VFcnJvci5p
c0lubmVyIGlzIHRydWUKIFBBU1MgaW5uZXIuUmVmZXJlbmNlRXJyb3IuY29uc3RydWN0b3IuaXNJ
bm5lciBpcyB0cnVlCitQQVNTIGlubmVyLlNRTEV4Y2VwdGlvbi5pc0lubmVyIGlzIHRydWUKK1BB
U1MgaW5uZXIuU1FMRXhjZXB0aW9uLmNvbnN0cnVjdG9yLmlzSW5uZXIgaXMgdHJ1ZQogUEFTUyBp
bm5lci5TVkdBRWxlbWVudC5pc0lubmVyIGlzIHRydWUKIFBBU1MgaW5uZXIuU1ZHQUVsZW1lbnQu
Y29uc3RydWN0b3IuaXNJbm5lciBpcyB0cnVlCiBQQVNTIGlubmVyLlNWR0FsdEdseXBoRWxlbWVu
dC5pc0lubmVyIGlzIHRydWUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2Rv
bS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MTM5MSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMjUyLDYgKzEyNTIsMjQgQEAgd2luZG93LlJhbmdlRXhjZXB0aW9uLnByb3Rv
dHlwZS5JTlZBTElEXwogd2luZG93LlJlY3QgW29iamVjdCBSZWN0Q29uc3RydWN0b3JdCiB3aW5k
b3cuUmVjdC5wcm90b3R5cGUgW29iamVjdCBSZWN0UHJvdG90eXBlXQogd2luZG93LlJlZmVyZW5j
ZUVycm9yIFtmdW5jdGlvbl0KK3dpbmRvdy5TUUxFeGNlcHRpb24gW29iamVjdCBTUUxFeGNlcHRp
b25Db25zdHJ1Y3Rvcl0KK3dpbmRvdy5TUUxFeGNlcHRpb24uQ09OU1RSQUlOVF9FUlIgW251bWJl
cl0KK3dpbmRvdy5TUUxFeGNlcHRpb24uREFUQUJBU0VfRVJSIFtudW1iZXJdCit3aW5kb3cuU1FM
RXhjZXB0aW9uLlFVT1RBX0VSUiBbbnVtYmVyXQord2luZG93LlNRTEV4Y2VwdGlvbi5TWU5UQVhf
RVJSIFtudW1iZXJdCit3aW5kb3cuU1FMRXhjZXB0aW9uLlRJTUVPVVRfRVJSIFtudW1iZXJdCit3
aW5kb3cuU1FMRXhjZXB0aW9uLlRPT19MQVJHRV9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxFeGNl
cHRpb24uVU5LTk9XTl9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxFeGNlcHRpb24uVkVSU0lPTl9F
UlIgW251bWJlcl0KK3dpbmRvdy5TUUxFeGNlcHRpb24ucHJvdG90eXBlIFtvYmplY3QgU1FMRXhj
ZXB0aW9uUHJvdG90eXBlXQord2luZG93LlNRTEV4Y2VwdGlvbi5wcm90b3R5cGUuQ09OU1RSQUlO
VF9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxFeGNlcHRpb24ucHJvdG90eXBlLkRBVEFCQVNFX0VS
UiBbbnVtYmVyXQord2luZG93LlNRTEV4Y2VwdGlvbi5wcm90b3R5cGUuUVVPVEFfRVJSIFtudW1i
ZXJdCit3aW5kb3cuU1FMRXhjZXB0aW9uLnByb3RvdHlwZS5TWU5UQVhfRVJSIFtudW1iZXJdCit3
aW5kb3cuU1FMRXhjZXB0aW9uLnByb3RvdHlwZS5USU1FT1VUX0VSUiBbbnVtYmVyXQord2luZG93
LlNRTEV4Y2VwdGlvbi5wcm90b3R5cGUuVE9PX0xBUkdFX0VSUiBbbnVtYmVyXQord2luZG93LlNR
TEV4Y2VwdGlvbi5wcm90b3R5cGUuVU5LTk9XTl9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxFeGNl
cHRpb24ucHJvdG90eXBlLlZFUlNJT05fRVJSIFtudW1iZXJdCiB3aW5kb3cuU1ZHQW5nbGUgW29i
amVjdCBTVkdBbmdsZUNvbnN0cnVjdG9yXQogd2luZG93LlNWR0FuZ2xlLlNWR19BTkdMRVRZUEVf
REVHIFtudW1iZXJdCiB3aW5kb3cuU1ZHQW5nbGUuU1ZHX0FOR0xFVFlQRV9HUkFEIFtudW1iZXJd
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2RvbS9wcm90b3R5cGUtaW5oZXJp
dGFuY2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0
L2Zhc3QvZG9tL3Byb3RvdHlwZS1pbmhlcml0YW5jZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYx
MzkxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vcHJvdG90eXBlLWluaGVy
aXRhbmNlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDYgKzI4NSw4IEBAIFBB
U1MgaW5uZXIuUmVjdC5pc0lubmVyIGlzIHRydWUKIFBBU1MgaW5uZXIuUmVjdC5jb25zdHJ1Y3Rv
ci5pc0lubmVyIGlzIHRydWUKIFBBU1MgaW5uZXIuUmVmZXJlbmNlRXJyb3IuaXNJbm5lciBpcyB0
cnVlCiBQQVNTIGlubmVyLlJlZmVyZW5jZUVycm9yLmNvbnN0cnVjdG9yLmlzSW5uZXIgaXMgdHJ1
ZQorUEFTUyBpbm5lci5TUUxFeGNlcHRpb24uaXNJbm5lciBpcyB0cnVlCitQQVNTIGlubmVyLlNR
TEV4Y2VwdGlvbi5jb25zdHJ1Y3Rvci5pc0lubmVyIGlzIHRydWUKIFBBU1MgaW5uZXIuU1ZHQUVs
ZW1lbnQuaXNJbm5lciBpcyB0cnVlCiBQQVNTIGlubmVyLlNWR0FFbGVtZW50LmNvbnN0cnVjdG9y
LmlzSW5uZXIgaXMgdHJ1ZQogUEFTUyBpbm5lci5TVkdBbmdsZS5pc0lubmVyIGlzIHRydWUKSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVy
dGllcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
ZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
NjEzOTEpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2luZG93
LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjkyLDYgKzEyOTIs
MjQgQEAgd2luZG93LlJhbmdlRXhjZXB0aW9uLnByb3RvdHlwZS5JTlZBTElEXwogd2luZG93LlJl
Y3QgW29iamVjdCBSZWN0Q29uc3RydWN0b3JdCiB3aW5kb3cuUmVjdC5wcm90b3R5cGUgW29iamVj
dCBSZWN0UHJvdG90eXBlXQogd2luZG93LlJlZmVyZW5jZUVycm9yIFtmdW5jdGlvbl0KK3dpbmRv
dy5TUUxFeGNlcHRpb24gW29iamVjdCBTUUxFeGNlcHRpb25Db25zdHJ1Y3Rvcl0KK3dpbmRvdy5T
UUxFeGNlcHRpb24uQ09OU1RSQUlOVF9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxFeGNlcHRpb24u
REFUQUJBU0VfRVJSIFtudW1iZXJdCit3aW5kb3cuU1FMRXhjZXB0aW9uLlFVT1RBX0VSUiBbbnVt
YmVyXQord2luZG93LlNRTEV4Y2VwdGlvbi5TWU5UQVhfRVJSIFtudW1iZXJdCit3aW5kb3cuU1FM
RXhjZXB0aW9uLlRJTUVPVVRfRVJSIFtudW1iZXJdCit3aW5kb3cuU1FMRXhjZXB0aW9uLlRPT19M
QVJHRV9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxFeGNlcHRpb24uVU5LTk9XTl9FUlIgW251bWJl
cl0KK3dpbmRvdy5TUUxFeGNlcHRpb24uVkVSU0lPTl9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxF
eGNlcHRpb24ucHJvdG90eXBlIFtvYmplY3QgU1FMRXhjZXB0aW9uUHJvdG90eXBlXQord2luZG93
LlNRTEV4Y2VwdGlvbi5wcm90b3R5cGUuQ09OU1RSQUlOVF9FUlIgW251bWJlcl0KK3dpbmRvdy5T
UUxFeGNlcHRpb24ucHJvdG90eXBlLkRBVEFCQVNFX0VSUiBbbnVtYmVyXQord2luZG93LlNRTEV4
Y2VwdGlvbi5wcm90b3R5cGUuUVVPVEFfRVJSIFtudW1iZXJdCit3aW5kb3cuU1FMRXhjZXB0aW9u
LnByb3RvdHlwZS5TWU5UQVhfRVJSIFtudW1iZXJdCit3aW5kb3cuU1FMRXhjZXB0aW9uLnByb3Rv
dHlwZS5USU1FT1VUX0VSUiBbbnVtYmVyXQord2luZG93LlNRTEV4Y2VwdGlvbi5wcm90b3R5cGUu
VE9PX0xBUkdFX0VSUiBbbnVtYmVyXQord2luZG93LlNRTEV4Y2VwdGlvbi5wcm90b3R5cGUuVU5L
Tk9XTl9FUlIgW251bWJlcl0KK3dpbmRvdy5TUUxFeGNlcHRpb24ucHJvdG90eXBlLlZFUlNJT05f
RVJSIFtudW1iZXJdCiB3aW5kb3cuU1ZHQUVsZW1lbnQgW29iamVjdCBTVkdBRWxlbWVudENvbnN0
cnVjdG9yXQogd2luZG93LlNWR0FFbGVtZW50LnByb3RvdHlwZSBbcHJpbnRlZCBhYm92ZSBhcyB3
aW5kb3cuRWxlbWVudC5wcm90b3R5cGVdCiB3aW5kb3cuU1ZHQW5nbGUgW29iamVjdCBTVkdBbmds
ZUNvbnN0cnVjdG9yXQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0eS1kZXNjcmlwdG9ycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0
eS1kZXNjcmlwdG9ycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYxMzkxKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0eS1kZXNjcmlwdG9y
cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsNyBAQCBQQVNTIHR5
cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwCiBQQVNTIHR5cGVvZiBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ1JlY3QnKSBpcyAnb2JqZWN0JwogUEFTUyB0
eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdSZWZlcmVuY2VF
cnJvcicpIGlzICdvYmplY3QnCiBQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKHdpbmRvdywgJ1JlZ0V4cCcpIGlzICdvYmplY3QnCitQQVNTIHR5cGVvZiBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ1NRTEV4Y2VwdGlvbicpIGlzICdvYmpl
Y3QnCiBQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywg
J1NWR0FFbGVtZW50JykgaXMgJ29iamVjdCcKIFBBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnU1ZHQW5nbGUnKSBpcyAnb2JqZWN0JwogUEFTUyB0eXBl
b2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdTVkdBbmltYXRlZEFu
Z2xlJykgaXMgJ29iamVjdCcKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvanMv
Z2xvYmFsLWNvbnN0cnVjdG9ycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gNjEzOTEpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2pzL2dsb2Jh
bC1jb25zdHJ1Y3RvcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQx
LDcgQEAgUEFTUyBSR0JDb2xvci50b1N0cmluZygpIGlzICdbb2JqZWN0IFJHQgogUEFTUyBSYW5n
ZS50b1N0cmluZygpIGlzICdbb2JqZWN0IFJhbmdlQ29uc3RydWN0b3JdJwogUEFTUyBSYW5nZUV4
Y2VwdGlvbi50b1N0cmluZygpIGlzICdbb2JqZWN0IFJhbmdlRXhjZXB0aW9uQ29uc3RydWN0b3Jd
JwogUEFTUyBSZWN0LnRvU3RyaW5nKCkgaXMgJ1tvYmplY3QgUmVjdENvbnN0cnVjdG9yXScKK1BB
U1MgU1FMRXhjZXB0aW9uLnRvU3RyaW5nKCkgaXMgJ1tvYmplY3QgU1FMRXhjZXB0aW9uQ29uc3Ry
dWN0b3JdJwogUEFTUyBTVkdBRWxlbWVudC50b1N0cmluZygpIGlzICdbb2JqZWN0IFNWR0FFbGVt
ZW50Q29uc3RydWN0b3JdJwogUEFTUyBTVkdBbmdsZS50b1N0cmluZygpIGlzICdbb2JqZWN0IFNW
R0FuZ2xlQ29uc3RydWN0b3JdJwogUEFTUyBTVkdBbmltYXRlZEFuZ2xlLnRvU3RyaW5nKCkgaXMg
J1tvYmplY3QgU1ZHQW5pbWF0ZWRBbmdsZUNvbnN0cnVjdG9yXScKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnR5LWRlc2NyaXB0b3Jz
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vZmFz
dC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0eS1kZXNjcmlwdG9ycy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDYxMzkxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvZG9tL1dpbmRv
dy93aW5kb3ctcHJvcGVydHktZGVzY3JpcHRvcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xNTQsNiArMTU0LDcgQEAgUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcAogUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3cs
ICdSZWN0JykgaXMgJ29iamVjdCcKIFBBU1MgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3Iod2luZG93LCAnUmVmZXJlbmNlRXJyb3InKSBpcyAnb2JqZWN0JwogUEFTUyB0eXBl
b2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdSZWdFeHAnKSBpcyAn
b2JqZWN0JworUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5k
b3csICdTUUxFeGNlcHRpb24nKSBpcyAnb2JqZWN0JwogUEFTUyB0eXBlb2YgT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdTVkdBRWxlbWVudCcpIGlzICdvYmplY3QnCiBQ
QVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ1NWR0Fs
dEdseXBoRWxlbWVudCcpIGlzICdvYmplY3QnCiBQQVNTIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ1NWR0FuZ2xlJykgaXMgJ29iamVjdCcKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9mYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9mYXN0L2pzL2ds
b2JhbC1jb25zdHJ1Y3RvcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MTM5MSkKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9mYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNiArMTM5LDcgQEAgUEFTUyBSR0JDb2xvci50b1N0
cmluZygpIGlzICdbb2JqZWN0IFJHQgogUEFTUyBSYW5nZS50b1N0cmluZygpIGlzICdbb2JqZWN0
IFJhbmdlQ29uc3RydWN0b3JdJwogUEFTUyBSYW5nZUV4Y2VwdGlvbi50b1N0cmluZygpIGlzICdb
b2JqZWN0IFJhbmdlRXhjZXB0aW9uQ29uc3RydWN0b3JdJwogUEFTUyBSZWN0LnRvU3RyaW5nKCkg
aXMgJ1tvYmplY3QgUmVjdENvbnN0cnVjdG9yXScKK1BBU1MgU1FMRXhjZXB0aW9uLnRvU3RyaW5n
KCkgaXMgJ1tvYmplY3QgU1FMRXhjZXB0aW9uQ29uc3RydWN0b3JdJwogUEFTUyBTVkdBRWxlbWVu
dC50b1N0cmluZygpIGlzICdbb2JqZWN0IFNWR0FFbGVtZW50Q29uc3RydWN0b3JdJwogUEFTUyBT
VkdBbHRHbHlwaEVsZW1lbnQudG9TdHJpbmcoKSBpcyAnW29iamVjdCBTVkdBbHRHbHlwaEVsZW1l
bnRDb25zdHJ1Y3Rvcl0nCiBQQVNTIFNWR0FuZ2xlLnRvU3RyaW5nKCkgaXMgJ1tvYmplY3QgU1ZH
QW5nbGVDb25zdHJ1Y3Rvcl0nCg==
</data>
<flag name="review"
          id="45735"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="45736"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59320</attachid>
            <date>2010-06-21 18:04:53 -0700</date>
            <delta_ts>2010-06-23 12:58:57 -0700</delta_ts>
            <desc>patch #1: implement DatabaseSync::openDatabaseSync()</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>57687</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTU5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzAgQEAKKzIwMTAtMDYtMjEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKCkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisgICAgICAg
ICogc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJp
ZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRUZXh0VmFs
dWVJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRNdXRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpndWlkVG9WZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUd1aWRW
ZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRUb0RhdGFiYXNlTWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6Omd1aWRGb3JPcmlnaW5BbmROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6dmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0
RGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RE
YXRhYmFzZTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFz
ZTo6ZXN0aW1hdGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpm
aWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZVZl
cnNpb25LZXkpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lv
bkZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZXRW
ZXJzaW9uSW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjp2
ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6OnNldEV4cGVjdGVkVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpkaXNhYmxlQXV0aG9yaXplcik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjplbmFibGVBdXRob3JpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25XYXNJbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6
QWJzdHJhY3REYXRhYmFzZTo6cmVzZXREZWxldGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OmhhZERlbGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRh
YmFzZTo6cmVzZXRBdXRob3JpemVyKToKKyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJh
c2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Om9wZW5lZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjppc05ldyk6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZURlYnVnTmFtZSk6CisgICAgICAgICogc3RvcmFn
ZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRW
ZXJpZnkpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1
dGhvcml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpEYXRhYmFzZUF1dGhv
cml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpkZW55QmFzZWRP
blRhYmxlTmFtZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaDoKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVN5bmM6Om9wZW5EYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VT
eW5jOjpEYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjaGFu
Z2VWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6dHJhbnNhY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpvcGVuQW5kVmVyaWZ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6cGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjbG9zZUltbWVkaWF0ZWx5KToKKyAgICAgICAg
KiBzdG9yYWdlL0RhdGFiYXNlU3luYy5oOgorCiAyMDEwLTA2LTIxICBTaGVyaWZmIEJvdCAgPHdl
YmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByNjE1ODUuCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCShyZXZp
c2lvbiA2MTU5NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTMzIEBACiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFz
ZS5oIgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXpl
ci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRy
YWNrZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlN0cmlu
Z0hhc2guaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K3N0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZShTUUxpdGVEYXRhYmFz
ZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0cmluZyYgcmVzdWx0U3RyaW5nKQoreworICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKKyAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LnByZXBhcmUoKTsKKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHByZXBhcmluZyBzdGF0ZW1lbnQgdG8gcmVh
ZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcykiLCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCku
ZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJlc3VsdCA9IHN0
YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAg
ICAgcmVzdWx0U3RyaW5nID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdERvbmUpIHsKKyAg
ICAgICAgcmVzdWx0U3RyaW5nID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSByZWFkaW5nIHRleHQgcmVzdWx0IGZyb20g
ZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgc2V0VGV4dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVE
YXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7
CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwgcXVlcnkpOworICAgIGludCByZXN1
bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOworCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRP
aykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBz
ZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCB2YWx1
ZSk7CisKKyAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGlmIChyZXN1bHQgIT0g
U1FMUmVzdWx0RG9uZSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzdGVwIHN0YXRl
bWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CisvLyBGSVhNRTogbW92ZSBhbGwgZ3VpZC1yZWxhdGVkIGZ1bmN0aW9ucyB0byBhIERhdGFiYXNl
VmVyc2lvblRyYWNrZXIgY2xhc3MuCitzdGF0aWMgTXV0ZXgmIGd1aWRNdXRleCgpCit7CisgICAg
Ly8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
IGhlcmUgYmVjYXVzZQorICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgaW4gdGhl
IGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRocmVhZAorICAgIC8vIGJlZm9yZSBhbnkgb3RoZXIg
dGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBhcmUgdXNlZC4KKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKE11dGV4LCBtdXRleCwgKCkpOworICAgIHJldHVybiBtdXRleDsKK30KKwordHlw
ZWRlZiBIYXNoTWFwPGludCwgU3RyaW5nPiBHdWlkVmVyc2lvbk1hcDsKK3N0YXRpYyBHdWlkVmVy
c2lvbk1hcCYgZ3VpZFRvVmVyc2lvbk1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChH
dWlkVmVyc2lvbk1hcCwgbWFwLCAoKSk7CisgICAgcmV0dXJuIG1hcDsKK30KKworLy8gTk9URTog
Q2FsbGVyIG11c3QgbG9jayBndWlkTXV0ZXgoKS4KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVH
dWlkVmVyc2lvbk1hcChpbnQgZ3VpZCwgU3RyaW5nIG5ld1ZlcnNpb24pCit7CisgICAgLy8gRW5z
dXJlIHRoZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgorICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5
TG9jaygpKTsKKworICAgIC8vIE5vdGU6IEl0IGlzIG5vdCBzYWZlIHRvIHB1dCBhbiBlbXB0eSBz
dHJpbmcgaW50byB0aGUgZ3VpZFRvVmVyc2lvbk1hcCgpIG1hcC4KKyAgICAvLyBUaGF0J3MgYmVj
YXVzZSB0aGUgbWFwIGlzIGNyb3NzLXRocmVhZCwgYnV0IGVtcHR5IHN0cmluZ3MgYXJlIHBlci10
aHJlYWQuCisgICAgLy8gVGhlIGNvcHkoKSBmdW5jdGlvbiBtYWtlcyBhIHZlcnNpb24gb2YgdGhl
IHN0cmluZyB5b3UgY2FuIHVzZSBvbiB0aGUgY3VycmVudAorICAgIC8vIHRocmVhZCwgYnV0IHdl
IG5lZWQgYSBzdHJpbmcgd2UgY2FuIGtlZXAgaW4gYSBjcm9zcy10aHJlYWQgZGF0YSBzdHJ1Y3R1
cmUuCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBxdWl0ZS1hd2t3YXJkIHJlc3RyaWN0aW9uIHRv
IGhhdmUgdG8gcHJvZ3JhbSB3aXRoLgorCisgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5
IHN0cmluZyAoc2VlIGNvbW1lbnQgYWJvdmUpLgorICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5zZXQo
Z3VpZCwgbmV3VmVyc2lvbi5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IG5ld1ZlcnNpb24udGhyZWFk
c2FmZUNvcHkoKSk7Cit9CisKK3R5cGVkZWYgSGFzaE1hcDxpbnQsIEhhc2hTZXQ8QWJzdHJhY3RE
YXRhYmFzZSo+Kj4gR3VpZERhdGFiYXNlTWFwOworc3RhdGljIEd1aWREYXRhYmFzZU1hcCYgZ3Vp
ZFRvRGF0YWJhc2VNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoR3VpZERhdGFiYXNl
TWFwLCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgaW50IGd1aWRGb3JP
cmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgU3RyaW5nIHN0cmluZ0lEOworICAgIGlmIChvcmlnaW4uZW5kc1dpdGgoIi8iKSkKKyAg
ICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyBuYW1lOworICAgIGVsc2UKKyAgICAgICAgc3RyaW5n
SUQgPSBvcmlnaW4gKyAiLyIgKyBuYW1lOworCisgICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0
byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljIGhlcmUgYmVjYXVzZQorICAgIC8vIHRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgaW4gdGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBtYWlu
IHRocmVhZAorICAgIC8vIGJlZm9yZSBhbnkgb3RoZXIgdGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBm
dW5jdGlvbiBhcmUgdXNlZC4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBzdHJpbmdJ
ZGVudGlmaWVyTXV0ZXgsICgpKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIoc3RyaW5nSWRlbnRp
Zmllck11dGV4KTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IElER3VpZE1hcDsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKElER3VpZE1hcCwgc3RyaW5nSWRlbnRpZmllclRvR1VJ
RE1hcCwgKCkpOworICAgIGludCBndWlkID0gc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcC5nZXQo
c3RyaW5nSUQpOworICAgIGlmICghZ3VpZCkgeworICAgICAgICBzdGF0aWMgaW50IGN1cnJlbnRO
ZXdHVUlEID0gMTsKKyAgICAgICAgZ3VpZCA9IGN1cnJlbnROZXdHVUlEKys7CisgICAgICAgIHN0
cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuc2V0KHN0cmluZ0lELCBndWlkKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZ3VpZDsKK30KKwogc3RhdGljIGJvb2wgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IHRy
dWU7CiAKIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKQpAQCAtNDUsMTAgKzE2
OSwzMDUgQEAgdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZShibwogICAgIGlz
RGF0YWJhc2VBdmFpbGFibGUgPSBhdmFpbGFibGU7CiB9CiAKKy8vIHN0YXRpYworY29uc3QgU3Ry
aW5nJiBBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBuYW1lLCAoIl9fV2ViS2l0RGF0YWJhc2VJbmZvVGFi
bGVfXyIpKTsKKyAgICByZXR1cm4gbmFtZTsKK30KKworQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJh
Y3REYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxs
YmFjaykKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICwgbV9u
YW1lKG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fZXhwZWN0ZWRWZXJzaW9uKGV4
cGVjdGVkVmVyc2lvbi5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICwgbV9kaXNwbGF5TmFtZShk
aXNwbGF5TmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICwgbV9lc3RpbWF0ZWRTaXplKGVz
dGltYXRlZFNpemUpCisgICAgLCBtX2NyZWF0aW9uQ2FsbGJhY2soY3JlYXRpb25DYWxsYmFjaykK
KyAgICAsIG1fZ3VpZCgwKQorICAgICwgbV9vcGVuZWQoZmFsc2UpCisgICAgLCBtX25ldyhmYWxz
ZSkKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1fY29u
dGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1
cml0eU9yaWdpbigpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXIgPSBEYXRhYmFzZUF1dGhv
cml6ZXI6OmNyZWF0ZShkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSk7CisKKyAgICBpZiAobV9uYW1l
LmlzTnVsbCgpKQorICAgICAgICBtX25hbWUgPSAiIjsKKworICAgIG1fZ3VpZCA9IGd1aWRGb3JP
cmlnaW5BbmROYW1lKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5hbWUpOworICAgIHsK
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKworICAgICAgICBIYXNo
U2V0PEFic3RyYWN0RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0
KG1fZ3VpZCk7CisgICAgICAgIGlmICghaGFzaFNldCkgeworICAgICAgICAgICAgaGFzaFNldCA9
IG5ldyBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPjsKKyAgICAgICAgICAgIGd1aWRUb0RhdGFi
YXNlTWFwKCkuc2V0KG1fZ3VpZCwgaGFzaFNldCk7CisgICAgICAgIH0KKworICAgICAgICBoYXNo
U2V0LT5hZGQodGhpcyk7CisgICAgfQorCisKKyAgICBtX2ZpbGVuYW1lID0gRGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkuZnVsbFBhdGhGb3JEYXRhYmFzZShzZWN1cml0eU9yaWdpbigpLCBtX25h
bWUpOworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmFkZE9wZW5EYXRhYmFzZSh0aGlz
KTsKK30KKwogQWJzdHJhY3REYXRhYmFzZTo6fkFic3RyYWN0RGF0YWJhc2UoKQogewogfQogCit2
b2lkIEFic3RyYWN0RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UoKQoreworICAgIGlmICghbV9vcGVu
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAg
ICBtX29wZW5lZCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1
aWRNdXRleCgpKTsKKworICAgICAgICBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPiogaGFzaFNl
dCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7CisgICAgICAgIEFTU0VSVChoYXNo
U2V0KTsKKyAgICAgICAgQVNTRVJUKGhhc2hTZXQtPmNvbnRhaW5zKHRoaXMpKTsKKyAgICAgICAg
aGFzaFNldC0+cmVtb3ZlKHRoaXMpOworICAgICAgICBpZiAoaGFzaFNldC0+aXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnJlbW92ZShtX2d1aWQpOworICAgICAg
ICAgICAgZGVsZXRlIGhhc2hTZXQ7CisgICAgICAgICAgICBndWlkVG9WZXJzaW9uTWFwKCkucmVt
b3ZlKG1fZ3VpZCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1N0cmluZyBBYnN0cmFjdERhdGFi
YXNlOjp2ZXJzaW9uKCkgY29uc3QKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4
KCkpOworICAgIHJldHVybiBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCkudGhyZWFkc2Fm
ZUNvcHkoKTsKK30KKworc3RhdGljIGNvbnN0IGludCBtYXhTcWxpdGVCdXN5V2FpdFRpbWUgPSAz
MDAwMDsKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxlbmFt
ZSwgdHJ1ZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3BlbiBkYXRhYmFzZSBh
dCBwYXRoICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGVjID0gSU5W
QUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFt
X3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQorICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVudGFsIGF1dG8tdmFjdXVtIGZvciBk
YXRhYmFzZSAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCkpOworCisgICAgQVNTRVJUKG1f
ZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIo
bV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVv
dXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKKworICAgIFN0cmluZyBjdXJyZW50VmVyc2lvbjsK
KyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisKKyAgICAg
ICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZp
bmQobV9ndWlkKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQo
KSkgeworICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2Vl
IHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgorICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBl
bnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQ7CisgICAg
ICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQg
JWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiTm8gY2FjaGVkIHZlcnNp
b24gZm9yIGd1aWQgJWkiLCBtX2d1aWQpOworCisgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0
YWJhc2UudGFibGVFeGlzdHMoZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKSB7CisgICAgICAgICAg
ICAgICAgbV9uZXcgPSB0cnVlOworCisgICAgICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgIiArIGRhdGFiYXNlSW5mb1RhYmxlTmFt
ZSgpICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09O
RkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7
CisgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSB0YWJsZSAl
cyBpbiBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpLmFzY2lpKCkuZGF0YSgp
LCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2Ug
dGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgbV9z
cWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdl
dFZlcnNpb25Gcm9tRGF0YWJhc2UoY3VycmVudFZlcnNpb24pKSB7CisgICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVz
IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFu
ZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgorICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJh
c2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoY3VycmVudFZlcnNpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIlJldHJpZXZlZCBjdXJyZW50IHZlcnNpb24gJXMgZnJvbSBk
YXRhYmFzZSAlcyIsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVn
TmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fbmV3IHx8
ICFtX2NyZWF0aW9uQ2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwg
IlNldHRpbmcgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQi
LCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRhYmFz
ZShtX2V4cGVjdGVkVmVyc2lvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMiLCBtX2V4cGVjdGVkVmVyc2lv
bi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgICAgICAg
ICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgICAg
ICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJy
ZW50VmVyc2lvbiA9IG1fZXhwZWN0ZWRWZXJzaW9uOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIGN1cnJlbnRWZXJzaW9uKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChjdXJyZW50VmVyc2lvbi5pc051bGwoKSkgeworICAgICAg
ICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGRvZXMgbm90IGhhdmUgaXRzIHZlcnNpb24g
c2V0IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGN1cnJl
bnRWZXJzaW9uID0gIiI7CisgICAgfQorCisgICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24g
aXNuJ3QgdGhlIGVtcHR5IHN0cmluZywgZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGF0YWJhc2Ug
dmVyc2lvbiB3ZSBoYXZlIG1hdGNoZXMgdGhhdCB2ZXJzaW9uLiBPdGhlcndpc2UsIHNldCBhbiBl
eGNlcHRpb24uCisgICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXMgdGhlIGVtcHR5IHN0
cmluZywgdGhlbiB3ZSBhbHdheXMgcmV0dXJuIHdpdGggd2hhdGV2ZXIgdmVyc2lvbiBvZiB0aGUg
ZGF0YWJhc2Ugd2UgaGF2ZS4KKyAgICBpZiAoKCFtX25ldyB8fCAhbV9jcmVhdGlvbkNhbGxiYWNr
KSAmJiBtX2V4cGVjdGVkVmVyc2lvbi5sZW5ndGgoKSAmJiBtX2V4cGVjdGVkVmVyc2lvbiAhPSBj
dXJyZW50VmVyc2lvbikgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgInBhZ2UgZXhwZWN0cyB2
ZXJzaW9uICVzIGZyb20gZGF0YWJhc2UgJXMsIHdoaWNoIGFjdHVhbGx5IGhhcyB2ZXJzaW9uIG5h
bWUgJXMgLSBvcGVuRGF0YWJhc2UoKSBjYWxsIHdpbGwgZmFpbCIsIG1fZXhwZWN0ZWRWZXJzaW9u
LmFzY2lpKCkuZGF0YSgpLAorICAgICAgICAgICAgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgp
LmRhdGEoKSwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBlYyA9IElO
VkFMSURfU1RBVEVfRVJSOworICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRh
YmFzZSBmaWxlLgorICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX29wZW5lZCA9IHRydWU7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogQWJzdHJhY3REYXRhYmFzZTo6c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LmdldCgpOworfQorCitTZWN1cml0eU9yaWdpbiogQWJzdHJhY3REYXRhYmFzZTo6
c2VjdXJpdHlPcmlnaW4oKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1
cml0eU9yaWdpbi5nZXQoKTsKK30KKworU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OnN0cmluZ0lk
ZW50aWZpZXIoKSBjb25zdAoreworICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNv
dW50aW5nIHRocmVhZCBzYWZldHkKKyAgICByZXR1cm4gbV9uYW1lLnRocmVhZHNhZmVDb3B5KCk7
Cit9CisKK1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjpkaXNwbGF5TmFtZSgpIGNvbnN0Cit7Cisg
ICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQor
ICAgIHJldHVybiBtX2Rpc3BsYXlOYW1lLnRocmVhZHNhZmVDb3B5KCk7Cit9CisKK3Vuc2lnbmVk
IGxvbmcgQWJzdHJhY3REYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZXN0aW1hdGVkU2l6ZTsKK30KKworU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OmZpbGVO
YW1lKCkgY29uc3QKK3sKKyAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGlu
ZyB0aHJlYWQgc2FmZXR5CisgICAgcmV0dXJuIG1fZmlsZW5hbWUudGhyZWFkc2FmZUNvcHkoKTsK
K30KKworLy8gc3RhdGljCitjb25zdCBTdHJpbmcmIEFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNl
VmVyc2lvbktleSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGtleSwgKCJX
ZWJLaXREYXRhYmFzZVZlcnNpb25LZXkiKSk7CisgICAgcmV0dXJuIGtleTsKK30KKworYm9vbCBB
YnN0cmFjdERhdGFiYXNlOjpnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbikK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgZ2V0VmVyc2lvblF1ZXJ5LCAoIlNF
TEVDVCB2YWx1ZSBGUk9NICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgV0hFUkUga2V5
ID0gJyIgKyBkYXRhYmFzZVZlcnNpb25LZXkoKSArICInOyIpKTsKKworICAgIG1fZGF0YWJhc2VB
dXRob3JpemVyLT5kaXNhYmxlKCk7CisKKyAgICBib29sIHJlc3VsdCA9IHJldHJpZXZlVGV4dFJl
c3VsdEZyb21EYXRhYmFzZShtX3NxbGl0ZURhdGFiYXNlLCBnZXRWZXJzaW9uUXVlcnkudGhyZWFk
c2FmZUNvcHkoKSwgdmVyc2lvbik7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHJldHJpZXZlIHZlcnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFiYXNl
RGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXIt
PmVuYWJsZSgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBBYnN0cmFjdERhdGFi
YXNlOjpzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAg
Ly8gVGhlIElOU0VSVCB3aWxsIHJlcGxhY2UgYW4gZXhpc3RpbmcgZW50cnkgZm9yIHRoZSBkYXRh
YmFzZSB3aXRoIHRoZSBuZXcgdmVyc2lvbiBudW1iZXIsIGR1ZSB0byB0aGUgVU5JUVVFIE9OIENP
TkZMSUNUIFJFUExBQ0UKKyAgICAvLyBjbGF1c2UgaW4gdGhlIENSRUFURSBzdGF0ZW1lbnQgKHNl
ZSBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoKSkuCisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIHNldFZlcnNpb25RdWVyeSwgKCJJTlNFUlQgSU5UTyAiICsgZGF0YWJhc2VJ
bmZvVGFibGVOYW1lKCkgKyAiIChrZXksIHZhbHVlKSBWQUxVRVMgKCciICsgZGF0YWJhc2VWZXJz
aW9uS2V5KCkgKyAiJywgPyk7IikpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2Fi
bGUoKTsKKworICAgIGJvb2wgcmVzdWx0ID0gc2V0VGV4dFZhbHVlSW5EYXRhYmFzZShtX3NxbGl0
ZURhdGFiYXNlLCBzZXRWZXJzaW9uUXVlcnkudGhyZWFkc2FmZUNvcHkoKSwgdmVyc2lvbik7Cisg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCB2ZXJzaW9u
ICVzIGluIGRhdGFiYXNlICglcykiLCB2ZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBzZXRWZXJzaW9u
UXVlcnkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJs
ZSgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjp2
ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZXhwZWN0ZWRWZXJz
aW9uLmlzRW1wdHkoKSkgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkp
OworICAgICAgICByZXR1cm4gbV9leHBlY3RlZFZlcnNpb24gPT0gZ3VpZFRvVmVyc2lvbk1hcCgp
LmdldChtX2d1aWQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFic3Ry
YWN0RGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7
CisgICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLnRocmVhZHNhZmVDb3B5KCk7CisgICAg
Ly8gVXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAuCisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKyAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1
aWQsIHZlcnNpb24pOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmRpc2FibGVBdXRob3Jp
emVyKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJh
c2VBdXRob3JpemVyLT5kaXNhYmxlKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6ZW5h
YmxlQXV0aG9yaXplcigpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAg
ICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRh
YmFzZTo6c2V0QXV0aG9yaXplclJlYWRPbmx5KCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1
dGhvcml6ZXIpOworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5zZXRSZWFkT25seSgpOworfQor
Citib29sIEFic3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKQorewor
ICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgcmV0dXJuIG1fZGF0YWJhc2VB
dXRob3JpemVyLT5sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCk7Cit9CisKK2Jvb2wgQWJzdHJh
Y3REYXRhYmFzZTo6bGFzdEFjdGlvbldhc0luc2VydCgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJh
c2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rp
b25XYXNJbnNlcnQoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXNldERlbGV0ZXMo
KQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFzZUF1
dGhvcml6ZXItPnJlc2V0RGVsZXRlcygpOworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6Omhh
ZERlbGV0ZXMoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgcmV0
dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5oYWREZWxldGVzKCk7Cit9CisKK3ZvaWQgQWJzdHJh
Y3REYXRhYmFzZTo6cmVzZXRBdXRob3JpemVyKCkKK3sKKyAgICBpZiAobV9kYXRhYmFzZUF1dGhv
cml6ZXIpCisgICAgICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5yZXNldCgpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJKHJldmlzaW9uIDYxNTk0KQorKysgV2ViQ29yZS9z
dG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDIy
IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KKyNpZm5kZWYgTkRFQlVHCisjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIERhdGFiYXNlQXV0aG9yaXplcjsKK2NsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CiBjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiAKK3R5cGVkZWYg
aW50IEV4Y2VwdGlvbkNvZGU7CisKIGNsYXNzIEFic3RyYWN0RGF0YWJhc2UgOiBwdWJsaWMgVGhy
ZWFkU2FmZVNoYXJlZDxBYnN0cmFjdERhdGFiYXNlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJv
b2wgaXNBdmFpbGFibGUoKTsKQEAgLTQ2LDE1ICs1NSw3MCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIH5BYnN0cmFjdERhdGFiYXNlKCk7CiAKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBT
ZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBT
dHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBk
aXNwbGF5TmFtZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CisKKyAgICBib29sIG9w
ZW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbmVkOyB9CisgICAgYm9vbCBpc05ldygpIGNvbnN0
IHsgcmV0dXJuIG1fbmV3OyB9CisKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0lk
ZW50aWZpZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3Q7CisgICAg
dmlydHVhbCBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwZXJm
b3JtT3BlbkFuZFZlcmlmeShFeGNlcHRpb25Db2RlJiBlYyk7CisKKyAgICAvLyBGSVhNRTogbW92
ZSBhbGwgdmVyc2lvbi1yZWxhdGVkIG1ldGhvZHMgdG8gYSBEYXRhYmFzZVZlcnNpb25UcmFja2Vy
IGNsYXNzCisgICAgYm9vbCB2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICBib29sIGdl
dFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICBib29sIHNldFZlcnNp
b25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisKKyAgICB2b2lkIGRpc2FibGVB
dXRob3JpemVyKCk7CisgICAgdm9pZCBlbmFibGVBdXRob3JpemVyKCk7CisgICAgdm9pZCBzZXRB
dXRob3JpemVyUmVhZE9ubHkoKTsKKyAgICBib29sIGxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2Uo
KTsKKyAgICBib29sIGxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKKyAgICB2b2lkIHJlc2V0RGVsZXRl
cygpOworICAgIGJvb2wgaGFkRGVsZXRlcygpOworICAgIHZvaWQgcmVzZXRBdXRob3JpemVyKCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBjbG9zZUltbWVkaWF0ZWx5KCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgQWJz
dHJhY3REYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgIFBh
c3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4pOworCisgICAgdm9pZCBjbG9zZURhdGFiYXNlKCk7
CisKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKTsKKwor
ICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9y
aWdpbjsKKworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fZXhwZWN0ZWRWZXJzaW9u
OworICAgIFN0cmluZyBtX2Rpc3BsYXlOYW1lOworICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0
ZWRTaXplOworICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBtX2NyZWF0aW9uQ2FsbGJhY2s7
CisgICAgU3RyaW5nIG1fZmlsZW5hbWU7CisKKyAgICBTUUxpdGVEYXRhYmFzZSBtX3NxbGl0ZURh
dGFiYXNlOworCisjaWZuZGVmIE5ERUJVRworICAgIFN0cmluZyBkYXRhYmFzZURlYnVnTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygp
ICsgIjo6IiArIG1fbmFtZTsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VWZXJzaW9uS2V5KCk7CisKKyAgICBpbnQgbV9ndWlkOworICAgIGJv
b2wgbV9vcGVuZWQ7CisgICAgYm9vbCBtX25ldzsKKworICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhv
cml6ZXI+IG1fZGF0YWJhc2VBdXRob3JpemVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2MTU5NCkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2lm
IEVOQUJMRShEQVRBQkFTRSkKICNpbmNsdWRlICJDaGFuZ2VWZXJzaW9uV3JhcHBlci5oIgotI2lu
Y2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXplci5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2su
aCIKICNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5o
IgpAQCAtNTAsNyArNDksNiBAQAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKLSNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgiCiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC02
NCw2MiArNjIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIElmIHdlIHNsZWVwIGZv
ciBtb3JlIHRoZSAzMCBzZWNvbmRzIHdoaWxlIGJsb2NrZWQgb24gU1FMSVRFX0JVU1ksIGdpdmUg
dXAuCi1zdGF0aWMgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMwMDAwOwotCi1j
b25zdCBTdHJpbmcmIERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKQotewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBuYW1lLCAoIl9fV2ViS2l0RGF0YWJhc2VJbmZvVGFi
bGVfXyIpKTsKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RhdGljIE11dGV4JiBndWlkTXV0ZXgo
KQotewotICAgIC8vIE5vdGU6IFdlIGRvbid0IGhhdmUgdG8gdXNlIEF0b21pY2FsbHlJbml0aWFs
aXplZFN0YXRpYyBoZXJlIGJlY2F1c2UKLSAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBv
bmNlIGluIHRoZSBjb25zdHJ1Y3RvciBvbiB0aGUgbWFpbiB0aHJlYWQKLSAgICAvLyBiZWZvcmUg
YW55IG90aGVyIHRocmVhZHMgdGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQuCi0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwgbXV0ZXgsICgpKTsKLSAgICByZXR1cm4gbXV0ZXg7
Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxpbnQsIFN0cmluZz4gR3VpZFZlcnNpb25NYXA7Ci1zdGF0
aWMgR3VpZFZlcnNpb25NYXAmIGd1aWRUb1ZlcnNpb25NYXAoKQotewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoR3VpZFZlcnNpb25NYXAsIG1hcCwgKCkpOwotICAgIHJldHVybiBtYXA7Ci19Ci0K
LS8vIE5PVEU6IENhbGxlciBtdXN0IGxvY2sgZ3VpZE11dGV4KCkuCi1zdGF0aWMgaW5saW5lIHZv
aWQgdXBkYXRlR3VpZFZlcnNpb25NYXAoaW50IGd1aWQsIFN0cmluZyBuZXdWZXJzaW9uKQotewot
ICAgIC8vIEVuc3VyZSB0aGUgdGhlIG11dGV4IGlzIGxvY2tlZC4KLSAgICBBU1NFUlQoIWd1aWRN
dXRleCgpLnRyeUxvY2soKSk7Ci0KLSAgICAvLyBOb3RlOiBJdCBpcyBub3Qgc2FmZSB0byBwdXQg
YW4gZW1wdHkgc3RyaW5nIGludG8gdGhlIGd1aWRUb1ZlcnNpb25NYXAoKSBtYXAuCi0gICAgLy8g
VGhhdCdzIGJlY2F1c2UgdGhlIG1hcCBpcyBjcm9zcy10aHJlYWQsIGJ1dCBlbXB0eSBzdHJpbmdz
IGFyZSBwZXItdGhyZWFkLgotICAgIC8vIFRoZSBjb3B5KCkgZnVuY3Rpb24gbWFrZXMgYSB2ZXJz
aW9uIG9mIHRoZSBzdHJpbmcgeW91IGNhbiB1c2Ugb24gdGhlIGN1cnJlbnQKLSAgICAvLyB0aHJl
YWQsIGJ1dCB3ZSBuZWVkIGEgc3RyaW5nIHdlIGNhbiBrZWVwIGluIGEgY3Jvc3MtdGhyZWFkIGRh
dGEgc3RydWN0dXJlLgotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgcXVpdGUtYXdrd2FyZCByZXN0
cmljdGlvbiB0byBoYXZlIHRvIHByb2dyYW0gd2l0aC4KLQotICAgIC8vIE1hcCBudWxsIHN0cmlu
ZyB0byBlbXB0eSBzdHJpbmcgKHNlZSBjb21tZW50IGFib3ZlKS4KLSAgICBndWlkVG9WZXJzaW9u
TWFwKCkuc2V0KGd1aWQsIG5ld1ZlcnNpb24uaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBuZXdWZXJz
aW9uLnRocmVhZHNhZmVDb3B5KCkpOwotfQotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBIYXNoU2V0
PERhdGFiYXNlKj4qPiBHdWlkRGF0YWJhc2VNYXA7Ci1zdGF0aWMgR3VpZERhdGFiYXNlTWFwJiBn
dWlkVG9EYXRhYmFzZU1hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkRGF0YWJh
c2VNYXAsIG1hcCwgKCkpOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlVmVyc2lvbktleSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIGtleSwgKCJXZWJLaXREYXRhYmFzZVZlcnNpb25LZXkiKSk7Ci0gICAgcmV0dXJuIGtleTsK
LX0KLQotc3RhdGljIGludCBndWlkRm9yT3JpZ2luQW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdp
biwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLQogY2xhc3MgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNr
VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrPiBjcmVhdGUo
UGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UpCkBAIC0xODYsNDYgKzEyOCwxOCBAQCBQYXNz
UmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZTo6b3BlbkRhdGFiCiB9CiAKIERhdGFiYXNlOjpEYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFj
az4gY3JlYXRpb25DYWxsYmFjaykKLSAgICA6IG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZhbHNl
KQorICAgIDogQWJzdHJhY3REYXRhYmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24s
IGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrKQorICAgICwgbV90
cmFuc2FjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpCiAgICAgLCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVu
YWJsZWQodHJ1ZSkKLSAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQotICAg
ICwgbV9uYW1lKG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZ3VpZCgwKQotICAg
ICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmNyb3NzVGhyZWFkU3RyaW5nKCkp
Ci0gICAgLCBtX2Rpc3BsYXlOYW1lKGRpc3BsYXlOYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0g
ICAgLCBtX2VzdGltYXRlZFNpemUoZXN0aW1hdGVkU2l6ZSkKICAgICAsIG1fZGVsZXRlZChmYWxz
ZSkKICAgICAsIG1fc3RvcHBlZChmYWxzZSkKLSAgICAsIG1fb3BlbmVkKGZhbHNlKQotICAgICwg
bV9uZXcoZmFsc2UpCi0gICAgLCBtX2NyZWF0aW9uQ2FsbGJhY2soY3JlYXRpb25DYWxsYmFjaykK
IHsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpKTsKLSAgICBtX2Nv
bnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2Vj
dXJpdHlPcmlnaW4oKTsKICAgICBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX2Nv
bnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dGhyZWFkc2FmZUNvcHkoKTsKLSAgICBpZiAobV9u
YW1lLmlzTnVsbCgpKQotICAgICAgICBtX25hbWUgPSAiIjsKIAogICAgIFNjcmlwdENvbnRyb2xs
ZXI6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKIAotICAgIG1fZ3VpZCA9IGd1aWRGb3JPcmlnaW5B
bmROYW1lKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5hbWUpOwotCi0gICAgewotICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotCi0gICAgICAgIEhhc2hTZXQ8
RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7Ci0g
ICAgICAgIGlmICghaGFzaFNldCkgewotICAgICAgICAgICAgaGFzaFNldCA9IG5ldyBIYXNoU2V0
PERhdGFiYXNlKj47Ci0gICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnNldChtX2d1aWQs
IGhhc2hTZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaGFzaFNldC0+YWRkKHRoaXMpOwotICAg
IH0KLQogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFk
KCkpOwotICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5mdWxsUGF0
aEZvckRhdGFiYXNlKHNlY3VyaXR5T3JpZ2luKCksIG1fbmFtZSk7CiAKLSAgICBEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5hZGRPcGVuRGF0YWJhc2UodGhpcyk7CiAgICAgY29udGV4dC0+YWRk
T3BlbkRhdGFiYXNlKHRoaXMpOwogfQogCkBAIC0yNTMsMTEgKzE2NywxNyBAQCBEYXRhYmFzZTo6
fkRhdGFiYXNlKCkKICAgICB9CiB9CiAKK1N0cmluZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0
Cit7CisgICAgaWYgKG1fZGVsZXRlZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJl
dHVybiBBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9uKCk7Cit9CisKIGJvb2wgRGF0YWJhc2U6Om9w
ZW5BbmRWZXJpZnlWZXJzaW9uKEV4Y2VwdGlvbkNvZGUmIGUpCiB7CiAgICAgaWYgKCFtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplciA9IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRl
KCk7CiAKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICBEYXRhYmFzZVRhc2tTeW5jaHJv
bml6ZXIgc3luY2hyb25pemVyOwpAQCAtMjY5LDkzICsxODksNiBAQCBib29sIERhdGFiYXNlOjpv
cGVuQW5kVmVyaWZ5VmVyc2lvbihFeGNlCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLQotc3Rh
dGljIGJvb2wgcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBk
YiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgU3RyaW5nJiByZXN1bHRTdHJpbmcpCi17Ci0gICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0
ZW1lbnQucHJlcGFyZSgpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAg
ICAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRl
eHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRh
KCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gc3RhdGVt
ZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgewotICAgICAgICBy
ZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAg
ICByZXN1bHRTdHJpbmcgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHJlYWRpbmcgdGV4dCByZXN1bHQg
ZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgRGF0YWJhc2U6OmdldFZlcnNpb25G
cm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBnZXRWZXJzaW9uUXVlcnksICgiU0VMRUNUIHZhbHVlIEZST00gIiArIGRhdGFiYXNl
SW5mb1RhYmxlTmFtZSgpICsgIiBXSEVSRSBrZXkgPSAnIiArIGRhdGFiYXNlVmVyc2lvbktleSgp
ICsgIic7IikpOwotCi0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKLQotICAg
IGJvb2wgcmVzdWx0ID0gcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1fc3FsaXRlRGF0
YWJhc2UsIGdldFZlcnNpb25RdWVyeS50aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgdmVyc2lv
biBmcm9tIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7
Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1zdGF0aWMgYm9vbCBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFi
YXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7Ci0gICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7
Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2
YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsK
LQotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxS
ZXN1bHREb25lKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHN0ZXAgc3RhdGVtZW50
IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgRGF0YWJhc2U6OnNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikK
LXsKLSAgICAvLyBUaGUgSU5TRVJUIHdpbGwgcmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeSBmb3Ig
dGhlIGRhdGFiYXNlIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG51bWJlciwgZHVlIHRvIHRoZSBVTklR
VUUgT04gQ09ORkxJQ1QgUkVQTEFDRQotICAgIC8vIGNsYXVzZSBpbiB0aGUgQ1JFQVRFIHN0YXRl
bWVudCAoc2VlIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSgpKS4KLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgc2V0VmVyc2lvblF1ZXJ5LCAoIklOU0VSVCBJTlRPICIgKyBk
YXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgKGtleSwgdmFsdWUpIFZBTFVFUyAoJyIgKyBkYXRh
YmFzZVZlcnNpb25LZXkoKSArICInLCA/KTsiKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXpl
ci0+ZGlzYWJsZSgpOwotCi0gICAgYm9vbCByZXN1bHQgPSBzZXRUZXh0VmFsdWVJbkRhdGFiYXNl
KG1fc3FsaXRlRGF0YWJhc2UsIHNldFZlcnNpb25RdWVyeS50aHJlYWRzYWZlQ29weSgpLCB2ZXJz
aW9uKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0
IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgKCVzKSIsIHZlcnNpb24uYXNjaWkoKS5kYXRhKCksIHNl
dFZlcnNpb25RdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXpl
ci0+ZW5hYmxlKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIERhdGFiYXNlOjp2
ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZXhwZWN0ZWRWZXJz
aW9uLmlzRW1wdHkoKSkgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkp
OwotICAgICAgICByZXR1cm4gbV9leHBlY3RlZFZlcnNpb24gPT0gZ3VpZFRvVmVyc2lvbk1hcCgp
LmdldChtX2d1aWQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIERhdGFi
YXNlOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKQogewogICAgIGlmIChtX2RlbGV0ZWQgfHwgIW1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSkKQEAgLTQxMCwzMCArMjQz
LDEzIEBAIHZvaWQgRGF0YWJhc2U6OmNsb3NlKENsb3NlUG9saWN5IHBvbGljeSkKIHsKICAgICBS
ZWZQdHI8RGF0YWJhc2U+IHByb3RlY3QgPSB0aGlzOwogCi0gICAgaWYgKCFtX29wZW5lZCkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0
YWJhc2VUaHJlYWQoKSk7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwotICAgIG1f
c3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAvLyBNdXN0IHJlZigpIGJlZm9yZSBjYWxsaW5n
IGRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKCkuCi0gICAgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCh0
aGlzKTsKLSAgICBtX29wZW5lZCA9IGZhbHNlOwogCi0gICAgewotICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotCi0gICAgICAgIEhhc2hTZXQ8RGF0YWJhc2UqPiogaGFz
aFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7Ci0gICAgICAgIEFTU0VSVCho
YXNoU2V0KTsKLSAgICAgICAgQVNTRVJUKGhhc2hTZXQtPmNvbnRhaW5zKHRoaXMpKTsKLSAgICAg
ICAgaGFzaFNldC0+cmVtb3ZlKHRoaXMpOwotICAgICAgICBpZiAoaGFzaFNldC0+aXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnJlbW92ZShtX2d1aWQpOwotICAg
ICAgICAgICAgZGVsZXRlIGhhc2hTZXQ7Ci0gICAgICAgICAgICBndWlkVG9WZXJzaW9uTWFwKCku
cmVtb3ZlKG1fZ3VpZCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgY2xvc2VEYXRhYmFzZSgpOwog
CisgICAgLy8gTXVzdCByZWYoKSBiZWZvcmUgY2FsbGluZyBkYXRhYmFzZVRocmVhZCgpLT5yZWNv
cmREYXRhYmFzZUNsb3NlZCgpLgorICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJh
c2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQodGhpcyk7CiAgICAgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT51bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyh0
aGlzKTsKICAgICBpZiAocG9saWN5ID09IFJlbW92ZURhdGFiYXNlRnJvbUNvbnRleHQpCiAgICAg
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soQ29udGV4dFJlbW92ZU9wZW5E
YXRhYmFzZVRhc2s6OmNyZWF0ZSh0aGlzKSk7CkBAIC00NzAsNzkgKzI4Niw2IEBAIHVuc2lnbmVk
IGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11bVNpemUKICAgICByZXR1cm4gRGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkuZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKHRoaXMpOwogfQogCi12b2lkIERh
dGFiYXNlOjpkaXNhYmxlQXV0aG9yaXplcigpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRo
b3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwotfQotCi12b2lk
IERhdGFiYXNlOjplbmFibGVBdXRob3JpemVyKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1
dGhvcml6ZXIpOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKLX0KLQotdm9p
ZCBEYXRhYmFzZTo6c2V0QXV0aG9yaXplclJlYWRPbmx5KCkKLXsKLSAgICBBU1NFUlQobV9kYXRh
YmFzZUF1dGhvcml6ZXIpOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5zZXRSZWFkT25seSgp
OwotfQotCi1ib29sIERhdGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkKLXsKLSAg
ICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIHJldHVybiBtX2RhdGFiYXNlQXV0
aG9yaXplci0+bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwotfQotCi1ib29sIERhdGFiYXNl
OjpsYXN0QWN0aW9uV2FzSW5zZXJ0KCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6
ZXIpOwotICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbldhc0luc2Vy
dCgpOwotfQotCi12b2lkIERhdGFiYXNlOjpyZXNldERlbGV0ZXMoKQotewotICAgIEFTU0VSVCht
X2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0RGVs
ZXRlcygpOwotfQotCi1ib29sIERhdGFiYXNlOjpoYWREZWxldGVzKCkKLXsKLSAgICBBU1NFUlQo
bV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+
aGFkRGVsZXRlcygpOwotfQotCi1zdGF0aWMgaW50IGd1aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0
IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgU3RyaW5nIHN0cmlu
Z0lEOwotICAgIGlmIChvcmlnaW4uZW5kc1dpdGgoIi8iKSkKLSAgICAgICAgc3RyaW5nSUQgPSBv
cmlnaW4gKyBuYW1lOwotICAgIGVsc2UKLSAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyAiLyIg
KyBuYW1lOwotCi0gICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRvbWljYWxseUlu
aXRpYWxpemVkU3RhdGljIGhlcmUgYmVjYXVzZQotICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkIG9uY2UgaW4gdGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRocmVhZAotICAgIC8vIGJl
Zm9yZSBhbnkgb3RoZXIgdGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBhcmUgdXNlZC4K
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBzdHJpbmdJZGVudGlmaWVyTXV0ZXgsICgp
KTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIoc3RyaW5nSWRlbnRpZmllck11dGV4KTsKLSAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IElER3VpZE1hcDsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKElER3VpZE1hcCwgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcCwgKCkpOwotICAgIGlu
dCBndWlkID0gc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcC5nZXQoc3RyaW5nSUQpOwotICAgIGlm
ICghZ3VpZCkgewotICAgICAgICBzdGF0aWMgaW50IGN1cnJlbnROZXdHVUlEID0gMTsKLSAgICAg
ICAgZ3VpZCA9IGN1cnJlbnROZXdHVUlEKys7Ci0gICAgICAgIHN0cmluZ0lkZW50aWZpZXJUb0dV
SURNYXAuc2V0KHN0cmluZ0lELCBndWlkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ3VpZDsKLX0K
LQotdm9pZCBEYXRhYmFzZTo6cmVzZXRBdXRob3JpemVyKCkKLXsKLSAgICBpZiAobV9kYXRhYmFz
ZUF1dGhvcml6ZXIpCi0gICAgICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5yZXNldCgpOwotfQot
CiB2b2lkIERhdGFiYXNlOjpwZXJmb3JtUG9saWN5Q2hlY2tzKCkKIHsKICAgICAvLyBGSVhNRTog
Q29kZSBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgd2lsbCBuZWVkIHRvIGJlIHJ1biB0byBlbmZv
cmNlIHRoZSBwZXItb3JpZ2luIHNpemUgbGltaXQgdGhlIHNwZWMgbWFuZGF0ZXMuCkBAIC01NTks
OTAgKzMwMiwxNCBAQCB2b2lkIERhdGFiYXNlOjpwZXJmb3JtUG9saWN5Q2hlY2tzKCkKIAogYm9v
bCBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhjZXB0aW9uQ29kZSYgZSkKIHsKLSAg
ICBpZiAoIW1fc3FsaXRlRGF0YWJhc2Uub3BlbihtX2ZpbGVuYW1lLCB0cnVlKSkgewotICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIGRhdGFiYXNlIGF0IHBhdGggJXMiLCBtX2ZpbGVu
YW1lLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50dXJu
T25JbmNyZW1lbnRhbEF1dG9WYWN1dW0oKSkKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8g
dHVybiBvbiBpbmNyZW1lbnRhbCBhdXRvLXZhY3V1bSBmb3IgZGF0YWJhc2UgJXMiLCBtX2ZpbGVu
YW1lLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBpZiAoQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9w
ZW5BbmRWZXJpZnkoZSkpIHsKKyAgICAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
ZGF0YWJhc2VUaHJlYWQoKSkKKyAgICAgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VPcGVuKHRoaXMpOwogCi0gICAgQVNTRVJU
KG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEF1dGhvcml6
ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRp
bWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKLQotICAgIFN0cmluZyBjdXJyZW50VmVyc2lv
bjsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0KLSAg
ICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgp
LmZpbmQobV9ndWlkKTsKLSAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5l
bmQoKSkgewotICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAo
c2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgotICAgICAgICAgICAgY3VycmVudFZlcnNpb24g
PSBlbnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQ7Ci0g
ICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1
aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiTm8gY2FjaGVkIHZl
cnNpb24gZm9yIGd1aWQgJWkiLCBtX2d1aWQpOwotCi0gICAgICAgICAgICBpZiAoIW1fc3FsaXRl
RGF0YWJhc2UudGFibGVFeGlzdHMoZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKSB7Ci0gICAgICAg
ICAgICAgICAgbV9uZXcgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgIiArIGRhdGFiYXNlSW5mb1RhYmxl
TmFtZSgpICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04g
Q09ORkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSB0YWJs
ZSAlcyBpbiBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpLmFzY2lpKCkuZGF0
YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAgICAgICAvLyBDbG9z
ZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgICAgICAgICAgICAgICAgICBt
X3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh
Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShjdXJyZW50VmVyc2lvbikpIHsKLSAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgY3VycmVudCB2ZXJzaW9uIGZyb20gZGF0YWJhc2Ug
JXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAg
ICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGhh
bmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KLSAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFi
YXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGN1cnJlbnRWZXJzaW9uLmxlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICAgICAgTE9HKFN0b3JhZ2VBUEksICJSZXRyaWV2ZWQgY3VycmVudCB2ZXJzaW9uICVzIGZyb20g
ZGF0YWJhc2UgJXMiLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1
Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFtX25ldyB8
fCAhbV9jcmVhdGlvbkNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEks
ICJTZXR0aW5nIHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMgdGhhdCB3YXMganVzdCBjcmVhdGVk
IiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCku
YXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIGlmICghc2V0VmVyc2lvbkluRGF0YWJh
c2UobV9leHBlY3RlZFZlcnNpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICVzIiwgbV9leHBlY3RlZFZlcnNp
b24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCi0gICAgICAg
ICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjdXJy
ZW50VmVyc2lvbiA9IG1fZXhwZWN0ZWRWZXJzaW9uOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIGN1cnJlbnRWZXJzaW9uKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChjdXJyZW50VmVyc2lvbi5pc051bGwoKSkgewotICAgICAg
ICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGRvZXMgbm90IGhhdmUgaXRzIHZlcnNpb24g
c2V0IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGN1cnJl
bnRWZXJzaW9uID0gIiI7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24g
aXNuJ3QgdGhlIGVtcHR5IHN0cmluZywgZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGF0YWJhc2Ug
dmVyc2lvbiB3ZSBoYXZlIG1hdGNoZXMgdGhhdCB2ZXJzaW9uLiBPdGhlcndpc2UsIHNldCBhbiBl
eGNlcHRpb24uCi0gICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXMgdGhlIGVtcHR5IHN0
cmluZywgdGhlbiB3ZSBhbHdheXMgcmV0dXJuIHdpdGggd2hhdGV2ZXIgdmVyc2lvbiBvZiB0aGUg
ZGF0YWJhc2Ugd2UgaGF2ZS4KLSAgICBpZiAoKCFtX25ldyB8fCAhbV9jcmVhdGlvbkNhbGxiYWNr
KSAmJiBtX2V4cGVjdGVkVmVyc2lvbi5sZW5ndGgoKSAmJiBtX2V4cGVjdGVkVmVyc2lvbiAhPSBj
dXJyZW50VmVyc2lvbikgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgInBhZ2UgZXhwZWN0cyB2
ZXJzaW9uICVzIGZyb20gZGF0YWJhc2UgJXMsIHdoaWNoIGFjdHVhbGx5IGhhcyB2ZXJzaW9uIG5h
bWUgJXMgLSBvcGVuRGF0YWJhc2UoKSBjYWxsIHdpbGwgZmFpbCIsIG1fZXhwZWN0ZWRWZXJzaW9u
LmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAgICAgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgp
LmRhdGEoKSwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBlID0gSU5W
QUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFi
YXNlIGZpbGUuCi0gICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICAvLyBBbGwgY2hl
Y2tzIHBhc3NlZCBhbmQgd2Ugc3RpbGwgaGF2ZSBhIGhhbmRsZSB0byB0aGlzIGRhdGFiYXNlIGZp
bGUuCi0gICAgLy8gTWFrZSBzdXJlIERhdGFiYXNlVGhyZWFkIGNsb3NlcyBpdCB3aGVuIERhdGFi
YXNlVGhyZWFkIGdvZXMgYXdheS4KLSAgICBtX29wZW5lZCA9IHRydWU7Ci0gICAgaWYgKG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSkKLSAgICAgICAgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZU9wZW4odGhp
cyk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgRGF0
YWJhc2U6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJp
bmcmIG5ld1ZlcnNpb24sCkBAIC03NzIsMTQgKzQzOSw2IEBAIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IqIERhdGFiYXNlOjp0cmEKICAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7CiB9CiAKLVN0cmlu
ZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZGVsZXRlZCkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7
Ci0gICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS50aHJlYWRzYWZlQ29w
eSgpOwotfQotCiBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6dGFibGVOYW1lcygpCiB7CiAgICAg
Ly8gRklYTUU6IE5vdCB1c2luZyB0aHJlYWRzYWZlQ29weSBvbiB0aGVzZSBzdHJpbmdzIGxvb2tz
IG9rIHNpbmNlIHRocmVhZHMgdGFrZSBzdHJpY3QgdHVybnMKQEAgLTc5NywxNCArNDU2LDYgQEAg
VmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnRhYmxlTmFtZXMoKQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXZvaWQgRGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZl
cnNpb24pCi17Ci0gICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLnRocmVhZHNhZmVDb3B5
KCk7Ci0gICAgLy8gVXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAuCi0g
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLSAgICB1cGRhdGVHdWlkVmVyc2lv
bk1hcChtX2d1aWQsIHZlcnNpb24pOwotfQotCiBTZWN1cml0eU9yaWdpbiogRGF0YWJhc2U6OnNl
Y3VyaXR5T3JpZ2luKCkgY29uc3QKIHsKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0NvbnRleHRUaHJlYWQoKSkKQEAgLTgxNCwyOSArNDY1LDYgQEAgU2VjdXJpdHlPcmlnaW4q
IERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbgogICAgIHJldHVybiAwOwogfQogCi1TdHJpbmcgRGF0
YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIoKSBjb25zdAotewotICAgIC8vIFJldHVybiBhIGRlZXAg
Y29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkKLSAgICByZXR1cm4gbV9uYW1lLnRo
cmVhZHNhZmVDb3B5KCk7Ci19Ci0KLVN0cmluZyBEYXRhYmFzZTo6ZGlzcGxheU5hbWUoKSBjb25z
dAotewotICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBz
YWZldHkKLSAgICByZXR1cm4gbV9kaXNwbGF5TmFtZS50aHJlYWRzYWZlQ29weSgpOwotfQotCi11
bnNpZ25lZCBsb25nIERhdGFiYXNlOjplc3RpbWF0ZWRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9lc3RpbWF0ZWRTaXplOwotfQotCi1TdHJpbmcgRGF0YWJhc2U6OmZpbGVOYW1lKCkgY29u
c3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQg
c2FmZXR5Ci0gICAgcmV0dXJuIG1fZmlsZW5hbWUudGhyZWFkc2FmZUNvcHkoKTsKLX0KLQogdm9p
ZCBEYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpCiB7CiAgICAgaW50NjRfdCBm
cmVlU3BhY2VTaXplID0gbV9zcWxpdGVEYXRhYmFzZS5mcmVlU3BhY2VTaXplKCk7CkBAIC04NDUs
NiArNDczLDcgQEAgdm9pZCBEYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZAogICAg
ICAgICBtX3NxbGl0ZURhdGFiYXNlLnJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpOwogfQog
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9CisgLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCShyZXZpc2lvbiA2MTU5
NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywx
OCArMzMsMTMgQEAKICNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgotI2lmbmRlZiBOREVC
VUcKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2VuZGlmCiAKICNpbmNsdWRlIDx3dGYv
RGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIERhdGFiYXNlQXV0aG9yaXplcjsKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7Ci1j
bGFzcyBEYXRhYmFzZVRocmVhZDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFz
cyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwpAQCAtNTQsOCArNDksNiBA
QCBjbGFzcyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrOwogY2xhc3MgVm9pZENhbGxiYWNrOwogCi10eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOwotCiBjbGFzcyBEYXRhYmFzZSA6IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNlIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZSgpOwpAQCAtNjMsMzcgKzU2LDE3IEBAIHB1Ymxp
YzoKICAgICAvLyBEaXJlY3Qgc3VwcG9ydCBmb3IgdGhlIERPTSBBUEkKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhYmFzZT4gb3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNl
Q2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CiAgICAgdm9pZCBjaGFuZ2VWZXJz
aW9uKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LAogICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8Vm9p
ZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2spOwogICAgIHZvaWQgdHJhbnNhY3Rpb24oUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+LAogICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCByZWFkT25seSk7CiAKICAgICAvLyBJbnRlcm5hbCBl
bmdpbmUgc3VwcG9ydAotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxl
TmFtZSgpOwotCi0gICAgdm9pZCBkaXNhYmxlQXV0aG9yaXplcigpOwotICAgIHZvaWQgZW5hYmxl
QXV0aG9yaXplcigpOwotICAgIHZvaWQgc2V0QXV0aG9yaXplclJlYWRPbmx5KCk7Ci0gICAgYm9v
bCBsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCk7Ci0gICAgYm9vbCBsYXN0QWN0aW9uV2FzSW5z
ZXJ0KCk7Ci0gICAgdm9pZCByZXNldERlbGV0ZXMoKTsKLSAgICBib29sIGhhZERlbGV0ZXMoKTsK
LQogICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMoKTsKIAotICAgIHZpcnR1YWwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKTsgfQogICAgIHZpcnR1YWwgU2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CiAgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0
ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9zcWxpdGVEYXRhYmFzZTsgfQotICAgIHZpcnR1YWwgU3Ry
aW5nIHN0cmluZ0lkZW50aWZpZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5
TmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdDsKLQotICAgIGJvb2wg
Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmKTsKLSAgICBib29sIHNldFZlcnNpb25JbkRh
dGFiYXNlKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgc2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0
IFN0cmluZyYpOwotICAgIGJvb2wgdmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgpIGNvbnN0OwogCiAg
ICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOwogICAgIGJvb2wgZGVsZXRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQpAQCAtMTAxLDIxICs3NCwxNyBAQCBwdWJs
aWM6CiAgICAgZW51bSBDbG9zZVBvbGljeSB7IERvTm90UmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4
dCwgUmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCB9OwogICAgIHZvaWQgY2xvc2UoQ2xvc2VQb2xp
Y3kpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZUltbWVkaWF0ZWx5KCk7Ci0gICAgYm9vbCBvcGVu
ZWQoKSBjb25zdCB7IHJldHVybiBtX29wZW5lZDsgfQogCiAgICAgdm9pZCBzdG9wKCk7CiAgICAg
Ym9vbCBzdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wcGVkOyB9CiAKLSAgICBib29sIGlz
TmV3KCkgY29uc3QgeyByZXR1cm4gbV9uZXc7IH0KLQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBk
YXRhYmFzZVNpemUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUo
KSBjb25zdDsKIAogICAgIC8vIENhbGxlZCBmcm9tIERhdGFiYXNlVGhyZWFkLCBtdXN0IGJlIHBy
ZXBhcmVkIHRvIHdvcmsgb24gdGhlIGJhY2tncm91bmQgdGhyZWFkCi0gICAgdm9pZCByZXNldEF1
dGhvcml6ZXIoKTsKICAgICB2b2lkIHBlcmZvcm1Qb2xpY3lDaGVja3MoKTsKIAotICAgIGJvb2wg
cGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgYm9vbCBw
ZXJmb3JtT3BlbkFuZFZlcmlmeShFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIGluUHJvZ3Jl
c3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvbkNh
bGxiYWNrKFNRTFRyYW5zYWN0aW9uKik7CkBAIC0xMzcsMzkgKzEwNiwxNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CiAKKyAgICBzdGF0aWMgdm9pZCBkZWxp
dmVyUGVuZGluZ0NhbGxiYWNrKHZvaWQqKTsKKwogICAgIERlcXVlPFJlZlB0cjxTUUxUcmFuc2Fj
dGlvbj4gPiBtX3RyYW5zYWN0aW9uUXVldWU7CiAgICAgTXV0ZXggbV90cmFuc2FjdGlvbkluUHJv
Z3Jlc3NNdXRleDsKICAgICBib29sIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzOwogICAgIGJvb2wg
bV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkOwogCi0gICAgc3RhdGljIHZvaWQgZGVsaXZlclBl
bmRpbmdDYWxsYmFjayh2b2lkKik7Ci0KLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4g
bV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW47CiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW47Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAg
ICBpbnQgbV9ndWlkOwotICAgIFN0cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsKLSAgICBTdHJpbmcg
bV9kaXNwbGF5TmFtZTsKLSAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKLSAgICBT
dHJpbmcgbV9maWxlbmFtZTsKIAogICAgIGJvb2wgbV9kZWxldGVkOwotCiAgICAgYm9vbCBtX3N0
b3BwZWQ7Ci0KLSAgICBib29sIG1fb3BlbmVkOwotCi0gICAgYm9vbCBtX25ldzsKLQotICAgIFNR
TGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7Ci0gICAgUmVmUHRyPERhdGFiYXNlQXV0aG9y
aXplcj4gbV9kYXRhYmFzZUF1dGhvcml6ZXI7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFj
az4gbV9jcmVhdGlvbkNhbGxiYWNrOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBkYXRh
YmFzZURlYnVnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3Jp
Z2luLT50b1N0cmluZygpICsgIjo6IiArIG1fbmFtZTsgfQotI2VuZGlmCiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNw
cAkocmV2aXNpb24gNjE1OTQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTMgKzMwLDE5IEBACiAjaW5jbHVkZSAiRGF0YWJh
c2VBdXRob3JpemVyLmgiCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5jbHVkZSAiRGF0YWJh
c2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGF0YWJhc2VBdXRob3JpemVyOjpEYXRh
YmFzZUF1dGhvcml6ZXIoKQorUGFzc1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IERhdGFiYXNl
QXV0aG9yaXplcjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VBdXRob3JpemVyKGRhdGFiYXNlSW5m
b1RhYmxlTmFtZSkpOworfQorCitEYXRhYmFzZUF1dGhvcml6ZXI6OkRhdGFiYXNlQXV0aG9yaXpl
cihjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSkKICAgICA6IG1fc2VjdXJpdHlF
bmFibGVkKGZhbHNlKQorICAgICwgbV9kYXRhYmFzZUluZm9UYWJsZU5hbWUoZGF0YWJhc2VJbmZv
VGFibGVOYW1lKQogewogICAgIHJlc2V0KCk7CiAgICAgYWRkV2hpdGVsaXN0ZWRGdW5jdGlvbnMo
KTsKQEAgLTM4OCw3ICszOTQsNyBAQCB2b2lkIERhdGFiYXNlQXV0aG9yaXplcjo6c2V0UmVhZE9u
bHkoKQogICAgIG1fcmVhZE9ubHkgPSB0cnVlOwogfQogCi1pbnQgRGF0YWJhc2VBdXRob3JpemVy
OjpkZW55QmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK2ludCBEYXRh
YmFzZUF1dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKSBjb25zdAogewogICAgIGlmICghbV9zZWN1cml0eUVuYWJsZWQpCiAgICAgICAgIHJldHVy
biBTUUxBdXRoQWxsb3c7CkBAIC0zOTksNyArNDA1LDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXpl
cjo6ZGVueUJhc2VkT25UYWJsZQogICAgIC8vICAgIGVxdWFsSWdub3JpbmdDYXNlKHRhYmxlTmFt
ZSwgInNxbGl0ZV9zZXF1ZW5jZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHRhYmxlTmFtZSwgRGF0
YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkKICAgICAvLyAgICAgICAgcmV0dXJuIFNR
TEF1dGhEZW55OwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRhYmxlTmFtZSwgRGF0YWJh
c2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
dGFibGVOYW1lLCBtX2RhdGFiYXNlSW5mb1RhYmxlTmFtZSkpCiAgICAgICAgIHJldHVybiBTUUxB
dXRoRGVueTsKIAogICAgIHJldHVybiBTUUxBdXRoQWxsb3c7CkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VBdXRob3JpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlQXV0aG9yaXplci5oCShyZXZpc2lvbiA2MTU5NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZUF1dGhvcml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDExIEBACiAj
aWZuZGVmIERhdGFiYXNlQXV0aG9yaXplcl9oCiAjZGVmaW5lIERhdGFiYXNlQXV0aG9yaXplcl9o
CiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00Myw3ICs0NCw3IEBAIGV4dGVybiBjb25zdCBpbnQgU1FMQXV0aERlbnk7CiAKIGNsYXNzIERh
dGFiYXNlQXV0aG9yaXplciA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERhdGFiYXNlQXV0aG9y
aXplcj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlQXV0aG9yaXpl
cj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlQXV0aG9yaXplcik7IH0K
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSk7CiAKICAgICBpbnQgY3JlYXRlVGFibGUoY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUpOwogICAgIGludCBjcmVhdGVUZW1wVGFibGUoY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUpOwpAQCAtOTcsOSArOTgsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYWRE
ZWxldGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYWREZWxldGVzOyB9CiAKIHByaXZhdGU6Ci0gICAg
RGF0YWJhc2VBdXRob3JpemVyKCk7CisgICAgRGF0YWJhc2VBdXRob3JpemVyKGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKTsKICAgICB2b2lkIGFkZFdoaXRlbGlzdGVkRnVuY3Rp
b25zKCk7Ci0gICAgaW50IGRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYpOworICAg
IGludCBkZW55QmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICBpbnQg
dXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUoY29uc3QgU3RyaW5nJik7CiAKICAgICBib29s
IG1fc2VjdXJpdHlFbmFibGVkIDogMTsKQEAgLTEwOCw2ICsxMDksOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9yZWFkT25seSA6IDE7CiAgICAgYm9vbCBtX2hhZERlbGV0ZXMgOiAxOwogCisgICAg
Y29uc3QgU3RyaW5nIG1fZGF0YWJhc2VJbmZvVGFibGVOYW1lOworCiAgICAgSGFzaFNldDxTdHJp
bmcsIENhc2VGb2xkaW5nSGFzaD4gbV93aGl0ZWxpc3RlZEZ1bmN0aW9uczsKIH07CiAKSW5kZXg6
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZpc2lvbiA2MTU5NCkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0MSArMzEsNTAgQEAK
IAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNrLmgiCisj
aW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jb25zdCBTdHJpbmcmIERhdGFiYXNlU3luYzo6ZGF0YWJhc2VJbmZvVGFibGVO
YW1lKCkKK1Bhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZVN5bmM6Om9wZW5EYXRhYmFz
ZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBuYW1lLCAoIl9fV2ViS2l0RGF0YWJhc2VJbmZvVGFibGVfXyIp
KTsKLSAgICByZXR1cm4gbmFtZTsKLX0KKyAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpOwogCi1QYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJhc2VTeW5jOjpvcGVuRGF0
YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLCBQYXNzUmVmUHRyPERhdGFiYXNl
Q2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogdW5jb21tZW50
IHRoZSBhc3NlcnQgb25jZSB3ZSB1c2UgdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHBhcmFt
ZXRlcgotICAgIC8vQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAo
IURhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNhbkVzdGFibGlzaERhdGFiYXNlKGNvbnRleHQs
IG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSkgeworICAgICAgICBMT0coU3RvcmFn
ZUFQSSwgIkRhdGFiYXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93ZWQgdG8gYmUgZXN0YWJs
aXNoZWQiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50
b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2VT
eW5jKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2spKTsKKworICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRW
ZXJpZnkoZWMpKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRmFpbGVkIHRvIG9wZW4gYW5k
IHZlcmlmeSB2ZXJzaW9uIChleHBlY3RlZCAlcykgb2YgZGF0YWJhc2UgJXMiLCBleHBlY3RlZFZl
cnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlLT5kYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3Bl
bkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2VEZXRhaWxzKGNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKKwor
ICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAmJiBkYXRhYmFzZS0+bV9jcmVhdGlvbkNhbGxiYWNr
LmdldCgpKSB7CisgICAgICAgIGRhdGFiYXNlLT5tX2V4cGVjdGVkVmVyc2lvbiA9ICIiOworICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIkludm9raW5nIHRoZSBjcmVhdGlvbiBjYWxsYmFjayBmb3Ig
ZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKKyAgICAgICAgZGF0YWJhc2UtPnBlcmZv
cm1DcmVhdGlvbkNhbGxiYWNrKCk7CisgICAgfQogCi0gICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0g
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRhdGFiYXNlOwogfQogCiBEYXRhYmFzZVN5bmM6OkRh
dGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2spCi0g
ICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKLSAgICAsIG1fbmFtZShuYW1l
LmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX2V4cGVjdGVkVmVyc2lvbihleHBlY3RlZFZl
cnNpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZGlzcGxheU5hbWUoZGlzcGxheU5h
bWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRT
aXplKQotICAgICwgbV9jcmVhdGlvbkNhbGxiYWNrKGNyZWF0aW9uQ2FsbGJhY2spCisgICAgOiBB
YnN0cmFjdERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5h
bWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2spCiB7Ci0gICAgQVNTRVJUKGNvbnRl
eHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAogRGF0YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5j
KCkKQEAgLTczLDI2ICs4MiwzNyBAQCBEYXRhYmFzZVN5bmM6On5EYXRhYmFzZVN5bmMoKQogICAg
IEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIH0K
IAotU3RyaW5nIERhdGFiYXNlU3luYzo6dmVyc2lvbigpIGNvbnN0Cit2b2lkIERhdGFiYXNlU3lu
Yzo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpCiB7CiAgICAgQVNT
RVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24oY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKQordm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9u
KFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sLCBFeGNlcHRpb25D
b2RlJikKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRU
aHJlYWQoKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbihQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCwgRXhjZXB0aW9uQ29kZSYpCitib29s
IERhdGFiYXNlU3luYzo6b3BlbkFuZFZlcmlmeShFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBB
U1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
cmV0dXJuIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KGVjKTsKIH0KIAotU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogRGF0YWJhc2VTeW5jOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3ZvaWQg
RGF0YWJhc2VTeW5jOjpwZXJmb3JtQ3JlYXRpb25DYWxsYmFjaygpCiB7Ci0gICAgQVNTRVJUKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIHJldHVybiBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7CisgICAgbV9jcmVhdGlvbkNhbGxiYWNrLT5o
YW5kbGVFdmVudChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCksIHRoaXMpOworfQorCit2
b2lkIERhdGFiYXNlU3luYzo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkKK3sKKyAgICAvLyBGSVhN
RTogd2UgcHJvYmFibHkgbmVlZCB0byBkbyBzb21ldGhpbmcgZWxzZSBpbiBoZXJlIG90aGVyIHRo
YW4gY2FsbGluZyBjbG9zZUltbWVkaWF0ZWx5KCkuCisgICAgY2xvc2VJbW1lZGlhdGVseSgpOwor
fQorCit2b2lkIERhdGFiYXNlU3luYzo6Y2xvc2VJbW1lZGlhdGVseSgpCit7CisgICAgLy8gRklY
TUU6IHByb2JhYmx5IG5lZWQgdG8gZG8gbW9yZSB0aGluZ3MgaW4gaGVyZQorICAgIGNsb3NlRGF0
YWJhc2UoKTsKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJh
c2UodGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VTeW5jLmgJKHJldmlzaW9uIDYxNTk0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3lu
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw0OCArMzAsMzkgQEAKICNkZWZpbmUgRGF0YWJhc2VT
eW5jX2gKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKIGNsYXNzIFNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
LQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiAv
LyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5
IG9uIHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KLWNsYXNzIERhdGFiYXNlU3luYyA6IHB1
YmxpYyBSZWZDb3VudGVkPERhdGFiYXNlU3luYz4geworY2xhc3MgRGF0YWJhc2VTeW5jIDogcHVi
bGljIEFic3RyYWN0RGF0YWJhc2UgewogcHVibGljOgotICAgIH5EYXRhYmFzZVN5bmMoKTsKKyAg
ICB2aXJ0dWFsIH5EYXRhYmFzZVN5bmMoKTsKIAotICAgIC8vIERpcmVjdCBzdXBwb3J0IGZvciB0
aGUgRE9NIEFQSQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gb3BlbkRhdGFi
YXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKICAgICB2b2lkIGNoYW5n
ZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNp
b24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrPiwgYm9vbCByZWFkT25seSwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgLy8gSW50ZXJu
YWwgZW5naW5lIHN1cHBvcnQKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUluZm9UYWJsZU5hbWUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3Nl
KCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKIAogcHJpdmF0ZToKICAg
ICBEYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1Jl
ZlB0cjxEYXRhYmFzZUNhbGxiYWNrPik7CiAKLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAg
U3RyaW5nIG1fZXhwZWN0ZWRWZXJzaW9uOwotICAgIFN0cmluZyBtX2Rpc3BsYXlOYW1lOwotICAg
IHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOwotICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxi
YWNrPiBtX2NyZWF0aW9uQ2FsbGJhY2s7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRh
dGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSNlbmRpZgorICAg
IGJvb2wgb3BlbkFuZFZlcmlmeShFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBwZXJmb3JtQ3Jl
YXRpb25DYWxsYmFjaygpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gNjE1OTQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNi0yMSAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVuY29tbWVudCBhbGwgdGVzdCBjYXNlcyBpbiBvcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA2MDcK
KworICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1
dHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzOgorCiAyMDEwLTA2LTIxICBTaGVyaWZmIEJv
dCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByNjE1ODUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjE1OTQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNSw0ICs1LDYgQEAgUEFTUzogdW5kZWZpbmVkCiBQQVNTOiB1bmRlZmluZWQK
IFBBU1M6IHVuZGVmaW5lZAogUEFTUzogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24g
MTcKK1BBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuCitQQVNTOiBjYWxsaW5nIG9w
ZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sgc3VjY2VlZGVkLgogCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS1zeW5jLWlucHV0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwkocmV2aXNp
b24gNjE1OTQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
b3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtNDYsMTkgKzQ2
LDE4IEBAIHRyeSB7CiAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7CiB9
CiAKLS8vIEZJWE1FOiBVbmNvbW1lbnQgdGhlc2UgdGVzdHMgd2hlbiB0aGUgc3luYyBEQiBBUEkg
aXMgaW1wbGVtZW50ZWQuCi0vL3RyeSB7Ci0vLyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRC
TmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwotLy8gICAgcG9zdE1l
c3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuIik7Ci0vL30gY2F0Y2gg
KGVycikgewotLy8gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Ci0vL30K
LS8vCi0vL3RyeSB7Ci0vLyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZl
cnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQsIGZ1bmN0aW9uKGRiKSB7IH0pOwotLy8gICAg
cG9zdE1lc3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGggYSBjcmVh
dGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuIik7Ci0vL30gY2F0Y2ggKGVycikgewotLy8gICAgcG9z
dE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Ci0vL30KK3RyeSB7CisgICAgZGIgPSBv
cGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAx
MDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRl
ZC4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1l
c3NhZ2UpOworfQorCit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwg
IkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwgZnVuY3Rpb24oZGIpIHsgfSk7Cisg
ICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGggYSBj
cmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0
TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKK30KIAogcG9zdE1lc3NhZ2UoImRvbmUi
KTsK
</data>
<flag name="commit-queue"
          id="46103"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59556</attachid>
            <date>2010-06-23 12:58:57 -0700</date>
            <delta_ts>2010-06-23 15:17:23 -0700</delta_ts>
            <desc>patch #1: implement DatabaseSync::openDatabaseSync()</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>59487</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTcwNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzAgQEAKKzIwMTAtMDYtMjEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKCkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisgICAgICAg
ICogc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJp
ZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRUZXh0VmFs
dWVJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRNdXRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpndWlkVG9WZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUd1aWRW
ZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRUb0RhdGFiYXNlTWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6Omd1aWRGb3JPcmlnaW5BbmROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6dmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0
RGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RE
YXRhYmFzZTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFz
ZTo6ZXN0aW1hdGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpm
aWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZVZl
cnNpb25LZXkpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lv
bkZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZXRW
ZXJzaW9uSW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjp2
ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6OnNldEV4cGVjdGVkVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpkaXNhYmxlQXV0aG9yaXplcik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjplbmFibGVBdXRob3JpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25XYXNJbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6
QWJzdHJhY3REYXRhYmFzZTo6cmVzZXREZWxldGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OmhhZERlbGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRh
YmFzZTo6cmVzZXRBdXRob3JpemVyKToKKyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJh
c2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Om9wZW5lZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjppc05ldyk6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZURlYnVnTmFtZSk6CisgICAgICAgICogc3RvcmFn
ZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRW
ZXJpZnkpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1
dGhvcml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpEYXRhYmFzZUF1dGhv
cml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpkZW55QmFzZWRP
blRhYmxlTmFtZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaDoKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVN5bmM6Om9wZW5EYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VT
eW5jOjpEYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjaGFu
Z2VWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6dHJhbnNhY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpvcGVuQW5kVmVyaWZ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6cGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjbG9zZUltbWVkaWF0ZWx5KToKKyAgICAgICAg
KiBzdG9yYWdlL0RhdGFiYXNlU3luYy5oOgorCiAyMDEwLTA2LTIzICBHdXN0YXZvIE5vcm9uaGEg
U2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFhhbiBMb3Blei4KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJ
KHJldmlzaW9uIDYxNzA1KQorKysgV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMzMgQEAKICNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlLmgiCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5jbHVkZSAiRGF0YWJhc2VBdXRo
b3JpemVyLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgorI2luY2x1ZGUgIkRhdGFi
YXNlVHJhY2tlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAi
U3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKFNRTGl0ZURh
dGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgU3RyaW5nJiByZXN1bHRTdHJpbmcpCit7
CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwgcXVlcnkpOworICAgIGludCByZXN1
bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOworCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRP
aykgeworICAgICAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0
byByZWFkIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgewor
ICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkg
eworICAgICAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHJlYWRpbmcgdGV4dCByZXN1bHQg
ZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNR
TGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7CisgICAgaW50
IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJl
c3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50
IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEs
IHZhbHVlKTsKKworICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3Vs
dCAhPSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHN0ZXAg
c3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5k
YXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vIEZJWE1FOiBtb3ZlIGFsbCBndWlkLXJlbGF0ZWQgZnVuY3Rpb25zIHRvIGEgRGF0
YWJhc2VWZXJzaW9uVHJhY2tlciBjbGFzcy4KK3N0YXRpYyBNdXRleCYgZ3VpZE11dGV4KCkKK3sK
KyAgICAvLyBOb3RlOiBXZSBkb24ndCBoYXZlIHRvIHVzZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRT
dGF0aWMgaGVyZSBiZWNhdXNlCisgICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBp
biB0aGUgY29uc3RydWN0b3Igb24gdGhlIG1haW4gdGhyZWFkCisgICAgLy8gYmVmb3JlIGFueSBv
dGhlciB0aHJlYWRzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uIGFyZSB1c2VkLgorICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG11dGV4LCAoKSk7CisgICAgcmV0dXJuIG11dGV4OworfQor
Cit0eXBlZGVmIEhhc2hNYXA8aW50LCBTdHJpbmc+IEd1aWRWZXJzaW9uTWFwOworc3RhdGljIEd1
aWRWZXJzaW9uTWFwJiBndWlkVG9WZXJzaW9uTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEd1aWRWZXJzaW9uTWFwLCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFwOworfQorCisvLyBO
T1RFOiBDYWxsZXIgbXVzdCBsb2NrIGd1aWRNdXRleCgpLgorc3RhdGljIGlubGluZSB2b2lkIHVw
ZGF0ZUd1aWRWZXJzaW9uTWFwKGludCBndWlkLCBTdHJpbmcgbmV3VmVyc2lvbikKK3sKKyAgICAv
LyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQuCisgICAgQVNTRVJUKCFndWlkTXV0ZXgo
KS50cnlMb2NrKCkpOworCisgICAgLy8gTm90ZTogSXQgaXMgbm90IHNhZmUgdG8gcHV0IGFuIGVt
cHR5IHN0cmluZyBpbnRvIHRoZSBndWlkVG9WZXJzaW9uTWFwKCkgbWFwLgorICAgIC8vIFRoYXQn
cyBiZWNhdXNlIHRoZSBtYXAgaXMgY3Jvc3MtdGhyZWFkLCBidXQgZW1wdHkgc3RyaW5ncyBhcmUg
cGVyLXRocmVhZC4KKyAgICAvLyBUaGUgY29weSgpIGZ1bmN0aW9uIG1ha2VzIGEgdmVyc2lvbiBv
ZiB0aGUgc3RyaW5nIHlvdSBjYW4gdXNlIG9uIHRoZSBjdXJyZW50CisgICAgLy8gdGhyZWFkLCBi
dXQgd2UgbmVlZCBhIHN0cmluZyB3ZSBjYW4ga2VlcCBpbiBhIGNyb3NzLXRocmVhZCBkYXRhIHN0
cnVjdHVyZS4KKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHF1aXRlLWF3a3dhcmQgcmVzdHJpY3Rp
b24gdG8gaGF2ZSB0byBwcm9ncmFtIHdpdGguCisKKyAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8g
ZW1wdHkgc3RyaW5nIChzZWUgY29tbWVudCBhYm92ZSkuCisgICAgZ3VpZFRvVmVyc2lvbk1hcCgp
LnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/IFN0cmluZygpIDogbmV3VmVyc2lvbi50
aHJlYWRzYWZlQ29weSgpKTsKK30KKwordHlwZWRlZiBIYXNoTWFwPGludCwgSGFzaFNldDxBYnN0
cmFjdERhdGFiYXNlKj4qPiBHdWlkRGF0YWJhc2VNYXA7CitzdGF0aWMgR3VpZERhdGFiYXNlTWFw
JiBndWlkVG9EYXRhYmFzZU1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkRGF0
YWJhc2VNYXAsIG1hcCwgKCkpOworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBpbnQgZ3Vp
ZEZvck9yaWdpbkFuZE5hbWUoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBTdHJpbmcgc3RyaW5nSUQ7CisgICAgaWYgKG9yaWdpbi5lbmRzV2l0aCgiLyIp
KQorICAgICAgICBzdHJpbmdJRCA9IG9yaWdpbiArIG5hbWU7CisgICAgZWxzZQorICAgICAgICBz
dHJpbmdJRCA9IG9yaWdpbiArICIvIiArIG5hbWU7CisKKyAgICAvLyBOb3RlOiBXZSBkb24ndCBo
YXZlIHRvIHVzZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMgaGVyZSBiZWNhdXNlCisgICAg
Ly8gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBpbiB0aGUgY29uc3RydWN0b3Igb24gdGhl
IG1haW4gdGhyZWFkCisgICAgLy8gYmVmb3JlIGFueSBvdGhlciB0aHJlYWRzIHRoYXQgY2FsbCB0
aGlzIGZ1bmN0aW9uIGFyZSB1c2VkLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIHN0
cmluZ0lkZW50aWZpZXJNdXRleCwgKCkpOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihzdHJpbmdJ
ZGVudGlmaWVyTXV0ZXgpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIGludD4gSURHdWlk
TWFwOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSURHdWlkTWFwLCBzdHJpbmdJZGVudGlmaWVy
VG9HVUlETWFwLCAoKSk7CisgICAgaW50IGd1aWQgPSBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFw
LmdldChzdHJpbmdJRCk7CisgICAgaWYgKCFndWlkKSB7CisgICAgICAgIHN0YXRpYyBpbnQgY3Vy
cmVudE5ld0dVSUQgPSAxOworICAgICAgICBndWlkID0gY3VycmVudE5ld0dVSUQrKzsKKyAgICAg
ICAgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcC5zZXQoc3RyaW5nSUQsIGd1aWQpOworICAgIH0K
KworICAgIHJldHVybiBndWlkOworfQorCiBzdGF0aWMgYm9vbCBpc0RhdGFiYXNlQXZhaWxhYmxl
ID0gdHJ1ZTsKIAogYm9vbCBBYnN0cmFjdERhdGFiYXNlOjppc0F2YWlsYWJsZSgpCkBAIC00NSwx
MCArMTY5LDMwNSBAQCB2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGJvCiAg
ICAgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IGF2YWlsYWJsZTsKIH0KIAorLy8gc3RhdGljCitjb25z
dCBTdHJpbmcmIEFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG5hbWUsICgiX19XZWJLaXREYXRhYmFzZUlu
Zm9UYWJsZV9fIikpOworICAgIHJldHVybiBuYW1lOworfQorCitBYnN0cmFjdERhdGFiYXNlOjpB
YnN0cmFjdERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlv
bkNhbGxiYWNrKQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAg
LCBtX25hbWUobmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICwgbV9leHBlY3RlZFZlcnNp
b24oZXhwZWN0ZWRWZXJzaW9uLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAgLCBtX2Rpc3BsYXlO
YW1lKGRpc3BsYXlOYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAgLCBtX2VzdGltYXRlZFNp
emUoZXN0aW1hdGVkU2l6ZSkKKyAgICAsIG1fY3JlYXRpb25DYWxsYmFjayhjcmVhdGlvbkNhbGxi
YWNrKQorICAgICwgbV9ndWlkKDApCisgICAgLCBtX29wZW5lZChmYWxzZSkKKyAgICAsIG1fbmV3
KGZhbHNlKQoreworICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
bV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplciA9IERhdGFiYXNl
QXV0aG9yaXplcjo6Y3JlYXRlKGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKTsKKworICAgIGlmICht
X25hbWUuaXNOdWxsKCkpCisgICAgICAgIG1fbmFtZSA9ICIiOworCisgICAgbV9ndWlkID0gZ3Vp
ZEZvck9yaWdpbkFuZE5hbWUoc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbmFtZSk7Cisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworCisgICAgICAg
IEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAo
KS5nZXQobV9ndWlkKTsKKyAgICAgICAgaWYgKCFoYXNoU2V0KSB7CisgICAgICAgICAgICBoYXNo
U2V0ID0gbmV3IEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+OworICAgICAgICAgICAgZ3VpZFRv
RGF0YWJhc2VNYXAoKS5zZXQobV9ndWlkLCBoYXNoU2V0KTsKKyAgICAgICAgfQorCisgICAgICAg
IGhhc2hTZXQtPmFkZCh0aGlzKTsKKyAgICB9CisKKyAgICBtX2ZpbGVuYW1lID0gRGF0YWJhc2VU
cmFja2VyOjp0cmFja2VyKCkuZnVsbFBhdGhGb3JEYXRhYmFzZShzZWN1cml0eU9yaWdpbigpLCBt
X25hbWUpOworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmFkZE9wZW5EYXRhYmFzZSh0
aGlzKTsKK30KKwogQWJzdHJhY3REYXRhYmFzZTo6fkFic3RyYWN0RGF0YWJhc2UoKQogewogfQog
Cit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UoKQoreworICAgIGlmICghbV9v
cGVuZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsK
KyAgICBtX29wZW5lZCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KGd1aWRNdXRleCgpKTsKKworICAgICAgICBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPiogaGFz
aFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7CisgICAgICAgIEFTU0VSVCho
YXNoU2V0KTsKKyAgICAgICAgQVNTRVJUKGhhc2hTZXQtPmNvbnRhaW5zKHRoaXMpKTsKKyAgICAg
ICAgaGFzaFNldC0+cmVtb3ZlKHRoaXMpOworICAgICAgICBpZiAoaGFzaFNldC0+aXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnJlbW92ZShtX2d1aWQpOworICAg
ICAgICAgICAgZGVsZXRlIGhhc2hTZXQ7CisgICAgICAgICAgICBndWlkVG9WZXJzaW9uTWFwKCku
cmVtb3ZlKG1fZ3VpZCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1N0cmluZyBBYnN0cmFjdERh
dGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11
dGV4KCkpOworICAgIHJldHVybiBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCkudGhyZWFk
c2FmZUNvcHkoKTsKK30KKworc3RhdGljIGNvbnN0IGludCBtYXhTcWxpdGVCdXN5V2FpdFRpbWUg
PSAzMDAwMDsKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxl
bmFtZSwgdHJ1ZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3BlbiBkYXRhYmFz
ZSBhdCBwYXRoICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGVjID0g
SU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYg
KCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQorICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVudGFsIGF1dG8tdmFjdXVtIGZv
ciBkYXRhYmFzZSAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCkpOworCisgICAgQVNTRVJU
KG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEF1dGhvcml6
ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRp
bWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKKworICAgIFN0cmluZyBjdXJyZW50VmVyc2lv
bjsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisKKyAg
ICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgp
LmZpbmQobV9ndWlkKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5l
bmQoKSkgeworICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAo
c2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgorICAgICAgICAgICAgY3VycmVudFZlcnNpb24g
PSBlbnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQ7Cisg
ICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1
aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiTm8gY2FjaGVkIHZl
cnNpb24gZm9yIGd1aWQgJWkiLCBtX2d1aWQpOworCisgICAgICAgICAgICBpZiAoIW1fc3FsaXRl
RGF0YWJhc2UudGFibGVFeGlzdHMoZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKSB7CisgICAgICAg
ICAgICAgICAgbV9uZXcgPSB0cnVlOworCisgICAgICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgIiArIGRhdGFiYXNlSW5mb1RhYmxl
TmFtZSgpICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04g
Q09ORkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIp
KSB7CisgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSB0YWJs
ZSAlcyBpbiBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpLmFzY2lpKCkuZGF0
YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2xv
c2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAg
bV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IWdldFZlcnNpb25Gcm9tRGF0YWJhc2UoY3VycmVudFZlcnNpb24pKSB7CisgICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdmVyc2lvbiBmcm9tIGRhdGFiYXNl
ICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICAg
ICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUg
aGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgorICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0
YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoY3VycmVudFZlcnNpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAg
ICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlJldHJpZXZlZCBjdXJyZW50IHZlcnNpb24gJXMgZnJv
bSBkYXRhYmFzZSAlcyIsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURl
YnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fbmV3
IHx8ICFtX2NyZWF0aW9uQ2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQ
SSwgIlNldHRpbmcgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyB0aGF0IHdhcyBqdXN0IGNyZWF0
ZWQiLCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUo
KS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRh
YmFzZShtX2V4cGVjdGVkVmVyc2lvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMiLCBtX2V4cGVjdGVkVmVy
c2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgICAg
ICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAg
ICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
dXJyZW50VmVyc2lvbiA9IG1fZXhwZWN0ZWRWZXJzaW9uOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIGN1cnJlbnRWZXJzaW9uKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChjdXJyZW50VmVyc2lvbi5pc051bGwoKSkgeworICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGRvZXMgbm90IGhhdmUgaXRzIHZlcnNp
b24gc2V0IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGN1
cnJlbnRWZXJzaW9uID0gIiI7CisgICAgfQorCisgICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNp
b24gaXNuJ3QgdGhlIGVtcHR5IHN0cmluZywgZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGF0YWJh
c2UgdmVyc2lvbiB3ZSBoYXZlIG1hdGNoZXMgdGhhdCB2ZXJzaW9uLiBPdGhlcndpc2UsIHNldCBh
biBleGNlcHRpb24uCisgICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXMgdGhlIGVtcHR5
IHN0cmluZywgdGhlbiB3ZSBhbHdheXMgcmV0dXJuIHdpdGggd2hhdGV2ZXIgdmVyc2lvbiBvZiB0
aGUgZGF0YWJhc2Ugd2UgaGF2ZS4KKyAgICBpZiAoKCFtX25ldyB8fCAhbV9jcmVhdGlvbkNhbGxi
YWNrKSAmJiBtX2V4cGVjdGVkVmVyc2lvbi5sZW5ndGgoKSAmJiBtX2V4cGVjdGVkVmVyc2lvbiAh
PSBjdXJyZW50VmVyc2lvbikgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgInBhZ2UgZXhwZWN0
cyB2ZXJzaW9uICVzIGZyb20gZGF0YWJhc2UgJXMsIHdoaWNoIGFjdHVhbGx5IGhhcyB2ZXJzaW9u
IG5hbWUgJXMgLSBvcGVuRGF0YWJhc2UoKSBjYWxsIHdpbGwgZmFpbCIsIG1fZXhwZWN0ZWRWZXJz
aW9uLmFzY2lpKCkuZGF0YSgpLAorICAgICAgICAgICAgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2Np
aSgpLmRhdGEoKSwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBk
YXRhYmFzZSBmaWxlLgorICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX29wZW5lZCA9IHRydWU7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogQWJzdHJhY3REYXRhYmFzZTo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5nZXQoKTsKK30KKworU2VjdXJpdHlPcmlnaW4qIEFic3RyYWN0RGF0YWJh
c2U6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0VGhyZWFk
U2VjdXJpdHlPcmlnaW4uZ2V0KCk7Cit9CisKK1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjpzdHJp
bmdJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJl
ZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5CisgICAgcmV0dXJuIG1fbmFtZS50aHJlYWRzYWZlQ29w
eSgpOworfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6ZGlzcGxheU5hbWUoKSBjb25zdAor
eworICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZl
dHkKKyAgICByZXR1cm4gbV9kaXNwbGF5TmFtZS50aHJlYWRzYWZlQ29weSgpOworfQorCit1bnNp
Z25lZCBsb25nIEFic3RyYWN0RGF0YWJhc2U6OmVzdGltYXRlZFNpemUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2VzdGltYXRlZFNpemU7Cit9CisKK1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjpm
aWxlTmFtZSgpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291
bnRpbmcgdGhyZWFkIHNhZmV0eQorICAgIHJldHVybiBtX2ZpbGVuYW1lLnRocmVhZHNhZmVDb3B5
KCk7Cit9CisKKy8vIHN0YXRpYworY29uc3QgU3RyaW5nJiBBYnN0cmFjdERhdGFiYXNlOjpkYXRh
YmFzZVZlcnNpb25LZXkoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBrZXks
ICgiV2ViS2l0RGF0YWJhc2VWZXJzaW9uS2V5IikpOworICAgIHJldHVybiBrZXk7Cit9CisKK2Jv
b2wgQWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNp
b24pCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGdldFZlcnNpb25RdWVyeSwg
KCJTRUxFQ1QgdmFsdWUgRlJPTSAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIFdIRVJF
IGtleSA9ICciICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAiJzsiKSk7CisKKyAgICBtX2RhdGFi
YXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOworCisgICAgYm9vbCByZXN1bHQgPSByZXRyaWV2ZVRl
eHRSZXN1bHRGcm9tRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgZ2V0VmVyc2lvblF1ZXJ5LnRo
cmVhZHNhZmVDb3B5KCksIHZlcnNpb24pOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSB2ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRh
YmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3Jp
emVyLT5lbmFibGUoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWJzdHJhY3RE
YXRhYmFzZTo6c2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorewor
ICAgIC8vIFRoZSBJTlNFUlQgd2lsbCByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5IGZvciB0aGUg
ZGF0YWJhc2Ugd2l0aCB0aGUgbmV3IHZlcnNpb24gbnVtYmVyLCBkdWUgdG8gdGhlIFVOSVFVRSBP
TiBDT05GTElDVCBSRVBMQUNFCisgICAgLy8gY2xhdXNlIGluIHRoZSBDUkVBVEUgc3RhdGVtZW50
IChzZWUgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkpLgorICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBzZXRWZXJzaW9uUXVlcnksICgiSU5TRVJUIElOVE8gIiArIGRhdGFi
YXNlSW5mb1RhYmxlTmFtZSgpICsgIiAoa2V5LCB2YWx1ZSkgVkFMVUVTICgnIiArIGRhdGFiYXNl
VmVyc2lvbktleSgpICsgIicsID8pOyIpKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5k
aXNhYmxlKCk7CisKKyAgICBib29sIHJlc3VsdCA9IHNldFRleHRWYWx1ZUluRGF0YWJhc2UobV9z
cWxpdGVEYXRhYmFzZSwgc2V0VmVyc2lvblF1ZXJ5LnRocmVhZHNhZmVDb3B5KCksIHZlcnNpb24p
OworICAgIGlmICghcmVzdWx0KQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdmVy
c2lvbiAlcyBpbiBkYXRhYmFzZSAoJXMpIiwgdmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgc2V0VmVy
c2lvblF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5l
bmFibGUoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFz
ZTo6dmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2V4cGVjdGVk
VmVyc2lvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRl
eCgpKTsKKyAgICAgICAgcmV0dXJuIG1fZXhwZWN0ZWRWZXJzaW9uID09IGd1aWRUb1ZlcnNpb25N
YXAoKS5nZXQobV9ndWlkKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBB
YnN0cmFjdERhdGFiYXNlOjpzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9u
KQoreworICAgIG1fZXhwZWN0ZWRWZXJzaW9uID0gdmVyc2lvbi50aHJlYWRzYWZlQ29weSgpOwor
ICAgIC8vIFVwZGF0ZSB0aGUgaW4gbWVtb3J5IGRhdGFiYXNlIHZlcnNpb24gbWFwLgorICAgIE11
dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAo
bV9ndWlkLCB2ZXJzaW9uKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpkaXNhYmxlQXV0
aG9yaXplcigpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2Rh
dGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6
OmVuYWJsZUF1dGhvcml6ZXIoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7
CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOworfQorCit2b2lkIEFic3RyYWN0
RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJh
c2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+c2V0UmVhZE9ubHkoKTsK
K30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkK
K3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIHJldHVybiBtX2RhdGFi
YXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOworfQorCitib29sIEFi
c3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25XYXNJbnNlcnQoKQoreworICAgIEFTU0VSVChtX2Rh
dGFiYXNlQXV0aG9yaXplcik7CisgICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0
QWN0aW9uV2FzSW5zZXJ0KCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVzZXREZWxl
dGVzKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJh
c2VBdXRob3JpemVyLT5yZXNldERlbGV0ZXMoKTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNl
OjpoYWREZWxldGVzKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAg
IHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+aGFkRGVsZXRlcygpOworfQorCit2b2lkIEFi
c3RyYWN0RGF0YWJhc2U6OnJlc2V0QXV0aG9yaXplcigpCit7CisgICAgaWYgKG1fZGF0YWJhc2VB
dXRob3JpemVyKQorICAgICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCShyZXZpc2lvbiA2MTcwNSkKKysrIFdlYkNv
cmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEzICsz
MiwyMiBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CisjaWZuZGVmIE5ERUJVRworI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBEYXRhYmFzZUF1dGhvcml6ZXI7CitjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOwogY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCit0eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOworCiBjbGFzcyBBYnN0cmFjdERhdGFiYXNlIDogcHVibGlj
IFRocmVhZFNhZmVTaGFyZWQ8QWJzdHJhY3REYXRhYmFzZT4gewogcHVibGljOgogICAgIHN0YXRp
YyBib29sIGlzQXZhaWxhYmxlKCk7CkBAIC00NiwxNSArNTUsNzAgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB+QWJzdHJhY3REYXRhYmFzZSgpOwogCi0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgU3RyaW5nIHN0cmluZ0lkZW50aWZpZXIoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJp
bmcgZGlzcGxheU5hbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZmlsZU5hbWUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0OworCisgICAgYm9v
bCBvcGVuZWQoKSBjb25zdCB7IHJldHVybiBtX29wZW5lZDsgfQorICAgIGJvb2wgaXNOZXcoKSBj
b25zdCB7IHJldHVybiBtX25ldzsgfQorCisgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBzdHJp
bmdJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wg
cGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhjZXB0aW9uQ29kZSYgZWMpOworCisgICAgLy8gRklYTUU6
IG1vdmUgYWxsIHZlcnNpb24tcmVsYXRlZCBtZXRob2RzIHRvIGEgRGF0YWJhc2VWZXJzaW9uVHJh
Y2tlciBjbGFzcworICAgIGJvb2wgdmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgpIGNvbnN0OworICAg
IHZvaWQgc2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgYm9v
bCBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbik7CisgICAgYm9vbCBzZXRW
ZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24pOworCisgICAgdm9pZCBkaXNh
YmxlQXV0aG9yaXplcigpOworICAgIHZvaWQgZW5hYmxlQXV0aG9yaXplcigpOworICAgIHZvaWQg
c2V0QXV0aG9yaXplclJlYWRPbmx5KCk7CisgICAgYm9vbCBsYXN0QWN0aW9uQ2hhbmdlZERhdGFi
YXNlKCk7CisgICAgYm9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0KCk7CisgICAgdm9pZCByZXNldERl
bGV0ZXMoKTsKKyAgICBib29sIGhhZERlbGV0ZXMoKTsKKyAgICB2b2lkIHJlc2V0QXV0aG9yaXpl
cigpOwogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgpID0gMDsKKworcHJvdGVjdGVkOgorICAg
IEFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUs
ICBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+KTsKKworICAgIHZvaWQgY2xvc2VEYXRhYmFz
ZSgpOworCisgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCk7
CisKKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0OworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0VGhyZWFkU2VjdXJp
dHlPcmlnaW47CisKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmluZyBtX2V4cGVjdGVkVmVy
c2lvbjsKKyAgICBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKKyAgICB1bnNpZ25lZCBsb25nIG1fZXN0
aW1hdGVkU2l6ZTsKKyAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gbV9jcmVhdGlvbkNhbGxi
YWNrOworICAgIFN0cmluZyBtX2ZpbGVuYW1lOworCisgICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxp
dGVEYXRhYmFzZTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgZGF0YWJhc2VEZWJ1Z05h
bWUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dG9TdHJp
bmcoKSArICI6OiIgKyBtX25hbWU7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIHN0YXRpYyBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlVmVyc2lvbktleSgpOworCisgICAgaW50IG1fZ3VpZDsKKyAg
ICBib29sIG1fb3BlbmVkOworICAgIGJvb2wgbV9uZXc7CisKKyAgICBSZWZQdHI8RGF0YWJhc2VB
dXRob3JpemVyPiBtX2RhdGFiYXNlQXV0aG9yaXplcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gNjE3MDUpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAK
ICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCIK
LSNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZUNhbGxi
YWNrLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJl
YWQuaCIKQEAgLTUwLDcgKzQ5LDYgQEAKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5o
IgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpA
QCAtNjQsNjIgKzYyLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBJZiB3ZSBzbGVl
cCBmb3IgbW9yZSB0aGUgMzAgc2Vjb25kcyB3aGlsZSBibG9ja2VkIG9uIFNRTElURV9CVVNZLCBn
aXZlIHVwLgotc3RhdGljIGNvbnN0IGludCBtYXhTcWxpdGVCdXN5V2FpdFRpbWUgPSAzMDAwMDsK
LQotY29uc3QgU3RyaW5nJiBEYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkKLXsKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgbmFtZSwgKCJfX1dlYktpdERhdGFiYXNlSW5m
b1RhYmxlX18iKSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLXN0YXRpYyBNdXRleCYgZ3VpZE11
dGV4KCkKLXsKLSAgICAvLyBOb3RlOiBXZSBkb24ndCBoYXZlIHRvIHVzZSBBdG9taWNhbGx5SW5p
dGlhbGl6ZWRTdGF0aWMgaGVyZSBiZWNhdXNlCi0gICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgb25jZSBpbiB0aGUgY29uc3RydWN0b3Igb24gdGhlIG1haW4gdGhyZWFkCi0gICAgLy8gYmVm
b3JlIGFueSBvdGhlciB0aHJlYWRzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uIGFyZSB1c2VkLgot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG11dGV4LCAoKSk7Ci0gICAgcmV0dXJuIG11
dGV4OwotfQotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBTdHJpbmc+IEd1aWRWZXJzaW9uTWFwOwot
c3RhdGljIEd1aWRWZXJzaW9uTWFwJiBndWlkVG9WZXJzaW9uTWFwKCkKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEd1aWRWZXJzaW9uTWFwLCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFwOwot
fQotCi0vLyBOT1RFOiBDYWxsZXIgbXVzdCBsb2NrIGd1aWRNdXRleCgpLgotc3RhdGljIGlubGlu
ZSB2b2lkIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKGludCBndWlkLCBTdHJpbmcgbmV3VmVyc2lvbikK
LXsKLSAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQuCi0gICAgQVNTRVJUKCFn
dWlkTXV0ZXgoKS50cnlMb2NrKCkpOwotCi0gICAgLy8gTm90ZTogSXQgaXMgbm90IHNhZmUgdG8g
cHV0IGFuIGVtcHR5IHN0cmluZyBpbnRvIHRoZSBndWlkVG9WZXJzaW9uTWFwKCkgbWFwLgotICAg
IC8vIFRoYXQncyBiZWNhdXNlIHRoZSBtYXAgaXMgY3Jvc3MtdGhyZWFkLCBidXQgZW1wdHkgc3Ry
aW5ncyBhcmUgcGVyLXRocmVhZC4KLSAgICAvLyBUaGUgY29weSgpIGZ1bmN0aW9uIG1ha2VzIGEg
dmVyc2lvbiBvZiB0aGUgc3RyaW5nIHlvdSBjYW4gdXNlIG9uIHRoZSBjdXJyZW50Ci0gICAgLy8g
dGhyZWFkLCBidXQgd2UgbmVlZCBhIHN0cmluZyB3ZSBjYW4ga2VlcCBpbiBhIGNyb3NzLXRocmVh
ZCBkYXRhIHN0cnVjdHVyZS4KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHF1aXRlLWF3a3dhcmQg
cmVzdHJpY3Rpb24gdG8gaGF2ZSB0byBwcm9ncmFtIHdpdGguCi0KLSAgICAvLyBNYXAgbnVsbCBz
dHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgY29tbWVudCBhYm92ZSkuCi0gICAgZ3VpZFRvVmVy
c2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/IFN0cmluZygpIDogbmV3
VmVyc2lvbi50aHJlYWRzYWZlQ29weSgpKTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPGludCwgSGFz
aFNldDxEYXRhYmFzZSo+Kj4gR3VpZERhdGFiYXNlTWFwOwotc3RhdGljIEd1aWREYXRhYmFzZU1h
cCYgZ3VpZFRvRGF0YWJhc2VNYXAoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoR3VpZERh
dGFiYXNlTWFwLCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZVZlcnNpb25LZXkoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBrZXksICgiV2ViS2l0RGF0YWJhc2VWZXJzaW9uS2V5IikpOwotICAgIHJldHVybiBr
ZXk7Ci19Ci0KLXN0YXRpYyBpbnQgZ3VpZEZvck9yaWdpbkFuZE5hbWUoY29uc3QgU3RyaW5nJiBv
cmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KIGNsYXNzIERhdGFiYXNlQ3JlYXRpb25DYWxs
YmFja1Rhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzaz4gY3Jl
YXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKQpAQCAtMTQ3LDcgKzg5LDYgQEAgUGFz
c1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2U6Om9wZW5EYXRhYgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlKQogewogICAgIGlmICgh
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJhc2UoY29udGV4dCwg
bmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBU
aGVyZSBzaG91bGQgYmUgYW4gZXhjZXB0aW9uIHJhaXNlZCBoZXJlIGluIGFkZGl0aW9uIHRvIHJl
dHVybmluZyBhIG51bGwgRGF0YWJhc2Ugb2JqZWN0LiAgVGhlIHF1ZXN0aW9uIGhhcyBiZWVuIHJh
aXNlZCB3aXRoIHRoZSBXSEFUV0cuCiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2Ug
JXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNj
aWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xODYsNDcgKzEyNywxOCBA
QCBQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZTo6b3BlbkRhdGFiCiB9CiAKIERhdGFiYXNl
OjpEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VD
YWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaykKLSAgICA6IG1fdHJhbnNhY3Rpb25JblByb2dyZXNz
KGZhbHNlKQorICAgIDogQWJzdHJhY3REYXRhYmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZl
cnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrKQorICAg
ICwgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpCiAgICAgLCBtX2lzVHJhbnNhY3Rpb25R
dWV1ZUVuYWJsZWQodHJ1ZSkKLSAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0
KQotICAgICwgbV9uYW1lKG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZ3VpZCgw
KQotICAgICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmNyb3NzVGhyZWFkU3Ry
aW5nKCkpCi0gICAgLCBtX2Rpc3BsYXlOYW1lKGRpc3BsYXlOYW1lLmNyb3NzVGhyZWFkU3RyaW5n
KCkpCi0gICAgLCBtX2VzdGltYXRlZFNpemUoZXN0aW1hdGVkU2l6ZSkKICAgICAsIG1fZGVsZXRl
ZChmYWxzZSkKICAgICAsIG1fc3RvcHBlZChmYWxzZSkKLSAgICAsIG1fb3BlbmVkKGZhbHNlKQot
ICAgICwgbV9uZXcoZmFsc2UpCi0gICAgLCBtX2NyZWF0aW9uQ2FsbGJhY2soY3JlYXRpb25DYWxs
YmFjaykKIHsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpKTsKLSAg
ICBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+c2VjdXJpdHlPcmlnaW4oKTsKICAgICBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4g
PSBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dGhyZWFkc2FmZUNvcHkoKTsKLSAgICBp
ZiAobV9uYW1lLmlzTnVsbCgpKQotICAgICAgICBtX25hbWUgPSAiIjsKIAogICAgIFNjcmlwdENv
bnRyb2xsZXI6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLQotICAgIG1fZ3VpZCA9IGd1aWRGb3JP
cmlnaW5BbmROYW1lKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5hbWUpOwotCi0gICAg
ewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotCi0gICAgICAgIEhh
c2hTZXQ8RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3Vp
ZCk7Ci0gICAgICAgIGlmICghaGFzaFNldCkgewotICAgICAgICAgICAgaGFzaFNldCA9IG5ldyBI
YXNoU2V0PERhdGFiYXNlKj47Ci0gICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnNldCht
X2d1aWQsIGhhc2hTZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaGFzaFNldC0+YWRkKHRoaXMp
OwotICAgIH0KLQogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNl
VGhyZWFkKCkpOwotICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5m
dWxsUGF0aEZvckRhdGFiYXNlKHNlY3VyaXR5T3JpZ2luKCksIG1fbmFtZSk7CiAKLSAgICBEYXRh
YmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5hZGRPcGVuRGF0YWJhc2UodGhpcyk7Ci0gICAgY29udGV4
dC0+YWRkT3BlbkRhdGFiYXNlKHRoaXMpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
YWRkT3BlbkRhdGFiYXNlKHRoaXMpOwogfQogCiBjbGFzcyBEZXJlZkNvbnRleHRUYXNrIDogcHVi
bGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewpAQCAtMjUzLDExICsxNjUsMTcgQEAg
RGF0YWJhc2U6On5EYXRhYmFzZSgpCiAgICAgfQogfQogCitTdHJpbmcgRGF0YWJhc2U6OnZlcnNp
b24oKSBjb25zdAoreworICAgIGlmIChtX2RlbGV0ZWQpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICByZXR1cm4gQWJzdHJhY3REYXRhYmFzZTo6dmVyc2lvbigpOworfQorCiBib29sIERh
dGFiYXNlOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihFeGNlcHRpb25Db2RlJiBlKQogewogICAgIGlm
ICghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXIgPSBEYXRhYmFzZUF1dGhvcml6
ZXI6OmNyZWF0ZSgpOwogCiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgRGF0YWJhc2VU
YXNrU3luY2hyb25pemVyIHN5bmNocm9uaXplcjsKQEAgLTI2OSw5MyArMTg3LDYgQEAgYm9vbCBE
YXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24oRXhjZQogICAgIHJldHVybiBzdWNjZXNzOwog
fQogCi0KLXN0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZShTUUxpdGVE
YXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0cmluZyYgcmVzdWx0U3RyaW5nKQot
ewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKLSAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0
T2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHByZXBhcmluZyBzdGF0ZW1lbnQg
dG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcykiLCByZXN1bHQsIHF1ZXJ5LmFz
Y2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsK
LSAgICAgICAgcmVzdWx0U3RyaW5nID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IFNRTFJlc3VsdERvbmUp
IHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSByZWFkaW5nIHRl
eHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRh
KCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIERhdGFiYXNlOjpn
ZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgZ2V0VmVyc2lvblF1ZXJ5LCAoIlNFTEVDVCB2YWx1ZSBGUk9NICIg
KyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgV0hFUkUga2V5ID0gJyIgKyBkYXRhYmFzZVZl
cnNpb25LZXkoKSArICInOyIpKTsKLQotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxl
KCk7Ci0KLSAgICBib29sIHJlc3VsdCA9IHJldHJpZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZSht
X3NxbGl0ZURhdGFiYXNlLCBnZXRWZXJzaW9uUXVlcnkudGhyZWFkc2FmZUNvcHkoKSwgdmVyc2lv
bik7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJp
ZXZlIHZlcnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWko
KS5kYXRhKCkpOwotCi0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGJvb2wgc2V0VGV4dFZhbHVlSW5EYXRhYmFzZShT
UUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwgcXVlcnkpOwotICAgIGlu
dCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBTUUxS
ZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIHN0YXRlbWVu
dCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN0YXRlbWVudC5iaW5kVGV4dCgx
LCB2YWx1ZSk7Ci0KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1
bHQgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzdGVw
IHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCku
ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIERhdGFiYXNlOjpzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcm
IHZlcnNpb24pCi17Ci0gICAgLy8gVGhlIElOU0VSVCB3aWxsIHJlcGxhY2UgYW4gZXhpc3Rpbmcg
ZW50cnkgZm9yIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBuZXcgdmVyc2lvbiBudW1iZXIsIGR1ZSB0
byB0aGUgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UKLSAgICAvLyBjbGF1c2UgaW4gdGhlIENS
RUFURSBzdGF0ZW1lbnQgKHNlZSBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoKSkuCi0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHNldFZlcnNpb25RdWVyeSwgKCJJTlNFUlQg
SU5UTyAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIChrZXksIHZhbHVlKSBWQUxVRVMg
KCciICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAiJywgPyk7IikpOwotCi0gICAgbV9kYXRhYmFz
ZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKLQotICAgIGJvb2wgcmVzdWx0ID0gc2V0VGV4dFZhbHVl
SW5EYXRhYmFzZShtX3NxbGl0ZURhdGFiYXNlLCBzZXRWZXJzaW9uUXVlcnkudGhyZWFkc2FmZUNv
cHkoKSwgdmVyc2lvbik7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICglcykiLCB2ZXJzaW9uLmFzY2lpKCku
ZGF0YSgpLCBzZXRWZXJzaW9uUXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotCi0gICAgbV9kYXRhYmFz
ZUF1dGhvcml6ZXItPmVuYWJsZSgpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBE
YXRhYmFzZTo6dmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2V4
cGVjdGVkVmVyc2lvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1
aWRNdXRleCgpKTsKLSAgICAgICAgcmV0dXJuIG1fZXhwZWN0ZWRWZXJzaW9uID09IGd1aWRUb1Zl
cnNpb25NYXAoKS5nZXQobV9ndWlkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
dm9pZCBEYXRhYmFzZTo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkKIHsKICAgICBpZiAobV9kZWxl
dGVkIHx8ICFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpCkBAIC00
MTAsMzAgKzI0MSwxMyBAQCB2b2lkIERhdGFiYXNlOjpjbG9zZShDbG9zZVBvbGljeSBwb2xpY3kp
CiB7CiAgICAgUmVmUHRyPERhdGFiYXNlPiBwcm90ZWN0ID0gdGhpczsKIAotICAgIGlmICghbV9v
cGVuZWQpCi0gICAgICAgIHJldHVybjsKLQogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpOwogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0g
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgp
KTsKLSAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgLy8gTXVzdCByZWYoKSBiZWZv
cmUgY2FsbGluZyBkYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCgpLgotICAg
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJh
c2VDbG9zZWQodGhpcyk7Ci0gICAgbV9vcGVuZWQgPSBmYWxzZTsKIAotICAgIHsKLSAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLQotICAgICAgICBIYXNoU2V0PERhdGFi
YXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmdldChtX2d1aWQpOwotICAgICAg
ICBBU1NFUlQoaGFzaFNldCk7Ci0gICAgICAgIEFTU0VSVChoYXNoU2V0LT5jb250YWlucyh0aGlz
KSk7Ci0gICAgICAgIGhhc2hTZXQtPnJlbW92ZSh0aGlzKTsKLSAgICAgICAgaWYgKGhhc2hTZXQt
PmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VNYXAoKS5yZW1vdmUobV9n
dWlkKTsKLSAgICAgICAgICAgIGRlbGV0ZSBoYXNoU2V0OwotICAgICAgICAgICAgZ3VpZFRvVmVy
c2lvbk1hcCgpLnJlbW92ZShtX2d1aWQpOwotICAgICAgICB9Ci0gICAgfQorICAgIGNsb3NlRGF0
YWJhc2UoKTsKIAorICAgIC8vIE11c3QgcmVmKCkgYmVmb3JlIGNhbGxpbmcgZGF0YWJhc2VUaHJl
YWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQoKS4KKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKHRoaXMpOwogICAgIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5zY2hlZHVsZURhdGFi
YXNlVGFza3ModGhpcyk7CiAgICAgaWYgKHBvbGljeSA9PSBSZW1vdmVEYXRhYmFzZUZyb21Db250
ZXh0KQogICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKENvbnRleHRS
ZW1vdmVPcGVuRGF0YWJhc2VUYXNrOjpjcmVhdGUodGhpcykpOwpAQCAtNDYzLDYgKzI3Nyw5IEBA
IHZvaWQgRGF0YWJhc2U6OnN0b3AoKQogICAgICAgICBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJs
ZWQgPSBmYWxzZTsKICAgICAgICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKICAg
ICB9CisKKyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgp
KQorICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnVu
c2NoZWR1bGVEYXRhYmFzZVRhc2tzKHRoaXMpOwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0
YWJhc2U6Om1heGltdW1TaXplKCkgY29uc3QKQEAgLTQ3MCw3OSArMjg3LDYgQEAgdW5zaWduZWQg
bG9uZyBsb25nIERhdGFiYXNlOjptYXhpbXVtU2l6ZQogICAgIHJldHVybiBEYXRhYmFzZVRyYWNr
ZXI6OnRyYWNrZXIoKS5nZXRNYXhTaXplRm9yRGF0YWJhc2UodGhpcyk7CiB9CiAKLXZvaWQgRGF0
YWJhc2U6OmRpc2FibGVBdXRob3JpemVyKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhv
cml6ZXIpOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7Ci19Ci0KLXZvaWQg
RGF0YWJhc2U6OmVuYWJsZUF1dGhvcml6ZXIoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0
aG9yaXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOwotfQotCi12b2lk
IERhdGFiYXNlOjpzZXRBdXRob3JpemVyUmVhZE9ubHkoKQotewotICAgIEFTU0VSVChtX2RhdGFi
YXNlQXV0aG9yaXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFJlYWRPbmx5KCk7
Ci19Ci0KLWJvb2wgRGF0YWJhc2U6Omxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKQotewotICAg
IEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRo
b3JpemVyLT5sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCk7Ci19Ci0KLWJvb2wgRGF0YWJhc2U6
Omxhc3RBY3Rpb25XYXNJbnNlcnQoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXpl
cik7Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9uV2FzSW5zZXJ0
KCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OnJlc2V0RGVsZXRlcygpCi17Ci0gICAgQVNTRVJUKG1f
ZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXREZWxl
dGVzKCk7Ci19Ci0KLWJvb2wgRGF0YWJhc2U6OmhhZERlbGV0ZXMoKQotewotICAgIEFTU0VSVCht
X2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5o
YWREZWxldGVzKCk7Ci19Ci0KLXN0YXRpYyBpbnQgZ3VpZEZvck9yaWdpbkFuZE5hbWUoY29uc3Qg
U3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBTdHJpbmcgc3RyaW5n
SUQ7Ci0gICAgaWYgKG9yaWdpbi5lbmRzV2l0aCgiLyIpKQotICAgICAgICBzdHJpbmdJRCA9IG9y
aWdpbiArIG5hbWU7Ci0gICAgZWxzZQotICAgICAgICBzdHJpbmdJRCA9IG9yaWdpbiArICIvIiAr
IG5hbWU7Ci0KLSAgICAvLyBOb3RlOiBXZSBkb24ndCBoYXZlIHRvIHVzZSBBdG9taWNhbGx5SW5p
dGlhbGl6ZWRTdGF0aWMgaGVyZSBiZWNhdXNlCi0gICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgb25jZSBpbiB0aGUgY29uc3RydWN0b3Igb24gdGhlIG1haW4gdGhyZWFkCi0gICAgLy8gYmVm
b3JlIGFueSBvdGhlciB0aHJlYWRzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uIGFyZSB1c2VkLgot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIHN0cmluZ0lkZW50aWZpZXJNdXRleCwgKCkp
OwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihzdHJpbmdJZGVudGlmaWVyTXV0ZXgpOwotICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIGludD4gSURHdWlkTWFwOwotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoSURHdWlkTWFwLCBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLCAoKSk7Ci0gICAgaW50
IGd1aWQgPSBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLmdldChzdHJpbmdJRCk7Ci0gICAgaWYg
KCFndWlkKSB7Ci0gICAgICAgIHN0YXRpYyBpbnQgY3VycmVudE5ld0dVSUQgPSAxOwotICAgICAg
ICBndWlkID0gY3VycmVudE5ld0dVSUQrKzsKLSAgICAgICAgc3RyaW5nSWRlbnRpZmllclRvR1VJ
RE1hcC5zZXQoc3RyaW5nSUQsIGd1aWQpOwotICAgIH0KLQotICAgIHJldHVybiBndWlkOwotfQot
Ci12b2lkIERhdGFiYXNlOjpyZXNldEF1dGhvcml6ZXIoKQotewotICAgIGlmIChtX2RhdGFiYXNl
QXV0aG9yaXplcikKLSAgICAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7Ci19Ci0K
IHZvaWQgRGF0YWJhc2U6OnBlcmZvcm1Qb2xpY3lDaGVja3MoKQogewogICAgIC8vIEZJWE1FOiBD
b2RlIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyB3aWxsIG5lZWQgdG8gYmUgcnVuIHRvIGVuZm9y
Y2UgdGhlIHBlci1vcmlnaW4gc2l6ZSBsaW1pdCB0aGUgc3BlYyBtYW5kYXRlcy4KQEAgLTU1OSw5
MCArMzAzLDE0IEBAIHZvaWQgRGF0YWJhc2U6OnBlcmZvcm1Qb2xpY3lDaGVja3MoKQogCiBib29s
IERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShFeGNlcHRpb25Db2RlJiBlKQogewotICAg
IGlmICghbV9zcWxpdGVEYXRhYmFzZS5vcGVuKG1fZmlsZW5hbWUsIHRydWUpKSB7Ci0gICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UgYXQgcGF0aCAlcyIsIG1fZmlsZW5h
bWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5P
bkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB0
dXJuIG9uIGluY3JlbWVudGFsIGF1dG8tdmFjdXVtIGZvciBkYXRhYmFzZSAlcyIsIG1fZmlsZW5h
bWUuYXNjaWkoKS5kYXRhKCkpOworICAgIGlmIChBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3Bl
bkFuZFZlcmlmeShlKSkgeworICAgICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5k
YXRhYmFzZVRocmVhZCgpKQorICAgICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5k
YXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZU9wZW4odGhpcyk7CiAKLSAgICBBU1NFUlQo
bV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXpl
cihtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGlt
ZW91dChtYXhTcWxpdGVCdXN5V2FpdFRpbWUpOwotCi0gICAgU3RyaW5nIGN1cnJlbnRWZXJzaW9u
OwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLQotICAg
ICAgICBHdWlkVmVyc2lvbk1hcDo6aXRlcmF0b3IgZW50cnkgPSBndWlkVG9WZXJzaW9uTWFwKCku
ZmluZChtX2d1aWQpOwotICAgICAgICBpZiAoZW50cnkgIT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmVu
ZCgpKSB7Ci0gICAgICAgICAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChz
ZWUgdXBkYXRlR3VpZFZlcnNpb25NYXAoKSkuCi0gICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9
IGVudHJ5LT5zZWNvbmQuaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogZW50cnktPnNlY29uZDsKLSAg
ICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQ3VycmVudCBjYWNoZWQgdmVyc2lvbiBmb3IgZ3Vp
ZCAlaSBpcyAlcyIsIG1fZ3VpZCwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJObyBjYWNoZWQgdmVy
c2lvbiBmb3IgZ3VpZCAlaSIsIG1fZ3VpZCk7Ci0KLSAgICAgICAgICAgIGlmICghbV9zcWxpdGVE
YXRhYmFzZS50YWJsZUV4aXN0cyhkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkpIHsKLSAgICAgICAg
ICAgICAgICBtX25ldyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSAiICsgZGF0YWJhc2VJbmZvVGFibGVO
YW1lKCkgKyAiIChrZXkgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBD
T05GTElDVCBSRVBMQUNFLHZhbHVlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7Iikp
IHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIHRhYmxl
ICVzIGluIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkuYXNjaWkoKS5kYXRh
KCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAg
ICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENsb3Nl
IHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgIG1f
c3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFn
ZXRWZXJzaW9uRnJvbURhdGFiYXNlKGN1cnJlbnRWZXJzaW9uKSkgewotICAgICAgICAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBjdXJyZW50IHZlcnNpb24gZnJvbSBkYXRhYmFzZSAl
cyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAg
IGUgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFu
ZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJh
c2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoY3VycmVudFZlcnNpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIlJldHJpZXZlZCBjdXJyZW50IHZlcnNpb24gJXMgZnJvbSBk
YXRhYmFzZSAlcyIsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVn
TmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fbmV3IHx8
ICFtX2NyZWF0aW9uQ2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwg
IlNldHRpbmcgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQi
LCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRhYmFz
ZShtX2V4cGVjdGVkVmVyc2lvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMiLCBtX2V4cGVjdGVkVmVyc2lv
bi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGUgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KLSAgICAgICAg
ICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN1cnJl
bnRWZXJzaW9uID0gbV9leHBlY3RlZFZlcnNpb247Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgY3VycmVudFZlcnNpb24pOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRWZXJzaW9uLmlzTnVsbCgpKSB7Ci0gICAgICAg
IExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZG9lcyBub3QgaGF2ZSBpdHMgdmVyc2lvbiBz
ZXQiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgY3VycmVu
dFZlcnNpb24gPSAiIjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBp
c24ndCB0aGUgZW1wdHkgc3RyaW5nLCBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBkYXRhYmFzZSB2
ZXJzaW9uIHdlIGhhdmUgbWF0Y2hlcyB0aGF0IHZlcnNpb24uIE90aGVyd2lzZSwgc2V0IGFuIGV4
Y2VwdGlvbi4KLSAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpcyB0aGUgZW1wdHkgc3Ry
aW5nLCB0aGVuIHdlIGFsd2F5cyByZXR1cm4gd2l0aCB3aGF0ZXZlciB2ZXJzaW9uIG9mIHRoZSBk
YXRhYmFzZSB3ZSBoYXZlLgotICAgIGlmICgoIW1fbmV3IHx8ICFtX2NyZWF0aW9uQ2FsbGJhY2sp
ICYmIG1fZXhwZWN0ZWRWZXJzaW9uLmxlbmd0aCgpICYmIG1fZXhwZWN0ZWRWZXJzaW9uICE9IGN1
cnJlbnRWZXJzaW9uKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAicGFnZSBleHBlY3RzIHZl
cnNpb24gJXMgZnJvbSBkYXRhYmFzZSAlcywgd2hpY2ggYWN0dWFsbHkgaGFzIHZlcnNpb24gbmFt
ZSAlcyAtIG9wZW5EYXRhYmFzZSgpIGNhbGwgd2lsbCBmYWlsIiwgbV9leHBlY3RlZFZlcnNpb24u
YXNjaWkoKS5kYXRhKCksCi0gICAgICAgICAgICBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCku
ZGF0YSgpLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGUgPSBJTlZB
TElEX1NUQVRFX0VSUjsKLSAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJh
c2UgZmlsZS4KLSAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIC8vIEFsbCBjaGVj
a3MgcGFzc2VkIGFuZCB3ZSBzdGlsbCBoYXZlIGEgaGFuZGxlIHRvIHRoaXMgZGF0YWJhc2UgZmls
ZS4KLSAgICAvLyBNYWtlIHN1cmUgRGF0YWJhc2VUaHJlYWQgY2xvc2VzIGl0IHdoZW4gRGF0YWJh
c2VUaHJlYWQgZ29lcyBhd2F5LgotICAgIG1fb3BlbmVkID0gdHJ1ZTsKLSAgICBpZiAobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKQotICAgICAgICBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlz
KTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBEYXRh
YmFzZTo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmlu
ZyYgbmV3VmVyc2lvbiwKQEAgLTc3MiwxNCArNDQwLDYgQEAgU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvciogRGF0YWJhc2U6OnRyYQogICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmRhdGFiYXNlVGhyZWFkKCktPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKTsKIH0KIAotU3RyaW5n
IERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKLXsKLSAgICBpZiAobV9kZWxldGVkKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsK
LSAgICByZXR1cm4gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpLnRocmVhZHNhZmVDb3B5
KCk7Ci19Ci0KIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjp0YWJsZU5hbWVzKCkKIHsKICAgICAv
LyBGSVhNRTogTm90IHVzaW5nIHRocmVhZHNhZmVDb3B5IG9uIHRoZXNlIHN0cmluZ3MgbG9va3Mg
b2sgc2luY2UgdGhyZWFkcyB0YWtlIHN0cmljdCB0dXJucwpAQCAtNzk3LDE0ICs0NTcsNiBAQCBW
ZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6dGFibGVOYW1lcygpCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBEYXRhYmFzZTo6c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVy
c2lvbikKLXsKLSAgICBtX2V4cGVjdGVkVmVyc2lvbiA9IHZlcnNpb24udGhyZWFkc2FmZUNvcHko
KTsKLSAgICAvLyBVcGRhdGUgdGhlIGluIG1lbW9yeSBkYXRhYmFzZSB2ZXJzaW9uIG1hcC4KLSAg
ICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotICAgIHVwZGF0ZUd1aWRWZXJzaW9u
TWFwKG1fZ3VpZCwgdmVyc2lvbik7Ci19Ci0KIFNlY3VyaXR5T3JpZ2luKiBEYXRhYmFzZTo6c2Vj
dXJpdHlPcmlnaW4oKSBjb25zdAogewogICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmlzQ29udGV4dFRocmVhZCgpKQpAQCAtODE0LDI5ICs0NjYsNiBAQCBTZWN1cml0eU9yaWdpbiog
RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luCiAgICAgcmV0dXJuIDA7CiB9CiAKLVN0cmluZyBEYXRh
YmFzZTo6c3RyaW5nSWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAgLy8gUmV0dXJuIGEgZGVlcCBj
b3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQotICAgIHJldHVybiBtX25hbWUudGhy
ZWFkc2FmZUNvcHkoKTsKLX0KLQotU3RyaW5nIERhdGFiYXNlOjpkaXNwbGF5TmFtZSgpIGNvbnN0
Ci17Ci0gICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNh
ZmV0eQotICAgIHJldHVybiBtX2Rpc3BsYXlOYW1lLnRocmVhZHNhZmVDb3B5KCk7Ci19Ci0KLXVu
c2lnbmVkIGxvbmcgRGF0YWJhc2U6OmVzdGltYXRlZFNpemUoKSBjb25zdAotewotICAgIHJldHVy
biBtX2VzdGltYXRlZFNpemU7Ci19Ci0KLVN0cmluZyBEYXRhYmFzZTo6ZmlsZU5hbWUoKSBjb25z
dAotewotICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBz
YWZldHkKLSAgICByZXR1cm4gbV9maWxlbmFtZS50aHJlYWRzYWZlQ29weSgpOwotfQotCiB2b2lk
IERhdGFiYXNlOjppbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCkKIHsKICAgICBpbnQ2NF90IGZy
ZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLmZyZWVTcGFjZVNpemUoKTsKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZS5oCShyZXZpc2lvbiA2MTcwNSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOCArMzMsMTMgQEAKICNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTUUxpdGVE
YXRhYmFzZS5oIgotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgot
I2VuZGlmCiAKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERhdGFiYXNlQXV0aG9yaXplcjsKIGNs
YXNzIERhdGFiYXNlQ2FsbGJhY2s7Ci1jbGFzcyBEYXRhYmFzZVRocmVhZDsKIGNsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFNRTFRyYW5z
YWN0aW9uOwpAQCAtNTQsOCArNDksNiBAQCBjbGFzcyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
OwogY2xhc3MgU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOwogY2xhc3MgVm9pZENhbGxiYWNr
OwogCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCiBjbGFzcyBEYXRhYmFzZSA6IHB1Ymxp
YyBBYnN0cmFjdERhdGFiYXNlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZSgpOwpA
QCAtNjMsMzcgKzU2LDE3IEBAIHB1YmxpYzoKICAgICAvLyBEaXJlY3Qgc3VwcG9ydCBmb3IgdGhl
IERPTSBBUEkKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZT4gb3BlbkRhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
U3RyaW5nIHZlcnNpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29u
c3Q7CiAgICAgdm9pZCBjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29u
c3QgU3RyaW5nJiBuZXdWZXJzaW9uLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+
LAogICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjaz4sIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2spOwogICAg
IHZvaWQgdHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAogICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCByZWFkT25s
eSk7CiAKICAgICAvLyBJbnRlcm5hbCBlbmdpbmUgc3VwcG9ydAotICAgIHN0YXRpYyBjb25zdCBT
dHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpOwotCi0gICAgdm9pZCBkaXNhYmxlQXV0aG9y
aXplcigpOwotICAgIHZvaWQgZW5hYmxlQXV0aG9yaXplcigpOwotICAgIHZvaWQgc2V0QXV0aG9y
aXplclJlYWRPbmx5KCk7Ci0gICAgYm9vbCBsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCk7Ci0g
ICAgYm9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0KCk7Ci0gICAgdm9pZCByZXNldERlbGV0ZXMoKTsK
LSAgICBib29sIGhhZERlbGV0ZXMoKTsKLQogICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMo
KTsKIAotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKTsg
fQogICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CiAg
ICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9zcWxpdGVEYXRh
YmFzZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0lkZW50aWZpZXIoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZmlsZU5h
bWUoKSBjb25zdDsKLQotICAgIGJvb2wgZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmKTsK
LSAgICBib29sIHNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQg
c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgdmVyc2lvbk1hdGNo
ZXNFeHBlY3RlZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRD
bG9zZSgpOwogICAgIGJvb2wgZGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQpA
QCAtMTAxLDIxICs3NCwxNyBAQCBwdWJsaWM6CiAgICAgZW51bSBDbG9zZVBvbGljeSB7IERvTm90
UmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCwgUmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCB9Owog
ICAgIHZvaWQgY2xvc2UoQ2xvc2VQb2xpY3kpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZUltbWVk
aWF0ZWx5KCk7Ci0gICAgYm9vbCBvcGVuZWQoKSBjb25zdCB7IHJldHVybiBtX29wZW5lZDsgfQog
CiAgICAgdm9pZCBzdG9wKCk7CiAgICAgYm9vbCBzdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9z
dG9wcGVkOyB9CiAKLSAgICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4gbV9uZXc7IH0KLQog
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFzZVNpemUoKSBjb25zdDsKICAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKIAogICAgIC8vIENhbGxlZCBmcm9tIERh
dGFiYXNlVGhyZWFkLCBtdXN0IGJlIHByZXBhcmVkIHRvIHdvcmsgb24gdGhlIGJhY2tncm91bmQg
dGhyZWFkCi0gICAgdm9pZCByZXNldEF1dGhvcml6ZXIoKTsKICAgICB2b2lkIHBlcmZvcm1Qb2xp
Y3lDaGVja3MoKTsKIAotICAgIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShFeGNlcHRpb25Db2Rl
Jik7CiAKICAgICB2b2lkIGluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIHZv
aWQgc2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKik7CkBAIC0xMzcs
MzkgKzEwNiwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7
CiAKKyAgICBzdGF0aWMgdm9pZCBkZWxpdmVyUGVuZGluZ0NhbGxiYWNrKHZvaWQqKTsKKwogICAg
IERlcXVlPFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBtX3RyYW5zYWN0aW9uUXVldWU7CiAgICAg
TXV0ZXggbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleDsKICAgICBib29sIG1fdHJhbnNhY3Rp
b25JblByb2dyZXNzOwogICAgIGJvb2wgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkOwogCi0g
ICAgc3RhdGljIHZvaWQgZGVsaXZlclBlbmRpbmdDYWxsYmFjayh2b2lkKik7Ci0KLSAgICBSZWZQ
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAg
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW47CiAg
ICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW47
Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBpbnQgbV9ndWlkOwotICAgIFN0cmluZyBtX2V4cGVj
dGVkVmVyc2lvbjsKLSAgICBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKLSAgICB1bnNpZ25lZCBsb25n
IG1fZXN0aW1hdGVkU2l6ZTsKLSAgICBTdHJpbmcgbV9maWxlbmFtZTsKIAogICAgIGJvb2wgbV9k
ZWxldGVkOwotCiAgICAgYm9vbCBtX3N0b3BwZWQ7Ci0KLSAgICBib29sIG1fb3BlbmVkOwotCi0g
ICAgYm9vbCBtX25ldzsKLQotICAgIFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7Ci0g
ICAgUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gbV9kYXRhYmFzZUF1dGhvcml6ZXI7Ci0KLSAg
ICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gbV9jcmVhdGlvbkNhbGxiYWNrOwotCi0jaWZuZGVm
IE5ERUJVRwotICAgIFN0cmluZyBkYXRhYmFzZURlYnVnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygpICsgIjo6IiArIG1fbmFtZTsg
fQotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkocmV2aXNpb24gNjE3MDUpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTMgKzMw
LDE5IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RGF0YWJhc2VBdXRob3JpemVyOjpEYXRhYmFzZUF1dGhvcml6ZXIoKQorUGFzc1JlZlB0cjxEYXRh
YmFzZUF1dGhvcml6ZXI+IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VJbmZvVGFibGVOYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJh
c2VBdXRob3JpemVyKGRhdGFiYXNlSW5mb1RhYmxlTmFtZSkpOworfQorCitEYXRhYmFzZUF1dGhv
cml6ZXI6OkRhdGFiYXNlQXV0aG9yaXplcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxl
TmFtZSkKICAgICA6IG1fc2VjdXJpdHlFbmFibGVkKGZhbHNlKQorICAgICwgbV9kYXRhYmFzZUlu
Zm9UYWJsZU5hbWUoZGF0YWJhc2VJbmZvVGFibGVOYW1lKQogewogICAgIHJlc2V0KCk7CiAgICAg
YWRkV2hpdGVsaXN0ZWRGdW5jdGlvbnMoKTsKQEAgLTM4OCw3ICszOTQsNyBAQCB2b2lkIERhdGFi
YXNlQXV0aG9yaXplcjo6c2V0UmVhZE9ubHkoKQogICAgIG1fcmVhZE9ubHkgPSB0cnVlOwogfQog
Ci1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkZW55QmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJp
bmcmIHRhYmxlTmFtZSkKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFibGVO
YW1lKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKSBjb25zdAogewogICAgIGlmICghbV9zZWN1cml0
eUVuYWJsZWQpCiAgICAgICAgIHJldHVybiBTUUxBdXRoQWxsb3c7CkBAIC0zOTksNyArNDA1LDcg
QEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZGVueUJhc2VkT25UYWJsZQogICAgIC8vICAgIGVx
dWFsSWdub3JpbmdDYXNlKHRhYmxlTmFtZSwgInNxbGl0ZV9zZXF1ZW5jZSIpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKHRhYmxlTmFtZSwgRGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkK
ICAgICAvLyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCi0gICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHRhYmxlTmFtZSwgRGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkKKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodGFibGVOYW1lLCBtX2RhdGFiYXNlSW5mb1RhYmxlTmFt
ZSkpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIHJldHVybiBTUUxBdXRoQWxs
b3c7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCShyZXZpc2lvbiA2MTcw
NSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMTAgKzI4LDExIEBACiAjaWZuZGVmIERhdGFiYXNlQXV0aG9yaXplcl9oCiAjZGVm
aW5lIERhdGFiYXNlQXV0aG9yaXplcl9oCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0NCw3IEBAIGV4dGVybiBjb25zdCBpbnQg
U1FMQXV0aERlbnk7CiAKIGNsYXNzIERhdGFiYXNlQXV0aG9yaXplciA6IHB1YmxpYyBUaHJlYWRT
YWZlU2hhcmVkPERhdGFiYXNlQXV0aG9yaXplcj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IERhdGFiYXNlQXV0aG9yaXplcik7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZUF1
dGhvcml6ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSk7CiAK
ICAgICBpbnQgY3JlYXRlVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwogICAgIGludCBj
cmVhdGVUZW1wVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwpAQCAtOTcsOSArOTgsOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYWREZWxldGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYWREZWxl
dGVzOyB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VBdXRob3JpemVyKCk7CisgICAgRGF0YWJh
c2VBdXRob3JpemVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKTsKICAgICB2
b2lkIGFkZFdoaXRlbGlzdGVkRnVuY3Rpb25zKCk7Ci0gICAgaW50IGRlbnlCYXNlZE9uVGFibGVO
YW1lKGNvbnN0IFN0cmluZyYpOworICAgIGludCBkZW55QmFzZWRPblRhYmxlTmFtZShjb25zdCBT
dHJpbmcmKSBjb25zdDsKICAgICBpbnQgdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUoY29u
c3QgU3RyaW5nJik7CiAKICAgICBib29sIG1fc2VjdXJpdHlFbmFibGVkIDogMTsKQEAgLTEwOCw2
ICsxMDksOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZWFkT25seSA6IDE7CiAgICAgYm9vbCBt
X2hhZERlbGV0ZXMgOiAxOwogCisgICAgY29uc3QgU3RyaW5nIG1fZGF0YWJhc2VJbmZvVGFibGVO
YW1lOworCiAgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbV93aGl0ZWxpc3Rl
ZEZ1bmN0aW9uczsKIH07CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZpc2lv
biA2MTcwNSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw0MSArMzEsNTAgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICNpbmNsdWRl
ICJEYXRhYmFzZUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJT
UUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBTdHJpbmcmIERhdGFiYXNl
U3luYzo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkKK1Bhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBE
YXRhYmFzZVN5bmM6Om9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQ
YXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBuYW1lLCAoIl9fV2Vi
S2l0RGF0YWJhc2VJbmZvVGFibGVfXyIpKTsKLSAgICByZXR1cm4gbmFtZTsKLX0KKyAgICBBU1NF
UlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogCi1QYXNzUmVmUHRyPERhdGFiYXNlU3lu
Yz4gRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
b25nLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICAvLyBGSVhNRTogdW5jb21tZW50IHRoZSBhc3NlcnQgb25jZSB3ZSB1c2UgdGhlIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHBhcmFtZXRlcgotICAgIC8vQVNTRVJUKGNvbnRleHQtPmlzQ29u
dGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIURhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNhbkVz
dGFibGlzaERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
KSkgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGZvciBvcmlnaW4gJXMg
bm90IGFsbG93ZWQgdG8gYmUgZXN0YWJsaXNoZWQiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBjb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2Ug
PSBhZG9wdFJlZihuZXcgRGF0YWJhc2VTeW5jKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lv
biwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2spKTsKKworICAg
IGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnkoZWMpKSB7CisgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiRmFpbGVkIHRvIG9wZW4gYW5kIHZlcmlmeSB2ZXJzaW9uIChleHBlY3RlZCAlcykgb2Yg
ZGF0YWJhc2UgJXMiLCBleHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlLT5k
YXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgRGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0
RGF0YWJhc2VEZXRhaWxzKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlO
YW1lLCBlc3RpbWF0ZWRTaXplKTsKKworICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAmJiBkYXRh
YmFzZS0+bV9jcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7CisgICAgICAgIGRhdGFiYXNlLT5tX2V4
cGVjdGVkVmVyc2lvbiA9ICIiOworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkludm9raW5nIHRo
ZSBjcmVhdGlvbiBjYWxsYmFjayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsK
KyAgICAgICAgZGF0YWJhc2UtPnBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKCk7CisgICAgfQogCi0g
ICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRhdGFiYXNl
OwogfQogCiBEYXRhYmFzZVN5bmM6OkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJz
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+IGNyZWF0aW9uQ2FsbGJhY2spCi0gICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29u
dGV4dCkKLSAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX2V4
cGVjdGVkVmVyc2lvbihleHBlY3RlZFZlcnNpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAs
IG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1f
ZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQotICAgICwgbV9jcmVhdGlvbkNhbGxiYWNrKGNy
ZWF0aW9uQ2FsbGJhY2spCisgICAgOiBBYnN0cmFjdERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4
cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJh
Y2spCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAogRGF0
YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5jKCkKQEAgLTczLDI2ICs4Miw2NSBAQCBEYXRhYmFzZVN5
bmM6On5EYXRhYmFzZVN5bmMoKQogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAotU3RyaW5nIERhdGFiYXNlU3luYzo6dmVyc2lvbigp
IGNvbnN0Cit2b2lkIERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgRXhj
ZXB0aW9uQ29kZSYpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXND
b250ZXh0VGhyZWFkKCkpOwotICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBEYXRhYmFz
ZVN5bmM6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKQordm9pZCBE
YXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2Fs
bGJhY2s+LCBib29sLCBFeGNlcHRpb25Db2RlJikKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VTeW5j
Ojp0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9v
bCwgRXhjZXB0aW9uQ29kZSYpCitib29sIERhdGFiYXNlU3luYzo6b3BlbkFuZFZlcmlmeShFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5p
c0NvbnRleHRUaHJlYWQoKSk7CisgICAgcmV0dXJuIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KGVjKTsK
IH0KIAotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogRGF0YWJhc2VTeW5jOjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3QKK3ZvaWQgRGF0YWJhc2VTeW5jOjpwZXJmb3JtQ3JlYXRpb25DYWxs
YmFjaygpCiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0
VGhyZWFkKCkpOwotICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7Cisg
ICAgbV9jcmVhdGlvbkNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuZ2V0KCksIHRoaXMpOworICAgIG1fY3JlYXRpb25DYWxsYmFjayA9IDA7Cit9CisKK3ZvaWQg
RGF0YWJhc2VTeW5jOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKQoreworICAgIC8vIEZJWE1FOiB3
ZSBwcm9iYWJseSBuZWVkIHRvIGRvIHNvbWV0aGluZyBlbHNlIGluIGhlcmUgb3RoZXIgdGhhbiBj
YWxsaW5nIGNsb3NlSW1tZWRpYXRlbHkoKS4KKyAgICBjbG9zZUltbWVkaWF0ZWx5KCk7Cit9CisK
K2NsYXNzIENsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFzayA6IHB1YmxpYyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2s+IGNyZWF0ZShQYXNzUmVmUHRy
PERhdGFiYXNlU3luYz4gZGF0YWJhc2UpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENsb3Nl
U3luY0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFzayhkYXRhYmFzZSk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQorICAgIHsK
KyAgICAgICAgbV9kYXRhYmFzZS0+Y2xvc2VJbW1lZGlhdGVseSgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2soUGFzc1JlZlB0cjxE
YXRhYmFzZVN5bmM+IGRhdGFiYXNlKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxEYXRhYmFzZVN5bmM+IG1fZGF0YWJhc2U7Cit9Owor
Cit2b2lkIERhdGFiYXNlU3luYzo6Y2xvc2VJbW1lZGlhdGVseSgpCit7CisgICAgLy8gRklYTUU6
IHByb2JhYmx5IG5lZWQgdG8gZG8gbW9yZSB0aGluZ3MgaW4gaGVyZQorICAgIGlmICghbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkgeworICAgICAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKENsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhy
ZWFkVGFzazo6Y3JlYXRlKHRoaXMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKKworICAg
IGNsb3NlRGF0YWJhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVN5bmMuaAkocmV2aXNpb24gNjE3MDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDQ4ICszMCwzOSBAQAogI2RlZmluZSBE
YXRhYmFzZVN5bmNfaAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUgIkFic3RyYWN0
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaWZuZGVmIE5ERUJVRworI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOwog
Y2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworY2xhc3MgU2VjdXJpdHlPcmln
aW47CiAKIC8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkIGFuZCB1
c2VkIG9ubHkgb24gdGhlIHdvcmtlcidzIGNvbnRleHQgdGhyZWFkLgotY2xhc3MgRGF0YWJhc2VT
eW5jIDogcHVibGljIFJlZkNvdW50ZWQ8RGF0YWJhc2VTeW5jPiB7CitjbGFzcyBEYXRhYmFzZVN5
bmMgOiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7CiBwdWJsaWM6Ci0gICAgfkRhdGFiYXNlU3lu
YygpOworICAgIHZpcnR1YWwgfkRhdGFiYXNlU3luYygpOwogCi0gICAgLy8gRGlyZWN0IHN1cHBv
cnQgZm9yIHRoZSBET00gQVBJCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBv
cGVuRGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFj
az4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgdmVyc2lvbigpIGNvbnN0OwogICAgIHZv
aWQgY2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYg
bmV3VmVyc2lvbiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIEV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAv
LyBJbnRlcm5hbCBlbmdpbmUgc3VwcG9ydAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKLQotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrQXNEZWxldGVk
QW5kQ2xvc2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgpOwogCiBwcml2
YXRlOgogICAgIERhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
LCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+KTsKIAotICAgIFJlZlB0cjxTY3JpcHRFeGVj
dXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgU3RyaW5nIG1fbmFt
ZTsKLSAgICBTdHJpbmcgbV9leHBlY3RlZFZlcnNpb247Ci0gICAgU3RyaW5nIG1fZGlzcGxheU5h
bWU7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2VzdGltYXRlZFNpemU7Ci0gICAgUmVmUHRyPERhdGFi
YXNlQ2FsbGJhY2s+IG1fY3JlYXRpb25DYWxsYmFjazsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBT
dHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQotI2Vu
ZGlmCisgICAgYm9vbCBvcGVuQW5kVmVyaWZ5KEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHBl
cmZvcm1DcmVhdGlvbkNhbGxiYWNrKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA2MTcwNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA2LTIxICBEdW1pdHJ1IERhbmlsaXVjICA8
ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVW5jb21tZW50IGFsbCB0ZXN0IGNhc2VzIGluIG9wZW4tZGF0YWJhc2Utc3lu
Yy1pbnB1dHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDYwNworCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1z
eW5jLWlucHV0cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
cmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanM6CisKIDIwMTAtMDYtMjMgIEFs
ZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVu
LWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gNjE3MDUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNSw0ICs1LDYgQEAgUEFTUzogdW5kZWZpbmVkCiBQQVNTOiB1bmRlZmluZWQKIFBBU1M6
IHVuZGVmaW5lZAogUEFTUzogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcKK1BB
U1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuCitQQVNTOiBjYWxsaW5nIG9wZW5EYXRh
YmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sgc3VjY2VlZGVkLgogCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1z
eW5jLWlucHV0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwkocmV2aXNpb24gNjE3
MDUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1k
YXRhYmFzZS1zeW5jLWlucHV0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtNDYsMTkgKzQ2LDIxIEBA
IHRyeSB7CiAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7CiB9CiAKLS8v
IEZJWE1FOiBVbmNvbW1lbnQgdGhlc2UgdGVzdHMgd2hlbiB0aGUgc3luYyBEQiBBUEkgaXMgaW1w
bGVtZW50ZWQuCi0vL3RyeSB7Ci0vLyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIs
ICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwotLy8gICAgcG9zdE1lc3NhZ2Uo
IlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuIik7Ci0vL30gY2F0Y2ggKGVycikg
ewotLy8gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Ci0vL30KLS8vCi0v
L3RyeSB7Ci0vLyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24i
LCAiREJEZXNjcmlwdGlvbiIsIDEwMjQsIGZ1bmN0aW9uKGRiKSB7IH0pOwotLy8gICAgcG9zdE1l
c3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGggYSBjcmVhdGlvbiBj
YWxsYmFjayBzdWNjZWVkZWQuIik7Ci0vL30gY2F0Y2ggKGVycikgewotLy8gICAgcG9zdE1lc3Nh
Z2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Ci0vL30KK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0
YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsK
KyAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4iKTsK
K30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2Up
OworfQorCit0cnkgeworICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFiYXNlLCBvdGhl
cndpc2UgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIHdvbid0IGJlIGludm9rZWQuCisgICAgZGIgPSBv
cGVuRGF0YWJhc2VTeW5jKCJEQk5hbWVDcmVhdGlvbkNhbGxiYWNrIiArIChuZXcgRGF0ZSgpKS5n
ZXRUaW1lKCksICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGRiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBh
IGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5t
ZXNzYWdlKTsKK30KIAogcG9zdE1lc3NhZ2UoImRvbmUiKTsK
</data>
<flag name="commit-queue"
          id="46484"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59566</attachid>
            <date>2010-06-23 15:17:23 -0700</date>
            <delta_ts>2010-06-23 16:14:31 -0700</delta_ts>
            <desc>patch #1: implement DatabaseSync::openDatabaseSync()</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>66339</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTcxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODEgQEAKKzIwMTAtMDYtMjMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKCkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisgICAgICAg
ICogc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJp
ZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRUZXh0VmFs
dWVJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRNdXRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpndWlkVG9WZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUd1aWRW
ZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRUb0RhdGFiYXNlTWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6Omd1aWRGb3JPcmlnaW5BbmROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6dmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0
RGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RE
YXRhYmFzZTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFz
ZTo6ZXN0aW1hdGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpm
aWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZVZl
cnNpb25LZXkpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lv
bkZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZXRW
ZXJzaW9uSW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjp2
ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6OnNldEV4cGVjdGVkVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpkaXNhYmxlQXV0aG9yaXplcik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjplbmFibGVBdXRob3JpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25XYXNJbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6
QWJzdHJhY3REYXRhYmFzZTo6cmVzZXREZWxldGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OmhhZERlbGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRh
YmFzZTo6cmVzZXRBdXRob3JpemVyKToKKyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJh
c2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Om9wZW5lZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjppc05ldyk6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZURlYnVnTmFtZSk6CisgICAgICAgICogc3RvcmFn
ZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNyZWF0aW9uQ2FsbGJh
Y2tUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDcmVhdGlvbkNhbGxi
YWNrVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDcmVhdGlv
bkNhbGxiYWNrVGFzazo6RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlm
eSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2U6OnNxbGl0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9y
aXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OkRhdGFiYXNlQXV0aG9yaXpl
cik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFi
bGVOYW1lKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oOgorICAgICAg
ICAqIHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
U3luYzo6b3BlbkRhdGFiYXNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6
OkRhdGFiYXNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OmNoYW5nZVZl
cnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2s6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVh
ZFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb3NlU3luY0RhdGFiYXNl
T25Db250ZXh0VGhyZWFkVGFzazo6Q2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6Y2xvc2VJbW1lZGlhdGVseSk6Cisg
ICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVN5bmMuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFi
YXNlVGFzay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFz
ZU9wZW5UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT3BlblRhc2s6OmRvUGVyZm9y
bVRhc2spOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmg6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZU9wZW5UYXNrOjpjcmVhdGUpOgorCiAyMDEwLTA2LTIzICBTdGVwaGVuIFdo
aXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIEh5YXR0LgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkocmV2aXNp
b24gNjE3MTApCisrKyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDkgKzMwLDEzMiBAQAogI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2Uu
aCIKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKKyNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIu
aCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgor
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3VsdEZy
b21EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0cmlu
ZyYgcmVzdWx0U3RyaW5nKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1
ZXJ5KTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKKworICAgIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHBy
ZXBhcmluZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcyki
LCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9
PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgcmVzdWx0U3RyaW5nID0gc3RhdGVtZW50LmdldENv
bHVtblRleHQoMCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAocmVzdWx0
ID09IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgcmVzdWx0U3RyaW5nID0gU3RyaW5nKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBy
ZWFkaW5nIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNj
aWkoKS5kYXRhKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgc2V0VGV4
dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChk
YiwgcXVlcnkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOworCisgICAg
aWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBwcmVwYXJlIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0
YXRlbWVudC5iaW5kVGV4dCgxLCB2YWx1ZSk7CisKKyAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3Rl
cCgpOworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBzdGVwIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVz
KSIsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCisvLyBGSVhNRTogbW92ZSBhbGwgZ3VpZC1yZWxhdGVk
IGZ1bmN0aW9ucyB0byBhIERhdGFiYXNlVmVyc2lvblRyYWNrZXIgY2xhc3MuCitzdGF0aWMgTXV0
ZXgmIGd1aWRNdXRleCgpCit7CisgICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRv
bWljYWxseUluaXRpYWxpemVkU3RhdGljIGhlcmUgYmVjYXVzZQorICAgIC8vIHRoaXMgZnVuY3Rp
b24gaXMgY2FsbGVkIG9uY2UgaW4gdGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRocmVhZAor
ICAgIC8vIGJlZm9yZSBhbnkgb3RoZXIgdGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBh
cmUgdXNlZC4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBtdXRleCwgKCkpOworICAg
IHJldHVybiBtdXRleDsKK30KKwordHlwZWRlZiBIYXNoTWFwPGludCwgU3RyaW5nPiBHdWlkVmVy
c2lvbk1hcDsKK3N0YXRpYyBHdWlkVmVyc2lvbk1hcCYgZ3VpZFRvVmVyc2lvbk1hcCgpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkVmVyc2lvbk1hcCwgbWFwLCAoKSk7CisgICAgcmV0
dXJuIG1hcDsKK30KKworLy8gTk9URTogQ2FsbGVyIG11c3QgbG9jayBndWlkTXV0ZXgoKS4KK3N0
YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVHdWlkVmVyc2lvbk1hcChpbnQgZ3VpZCwgU3RyaW5nIG5l
d1ZlcnNpb24pCit7CisgICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgorICAg
IEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9jaygpKTsKKworICAgIC8vIE5vdGU6IEl0IGlzIG5v
dCBzYWZlIHRvIHB1dCBhbiBlbXB0eSBzdHJpbmcgaW50byB0aGUgZ3VpZFRvVmVyc2lvbk1hcCgp
IG1hcC4KKyAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGUgbWFwIGlzIGNyb3NzLXRocmVhZCwgYnV0
IGVtcHR5IHN0cmluZ3MgYXJlIHBlci10aHJlYWQuCisgICAgLy8gVGhlIGNvcHkoKSBmdW5jdGlv
biBtYWtlcyBhIHZlcnNpb24gb2YgdGhlIHN0cmluZyB5b3UgY2FuIHVzZSBvbiB0aGUgY3VycmVu
dAorICAgIC8vIHRocmVhZCwgYnV0IHdlIG5lZWQgYSBzdHJpbmcgd2UgY2FuIGtlZXAgaW4gYSBj
cm9zcy10aHJlYWQgZGF0YSBzdHJ1Y3R1cmUuCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBxdWl0
ZS1hd2t3YXJkIHJlc3RyaWN0aW9uIHRvIGhhdmUgdG8gcHJvZ3JhbSB3aXRoLgorCisgICAgLy8g
TWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIGNvbW1lbnQgYWJvdmUpLgorICAg
IGd1aWRUb1ZlcnNpb25NYXAoKS5zZXQoZ3VpZCwgbmV3VmVyc2lvbi5pc0VtcHR5KCkgPyBTdHJp
bmcoKSA6IG5ld1ZlcnNpb24udGhyZWFkc2FmZUNvcHkoKSk7Cit9CisKK3R5cGVkZWYgSGFzaE1h
cDxpbnQsIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+Kj4gR3VpZERhdGFiYXNlTWFwOworc3Rh
dGljIEd1aWREYXRhYmFzZU1hcCYgZ3VpZFRvRGF0YWJhc2VNYXAoKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoR3VpZERhdGFiYXNlTWFwLCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFwOwor
fQorCitzdGF0aWMgaW50IGd1aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYgb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgU3RyaW5nIHN0cmluZ0lEOworICAgIGlmIChv
cmlnaW4uZW5kc1dpdGgoIi8iKSkKKyAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyBuYW1lOwor
ICAgIGVsc2UKKyAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyAiLyIgKyBuYW1lOworCisgICAg
Ly8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
IGhlcmUgYmVjYXVzZQorICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgaW4gdGhl
IGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRocmVhZAorICAgIC8vIGJlZm9yZSBhbnkgb3RoZXIg
dGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBhcmUgdXNlZC4KKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKE11dGV4LCBzdHJpbmdJZGVudGlmaWVyTXV0ZXgsICgpKTsKKyAgICBNdXRleExv
Y2tlciBsb2NrZXIoc3RyaW5nSWRlbnRpZmllck11dGV4KTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBpbnQ+IElER3VpZE1hcDsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKElER3VpZE1h
cCwgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcCwgKCkpOworICAgIGludCBndWlkID0gc3RyaW5n
SWRlbnRpZmllclRvR1VJRE1hcC5nZXQoc3RyaW5nSUQpOworICAgIGlmICghZ3VpZCkgeworICAg
ICAgICBzdGF0aWMgaW50IGN1cnJlbnROZXdHVUlEID0gMTsKKyAgICAgICAgZ3VpZCA9IGN1cnJl
bnROZXdHVUlEKys7CisgICAgICAgIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuc2V0KHN0cmlu
Z0lELCBndWlkKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ3VpZDsKK30KKwogc3RhdGljIGJvb2wg
aXNEYXRhYmFzZUF2YWlsYWJsZSA9IHRydWU7CiAKIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6aXNB
dmFpbGFibGUoKQpAQCAtNDUsMTAgKzE2OCwzMDQgQEAgdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpz
ZXRJc0F2YWlsYWJsZShibwogICAgIGlzRGF0YWJhc2VBdmFpbGFibGUgPSBhdmFpbGFibGU7CiB9
CiAKKy8vIHN0YXRpYworY29uc3QgU3RyaW5nJiBBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZUlu
Zm9UYWJsZU5hbWUoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBuYW1lLCAo
Il9fV2ViS2l0RGF0YWJhc2VJbmZvVGFibGVfXyIpKTsKKyAgICByZXR1cm4gbmFtZTsKK30KKwor
QWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJz
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCisgICAgOiBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKKyAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3Ry
aW5nKCkpCisgICAgLCBtX2V4cGVjdGVkVmVyc2lvbihleHBlY3RlZFZlcnNpb24uY3Jvc3NUaHJl
YWRTdHJpbmcoKSkKKyAgICAsIG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUuY3Jvc3NUaHJlYWRT
dHJpbmcoKSkKKyAgICAsIG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQorICAgICwgbV9n
dWlkKDApCisgICAgLCBtX29wZW5lZChmYWxzZSkKKyAgICAsIG1fbmV3KGZhbHNlKQoreworICAg
IEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0VGhyZWFk
U2VjdXJpdHlPcmlnaW4gPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2lu
KCk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplciA9IERhdGFiYXNlQXV0aG9yaXplcjo6Y3Jl
YXRlKGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKTsKKworICAgIGlmIChtX25hbWUuaXNOdWxsKCkp
CisgICAgICAgIG1fbmFtZSA9ICIiOworCisgICAgbV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5h
bWUoc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbmFtZSk7CisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworCisgICAgICAgIEhhc2hTZXQ8QWJzdHJh
Y3REYXRhYmFzZSo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsK
KyAgICAgICAgaWYgKCFoYXNoU2V0KSB7CisgICAgICAgICAgICBoYXNoU2V0ID0gbmV3IEhhc2hT
ZXQ8QWJzdHJhY3REYXRhYmFzZSo+OworICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VNYXAoKS5z
ZXQobV9ndWlkLCBoYXNoU2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGhhc2hTZXQtPmFkZCh0
aGlzKTsKKyAgICB9CisKKyAgICBtX2ZpbGVuYW1lID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
KCkuZnVsbFBhdGhGb3JEYXRhYmFzZShzZWN1cml0eU9yaWdpbigpLCBtX25hbWUpOworICAgIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKK30KKwogQWJz
dHJhY3REYXRhYmFzZTo6fkFic3RyYWN0RGF0YWJhc2UoKQogewogfQogCit2b2lkIEFic3RyYWN0
RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UoKQoreworICAgIGlmICghbV9vcGVuZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICBtX29wZW5lZCA9
IGZhbHNlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsK
KworICAgICAgICBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0Rh
dGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7CisgICAgICAgIEFTU0VSVChoYXNoU2V0KTsKKyAgICAg
ICAgQVNTRVJUKGhhc2hTZXQtPmNvbnRhaW5zKHRoaXMpKTsKKyAgICAgICAgaGFzaFNldC0+cmVt
b3ZlKHRoaXMpOworICAgICAgICBpZiAoaGFzaFNldC0+aXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBndWlkVG9EYXRhYmFzZU1hcCgpLnJlbW92ZShtX2d1aWQpOworICAgICAgICAgICAgZGVsZXRl
IGhhc2hTZXQ7CisgICAgICAgICAgICBndWlkVG9WZXJzaW9uTWFwKCkucmVtb3ZlKG1fZ3VpZCk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9u
KCkgY29uc3QKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgIHJl
dHVybiBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCkudGhyZWFkc2FmZUNvcHkoKTsKK30K
Kworc3RhdGljIGNvbnN0IGludCBtYXhTcWxpdGVCdXN5V2FpdFRpbWUgPSAzMDAwMDsKK2Jvb2wg
QWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJz
aW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3NxbGl0
ZURhdGFiYXNlLm9wZW4obV9maWxlbmFtZSwgdHJ1ZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gb3BlbiBkYXRhYmFzZSBhdCBwYXRoICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFs
QXV0b1ZhY3V1bSgpKQorICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3Jl
bWVudGFsIGF1dG8tdmFjdXVtIGZvciBkYXRhYmFzZSAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5k
YXRhKCkpOworCisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX3NxbGl0
ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fc3Fs
aXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKKworICAg
IFN0cmluZyBjdXJyZW50VmVyc2lvbjsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihndWlkTXV0ZXgoKSk7CisKKyAgICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5
ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9
IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgeworICAgICAgICAgICAgLy8gTWFwIG51bGwgc3Ry
aW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgorICAgICAg
ICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gU3RyaW5nKCIi
KSA6IGVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQg
Y2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9u
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiTm8gY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkiLCBtX2d1aWQpOworCisgICAg
ICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UudGFibGVFeGlzdHMoZGF0YWJhc2VJbmZvVGFi
bGVOYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgbV9uZXcgPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUg
IiArIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwgT04gQ09O
RkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7CisgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIGNyZWF0ZSB0YWJsZSAlcyBpbiBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlSW5mb1Rh
YmxlTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4K
KyAgICAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIWdldFZlcnNpb25Gcm9tRGF0YWJhc2UoY3VycmVudFZlcnNp
b24pKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQg
dmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAg
ICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgorICAgICAg
ICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3VycmVudFZlcnNpb24u
bGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlJldHJpZXZlZCBj
dXJyZW50IHZlcnNpb24gJXMgZnJvbSBkYXRhYmFzZSAlcyIsIGN1cnJlbnRWZXJzaW9uLmFzY2lp
KCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIW1fbmV3IHx8IHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKSB7
CisgICAgICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTZXR0aW5nIHZlcnNpb24gJXMgaW4g
ZGF0YWJhc2UgJXMgdGhhdCB3YXMganVzdCBjcmVhdGVkIiwgbV9leHBlY3RlZFZlcnNpb24uYXNj
aWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAg
ICAgICAgICAgIGlmICghc2V0VmVyc2lvbkluRGF0YWJhc2UobV9leHBlY3RlZFZlcnNpb24pKSB7
CisgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCB2ZXJzaW9uICVz
IGluIGRhdGFiYXNlICVzIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFi
YXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFu
ZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURh
dGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBtX2V4cGVjdGVk
VmVyc2lvbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25N
YXAobV9ndWlkLCBjdXJyZW50VmVyc2lvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
Y3VycmVudFZlcnNpb24uaXNOdWxsKCkpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRh
YmFzZSAlcyBkb2VzIG5vdCBoYXZlIGl0cyB2ZXJzaW9uIHNldCIsIGRhdGFiYXNlRGVidWdOYW1l
KCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBjdXJyZW50VmVyc2lvbiA9ICIiOworICAgIH0K
KworICAgIC8vIElmIHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlzbid0IHRoZSBlbXB0eSBzdHJpbmcs
IGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRhdGFiYXNlIHZlcnNpb24gd2UgaGF2ZSBtYXRjaGVz
IHRoYXQgdmVyc2lvbi4gT3RoZXJ3aXNlLCBzZXQgYW4gZXhjZXB0aW9uLgorICAgIC8vIElmIHRo
ZSBleHBlY3RlZCB2ZXJzaW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gd2UgYWx3YXlzIHJl
dHVybiB3aXRoIHdoYXRldmVyIHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIHdlIGhhdmUuCisgICAg
aWYgKCghbV9uZXcgfHwgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UpICYmIG1fZXhwZWN0
ZWRWZXJzaW9uLmxlbmd0aCgpICYmIG1fZXhwZWN0ZWRWZXJzaW9uICE9IGN1cnJlbnRWZXJzaW9u
KSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAicGFnZSBleHBlY3RzIHZlcnNpb24gJXMgZnJv
bSBkYXRhYmFzZSAlcywgd2hpY2ggYWN0dWFsbHkgaGFzIHZlcnNpb24gbmFtZSAlcyAtIG9wZW5E
YXRhYmFzZSgpIGNhbGwgd2lsbCBmYWlsIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRh
KCksCisgICAgICAgICAgICBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBjdXJy
ZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9F
UlI7CisgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCisg
ICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIG1fb3BlbmVkID0gdHJ1ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBBYnN0cmFjdERhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Lmdl
dCgpOworfQorCitTZWN1cml0eU9yaWdpbiogQWJzdHJhY3REYXRhYmFzZTo6c2VjdXJpdHlPcmln
aW4oKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5n
ZXQoKTsKK30KKworU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIoKSBj
b25zdAoreworICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVh
ZCBzYWZldHkKKyAgICByZXR1cm4gbV9uYW1lLnRocmVhZHNhZmVDb3B5KCk7Cit9CisKK1N0cmlu
ZyBBYnN0cmFjdERhdGFiYXNlOjpkaXNwbGF5TmFtZSgpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJu
IGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQorICAgIHJldHVybiBt
X2Rpc3BsYXlOYW1lLnRocmVhZHNhZmVDb3B5KCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgQWJzdHJh
Y3REYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZXN0aW1h
dGVkU2l6ZTsKK30KKworU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OmZpbGVOYW1lKCkgY29uc3QK
K3sKKyAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2Fm
ZXR5CisgICAgcmV0dXJuIG1fZmlsZW5hbWUudGhyZWFkc2FmZUNvcHkoKTsKK30KKworLy8gc3Rh
dGljCitjb25zdCBTdHJpbmcmIEFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlVmVyc2lvbktleSgp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGtleSwgKCJXZWJLaXREYXRhYmFz
ZVZlcnNpb25LZXkiKSk7CisgICAgcmV0dXJuIGtleTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFi
YXNlOjpnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgZ2V0VmVyc2lvblF1ZXJ5LCAoIlNFTEVDVCB2YWx1ZSBG
Uk9NICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgV0hFUkUga2V5ID0gJyIgKyBkYXRh
YmFzZVZlcnNpb25LZXkoKSArICInOyIpKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5k
aXNhYmxlKCk7CisKKyAgICBib29sIHJlc3VsdCA9IHJldHJpZXZlVGV4dFJlc3VsdEZyb21EYXRh
YmFzZShtX3NxbGl0ZURhdGFiYXNlLCBnZXRWZXJzaW9uUXVlcnkudGhyZWFkc2FmZUNvcHkoKSwg
dmVyc2lvbik7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHJldHJpZXZlIHZlcnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCku
YXNjaWkoKS5kYXRhKCkpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOwor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpzZXRWZXJz
aW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgLy8gVGhlIElOU0VS
VCB3aWxsIHJlcGxhY2UgYW4gZXhpc3RpbmcgZW50cnkgZm9yIHRoZSBkYXRhYmFzZSB3aXRoIHRo
ZSBuZXcgdmVyc2lvbiBudW1iZXIsIGR1ZSB0byB0aGUgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExB
Q0UKKyAgICAvLyBjbGF1c2UgaW4gdGhlIENSRUFURSBzdGF0ZW1lbnQgKHNlZSBEYXRhYmFzZTo6
cGVyZm9ybU9wZW5BbmRWZXJpZnkoKSkuCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IHNldFZlcnNpb25RdWVyeSwgKCJJTlNFUlQgSU5UTyAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1l
KCkgKyAiIChrZXksIHZhbHVlKSBWQUxVRVMgKCciICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAi
JywgPyk7IikpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKKworICAg
IGJvb2wgcmVzdWx0ID0gc2V0VGV4dFZhbHVlSW5EYXRhYmFzZShtX3NxbGl0ZURhdGFiYXNlLCBz
ZXRWZXJzaW9uUXVlcnkudGhyZWFkc2FmZUNvcHkoKSwgdmVyc2lvbik7CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFi
YXNlICglcykiLCB2ZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBzZXRWZXJzaW9uUXVlcnkuYXNjaWko
KS5kYXRhKCkpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9uTWF0Y2hl
c0V4cGVjdGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZXhwZWN0ZWRWZXJzaW9uLmlzRW1wdHko
KSkgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgICAgICBy
ZXR1cm4gbV9leHBlY3RlZFZlcnNpb24gPT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQp
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6
OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgbV9leHBl
Y3RlZFZlcnNpb24gPSB2ZXJzaW9uLnRocmVhZHNhZmVDb3B5KCk7CisgICAgLy8gVXBkYXRlIHRo
ZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAuCisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KGd1aWRNdXRleCgpKTsKKyAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIHZlcnNpb24p
OworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmRpc2FibGVBdXRob3JpemVyKCkKK3sKKyAg
ICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJhc2VBdXRob3JpemVy
LT5kaXNhYmxlKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6ZW5hYmxlQXV0aG9yaXpl
cigpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNl
QXV0aG9yaXplci0+ZW5hYmxlKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0QXV0
aG9yaXplclJlYWRPbmx5KCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwor
ICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5zZXRSZWFkT25seSgpOworfQorCitib29sIEFic3Ry
YWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKQoreworICAgIEFTU0VSVCht
X2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5s
YXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6
bGFzdEFjdGlvbldhc0luc2VydCgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVy
KTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25XYXNJbnNlcnQo
KTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXNldERlbGV0ZXMoKQoreworICAgIEFT
U0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJl
c2V0RGVsZXRlcygpOworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6OmhhZERlbGV0ZXMoKQor
eworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgcmV0dXJuIG1fZGF0YWJh
c2VBdXRob3JpemVyLT5oYWREZWxldGVzKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6
cmVzZXRBdXRob3JpemVyKCkKK3sKKyAgICBpZiAobV9kYXRhYmFzZUF1dGhvcml6ZXIpCisgICAg
ICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5yZXNldCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvQWJzdHJhY3REYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9BYnN0
cmFjdERhdGFiYXNlLmgJKHJldmlzaW9uIDYxNzEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0Fic3Ry
YWN0RGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDIxIEBACiAjaWYgRU5B
QkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJT
UUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVTaGFyZWQuaD4KKyNpZm5kZWYgTkRFQlVHCisjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERhdGFiYXNl
QXV0aG9yaXplcjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0
eU9yaWdpbjsKIAordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKwogY2xhc3MgQWJzdHJhY3RE
YXRhYmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPEFic3RyYWN0RGF0YWJhc2U+IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwpAQCAtNDYsMTUgKzU0LDY5IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkFic3RyYWN0RGF0YWJhc2UoKTsKIAotICAgIHZpcnR1
YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3Ry
aW5nIGZpbGVOYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBj
b25zdDsKKworICAgIGJvb2wgb3BlbmVkKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuZWQ7IH0KKyAg
ICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4gbV9uZXc7IH0KKworICAgIHZpcnR1YWwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAg
IHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CisgICAgdmly
dHVhbCBTdHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5n
IGRpc3BsYXlOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OworCisg
ICAgLy8gRklYTUU6IG1vdmUgYWxsIHZlcnNpb24tcmVsYXRlZCBtZXRob2RzIHRvIGEgRGF0YWJh
c2VWZXJzaW9uVHJhY2tlciBjbGFzcworICAgIGJvb2wgdmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgp
IGNvbnN0OworICAgIHZvaWQgc2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lv
bik7CisgICAgYm9vbCBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbik7Cisg
ICAgYm9vbCBzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24pOworCisg
ICAgdm9pZCBkaXNhYmxlQXV0aG9yaXplcigpOworICAgIHZvaWQgZW5hYmxlQXV0aG9yaXplcigp
OworICAgIHZvaWQgc2V0QXV0aG9yaXplclJlYWRPbmx5KCk7CisgICAgYm9vbCBsYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlKCk7CisgICAgYm9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0KCk7CisgICAg
dm9pZCByZXNldERlbGV0ZXMoKTsKKyAgICBib29sIGhhZERlbGV0ZXMoKTsKKyAgICB2b2lkIHJl
c2V0QXV0aG9yaXplcigpOwogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9z
ZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgpID0gMDsKKworcHJv
dGVjdGVkOgorICAgIEFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpOworCisgICAgdm9pZCBjbG9zZURhdGFiYXNlKCk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgRXhjZXB0aW9uQ29kZSYgZWMpOworCisgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VJbmZvVGFibGVOYW1lKCk7CisKKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4g
bV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW47CisKKyAgICBTdHJpbmcgbV9uYW1lOworICAg
IFN0cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsKKyAgICBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKKyAg
ICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKKyAgICBTdHJpbmcgbV9maWxlbmFtZTsK
KworICAgIFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7CisKKyNpZm5kZWYgTkRFQlVH
CisgICAgU3RyaW5nIGRhdGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
VGhyZWFkU2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVZlcnNpb25L
ZXkoKTsKKworICAgIGludCBtX2d1aWQ7CisgICAgYm9vbCBtX29wZW5lZDsKKyAgICBib29sIG1f
bmV3OworCisgICAgUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gbV9kYXRhYmFzZUF1dGhvcml6
ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJ
KHJldmlzaW9uIDYxNzEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogI2luY2x1
ZGUgIkNoYW5nZVZlcnNpb25XcmFwcGVyLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVy
LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGFz
ay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCkBAIC01MCw3ICs0OSw2IEBACiAjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKICNpbmNsdWRlICJWb2lkQ2FsbGJhY2suaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTY0LDgxICs2MiwyNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLS8vIElmIHdlIHNsZWVwIGZvciBtb3JlIHRoZSAzMCBzZWNvbmRzIHdo
aWxlIGJsb2NrZWQgb24gU1FMSVRFX0JVU1ksIGdpdmUgdXAuCi1zdGF0aWMgY29uc3QgaW50IG1h
eFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMwMDAwOwotCi1jb25zdCBTdHJpbmcmIERhdGFiYXNlOjpk
YXRhYmFzZUluZm9UYWJsZU5hbWUoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBuYW1lLCAoIl9fV2ViS2l0RGF0YWJhc2VJbmZvVGFibGVfXyIpKTsKLSAgICByZXR1cm4gbmFt
ZTsKLX0KLQotc3RhdGljIE11dGV4JiBndWlkTXV0ZXgoKQotewotICAgIC8vIE5vdGU6IFdlIGRv
bid0IGhhdmUgdG8gdXNlIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyBoZXJlIGJlY2F1c2UK
LSAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGluIHRoZSBjb25zdHJ1Y3RvciBv
biB0aGUgbWFpbiB0aHJlYWQKLSAgICAvLyBiZWZvcmUgYW55IG90aGVyIHRocmVhZHMgdGhhdCBj
YWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRl
eCwgbXV0ZXgsICgpKTsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxp
bnQsIFN0cmluZz4gR3VpZFZlcnNpb25NYXA7Ci1zdGF0aWMgR3VpZFZlcnNpb25NYXAmIGd1aWRU
b1ZlcnNpb25NYXAoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoR3VpZFZlcnNpb25NYXAs
IG1hcCwgKCkpOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLS8vIE5PVEU6IENhbGxlciBtdXN0IGxv
Y2sgZ3VpZE11dGV4KCkuCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlR3VpZFZlcnNpb25NYXAo
aW50IGd1aWQsIFN0cmluZyBuZXdWZXJzaW9uKQotewotICAgIC8vIEVuc3VyZSB0aGUgdGhlIG11
dGV4IGlzIGxvY2tlZC4KLSAgICBBU1NFUlQoIWd1aWRNdXRleCgpLnRyeUxvY2soKSk7Ci0KLSAg
ICAvLyBOb3RlOiBJdCBpcyBub3Qgc2FmZSB0byBwdXQgYW4gZW1wdHkgc3RyaW5nIGludG8gdGhl
IGd1aWRUb1ZlcnNpb25NYXAoKSBtYXAuCi0gICAgLy8gVGhhdCdzIGJlY2F1c2UgdGhlIG1hcCBp
cyBjcm9zcy10aHJlYWQsIGJ1dCBlbXB0eSBzdHJpbmdzIGFyZSBwZXItdGhyZWFkLgotICAgIC8v
IFRoZSBjb3B5KCkgZnVuY3Rpb24gbWFrZXMgYSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgeW91IGNh
biB1c2Ugb24gdGhlIGN1cnJlbnQKLSAgICAvLyB0aHJlYWQsIGJ1dCB3ZSBuZWVkIGEgc3RyaW5n
IHdlIGNhbiBrZWVwIGluIGEgY3Jvc3MtdGhyZWFkIGRhdGEgc3RydWN0dXJlLgotICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGEgcXVpdGUtYXdrd2FyZCByZXN0cmljdGlvbiB0byBoYXZlIHRvIHByb2dy
YW0gd2l0aC4KLQotICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSBj
b21tZW50IGFib3ZlKS4KLSAgICBndWlkVG9WZXJzaW9uTWFwKCkuc2V0KGd1aWQsIG5ld1ZlcnNp
b24uaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBuZXdWZXJzaW9uLnRocmVhZHNhZmVDb3B5KCkpOwot
fQotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBIYXNoU2V0PERhdGFiYXNlKj4qPiBHdWlkRGF0YWJh
c2VNYXA7Ci1zdGF0aWMgR3VpZERhdGFiYXNlTWFwJiBndWlkVG9EYXRhYmFzZU1hcCgpCi17Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkRGF0YWJhc2VNYXAsIG1hcCwgKCkpOwotICAgIHJl
dHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFiYXNlVmVyc2lvbktleSgp
Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGtleSwgKCJXZWJLaXREYXRhYmFz
ZVZlcnNpb25LZXkiKSk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotc3RhdGljIGludCBndWlkRm9y
T3JpZ2luQW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
LQogY2xhc3MgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxEYXRh
YmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0
YWJhc2UpCisgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFz
az4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPERhdGFi
YXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gbmV3
IERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2soZGF0YWJhc2UpOworICAgICAgICByZXR1cm4g
bmV3IERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2soZGF0YWJhc2UsIGNyZWF0aW9uQ2FsbGJh
Y2spOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KikKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnBlcmZvcm1DcmVh
dGlvbkNhbGxiYWNrKCk7CisgICAgICAgIG1fY3JlYXRpb25DYWxsYmFjay0+aGFuZGxlRXZlbnQo
Y29udGV4dCwgbV9kYXRhYmFzZS5nZXQoKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIERhdGFi
YXNlQ3JlYXRpb25DYWxsYmFja1Rhc2soUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UpCisg
ICAgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRh
YmFzZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjYWxsYmFjaykKICAgICAgICAgOiBt
X2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fY3JlYXRpb25DYWxsYmFjayhjYWxsYmFj
aykKICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRyPERhdGFiYXNlPiBtX2RhdGFiYXNlOworICAg
IFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBtX2NyZWF0aW9uQ2FsbGJhY2s7CiB9OwogCiBQYXNz
UmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwKQEAgLTE0NywxNCArOTEsMTMgQEAg
UGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2U6Om9wZW5EYXRhYgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlKQogewogICAgIGlm
ICghRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJhc2UoY29udGV4
dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBUaGVyZSBzaG91bGQgYmUgYW4gZXhjZXB0aW9uIHJhaXNlZCBoZXJlIGluIGFkZGl0aW9uIHRv
IHJldHVybmluZyBhIG51bGwgRGF0YWJhc2Ugb2JqZWN0LiAgVGhlIHF1ZXN0aW9uIGhhcyBiZWVu
IHJhaXNlZCB3aXRoIHRoZSBXSEFUV0cuCiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJh
c2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUu
YXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8RGF0
YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4
cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJh
Y2spKTsKKyAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFi
YXNlKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUpKTsKIAotICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKGUpKSB7
CisgICAgaWYgKCFkYXRhYmFzZS0+b3BlbkFuZFZlcmlmeVZlcnNpb24oIWNyZWF0aW9uQ2FsbGJh
Y2ssIGUpKSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRmFpbGVkIHRvIG9wZW4gYW5kIHZl
cmlmeSB2ZXJzaW9uIChleHBlY3RlZCAlcykgb2YgZGF0YWJhc2UgJXMiLCBleHBlY3RlZFZlcnNp
b24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlLT5kYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCku
ZGF0YSgpKTsKICAgICAgICAgY29udGV4dC0+cmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdl
dCgpKTsKICAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFi
YXNlKGRhdGFiYXNlLmdldCgpKTsKQEAgLTE3Niw1NyArMTE5LDI4IEBAIFBhc3NSZWZQdHI8RGF0
YWJhc2U+IERhdGFiYXNlOjpvcGVuRGF0YWIKICAgICAvLyB2ZXJzaW9uIHRvICIiIGFuZCBzY2hl
ZHVsZSB0aGUgY3JlYXRpb24gY2FsbGJhY2suIEJlY2F1c2Ugb2Ygc29tZSBzdWJ0bGUgU3RyaW5n
CiAgICAgLy8gaW1wbGVtZW50YXRpb24gaXNzdWVzLCB3ZSBoYXZlIHRvIHJlc2V0IG1fZXhwZWN0
ZWRWZXJzaW9uIGhlcmUgaW5zdGVhZCBvZiBkb2luZwogICAgIC8vIGl0IGluc2lkZSBwZXJmb3Jt
T3BlbkFuZFZlcmlmeSgpIHdoaWNoIGlzIHJ1biBvbiB0aGUgREIgdGhyZWFkLgotICAgIGlmIChk
YXRhYmFzZS0+aXNOZXcoKSAmJiBkYXRhYmFzZS0+bV9jcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7
CisgICAgaWYgKGRhdGFiYXNlLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsK
ICAgICAgICAgZGF0YWJhc2UtPm1fZXhwZWN0ZWRWZXJzaW9uID0gIiI7CiAgICAgICAgIExPRyhT
dG9yYWdlQVBJLCAiU2NoZWR1bGluZyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIGZvciBk
YXRhYmFzZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOwotICAgICAgICBkYXRhYmFzZS0+bV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNr
OjpjcmVhdGUoZGF0YWJhc2UpKTsKKyAgICAgICAgZGF0YWJhc2UtPm1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+cG9zdFRhc2soRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6Y3JlYXRlKGRh
dGFiYXNlLCBjcmVhdGlvbkNhbGxiYWNrKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGRhdGFiYXNl
OwogfQogCi1EYXRhYmFzZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNz
UmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2spCi0gICAgOiBtX3RyYW5z
YWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSkKK0RhdGFiYXNlOjpEYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpCisgICAgOiBBYnN0cmFjdERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVj
dGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpCisgICAgLCBtX3RyYW5zYWN0
aW9uSW5Qcm9ncmVzcyhmYWxzZSkKICAgICAsIG1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCh0
cnVlKQotICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCi0gICAgLCBtX25h
bWUobmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQotICAgICwgbV9ndWlkKDApCi0gICAgLCBtX2V4
cGVjdGVkVmVyc2lvbihleHBlY3RlZFZlcnNpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAs
IG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1f
ZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQogICAgICwgbV9kZWxldGVkKGZhbHNlKQogICAg
ICwgbV9zdG9wcGVkKGZhbHNlKQotICAgICwgbV9vcGVuZWQoZmFsc2UpCi0gICAgLCBtX25ldyhm
YWxzZSkKLSAgICAsIG1fY3JlYXRpb25DYWxsYmFjayhjcmVhdGlvbkNhbGxiYWNrKQogewotICAg
IEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCkpOwotICAgIG1fY29udGV4dFRo
cmVhZFNlY3VyaXR5T3JpZ2luID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9y
aWdpbigpOwogICAgIG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fY29udGV4dFRo
cmVhZFNlY3VyaXR5T3JpZ2luLT50aHJlYWRzYWZlQ29weSgpOwotICAgIGlmIChtX25hbWUuaXNO
dWxsKCkpCi0gICAgICAgIG1fbmFtZSA9ICIiOwogCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6aW5p
dGlhbGl6ZVRocmVhZGluZygpOwotCi0gICAgbV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5hbWUo
c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbmFtZSk7Ci0KLSAgICB7Ci0gICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0KLSAgICAgICAgSGFzaFNldDxEYXRhYmFz
ZSo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKLSAgICAgICAg
aWYgKCFoYXNoU2V0KSB7Ci0gICAgICAgICAgICBoYXNoU2V0ID0gbmV3IEhhc2hTZXQ8RGF0YWJh
c2UqPjsKLSAgICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkuc2V0KG1fZ3VpZCwgaGFzaFNl
dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBoYXNoU2V0LT5hZGQodGhpcyk7Ci0gICAgfQotCiAg
ICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSk7Ci0g
ICAgbV9maWxlbmFtZSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmZ1bGxQYXRoRm9yRGF0
YWJhc2Uoc2VjdXJpdHlPcmlnaW4oKSwgbV9uYW1lKTsKIAotICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKLSAgICBjb250ZXh0LT5hZGRPcGVuRGF0
YWJhc2UodGhpcyk7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRPcGVuRGF0YWJh
c2UodGhpcyk7CiB9CiAKIGNsYXNzIERlcmVmQ29udGV4dFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzayB7CkBAIC0yNTMsMTUgKzE2NywyMSBAQCBEYXRhYmFzZTo6fkRh
dGFiYXNlKCkKICAgICB9CiB9CiAKLWJvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9u
KEV4Y2VwdGlvbkNvZGUmIGUpCitTdHJpbmcgRGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAorewor
ICAgIGlmIChtX2RlbGV0ZWQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4g
QWJzdHJhY3REYXRhYmFzZTo6dmVyc2lvbigpOworfQorCitib29sIERhdGFiYXNlOjpvcGVuQW5k
VmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2Rl
JiBlKQogewogICAgIGlmICghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVh
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXIgPSBE
YXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZSgpOwogCiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
CiAgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNocm9uaXplcjsKLSAgICBPd25QdHI8
RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSh0aGlzLCAm
c3luY2hyb25pemVyLCBlLCBzdWNjZXNzKTsKKyAgICBPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4g
dGFzayA9IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSh0aGlzLCBzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgJnN5bmNocm9uaXplciwgZSwgc3VjY2Vzcyk7CiAKICAgICBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJl
bGVhc2UoKSk7CiAgICAgc3luY2hyb25pemVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwpAQCAt
MjY5LDkzICsxODksNiBAQCBib29sIERhdGFiYXNlOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihFeGNl
CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLQotc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVz
dWx0RnJvbURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwg
U3RyaW5nJiByZXN1bHRTdHJpbmcpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChk
YiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAg
aWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yICgl
aSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2Ug
KCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVz
dWx0ID09IFNRTFJlc3VsdFJvdykgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChy
ZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmco
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJFcnJvciAoJWkpIHJlYWRpbmcgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVz
dWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci19Ci0KLWJvb2wgRGF0YWJhc2U6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJz
aW9uKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBnZXRWZXJzaW9uUXVlcnks
ICgiU0VMRUNUIHZhbHVlIEZST00gIiArIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiBXSEVS
RSBrZXkgPSAnIiArIGRhdGFiYXNlVmVyc2lvbktleSgpICsgIic7IikpOwotCi0gICAgbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKLQotICAgIGJvb2wgcmVzdWx0ID0gcmV0cmlldmVU
ZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIGdldFZlcnNpb25RdWVyeS50
aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwgZGF0
YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9y
aXplci0+ZW5hYmxlKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgYm9vbCBz
ZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KGRiLCBxdWVyeSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0K
LSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwg
cXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKLQotICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIHN0ZXAgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFz
ZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGF0YWJhc2U6OnNldFZlcnNpb25J
bkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICAvLyBUaGUgSU5TRVJUIHdp
bGwgcmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeSBmb3IgdGhlIGRhdGFiYXNlIHdpdGggdGhlIG5l
dyB2ZXJzaW9uIG51bWJlciwgZHVlIHRvIHRoZSBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRQot
ICAgIC8vIGNsYXVzZSBpbiB0aGUgQ1JFQVRFIHN0YXRlbWVudCAoc2VlIERhdGFiYXNlOjpwZXJm
b3JtT3BlbkFuZFZlcmlmeSgpKS4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc2V0
VmVyc2lvblF1ZXJ5LCAoIklOU0VSVCBJTlRPICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSAr
ICIgKGtleSwgdmFsdWUpIFZBTFVFUyAoJyIgKyBkYXRhYmFzZVZlcnNpb25LZXkoKSArICInLCA/
KTsiKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwotCi0gICAgYm9v
bCByZXN1bHQgPSBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIHNldFZl
cnNpb25RdWVyeS50aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKLSAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2Ug
KCVzKSIsIHZlcnNpb24uYXNjaWkoKS5kYXRhKCksIHNldFZlcnNpb25RdWVyeS5hc2NpaSgpLmRh
dGEoKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1ib29sIERhdGFiYXNlOjp2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fZXhwZWN0ZWRWZXJzaW9uLmlzRW1wdHkoKSkgewotICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotICAgICAgICByZXR1cm4gbV9leHBl
Y3RlZFZlcnNpb24gPT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIERhdGFiYXNlOjptYXJrQXNEZWxldGVkQW5kQ2xv
c2UoKQogewogICAgIGlmIChtX2RlbGV0ZWQgfHwgIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
ZGF0YWJhc2VUaHJlYWQoKSkKQEAgLTQxMCwzMCArMjQzLDEzIEBAIHZvaWQgRGF0YWJhc2U6OmNs
b3NlKENsb3NlUG9saWN5IHBvbGljeSkKIHsKICAgICBSZWZQdHI8RGF0YWJhc2U+IHByb3RlY3Qg
PSB0aGlzOwogCi0gICAgaWYgKCFtX29wZW5lZCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQVNT
RVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSk7CiAgICAgQVNT
RVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNl
VGhyZWFkKCktPmdldFRocmVhZElEKCkpOwotICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsK
LSAgICAvLyBNdXN0IHJlZigpIGJlZm9yZSBjYWxsaW5nIGRhdGFiYXNlVGhyZWFkKCktPnJlY29y
ZERhdGFiYXNlQ2xvc2VkKCkuCi0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFz
ZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCh0aGlzKTsKLSAgICBtX29wZW5lZCA9IGZh
bHNlOwotCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwog
Ci0gICAgICAgIEhhc2hTZXQ8RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFw
KCkuZ2V0KG1fZ3VpZCk7Ci0gICAgICAgIEFTU0VSVChoYXNoU2V0KTsKLSAgICAgICAgQVNTRVJU
KGhhc2hTZXQtPmNvbnRhaW5zKHRoaXMpKTsKLSAgICAgICAgaGFzaFNldC0+cmVtb3ZlKHRoaXMp
OwotICAgICAgICBpZiAoaGFzaFNldC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBndWlkVG9E
YXRhYmFzZU1hcCgpLnJlbW92ZShtX2d1aWQpOwotICAgICAgICAgICAgZGVsZXRlIGhhc2hTZXQ7
Ci0gICAgICAgICAgICBndWlkVG9WZXJzaW9uTWFwKCkucmVtb3ZlKG1fZ3VpZCk7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgY2xvc2VEYXRhYmFzZSgpOwogCisgICAgLy8gTXVzdCByZWYoKSBiZWZv
cmUgY2FsbGluZyBkYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCgpLgorICAg
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJh
c2VDbG9zZWQodGhpcyk7CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRo
cmVhZCgpLT51bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyh0aGlzKTsKICAgICBpZiAocG9saWN5ID09
IFJlbW92ZURhdGFiYXNlRnJvbUNvbnRleHQpCiAgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+cG9zdFRhc2soQ29udGV4dFJlbW92ZU9wZW5EYXRhYmFzZVRhc2s6OmNyZWF0ZSh0aGlz
KSk7CkBAIC00NjMsNiArMjc5LDkgQEAgdm9pZCBEYXRhYmFzZTo6c3RvcCgpCiAgICAgICAgIG1f
aXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCA9IGZhbHNlOwogICAgICAgICBtX3RyYW5zYWN0aW9u
SW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgIH0KKworICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpCisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3ModGhpcyk7CiB9CiAK
IHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11bVNpemUoKSBjb25zdApAQCAtNDcw
LDc5ICsyODksNiBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1heGltdW1TaXplCiAg
ICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmdldE1heFNpemVGb3JEYXRhYmFz
ZSh0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZTo6ZGlzYWJsZUF1dGhvcml6ZXIoKQotewotICAg
IEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXIt
PmRpc2FibGUoKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6ZW5hYmxlQXV0aG9yaXplcigpCi17Ci0g
ICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXpl
ci0+ZW5hYmxlKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSgp
Ci17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0
aG9yaXplci0+c2V0UmVhZE9ubHkoKTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6bGFzdEFjdGlvbkNo
YW5nZWREYXRhYmFzZSgpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAg
ICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2Uo
KTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6bGFzdEFjdGlvbldhc0luc2VydCgpCi17Ci0gICAgQVNT
RVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6
ZXItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6cmVzZXREZWxl
dGVzKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fZGF0YWJh
c2VBdXRob3JpemVyLT5yZXNldERlbGV0ZXMoKTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6aGFkRGVs
ZXRlcygpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4g
bV9kYXRhYmFzZUF1dGhvcml6ZXItPmhhZERlbGV0ZXMoKTsKLX0KLQotc3RhdGljIGludCBndWlk
Rm9yT3JpZ2luQW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1l
KQotewotICAgIFN0cmluZyBzdHJpbmdJRDsKLSAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCIvIikp
Ci0gICAgICAgIHN0cmluZ0lEID0gb3JpZ2luICsgbmFtZTsKLSAgICBlbHNlCi0gICAgICAgIHN0
cmluZ0lEID0gb3JpZ2luICsgIi8iICsgbmFtZTsKLQotICAgIC8vIE5vdGU6IFdlIGRvbid0IGhh
dmUgdG8gdXNlIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyBoZXJlIGJlY2F1c2UKLSAgICAv
LyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGluIHRoZSBjb25zdHJ1Y3RvciBvbiB0aGUg
bWFpbiB0aHJlYWQKLSAgICAvLyBiZWZvcmUgYW55IG90aGVyIHRocmVhZHMgdGhhdCBjYWxsIHRo
aXMgZnVuY3Rpb24gYXJlIHVzZWQuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwgc3Ry
aW5nSWRlbnRpZmllck11dGV4LCAoKSk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHN0cmluZ0lk
ZW50aWZpZXJNdXRleCk7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgaW50PiBJREd1aWRN
YXA7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChJREd1aWRNYXAsIHN0cmluZ0lkZW50aWZpZXJU
b0dVSURNYXAsICgpKTsKLSAgICBpbnQgZ3VpZCA9IHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAu
Z2V0KHN0cmluZ0lEKTsKLSAgICBpZiAoIWd1aWQpIHsKLSAgICAgICAgc3RhdGljIGludCBjdXJy
ZW50TmV3R1VJRCA9IDE7Ci0gICAgICAgIGd1aWQgPSBjdXJyZW50TmV3R1VJRCsrOwotICAgICAg
ICBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLnNldChzdHJpbmdJRCwgZ3VpZCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGd1aWQ7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OnJlc2V0QXV0aG9yaXplcigp
Ci17Ci0gICAgaWYgKG1fZGF0YWJhc2VBdXRob3JpemVyKQotICAgICAgICBtX2RhdGFiYXNlQXV0
aG9yaXplci0+cmVzZXQoKTsKLX0KLQogdm9pZCBEYXRhYmFzZTo6cGVyZm9ybVBvbGljeUNoZWNr
cygpCiB7CiAgICAgLy8gRklYTUU6IENvZGUgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIHdpbGwg
bmVlZCB0byBiZSBydW4gdG8gZW5mb3JjZSB0aGUgcGVyLW9yaWdpbiBzaXplIGxpbWl0IHRoZSBz
cGVjIG1hbmRhdGVzLgpAQCAtNTU3LDkyICszMDMsMTYgQEAgdm9pZCBEYXRhYmFzZTo6cGVyZm9y
bVBvbGljeUNoZWNrcygpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBEYXRhYmFz
ZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhjZXB0aW9uQ29kZSYgZSkKK2Jvb2wgRGF0YWJhc2U6
OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2Vw
dGlvbkNvZGUmIGUpCiB7Ci0gICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxlbmFt
ZSwgdHJ1ZSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3BlbiBkYXRhYmFzZSBh
dCBwYXRoICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGUgPSBJTlZB
TElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW1f
c3FsaXRlRGF0YWJhc2UudHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKCkpCi0gICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHR1cm4gb24gaW5jcmVtZW50YWwgYXV0by12YWN1dW0gZm9yIGRh
dGFiYXNlICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgaWYgKEFic3RyYWN0
RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBl
KSkgeworICAgICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVh
ZCgpKQorICAgICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVh
ZCgpLT5yZWNvcmREYXRhYmFzZU9wZW4odGhpcyk7CiAKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1
dGhvcml6ZXIpOwotICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNl
QXV0aG9yaXplcik7Ci0gICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChtYXhTcWxp
dGVCdXN5V2FpdFRpbWUpOwotCi0gICAgU3RyaW5nIGN1cnJlbnRWZXJzaW9uOwotICAgIHsKLSAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLQotICAgICAgICBHdWlkVmVy
c2lvbk1hcDo6aXRlcmF0b3IgZW50cnkgPSBndWlkVG9WZXJzaW9uTWFwKCkuZmluZChtX2d1aWQp
OwotICAgICAgICBpZiAoZW50cnkgIT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmVuZCgpKSB7Ci0gICAg
ICAgICAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgdXBkYXRlR3Vp
ZFZlcnNpb25NYXAoKSkuCi0gICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT5zZWNv
bmQuaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogZW50cnktPnNlY29uZDsKLSAgICAgICAgICAgIExP
RyhTdG9yYWdlQVBJLCAiQ3VycmVudCBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSBpcyAlcyIs
IG1fZ3VpZCwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJObyBjYWNoZWQgdmVyc2lvbiBmb3IgZ3Vp
ZCAlaSIsIG1fZ3VpZCk7Ci0KLSAgICAgICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50YWJs
ZUV4aXN0cyhkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICBtX25l
dyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIChr
ZXkgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBSRVBM
QUNFLHZhbHVlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIHRhYmxlICVzIGluIGRhdGFi
YXNlICVzIiwgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkuYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNl
RGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICBlID0gSU5W
QUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUg
dG8gdGhlIGRhdGFiYXNlIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJh
c2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFnZXRWZXJzaW9uRnJv
bURhdGFiYXNlKGN1cnJlbnRWZXJzaW9uKSkgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGdldCBjdXJyZW50IHZlcnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFiYXNl
RGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIGUgPSBJTlZBTElE
X1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBk
YXRhYmFzZSBmaWxlLgotICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoY3VycmVudFZlcnNpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBMT0coU3Rv
cmFnZUFQSSwgIlJldHJpZXZlZCBjdXJyZW50IHZlcnNpb24gJXMgZnJvbSBkYXRhYmFzZSAlcyIs
IGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lp
KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fbmV3IHx8ICFtX2NyZWF0aW9u
Q2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNldHRpbmcgdmVy
c2lvbiAlcyBpbiBkYXRhYmFzZSAlcyB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQiLCBtX2V4cGVjdGVk
VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRhYmFzZShtX2V4cGVjdGVk
VmVyc2lvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0
IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMiLCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRh
dGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGUgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2xv
c2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAg
bV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0g
bV9leHBlY3RlZFZlcnNpb247Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUd1
aWRWZXJzaW9uTWFwKG1fZ3VpZCwgY3VycmVudFZlcnNpb24pOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKGN1cnJlbnRWZXJzaW9uLmlzTnVsbCgpKSB7Ci0gICAgICAgIExPRyhTdG9yYWdl
QVBJLCAiRGF0YWJhc2UgJXMgZG9lcyBub3QgaGF2ZSBpdHMgdmVyc2lvbiBzZXQiLCBkYXRhYmFz
ZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgY3VycmVudFZlcnNpb24gPSAi
IjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpc24ndCB0aGUgZW1w
dHkgc3RyaW5nLCBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBkYXRhYmFzZSB2ZXJzaW9uIHdlIGhh
dmUgbWF0Y2hlcyB0aGF0IHZlcnNpb24uIE90aGVyd2lzZSwgc2V0IGFuIGV4Y2VwdGlvbi4KLSAg
ICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHdl
IGFsd2F5cyByZXR1cm4gd2l0aCB3aGF0ZXZlciB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSB3ZSBo
YXZlLgotICAgIGlmICgoIW1fbmV3IHx8ICFtX2NyZWF0aW9uQ2FsbGJhY2spICYmIG1fZXhwZWN0
ZWRWZXJzaW9uLmxlbmd0aCgpICYmIG1fZXhwZWN0ZWRWZXJzaW9uICE9IGN1cnJlbnRWZXJzaW9u
KSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAicGFnZSBleHBlY3RzIHZlcnNpb24gJXMgZnJv
bSBkYXRhYmFzZSAlcywgd2hpY2ggYWN0dWFsbHkgaGFzIHZlcnNpb24gbmFtZSAlcyAtIG9wZW5E
YXRhYmFzZSgpIGNhbGwgd2lsbCBmYWlsIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRh
KCksCi0gICAgICAgICAgICBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBjdXJy
ZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGUgPSBJTlZBTElEX1NUQVRFX0VS
UjsKLSAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KLSAg
ICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIC8vIEFsbCBjaGVja3MgcGFzc2VkIGFu
ZCB3ZSBzdGlsbCBoYXZlIGEgaGFuZGxlIHRvIHRoaXMgZGF0YWJhc2UgZmlsZS4KLSAgICAvLyBN
YWtlIHN1cmUgRGF0YWJhc2VUaHJlYWQgY2xvc2VzIGl0IHdoZW4gRGF0YWJhc2VUaHJlYWQgZ29l
cyBhd2F5LgotICAgIG1fb3BlbmVkID0gdHJ1ZTsKLSAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKQotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlzKTsKLQotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBEYXRhYmFzZTo6Y2hhbmdl
VmVyc2lvbihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lv
biwKQEAgLTc1NywxMSArNDI3LDYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnBlcmZvcm1H
ZXRUYWJsZQogICAgIHJldHVybiB0YWJsZU5hbWVzOwogfQogCi12b2lkIERhdGFiYXNlOjpwZXJm
b3JtQ3JlYXRpb25DYWxsYmFjaygpCi17Ci0gICAgbV9jcmVhdGlvbkNhbGxiYWNrLT5oYW5kbGVF
dmVudChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCksIHRoaXMpOwotfQotCiBTUUxUcmFu
c2FjdGlvbkNsaWVudCogRGF0YWJhc2U6OnRyYW5zYWN0aW9uQ2xpZW50KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT50cmFu
c2FjdGlvbkNsaWVudCgpOwpAQCAtNzcyLDE0ICs0MzcsNiBAQCBTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKiBEYXRhYmFzZTo6dHJhCiAgICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+ZGF0YWJhc2VUaHJlYWQoKS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpOwogfQogCi1TdHJp
bmcgRGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAotewotICAgIGlmIChtX2RlbGV0ZWQpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkp
OwotICAgIHJldHVybiBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCkudGhyZWFkc2FmZUNv
cHkoKTsKLX0KLQogVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnRhYmxlTmFtZXMoKQogewogICAg
IC8vIEZJWE1FOiBOb3QgdXNpbmcgdGhyZWFkc2FmZUNvcHkgb24gdGhlc2Ugc3RyaW5ncyBsb29r
cyBvayBzaW5jZSB0aHJlYWRzIHRha2Ugc3RyaWN0IHR1cm5zCkBAIC03OTcsMTQgKzQ1NCw2IEBA
IFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjp0YWJsZU5hbWVzKCkKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkIERhdGFiYXNlOjpzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJiB2
ZXJzaW9uKQotewotICAgIG1fZXhwZWN0ZWRWZXJzaW9uID0gdmVyc2lvbi50aHJlYWRzYWZlQ29w
eSgpOwotICAgIC8vIFVwZGF0ZSB0aGUgaW4gbWVtb3J5IGRhdGFiYXNlIHZlcnNpb24gbWFwLgot
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgdXBkYXRlR3VpZFZlcnNp
b25NYXAobV9ndWlkLCB2ZXJzaW9uKTsKLX0KLQogU2VjdXJpdHlPcmlnaW4qIERhdGFiYXNlOjpz
ZWN1cml0eU9yaWdpbigpIGNvbnN0CiB7CiAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNDb250ZXh0VGhyZWFkKCkpCkBAIC04MTQsMjkgKzQ2Myw2IEBAIFNlY3VyaXR5T3JpZ2lu
KiBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4KICAgICByZXR1cm4gMDsKIH0KIAotU3RyaW5nIERh
dGFiYXNlOjpzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVw
IGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fbmFtZS50
aHJlYWRzYWZlQ29weSgpOwotfQotCi1TdHJpbmcgRGF0YWJhc2U6OmRpc3BsYXlOYW1lKCkgY29u
c3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQg
c2FmZXR5Ci0gICAgcmV0dXJuIG1fZGlzcGxheU5hbWUudGhyZWFkc2FmZUNvcHkoKTsKLX0KLQot
dW5zaWduZWQgbG9uZyBEYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fZXN0aW1hdGVkU2l6ZTsKLX0KLQotU3RyaW5nIERhdGFiYXNlOjpmaWxlTmFtZSgpIGNv
bnN0Ci17Ci0gICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFk
IHNhZmV0eQotICAgIHJldHVybiBtX2ZpbGVuYW1lLnRocmVhZHNhZmVDb3B5KCk7Ci19Ci0KIHZv
aWQgRGF0YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKQogewogICAgIGludDY0X3Qg
ZnJlZVNwYWNlU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOwpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlLmgJKHJldmlzaW9uIDYxNzEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE4ICszMywxMyBAQAogI2luY2x1ZGUgIkFic3RyYWN0
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNRTGl0
ZURhdGFiYXNlLmgiCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
Ci0jZW5kaWYKIAogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGF0YWJhc2VBdXRob3JpemVyOwog
Y2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKLWNsYXNzIERhdGFiYXNlVGhyZWFkOwogY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU1FMVHJh
bnNhY3Rpb247CkBAIC01NCw4ICs0OSw2IEBAIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3I7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7CiBjbGFzcyBWb2lkQ2FsbGJh
Y2s7CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KIGNsYXNzIERhdGFiYXNlIDogcHVi
bGljIEFic3RyYWN0RGF0YWJhc2UgewogcHVibGljOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlKCk7
CkBAIC02MywzNyArNTYsMTcgQEAgcHVibGljOgogICAgIC8vIERpcmVjdCBzdXBwb3J0IGZvciB0
aGUgRE9NIEFQSQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlPiBvcGVuRGF0YWJhc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBTdHJpbmcgdmVyc2lvbigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBj
b25zdDsKICAgICB2b2lkIGNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBj
b25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFj
az4sCiAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7CiAg
ICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCiAgICAgICAgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBib29sIHJlYWRP
bmx5KTsKIAogICAgIC8vIEludGVybmFsIGVuZ2luZSBzdXBwb3J0Ci0gICAgc3RhdGljIGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCk7Ci0KLSAgICB2b2lkIGRpc2FibGVBdXRo
b3JpemVyKCk7Ci0gICAgdm9pZCBlbmFibGVBdXRob3JpemVyKCk7Ci0gICAgdm9pZCBzZXRBdXRo
b3JpemVyUmVhZE9ubHkoKTsKLSAgICBib29sIGxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsK
LSAgICBib29sIGxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKLSAgICB2b2lkIHJlc2V0RGVsZXRlcygp
OwotICAgIGJvb2wgaGFkRGVsZXRlcygpOwotCiAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVOYW1l
cygpOwogCi0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgp
OyB9CiAgICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsK
ICAgICBTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSB7IHJldHVybiBtX3NxbGl0ZURh
dGFiYXNlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0Owot
ICAgIHZpcnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxl
TmFtZSgpIGNvbnN0OwotCi0gICAgYm9vbCBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYp
OwotICAgIGJvb2wgc2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9p
ZCBzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCB2ZXJzaW9uTWF0
Y2hlc0V4cGVjdGVkKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFu
ZENsb3NlKCk7CiAgICAgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9
CkBAIC0xMDEsMjggKzc0LDIzIEBAIHB1YmxpYzoKICAgICBlbnVtIENsb3NlUG9saWN5IHsgRG9O
b3RSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0LCBSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0IH07
CiAgICAgdm9pZCBjbG9zZShDbG9zZVBvbGljeSk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1t
ZWRpYXRlbHkoKTsKLSAgICBib29sIG9wZW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbmVkOyB9
CiAKICAgICB2b2lkIHN0b3AoKTsKICAgICBib29sIHN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBt
X3N0b3BwZWQ7IH0KIAotICAgIGJvb2wgaXNOZXcoKSBjb25zdCB7IHJldHVybiBtX25ldzsgfQot
CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGRhdGFiYXNlU2l6ZSgpIGNvbnN0OwogICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OwogCiAgICAgLy8gQ2FsbGVkIGZyb20g
RGF0YWJhc2VUaHJlYWQsIG11c3QgYmUgcHJlcGFyZWQgdG8gd29yayBvbiB0aGUgYmFja2dyb3Vu
ZCB0aHJlYWQKLSAgICB2b2lkIHJlc2V0QXV0aG9yaXplcigpOwogICAgIHZvaWQgcGVyZm9ybVBv
bGljeUNoZWNrcygpOwogCi0gICAgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShFeGNlcHRpb25D
b2RlJik7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVy
c2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQgaW5Qcm9ncmVz
c1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uQ2Fs
bGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25TdGVw
KFNRTFRyYW5zYWN0aW9uKiwgYm9vbCBpbW1lZGlhdGVseSA9IGZhbHNlKTsKIAogICAgIFZlY3Rv
cjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJsZU5hbWVzKCk7Ci0gICAgdm9pZCBwZXJmb3JtQ3JlYXRp
b25DYWxsYmFjaygpOwogCiAgICAgU1FMVHJhbnNhY3Rpb25DbGllbnQqIHRyYW5zYWN0aW9uQ2xp
ZW50KCkgY29uc3Q7CiAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25D
b29yZGluYXRvcigpIGNvbnN0OwpAQCAtMTMxLDQ1ICs5OSwyMyBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0gICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVm
UHRyPERhdGFiYXNlQ2FsbGJhY2s+KTsKKyAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogCi0gICAgYm9vbCBvcGVuQW5k
VmVyaWZ5VmVyc2lvbihFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVy
c2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJik7CiAKICAg
ICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKIAorICAgIHN0YXRpYyB2b2lkIGRlbGl2ZXJQ
ZW5kaW5nQ2FsbGJhY2sodm9pZCopOworCiAgICAgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9u
PiA+IG1fdHJhbnNhY3Rpb25RdWV1ZTsKICAgICBNdXRleCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVz
c011dGV4OwogICAgIGJvb2wgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CiAgICAgYm9vbCBtX2lz
VHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQ7CiAKLSAgICBzdGF0aWMgdm9pZCBkZWxpdmVyUGVuZGlu
Z0NhbGxiYWNrKHZvaWQqKTsKLQotICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2Nv
bnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbjsKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1f
ZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIGlu
dCBtX2d1aWQ7Ci0gICAgU3RyaW5nIG1fZXhwZWN0ZWRWZXJzaW9uOwotICAgIFN0cmluZyBtX2Rp
c3BsYXlOYW1lOwotICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOwotICAgIFN0cmlu
ZyBtX2ZpbGVuYW1lOwogCiAgICAgYm9vbCBtX2RlbGV0ZWQ7Ci0KICAgICBib29sIG1fc3RvcHBl
ZDsKLQotICAgIGJvb2wgbV9vcGVuZWQ7Ci0KLSAgICBib29sIG1fbmV3OwotCi0gICAgU1FMaXRl
RGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFzZTsKLSAgICBSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVy
PiBtX2RhdGFiYXNlQXV0aG9yaXplcjsKLQotICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBt
X2NyZWF0aW9uQ2FsbGJhY2s7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRhdGFiYXNl
RGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4t
PnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCShy
ZXZpc2lvbiA2MTcxMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAsMTkgQEAKICNpbmNsdWRlICJEYXRhYmFzZUF1
dGhvcml6ZXIuaCIKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSNpbmNsdWRlICJEYXRhYmFzZS5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EYXRhYmFzZUF1dGhvcml6ZXI6OkRhdGFiYXNl
QXV0aG9yaXplcigpCitQYXNzUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gRGF0YWJhc2VBdXRo
b3JpemVyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZUF1dGhvcml6ZXIoZGF0YWJhc2VJbmZvVGFi
bGVOYW1lKSk7Cit9CisKK0RhdGFiYXNlQXV0aG9yaXplcjo6RGF0YWJhc2VBdXRob3JpemVyKGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKQogICAgIDogbV9zZWN1cml0eUVuYWJs
ZWQoZmFsc2UpCisgICAgLCBtX2RhdGFiYXNlSW5mb1RhYmxlTmFtZShkYXRhYmFzZUluZm9UYWJs
ZU5hbWUpCiB7CiAgICAgcmVzZXQoKTsKICAgICBhZGRXaGl0ZWxpc3RlZEZ1bmN0aW9ucygpOwpA
QCAtMzg4LDcgKzM5NCw3IEBAIHZvaWQgRGF0YWJhc2VBdXRob3JpemVyOjpzZXRSZWFkT25seSgp
CiAgICAgbV9yZWFkT25seSA9IHRydWU7CiB9CiAKLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRl
bnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoraW50IERhdGFiYXNl
QXV0aG9yaXplcjo6ZGVueUJhc2VkT25UYWJsZU5hbWUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3NlY3VyaXR5RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIFNR
TEF1dGhBbGxvdzsKQEAgLTM5OSw3ICs0MDUsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpk
ZW55QmFzZWRPblRhYmxlCiAgICAgLy8gICAgZXF1YWxJZ25vcmluZ0Nhc2UodGFibGVOYW1lLCAi
c3FsaXRlX3NlcXVlbmNlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodGFibGVOYW1lLCBEYXRhYmFz
ZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKQogICAgIC8vICAgICAgICByZXR1cm4gU1FMQXV0
aERlbnk7CiAKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodGFibGVOYW1lLCBEYXRhYmFzZTo6
ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0YWJs
ZU5hbWUsIG1fZGF0YWJhc2VJbmZvVGFibGVOYW1lKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhE
ZW55OwogCiAgICAgcmV0dXJuIFNRTEF1dGhBbGxvdzsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZUF1dGhvcml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VBdXRob3JpemVyLmgJKHJldmlzaW9uIDYxNzEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlQXV0aG9yaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTEgQEAKICNpZm5k
ZWYgRGF0YWJhc2VBdXRob3JpemVyX2gKICNkZWZpbmUgRGF0YWJhc2VBdXRob3JpemVyX2gKIAor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQz
LDcgKzQ0LDcgQEAgZXh0ZXJuIGNvbnN0IGludCBTUUxBdXRoRGVueTsKIAogY2xhc3MgRGF0YWJh
c2VBdXRob3JpemVyIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8RGF0YWJhc2VBdXRob3JpemVy
PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVyPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VBdXRob3JpemVyKTsgfQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKTsKIAogICAgIGludCBjcmVhdGVUYWJsZShjb25zdCBT
dHJpbmcmIHRhYmxlTmFtZSk7CiAgICAgaW50IGNyZWF0ZVRlbXBUYWJsZShjb25zdCBTdHJpbmcm
IHRhYmxlTmFtZSk7CkBAIC05Nyw5ICs5OCw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhZERlbGV0
ZXMoKSBjb25zdCB7IHJldHVybiBtX2hhZERlbGV0ZXM7IH0KIAogcHJpdmF0ZToKLSAgICBEYXRh
YmFzZUF1dGhvcml6ZXIoKTsKKyAgICBEYXRhYmFzZUF1dGhvcml6ZXIoY29uc3QgU3RyaW5nJiBk
YXRhYmFzZUluZm9UYWJsZU5hbWUpOwogICAgIHZvaWQgYWRkV2hpdGVsaXN0ZWRGdW5jdGlvbnMo
KTsKLSAgICBpbnQgZGVueUJhc2VkT25UYWJsZU5hbWUoY29uc3QgU3RyaW5nJik7CisgICAgaW50
IGRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIGludCB1cGRh
dGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmKTsKIAogICAgIGJvb2wgbV9z
ZWN1cml0eUVuYWJsZWQgOiAxOwpAQCAtMTA4LDYgKzEwOSw4IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX3JlYWRPbmx5IDogMTsKICAgICBib29sIG1faGFkRGVsZXRlcyA6IDE7CiAKKyAgICBjb25z
dCBTdHJpbmcgbV9kYXRhYmFzZUluZm9UYWJsZU5hbWU7CisKICAgICBIYXNoU2V0PFN0cmluZywg
Q2FzZUZvbGRpbmdIYXNoPiBtX3doaXRlbGlzdGVkRnVuY3Rpb25zOwogfTsKIApJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlU3luYy5jcHAJKHJldmlzaW9uIDYxNzEwKQorKysgV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDQxICszMSw1MCBAQAogCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKKyNpbmNs
dWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNvbnN0IFN0cmluZyYgRGF0YWJhc2VTeW5jOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUo
KQorUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlU3luYzo6b3BlbkRhdGFiYXNlU3lu
YyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4g
Y3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIG5hbWUsICgiX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fIikpOwot
ICAgIHJldHVybiBuYW1lOwotfQorICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQo
KSk7CiAKLVBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZVN5bmM6Om9wZW5EYXRhYmFz
ZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxs
YmFjaz4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIEZJWE1FOiB1bmNvbW1lbnQgdGhl
IGFzc2VydCBvbmNlIHdlIHVzZSB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogcGFyYW1ldGVy
Ci0gICAgLy9BU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmICghRGF0
YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJhc2UoY29udGV4dCwgbmFt
ZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hl
ZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBS
ZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZVN5bmMo
Y29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6
ZSkpOworCisgICAgaWYgKCFkYXRhYmFzZS0+cGVyZm9ybU9wZW5BbmRWZXJpZnkoIWNyZWF0aW9u
Q2FsbGJhY2ssIGVjKSkgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkZhaWxlZCB0byBvcGVu
IGFuZCB2ZXJpZnkgdmVyc2lvbiAoZXhwZWN0ZWQgJXMpIG9mIGRhdGFiYXNlICVzIiwgZXhwZWN0
ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZS0+ZGF0YWJhc2VEZWJ1Z05hbWUoKS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92
ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlRGV0YWlscyhjb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7
CisKKyAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkg
eworICAgICAgICBkYXRhYmFzZS0+bV9leHBlY3RlZFZlcnNpb24gPSAiIjsKKyAgICAgICAgTE9H
KFN0b3JhZ2VBUEksICJJbnZva2luZyB0aGUgY3JlYXRpb24gY2FsbGJhY2sgZm9yIGRhdGFiYXNl
ICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7CisgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2stPmhhbmRs
ZUV2ZW50KGNvbnRleHQsIGRhdGFiYXNlLmdldCgpKTsKKyAgICB9CiAKLSAgICBlYyA9IFNFQ1VS
SVRZX0VSUjsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZGF0YWJhc2U7CiB9CiAKIERhdGFi
YXNlU3luYzo6RGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25D
YWxsYmFjaykKLSAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQotICAgICwg
bV9uYW1lKG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZXhwZWN0ZWRWZXJzaW9u
KGV4cGVjdGVkVmVyc2lvbi5jcm9zc1RocmVhZFN0cmluZygpKQotICAgICwgbV9kaXNwbGF5TmFt
ZShkaXNwbGF5TmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQotICAgICwgbV9lc3RpbWF0ZWRTaXpl
KGVzdGltYXRlZFNpemUpCi0gICAgLCBtX2NyZWF0aW9uQ2FsbGJhY2soY3JlYXRpb25DYWxsYmFj
aykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICA6IEFic3RyYWN0RGF0YWJhc2UoY29u
dGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkK
IHsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogfQogCiBEYXRhYmFz
ZVN5bmM6On5EYXRhYmFzZVN5bmMoKQpAQCAtNzMsMjYgKzgyLDU0IEBAIERhdGFiYXNlU3luYzo6
fkRhdGFiYXNlU3luYygpCiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXND
b250ZXh0VGhyZWFkKCkpOwogfQogCi1TdHJpbmcgRGF0YWJhc2VTeW5jOjp2ZXJzaW9uKCkgY29u
c3QKK3ZvaWQgRGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRp
b25Db2RlJikKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRl
eHRUaHJlYWQoKSk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIERhdGFiYXNlU3lu
Yzo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpCit2b2lkIERhdGFi
YXNlU3luYzo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFj
az4sIGJvb2wsIEV4Y2VwdGlvbkNvZGUmKQogewogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAotdm9pZCBEYXRhYmFzZVN5bmM6OnRy
YW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sLCBF
eGNlcHRpb25Db2RlJikKK3ZvaWQgRGF0YWJhc2VTeW5jOjptYXJrQXNEZWxldGVkQW5kQ2xvc2Uo
KQogewotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVh
ZCgpKTsKKyAgICAvLyBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBkbyBzb21ldGhpbmcgZWxz
ZSBpbiBoZXJlIG90aGVyIHRoYW4gY2FsbGluZyBjbG9zZUltbWVkaWF0ZWx5KCkuCisgICAgY2xv
c2VJbW1lZGlhdGVseSgpOwogfQogCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBEYXRhYmFzZVN5
bmM6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAorY2xhc3MgQ2xvc2VTeW5jRGF0YWJh
c2VPbkNvbnRleHRUaHJlYWRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENsb3NlU3luY0RhdGFiYXNlT25D
b250ZXh0VGhyZWFkVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFz
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgQ2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRU
aHJlYWRUYXNrKGRhdGFiYXNlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRh
c2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCisgICAgeworICAgICAgICBtX2RhdGFiYXNlLT5j
bG9zZUltbWVkaWF0ZWx5KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENsb3NlU3luY0RhdGFi
YXNlT25Db250ZXh0VGhyZWFkVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2Up
CisgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICB7CisgICAgfQorCisgICAgUmVm
UHRyPERhdGFiYXNlU3luYz4gbV9kYXRhYmFzZTsKK307CisKK3ZvaWQgRGF0YWJhc2VTeW5jOjpj
bG9zZUltbWVkaWF0ZWx5KCkKIHsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5nZXQoKTsKKyAgICAvLyBGSVhNRTogcHJvYmFibHkgbmVlZCB0byBkbyBtb3JlIHRoaW5ncyBp
biBoZXJlCisgICAgaWYgKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVh
ZCgpKSB7CisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soQ2xvc2VT
eW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrOjpjcmVhdGUodGhpcykpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3Bl
bkRhdGFiYXNlKHRoaXMpOworCisgICAgY2xvc2VEYXRhYmFzZSgpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5oCShyZXZpc2lvbiA2MTcxMCkK
KysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NDggKzMwLDM2IEBACiAjZGVmaW5lIERhdGFiYXNlU3luY19oCiAKICNpZiBFTkFCTEUoREFUQUJB
U0UpCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpZm5kZWYgTkRFQlVHCisjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIERhdGFiYXNlQ2FsbGJhY2s7CiBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjazsK
IGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNv
ZGU7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAogLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mg
c2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0
aHJlYWQuCi1jbGFzcyBEYXRhYmFzZVN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxEYXRhYmFzZVN5
bmM+IHsKK2NsYXNzIERhdGFiYXNlU3luYyA6IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNlIHsKIHB1
YmxpYzoKLSAgICB+RGF0YWJhc2VTeW5jKCk7CisgICAgdmlydHVhbCB+RGF0YWJhc2VTeW5jKCk7
CiAKLSAgICAvLyBEaXJlY3Qgc3VwcG9ydCBmb3IgdGhlIERPTSBBUEkKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhYmFzZVN5bmM+IG9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFz
c1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyB2
ZXJzaW9uKCkgY29uc3Q7CiAgICAgdm9pZCBjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xk
VmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgdHJhbnNhY3Rpb24o
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wgcmVhZE9ubHksIEV4
Y2VwdGlvbkNvZGUmKTsKIAotICAgIC8vIEludGVybmFsIGVuZ2luZSBzdXBwb3J0Ci0gICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwotCi0g
ICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCk7CisgICAgdmly
dHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOworICAgIHZpcnR1YWwgdm9pZCBjbG9z
ZUltbWVkaWF0ZWx5KCk7CiAKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRW
ZXJzaW9uLAotICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4pOwot
Ci0gICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIFN0cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsK
LSAgICBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKLSAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVk
U2l6ZTsKLSAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gbV9jcmVhdGlvbkNhbGxiYWNrOwot
Ci0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBkYXRhYmFzZURlYnVnTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIFN0cmluZygpOyB9Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwCShyZXZpc2lv
biA2MTcxMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Nyw4ICs4Nyw5IEBAIHZvaWQgRGF0YWJhc2VUYXNrOjpwZXJmb3JtVGFzaygpCiAv
LyAqKiogRGF0YWJhc2VPcGVuVGFzayAqKioKIC8vIE9wZW5zIHRoZSBkYXRhYmFzZSBmaWxlIGFu
ZCB2ZXJpZmllcyB0aGUgdmVyc2lvbiBtYXRjaGVzIHRoZSBleHBlY3RlZCB2ZXJzaW9uLgogCi1E
YXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKERhdGFiYXNlKiBkYXRhYmFzZSwgRGF0
YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUmIGNvZGUs
IGJvb2wmIHN1Y2Nlc3MpCitEYXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKERhdGFi
YXNlKiBkYXRhYmFzZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNr
U3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUmIGNvZGUsIGJvb2wmIHN1
Y2Nlc3MpCiAgICAgOiBEYXRhYmFzZVRhc2soZGF0YWJhc2UsIHN5bmNocm9uaXplcikKKyAgICAs
IG1fc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Uoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UpCiAgICAg
LCBtX2NvZGUoY29kZSkKICAgICAsIG1fc3VjY2VzcyhzdWNjZXNzKQogewpAQCAtOTcsNyArOTgs
NyBAQCBEYXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKERhdGFiCiAKIHZvaWQgRGF0
YWJhc2VPcGVuVGFzazo6ZG9QZXJmb3JtVGFzaygpCiB7Ci0gICAgbV9zdWNjZXNzID0gZGF0YWJh
c2UoKS0+cGVyZm9ybU9wZW5BbmRWZXJpZnkobV9jb2RlKTsKKyAgICBtX3N1Y2Nlc3MgPSBkYXRh
YmFzZSgpLT5wZXJmb3JtT3BlbkFuZFZlcmlmeShtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBt
X2NvZGUpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suaAko
cmV2aXNpb24gNjE3MTApCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDE5ICs4NSwyMCBAQCBwcml2YXRlOgogCiBjbGFzcyBEYXRhYmFzZU9w
ZW5UYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwgRGF0YWJhc2VUYXNr
U3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUmIGNvZGUsIGJvb2wmIHN1
Y2Nlc3MpCisgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gY3JlYXRlKERh
dGFiYXNlKiBkYiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3lu
Y2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUmIGNvZGUsIGJvb2wmIHN1Y2Nl
c3MpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IERhdGFiYXNlT3BlblRhc2soZGIsIHN5bmNo
cm9uaXplciwgY29kZSwgc3VjY2Vzcyk7CisgICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2VPcGVu
VGFzayhkYiwgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIHN5bmNocm9uaXplciwgY29kZSwgc3Vj
Y2Vzcyk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIERhdGFiYXNlT3BlblRhc2soRGF0YWJhc2Uq
LCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqLCBFeGNlcHRpb25Db2RlJiwgYm9vbCYgc3VjY2Vz
cyk7CisgICAgRGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSosIGJvb2wgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIEV4Y2VwdGlvbkNvZGUmLCBib29s
JiBzdWNjZXNzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCk7CiAjaWZuZGVm
IE5ERUJVRwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGVidWdUYXNrTmFtZSgpIGNvbnN0Owog
I2VuZGlmCiAKKyAgICBib29sIG1fc2V0VmVyc2lvbkluTmV3RGF0YWJhc2U7CiAgICAgRXhjZXB0
aW9uQ29kZSYgbV9jb2RlOwogICAgIGJvb2wmIG1fc3VjY2VzczsKIH07CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2MTcxMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE0IEBACisyMDEwLTA2LTIzICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VW5jb21tZW50IGFsbCB0ZXN0IGNhc2VzIGluIG9wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisg
ICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29w
ZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanM6CisgICAgICAgIChjYXRjaCk6CisKIDIwMTAtMDYt
MjMgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMt
aW5wdXRzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjE3MTApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNSw0ICs1LDYgQEAgUEFTUzogdW5kZWZpbmVkCiBQQVNTOiB1bmRl
ZmluZWQKIFBBU1M6IHVuZGVmaW5lZAogUEFTUzogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNl
cHRpb24gMTcKK1BBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuCitQQVNTOiBjYWxs
aW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sgc3VjY2VlZGVk
LgogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Bl
bi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwko
cmV2aXNpb24gNjE3MTApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNv
dXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtNDYs
MTkgKzQ2LDIxIEBAIHRyeSB7CiAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2Fn
ZSk7CiB9CiAKLS8vIEZJWE1FOiBVbmNvbW1lbnQgdGhlc2UgdGVzdHMgd2hlbiB0aGUgc3luYyBE
QiBBUEkgaXMgaW1wbGVtZW50ZWQuCi0vL3RyeSB7Ci0vLyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5
bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwotLy8gICAg
cG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuIik7Ci0vL30g
Y2F0Y2ggKGVycikgewotLy8gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7
Ci0vL30KLS8vCi0vL3RyeSB7Ci0vLyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIs
ICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQsIGZ1bmN0aW9uKGRiKSB7IH0pOwot
Ly8gICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGgg
YSBjcmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuIik7Ci0vL30gY2F0Y2ggKGVycikgewotLy8g
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Ci0vL30KK3RyeSB7CisgICAg
ZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRp
b24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1
Y2NlZWRlZC4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsg
ZXJyLm1lc3NhZ2UpOworfQorCit0cnkgeworICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IGRh
dGFiYXNlLCBvdGhlcndpc2UgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIHdvbid0IGJlIGludm9rZWQu
CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWVDcmVhdGlvbkNhbGxiYWNrIiArIChu
ZXcgRGF0ZSgpKS5nZXRUaW1lKCksICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGRiKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2FsbGluZyBvcGVuRGF0YWJhc2VT
eW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJ
TDogIiArIGVyci5tZXNzYWdlKTsKK30KIAogcG9zdE1lc3NhZ2UoImRvbmUiKTsK
</data>
<flag name="commit-queue"
          id="46500"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59573</attachid>
            <date>2010-06-23 16:14:31 -0700</date>
            <delta_ts>2010-06-24 13:49:30 -0700</delta_ts>
            <desc>patch #1: implement DatabaseSync::openDatabaseSync()</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>66008</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTcxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODEgQEAKKzIwMTAtMDYtMjMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKCkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisgICAgICAg
ICogc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJp
ZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRUZXh0VmFs
dWVJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRNdXRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpndWlkVG9WZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUd1aWRW
ZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRUb0RhdGFiYXNlTWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6Omd1aWRGb3JPcmlnaW5BbmROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6dmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0
RGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RE
YXRhYmFzZTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFz
ZTo6ZXN0aW1hdGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpm
aWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZVZl
cnNpb25LZXkpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lv
bkZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZXRW
ZXJzaW9uSW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjp2
ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6OnNldEV4cGVjdGVkVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpkaXNhYmxlQXV0aG9yaXplcik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjplbmFibGVBdXRob3JpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25XYXNJbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6
QWJzdHJhY3REYXRhYmFzZTo6cmVzZXREZWxldGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OmhhZERlbGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRh
YmFzZTo6cmVzZXRBdXRob3JpemVyKToKKyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJh
c2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Om9wZW5lZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjppc05ldyk6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZURlYnVnTmFtZSk6CisgICAgICAgICogc3RvcmFn
ZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNyZWF0aW9uQ2FsbGJh
Y2tUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDcmVhdGlvbkNhbGxi
YWNrVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDcmVhdGlv
bkNhbGxiYWNrVGFzazo6RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dmVyc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlm
eSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2U6OnNxbGl0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9y
aXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OkRhdGFiYXNlQXV0aG9yaXpl
cik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFi
bGVOYW1lKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oOgorICAgICAg
ICAqIHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
U3luYzo6b3BlbkRhdGFiYXNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6
OkRhdGFiYXNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OmNoYW5nZVZl
cnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2s6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVh
ZFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb3NlU3luY0RhdGFiYXNl
T25Db250ZXh0VGhyZWFkVGFzazo6Q2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6Y2xvc2VJbW1lZGlhdGVseSk6Cisg
ICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVN5bmMuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFi
YXNlVGFzay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFz
ZU9wZW5UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT3BlblRhc2s6OmRvUGVyZm9y
bVRhc2spOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmg6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZU9wZW5UYXNrOjpjcmVhdGUpOgorCiAyMDEwLTA2LTIzICBTdGVwaGVuIFdo
aXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIEh5YXR0LgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkocmV2aXNp
b24gNjE3MTApCisrKyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDkgKzMwLDEzMiBAQAogI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2Uu
aCIKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKKyNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIu
aCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgor
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBib29sIHJldHJpZXZlVGV4dFJlc3VsdEZy
b21EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnksIFN0cmlu
ZyYgcmVzdWx0U3RyaW5nKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1
ZXJ5KTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKKworICAgIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHBy
ZXBhcmluZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcyki
LCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9
PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgcmVzdWx0U3RyaW5nID0gc3RhdGVtZW50LmdldENv
bHVtblRleHQoMCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAocmVzdWx0
ID09IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgcmVzdWx0U3RyaW5nID0gU3RyaW5nKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBy
ZWFkaW5nIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNj
aWkoKS5kYXRhKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgc2V0VGV4
dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChk
YiwgcXVlcnkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOworCisgICAg
aWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBwcmVwYXJlIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIsIHF1ZXJ5
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0
YXRlbWVudC5iaW5kVGV4dCgxLCB2YWx1ZSk7CisKKyAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3Rl
cCgpOworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBzdGVwIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVz
KSIsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCisvLyBGSVhNRTogbW92ZSBhbGwgZ3VpZC1yZWxhdGVk
IGZ1bmN0aW9ucyB0byBhIERhdGFiYXNlVmVyc2lvblRyYWNrZXIgY2xhc3MuCitzdGF0aWMgTXV0
ZXgmIGd1aWRNdXRleCgpCit7CisgICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRv
bWljYWxseUluaXRpYWxpemVkU3RhdGljIGhlcmUgYmVjYXVzZQorICAgIC8vIHRoaXMgZnVuY3Rp
b24gaXMgY2FsbGVkIG9uY2UgaW4gdGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRocmVhZAor
ICAgIC8vIGJlZm9yZSBhbnkgb3RoZXIgdGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBh
cmUgdXNlZC4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBtdXRleCwgKCkpOworICAg
IHJldHVybiBtdXRleDsKK30KKwordHlwZWRlZiBIYXNoTWFwPGludCwgU3RyaW5nPiBHdWlkVmVy
c2lvbk1hcDsKK3N0YXRpYyBHdWlkVmVyc2lvbk1hcCYgZ3VpZFRvVmVyc2lvbk1hcCgpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkVmVyc2lvbk1hcCwgbWFwLCAoKSk7CisgICAgcmV0
dXJuIG1hcDsKK30KKworLy8gTk9URTogQ2FsbGVyIG11c3QgbG9jayBndWlkTXV0ZXgoKS4KK3N0
YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVHdWlkVmVyc2lvbk1hcChpbnQgZ3VpZCwgU3RyaW5nIG5l
d1ZlcnNpb24pCit7CisgICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgorICAg
IEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9jaygpKTsKKworICAgIC8vIE5vdGU6IEl0IGlzIG5v
dCBzYWZlIHRvIHB1dCBhbiBlbXB0eSBzdHJpbmcgaW50byB0aGUgZ3VpZFRvVmVyc2lvbk1hcCgp
IG1hcC4KKyAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGUgbWFwIGlzIGNyb3NzLXRocmVhZCwgYnV0
IGVtcHR5IHN0cmluZ3MgYXJlIHBlci10aHJlYWQuCisgICAgLy8gVGhlIGNvcHkoKSBmdW5jdGlv
biBtYWtlcyBhIHZlcnNpb24gb2YgdGhlIHN0cmluZyB5b3UgY2FuIHVzZSBvbiB0aGUgY3VycmVu
dAorICAgIC8vIHRocmVhZCwgYnV0IHdlIG5lZWQgYSBzdHJpbmcgd2UgY2FuIGtlZXAgaW4gYSBj
cm9zcy10aHJlYWQgZGF0YSBzdHJ1Y3R1cmUuCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBxdWl0
ZS1hd2t3YXJkIHJlc3RyaWN0aW9uIHRvIGhhdmUgdG8gcHJvZ3JhbSB3aXRoLgorCisgICAgLy8g
TWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIGNvbW1lbnQgYWJvdmUpLgorICAg
IGd1aWRUb1ZlcnNpb25NYXAoKS5zZXQoZ3VpZCwgbmV3VmVyc2lvbi5pc0VtcHR5KCkgPyBTdHJp
bmcoKSA6IG5ld1ZlcnNpb24udGhyZWFkc2FmZUNvcHkoKSk7Cit9CisKK3R5cGVkZWYgSGFzaE1h
cDxpbnQsIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+Kj4gR3VpZERhdGFiYXNlTWFwOworc3Rh
dGljIEd1aWREYXRhYmFzZU1hcCYgZ3VpZFRvRGF0YWJhc2VNYXAoKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoR3VpZERhdGFiYXNlTWFwLCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFwOwor
fQorCitzdGF0aWMgaW50IGd1aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYgb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgU3RyaW5nIHN0cmluZ0lEOworICAgIGlmIChv
cmlnaW4uZW5kc1dpdGgoIi8iKSkKKyAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyBuYW1lOwor
ICAgIGVsc2UKKyAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyAiLyIgKyBuYW1lOworCisgICAg
Ly8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
IGhlcmUgYmVjYXVzZQorICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgaW4gdGhl
IGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRocmVhZAorICAgIC8vIGJlZm9yZSBhbnkgb3RoZXIg
dGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBhcmUgdXNlZC4KKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKE11dGV4LCBzdHJpbmdJZGVudGlmaWVyTXV0ZXgsICgpKTsKKyAgICBNdXRleExv
Y2tlciBsb2NrZXIoc3RyaW5nSWRlbnRpZmllck11dGV4KTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBpbnQ+IElER3VpZE1hcDsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKElER3VpZE1h
cCwgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcCwgKCkpOworICAgIGludCBndWlkID0gc3RyaW5n
SWRlbnRpZmllclRvR1VJRE1hcC5nZXQoc3RyaW5nSUQpOworICAgIGlmICghZ3VpZCkgeworICAg
ICAgICBzdGF0aWMgaW50IGN1cnJlbnROZXdHVUlEID0gMTsKKyAgICAgICAgZ3VpZCA9IGN1cnJl
bnROZXdHVUlEKys7CisgICAgICAgIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuc2V0KHN0cmlu
Z0lELCBndWlkKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ3VpZDsKK30KKwogc3RhdGljIGJvb2wg
aXNEYXRhYmFzZUF2YWlsYWJsZSA9IHRydWU7CiAKIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6aXNB
dmFpbGFibGUoKQpAQCAtNDUsMTAgKzE2OCwzMDQgQEAgdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpz
ZXRJc0F2YWlsYWJsZShibwogICAgIGlzRGF0YWJhc2VBdmFpbGFibGUgPSBhdmFpbGFibGU7CiB9
CiAKKy8vIHN0YXRpYworY29uc3QgU3RyaW5nJiBBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZUlu
Zm9UYWJsZU5hbWUoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBuYW1lLCAo
Il9fV2ViS2l0RGF0YWJhc2VJbmZvVGFibGVfXyIpKTsKKyAgICByZXR1cm4gbmFtZTsKK30KKwor
QWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJz
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCisgICAgOiBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKKyAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3Ry
aW5nKCkpCisgICAgLCBtX2V4cGVjdGVkVmVyc2lvbihleHBlY3RlZFZlcnNpb24uY3Jvc3NUaHJl
YWRTdHJpbmcoKSkKKyAgICAsIG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUuY3Jvc3NUaHJlYWRT
dHJpbmcoKSkKKyAgICAsIG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQorICAgICwgbV9n
dWlkKDApCisgICAgLCBtX29wZW5lZChmYWxzZSkKKyAgICAsIG1fbmV3KGZhbHNlKQoreworICAg
IEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0VGhyZWFk
U2VjdXJpdHlPcmlnaW4gPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2lu
KCk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplciA9IERhdGFiYXNlQXV0aG9yaXplcjo6Y3Jl
YXRlKGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKTsKKworICAgIGlmIChtX25hbWUuaXNOdWxsKCkp
CisgICAgICAgIG1fbmFtZSA9ICIiOworCisgICAgbV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5h
bWUoc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbmFtZSk7CisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworCisgICAgICAgIEhhc2hTZXQ8QWJzdHJh
Y3REYXRhYmFzZSo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsK
KyAgICAgICAgaWYgKCFoYXNoU2V0KSB7CisgICAgICAgICAgICBoYXNoU2V0ID0gbmV3IEhhc2hT
ZXQ8QWJzdHJhY3REYXRhYmFzZSo+OworICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VNYXAoKS5z
ZXQobV9ndWlkLCBoYXNoU2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGhhc2hTZXQtPmFkZCh0
aGlzKTsKKyAgICB9CisKKyAgICBtX2ZpbGVuYW1lID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
KCkuZnVsbFBhdGhGb3JEYXRhYmFzZShzZWN1cml0eU9yaWdpbigpLCBtX25hbWUpOworICAgIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKK30KKwogQWJz
dHJhY3REYXRhYmFzZTo6fkFic3RyYWN0RGF0YWJhc2UoKQogewogfQogCit2b2lkIEFic3RyYWN0
RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UoKQoreworICAgIGlmICghbV9vcGVuZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICBtX29wZW5lZCA9
IGZhbHNlOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsK
KworICAgICAgICBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0Rh
dGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7CisgICAgICAgIEFTU0VSVChoYXNoU2V0KTsKKyAgICAg
ICAgQVNTRVJUKGhhc2hTZXQtPmNvbnRhaW5zKHRoaXMpKTsKKyAgICAgICAgaGFzaFNldC0+cmVt
b3ZlKHRoaXMpOworICAgICAgICBpZiAoaGFzaFNldC0+aXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBndWlkVG9EYXRhYmFzZU1hcCgpLnJlbW92ZShtX2d1aWQpOworICAgICAgICAgICAgZGVsZXRl
IGhhc2hTZXQ7CisgICAgICAgICAgICBndWlkVG9WZXJzaW9uTWFwKCkucmVtb3ZlKG1fZ3VpZCk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9u
KCkgY29uc3QKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgIHJl
dHVybiBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCkudGhyZWFkc2FmZUNvcHkoKTsKK30K
Kworc3RhdGljIGNvbnN0IGludCBtYXhTcWxpdGVCdXN5V2FpdFRpbWUgPSAzMDAwMDsKK2Jvb2wg
QWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJz
aW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3NxbGl0
ZURhdGFiYXNlLm9wZW4obV9maWxlbmFtZSwgdHJ1ZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gb3BlbiBkYXRhYmFzZSBhdCBwYXRoICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFs
QXV0b1ZhY3V1bSgpKQorICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3Jl
bWVudGFsIGF1dG8tdmFjdXVtIGZvciBkYXRhYmFzZSAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5k
YXRhKCkpOworCisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX3NxbGl0
ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fc3Fs
aXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKKworICAg
IFN0cmluZyBjdXJyZW50VmVyc2lvbjsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihndWlkTXV0ZXgoKSk7CisKKyAgICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5
ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZpbmQobV9ndWlkKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9
IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQoKSkgeworICAgICAgICAgICAgLy8gTWFwIG51bGwgc3Ry
aW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgorICAgICAg
ICAgICAgY3VycmVudFZlcnNpb24gPSBlbnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gU3RyaW5nKCIi
KSA6IGVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQg
Y2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9u
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiTm8gY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQgJWkiLCBtX2d1aWQpOworCisgICAg
ICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UudGFibGVFeGlzdHMoZGF0YWJhc2VJbmZvVGFi
bGVOYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgbV9uZXcgPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUg
IiArIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwgT04gQ09O
RkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7CisgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIGNyZWF0ZSB0YWJsZSAlcyBpbiBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlSW5mb1Rh
YmxlTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4K
KyAgICAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIWdldFZlcnNpb25Gcm9tRGF0YWJhc2UoY3VycmVudFZlcnNp
b24pKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQg
dmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAg
ICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgorICAgICAg
ICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3VycmVudFZlcnNpb24u
bGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlJldHJpZXZlZCBj
dXJyZW50IHZlcnNpb24gJXMgZnJvbSBkYXRhYmFzZSAlcyIsIGN1cnJlbnRWZXJzaW9uLmFzY2lp
KCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIW1fbmV3IHx8IHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKSB7
CisgICAgICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTZXR0aW5nIHZlcnNpb24gJXMgaW4g
ZGF0YWJhc2UgJXMgdGhhdCB3YXMganVzdCBjcmVhdGVkIiwgbV9leHBlY3RlZFZlcnNpb24uYXNj
aWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAg
ICAgICAgICAgIGlmICghc2V0VmVyc2lvbkluRGF0YWJhc2UobV9leHBlY3RlZFZlcnNpb24pKSB7
CisgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCB2ZXJzaW9uICVz
IGluIGRhdGFiYXNlICVzIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFi
YXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFu
ZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURh
dGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBtX2V4cGVjdGVk
VmVyc2lvbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25N
YXAobV9ndWlkLCBjdXJyZW50VmVyc2lvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
Y3VycmVudFZlcnNpb24uaXNOdWxsKCkpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRh
YmFzZSAlcyBkb2VzIG5vdCBoYXZlIGl0cyB2ZXJzaW9uIHNldCIsIGRhdGFiYXNlRGVidWdOYW1l
KCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBjdXJyZW50VmVyc2lvbiA9ICIiOworICAgIH0K
KworICAgIC8vIElmIHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlzbid0IHRoZSBlbXB0eSBzdHJpbmcs
IGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRhdGFiYXNlIHZlcnNpb24gd2UgaGF2ZSBtYXRjaGVz
IHRoYXQgdmVyc2lvbi4gT3RoZXJ3aXNlLCBzZXQgYW4gZXhjZXB0aW9uLgorICAgIC8vIElmIHRo
ZSBleHBlY3RlZCB2ZXJzaW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gd2UgYWx3YXlzIHJl
dHVybiB3aXRoIHdoYXRldmVyIHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIHdlIGhhdmUuCisgICAg
aWYgKCghbV9uZXcgfHwgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UpICYmIG1fZXhwZWN0
ZWRWZXJzaW9uLmxlbmd0aCgpICYmIG1fZXhwZWN0ZWRWZXJzaW9uICE9IGN1cnJlbnRWZXJzaW9u
KSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAicGFnZSBleHBlY3RzIHZlcnNpb24gJXMgZnJv
bSBkYXRhYmFzZSAlcywgd2hpY2ggYWN0dWFsbHkgaGFzIHZlcnNpb24gbmFtZSAlcyAtIG9wZW5E
YXRhYmFzZSgpIGNhbGwgd2lsbCBmYWlsIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRh
KCksCisgICAgICAgICAgICBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBjdXJy
ZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9F
UlI7CisgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCisg
ICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIG1fb3BlbmVkID0gdHJ1ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBBYnN0cmFjdERhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Lmdl
dCgpOworfQorCitTZWN1cml0eU9yaWdpbiogQWJzdHJhY3REYXRhYmFzZTo6c2VjdXJpdHlPcmln
aW4oKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5n
ZXQoKTsKK30KKworU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIoKSBj
b25zdAoreworICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVh
ZCBzYWZldHkKKyAgICByZXR1cm4gbV9uYW1lLnRocmVhZHNhZmVDb3B5KCk7Cit9CisKK1N0cmlu
ZyBBYnN0cmFjdERhdGFiYXNlOjpkaXNwbGF5TmFtZSgpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJu
IGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQorICAgIHJldHVybiBt
X2Rpc3BsYXlOYW1lLnRocmVhZHNhZmVDb3B5KCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgQWJzdHJh
Y3REYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZXN0aW1h
dGVkU2l6ZTsKK30KKworU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OmZpbGVOYW1lKCkgY29uc3QK
K3sKKyAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2Fm
ZXR5CisgICAgcmV0dXJuIG1fZmlsZW5hbWUudGhyZWFkc2FmZUNvcHkoKTsKK30KKworLy8gc3Rh
dGljCitjb25zdCBTdHJpbmcmIEFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlVmVyc2lvbktleSgp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGtleSwgKCJXZWJLaXREYXRhYmFz
ZVZlcnNpb25LZXkiKSk7CisgICAgcmV0dXJuIGtleTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFi
YXNlOjpnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgZ2V0VmVyc2lvblF1ZXJ5LCAoIlNFTEVDVCB2YWx1ZSBG
Uk9NICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgV0hFUkUga2V5ID0gJyIgKyBkYXRh
YmFzZVZlcnNpb25LZXkoKSArICInOyIpKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5k
aXNhYmxlKCk7CisKKyAgICBib29sIHJlc3VsdCA9IHJldHJpZXZlVGV4dFJlc3VsdEZyb21EYXRh
YmFzZShtX3NxbGl0ZURhdGFiYXNlLCBnZXRWZXJzaW9uUXVlcnkudGhyZWFkc2FmZUNvcHkoKSwg
dmVyc2lvbik7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHJldHJpZXZlIHZlcnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCku
YXNjaWkoKS5kYXRhKCkpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOwor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpzZXRWZXJz
aW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgLy8gVGhlIElOU0VS
VCB3aWxsIHJlcGxhY2UgYW4gZXhpc3RpbmcgZW50cnkgZm9yIHRoZSBkYXRhYmFzZSB3aXRoIHRo
ZSBuZXcgdmVyc2lvbiBudW1iZXIsIGR1ZSB0byB0aGUgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExB
Q0UKKyAgICAvLyBjbGF1c2UgaW4gdGhlIENSRUFURSBzdGF0ZW1lbnQgKHNlZSBEYXRhYmFzZTo6
cGVyZm9ybU9wZW5BbmRWZXJpZnkoKSkuCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcs
IHNldFZlcnNpb25RdWVyeSwgKCJJTlNFUlQgSU5UTyAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1l
KCkgKyAiIChrZXksIHZhbHVlKSBWQUxVRVMgKCciICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAi
JywgPyk7IikpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKKworICAg
IGJvb2wgcmVzdWx0ID0gc2V0VGV4dFZhbHVlSW5EYXRhYmFzZShtX3NxbGl0ZURhdGFiYXNlLCBz
ZXRWZXJzaW9uUXVlcnkudGhyZWFkc2FmZUNvcHkoKSwgdmVyc2lvbik7CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFi
YXNlICglcykiLCB2ZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBzZXRWZXJzaW9uUXVlcnkuYXNjaWko
KS5kYXRhKCkpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9uTWF0Y2hl
c0V4cGVjdGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZXhwZWN0ZWRWZXJzaW9uLmlzRW1wdHko
KSkgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgICAgICBy
ZXR1cm4gbV9leHBlY3RlZFZlcnNpb24gPT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQp
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6
OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgbV9leHBl
Y3RlZFZlcnNpb24gPSB2ZXJzaW9uLnRocmVhZHNhZmVDb3B5KCk7CisgICAgLy8gVXBkYXRlIHRo
ZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAuCisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KGd1aWRNdXRleCgpKTsKKyAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIHZlcnNpb24p
OworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmRpc2FibGVBdXRob3JpemVyKCkKK3sKKyAg
ICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJhc2VBdXRob3JpemVy
LT5kaXNhYmxlKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6ZW5hYmxlQXV0aG9yaXpl
cigpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNl
QXV0aG9yaXplci0+ZW5hYmxlKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0QXV0
aG9yaXplclJlYWRPbmx5KCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwor
ICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5zZXRSZWFkT25seSgpOworfQorCitib29sIEFic3Ry
YWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKQoreworICAgIEFTU0VSVCht
X2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5s
YXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6
bGFzdEFjdGlvbldhc0luc2VydCgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVy
KTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25XYXNJbnNlcnQo
KTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXNldERlbGV0ZXMoKQoreworICAgIEFT
U0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJl
c2V0RGVsZXRlcygpOworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6OmhhZERlbGV0ZXMoKQor
eworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgcmV0dXJuIG1fZGF0YWJh
c2VBdXRob3JpemVyLT5oYWREZWxldGVzKCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6
cmVzZXRBdXRob3JpemVyKCkKK3sKKyAgICBpZiAobV9kYXRhYmFzZUF1dGhvcml6ZXIpCisgICAg
ICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5yZXNldCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvQWJzdHJhY3REYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9BYnN0
cmFjdERhdGFiYXNlLmgJKHJldmlzaW9uIDYxNzEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0Fic3Ry
YWN0RGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDIxIEBACiAjaWYgRU5B
QkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJT
UUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVTaGFyZWQuaD4KKyNpZm5kZWYgTkRFQlVHCisjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERhdGFiYXNl
QXV0aG9yaXplcjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0
eU9yaWdpbjsKIAordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKwogY2xhc3MgQWJzdHJhY3RE
YXRhYmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPEFic3RyYWN0RGF0YWJhc2U+IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwpAQCAtNDYsMTUgKzU0LDY5IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkFic3RyYWN0RGF0YWJhc2UoKTsKIAotICAgIHZpcnR1
YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3Ry
aW5nIGZpbGVOYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBj
b25zdDsKKworICAgIGJvb2wgb3BlbmVkKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuZWQ7IH0KKyAg
ICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4gbV9uZXc7IH0KKworICAgIHZpcnR1YWwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAg
IHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CisgICAgdmly
dHVhbCBTdHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5n
IGRpc3BsYXlOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OworCisg
ICAgLy8gRklYTUU6IG1vdmUgYWxsIHZlcnNpb24tcmVsYXRlZCBtZXRob2RzIHRvIGEgRGF0YWJh
c2VWZXJzaW9uVHJhY2tlciBjbGFzcworICAgIGJvb2wgdmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgp
IGNvbnN0OworICAgIHZvaWQgc2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lv
bik7CisgICAgYm9vbCBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbik7Cisg
ICAgYm9vbCBzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24pOworCisg
ICAgdm9pZCBkaXNhYmxlQXV0aG9yaXplcigpOworICAgIHZvaWQgZW5hYmxlQXV0aG9yaXplcigp
OworICAgIHZvaWQgc2V0QXV0aG9yaXplclJlYWRPbmx5KCk7CisgICAgYm9vbCBsYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlKCk7CisgICAgYm9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0KCk7CisgICAg
dm9pZCByZXNldERlbGV0ZXMoKTsKKyAgICBib29sIGhhZERlbGV0ZXMoKTsKKyAgICB2b2lkIHJl
c2V0QXV0aG9yaXplcigpOwogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9z
ZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgpID0gMDsKKworcHJv
dGVjdGVkOgorICAgIEFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpOworCisgICAgdm9pZCBjbG9zZURhdGFiYXNlKCk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgRXhjZXB0aW9uQ29kZSYgZWMpOworCisgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VJbmZvVGFibGVOYW1lKCk7CisKKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4g
bV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW47CisKKyAgICBTdHJpbmcgbV9uYW1lOworICAg
IFN0cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsKKyAgICBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKKyAg
ICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKKyAgICBTdHJpbmcgbV9maWxlbmFtZTsK
KworICAgIFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7CisKKyNpZm5kZWYgTkRFQlVH
CisgICAgU3RyaW5nIGRhdGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
VGhyZWFkU2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVZlcnNpb25L
ZXkoKTsKKworICAgIGludCBtX2d1aWQ7CisgICAgYm9vbCBtX29wZW5lZDsKKyAgICBib29sIG1f
bmV3OworCisgICAgUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gbV9kYXRhYmFzZUF1dGhvcml6
ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJ
KHJldmlzaW9uIDYxNzEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogI2luY2x1
ZGUgIkNoYW5nZVZlcnNpb25XcmFwcGVyLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVy
LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGFz
ay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCkBAIC01MCw3ICs0OSw2IEBACiAjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKICNpbmNsdWRlICJWb2lkQ2FsbGJhY2suaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTY0LDgxICs2MiwyNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLS8vIElmIHdlIHNsZWVwIGZvciBtb3JlIHRoZSAzMCBzZWNvbmRzIHdo
aWxlIGJsb2NrZWQgb24gU1FMSVRFX0JVU1ksIGdpdmUgdXAuCi1zdGF0aWMgY29uc3QgaW50IG1h
eFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMwMDAwOwotCi1jb25zdCBTdHJpbmcmIERhdGFiYXNlOjpk
YXRhYmFzZUluZm9UYWJsZU5hbWUoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBuYW1lLCAoIl9fV2ViS2l0RGF0YWJhc2VJbmZvVGFibGVfXyIpKTsKLSAgICByZXR1cm4gbmFt
ZTsKLX0KLQotc3RhdGljIE11dGV4JiBndWlkTXV0ZXgoKQotewotICAgIC8vIE5vdGU6IFdlIGRv
bid0IGhhdmUgdG8gdXNlIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyBoZXJlIGJlY2F1c2UK
LSAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGluIHRoZSBjb25zdHJ1Y3RvciBv
biB0aGUgbWFpbiB0aHJlYWQKLSAgICAvLyBiZWZvcmUgYW55IG90aGVyIHRocmVhZHMgdGhhdCBj
YWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRl
eCwgbXV0ZXgsICgpKTsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxp
bnQsIFN0cmluZz4gR3VpZFZlcnNpb25NYXA7Ci1zdGF0aWMgR3VpZFZlcnNpb25NYXAmIGd1aWRU
b1ZlcnNpb25NYXAoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoR3VpZFZlcnNpb25NYXAs
IG1hcCwgKCkpOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLS8vIE5PVEU6IENhbGxlciBtdXN0IGxv
Y2sgZ3VpZE11dGV4KCkuCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlR3VpZFZlcnNpb25NYXAo
aW50IGd1aWQsIFN0cmluZyBuZXdWZXJzaW9uKQotewotICAgIC8vIEVuc3VyZSB0aGUgdGhlIG11
dGV4IGlzIGxvY2tlZC4KLSAgICBBU1NFUlQoIWd1aWRNdXRleCgpLnRyeUxvY2soKSk7Ci0KLSAg
ICAvLyBOb3RlOiBJdCBpcyBub3Qgc2FmZSB0byBwdXQgYW4gZW1wdHkgc3RyaW5nIGludG8gdGhl
IGd1aWRUb1ZlcnNpb25NYXAoKSBtYXAuCi0gICAgLy8gVGhhdCdzIGJlY2F1c2UgdGhlIG1hcCBp
cyBjcm9zcy10aHJlYWQsIGJ1dCBlbXB0eSBzdHJpbmdzIGFyZSBwZXItdGhyZWFkLgotICAgIC8v
IFRoZSBjb3B5KCkgZnVuY3Rpb24gbWFrZXMgYSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgeW91IGNh
biB1c2Ugb24gdGhlIGN1cnJlbnQKLSAgICAvLyB0aHJlYWQsIGJ1dCB3ZSBuZWVkIGEgc3RyaW5n
IHdlIGNhbiBrZWVwIGluIGEgY3Jvc3MtdGhyZWFkIGRhdGEgc3RydWN0dXJlLgotICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIGEgcXVpdGUtYXdrd2FyZCByZXN0cmljdGlvbiB0byBoYXZlIHRvIHByb2dy
YW0gd2l0aC4KLQotICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSBj
b21tZW50IGFib3ZlKS4KLSAgICBndWlkVG9WZXJzaW9uTWFwKCkuc2V0KGd1aWQsIG5ld1ZlcnNp
b24uaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBuZXdWZXJzaW9uLnRocmVhZHNhZmVDb3B5KCkpOwot
fQotCi10eXBlZGVmIEhhc2hNYXA8aW50LCBIYXNoU2V0PERhdGFiYXNlKj4qPiBHdWlkRGF0YWJh
c2VNYXA7Ci1zdGF0aWMgR3VpZERhdGFiYXNlTWFwJiBndWlkVG9EYXRhYmFzZU1hcCgpCi17Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkRGF0YWJhc2VNYXAsIG1hcCwgKCkpOwotICAgIHJl
dHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFiYXNlVmVyc2lvbktleSgp
Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGtleSwgKCJXZWJLaXREYXRhYmFz
ZVZlcnNpb25LZXkiKSk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotc3RhdGljIGludCBndWlkRm9y
T3JpZ2luQW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
LQogY2xhc3MgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxEYXRh
YmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0
YWJhc2UpCisgICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFz
az4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPERhdGFi
YXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gbmV3
IERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2soZGF0YWJhc2UpOworICAgICAgICByZXR1cm4g
bmV3IERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2soZGF0YWJhc2UsIGNyZWF0aW9uQ2FsbGJh
Y2spOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KikKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnBlcmZvcm1DcmVh
dGlvbkNhbGxiYWNrKCk7CisgICAgICAgIG1fY3JlYXRpb25DYWxsYmFjay0+aGFuZGxlRXZlbnQo
Y29udGV4dCwgbV9kYXRhYmFzZS5nZXQoKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIERhdGFi
YXNlQ3JlYXRpb25DYWxsYmFja1Rhc2soUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UpCisg
ICAgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRh
YmFzZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjYWxsYmFjaykKICAgICAgICAgOiBt
X2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fY3JlYXRpb25DYWxsYmFjayhjYWxsYmFj
aykKICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRyPERhdGFiYXNlPiBtX2RhdGFiYXNlOworICAg
IFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBtX2NyZWF0aW9uQ2FsbGJhY2s7CiB9OwogCiBQYXNz
UmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwKQEAgLTE0NywxNCArOTEsMTMgQEAg
UGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2U6Om9wZW5EYXRhYgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlKQogewogICAgIGlm
ICghRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJhc2UoY29udGV4
dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBUaGVyZSBzaG91bGQgYmUgYW4gZXhjZXB0aW9uIHJhaXNlZCBoZXJlIGluIGFkZGl0aW9uIHRv
IHJldHVybmluZyBhIG51bGwgRGF0YWJhc2Ugb2JqZWN0LiAgVGhlIHF1ZXN0aW9uIGhhcyBiZWVu
IHJhaXNlZCB3aXRoIHRoZSBXSEFUV0cuCiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJh
c2UgJXMgZm9yIG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUu
YXNjaWkoKS5kYXRhKCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8RGF0
YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4
cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJh
Y2spKTsKKyAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFi
YXNlKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUpKTsKIAotICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKGUpKSB7
CisgICAgaWYgKCFkYXRhYmFzZS0+b3BlbkFuZFZlcmlmeVZlcnNpb24oIWNyZWF0aW9uQ2FsbGJh
Y2ssIGUpKSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRmFpbGVkIHRvIG9wZW4gYW5kIHZl
cmlmeSB2ZXJzaW9uIChleHBlY3RlZCAlcykgb2YgZGF0YWJhc2UgJXMiLCBleHBlY3RlZFZlcnNp
b24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlLT5kYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCku
ZGF0YSgpKTsKICAgICAgICAgY29udGV4dC0+cmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdl
dCgpKTsKICAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFi
YXNlKGRhdGFiYXNlLmdldCgpKTsKQEAgLTE3Niw1NyArMTE5LDI4IEBAIFBhc3NSZWZQdHI8RGF0
YWJhc2U+IERhdGFiYXNlOjpvcGVuRGF0YWIKICAgICAvLyB2ZXJzaW9uIHRvICIiIGFuZCBzY2hl
ZHVsZSB0aGUgY3JlYXRpb24gY2FsbGJhY2suIEJlY2F1c2Ugb2Ygc29tZSBzdWJ0bGUgU3RyaW5n
CiAgICAgLy8gaW1wbGVtZW50YXRpb24gaXNzdWVzLCB3ZSBoYXZlIHRvIHJlc2V0IG1fZXhwZWN0
ZWRWZXJzaW9uIGhlcmUgaW5zdGVhZCBvZiBkb2luZwogICAgIC8vIGl0IGluc2lkZSBwZXJmb3Jt
T3BlbkFuZFZlcmlmeSgpIHdoaWNoIGlzIHJ1biBvbiB0aGUgREIgdGhyZWFkLgotICAgIGlmIChk
YXRhYmFzZS0+aXNOZXcoKSAmJiBkYXRhYmFzZS0+bV9jcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7
CisgICAgaWYgKGRhdGFiYXNlLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsK
ICAgICAgICAgZGF0YWJhc2UtPm1fZXhwZWN0ZWRWZXJzaW9uID0gIiI7CiAgICAgICAgIExPRyhT
dG9yYWdlQVBJLCAiU2NoZWR1bGluZyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIGZvciBk
YXRhYmFzZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOwotICAgICAgICBkYXRhYmFzZS0+bV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNr
OjpjcmVhdGUoZGF0YWJhc2UpKTsKKyAgICAgICAgZGF0YWJhc2UtPm1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+cG9zdFRhc2soRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6Y3JlYXRlKGRh
dGFiYXNlLCBjcmVhdGlvbkNhbGxiYWNrKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGRhdGFiYXNl
OwogfQogCi1EYXRhYmFzZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNz
UmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2spCi0gICAgOiBtX3RyYW5z
YWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSkKK0RhdGFiYXNlOjpEYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpCisgICAgOiBBYnN0cmFjdERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVj
dGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpCisgICAgLCBtX3RyYW5zYWN0
aW9uSW5Qcm9ncmVzcyhmYWxzZSkKICAgICAsIG1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCh0
cnVlKQotICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCi0gICAgLCBtX25h
bWUobmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQotICAgICwgbV9ndWlkKDApCi0gICAgLCBtX2V4
cGVjdGVkVmVyc2lvbihleHBlY3RlZFZlcnNpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAs
IG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1f
ZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQogICAgICwgbV9kZWxldGVkKGZhbHNlKQogICAg
ICwgbV9zdG9wcGVkKGZhbHNlKQotICAgICwgbV9vcGVuZWQoZmFsc2UpCi0gICAgLCBtX25ldyhm
YWxzZSkKLSAgICAsIG1fY3JlYXRpb25DYWxsYmFjayhjcmVhdGlvbkNhbGxiYWNrKQogewotICAg
IEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCkpOwotICAgIG1fY29udGV4dFRo
cmVhZFNlY3VyaXR5T3JpZ2luID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9y
aWdpbigpOwogICAgIG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fY29udGV4dFRo
cmVhZFNlY3VyaXR5T3JpZ2luLT50aHJlYWRzYWZlQ29weSgpOwotICAgIGlmIChtX25hbWUuaXNO
dWxsKCkpCi0gICAgICAgIG1fbmFtZSA9ICIiOwogCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6aW5p
dGlhbGl6ZVRocmVhZGluZygpOwotCi0gICAgbV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5hbWUo
c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbmFtZSk7Ci0KLSAgICB7Ci0gICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0KLSAgICAgICAgSGFzaFNldDxEYXRhYmFz
ZSo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKLSAgICAgICAg
aWYgKCFoYXNoU2V0KSB7Ci0gICAgICAgICAgICBoYXNoU2V0ID0gbmV3IEhhc2hTZXQ8RGF0YWJh
c2UqPjsKLSAgICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkuc2V0KG1fZ3VpZCwgaGFzaFNl
dCk7Ci0gICAgICAgIH0KLQotICAgICAgICBoYXNoU2V0LT5hZGQodGhpcyk7Ci0gICAgfQotCiAg
ICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSk7Ci0g
ICAgbV9maWxlbmFtZSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmZ1bGxQYXRoRm9yRGF0
YWJhc2Uoc2VjdXJpdHlPcmlnaW4oKSwgbV9uYW1lKTsKIAotICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKLSAgICBjb250ZXh0LT5hZGRPcGVuRGF0
YWJhc2UodGhpcyk7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRPcGVuRGF0YWJh
c2UodGhpcyk7CiB9CiAKIGNsYXNzIERlcmVmQ29udGV4dFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzayB7CkBAIC0yNTMsMTUgKzE2NywyMSBAQCBEYXRhYmFzZTo6fkRh
dGFiYXNlKCkKICAgICB9CiB9CiAKLWJvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9u
KEV4Y2VwdGlvbkNvZGUmIGUpCitTdHJpbmcgRGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAorewor
ICAgIGlmIChtX2RlbGV0ZWQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4g
QWJzdHJhY3REYXRhYmFzZTo6dmVyc2lvbigpOworfQorCitib29sIERhdGFiYXNlOjpvcGVuQW5k
VmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2Rl
JiBlKQogewogICAgIGlmICghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVh
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXIgPSBE
YXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZSgpOwogCiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
CiAgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHN5bmNocm9uaXplcjsKLSAgICBPd25QdHI8
RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSh0aGlzLCAm
c3luY2hyb25pemVyLCBlLCBzdWNjZXNzKTsKKyAgICBPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4g
dGFzayA9IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSh0aGlzLCBzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgJnN5bmNocm9uaXplciwgZSwgc3VjY2Vzcyk7CiAKICAgICBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJl
bGVhc2UoKSk7CiAgICAgc3luY2hyb25pemVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwpAQCAt
MjY5LDkzICsxODksNiBAQCBib29sIERhdGFiYXNlOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihFeGNl
CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLQotc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVz
dWx0RnJvbURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwg
U3RyaW5nJiByZXN1bHRTdHJpbmcpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChk
YiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAg
aWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yICgl
aSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2Ug
KCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVz
dWx0ID09IFNRTFJlc3VsdFJvdykgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChy
ZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmco
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJFcnJvciAoJWkpIHJlYWRpbmcgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVz
dWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci19Ci0KLWJvb2wgRGF0YWJhc2U6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJz
aW9uKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBnZXRWZXJzaW9uUXVlcnks
ICgiU0VMRUNUIHZhbHVlIEZST00gIiArIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiBXSEVS
RSBrZXkgPSAnIiArIGRhdGFiYXNlVmVyc2lvbktleSgpICsgIic7IikpOwotCi0gICAgbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKLQotICAgIGJvb2wgcmVzdWx0ID0gcmV0cmlldmVU
ZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIGdldFZlcnNpb25RdWVyeS50
aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwgZGF0
YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9y
aXplci0+ZW5hYmxlKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgYm9vbCBz
ZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KGRiLCBxdWVyeSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0K
LSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwg
cXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKLQotICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIHN0ZXAgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFz
ZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRGF0YWJhc2U6OnNldFZlcnNpb25J
bkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICAvLyBUaGUgSU5TRVJUIHdp
bGwgcmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeSBmb3IgdGhlIGRhdGFiYXNlIHdpdGggdGhlIG5l
dyB2ZXJzaW9uIG51bWJlciwgZHVlIHRvIHRoZSBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRQot
ICAgIC8vIGNsYXVzZSBpbiB0aGUgQ1JFQVRFIHN0YXRlbWVudCAoc2VlIERhdGFiYXNlOjpwZXJm
b3JtT3BlbkFuZFZlcmlmeSgpKS4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc2V0
VmVyc2lvblF1ZXJ5LCAoIklOU0VSVCBJTlRPICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSAr
ICIgKGtleSwgdmFsdWUpIFZBTFVFUyAoJyIgKyBkYXRhYmFzZVZlcnNpb25LZXkoKSArICInLCA/
KTsiKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwotCi0gICAgYm9v
bCByZXN1bHQgPSBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIHNldFZl
cnNpb25RdWVyeS50aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKLSAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2Ug
KCVzKSIsIHZlcnNpb24uYXNjaWkoKS5kYXRhKCksIHNldFZlcnNpb25RdWVyeS5hc2NpaSgpLmRh
dGEoKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1ib29sIERhdGFiYXNlOjp2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fZXhwZWN0ZWRWZXJzaW9uLmlzRW1wdHkoKSkgewotICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotICAgICAgICByZXR1cm4gbV9leHBl
Y3RlZFZlcnNpb24gPT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIERhdGFiYXNlOjptYXJrQXNEZWxldGVkQW5kQ2xv
c2UoKQogewogICAgIGlmIChtX2RlbGV0ZWQgfHwgIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
ZGF0YWJhc2VUaHJlYWQoKSkKQEAgLTQxMCwzMCArMjQzLDEzIEBAIHZvaWQgRGF0YWJhc2U6OmNs
b3NlKENsb3NlUG9saWN5IHBvbGljeSkKIHsKICAgICBSZWZQdHI8RGF0YWJhc2U+IHByb3RlY3Qg
PSB0aGlzOwogCi0gICAgaWYgKCFtX29wZW5lZCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQVNT
RVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSk7CiAgICAgQVNT
RVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNl
VGhyZWFkKCktPmdldFRocmVhZElEKCkpOwotICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsK
LSAgICAvLyBNdXN0IHJlZigpIGJlZm9yZSBjYWxsaW5nIGRhdGFiYXNlVGhyZWFkKCktPnJlY29y
ZERhdGFiYXNlQ2xvc2VkKCkuCi0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFz
ZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCh0aGlzKTsKLSAgICBtX29wZW5lZCA9IGZh
bHNlOwogCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwot
Ci0gICAgICAgIEhhc2hTZXQ8RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFw
KCkuZ2V0KG1fZ3VpZCk7Ci0gICAgICAgIEFTU0VSVChoYXNoU2V0KTsKLSAgICAgICAgQVNTRVJU
KGhhc2hTZXQtPmNvbnRhaW5zKHRoaXMpKTsKLSAgICAgICAgaGFzaFNldC0+cmVtb3ZlKHRoaXMp
OwotICAgICAgICBpZiAoaGFzaFNldC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBndWlkVG9E
YXRhYmFzZU1hcCgpLnJlbW92ZShtX2d1aWQpOwotICAgICAgICAgICAgZGVsZXRlIGhhc2hTZXQ7
Ci0gICAgICAgICAgICBndWlkVG9WZXJzaW9uTWFwKCkucmVtb3ZlKG1fZ3VpZCk7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgY2xvc2VEYXRhYmFzZSgpOwogCisgICAgLy8gTXVzdCByZWYoKSBiZWZv
cmUgY2FsbGluZyBkYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCgpLgorICAg
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJh
c2VDbG9zZWQodGhpcyk7CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRo
cmVhZCgpLT51bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyh0aGlzKTsKICAgICBpZiAocG9saWN5ID09
IFJlbW92ZURhdGFiYXNlRnJvbUNvbnRleHQpCiAgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+cG9zdFRhc2soQ29udGV4dFJlbW92ZU9wZW5EYXRhYmFzZVRhc2s6OmNyZWF0ZSh0aGlz
KSk7CkBAIC00NzAsNzkgKzI4Niw2IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4
aW11bVNpemUKICAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZ2V0TWF4U2l6
ZUZvckRhdGFiYXNlKHRoaXMpOwogfQogCi12b2lkIERhdGFiYXNlOjpkaXNhYmxlQXV0aG9yaXpl
cigpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNl
QXV0aG9yaXplci0+ZGlzYWJsZSgpOwotfQotCi12b2lkIERhdGFiYXNlOjplbmFibGVBdXRob3Jp
emVyKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fZGF0YWJh
c2VBdXRob3JpemVyLT5lbmFibGUoKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6c2V0QXV0aG9yaXpl
clJlYWRPbmx5KCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1f
ZGF0YWJhc2VBdXRob3JpemVyLT5zZXRSZWFkT25seSgpOwotfQotCi1ib29sIERhdGFiYXNlOjps
YXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhv
cml6ZXIpOwotICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbkNoYW5n
ZWREYXRhYmFzZSgpOwotfQotCi1ib29sIERhdGFiYXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0KCkK
LXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIHJldHVybiBtX2RhdGFi
YXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbldhc0luc2VydCgpOwotfQotCi12b2lkIERhdGFiYXNl
OjpyZXNldERlbGV0ZXMoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0g
ICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0RGVsZXRlcygpOwotfQotCi1ib29sIERhdGFi
YXNlOjpoYWREZWxldGVzKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwot
ICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+aGFkRGVsZXRlcygpOwotfQotCi1zdGF0
aWMgaW50IGd1aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgU3RyaW5nIHN0cmluZ0lEOwotICAgIGlmIChvcmlnaW4uZW5k
c1dpdGgoIi8iKSkKLSAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyBuYW1lOwotICAgIGVsc2UK
LSAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyAiLyIgKyBuYW1lOwotCi0gICAgLy8gTm90ZTog
V2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljIGhlcmUgYmVj
YXVzZQotICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgaW4gdGhlIGNvbnN0cnVj
dG9yIG9uIHRoZSBtYWluIHRocmVhZAotICAgIC8vIGJlZm9yZSBhbnkgb3RoZXIgdGhyZWFkcyB0
aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBhcmUgdXNlZC4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KE11dGV4LCBzdHJpbmdJZGVudGlmaWVyTXV0ZXgsICgpKTsKLSAgICBNdXRleExvY2tlciBsb2Nr
ZXIoc3RyaW5nSWRlbnRpZmllck11dGV4KTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBp
bnQ+IElER3VpZE1hcDsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKElER3VpZE1hcCwgc3RyaW5n
SWRlbnRpZmllclRvR1VJRE1hcCwgKCkpOwotICAgIGludCBndWlkID0gc3RyaW5nSWRlbnRpZmll
clRvR1VJRE1hcC5nZXQoc3RyaW5nSUQpOwotICAgIGlmICghZ3VpZCkgewotICAgICAgICBzdGF0
aWMgaW50IGN1cnJlbnROZXdHVUlEID0gMTsKLSAgICAgICAgZ3VpZCA9IGN1cnJlbnROZXdHVUlE
Kys7Ci0gICAgICAgIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuc2V0KHN0cmluZ0lELCBndWlk
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ3VpZDsKLX0KLQotdm9pZCBEYXRhYmFzZTo6cmVzZXRB
dXRob3JpemVyKCkKLXsKLSAgICBpZiAobV9kYXRhYmFzZUF1dGhvcml6ZXIpCi0gICAgICAgIG1f
ZGF0YWJhc2VBdXRob3JpemVyLT5yZXNldCgpOwotfQotCiB2b2lkIERhdGFiYXNlOjpwZXJmb3Jt
UG9saWN5Q2hlY2tzKCkKIHsKICAgICAvLyBGSVhNRTogQ29kZSBzaW1pbGFyIHRvIHRoZSBmb2xs
b3dpbmcgd2lsbCBuZWVkIHRvIGJlIHJ1biB0byBlbmZvcmNlIHRoZSBwZXItb3JpZ2luIHNpemUg
bGltaXQgdGhlIHNwZWMgbWFuZGF0ZXMuCkBAIC01NTcsOTIgKzMwMCwxNiBAQCB2b2lkIERhdGFi
YXNlOjpwZXJmb3JtUG9saWN5Q2hlY2tzKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1i
b29sIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShFeGNlcHRpb25Db2RlJiBlKQorYm9v
bCBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgRXhjZXB0aW9uQ29kZSYgZSkKIHsKLSAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2Uub3Bl
bihtX2ZpbGVuYW1lLCB0cnVlKSkgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVu
IGRhdGFiYXNlIGF0IHBhdGggJXMiLCBtX2ZpbGVuYW1lLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAg
ICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0oKSkK
LSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gdHVybiBvbiBpbmNyZW1lbnRhbCBhdXRvLXZh
Y3V1bSBmb3IgZGF0YWJhc2UgJXMiLCBtX2ZpbGVuYW1lLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBp
ZiAoQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIGUpKSB7CisgICAgICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRh
dGFiYXNlVGhyZWFkKCkpCisgICAgICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRh
dGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlzKTsKIAotICAgIEFTU0VSVCht
X2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRBdXRob3JpemVy
KG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1l
b3V0KG1heFNxbGl0ZUJ1c3lXYWl0VGltZSk7Ci0KLSAgICBTdHJpbmcgY3VycmVudFZlcnNpb247
Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotCi0gICAg
ICAgIEd1aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRyeSA9IGd1aWRUb1ZlcnNpb25NYXAoKS5m
aW5kKG1fZ3VpZCk7Ci0gICAgICAgIGlmIChlbnRyeSAhPSBndWlkVG9WZXJzaW9uTWFwKCkuZW5k
KCkpIHsKLSAgICAgICAgICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNl
ZSB1cGRhdGVHdWlkVmVyc2lvbk1hcCgpKS4KLSAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0g
ZW50cnktPnNlY29uZC5pc051bGwoKSA/IFN0cmluZygiIikgOiBlbnRyeS0+c2Vjb25kOwotICAg
ICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJyZW50IGNhY2hlZCB2ZXJzaW9uIGZvciBndWlk
ICVpIGlzICVzIiwgbV9ndWlkLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIk5vIGNhY2hlZCB2ZXJz
aW9uIGZvciBndWlkICVpIiwgbV9ndWlkKTsKLQotICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURh
dGFiYXNlLnRhYmxlRXhpc3RzKGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkgewotICAgICAgICAg
ICAgICAgIG1fbmV3ID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9zcWxpdGVEYXRh
YmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFICIgKyBkYXRhYmFzZUluZm9UYWJsZU5h
bWUoKSArICIgKGtleSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENP
TkZMSUNUIFJFUExBQ0UsdmFsdWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsiKSkg
ewotICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgdGFibGUg
JXMgaW4gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKS5hc2NpaSgpLmRhdGEo
KSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGUgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2Ug
dGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgbV9z
cWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWdl
dFZlcnNpb25Gcm9tRGF0YWJhc2UoY3VycmVudFZlcnNpb24pKSB7Ci0gICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVz
IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAg
ZSA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5k
bGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCi0gICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFz
ZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChjdXJyZW50VmVyc2lvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAg
ICAgIExPRyhTdG9yYWdlQVBJLCAiUmV0cmlldmVkIGN1cnJlbnQgdmVyc2lvbiAlcyBmcm9tIGRh
dGFiYXNlICVzIiwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdO
YW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbV9uZXcgfHwg
IW1fY3JlYXRpb25DYWxsYmFjaykgewotICAgICAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAi
U2V0dGluZyB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICVzIHRoYXQgd2FzIGp1c3QgY3JlYXRlZCIs
IG1fZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFz
Y2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNldFZlcnNpb25JbkRhdGFiYXNl
KG1fZXhwZWN0ZWRWZXJzaW9uKSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBzZXQgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyIsIG1fZXhwZWN0ZWRWZXJzaW9u
LmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAg
ICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgICAgICAg
ICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3VycmVu
dFZlcnNpb24gPSBtX2V4cGVjdGVkVmVyc2lvbjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCBjdXJyZW50VmVyc2lvbik7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoY3VycmVudFZlcnNpb24uaXNOdWxsKCkpIHsKLSAgICAgICAg
TE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBkb2VzIG5vdCBoYXZlIGl0cyB2ZXJzaW9uIHNl
dCIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBjdXJyZW50
VmVyc2lvbiA9ICIiOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlz
bid0IHRoZSBlbXB0eSBzdHJpbmcsIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRhdGFiYXNlIHZl
cnNpb24gd2UgaGF2ZSBtYXRjaGVzIHRoYXQgdmVyc2lvbi4gT3RoZXJ3aXNlLCBzZXQgYW4gZXhj
ZXB0aW9uLgotICAgIC8vIElmIHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlzIHRoZSBlbXB0eSBzdHJp
bmcsIHRoZW4gd2UgYWx3YXlzIHJldHVybiB3aXRoIHdoYXRldmVyIHZlcnNpb24gb2YgdGhlIGRh
dGFiYXNlIHdlIGhhdmUuCi0gICAgaWYgKCghbV9uZXcgfHwgIW1fY3JlYXRpb25DYWxsYmFjaykg
JiYgbV9leHBlY3RlZFZlcnNpb24ubGVuZ3RoKCkgJiYgbV9leHBlY3RlZFZlcnNpb24gIT0gY3Vy
cmVudFZlcnNpb24pIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJwYWdlIGV4cGVjdHMgdmVy
c2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzLCB3aGljaCBhY3R1YWxseSBoYXMgdmVyc2lvbiBuYW1l
ICVzIC0gb3BlbkRhdGFiYXNlKCkgY2FsbCB3aWxsIGZhaWwiLCBtX2V4cGVjdGVkVmVyc2lvbi5h
c2NpaSgpLmRhdGEoKSwKLSAgICAgICAgICAgIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5k
YXRhKCksIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgZSA9IElOVkFM
SURfU1RBVEVfRVJSOwotICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFz
ZSBmaWxlLgotICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgLy8gQWxsIGNoZWNr
cyBwYXNzZWQgYW5kIHdlIHN0aWxsIGhhdmUgYSBoYW5kbGUgdG8gdGhpcyBkYXRhYmFzZSBmaWxl
LgotICAgIC8vIE1ha2Ugc3VyZSBEYXRhYmFzZVRocmVhZCBjbG9zZXMgaXQgd2hlbiBEYXRhYmFz
ZVRocmVhZCBnb2VzIGF3YXkuCi0gICAgbV9vcGVuZWQgPSB0cnVlOwotICAgIGlmIChtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpCi0gICAgICAgIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VPcGVuKHRoaXMp
OwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIERhdGFi
YXNlOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5n
JiBuZXdWZXJzaW9uLApAQCAtNzU3LDExICs0MjQsNiBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFz
ZTo6cGVyZm9ybUdldFRhYmxlCiAgICAgcmV0dXJuIHRhYmxlTmFtZXM7CiB9CiAKLXZvaWQgRGF0
YWJhc2U6OnBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKCkKLXsKLSAgICBtX2NyZWF0aW9uQ2FsbGJh
Y2stPmhhbmRsZUV2ZW50KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSwgdGhpcyk7Ci19
Ci0KIFNRTFRyYW5zYWN0aW9uQ2xpZW50KiBEYXRhYmFzZTo6dHJhbnNhY3Rpb25DbGllbnQoKSBj
b25zdAogewogICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhy
ZWFkKCktPnRyYW5zYWN0aW9uQ2xpZW50KCk7CkBAIC03NzIsMTQgKzQzNCw2IEBAIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IqIERhdGFiYXNlOjp0cmEKICAgICByZXR1cm4gbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7
CiB9CiAKLVN0cmluZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZGVs
ZXRlZCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihn
dWlkTXV0ZXgoKSk7Ci0gICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS50
aHJlYWRzYWZlQ29weSgpOwotfQotCiBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6dGFibGVOYW1l
cygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB1c2luZyB0aHJlYWRzYWZlQ29weSBvbiB0aGVzZSBz
dHJpbmdzIGxvb2tzIG9rIHNpbmNlIHRocmVhZHMgdGFrZSBzdHJpY3QgdHVybnMKQEAgLTc5Nywx
NCArNDUxLDYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnRhYmxlTmFtZXMoKQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25z
dCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLnRo
cmVhZHNhZmVDb3B5KCk7Ci0gICAgLy8gVXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVy
c2lvbiBtYXAuCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLSAgICB1cGRh
dGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIHZlcnNpb24pOwotfQotCiBTZWN1cml0eU9yaWdpbiog
RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKIHsKICAgICBpZiAobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkKQEAgLTgxNCwyOSArNDYwLDYgQEAgU2Vj
dXJpdHlPcmlnaW4qIERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbgogICAgIHJldHVybiAwOwogfQog
Ci1TdHJpbmcgRGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIoKSBjb25zdAotewotICAgIC8vIFJl
dHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkKLSAgICByZXR1
cm4gbV9uYW1lLnRocmVhZHNhZmVDb3B5KCk7Ci19Ci0KLVN0cmluZyBEYXRhYmFzZTo6ZGlzcGxh
eU5hbWUoKSBjb25zdAotewotICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50
aW5nIHRocmVhZCBzYWZldHkKLSAgICByZXR1cm4gbV9kaXNwbGF5TmFtZS50aHJlYWRzYWZlQ29w
eSgpOwotfQotCi11bnNpZ25lZCBsb25nIERhdGFiYXNlOjplc3RpbWF0ZWRTaXplKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9lc3RpbWF0ZWRTaXplOwotfQotCi1TdHJpbmcgRGF0YWJhc2U6OmZp
bGVOYW1lKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3Vu
dGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fZmlsZW5hbWUudGhyZWFkc2FmZUNvcHko
KTsKLX0KLQogdm9pZCBEYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpCiB7CiAg
ICAgaW50NjRfdCBmcmVlU3BhY2VTaXplID0gbV9zcWxpdGVEYXRhYmFzZS5mcmVlU3BhY2VTaXpl
KCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkocmV2aXNpb24gNjE3MTApCisrKyBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTggKzMzLDEzIEBACiAjaW5jbHVk
ZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5j
bHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW4uaCIKLSNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEYXRhYmFzZUF1
dGhvcml6ZXI7CiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOwotY2xhc3MgRGF0YWJhc2VUaHJlYWQ7
CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBj
bGFzcyBTUUxUcmFuc2FjdGlvbjsKQEAgLTU0LDggKzQ5LDYgQEAgY2xhc3MgU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvcjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKIGNsYXNz
IFZvaWRDYWxsYmFjazsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQogY2xhc3MgRGF0
YWJhc2UgOiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
RGF0YWJhc2UoKTsKQEAgLTYzLDM3ICs1NiwxNyBAQCBwdWJsaWM6CiAgICAgLy8gRGlyZWN0IHN1
cHBvcnQgZm9yIHRoZSBET00gQVBJCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9w
ZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcg
dmVyc2lvbigpIGNvbnN0OwogICAgIHZvaWQgY2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmIG9s
ZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrPiwKICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0Nh
bGxiYWNrKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ss
IGJvb2wgcmVhZE9ubHkpOwogCiAgICAgLy8gSW50ZXJuYWwgZW5naW5lIHN1cHBvcnQKLSAgICBz
dGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKTsKLQotICAgIHZvaWQg
ZGlzYWJsZUF1dGhvcml6ZXIoKTsKLSAgICB2b2lkIGVuYWJsZUF1dGhvcml6ZXIoKTsKLSAgICB2
b2lkIHNldEF1dGhvcml6ZXJSZWFkT25seSgpOwotICAgIGJvb2wgbGFzdEFjdGlvbkNoYW5nZWRE
YXRhYmFzZSgpOwotICAgIGJvb2wgbGFzdEFjdGlvbldhc0luc2VydCgpOwotICAgIHZvaWQgcmVz
ZXREZWxldGVzKCk7Ci0gICAgYm9vbCBoYWREZWxldGVzKCk7Ci0KICAgICBWZWN0b3I8U3RyaW5n
PiB0YWJsZU5hbWVzKCk7CiAKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdp
bigpIGNvbnN0OwogICAgIFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSgpIHsgcmV0dXJu
IG1fc3FsaXRlRGF0YWJhc2U7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdJZGVudGlmaWVy
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
U3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7Ci0KLSAgICBib29sIGdldFZlcnNpb25Gcm9tRGF0YWJh
c2UoU3RyaW5nJik7Ci0gICAgYm9vbCBzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcm
KTsKLSAgICB2b2lkIHNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKLSAgICBib29s
IHZlcnNpb25NYXRjaGVzRXhwZWN0ZWQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXJr
QXNEZWxldGVkQW5kQ2xvc2UoKTsKICAgICBib29sIGRlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBt
X2RlbGV0ZWQ7IH0KQEAgLTEwMSwyOCArNzQsMjMgQEAgcHVibGljOgogICAgIGVudW0gQ2xvc2VQ
b2xpY3kgeyBEb05vdFJlbW92ZURhdGFiYXNlRnJvbUNvbnRleHQsIFJlbW92ZURhdGFiYXNlRnJv
bUNvbnRleHQgfTsKICAgICB2b2lkIGNsb3NlKENsb3NlUG9saWN5KTsKICAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VJbW1lZGlhdGVseSgpOwotICAgIGJvb2wgb3BlbmVkKCkgY29uc3QgeyByZXR1cm4g
bV9vcGVuZWQ7IH0KIAogICAgIHZvaWQgc3RvcCgpOwogICAgIGJvb2wgc3RvcHBlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RvcHBlZDsgfQogCi0gICAgYm9vbCBpc05ldygpIGNvbnN0IHsgcmV0dXJu
IG1fbmV3OyB9Ci0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGF0YWJhc2VTaXplKCkgY29uc3Q7
CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplKCkgY29uc3Q7CiAKICAgICAvLyBD
YWxsZWQgZnJvbSBEYXRhYmFzZVRocmVhZCwgbXVzdCBiZSBwcmVwYXJlZCB0byB3b3JrIG9uIHRo
ZSBiYWNrZ3JvdW5kIHRocmVhZAotICAgIHZvaWQgcmVzZXRBdXRob3JpemVyKCk7CiAgICAgdm9p
ZCBwZXJmb3JtUG9saWN5Q2hlY2tzKCk7CiAKLSAgICBib29sIHBlcmZvcm1PcGVuQW5kVmVyaWZ5
KEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnko
Ym9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9p
ZCBpblByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB2b2lkIHNjaGVkdWxlVHJh
bnNhY3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiopOwogICAgIHZvaWQgc2NoZWR1bGVUcmFu
c2FjdGlvblN0ZXAoU1FMVHJhbnNhY3Rpb24qLCBib29sIGltbWVkaWF0ZWx5ID0gZmFsc2UpOwog
CiAgICAgVmVjdG9yPFN0cmluZz4gcGVyZm9ybUdldFRhYmxlTmFtZXMoKTsKLSAgICB2b2lkIHBl
cmZvcm1DcmVhdGlvbkNhbGxiYWNrKCk7CiAKICAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJh
bnNhY3Rpb25DbGllbnQoKSBjb25zdDsKICAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3Q7CkBAIC0xMzEsNDUgKzk5LDIzIEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKLSAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4pOworICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAKLSAgICBi
b29sIG9wZW5BbmRWZXJpZnlWZXJzaW9uKEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIG9wZW5B
bmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNv
ZGUmKTsKIAogICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvbigpOwogCisgICAgc3RhdGljIHZv
aWQgZGVsaXZlclBlbmRpbmdDYWxsYmFjayh2b2lkKik7CisKICAgICBEZXF1ZTxSZWZQdHI8U1FM
VHJhbnNhY3Rpb24+ID4gbV90cmFuc2FjdGlvblF1ZXVlOwogICAgIE11dGV4IG1fdHJhbnNhY3Rp
b25JblByb2dyZXNzTXV0ZXg7CiAgICAgYm9vbCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzczsKICAg
ICBib29sIG1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZDsKIAotICAgIHN0YXRpYyB2b2lkIGRl
bGl2ZXJQZW5kaW5nQ2FsbGJhY2sodm9pZCopOwotCi0gICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICBSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luOwogICAgIFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gbV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luOwotICAgIFN0cmluZyBtX25h
bWU7Ci0gICAgaW50IG1fZ3VpZDsKLSAgICBTdHJpbmcgbV9leHBlY3RlZFZlcnNpb247Ci0gICAg
U3RyaW5nIG1fZGlzcGxheU5hbWU7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2VzdGltYXRlZFNpemU7
Ci0gICAgU3RyaW5nIG1fZmlsZW5hbWU7CiAKICAgICBib29sIG1fZGVsZXRlZDsKLQogICAgIGJv
b2wgbV9zdG9wcGVkOwotCi0gICAgYm9vbCBtX29wZW5lZDsKLQotICAgIGJvb2wgbV9uZXc7Ci0K
LSAgICBTUUxpdGVEYXRhYmFzZSBtX3NxbGl0ZURhdGFiYXNlOwotICAgIFJlZlB0cjxEYXRhYmFz
ZUF1dGhvcml6ZXI+IG1fZGF0YWJhc2VBdXRob3JpemVyOwotCi0gICAgUmVmUHRyPERhdGFiYXNl
Q2FsbGJhY2s+IG1fY3JlYXRpb25DYWxsYmFjazsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBTdHJp
bmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1
cml0eU9yaWdpbi0+dG9TdHJpbmcoKSArICI6OiIgKyBtX25hbWU7IH0KLSNlbmRpZgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0
aG9yaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9y
aXplci5jcHAJKHJldmlzaW9uIDYxNzEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0
aG9yaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxOSBAQAogI2luY2x1ZGUg
IkRhdGFiYXNlQXV0aG9yaXplci5oIgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQotI2luY2x1ZGUg
IkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURhdGFiYXNlQXV0aG9yaXpl
cjo6RGF0YWJhc2VBdXRob3JpemVyKCkKK1Bhc3NSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVyPiBE
YXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxl
TmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlQXV0aG9yaXplcihkYXRh
YmFzZUluZm9UYWJsZU5hbWUpKTsKK30KKworRGF0YWJhc2VBdXRob3JpemVyOjpEYXRhYmFzZUF1
dGhvcml6ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUpCiAgICAgOiBtX3Nl
Y3VyaXR5RW5hYmxlZChmYWxzZSkKKyAgICAsIG1fZGF0YWJhc2VJbmZvVGFibGVOYW1lKGRhdGFi
YXNlSW5mb1RhYmxlTmFtZSkKIHsKICAgICByZXNldCgpOwogICAgIGFkZFdoaXRlbGlzdGVkRnVu
Y3Rpb25zKCk7CkBAIC0zODgsNyArMzk0LDcgQEAgdm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6OnNl
dFJlYWRPbmx5KCkKICAgICBtX3JlYWRPbmx5ID0gdHJ1ZTsKIH0KIAotaW50IERhdGFiYXNlQXV0
aG9yaXplcjo6ZGVueUJhc2VkT25UYWJsZU5hbWUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCitp
bnQgRGF0YWJhc2VBdXRob3JpemVyOjpkZW55QmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcm
IHRhYmxlTmFtZSkgY29uc3QKIHsKICAgICBpZiAoIW1fc2VjdXJpdHlFbmFibGVkKQogICAgICAg
ICByZXR1cm4gU1FMQXV0aEFsbG93OwpAQCAtMzk5LDcgKzQwNSw3IEBAIGludCBEYXRhYmFzZUF1
dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFibGUKICAgICAvLyAgICBlcXVhbElnbm9yaW5nQ2FzZSh0
YWJsZU5hbWUsICJzcWxpdGVfc2VxdWVuY2UiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh0YWJsZU5h
bWUsIERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkpCiAgICAgLy8gICAgICAgIHJl
dHVybiBTUUxBdXRoRGVueTsKIAotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0YWJsZU5hbWUs
IERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkpCisgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHRhYmxlTmFtZSwgbV9kYXRhYmFzZUluZm9UYWJsZU5hbWUpKQogICAgICAgICByZXR1
cm4gU1FMQXV0aERlbnk7CiAKICAgICByZXR1cm4gU1FMQXV0aEFsbG93OwpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAkocmV2aXNpb24gNjE3MTApCisrKyBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwx
MSBAQAogI2lmbmRlZiBEYXRhYmFzZUF1dGhvcml6ZXJfaAogI2RlZmluZSBEYXRhYmFzZUF1dGhv
cml6ZXJfaAogCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTdHJpbmdI
YXNoLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDMsNyArNDQsNyBAQCBleHRlcm4gY29uc3QgaW50IFNRTEF1dGhEZW55OwogCiBj
bGFzcyBEYXRhYmFzZUF1dGhvcml6ZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxEYXRhYmFz
ZUF1dGhvcml6ZXI+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZUF1
dGhvcml6ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZUF1dGhvcml6
ZXIpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVyPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUpOwogCiAgICAgaW50IGNyZWF0ZVRh
YmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKICAgICBpbnQgY3JlYXRlVGVtcFRhYmxlKGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKTsKQEAgLTk3LDkgKzk4LDkgQEAgcHVibGljOgogICAgIGJv
b2wgaGFkRGVsZXRlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFkRGVsZXRlczsgfQogCiBwcml2YXRl
OgotICAgIERhdGFiYXNlQXV0aG9yaXplcigpOworICAgIERhdGFiYXNlQXV0aG9yaXplcihjb25z
dCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSk7CiAgICAgdm9pZCBhZGRXaGl0ZWxpc3Rl
ZEZ1bmN0aW9ucygpOwotICAgIGludCBkZW55QmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcm
KTsKKyAgICBpbnQgZGVueUJhc2VkT25UYWJsZU5hbWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAg
ICAgaW50IHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgYm9vbCBtX3NlY3VyaXR5RW5hYmxlZCA6IDE7CkBAIC0xMDgsNiArMTA5LDggQEAgcHJpdmF0
ZToKICAgICBib29sIG1fcmVhZE9ubHkgOiAxOwogICAgIGJvb2wgbV9oYWREZWxldGVzIDogMTsK
IAorICAgIGNvbnN0IFN0cmluZyBtX2RhdGFiYXNlSW5mb1RhYmxlTmFtZTsKKwogICAgIEhhc2hT
ZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IG1fd2hpdGVsaXN0ZWRGdW5jdGlvbnM7CiB9Owog
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcAkocmV2aXNpb24gNjE3MTApCisrKyBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNDEgKzMx
LDUwIEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFj
ay5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2suaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY29uc3QgU3RyaW5nJiBEYXRhYmFzZVN5bmM6OmRhdGFiYXNlSW5m
b1RhYmxlTmFtZSgpCitQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJhc2VTeW5jOjpvcGVu
RGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFz
ZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgbmFtZSwgKCJfX1dlYktpdERhdGFiYXNlSW5mb1Rh
YmxlX18iKSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19CisgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29u
dGV4dFRocmVhZCgpKTsKIAotUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlU3luYzo6
b3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywgUGFzc1JlZlB0cjxE
YXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRklYTUU6IHVu
Y29tbWVudCB0aGUgYXNzZXJ0IG9uY2Ugd2UgdXNlIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBwYXJhbWV0ZXIKLSAgICAvL0FTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Cisg
ICAgaWYgKCFEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShj
b250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpIHsKKyAgICAgICAgTE9H
KFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBmb3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJl
IGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmln
aW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIFJlZlB0cjxEYXRhYmFzZVN5bmM+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERh
dGFiYXNlU3luYyhjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBl
c3RpbWF0ZWRTaXplKSk7CisKKyAgICBpZiAoIWRhdGFiYXNlLT5wZXJmb3JtT3BlbkFuZFZlcmlm
eSghY3JlYXRpb25DYWxsYmFjaywgZWMpKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRmFp
bGVkIHRvIG9wZW4gYW5kIHZlcmlmeSB2ZXJzaW9uIChleHBlY3RlZCAlcykgb2YgZGF0YWJhc2Ug
JXMiLCBleHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlLT5kYXRhYmFzZURl
YnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0YWJhc2VE
ZXRhaWxzKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3Rp
bWF0ZWRTaXplKTsKKworICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxi
YWNrLmdldCgpKSB7CisgICAgICAgIGRhdGFiYXNlLT5tX2V4cGVjdGVkVmVyc2lvbiA9ICIiOwor
ICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkludm9raW5nIHRoZSBjcmVhdGlvbiBjYWxsYmFjayBm
b3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKKyAgICAgICAgY3JlYXRpb25DYWxs
YmFjay0+aGFuZGxlRXZlbnQoY29udGV4dCwgZGF0YWJhc2UuZ2V0KCkpOworICAgIH0KIAotICAg
IGVjID0gU0VDVVJJVFlfRVJSOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBkYXRhYmFzZTsK
IH0KIAogRGF0YWJhc2VTeW5jOjpEYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNr
PiBjcmVhdGlvbkNhbGxiYWNrKQotICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRl
eHQpCi0gICAgLCBtX25hbWUobmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQotICAgICwgbV9leHBl
Y3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBt
X2Rpc3BsYXlOYW1lKGRpc3BsYXlOYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX2Vz
dGltYXRlZFNpemUoZXN0aW1hdGVkU2l6ZSkKLSAgICAsIG1fY3JlYXRpb25DYWxsYmFjayhjcmVh
dGlvbkNhbGxiYWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQorICAgIDogQWJzdHJhY3RE
YXRhYmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3Rp
bWF0ZWRTaXplKQogewotICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiB9
CiAKIERhdGFiYXNlU3luYzo6fkRhdGFiYXNlU3luYygpCkBAIC03MywyNiArODIsNTQgQEAgRGF0
YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5jKCkKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiB9CiAKLVN0cmluZyBEYXRhYmFzZVN5bmM6OnZl
cnNpb24oKSBjb25zdAordm9pZCBEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24oY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFj
az4sIEV4Y2VwdGlvbkNvZGUmKQogewogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQg
RGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYs
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJikK
K3ZvaWQgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
U3luY0NhbGxiYWNrPiwgYm9vbCwgRXhjZXB0aW9uQ29kZSYpCiB7CiAgICAgQVNTRVJUKG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogfQogCi12b2lkIERhdGFi
YXNlU3luYzo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFj
az4sIGJvb2wsIEV4Y2VwdGlvbkNvZGUmKQordm9pZCBEYXRhYmFzZVN5bmM6Om1hcmtBc0RlbGV0
ZWRBbmRDbG9zZSgpCiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXND
b250ZXh0VGhyZWFkKCkpOworICAgIC8vIEZJWE1FOiB3ZSBwcm9iYWJseSBuZWVkIHRvIGRvIHNv
bWV0aGluZyBlbHNlIGluIGhlcmUgb3RoZXIgdGhhbiBjYWxsaW5nIGNsb3NlSW1tZWRpYXRlbHko
KS4KKyAgICBjbG9zZUltbWVkaWF0ZWx5KCk7CiB9CiAKLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IERhdGFiYXNlU3luYzo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CitjbGFzcyBDbG9z
ZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q2xvc2VTeW5j
RGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFzZVN5
bmM+IGRhdGFiYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDbG9zZVN5bmNEYXRhYmFz
ZU9uQ29udGV4dFRocmVhZFRhc2soZGF0YWJhc2UpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKKyAgICB7CisgICAgICAgIG1f
ZGF0YWJhc2UtPmNsb3NlSW1tZWRpYXRlbHkoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2xv
c2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5j
PiBkYXRhYmFzZSkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgIHsKKyAgICB9
CisKKyAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBtX2RhdGFiYXNlOworfTsKKwordm9pZCBEYXRh
YmFzZVN5bmM6OmNsb3NlSW1tZWRpYXRlbHkoKQogewotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICByZXR1cm4gbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LmdldCgpOworICAgIC8vIEZJWE1FOiBwcm9iYWJseSBuZWVkIHRvIGRvIG1v
cmUgdGhpbmdzIGluIGhlcmUKKyAgICBpZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXND
b250ZXh0VGhyZWFkKCkpIHsKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0
VGFzayhDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2s6OmNyZWF0ZSh0aGlzKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIo
KS5yZW1vdmVPcGVuRGF0YWJhc2UodGhpcyk7CisKKyAgICBjbG9zZURhdGFiYXNlKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5
bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmgJKHJldmlz
aW9uIDYxNzEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw0OCArMzAsMzYgQEAKICNkZWZpbmUgRGF0YWJhc2VTeW5jX2gKIAogI2lmIEVO
QUJMRShEQVRBQkFTRSkKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lmbmRlZiBOREVC
VUcKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uU3lu
Y0NhbGxiYWNrOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQotdHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiAvLyBJbnN0YW5jZXMgb2Yg
dGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9uIHRoZSB3b3JrZXIn
cyBjb250ZXh0IHRocmVhZC4KLWNsYXNzIERhdGFiYXNlU3luYyA6IHB1YmxpYyBSZWZDb3VudGVk
PERhdGFiYXNlU3luYz4geworY2xhc3MgRGF0YWJhc2VTeW5jIDogcHVibGljIEFic3RyYWN0RGF0
YWJhc2UgewogcHVibGljOgotICAgIH5EYXRhYmFzZVN5bmMoKTsKKyAgICB2aXJ0dWFsIH5EYXRh
YmFzZVN5bmMoKTsKIAotICAgIC8vIERpcmVjdCBzdXBwb3J0IGZvciB0aGUgRE9NIEFQSQogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gb3BlbkRhdGFiYXNlU3luYyhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVj
dGVkVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKICAgICB2b2lkIGNoYW5nZVZlcnNpb24oY29uc3Qg
U3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCB0
cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCBy
ZWFkT25seSwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgLy8gSW50ZXJuYWwgZW5naW5lIHN1cHBv
cnQKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CisgICAgdmlydHVh
bCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKIAogcHJpdmF0ZToKICAgICBEYXRhYmFzZVN5bmMo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZFZlcnNpb24sCi0gICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNh
bGxiYWNrPik7Ci0KLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0OwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fZXhwZWN0
ZWRWZXJzaW9uOwotICAgIFN0cmluZyBtX2Rpc3BsYXlOYW1lOwotICAgIHVuc2lnbmVkIGxvbmcg
bV9lc3RpbWF0ZWRTaXplOwotICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBtX2NyZWF0aW9u
Q2FsbGJhY2s7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRhdGFiYXNlRGVidWdOYW1l
KCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSNlbmRpZgorICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5j
cHAJKHJldmlzaW9uIDYxNzEwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDkgQEAgdm9pZCBEYXRhYmFzZVRhc2s6OnBlcmZv
cm1UYXNrKCkKIC8vICoqKiBEYXRhYmFzZU9wZW5UYXNrICoqKgogLy8gT3BlbnMgdGhlIGRhdGFi
YXNlIGZpbGUgYW5kIHZlcmlmaWVzIHRoZSB2ZXJzaW9uIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHZl
cnNpb24uCiAKLURhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRhc2soRGF0YWJhc2UqIGRh
dGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9u
Q29kZSYgY29kZSwgYm9vbCYgc3VjY2VzcykKK0RhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3Bl
blRhc2soRGF0YWJhc2UqIGRhdGFiYXNlLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBE
YXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29kZSYgY29k
ZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSwgc3luY2hyb25p
emVyKQorICAgICwgbV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZShzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSkKICAgICAsIG1fY29kZShjb2RlKQogICAgICwgbV9zdWNjZXNzKHN1Y2Nlc3MpCiB7CkBA
IC05Nyw3ICs5OCw3IEBAIERhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRhc2soRGF0YWIK
IAogdm9pZCBEYXRhYmFzZU9wZW5UYXNrOjpkb1BlcmZvcm1UYXNrKCkKIHsKLSAgICBtX3N1Y2Nl
c3MgPSBkYXRhYmFzZSgpLT5wZXJmb3JtT3BlbkFuZFZlcmlmeShtX2NvZGUpOworICAgIG1fc3Vj
Y2VzcyA9IGRhdGFiYXNlKCktPnBlcmZvcm1PcGVuQW5kVmVyaWZ5KG1fc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIG1fY29kZSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlVGFzay5oCShyZXZpc2lvbiA2MTcxMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRh
c2suaAkod29ya2luZyBjb3B5KQpAQCAtODUsMTkgKzg1LDIwIEBAIHByaXZhdGU6CiAKIGNsYXNz
IERhdGFiYXNlT3BlblRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxEYXRhYmFzZU9wZW5UYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBE
YXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29kZSYgY29k
ZSwgYm9vbCYgc3VjY2VzcykKKyAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZU9wZW5UYXNr
PiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRh
YmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29kZSYgY29kZSwg
Ym9vbCYgc3VjY2VzcykKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2VPcGVuVGFz
ayhkYiwgc3luY2hyb25pemVyLCBjb2RlLCBzdWNjZXNzKTsKKyAgICAgICAgcmV0dXJuIG5ldyBE
YXRhYmFzZU9wZW5UYXNrKGRiLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgc3luY2hyb25pemVy
LCBjb2RlLCBzdWNjZXNzKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VPcGVuVGFz
ayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIEV4Y2VwdGlvbkNvZGUmLCBi
b29sJiBzdWNjZXNzKTsKKyAgICBEYXRhYmFzZU9wZW5UYXNrKERhdGFiYXNlKiwgYm9vbCBzZXRW
ZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiwgRXhjZXB0aW9u
Q29kZSYsIGJvb2wmIHN1Y2Nlc3MpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvUGVyZm9ybVRhc2so
KTsKICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkZWJ1Z1Rhc2tOYW1l
KCkgY29uc3Q7CiAjZW5kaWYKIAorICAgIGJvb2wgbV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZTsK
ICAgICBFeGNlcHRpb25Db2RlJiBtX2NvZGU7CiAgICAgYm9vbCYgbV9zdWNjZXNzOwogfTsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDYxNzEwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMjMgIER1bWl0cnUgRGFuaWxpdWMgIDxk
dW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBVbmNvbW1lbnQgYWxsIHRlc3QgY2FzZXMgaW4gb3Blbi1kYXRhYmFzZS1zeW5j
LWlucHV0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQwNjA3CisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5
bmMtaW5wdXRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9y
ZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qczoKKyAgICAgICAgKGNhdGNoKToK
KwogMjAxMC0wNi0yMyAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0
YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MTcxMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01LDQgKzUsNiBAQCBQQVNTOiB1bmRlZmluZWQK
IFBBU1M6IHVuZGVmaW5lZAogUEFTUzogdW5kZWZpbmVkCiBQQVNTOiBUWVBFX01JU01BVENIX0VS
UjogRE9NIEV4Y2VwdGlvbiAxNworUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4K
K1BBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGggYSBjcmVhdGlvbiBjYWxsYmFj
ayBzdWNjZWVkZWQuCiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jl
c291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMt
aW5wdXRzLmpzCShyZXZpc2lvbiA2MTcxMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC00NiwxOSArNDYsMjEgQEAgdHJ5IHsKICAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiAr
IGVyci5tZXNzYWdlKTsKIH0KIAotLy8gRklYTUU6IFVuY29tbWVudCB0aGVzZSB0ZXN0cyB3aGVu
IHRoZSBzeW5jIERCIEFQSSBpcyBpbXBsZW1lbnRlZC4KLS8vdHJ5IHsKLS8vICAgIGRiID0gb3Bl
bkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAy
NCk7Ci0vLyAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRl
ZC4iKTsKLS8vfSBjYXRjaCAoZXJyKSB7Ci0vLyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVy
ci5tZXNzYWdlKTsKLS8vfQotLy8KLS8vdHJ5IHsKLS8vICAgIGRiID0gb3BlbkRhdGFiYXNlU3lu
YygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwgZnVuY3Rpb24o
ZGIpIHsgfSk7Ci0vLyAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2FsbGluZyBvcGVuRGF0YWJhc2VT
eW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4iKTsKLS8vfSBjYXRjaCAo
ZXJyKSB7Ci0vLyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKLS8vfQor
dHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAi
REJEZXNjcmlwdGlvbiIsIDEwMjQpOworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBvcGVuRGF0YWJh
c2VTeW5jKCkgc3VjY2VlZGVkLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2Uo
IkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgLy8gTmVlZCB0byBjcmVh
dGUgYSBuZXcgZGF0YWJhc2UsIG90aGVyd2lzZSB0aGUgY3JlYXRpb24gY2FsbGJhY2sgd29uJ3Qg
YmUgaW52b2tlZC4KKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZUNyZWF0aW9uQ2Fs
bGJhY2siICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0
aW9uIiwgMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZGIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBjYWxsaW5nIG9w
ZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sgc3VjY2VlZGVkLiIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RN
ZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQogCiBwb3N0TWVzc2FnZSgiZG9uZSIp
Owo=
</data>
<flag name="commit-queue"
          id="46514"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59696</attachid>
            <date>2010-06-24 13:49:30 -0700</date>
            <delta_ts>2010-06-24 17:32:12 -0700</delta_ts>
            <desc>patch #1: implement DatabaseSync::openDatabaseSync()</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>66202</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTc4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODYgQEAKKzIwMTAtMDYtMjMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKCkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisgICAgICAg
IE1vdmVkIHNvbWUgY29tbW9uIGNvZGUgZnJvbSBEYXRhYmFzZSB0byBBYnN0cmFjdERhdGFiYXNl
LiBNYWRlCisgICAgICAgIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkgdmlydHVhbCwgc2luY2UgRGF0
YWJhc2VTeW5jIGRvZXNuJ3QgbmVlZCB0bworICAgICAgICBpbnRlcmFjdCB3aXRoIERhdGFiYXNl
VGhyZWFkLiBSZW1vdmVkIHRoZSBtX2NyZWF0aW9uQ2FsbGJhY2sKKyAgICAgICAgZmllbGQsIHNp
bmNlIGl0J3Mgb25seSBuZWVkZWQgaW4gdGhlIG9wZW5EYXRhYmFzZXtTeW5jfSBtZXRob2RzLgor
CisgICAgICAgICogc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnJldHJpZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRUZXh0VmFsdWVJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRNdXRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpndWlkVG9WZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnVw
ZGF0ZUd1aWRWZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRUb0RhdGFiYXNlTWFw
KToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRGb3JPcmlnaW5BbmROYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6QWJzdHJhY3REYXRhYmFzZTo6dmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgIChXZWJDb3JlOjpB
YnN0cmFjdERhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0RGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QWJzdHJhY3REYXRhYmFzZTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJh
Y3REYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpmaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpk
YXRhYmFzZVZlcnNpb25LZXkpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6
Z2V0VmVyc2lvbkZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpzZXRWZXJzaW9uSW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjp2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjpkaXNhYmxlQXV0aG9yaXplcik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjplbmFibGVBdXRob3JpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpB
YnN0cmFjdERhdGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25XYXNJbnNlcnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6cmVzZXREZWxldGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0RGF0YWJhc2U6OmhhZERlbGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6cmVzZXRBdXRob3JpemVyKToKKyAgICAgICAgKiBzdG9yYWdlL0Fic3Ry
YWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Om9wZW5l
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjppc05ldyk6CisgICAgICAg
IChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZURlYnVnTmFtZSk6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNyZWF0
aW9uQ2FsbGJhY2tUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDcmVh
dGlvbkNhbGxiYWNrVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlOjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dmVy
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtT3Bl
bkFuZFZlcmlmeSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2U6OnNxbGl0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFi
YXNlQXV0aG9yaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OkRhdGFiYXNl
QXV0aG9yaXplcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRlbnlC
YXNlZE9uVGFibGVOYW1lKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5o
OgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlU3luYzo6b3BlbkRhdGFiYXNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVN5bmM6OkRhdGFiYXNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6
OmNoYW5nZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjp0cmFuc2Fj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6Om1hcmtBc0RlbGV0ZWRBbmRD
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVh
ZFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9zZVN5bmNEYXRhYmFzZU9uQ29u
dGV4dFRocmVhZFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb3NlU3lu
Y0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFzazo6Q2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRU
aHJlYWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6Y2xvc2VJbW1lZGlh
dGVseSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVN5bmMuaDoKKyAgICAgICAgKiBzdG9y
YWdlL0RhdGFiYXNlVGFzay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU9wZW5UYXNr
OjpEYXRhYmFzZU9wZW5UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT3BlblRhc2s6
OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmg6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZU9wZW5UYXNrOjpjcmVhdGUpOgorCiAyMDEwLTA2LTI0ICBO
YXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDYxNzgzKQorKysgV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMzIgQEAKICNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNl
LmgiCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVy
LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIK
KyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgYm9vbCByZXRyaWV2ZVRleHRSZXN1bHRG
cm9tRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBTdHJp
bmcmIHJlc3VsdFN0cmluZykKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBx
dWVyeSk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7CisKKyAgICBpZiAo
cmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBw
cmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMp
IiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGlmIChyZXN1bHQg
PT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHJlc3Vs
dCA9PSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZygpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBMT0dfRVJST1IoIkVycm9yICglaSkg
cmVhZGluZyB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcykiLCByZXN1bHQsIHF1ZXJ5LmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHNldFRl
eHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
ZGIsIHF1ZXJ5KTsKKyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKKworICAg
IGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVy
eS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBz
dGF0ZW1lbnQuYmluZFRleHQoMSwgdmFsdWUpOworCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0
ZXAoKTsKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gc3RlcCBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICgl
cykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gRklYTUU6IG1vdmUgYWxsIGd1aWQtcmVsYXRl
ZCBmdW5jdGlvbnMgdG8gYSBEYXRhYmFzZVZlcnNpb25UcmFja2VyIGNsYXNzLgorc3RhdGljIE11
dGV4JiBndWlkTXV0ZXgoKQoreworICAgIC8vIE5vdGU6IFdlIGRvbid0IGhhdmUgdG8gdXNlIEF0
b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyBoZXJlIGJlY2F1c2UKKyAgICAvLyB0aGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCBvbmNlIGluIHRoZSBjb25zdHJ1Y3RvciBvbiB0aGUgbWFpbiB0aHJlYWQK
KyAgICAvLyBiZWZvcmUgYW55IG90aGVyIHRocmVhZHMgdGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24g
YXJlIHVzZWQuCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwgbXV0ZXgsICgpKTsKKyAg
ICByZXR1cm4gbXV0ZXg7Cit9CisKK3R5cGVkZWYgSGFzaE1hcDxpbnQsIFN0cmluZz4gR3VpZFZl
cnNpb25NYXA7CitzdGF0aWMgR3VpZFZlcnNpb25NYXAmIGd1aWRUb1ZlcnNpb25NYXAoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoR3VpZFZlcnNpb25NYXAsIG1hcCwgKCkpOworICAgIHJl
dHVybiBtYXA7Cit9CisKKy8vIE5PVEU6IENhbGxlciBtdXN0IGxvY2sgZ3VpZE11dGV4KCkuCitz
dGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlR3VpZFZlcnNpb25NYXAoaW50IGd1aWQsIFN0cmluZyBu
ZXdWZXJzaW9uKQoreworICAgIC8vIEVuc3VyZSB0aGUgdGhlIG11dGV4IGlzIGxvY2tlZC4KKyAg
ICBBU1NFUlQoIWd1aWRNdXRleCgpLnRyeUxvY2soKSk7CisKKyAgICAvLyBOb3RlOiBJdCBpcyBu
b3Qgc2FmZSB0byBwdXQgYW4gZW1wdHkgc3RyaW5nIGludG8gdGhlIGd1aWRUb1ZlcnNpb25NYXAo
KSBtYXAuCisgICAgLy8gVGhhdCdzIGJlY2F1c2UgdGhlIG1hcCBpcyBjcm9zcy10aHJlYWQsIGJ1
dCBlbXB0eSBzdHJpbmdzIGFyZSBwZXItdGhyZWFkLgorICAgIC8vIFRoZSBjb3B5KCkgZnVuY3Rp
b24gbWFrZXMgYSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgeW91IGNhbiB1c2Ugb24gdGhlIGN1cnJl
bnQKKyAgICAvLyB0aHJlYWQsIGJ1dCB3ZSBuZWVkIGEgc3RyaW5nIHdlIGNhbiBrZWVwIGluIGEg
Y3Jvc3MtdGhyZWFkIGRhdGEgc3RydWN0dXJlLgorICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgcXVp
dGUtYXdrd2FyZCByZXN0cmljdGlvbiB0byBoYXZlIHRvIHByb2dyYW0gd2l0aC4KKworICAgIC8v
IE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSBjb21tZW50IGFib3ZlKS4KKyAg
ICBndWlkVG9WZXJzaW9uTWFwKCkuc2V0KGd1aWQsIG5ld1ZlcnNpb24uaXNFbXB0eSgpID8gU3Ry
aW5nKCkgOiBuZXdWZXJzaW9uLnRocmVhZHNhZmVDb3B5KCkpOworfQorCit0eXBlZGVmIEhhc2hN
YXA8aW50LCBIYXNoU2V0PEFic3RyYWN0RGF0YWJhc2UqPio+IEd1aWREYXRhYmFzZU1hcDsKK3N0
YXRpYyBHdWlkRGF0YWJhc2VNYXAmIGd1aWRUb0RhdGFiYXNlTWFwKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEd1aWREYXRhYmFzZU1hcCwgbWFwLCAoKSk7CisgICAgcmV0dXJuIG1hcDsK
K30KKworc3RhdGljIGludCBndWlkRm9yT3JpZ2luQW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdp
biwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFN0cmluZyBzdHJpbmdJRDsKKyAgICBpZiAo
b3JpZ2luLmVuZHNXaXRoKCIvIikpCisgICAgICAgIHN0cmluZ0lEID0gb3JpZ2luICsgbmFtZTsK
KyAgICBlbHNlCisgICAgICAgIHN0cmluZ0lEID0gb3JpZ2luICsgIi8iICsgbmFtZTsKKworICAg
IC8vIE5vdGU6IFdlIGRvbid0IGhhdmUgdG8gdXNlIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRp
YyBoZXJlIGJlY2F1c2UKKyAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGluIHRo
ZSBjb25zdHJ1Y3RvciBvbiB0aGUgbWFpbiB0aHJlYWQKKyAgICAvLyBiZWZvcmUgYW55IG90aGVy
IHRocmVhZHMgdGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQuCisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChNdXRleCwgc3RyaW5nSWRlbnRpZmllck11dGV4LCAoKSk7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHN0cmluZ0lkZW50aWZpZXJNdXRleCk7CisgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgaW50PiBJREd1aWRNYXA7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChJREd1aWRN
YXAsIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAsICgpKTsKKyAgICBpbnQgZ3VpZCA9IHN0cmlu
Z0lkZW50aWZpZXJUb0dVSURNYXAuZ2V0KHN0cmluZ0lEKTsKKyAgICBpZiAoIWd1aWQpIHsKKyAg
ICAgICAgc3RhdGljIGludCBjdXJyZW50TmV3R1VJRCA9IDE7CisgICAgICAgIGd1aWQgPSBjdXJy
ZW50TmV3R1VJRCsrOworICAgICAgICBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLnNldChzdHJp
bmdJRCwgZ3VpZCk7CisgICAgfQorCisgICAgcmV0dXJuIGd1aWQ7Cit9CisKIHN0YXRpYyBib29s
IGlzRGF0YWJhc2VBdmFpbGFibGUgPSB0cnVlOwogCiBib29sIEFic3RyYWN0RGF0YWJhc2U6Omlz
QXZhaWxhYmxlKCkKQEAgLTQ1LDEwICsxNjgsMzA0IEBAIHZvaWQgQWJzdHJhY3REYXRhYmFzZTo6
c2V0SXNBdmFpbGFibGUoYm8KICAgICBpc0RhdGFiYXNlQXZhaWxhYmxlID0gYXZhaWxhYmxlOwog
fQogCisvLyBzdGF0aWMKK2NvbnN0IFN0cmluZyYgQWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VJ
bmZvVGFibGVOYW1lKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgbmFtZSwg
KCJfX1dlYktpdERhdGFiYXNlSW5mb1RhYmxlX18iKSk7CisgICAgcmV0dXJuIG5hbWU7Cit9CisK
K0Fic3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVy
c2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQorICAgIDogbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBtX25hbWUobmFtZS5jcm9zc1RocmVhZFN0
cmluZygpKQorICAgICwgbV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmNyb3NzVGhy
ZWFkU3RyaW5nKCkpCisgICAgLCBtX2Rpc3BsYXlOYW1lKGRpc3BsYXlOYW1lLmNyb3NzVGhyZWFk
U3RyaW5nKCkpCisgICAgLCBtX2VzdGltYXRlZFNpemUoZXN0aW1hdGVkU2l6ZSkKKyAgICAsIG1f
Z3VpZCgwKQorICAgICwgbV9vcGVuZWQoZmFsc2UpCisgICAgLCBtX25ldyhmYWxzZSkKK3sKKyAg
ICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1fY29udGV4dFRocmVh
ZFNlY3VyaXR5T3JpZ2luID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdp
bigpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXIgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OmNy
ZWF0ZShkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSk7CisKKyAgICBpZiAobV9uYW1lLmlzTnVsbCgp
KQorICAgICAgICBtX25hbWUgPSAiIjsKKworICAgIG1fZ3VpZCA9IGd1aWRGb3JPcmlnaW5BbmRO
YW1lKHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5hbWUpOworICAgIHsKKyAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKworICAgICAgICBIYXNoU2V0PEFic3Ry
YWN0RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7
CisgICAgICAgIGlmICghaGFzaFNldCkgeworICAgICAgICAgICAgaGFzaFNldCA9IG5ldyBIYXNo
U2V0PEFic3RyYWN0RGF0YWJhc2UqPjsKKyAgICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCku
c2V0KG1fZ3VpZCwgaGFzaFNldCk7CisgICAgICAgIH0KKworICAgICAgICBoYXNoU2V0LT5hZGQo
dGhpcyk7CisgICAgfQorCisgICAgbV9maWxlbmFtZSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tl
cigpLmZ1bGxQYXRoRm9yRGF0YWJhc2Uoc2VjdXJpdHlPcmlnaW4oKSwgbV9uYW1lKTsKKyAgICBE
YXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5hZGRPcGVuRGF0YWJhc2UodGhpcyk7Cit9CisKIEFi
c3RyYWN0RGF0YWJhc2U6On5BYnN0cmFjdERhdGFiYXNlKCkKIHsKIH0KIAordm9pZCBBYnN0cmFj
dERhdGFiYXNlOjpjbG9zZURhdGFiYXNlKCkKK3sKKyAgICBpZiAoIW1fb3BlbmVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgbV9vcGVuZWQg
PSBmYWxzZTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7
CisKKyAgICAgICAgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9E
YXRhYmFzZU1hcCgpLmdldChtX2d1aWQpOworICAgICAgICBBU1NFUlQoaGFzaFNldCk7CisgICAg
ICAgIEFTU0VSVChoYXNoU2V0LT5jb250YWlucyh0aGlzKSk7CisgICAgICAgIGhhc2hTZXQtPnJl
bW92ZSh0aGlzKTsKKyAgICAgICAgaWYgKGhhc2hTZXQtPmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgZ3VpZFRvRGF0YWJhc2VNYXAoKS5yZW1vdmUobV9ndWlkKTsKKyAgICAgICAgICAgIGRlbGV0
ZSBoYXNoU2V0OworICAgICAgICAgICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnJlbW92ZShtX2d1aWQp
OworICAgICAgICB9CisgICAgfQorfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6dmVyc2lv
bigpIGNvbnN0Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKyAgICBy
ZXR1cm4gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpLnRocmVhZHNhZmVDb3B5KCk7Cit9
CisKK3N0YXRpYyBjb25zdCBpbnQgbWF4U3FsaXRlQnVzeVdhaXRUaW1lID0gMzAwMDA7Citib29s
IEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVy
c2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghbV9zcWxp
dGVEYXRhYmFzZS5vcGVuKG1fZmlsZW5hbWUsIHRydWUpKSB7CisgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UgYXQgcGF0aCAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5k
YXRhKCkpOworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50dXJuT25JbmNyZW1lbnRh
bEF1dG9WYWN1dW0oKSkKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gdHVybiBvbiBpbmNy
ZW1lbnRhbCBhdXRvLXZhY3V1bSBmb3IgZGF0YWJhc2UgJXMiLCBtX2ZpbGVuYW1lLmFzY2lpKCku
ZGF0YSgpKTsKKworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9zcWxp
dGVEYXRhYmFzZS5zZXRBdXRob3JpemVyKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX3Nx
bGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1lb3V0KG1heFNxbGl0ZUJ1c3lXYWl0VGltZSk7CisKKyAg
ICBTdHJpbmcgY3VycmVudFZlcnNpb247CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIoZ3VpZE11dGV4KCkpOworCisgICAgICAgIEd1aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRy
eSA9IGd1aWRUb1ZlcnNpb25NYXAoKS5maW5kKG1fZ3VpZCk7CisgICAgICAgIGlmIChlbnRyeSAh
PSBndWlkVG9WZXJzaW9uTWFwKCkuZW5kKCkpIHsKKyAgICAgICAgICAgIC8vIE1hcCBudWxsIHN0
cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSB1cGRhdGVHdWlkVmVyc2lvbk1hcCgpKS4KKyAgICAg
ICAgICAgIGN1cnJlbnRWZXJzaW9uID0gZW50cnktPnNlY29uZC5pc051bGwoKSA/IFN0cmluZygi
IikgOiBlbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJyZW50
IGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIGlzICVzIiwgbV9ndWlkLCBjdXJyZW50VmVyc2lv
bi5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMT0coU3Rv
cmFnZUFQSSwgIk5vIGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIiwgbV9ndWlkKTsKKworICAg
ICAgICAgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnRhYmxlRXhpc3RzKGRhdGFiYXNlSW5mb1Rh
YmxlTmFtZSgpKSkgeworICAgICAgICAgICAgICAgIG1fbmV3ID0gdHJ1ZTsKKworICAgICAgICAg
ICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxF
ICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgKGtleSBURVhUIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsdmFsdWUgVEVYVCBOT1QgTlVM
TCBPTiBDT05GTElDVCBGQUlMKTsiKSkgeworICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBjcmVhdGUgdGFibGUgJXMgaW4gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZUluZm9U
YWJsZU5hbWUoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAg
ICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUu
CisgICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFnZXRWZXJzaW9uRnJvbURhdGFiYXNlKGN1cnJlbnRWZXJz
aW9uKSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBjdXJyZW50
IHZlcnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAg
ICAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAg
ICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN1cnJlbnRWZXJzaW9u
Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJSZXRyaWV2ZWQg
Y3VycmVudCB2ZXJzaW9uICVzIGZyb20gZGF0YWJhc2UgJXMiLCBjdXJyZW50VmVyc2lvbi5hc2Np
aSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFtX25ldyB8fCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkg
eworICAgICAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2V0dGluZyB2ZXJzaW9uICVzIGlu
IGRhdGFiYXNlICVzIHRoYXQgd2FzIGp1c3QgY3JlYXRlZCIsIG1fZXhwZWN0ZWRWZXJzaW9uLmFz
Y2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXNldFZlcnNpb25JbkRhdGFiYXNlKG1fZXhwZWN0ZWRWZXJzaW9uKSkg
eworICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdmVyc2lvbiAl
cyBpbiBkYXRhYmFzZSAlcyIsIG1fZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRh
YmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWMg
PSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGhh
bmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgbV9zcWxpdGVE
YXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gbV9leHBlY3Rl
ZFZlcnNpb247CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVwZGF0ZUd1aWRWZXJzaW9u
TWFwKG1fZ3VpZCwgY3VycmVudFZlcnNpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGN1cnJlbnRWZXJzaW9uLmlzTnVsbCgpKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0
YWJhc2UgJXMgZG9lcyBub3QgaGF2ZSBpdHMgdmVyc2lvbiBzZXQiLCBkYXRhYmFzZURlYnVnTmFt
ZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgY3VycmVudFZlcnNpb24gPSAiIjsKKyAgICB9
CisKKyAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpc24ndCB0aGUgZW1wdHkgc3RyaW5n
LCBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBkYXRhYmFzZSB2ZXJzaW9uIHdlIGhhdmUgbWF0Y2hl
cyB0aGF0IHZlcnNpb24uIE90aGVyd2lzZSwgc2V0IGFuIGV4Y2VwdGlvbi4KKyAgICAvLyBJZiB0
aGUgZXhwZWN0ZWQgdmVyc2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHdlIGFsd2F5cyBy
ZXR1cm4gd2l0aCB3aGF0ZXZlciB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSB3ZSBoYXZlLgorICAg
IGlmICgoIW1fbmV3IHx8IHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKSAmJiBtX2V4cGVj
dGVkVmVyc2lvbi5sZW5ndGgoKSAmJiBtX2V4cGVjdGVkVmVyc2lvbiAhPSBjdXJyZW50VmVyc2lv
bikgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgInBhZ2UgZXhwZWN0cyB2ZXJzaW9uICVzIGZy
b20gZGF0YWJhc2UgJXMsIHdoaWNoIGFjdHVhbGx5IGhhcyB2ZXJzaW9uIG5hbWUgJXMgLSBvcGVu
RGF0YWJhc2UoKSBjYWxsIHdpbGwgZmFpbCIsIG1fZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0
YSgpLAorICAgICAgICAgICAgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSwgY3Vy
cmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVf
RVJSOworICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgor
ICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBtX29wZW5lZCA9IHRydWU7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogQWJzdHJhY3REYXRhYmFzZTo6c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5n
ZXQoKTsKK30KKworU2VjdXJpdHlPcmlnaW4qIEFic3RyYWN0RGF0YWJhc2U6OnNlY3VyaXR5T3Jp
Z2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4u
Z2V0KCk7Cit9CisKK1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjpzdHJpbmdJZGVudGlmaWVyKCkg
Y29uc3QKK3sKKyAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJl
YWQgc2FmZXR5CisgICAgcmV0dXJuIG1fbmFtZS50aHJlYWRzYWZlQ29weSgpOworfQorCitTdHJp
bmcgQWJzdHJhY3REYXRhYmFzZTo6ZGlzcGxheU5hbWUoKSBjb25zdAoreworICAgIC8vIFJldHVy
biBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkKKyAgICByZXR1cm4g
bV9kaXNwbGF5TmFtZS50aHJlYWRzYWZlQ29weSgpOworfQorCit1bnNpZ25lZCBsb25nIEFic3Ry
YWN0RGF0YWJhc2U6OmVzdGltYXRlZFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX2VzdGlt
YXRlZFNpemU7Cit9CisKK1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjpmaWxlTmFtZSgpIGNvbnN0
Cit7CisgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNh
ZmV0eQorICAgIHJldHVybiBtX2ZpbGVuYW1lLnRocmVhZHNhZmVDb3B5KCk7Cit9CisKKy8vIHN0
YXRpYworY29uc3QgU3RyaW5nJiBBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZVZlcnNpb25LZXko
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBrZXksICgiV2ViS2l0RGF0YWJh
c2VWZXJzaW9uS2V5IikpOworICAgIHJldHVybiBrZXk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRh
YmFzZTo6Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24pCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGdldFZlcnNpb25RdWVyeSwgKCJTRUxFQ1QgdmFsdWUg
RlJPTSAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIFdIRVJFIGtleSA9ICciICsgZGF0
YWJhc2VWZXJzaW9uS2V5KCkgKyAiJzsiKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+
ZGlzYWJsZSgpOworCisgICAgYm9vbCByZXN1bHQgPSByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0
YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgZ2V0VmVyc2lvblF1ZXJ5LnRocmVhZHNhZmVDb3B5KCks
IHZlcnNpb24pOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byByZXRyaWV2ZSB2ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgp
LmFzY2lpKCkuZGF0YSgpKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6c2V0VmVy
c2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQoreworICAgIC8vIFRoZSBJTlNF
UlQgd2lsbCByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5IGZvciB0aGUgZGF0YWJhc2Ugd2l0aCB0
aGUgbmV3IHZlcnNpb24gbnVtYmVyLCBkdWUgdG8gdGhlIFVOSVFVRSBPTiBDT05GTElDVCBSRVBM
QUNFCisgICAgLy8gY2xhdXNlIGluIHRoZSBDUkVBVEUgc3RhdGVtZW50IChzZWUgRGF0YWJhc2U6
OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkpLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBzZXRWZXJzaW9uUXVlcnksICgiSU5TRVJUIElOVE8gIiArIGRhdGFiYXNlSW5mb1RhYmxlTmFt
ZSgpICsgIiAoa2V5LCB2YWx1ZSkgVkFMVUVTICgnIiArIGRhdGFiYXNlVmVyc2lvbktleSgpICsg
IicsID8pOyIpKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7CisKKyAg
ICBib29sIHJlc3VsdCA9IHNldFRleHRWYWx1ZUluRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwg
c2V0VmVyc2lvblF1ZXJ5LnRocmVhZHNhZmVDb3B5KCksIHZlcnNpb24pOworICAgIGlmICghcmVz
dWx0KQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdmVyc2lvbiAlcyBpbiBkYXRh
YmFzZSAoJXMpIiwgdmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgc2V0VmVyc2lvblF1ZXJ5LmFzY2lp
KCkuZGF0YSgpKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6dmVyc2lvbk1hdGNo
ZXNFeHBlY3RlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2V4cGVjdGVkVmVyc2lvbi5pc0VtcHR5
KCkpIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKyAgICAgICAg
cmV0dXJuIG1fZXhwZWN0ZWRWZXJzaW9uID09IGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlk
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNl
OjpzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQoreworICAgIG1fZXhw
ZWN0ZWRWZXJzaW9uID0gdmVyc2lvbi50aHJlYWRzYWZlQ29weSgpOworICAgIC8vIFVwZGF0ZSB0
aGUgaW4gbWVtb3J5IGRhdGFiYXNlIHZlcnNpb24gbWFwLgorICAgIE11dGV4TG9ja2VyIGxvY2tl
cihndWlkTXV0ZXgoKSk7CisgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCB2ZXJzaW9u
KTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpkaXNhYmxlQXV0aG9yaXplcigpCit7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXpl
ci0+ZGlzYWJsZSgpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmVuYWJsZUF1dGhvcml6
ZXIoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFz
ZUF1dGhvcml6ZXItPmVuYWJsZSgpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldEF1
dGhvcml6ZXJSZWFkT25seSgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsK
KyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+c2V0UmVhZE9ubHkoKTsKK30KKworYm9vbCBBYnN0
cmFjdERhdGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQo
bV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+
bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6
Omxhc3RBY3Rpb25XYXNJbnNlcnQoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXpl
cik7CisgICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9uV2FzSW5zZXJ0
KCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVzZXREZWxldGVzKCkKK3sKKyAgICBB
U1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5y
ZXNldERlbGV0ZXMoKTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpoYWREZWxldGVzKCkK
K3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIHJldHVybiBtX2RhdGFi
YXNlQXV0aG9yaXplci0+aGFkRGVsZXRlcygpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6
OnJlc2V0QXV0aG9yaXplcigpCit7CisgICAgaWYgKG1fZGF0YWJhc2VBdXRob3JpemVyKQorICAg
ICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL0Fic3RyYWN0RGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQWJz
dHJhY3REYXRhYmFzZS5oCShyZXZpc2lvbiA2MTc4MykKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0
cmFjdERhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEzICszMiwyMSBAQAogI2lmIEVO
QUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
U1FMaXRlRGF0YWJhc2UuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CisjaWZuZGVmIE5ERUJVRworI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBEYXRhYmFz
ZUF1dGhvcml6ZXI7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJp
dHlPcmlnaW47CiAKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKIGNsYXNzIEFic3RyYWN0
RGF0YWJhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxBYnN0cmFjdERhdGFiYXNlPiB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKQEAgLTQ2LDE1ICs1NCw2OSBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5BYnN0cmFjdERhdGFiYXNlKCk7CiAKLSAgICB2aXJ0
dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0
cmluZyBmaWxlTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkg
Y29uc3Q7CisKKyAgICBib29sIG9wZW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbmVkOyB9Cisg
ICAgYm9vbCBpc05ldygpIGNvbnN0IHsgcmV0dXJuIG1fbmV3OyB9CisKKyAgICB2aXJ0dWFsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OworICAgIHZp
cnR1YWwgU3RyaW5nIHN0cmluZ0lkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBkaXNwbGF5TmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdDsKKwor
ICAgIC8vIEZJWE1FOiBtb3ZlIGFsbCB2ZXJzaW9uLXJlbGF0ZWQgbWV0aG9kcyB0byBhIERhdGFi
YXNlVmVyc2lvblRyYWNrZXIgY2xhc3MKKyAgICBib29sIHZlcnNpb25NYXRjaGVzRXhwZWN0ZWQo
KSBjb25zdDsKKyAgICB2b2lkIHNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNp
b24pOworICAgIGJvb2wgZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24pOwor
ICAgIGJvb2wgc2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKwor
ICAgIHZvaWQgZGlzYWJsZUF1dGhvcml6ZXIoKTsKKyAgICB2b2lkIGVuYWJsZUF1dGhvcml6ZXIo
KTsKKyAgICB2b2lkIHNldEF1dGhvcml6ZXJSZWFkT25seSgpOworICAgIGJvb2wgbGFzdEFjdGlv
bkNoYW5nZWREYXRhYmFzZSgpOworICAgIGJvb2wgbGFzdEFjdGlvbldhc0luc2VydCgpOworICAg
IHZvaWQgcmVzZXREZWxldGVzKCk7CisgICAgYm9vbCBoYWREZWxldGVzKCk7CisgICAgdm9pZCBy
ZXNldEF1dGhvcml6ZXIoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXJrQXNEZWxldGVkQW5kQ2xv
c2UoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKSA9IDA7CisKK3By
b3RlY3RlZDoKKyAgICBBYnN0cmFjdERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBl
c3RpbWF0ZWRTaXplKTsKKworICAgIHZvaWQgY2xvc2VEYXRhYmFzZSgpOworCisgICAgdmlydHVh
bCBib29sIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKworICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlSW5mb1RhYmxlTmFtZSgpOworCisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luOworCisgICAgU3RyaW5nIG1fbmFtZTsKKyAg
ICBTdHJpbmcgbV9leHBlY3RlZFZlcnNpb247CisgICAgU3RyaW5nIG1fZGlzcGxheU5hbWU7Cisg
ICAgdW5zaWduZWQgbG9uZyBtX2VzdGltYXRlZFNpemU7CisgICAgU3RyaW5nIG1fZmlsZW5hbWU7
CisKKyAgICBTUUxpdGVEYXRhYmFzZSBtX3NxbGl0ZURhdGFiYXNlOworCisjaWZuZGVmIE5ERUJV
RworICAgIFN0cmluZyBkYXRhYmFzZURlYnVnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4
dFRocmVhZFNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygpICsgIjo6IiArIG1fbmFtZTsgfQorI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VWZXJzaW9u
S2V5KCk7CisKKyAgICBpbnQgbV9ndWlkOworICAgIGJvb2wgbV9vcGVuZWQ7CisgICAgYm9vbCBt
X25ldzsKKworICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IG1fZGF0YWJhc2VBdXRob3Jp
emVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3Bw
CShyZXZpc2lvbiA2MTc4MykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICNpbmNs
dWRlICJDaGFuZ2VWZXJzaW9uV3JhcHBlci5oIgotI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9yaXpl
ci5oIgogI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJEYXRhYmFzZVRh
c2suaCIKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgpAQCAtNTAsNyArNDksNiBAQAogI2lu
Y2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTdHJpbmdIYXNo
LmgiCiAjaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC02NCw4MSArNjIsMjcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0vLyBJZiB3ZSBzbGVlcCBmb3IgbW9yZSB0aGUgMzAgc2Vjb25kcyB3
aGlsZSBibG9ja2VkIG9uIFNRTElURV9CVVNZLCBnaXZlIHVwLgotc3RhdGljIGNvbnN0IGludCBt
YXhTcWxpdGVCdXN5V2FpdFRpbWUgPSAzMDAwMDsKLQotY29uc3QgU3RyaW5nJiBEYXRhYmFzZTo6
ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmlu
ZywgbmFtZSwgKCJfX1dlYktpdERhdGFiYXNlSW5mb1RhYmxlX18iKSk7Ci0gICAgcmV0dXJuIG5h
bWU7Ci19Ci0KLXN0YXRpYyBNdXRleCYgZ3VpZE11dGV4KCkKLXsKLSAgICAvLyBOb3RlOiBXZSBk
b24ndCBoYXZlIHRvIHVzZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMgaGVyZSBiZWNhdXNl
Ci0gICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBpbiB0aGUgY29uc3RydWN0b3Ig
b24gdGhlIG1haW4gdGhyZWFkCi0gICAgLy8gYmVmb3JlIGFueSBvdGhlciB0aHJlYWRzIHRoYXQg
Y2FsbCB0aGlzIGZ1bmN0aW9uIGFyZSB1c2VkLgotICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0
ZXgsIG11dGV4LCAoKSk7Ci0gICAgcmV0dXJuIG11dGV4OwotfQotCi10eXBlZGVmIEhhc2hNYXA8
aW50LCBTdHJpbmc+IEd1aWRWZXJzaW9uTWFwOwotc3RhdGljIEd1aWRWZXJzaW9uTWFwJiBndWlk
VG9WZXJzaW9uTWFwKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWRWZXJzaW9uTWFw
LCBtYXAsICgpKTsKLSAgICByZXR1cm4gbWFwOwotfQotCi0vLyBOT1RFOiBDYWxsZXIgbXVzdCBs
b2NrIGd1aWRNdXRleCgpLgotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZUd1aWRWZXJzaW9uTWFw
KGludCBndWlkLCBTdHJpbmcgbmV3VmVyc2lvbikKLXsKLSAgICAvLyBFbnN1cmUgdGhlIHRoZSBt
dXRleCBpcyBsb2NrZWQuCi0gICAgQVNTRVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOwotCi0g
ICAgLy8gTm90ZTogSXQgaXMgbm90IHNhZmUgdG8gcHV0IGFuIGVtcHR5IHN0cmluZyBpbnRvIHRo
ZSBndWlkVG9WZXJzaW9uTWFwKCkgbWFwLgotICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZSBtYXAg
aXMgY3Jvc3MtdGhyZWFkLCBidXQgZW1wdHkgc3RyaW5ncyBhcmUgcGVyLXRocmVhZC4KLSAgICAv
LyBUaGUgY29weSgpIGZ1bmN0aW9uIG1ha2VzIGEgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHlvdSBj
YW4gdXNlIG9uIHRoZSBjdXJyZW50Ci0gICAgLy8gdGhyZWFkLCBidXQgd2UgbmVlZCBhIHN0cmlu
ZyB3ZSBjYW4ga2VlcCBpbiBhIGNyb3NzLXRocmVhZCBkYXRhIHN0cnVjdHVyZS4KLSAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHF1aXRlLWF3a3dhcmQgcmVzdHJpY3Rpb24gdG8gaGF2ZSB0byBwcm9n
cmFtIHdpdGguCi0KLSAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUg
Y29tbWVudCBhYm92ZSkuCi0gICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJz
aW9uLmlzRW1wdHkoKSA/IFN0cmluZygpIDogbmV3VmVyc2lvbi50aHJlYWRzYWZlQ29weSgpKTsK
LX0KLQotdHlwZWRlZiBIYXNoTWFwPGludCwgSGFzaFNldDxEYXRhYmFzZSo+Kj4gR3VpZERhdGFi
YXNlTWFwOwotc3RhdGljIEd1aWREYXRhYmFzZU1hcCYgZ3VpZFRvRGF0YWJhc2VNYXAoKQotewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoR3VpZERhdGFiYXNlTWFwLCBtYXAsICgpKTsKLSAgICBy
ZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVZlcnNpb25LZXko
KQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBrZXksICgiV2ViS2l0RGF0YWJh
c2VWZXJzaW9uS2V5IikpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLXN0YXRpYyBpbnQgZ3VpZEZv
ck9yaWdpbkFuZE5hbWUoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSk7
Ci0KIGNsYXNzIERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2sgOiBwdWJsaWMgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RGF0
YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRh
dGFiYXNlKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rh
c2s+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxEYXRh
YmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5l
dyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrKGRhdGFiYXNlKTsKKyAgICAgICAgcmV0dXJu
IG5ldyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrKGRhdGFiYXNlLCBjcmVhdGlvbkNhbGxi
YWNrKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCiAgICAgewotICAgICAgICBtX2RhdGFiYXNlLT5wZXJmb3JtQ3Jl
YXRpb25DYWxsYmFjaygpOworICAgICAgICBtX2NyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50
KGNvbnRleHQsIG1fZGF0YWJhc2UuZ2V0KCkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBEYXRh
YmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKQor
ICAgIERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2soUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0
YWJhc2UsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY2FsbGJhY2spCiAgICAgICAgIDog
bV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAgICAgLCBtX2NyZWF0aW9uQ2FsbGJhY2soY2FsbGJh
Y2spCiAgICAgewogICAgIH0KIAogICAgIFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKKyAg
ICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gbV9jcmVhdGlvbkNhbGxiYWNrOwogfTsKIAogUGFz
c1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2U6Om9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsCkBAIC0xNDcsMTQgKzkxLDEzIEBA
IFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpvcGVuRGF0YWIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZSkKIHsKICAgICBp
ZiAoIURhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNhbkVzdGFibGlzaERhdGFiYXNlKGNvbnRl
eHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSkgewotICAgICAgICAvLyBGSVhN
RTogVGhlcmUgc2hvdWxkIGJlIGFuIGV4Y2VwdGlvbiByYWlzZWQgaGVyZSBpbiBhZGRpdGlvbiB0
byByZXR1cm5pbmcgYSBudWxsIERhdGFiYXNlIG9iamVjdC4gIFRoZSBxdWVzdGlvbiBoYXMgYmVl
biByYWlzZWQgd2l0aCB0aGUgV0hBVFdHLgogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFi
YXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93ZWQgdG8gYmUgZXN0YWJsaXNoZWQiLCBuYW1l
LmFzY2lpKCkuZGF0YSgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLmFz
Y2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRyPERh
dGFiYXNlPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBl
eHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxi
YWNrKSk7CisgICAgUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRh
YmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplKSk7CiAKLSAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbihlKSkg
eworICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKCFjcmVhdGlvbkNhbGxi
YWNrLCBlKSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkZhaWxlZCB0byBvcGVuIGFuZCB2
ZXJpZnkgdmVyc2lvbiAoZXhwZWN0ZWQgJXMpIG9mIGRhdGFiYXNlICVzIiwgZXhwZWN0ZWRWZXJz
aW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZS0+ZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgp
LmRhdGEoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5n
ZXQoKSk7CiAgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRh
YmFzZShkYXRhYmFzZS5nZXQoKSk7CkBAIC0xNzYsNTcgKzExOSwyOCBAQCBQYXNzUmVmUHRyPERh
dGFiYXNlPiBEYXRhYmFzZTo6b3BlbkRhdGFiCiAgICAgLy8gdmVyc2lvbiB0byAiIiBhbmQgc2No
ZWR1bGUgdGhlIGNyZWF0aW9uIGNhbGxiYWNrLiBCZWNhdXNlIG9mIHNvbWUgc3VidGxlIFN0cmlu
ZwogICAgIC8vIGltcGxlbWVudGF0aW9uIGlzc3Vlcywgd2UgaGF2ZSB0byByZXNldCBtX2V4cGVj
dGVkVmVyc2lvbiBoZXJlIGluc3RlYWQgb2YgZG9pbmcKICAgICAvLyBpdCBpbnNpZGUgcGVyZm9y
bU9wZW5BbmRWZXJpZnkoKSB3aGljaCBpcyBydW4gb24gdGhlIERCIHRocmVhZC4KLSAgICBpZiAo
ZGF0YWJhc2UtPmlzTmV3KCkgJiYgZGF0YWJhc2UtPm1fY3JlYXRpb25DYWxsYmFjay5nZXQoKSkg
eworICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAmJiBjcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7
CiAgICAgICAgIGRhdGFiYXNlLT5tX2V4cGVjdGVkVmVyc2lvbiA9ICIiOwogICAgICAgICBMT0co
U3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayBmb3Ig
ZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKLSAgICAgICAgZGF0YWJhc2UtPm1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFz
azo6Y3JlYXRlKGRhdGFiYXNlKSk7CisgICAgICAgIGRhdGFiYXNlLT5tX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPnBvc3RUYXNrKERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2s6OmNyZWF0ZShk
YXRhYmFzZSwgY3JlYXRpb25DYWxsYmFjaykpOwogICAgIH0KIAogICAgIHJldHVybiBkYXRhYmFz
ZTsKIH0KIAotRGF0YWJhc2U6OkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFz
c1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrKQotICAgIDogbV90cmFu
c2FjdGlvbkluUHJvZ3Jlc3MoZmFsc2UpCitEYXRhYmFzZTo6RGF0YWJhc2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4
cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBl
c3RpbWF0ZWRTaXplKQorICAgIDogQWJzdHJhY3REYXRhYmFzZShjb250ZXh0LCBuYW1lLCBleHBl
Y3RlZFZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKQorICAgICwgbV90cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoZmFsc2UpCiAgICAgLCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQo
dHJ1ZSkKLSAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQotICAgICwgbV9u
YW1lKG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZ3VpZCgwKQotICAgICwgbV9l
eHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAg
LCBtX2Rpc3BsYXlOYW1lKGRpc3BsYXlOYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBt
X2VzdGltYXRlZFNpemUoZXN0aW1hdGVkU2l6ZSkKICAgICAsIG1fZGVsZXRlZChmYWxzZSkKICAg
ICAsIG1fc3RvcHBlZChmYWxzZSkKLSAgICAsIG1fb3BlbmVkKGZhbHNlKQotICAgICwgbV9uZXco
ZmFsc2UpCi0gICAgLCBtX2NyZWF0aW9uQ2FsbGJhY2soY3JlYXRpb25DYWxsYmFjaykKIHsKLSAg
ICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpKTsKLSAgICBtX2NvbnRleHRU
aHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlP
cmlnaW4oKTsKICAgICBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX2NvbnRleHRU
aHJlYWRTZWN1cml0eU9yaWdpbi0+dGhyZWFkc2FmZUNvcHkoKTsKLSAgICBpZiAobV9uYW1lLmlz
TnVsbCgpKQotICAgICAgICBtX25hbWUgPSAiIjsKIAogICAgIFNjcmlwdENvbnRyb2xsZXI6Omlu
aXRpYWxpemVUaHJlYWRpbmcoKTsKLQotICAgIG1fZ3VpZCA9IGd1aWRGb3JPcmlnaW5BbmROYW1l
KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG5hbWUpOwotCi0gICAgewotICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotCi0gICAgICAgIEhhc2hTZXQ8RGF0YWJh
c2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7Ci0gICAgICAg
IGlmICghaGFzaFNldCkgewotICAgICAgICAgICAgaGFzaFNldCA9IG5ldyBIYXNoU2V0PERhdGFi
YXNlKj47Ci0gICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnNldChtX2d1aWQsIGhhc2hT
ZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaGFzaFNldC0+YWRkKHRoaXMpOwotICAgIH0KLQog
ICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpOwot
ICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5mdWxsUGF0aEZvckRh
dGFiYXNlKHNlY3VyaXR5T3JpZ2luKCksIG1fbmFtZSk7CiAKLSAgICBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5hZGRPcGVuRGF0YWJhc2UodGhpcyk7Ci0gICAgY29udGV4dC0+YWRkT3BlbkRh
dGFiYXNlKHRoaXMpOworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkT3BlbkRhdGFi
YXNlKHRoaXMpOwogfQogCiBjbGFzcyBEZXJlZkNvbnRleHRUYXNrIDogcHVibGljIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewpAQCAtMjUzLDE1ICsxNjcsMjEgQEAgRGF0YWJhc2U6On5E
YXRhYmFzZSgpCiAgICAgfQogfQogCi1ib29sIERhdGFiYXNlOjpvcGVuQW5kVmVyaWZ5VmVyc2lv
bihFeGNlcHRpb25Db2RlJiBlKQorU3RyaW5nIERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKK3sK
KyAgICBpZiAobV9kZWxldGVkKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJu
IEFic3RyYWN0RGF0YWJhc2U6OnZlcnNpb24oKTsKK30KKworYm9vbCBEYXRhYmFzZTo6b3BlbkFu
ZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29k
ZSYgZSkKIHsKICAgICBpZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJl
YWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyID0g
RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGUoKTsKIAogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNl
OwogICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXplciBzeW5jaHJvbml6ZXI7Ci0gICAgT3duUHRy
PERhdGFiYXNlT3BlblRhc2s+IHRhc2sgPSBEYXRhYmFzZU9wZW5UYXNrOjpjcmVhdGUodGhpcywg
JnN5bmNocm9uaXplciwgZSwgc3VjY2Vzcyk7CisgICAgT3duUHRyPERhdGFiYXNlT3BlblRhc2s+
IHRhc2sgPSBEYXRhYmFzZU9wZW5UYXNrOjpjcmVhdGUodGhpcywgc2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsICZzeW5jaHJvbml6ZXIsIGUsIHN1Y2Nlc3MpOwogCiAgICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzay5y
ZWxlYXNlKCkpOwogICAgIHN5bmNocm9uaXplci53YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKQEAg
LTI2OSw5MyArMTg5LDYgQEAgYm9vbCBEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24oRXhj
ZQogICAgIHJldHVybiBzdWNjZXNzOwogfQogCi0KLXN0YXRpYyBib29sIHJldHJpZXZlVGV4dFJl
c3VsdEZyb21EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYgcXVlcnks
IFN0cmluZyYgcmVzdWx0U3RyaW5nKQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
ZGIsIHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAg
IGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAo
JWkpIHByZXBhcmluZyBzdGF0ZW1lbnQgdG8gcmVhZCB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNl
ICglcykiLCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJl
c3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0gc3RhdGVtZW50
LmdldENvbHVtblRleHQoMCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAo
cmVzdWx0ID09IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0gU3RyaW5n
KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIExPR19FUlJP
UigiRXJyb3IgKCVpKSByZWFkaW5nIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJl
c3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfQotCi1ib29sIERhdGFiYXNlOjpnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYgdmVy
c2lvbikKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgZ2V0VmVyc2lvblF1ZXJ5
LCAoIlNFTEVDVCB2YWx1ZSBGUk9NICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgV0hF
UkUga2V5ID0gJyIgKyBkYXRhYmFzZVZlcnNpb25LZXkoKSArICInOyIpKTsKLQotICAgIG1fZGF0
YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7Ci0KLSAgICBib29sIHJlc3VsdCA9IHJldHJpZXZl
VGV4dFJlc3VsdEZyb21EYXRhYmFzZShtX3NxbGl0ZURhdGFiYXNlLCBnZXRWZXJzaW9uUXVlcnku
dGhyZWFkc2FmZUNvcHkoKSwgdmVyc2lvbik7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIHZlcnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRh
dGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotCi0gICAgbV9kYXRhYmFzZUF1dGhv
cml6ZXItPmVuYWJsZSgpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGJvb2wg
c2V0VGV4dFZhbHVlSW5EYXRhYmFzZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IFN0cmluZyYg
cXVlcnksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudChkYiwgcXVlcnkpOwotICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwot
Ci0gICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJhc2UgKCVzKSIs
IHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCB2YWx1ZSk7Ci0KLSAgICByZXN1bHQgPSBzdGF0ZW1l
bnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBzdGVwIHN0YXRlbWVudCB0byBzZXQgdmFsdWUgaW4gZGF0YWJh
c2UgKCVzKSIsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIERhdGFiYXNlOjpzZXRWZXJzaW9u
SW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgLy8gVGhlIElOU0VSVCB3
aWxsIHJlcGxhY2UgYW4gZXhpc3RpbmcgZW50cnkgZm9yIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBu
ZXcgdmVyc2lvbiBudW1iZXIsIGR1ZSB0byB0aGUgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UK
LSAgICAvLyBjbGF1c2UgaW4gdGhlIENSRUFURSBzdGF0ZW1lbnQgKHNlZSBEYXRhYmFzZTo6cGVy
Zm9ybU9wZW5BbmRWZXJpZnkoKSkuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHNl
dFZlcnNpb25RdWVyeSwgKCJJTlNFUlQgSU5UTyAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkg
KyAiIChrZXksIHZhbHVlKSBWQUxVRVMgKCciICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAiJywg
Pyk7IikpOwotCi0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKLQotICAgIGJv
b2wgcmVzdWx0ID0gc2V0VGV4dFZhbHVlSW5EYXRhYmFzZShtX3NxbGl0ZURhdGFiYXNlLCBzZXRW
ZXJzaW9uUXVlcnkudGhyZWFkc2FmZUNvcHkoKSwgdmVyc2lvbik7Ci0gICAgaWYgKCFyZXN1bHQp
Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNl
ICglcykiLCB2ZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBzZXRWZXJzaW9uUXVlcnkuYXNjaWkoKS5k
YXRhKCkpOwotCi0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOwotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBEYXRhYmFzZTo6dmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX2V4cGVjdGVkVmVyc2lvbi5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLSAgICAgICAgcmV0dXJuIG1fZXhw
ZWN0ZWRWZXJzaW9uID09IGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBEYXRhYmFzZTo6bWFya0FzRGVsZXRlZEFuZENs
b3NlKCkKIHsKICAgICBpZiAobV9kZWxldGVkIHx8ICFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmRhdGFiYXNlVGhyZWFkKCkpCkBAIC00MTAsMzAgKzI0MywxMyBAQCB2b2lkIERhdGFiYXNlOjpj
bG9zZShDbG9zZVBvbGljeSBwb2xpY3kpCiB7CiAgICAgUmVmUHRyPERhdGFiYXNlPiBwcm90ZWN0
ID0gdGhpczsKIAotICAgIGlmICghbV9vcGVuZWQpCi0gICAgICAgIHJldHVybjsKLQogICAgIEFT
U0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpOwogICAgIEFT
U0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFz
ZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKLSAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7
Ci0gICAgLy8gTXVzdCByZWYoKSBiZWZvcmUgY2FsbGluZyBkYXRhYmFzZVRocmVhZCgpLT5yZWNv
cmREYXRhYmFzZUNsb3NlZCgpLgotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJh
c2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQodGhpcyk7Ci0gICAgbV9vcGVuZWQgPSBm
YWxzZTsKIAotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsK
LQotICAgICAgICBIYXNoU2V0PERhdGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1h
cCgpLmdldChtX2d1aWQpOwotICAgICAgICBBU1NFUlQoaGFzaFNldCk7Ci0gICAgICAgIEFTU0VS
VChoYXNoU2V0LT5jb250YWlucyh0aGlzKSk7Ci0gICAgICAgIGhhc2hTZXQtPnJlbW92ZSh0aGlz
KTsKLSAgICAgICAgaWYgKGhhc2hTZXQtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZ3VpZFRv
RGF0YWJhc2VNYXAoKS5yZW1vdmUobV9ndWlkKTsKLSAgICAgICAgICAgIGRlbGV0ZSBoYXNoU2V0
OwotICAgICAgICAgICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnJlbW92ZShtX2d1aWQpOwotICAgICAg
ICB9Ci0gICAgfQorICAgIGNsb3NlRGF0YWJhc2UoKTsKIAorICAgIC8vIE11c3QgcmVmKCkgYmVm
b3JlIGNhbGxpbmcgZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQoKS4KKyAg
ICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFi
YXNlQ2xvc2VkKHRoaXMpOwogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VU
aHJlYWQoKS0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3ModGhpcyk7CiAgICAgaWYgKHBvbGljeSA9
PSBSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0KQogICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPnBvc3RUYXNrKENvbnRleHRSZW1vdmVPcGVuRGF0YWJhc2VUYXNrOjpjcmVhdGUodGhp
cykpOwpAQCAtNDcwLDc5ICsyODYsNiBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1h
eGltdW1TaXplCiAgICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmdldE1heFNp
emVGb3JEYXRhYmFzZSh0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZTo6ZGlzYWJsZUF1dGhvcml6
ZXIoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9kYXRhYmFz
ZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6ZW5hYmxlQXV0aG9y
aXplcigpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFi
YXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OnNldEF1dGhvcml6
ZXJSZWFkT25seSgpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBt
X2RhdGFiYXNlQXV0aG9yaXplci0+c2V0UmVhZE9ubHkoKTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6
bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRo
b3JpemVyKTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25DaGFu
Z2VkRGF0YWJhc2UoKTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6bGFzdEFjdGlvbldhc0luc2VydCgp
Ci17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4gbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKLX0KLQotdm9pZCBEYXRhYmFz
ZTo6cmVzZXREZWxldGVzKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwot
ICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5yZXNldERlbGV0ZXMoKTsKLX0KLQotYm9vbCBEYXRh
YmFzZTo6aGFkRGVsZXRlcygpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsK
LSAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmhhZERlbGV0ZXMoKTsKLX0KLQotc3Rh
dGljIGludCBndWlkRm9yT3JpZ2luQW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotICAgIFN0cmluZyBzdHJpbmdJRDsKLSAgICBpZiAob3JpZ2luLmVu
ZHNXaXRoKCIvIikpCi0gICAgICAgIHN0cmluZ0lEID0gb3JpZ2luICsgbmFtZTsKLSAgICBlbHNl
Ci0gICAgICAgIHN0cmluZ0lEID0gb3JpZ2luICsgIi8iICsgbmFtZTsKLQotICAgIC8vIE5vdGU6
IFdlIGRvbid0IGhhdmUgdG8gdXNlIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyBoZXJlIGJl
Y2F1c2UKLSAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGluIHRoZSBjb25zdHJ1
Y3RvciBvbiB0aGUgbWFpbiB0aHJlYWQKLSAgICAvLyBiZWZvcmUgYW55IG90aGVyIHRocmVhZHMg
dGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChNdXRleCwgc3RyaW5nSWRlbnRpZmllck11dGV4LCAoKSk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKHN0cmluZ0lkZW50aWZpZXJNdXRleCk7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
aW50PiBJREd1aWRNYXA7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChJREd1aWRNYXAsIHN0cmlu
Z0lkZW50aWZpZXJUb0dVSURNYXAsICgpKTsKLSAgICBpbnQgZ3VpZCA9IHN0cmluZ0lkZW50aWZp
ZXJUb0dVSURNYXAuZ2V0KHN0cmluZ0lEKTsKLSAgICBpZiAoIWd1aWQpIHsKLSAgICAgICAgc3Rh
dGljIGludCBjdXJyZW50TmV3R1VJRCA9IDE7Ci0gICAgICAgIGd1aWQgPSBjdXJyZW50TmV3R1VJ
RCsrOwotICAgICAgICBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLnNldChzdHJpbmdJRCwgZ3Vp
ZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGd1aWQ7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OnJlc2V0
QXV0aG9yaXplcigpCi17Ci0gICAgaWYgKG1fZGF0YWJhc2VBdXRob3JpemVyKQotICAgICAgICBt
X2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsKLX0KLQogdm9pZCBEYXRhYmFzZTo6cGVyZm9y
bVBvbGljeUNoZWNrcygpCiB7CiAgICAgLy8gRklYTUU6IENvZGUgc2ltaWxhciB0byB0aGUgZm9s
bG93aW5nIHdpbGwgbmVlZCB0byBiZSBydW4gdG8gZW5mb3JjZSB0aGUgcGVyLW9yaWdpbiBzaXpl
IGxpbWl0IHRoZSBzcGVjIG1hbmRhdGVzLgpAQCAtNTU3LDkyICszMDAsMTYgQEAgdm9pZCBEYXRh
YmFzZTo6cGVyZm9ybVBvbGljeUNoZWNrcygpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
Ym9vbCBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhjZXB0aW9uQ29kZSYgZSkKK2Jv
b2wgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGUpCiB7Ci0gICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9w
ZW4obV9maWxlbmFtZSwgdHJ1ZSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3Bl
biBkYXRhYmFzZSBhdCBwYXRoICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAg
ICAgIGUgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UudHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKCkp
Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHR1cm4gb24gaW5jcmVtZW50YWwgYXV0by12
YWN1dW0gZm9yIGRhdGFiYXNlICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRhdGEoKSk7CisgICAg
aWYgKEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBlKSkgeworICAgICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5k
YXRhYmFzZVRocmVhZCgpKQorICAgICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5k
YXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZU9wZW4odGhpcyk7CiAKLSAgICBBU1NFUlQo
bV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXpl
cihtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGlt
ZW91dChtYXhTcWxpdGVCdXN5V2FpdFRpbWUpOwotCi0gICAgU3RyaW5nIGN1cnJlbnRWZXJzaW9u
OwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLQotICAg
ICAgICBHdWlkVmVyc2lvbk1hcDo6aXRlcmF0b3IgZW50cnkgPSBndWlkVG9WZXJzaW9uTWFwKCku
ZmluZChtX2d1aWQpOwotICAgICAgICBpZiAoZW50cnkgIT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmVu
ZCgpKSB7Ci0gICAgICAgICAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChz
ZWUgdXBkYXRlR3VpZFZlcnNpb25NYXAoKSkuCi0gICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9
IGVudHJ5LT5zZWNvbmQuaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogZW50cnktPnNlY29uZDsKLSAg
ICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQ3VycmVudCBjYWNoZWQgdmVyc2lvbiBmb3IgZ3Vp
ZCAlaSBpcyAlcyIsIG1fZ3VpZCwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJObyBjYWNoZWQgdmVy
c2lvbiBmb3IgZ3VpZCAlaSIsIG1fZ3VpZCk7Ci0KLSAgICAgICAgICAgIGlmICghbV9zcWxpdGVE
YXRhYmFzZS50YWJsZUV4aXN0cyhkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkpIHsKLSAgICAgICAg
ICAgICAgICBtX25ldyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSAiICsgZGF0YWJhc2VJbmZvVGFibGVO
YW1lKCkgKyAiIChrZXkgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBD
T05GTElDVCBSRVBMQUNFLHZhbHVlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7Iikp
IHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIHRhYmxl
ICVzIGluIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkuYXNjaWkoKS5kYXRh
KCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAg
ICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENsb3Nl
IHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCi0gICAgICAgICAgICAgICAgICAgIG1f
c3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFn
ZXRWZXJzaW9uRnJvbURhdGFiYXNlKGN1cnJlbnRWZXJzaW9uKSkgewotICAgICAgICAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBjdXJyZW50IHZlcnNpb24gZnJvbSBkYXRhYmFzZSAl
cyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAg
IGUgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFu
ZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJh
c2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoY3VycmVudFZlcnNpb24ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIlJldHJpZXZlZCBjdXJyZW50IHZlcnNpb24gJXMgZnJvbSBk
YXRhYmFzZSAlcyIsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVn
TmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fbmV3IHx8
ICFtX2NyZWF0aW9uQ2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwg
IlNldHRpbmcgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQi
LCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRhYmFz
ZShtX2V4cGVjdGVkVmVyc2lvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMiLCBtX2V4cGVjdGVkVmVyc2lv
bi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGUgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KLSAgICAgICAg
ICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN1cnJl
bnRWZXJzaW9uID0gbV9leHBlY3RlZFZlcnNpb247Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgY3VycmVudFZlcnNpb24pOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRWZXJzaW9uLmlzTnVsbCgpKSB7Ci0gICAgICAg
IExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZG9lcyBub3QgaGF2ZSBpdHMgdmVyc2lvbiBz
ZXQiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgY3VycmVu
dFZlcnNpb24gPSAiIjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBp
c24ndCB0aGUgZW1wdHkgc3RyaW5nLCBlbnN1cmUgdGhhdCB0aGUgY3VycmVudCBkYXRhYmFzZSB2
ZXJzaW9uIHdlIGhhdmUgbWF0Y2hlcyB0aGF0IHZlcnNpb24uIE90aGVyd2lzZSwgc2V0IGFuIGV4
Y2VwdGlvbi4KLSAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVyc2lvbiBpcyB0aGUgZW1wdHkgc3Ry
aW5nLCB0aGVuIHdlIGFsd2F5cyByZXR1cm4gd2l0aCB3aGF0ZXZlciB2ZXJzaW9uIG9mIHRoZSBk
YXRhYmFzZSB3ZSBoYXZlLgotICAgIGlmICgoIW1fbmV3IHx8ICFtX2NyZWF0aW9uQ2FsbGJhY2sp
ICYmIG1fZXhwZWN0ZWRWZXJzaW9uLmxlbmd0aCgpICYmIG1fZXhwZWN0ZWRWZXJzaW9uICE9IGN1
cnJlbnRWZXJzaW9uKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAicGFnZSBleHBlY3RzIHZl
cnNpb24gJXMgZnJvbSBkYXRhYmFzZSAlcywgd2hpY2ggYWN0dWFsbHkgaGFzIHZlcnNpb24gbmFt
ZSAlcyAtIG9wZW5EYXRhYmFzZSgpIGNhbGwgd2lsbCBmYWlsIiwgbV9leHBlY3RlZFZlcnNpb24u
YXNjaWkoKS5kYXRhKCksCi0gICAgICAgICAgICBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCku
ZGF0YSgpLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGUgPSBJTlZB
TElEX1NUQVRFX0VSUjsKLSAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJh
c2UgZmlsZS4KLSAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIC8vIEFsbCBjaGVj
a3MgcGFzc2VkIGFuZCB3ZSBzdGlsbCBoYXZlIGEgaGFuZGxlIHRvIHRoaXMgZGF0YWJhc2UgZmls
ZS4KLSAgICAvLyBNYWtlIHN1cmUgRGF0YWJhc2VUaHJlYWQgY2xvc2VzIGl0IHdoZW4gRGF0YWJh
c2VUaHJlYWQgZ29lcyBhd2F5LgotICAgIG1fb3BlbmVkID0gdHJ1ZTsKLSAgICBpZiAobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKQotICAgICAgICBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlz
KTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBEYXRh
YmFzZTo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmlu
ZyYgbmV3VmVyc2lvbiwKQEAgLTc1NywxMSArNDI0LDYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJh
c2U6OnBlcmZvcm1HZXRUYWJsZQogICAgIHJldHVybiB0YWJsZU5hbWVzOwogfQogCi12b2lkIERh
dGFiYXNlOjpwZXJmb3JtQ3JlYXRpb25DYWxsYmFjaygpCi17Ci0gICAgbV9jcmVhdGlvbkNhbGxi
YWNrLT5oYW5kbGVFdmVudChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCksIHRoaXMpOwot
fQotCiBTUUxUcmFuc2FjdGlvbkNsaWVudCogRGF0YWJhc2U6OnRyYW5zYWN0aW9uQ2xpZW50KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRo
cmVhZCgpLT50cmFuc2FjdGlvbkNsaWVudCgpOwpAQCAtNzcyLDE0ICs0MzQsNiBAQCBTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yKiBEYXRhYmFzZTo6dHJhCiAgICAgcmV0dXJuIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigp
OwogfQogCi1TdHJpbmcgRGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAotewotICAgIGlmIChtX2Rl
bGV0ZWQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIo
Z3VpZE11dGV4KCkpOwotICAgIHJldHVybiBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCku
dGhyZWFkc2FmZUNvcHkoKTsKLX0KLQogVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnRhYmxlTmFt
ZXMoKQogewogICAgIC8vIEZJWE1FOiBOb3QgdXNpbmcgdGhyZWFkc2FmZUNvcHkgb24gdGhlc2Ug
c3RyaW5ncyBsb29rcyBvayBzaW5jZSB0aHJlYWRzIHRha2Ugc3RyaWN0IHR1cm5zCkBAIC03OTcs
MTQgKzQ1MSw2IEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjp0YWJsZU5hbWVzKCkKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERhdGFiYXNlOjpzZXRFeHBlY3RlZFZlcnNpb24oY29u
c3QgU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIG1fZXhwZWN0ZWRWZXJzaW9uID0gdmVyc2lvbi50
aHJlYWRzYWZlQ29weSgpOwotICAgIC8vIFVwZGF0ZSB0aGUgaW4gbWVtb3J5IGRhdGFiYXNlIHZl
cnNpb24gbWFwLgotICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgdXBk
YXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCB2ZXJzaW9uKTsKLX0KLQogU2VjdXJpdHlPcmlnaW4q
IERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbigpIGNvbnN0CiB7CiAgICAgaWYgKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpCkBAIC04MTQsMjkgKzQ2MCw2IEBAIFNl
Y3VyaXR5T3JpZ2luKiBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4KICAgICByZXR1cm4gMDsKIH0K
IAotU3RyaW5nIERhdGFiYXNlOjpzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICAvLyBS
ZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0
dXJuIG1fbmFtZS50aHJlYWRzYWZlQ29weSgpOwotfQotCi1TdHJpbmcgRGF0YWJhc2U6OmRpc3Bs
YXlOYW1lKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3Vu
dGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fZGlzcGxheU5hbWUudGhyZWFkc2FmZUNv
cHkoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBEYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZTsKLX0KLQotU3RyaW5nIERhdGFiYXNlOjpm
aWxlTmFtZSgpIGNvbnN0Ci17Ci0gICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291
bnRpbmcgdGhyZWFkIHNhZmV0eQotICAgIHJldHVybiBtX2ZpbGVuYW1lLnRocmVhZHNhZmVDb3B5
KCk7Ci19Ci0KIHZvaWQgRGF0YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKQogewog
ICAgIGludDY0X3QgZnJlZVNwYWNlU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2UuZnJlZVNwYWNlU2l6
ZSgpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDYxNzgzKQorKysgV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE4ICszMywxMyBAQAogI2luY2x1
ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCi0jZW5kaWYKIAogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGF0YWJhc2VB
dXRob3JpemVyOwogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKLWNsYXNzIERhdGFiYXNlVGhyZWFk
OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwog
Y2xhc3MgU1FMVHJhbnNhY3Rpb247CkBAIC01NCw4ICs0OSw2IEBAIGNsYXNzIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7CiBjbGFz
cyBWb2lkQ2FsbGJhY2s7CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KIGNsYXNzIERh
dGFiYXNlIDogcHVibGljIEFic3RyYWN0RGF0YWJhc2UgewogcHVibGljOgogICAgIHZpcnR1YWwg
fkRhdGFiYXNlKCk7CkBAIC02MywzNyArNTYsMTcgQEAgcHVibGljOgogICAgIC8vIERpcmVjdCBz
dXBwb3J0IGZvciB0aGUgRE9NIEFQSQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlPiBv
cGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBTdHJpbmcgdmVyc2lvbigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5n
IHZlcnNpb24oKSBjb25zdDsKICAgICB2b2lkIGNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBv
bGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25DYWxsYmFjaz4sCiAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3ND
YWxsYmFjayk7CiAgICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCiAgICAg
ICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNr
LCBib29sIHJlYWRPbmx5KTsKIAogICAgIC8vIEludGVybmFsIGVuZ2luZSBzdXBwb3J0Ci0gICAg
c3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCk7Ci0KLSAgICB2b2lk
IGRpc2FibGVBdXRob3JpemVyKCk7Ci0gICAgdm9pZCBlbmFibGVBdXRob3JpemVyKCk7Ci0gICAg
dm9pZCBzZXRBdXRob3JpemVyUmVhZE9ubHkoKTsKLSAgICBib29sIGxhc3RBY3Rpb25DaGFuZ2Vk
RGF0YWJhc2UoKTsKLSAgICBib29sIGxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKLSAgICB2b2lkIHJl
c2V0RGVsZXRlcygpOwotICAgIGJvb2wgaGFkRGVsZXRlcygpOwotCiAgICAgVmVjdG9yPFN0cmlu
Zz4gdGFibGVOYW1lcygpOwogCi0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LmdldCgpOyB9CiAgICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4oKSBjb25zdDsKICAgICBTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSB7IHJldHVy
biBtX3NxbGl0ZURhdGFiYXNlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nSWRlbnRpZmll
cigpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OwotCi0gICAgYm9vbCBnZXRWZXJzaW9uRnJvbURhdGFi
YXNlKFN0cmluZyYpOwotICAgIGJvb2wgc2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5n
Jik7Ci0gICAgdm9pZCBzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJik7Ci0gICAgYm9v
bCB2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFy
a0FzRGVsZXRlZEFuZENsb3NlKCk7CiAgICAgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4g
bV9kZWxldGVkOyB9CkBAIC0xMDEsMjggKzc0LDIzIEBAIHB1YmxpYzoKICAgICBlbnVtIENsb3Nl
UG9saWN5IHsgRG9Ob3RSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0LCBSZW1vdmVEYXRhYmFzZUZy
b21Db250ZXh0IH07CiAgICAgdm9pZCBjbG9zZShDbG9zZVBvbGljeSk7CiAgICAgdmlydHVhbCB2
b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKLSAgICBib29sIG9wZW5lZCgpIGNvbnN0IHsgcmV0dXJu
IG1fb3BlbmVkOyB9CiAKICAgICB2b2lkIHN0b3AoKTsKICAgICBib29sIHN0b3BwZWQoKSBjb25z
dCB7IHJldHVybiBtX3N0b3BwZWQ7IH0KIAotICAgIGJvb2wgaXNOZXcoKSBjb25zdCB7IHJldHVy
biBtX25ldzsgfQotCiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGRhdGFiYXNlU2l6ZSgpIGNvbnN0
OwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OwogCiAgICAgLy8g
Q2FsbGVkIGZyb20gRGF0YWJhc2VUaHJlYWQsIG11c3QgYmUgcHJlcGFyZWQgdG8gd29yayBvbiB0
aGUgYmFja2dyb3VuZCB0aHJlYWQKLSAgICB2b2lkIHJlc2V0QXV0aG9yaXplcigpOwogICAgIHZv
aWQgcGVyZm9ybVBvbGljeUNoZWNrcygpOwogCi0gICAgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlm
eShFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1PcGVuQW5kVmVyaWZ5
KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZv
aWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgdm9pZCBzY2hlZHVsZVRy
YW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKICAgICB2b2lkIHNjaGVkdWxlVHJh
bnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uKiwgYm9vbCBpbW1lZGlhdGVseSA9IGZhbHNlKTsK
IAogICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJsZU5hbWVzKCk7Ci0gICAgdm9pZCBw
ZXJmb3JtQ3JlYXRpb25DYWxsYmFjaygpOwogCiAgICAgU1FMVHJhbnNhY3Rpb25DbGllbnQqIHRy
YW5zYWN0aW9uQ2xpZW50KCkgY29uc3Q7CiAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciog
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0OwpAQCAtMTMxLDQ1ICs5OSwyMyBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0gICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+KTsKKyAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwogCi0gICAg
Ym9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBvcGVu
QW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25D
b2RlJik7CiAKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKIAorICAgIHN0YXRpYyB2
b2lkIGRlbGl2ZXJQZW5kaW5nQ2FsbGJhY2sodm9pZCopOworCiAgICAgRGVxdWU8UmVmUHRyPFNR
TFRyYW5zYWN0aW9uPiA+IG1fdHJhbnNhY3Rpb25RdWV1ZTsKICAgICBNdXRleCBtX3RyYW5zYWN0
aW9uSW5Qcm9ncmVzc011dGV4OwogICAgIGJvb2wgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CiAg
ICAgYm9vbCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQ7CiAKLSAgICBzdGF0aWMgdm9pZCBk
ZWxpdmVyUGVuZGluZ0NhbGxiYWNrKHZvaWQqKTsKLQotICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbjsKICAgICBSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9yaWdpbjsKLSAgICBTdHJpbmcgbV9u
YW1lOwotICAgIGludCBtX2d1aWQ7Ci0gICAgU3RyaW5nIG1fZXhwZWN0ZWRWZXJzaW9uOwotICAg
IFN0cmluZyBtX2Rpc3BsYXlOYW1lOwotICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXpl
OwotICAgIFN0cmluZyBtX2ZpbGVuYW1lOwogCiAgICAgYm9vbCBtX2RlbGV0ZWQ7Ci0KICAgICBi
b29sIG1fc3RvcHBlZDsKLQotICAgIGJvb2wgbV9vcGVuZWQ7Ci0KLSAgICBib29sIG1fbmV3Owot
Ci0gICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFzZTsKLSAgICBSZWZQdHI8RGF0YWJh
c2VBdXRob3JpemVyPiBtX2RhdGFiYXNlQXV0aG9yaXplcjsKLQotICAgIFJlZlB0cjxEYXRhYmFz
ZUNhbGxiYWNrPiBtX2NyZWF0aW9uQ2FsbGJhY2s7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3Ry
aW5nIGRhdGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2Vj
dXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9Ci0jZW5kaWYKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1
dGhvcml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhv
cml6ZXIuY3BwCShyZXZpc2lvbiA2MTc4MykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1
dGhvcml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAsMTkgQEAKICNpbmNsdWRl
ICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSNpbmNsdWRl
ICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EYXRhYmFzZUF1dGhvcml6
ZXI6OkRhdGFiYXNlQXV0aG9yaXplcigpCitQYXNzUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4g
RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJs
ZU5hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZUF1dGhvcml6ZXIoZGF0
YWJhc2VJbmZvVGFibGVOYW1lKSk7Cit9CisKK0RhdGFiYXNlQXV0aG9yaXplcjo6RGF0YWJhc2VB
dXRob3JpemVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKQogICAgIDogbV9z
ZWN1cml0eUVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2RhdGFiYXNlSW5mb1RhYmxlTmFtZShkYXRh
YmFzZUluZm9UYWJsZU5hbWUpCiB7CiAgICAgcmVzZXQoKTsKICAgICBhZGRXaGl0ZWxpc3RlZEZ1
bmN0aW9ucygpOwpAQCAtMzg4LDcgKzM5NCw3IEBAIHZvaWQgRGF0YWJhc2VBdXRob3JpemVyOjpz
ZXRSZWFkT25seSgpCiAgICAgbV9yZWFkT25seSA9IHRydWU7CiB9CiAKLWludCBEYXRhYmFzZUF1
dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQor
aW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZGVueUJhc2VkT25UYWJsZU5hbWUoY29uc3QgU3RyaW5n
JiB0YWJsZU5hbWUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NlY3VyaXR5RW5hYmxlZCkKICAgICAg
ICAgcmV0dXJuIFNRTEF1dGhBbGxvdzsKQEAgLTM5OSw3ICs0MDUsNyBAQCBpbnQgRGF0YWJhc2VB
dXRob3JpemVyOjpkZW55QmFzZWRPblRhYmxlCiAgICAgLy8gICAgZXF1YWxJZ25vcmluZ0Nhc2Uo
dGFibGVOYW1lLCAic3FsaXRlX3NlcXVlbmNlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodGFibGVO
YW1lLCBEYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKQogICAgIC8vICAgICAgICBy
ZXR1cm4gU1FMQXV0aERlbnk7CiAKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodGFibGVOYW1l
LCBEYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKQorICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZSh0YWJsZU5hbWUsIG1fZGF0YWJhc2VJbmZvVGFibGVOYW1lKSkKICAgICAgICAgcmV0
dXJuIFNRTEF1dGhEZW55OwogCiAgICAgcmV0dXJuIFNRTEF1dGhBbGxvdzsKSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHJldmlzaW9uIDYxNzgzKQorKysgV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgs
MTEgQEAKICNpZm5kZWYgRGF0YWJhc2VBdXRob3JpemVyX2gKICNkZWZpbmUgRGF0YWJhc2VBdXRo
b3JpemVyX2gKIAorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU3RyaW5n
SGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQzLDcgKzQ0LDcgQEAgZXh0ZXJuIGNvbnN0IGludCBTUUxBdXRoRGVueTsKIAog
Y2xhc3MgRGF0YWJhc2VBdXRob3JpemVyIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8RGF0YWJh
c2VBdXRob3JpemVyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VB
dXRob3JpemVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VBdXRob3Jp
emVyKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gY3JlYXRl
KGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKTsKIAogICAgIGludCBjcmVhdGVU
YWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CiAgICAgaW50IGNyZWF0ZVRlbXBUYWJsZShj
b25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CkBAIC05Nyw5ICs5OCw5IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhZERlbGV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2hhZERlbGV0ZXM7IH0KIAogcHJpdmF0
ZToKLSAgICBEYXRhYmFzZUF1dGhvcml6ZXIoKTsKKyAgICBEYXRhYmFzZUF1dGhvcml6ZXIoY29u
c3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUpOwogICAgIHZvaWQgYWRkV2hpdGVsaXN0
ZWRGdW5jdGlvbnMoKTsKLSAgICBpbnQgZGVueUJhc2VkT25UYWJsZU5hbWUoY29uc3QgU3RyaW5n
Jik7CisgICAgaW50IGRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0Owog
ICAgIGludCB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmKTsKIAog
ICAgIGJvb2wgbV9zZWN1cml0eUVuYWJsZWQgOiAxOwpAQCAtMTA4LDYgKzEwOSw4IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX3JlYWRPbmx5IDogMTsKICAgICBib29sIG1faGFkRGVsZXRlcyA6IDE7
CiAKKyAgICBjb25zdCBTdHJpbmcgbV9kYXRhYmFzZUluZm9UYWJsZU5hbWU7CisKICAgICBIYXNo
U2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBtX3doaXRlbGlzdGVkRnVuY3Rpb25zOwogfTsK
IApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHJldmlzaW9uIDYxNzgzKQorKysgV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDY4ICsz
MSwxMDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICNpbmNsdWRlICJEYXRhYmFzZUNhbGxi
YWNrLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvblN5
bmNDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBTdHJpbmcmIERhdGFiYXNlU3luYzo6ZGF0YWJhc2VJ
bmZvVGFibGVOYW1lKCkKK1Bhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZVN5bmM6Om9w
ZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFi
YXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBuYW1lLCAoIl9fV2ViS2l0RGF0YWJhc2VJbmZv
VGFibGVfXyIpKTsKLSAgICByZXR1cm4gbmFtZTsKLX0KKyAgICBBU1NFUlQoY29udGV4dC0+aXND
b250ZXh0VGhyZWFkKCkpOwogCi1QYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJhc2VTeW5j
OjpvcGVuRGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLCBQYXNzUmVmUHRy
PERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTog
dW5jb21tZW50IHRoZSBhc3NlcnQgb25jZSB3ZSB1c2UgdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHBhcmFtZXRlcgotICAgIC8vQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsK
KyAgICBpZiAoIURhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNhbkVzdGFibGlzaERhdGFiYXNl
KGNvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSkgeworICAgICAgICBM
T0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93ZWQgdG8g
YmUgZXN0YWJsaXNoZWQiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBjb250ZXh0LT5zZWN1cml0eU9y
aWdpbigpLT50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcg
RGF0YWJhc2VTeW5jKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUpKTsKKworICAgIGlmICghZGF0YWJhc2UtPnBlcmZvcm1PcGVuQW5kVmVy
aWZ5KCFjcmVhdGlvbkNhbGxiYWNrLCBlYykpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJG
YWlsZWQgdG8gb3BlbiBhbmQgdmVyaWZ5IHZlcnNpb24gKGV4cGVjdGVkICVzKSBvZiBkYXRhYmFz
ZSAlcyIsIGV4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UtPmRhdGFiYXNl
RGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFz
ZURldGFpbHMoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUpOworCisgICAgaWYgKGRhdGFiYXNlLT5pc05ldygpICYmIGNyZWF0aW9uQ2Fs
bGJhY2suZ2V0KCkpIHsKKyAgICAgICAgZGF0YWJhc2UtPm1fZXhwZWN0ZWRWZXJzaW9uID0gIiI7
CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiSW52b2tpbmcgdGhlIGNyZWF0aW9uIGNhbGxiYWNr
IGZvciBkYXRhYmFzZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOworICAgICAgICBjcmVhdGlvbkNh
bGxiYWNrLT5oYW5kbGVFdmVudChjb250ZXh0LCBkYXRhYmFzZS5nZXQoKSk7CisgICAgfQogCi0g
ICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRhdGFiYXNl
OwogfQogCiBEYXRhYmFzZVN5bmM6OkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJz
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+IGNyZWF0aW9uQ2FsbGJhY2spCi0gICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29u
dGV4dCkKLSAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX2V4
cGVjdGVkVmVyc2lvbihleHBlY3RlZFZlcnNpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAs
IG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1f
ZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQotICAgICwgbV9jcmVhdGlvbkNhbGxiYWNrKGNy
ZWF0aW9uQ2FsbGJhY2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCisgICAgOiBBYnN0cmFj
dERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsK
IH0KIAogRGF0YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5jKCkKIHsKICAgICBBU1NFUlQobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgY2xvc2VJbW1lZGlh
dGVseSgpOwogfQogCi1TdHJpbmcgRGF0YWJhc2VTeW5jOjp2ZXJzaW9uKCkgY29uc3QKK3ZvaWQg
RGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYs
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJikK
IHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQo
KSk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIERhdGFiYXNlU3luYzo6Y2hhbmdl
VmVyc2lvbihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpCit2b2lkIERhdGFiYXNlU3luYzo6
dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2ws
IEV4Y2VwdGlvbkNvZGUmKQogewogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAotdm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9u
KFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sLCBFeGNlcHRpb25D
b2RlJikKK3ZvaWQgRGF0YWJhc2VTeW5jOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKQogewotICAg
IEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAg
ICAvLyBGSVhNRTogbmVlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxhciB0byBjbG9zZUltbWVkaWF0
ZWx5KCksIGJ1dCBpbiBhIHN5bmMgd2F5CiB9CiAKLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIERh
dGFiYXNlU3luYzo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CitjbGFzcyBDbG9zZVN5
bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q2xvc2VTeW5jRGF0
YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+
IGRhdGFiYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDbG9zZVN5bmNEYXRhYmFzZU9u
Q29udGV4dFRocmVhZFRhc2soZGF0YWJhc2UpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKKyAgICB7CisgICAgICAgIG1fZGF0
YWJhc2UtPmNsb3NlSW1tZWRpYXRlbHkoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2xvc2VT
eW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBk
YXRhYmFzZSkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgIHsKKyAgICB9CisK
KyAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBtX2RhdGFiYXNlOworfTsKKwordm9pZCBEYXRhYmFz
ZVN5bmM6OmNsb3NlSW1tZWRpYXRlbHkoKQogewotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LmdldCgpOworICAgIGlmICghb3BlbmVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkgewor
ICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKENsb3NlU3luY0RhdGFi
YXNlT25Db250ZXh0VGhyZWFkVGFzazo6Y3JlYXRlKHRoaXMpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFz
ZSh0aGlzKTsKKworICAgIGNsb3NlRGF0YWJhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaAkocmV2aXNpb24gNjE3ODMpCisrKyBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDQ4ICszMCwz
NiBAQAogI2RlZmluZSBEYXRhYmFzZVN5bmNfaAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQorI2lu
Y2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaWZuZGVmIE5ERUJVRworI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRh
YmFzZUNhbGxiYWNrOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7CiBjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworY2xh
c3MgU2VjdXJpdHlPcmlnaW47CiAKIC8vIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHNob3VsZCBi
ZSBjcmVhdGVkIGFuZCB1c2VkIG9ubHkgb24gdGhlIHdvcmtlcidzIGNvbnRleHQgdGhyZWFkLgot
Y2xhc3MgRGF0YWJhc2VTeW5jIDogcHVibGljIFJlZkNvdW50ZWQ8RGF0YWJhc2VTeW5jPiB7Citj
bGFzcyBEYXRhYmFzZVN5bmMgOiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7CiBwdWJsaWM6Ci0g
ICAgfkRhdGFiYXNlU3luYygpOworICAgIHZpcnR1YWwgfkRhdGFiYXNlU3luYygpOwogCi0gICAg
Ly8gRGlyZWN0IHN1cHBvcnQgZm9yIHRoZSBET00gQVBJCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
RGF0YWJhc2VTeW5jPiBvcGVuRGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgdmVyc2lvbigp
IGNvbnN0OwogICAgIHZvaWQgY2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24s
IGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmND
YWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5LCBFeGNlcHRpb25D
b2RlJik7CiAKLSAgICAvLyBJbnRlcm5hbCBlbmdpbmUgc3VwcG9ydAotICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKLQotICAgIHN0YXRp
YyBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpOworICAgIHZpcnR1YWwgdm9p
ZCBtYXJrQXNEZWxldGVkQW5kQ2xvc2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlh
dGVseSgpOwogCiBwcml2YXRlOgogICAgIERhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwK
LSAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+KTsKLQotICAgIFJl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0g
ICAgU3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV9leHBlY3RlZFZlcnNpb247Ci0gICAgU3Ry
aW5nIG1fZGlzcGxheU5hbWU7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2VzdGltYXRlZFNpemU7Ci0g
ICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IG1fY3JlYXRpb25DYWxsYmFjazsKLQotI2lmbmRl
ZiBOREVCVUcKLSAgICBTdHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25zdCB7IHJldHVybiBT
dHJpbmcoKTsgfQotI2VuZGlmCisgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAkocmV2aXNpb24gNjE3ODMp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODcsOCArODcsOSBAQCB2b2lkIERhdGFiYXNlVGFzazo6cGVyZm9ybVRhc2soKQogLy8gKioqIERh
dGFiYXNlT3BlblRhc2sgKioqCiAvLyBPcGVucyB0aGUgZGF0YWJhc2UgZmlsZSBhbmQgdmVyaWZp
ZXMgdGhlIHZlcnNpb24gbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdmVyc2lvbi4KIAotRGF0YWJhc2VP
cGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFiYXNlVGFz
a1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBz
dWNjZXNzKQorRGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSogZGF0
YWJhc2UsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9u
aXplciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQog
ICAgIDogRGF0YWJhc2VUYXNrKGRhdGFiYXNlLCBzeW5jaHJvbml6ZXIpCisgICAgLCBtX3NldFZl
cnNpb25Jbk5ld0RhdGFiYXNlKHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKQogICAgICwgbV9jb2Rl
KGNvZGUpCiAgICAgLCBtX3N1Y2Nlc3Moc3VjY2VzcykKIHsKQEAgLTk3LDcgKzk4LDcgQEAgRGF0
YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayhEYXRhYgogCiB2b2lkIERhdGFiYXNlT3Bl
blRhc2s6OmRvUGVyZm9ybVRhc2soKQogewotICAgIG1fc3VjY2VzcyA9IGRhdGFiYXNlKCktPnBl
cmZvcm1PcGVuQW5kVmVyaWZ5KG1fY29kZSk7CisgICAgbV9zdWNjZXNzID0gZGF0YWJhc2UoKS0+
cGVyZm9ybU9wZW5BbmRWZXJpZnkobV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgbV9jb2RlKTsK
IH0KIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgJKHJldmlzaW9u
IDYxNzgzKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NSwxOSArODUsMjAgQEAgcHJpdmF0ZToKIAogY2xhc3MgRGF0YWJhc2VPcGVuVGFzayA6
IHB1YmxpYyBEYXRhYmFzZVRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERh
dGFiYXNlT3BlblRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIERhdGFiYXNlVGFza1N5bmNocm9u
aXplciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlT3BlblRhc2s+IGNyZWF0ZShEYXRhYmFzZSog
ZGIsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXpl
ciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFzZU9wZW5UYXNrKGRiLCBzeW5jaHJvbml6ZXIs
IGNvZGUsIHN1Y2Nlc3MpOworICAgICAgICByZXR1cm4gbmV3IERhdGFiYXNlT3BlblRhc2soZGIs
IHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBzeW5jaHJvbml6ZXIsIGNvZGUsIHN1Y2Nlc3MpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBEYXRhYmFzZU9wZW5UYXNrKERhdGFiYXNlKiwgRGF0YWJh
c2VUYXNrU3luY2hyb25pemVyKiwgRXhjZXB0aW9uQ29kZSYsIGJvb2wmIHN1Y2Nlc3MpOworICAg
IERhdGFiYXNlT3BlblRhc2soRGF0YWJhc2UqLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNl
LCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqLCBFeGNlcHRpb25Db2RlJiwgYm9vbCYgc3VjY2Vz
cyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwogI2lmbmRlZiBOREVCVUcK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFza05hbWUoKSBjb25zdDsKICNlbmRpZgog
CisgICAgYm9vbCBtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNlOwogICAgIEV4Y2VwdGlvbkNvZGUm
IG1fY29kZTsKICAgICBib29sJiBtX3N1Y2Nlc3M7CiB9OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjE3
ODMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NCBAQAorMjAxMC0wNi0yMyAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuY29tbWVu
dCBhbGwgdGVzdCBjYXNlcyBpbiBvcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA2MDcKKworICAgICAgICAq
IGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFi
YXNlLXN5bmMtaW5wdXRzLmpzOgorICAgICAgICAoY2F0Y2gpOgorCiAyMDEwLTA2LTI0ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1z
eW5jLWlucHV0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDYxNzgzKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1k
YXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUsNCAr
NSw2IEBAIFBBU1M6IHVuZGVmaW5lZAogUEFTUzogdW5kZWZpbmVkCiBQQVNTOiB1bmRlZmluZWQK
IFBBU1M6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3CitQQVNTOiBvcGVuRGF0
YWJhc2VTeW5jKCkgc3VjY2VlZGVkLgorUEFTUzogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkg
d2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4KIApJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanMJKHJldmlzaW9uIDYxNzgzKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3lu
Yy1pbnB1dHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE5ICs0NiwyMSBAQCB0cnkgewogICAg
IHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwogfQogCi0vLyBGSVhNRTogVW5j
b21tZW50IHRoZXNlIHRlc3RzIHdoZW4gdGhlIHN5bmMgREIgQVBJIGlzIGltcGxlbWVudGVkLgot
Ly90cnkgewotLy8gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9u
IiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKLS8vICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBvcGVu
RGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLiIpOwotLy99IGNhdGNoIChlcnIpIHsKLS8vICAgIHBv
c3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOwotLy99Ci0vLwotLy90cnkgewotLy8g
ICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3Jp
cHRpb24iLCAxMDI0LCBmdW5jdGlvbihkYikgeyB9KTsKLS8vICAgIHBvc3RNZXNzYWdlKCJQQVNT
OiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sgc3Vj
Y2VlZGVkLiIpOwotLy99IGNhdGNoIChlcnIpIHsKLS8vICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAi
ICsgZXJyLm1lc3NhZ2UpOwotLy99Cit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygi
REJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7CisgICAgcG9zdE1l
c3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuIik7Cit9IGNhdGNoIChl
cnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5
IHsKKyAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhYmFzZSwgb3RoZXJ3aXNlIHRoZSBj
cmVhdGlvbiBjYWxsYmFjayB3b24ndCBiZSBpbnZva2VkLgorICAgIGRiID0gb3BlbkRhdGFiYXNl
U3luYygiREJOYW1lQ3JlYXRpb25DYWxsYmFjayIgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpLCAi
REJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbihkYikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1l
c3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGggYSBjcmVhdGlvbiBj
YWxsYmFjayBzdWNjZWVkZWQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworfSBj
YXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Cit9
CiAKIHBvc3RNZXNzYWdlKCJkb25lIik7Cg==
</data>
<flag name="commit-queue"
          id="46697"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59713</attachid>
            <date>2010-06-24 17:32:12 -0700</date>
            <delta_ts>2010-06-29 03:17:24 -0700</delta_ts>
            <desc>patch #1: implement DatabaseSync::openDatabaseSync()</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>66303</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTgwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODYgQEAKKzIwMTAtMDYtMjMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKCkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisgICAgICAg
IE1vdmVkIHNvbWUgY29tbW9uIGNvZGUgZnJvbSBEYXRhYmFzZSB0byBBYnN0cmFjdERhdGFiYXNl
LiBNYWRlCisgICAgICAgIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkgdmlydHVhbCwgc2luY2UgRGF0
YWJhc2VTeW5jIGRvZXNuJ3QgbmVlZCB0bworICAgICAgICBpbnRlcmFjdCB3aXRoIERhdGFiYXNl
VGhyZWFkLiBSZW1vdmVkIHRoZSBtX2NyZWF0aW9uQ2FsbGJhY2sKKyAgICAgICAgZmllbGQsIHNp
bmNlIGl0J3Mgb25seSBuZWVkZWQgaW4gdGhlIG9wZW5EYXRhYmFzZXtTeW5jfSBtZXRob2RzLgor
CisgICAgICAgICogc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnJldHJpZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRUZXh0VmFsdWVJbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRNdXRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpndWlkVG9WZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnVw
ZGF0ZUd1aWRWZXJzaW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRUb0RhdGFiYXNlTWFw
KToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRGb3JPcmlnaW5BbmROYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6QWJzdHJhY3REYXRhYmFzZTo6dmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgIChXZWJDb3JlOjpB
YnN0cmFjdERhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0RGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QWJzdHJhY3REYXRhYmFzZTo6ZGlzcGxheU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJh
Y3REYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpmaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpk
YXRhYmFzZVZlcnNpb25LZXkpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6
Z2V0VmVyc2lvbkZyb21EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpzZXRWZXJzaW9uSW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjp2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjpkaXNhYmxlQXV0aG9yaXplcik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjplbmFibGVBdXRob3JpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpB
YnN0cmFjdERhdGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25XYXNJbnNlcnQpOgorICAgICAgICAo
V2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6cmVzZXREZWxldGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0RGF0YWJhc2U6OmhhZERlbGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6cmVzZXRBdXRob3JpemVyKToKKyAgICAgICAgKiBzdG9yYWdlL0Fic3Ry
YWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Om9wZW5l
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjppc05ldyk6CisgICAgICAg
IChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZURlYnVnTmFtZSk6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNyZWF0
aW9uQ2FsbGJhY2tUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDcmVh
dGlvbkNhbGxiYWNrVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlOjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dmVy
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtT3Bl
bkFuZFZlcmlmeSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2U6OnNxbGl0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFi
YXNlQXV0aG9yaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OkRhdGFiYXNl
QXV0aG9yaXplcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRlbnlC
YXNlZE9uVGFibGVOYW1lKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5o
OgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlU3luYzo6b3BlbkRhdGFiYXNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVN5bmM6OkRhdGFiYXNlU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6
OmNoYW5nZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjp0cmFuc2Fj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6Om1hcmtBc0RlbGV0ZWRBbmRD
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVh
ZFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9zZVN5bmNEYXRhYmFzZU9uQ29u
dGV4dFRocmVhZFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb3NlU3lu
Y0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFzazo6Q2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRU
aHJlYWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6Y2xvc2VJbW1lZGlh
dGVseSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVN5bmMuaDoKKyAgICAgICAgKiBzdG9y
YWdlL0RhdGFiYXNlVGFzay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU9wZW5UYXNr
OjpEYXRhYmFzZU9wZW5UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT3BlblRhc2s6
OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmg6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZU9wZW5UYXNrOjpjcmVhdGUpOgorCiAyMDEwLTA2LTI0ICBN
YXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLiBCdWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCShy
ZXZpc2lvbiA2MTgwMykKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTMyIEBACiAjaW5jbHVkZSAiQWJzdHJhY3REYXRh
YmFzZS5oIgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUgIkRhdGFiYXNlQXV0aG9y
aXplci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50
LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVz
dWx0RnJvbURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwg
U3RyaW5nJiByZXN1bHRTdHJpbmcpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChk
YiwgcXVlcnkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOworCisgICAg
aWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1IoIkVycm9yICgl
aSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2Ug
KCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVz
dWx0ID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChy
ZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgTE9HX0VSUk9SKCJFcnJvciAo
JWkpIHJlYWRpbmcgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVy
eS5hc2NpaSgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBz
ZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KGRiLCBxdWVyeSk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7CisK
KyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwg
cXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKKworICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIHN0ZXAgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFz
ZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEZJWE1FOiBtb3ZlIGFsbCBndWlkLXJl
bGF0ZWQgZnVuY3Rpb25zIHRvIGEgRGF0YWJhc2VWZXJzaW9uVHJhY2tlciBjbGFzcy4KK3N0YXRp
YyBNdXRleCYgZ3VpZE11dGV4KCkKK3sKKyAgICAvLyBOb3RlOiBXZSBkb24ndCBoYXZlIHRvIHVz
ZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMgaGVyZSBiZWNhdXNlCisgICAgLy8gdGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgb25jZSBpbiB0aGUgY29uc3RydWN0b3Igb24gdGhlIG1haW4gdGhy
ZWFkCisgICAgLy8gYmVmb3JlIGFueSBvdGhlciB0aHJlYWRzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0
aW9uIGFyZSB1c2VkLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG11dGV4LCAoKSk7
CisgICAgcmV0dXJuIG11dGV4OworfQorCit0eXBlZGVmIEhhc2hNYXA8aW50LCBTdHJpbmc+IEd1
aWRWZXJzaW9uTWFwOworc3RhdGljIEd1aWRWZXJzaW9uTWFwJiBndWlkVG9WZXJzaW9uTWFwKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWRWZXJzaW9uTWFwLCBtYXAsICgpKTsKKyAg
ICByZXR1cm4gbWFwOworfQorCisvLyBOT1RFOiBDYWxsZXIgbXVzdCBsb2NrIGd1aWRNdXRleCgp
Lgorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKGludCBndWlkLCBTdHJp
bmcgbmV3VmVyc2lvbikKK3sKKyAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBpcyBsb2NrZWQu
CisgICAgQVNTRVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOworCisgICAgLy8gTm90ZTogSXQg
aXMgbm90IHNhZmUgdG8gcHV0IGFuIGVtcHR5IHN0cmluZyBpbnRvIHRoZSBndWlkVG9WZXJzaW9u
TWFwKCkgbWFwLgorICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZSBtYXAgaXMgY3Jvc3MtdGhyZWFk
LCBidXQgZW1wdHkgc3RyaW5ncyBhcmUgcGVyLXRocmVhZC4KKyAgICAvLyBUaGUgY29weSgpIGZ1
bmN0aW9uIG1ha2VzIGEgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHlvdSBjYW4gdXNlIG9uIHRoZSBj
dXJyZW50CisgICAgLy8gdGhyZWFkLCBidXQgd2UgbmVlZCBhIHN0cmluZyB3ZSBjYW4ga2VlcCBp
biBhIGNyb3NzLXRocmVhZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAvLyBGSVhNRTogVGhpcyBpcyBh
IHF1aXRlLWF3a3dhcmQgcmVzdHJpY3Rpb24gdG8gaGF2ZSB0byBwcm9ncmFtIHdpdGguCisKKyAg
ICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgY29tbWVudCBhYm92ZSku
CisgICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlzRW1wdHkoKSA/
IFN0cmluZygpIDogbmV3VmVyc2lvbi50aHJlYWRzYWZlQ29weSgpKTsKK30KKwordHlwZWRlZiBI
YXNoTWFwPGludCwgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj4qPiBHdWlkRGF0YWJhc2VNYXA7
CitzdGF0aWMgR3VpZERhdGFiYXNlTWFwJiBndWlkVG9EYXRhYmFzZU1hcCgpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChHdWlkRGF0YWJhc2VNYXAsIG1hcCwgKCkpOworICAgIHJldHVybiBt
YXA7Cit9CisKK3N0YXRpYyBpbnQgZ3VpZEZvck9yaWdpbkFuZE5hbWUoY29uc3QgU3RyaW5nJiBv
cmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBTdHJpbmcgc3RyaW5nSUQ7CisgICAg
aWYgKG9yaWdpbi5lbmRzV2l0aCgiLyIpKQorICAgICAgICBzdHJpbmdJRCA9IG9yaWdpbiArIG5h
bWU7CisgICAgZWxzZQorICAgICAgICBzdHJpbmdJRCA9IG9yaWdpbiArICIvIiArIG5hbWU7CisK
KyAgICAvLyBOb3RlOiBXZSBkb24ndCBoYXZlIHRvIHVzZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRT
dGF0aWMgaGVyZSBiZWNhdXNlCisgICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBp
biB0aGUgY29uc3RydWN0b3Igb24gdGhlIG1haW4gdGhyZWFkCisgICAgLy8gYmVmb3JlIGFueSBv
dGhlciB0aHJlYWRzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uIGFyZSB1c2VkLgorICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoTXV0ZXgsIHN0cmluZ0lkZW50aWZpZXJNdXRleCwgKCkpOworICAgIE11
dGV4TG9ja2VyIGxvY2tlcihzdHJpbmdJZGVudGlmaWVyTXV0ZXgpOworICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIGludD4gSURHdWlkTWFwOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSURH
dWlkTWFwLCBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLCAoKSk7CisgICAgaW50IGd1aWQgPSBz
dHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLmdldChzdHJpbmdJRCk7CisgICAgaWYgKCFndWlkKSB7
CisgICAgICAgIHN0YXRpYyBpbnQgY3VycmVudE5ld0dVSUQgPSAxOworICAgICAgICBndWlkID0g
Y3VycmVudE5ld0dVSUQrKzsKKyAgICAgICAgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcC5zZXQo
c3RyaW5nSUQsIGd1aWQpOworICAgIH0KKworICAgIHJldHVybiBndWlkOworfQorCiBzdGF0aWMg
Ym9vbCBpc0RhdGFiYXNlQXZhaWxhYmxlID0gdHJ1ZTsKIAogYm9vbCBBYnN0cmFjdERhdGFiYXNl
Ojppc0F2YWlsYWJsZSgpCkBAIC00NSwxMCArMTY4LDMwNCBAQCB2b2lkIEFic3RyYWN0RGF0YWJh
c2U6OnNldElzQXZhaWxhYmxlKGJvCiAgICAgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IGF2YWlsYWJs
ZTsKIH0KIAorLy8gc3RhdGljCitjb25zdCBTdHJpbmcmIEFic3RyYWN0RGF0YWJhc2U6OmRhdGFi
YXNlSW5mb1RhYmxlTmFtZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG5h
bWUsICgiX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fIikpOworICAgIHJldHVybiBuYW1lOwor
fQorCitBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3Rl
ZFZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICA6IG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICwgbV9uYW1lKG5hbWUuY3Jvc3NUaHJl
YWRTdHJpbmcoKSkKKyAgICAsIG1fZXhwZWN0ZWRWZXJzaW9uKGV4cGVjdGVkVmVyc2lvbi5jcm9z
c1RocmVhZFN0cmluZygpKQorICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5jcm9zc1Ro
cmVhZFN0cmluZygpKQorICAgICwgbV9lc3RpbWF0ZWRTaXplKGVzdGltYXRlZFNpemUpCisgICAg
LCBtX2d1aWQoMCkKKyAgICAsIG1fb3BlbmVkKGZhbHNlKQorICAgICwgbV9uZXcoZmFsc2UpCit7
CisgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2NvbnRleHRU
aHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlP
cmlnaW4oKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyID0gRGF0YWJhc2VBdXRob3JpemVy
OjpjcmVhdGUoZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpOworCisgICAgaWYgKG1fbmFtZS5pc051
bGwoKSkKKyAgICAgICAgbV9uYW1lID0gIiI7CisKKyAgICBtX2d1aWQgPSBndWlkRm9yT3JpZ2lu
QW5kTmFtZShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBuYW1lKTsKKyAgICB7CisgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisKKyAgICAgICAgSGFzaFNldDxB
YnN0cmFjdERhdGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmdldChtX2d1
aWQpOworICAgICAgICBpZiAoIWhhc2hTZXQpIHsKKyAgICAgICAgICAgIGhhc2hTZXQgPSBuZXcg
SGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj47CisgICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1h
cCgpLnNldChtX2d1aWQsIGhhc2hTZXQpOworICAgICAgICB9CisKKyAgICAgICAgaGFzaFNldC0+
YWRkKHRoaXMpOworICAgIH0KKworICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKHNlY3VyaXR5T3JpZ2luKCksIG1fbmFtZSk7Cisg
ICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuYWRkT3BlbkRhdGFiYXNlKHRoaXMpOworfQor
CiBBYnN0cmFjdERhdGFiYXNlOjp+QWJzdHJhY3REYXRhYmFzZSgpCiB7CiB9CiAKK3ZvaWQgQWJz
dHJhY3REYXRhYmFzZTo6Y2xvc2VEYXRhYmFzZSgpCit7CisgICAgaWYgKCFtX29wZW5lZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgIG1fb3Bl
bmVkID0gZmFsc2U7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4
KCkpOworCisgICAgICAgIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+KiBoYXNoU2V0ID0gZ3Vp
ZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKKyAgICAgICAgQVNTRVJUKGhhc2hTZXQpOwor
ICAgICAgICBBU1NFUlQoaGFzaFNldC0+Y29udGFpbnModGhpcykpOworICAgICAgICBoYXNoU2V0
LT5yZW1vdmUodGhpcyk7CisgICAgICAgIGlmIChoYXNoU2V0LT5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkucmVtb3ZlKG1fZ3VpZCk7CisgICAgICAgICAgICBk
ZWxldGUgaGFzaFNldDsKKyAgICAgICAgICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5yZW1vdmUobV9n
dWlkKTsKKyAgICAgICAgfQorICAgIH0KK30KKworU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OnZl
cnNpb24oKSBjb25zdAoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Cisg
ICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS50aHJlYWRzYWZlQ29weSgp
OworfQorCitzdGF0aWMgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMwMDAwOwor
Ym9vbCBBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNl
dFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1f
c3FsaXRlRGF0YWJhc2Uub3BlbihtX2ZpbGVuYW1lLCB0cnVlKSkgeworICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBvcGVuIGRhdGFiYXNlIGF0IHBhdGggJXMiLCBtX2ZpbGVuYW1lLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UudHVybk9uSW5jcmVt
ZW50YWxBdXRvVmFjdXVtKCkpCisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHR1cm4gb24g
aW5jcmVtZW50YWwgYXV0by12YWN1dW0gZm9yIGRhdGFiYXNlICVzIiwgbV9maWxlbmFtZS5hc2Np
aSgpLmRhdGEoKSk7CisKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1f
c3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAg
bV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChtYXhTcWxpdGVCdXN5V2FpdFRpbWUpOwor
CisgICAgU3RyaW5nIGN1cnJlbnRWZXJzaW9uOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKGd1aWRNdXRleCgpKTsKKworICAgICAgICBHdWlkVmVyc2lvbk1hcDo6aXRlcmF0b3Ig
ZW50cnkgPSBndWlkVG9WZXJzaW9uTWFwKCkuZmluZChtX2d1aWQpOworICAgICAgICBpZiAoZW50
cnkgIT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmVuZCgpKSB7CisgICAgICAgICAgICAvLyBNYXAgbnVs
bCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgdXBkYXRlR3VpZFZlcnNpb25NYXAoKSkuCisg
ICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT5zZWNvbmQuaXNOdWxsKCkgPyBTdHJp
bmcoIiIpIDogZW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQ3Vy
cmVudCBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSBpcyAlcyIsIG1fZ3VpZCwgY3VycmVudFZl
cnNpb24uYXNjaWkoKS5kYXRhKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTE9H
KFN0b3JhZ2VBUEksICJObyBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSIsIG1fZ3VpZCk7CisK
KyAgICAgICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50YWJsZUV4aXN0cyhkYXRhYmFzZUlu
Zm9UYWJsZU5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBtX25ldyA9IHRydWU7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBU
QUJMRSAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIChrZXkgVEVYVCBOT1QgTlVMTCBP
TiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLHZhbHVlIFRFWFQgTk9U
IE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gY3JlYXRlIHRhYmxlICVzIGluIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VJ
bmZvVGFibGVOYW1lKCkuYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWko
KS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwor
ICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBm
aWxlLgorICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShjdXJyZW50
VmVyc2lvbikpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgY3Vy
cmVudCB2ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAg
ICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCisg
ICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdXJyZW50VmVy
c2lvbi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiUmV0cmll
dmVkIGN1cnJlbnQgdmVyc2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzIiwgY3VycmVudFZlcnNpb24u
YXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICAgICAgfSBlbHNlIGlmICghbV9uZXcgfHwgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJh
c2UpIHsKKyAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNldHRpbmcgdmVyc2lvbiAl
cyBpbiBkYXRhYmFzZSAlcyB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQiLCBtX2V4cGVjdGVkVmVyc2lv
bi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRhYmFzZShtX2V4cGVjdGVkVmVyc2lv
bikpIHsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHZlcnNp
b24gJXMgaW4gZGF0YWJhc2UgJXMiLCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwg
ZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHRo
ZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIG1fc3Fs
aXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IG1fZXhw
ZWN0ZWRWZXJzaW9uOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVHdWlkVmVy
c2lvbk1hcChtX2d1aWQsIGN1cnJlbnRWZXJzaW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChjdXJyZW50VmVyc2lvbi5pc051bGwoKSkgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwg
IkRhdGFiYXNlICVzIGRvZXMgbm90IGhhdmUgaXRzIHZlcnNpb24gc2V0IiwgZGF0YWJhc2VEZWJ1
Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gIiI7Cisg
ICAgfQorCisgICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXNuJ3QgdGhlIGVtcHR5IHN0
cmluZywgZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGF0YWJhc2UgdmVyc2lvbiB3ZSBoYXZlIG1h
dGNoZXMgdGhhdCB2ZXJzaW9uLiBPdGhlcndpc2UsIHNldCBhbiBleGNlcHRpb24uCisgICAgLy8g
SWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiB3ZSBhbHdh
eXMgcmV0dXJuIHdpdGggd2hhdGV2ZXIgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2Ugd2UgaGF2ZS4K
KyAgICBpZiAoKCFtX25ldyB8fCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkgJiYgbV9l
eHBlY3RlZFZlcnNpb24ubGVuZ3RoKCkgJiYgbV9leHBlY3RlZFZlcnNpb24gIT0gY3VycmVudFZl
cnNpb24pIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJwYWdlIGV4cGVjdHMgdmVyc2lvbiAl
cyBmcm9tIGRhdGFiYXNlICVzLCB3aGljaCBhY3R1YWxseSBoYXMgdmVyc2lvbiBuYW1lICVzIC0g
b3BlbkRhdGFiYXNlKCkgY2FsbCB3aWxsIGZhaWwiLCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgp
LmRhdGEoKSwKKyAgICAgICAgICAgIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCks
IGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKKyAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmls
ZS4KKyAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgbV9vcGVuZWQgPSB0cnVlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEFic3RyYWN0RGF0YWJhc2U6OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuZ2V0KCk7Cit9CisKK1NlY3VyaXR5T3JpZ2luKiBBYnN0cmFjdERhdGFiYXNlOjpzZWN1cml0
eU9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3Jp
Z2luLmdldCgpOworfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6c3RyaW5nSWRlbnRpZmll
cigpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcg
dGhyZWFkIHNhZmV0eQorICAgIHJldHVybiBtX25hbWUudGhyZWFkc2FmZUNvcHkoKTsKK30KKwor
U3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OmRpc3BsYXlOYW1lKCkgY29uc3QKK3sKKyAgICAvLyBS
ZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5CisgICAgcmV0
dXJuIG1fZGlzcGxheU5hbWUudGhyZWFkc2FmZUNvcHkoKTsKK30KKwordW5zaWduZWQgbG9uZyBB
YnN0cmFjdERhdGFiYXNlOjplc3RpbWF0ZWRTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9l
c3RpbWF0ZWRTaXplOworfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6ZmlsZU5hbWUoKSBj
b25zdAoreworICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVh
ZCBzYWZldHkKKyAgICByZXR1cm4gbV9maWxlbmFtZS50aHJlYWRzYWZlQ29weSgpOworfQorCisv
LyBzdGF0aWMKK2NvbnN0IFN0cmluZyYgQWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VWZXJzaW9u
S2V5KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywga2V5LCAoIldlYktpdERh
dGFiYXNlVmVyc2lvbktleSIpKTsKKyAgICByZXR1cm4ga2V5OworfQorCitib29sIEFic3RyYWN0
RGF0YWJhc2U6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBnZXRWZXJzaW9uUXVlcnksICgiU0VMRUNUIHZh
bHVlIEZST00gIiArIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiBXSEVSRSBrZXkgPSAnIiAr
IGRhdGFiYXNlVmVyc2lvbktleSgpICsgIic7IikpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6
ZXItPmRpc2FibGUoKTsKKworICAgIGJvb2wgcmVzdWx0ID0gcmV0cmlldmVUZXh0UmVzdWx0RnJv
bURhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIGdldFZlcnNpb25RdWVyeS50aHJlYWRzYWZlQ29w
eSgpLCB2ZXJzaW9uKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gcmV0cmlldmUgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05h
bWUoKS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxl
KCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6OnNl
dFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICAvLyBUaGUg
SU5TRVJUIHdpbGwgcmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeSBmb3IgdGhlIGRhdGFiYXNlIHdp
dGggdGhlIG5ldyB2ZXJzaW9uIG51bWJlciwgZHVlIHRvIHRoZSBVTklRVUUgT04gQ09ORkxJQ1Qg
UkVQTEFDRQorICAgIC8vIGNsYXVzZSBpbiB0aGUgQ1JFQVRFIHN0YXRlbWVudCAoc2VlIERhdGFi
YXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSgpKS4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywgc2V0VmVyc2lvblF1ZXJ5LCAoIklOU0VSVCBJTlRPICIgKyBkYXRhYmFzZUluZm9UYWJs
ZU5hbWUoKSArICIgKGtleSwgdmFsdWUpIFZBTFVFUyAoJyIgKyBkYXRhYmFzZVZlcnNpb25LZXko
KSArICInLCA/KTsiKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwor
CisgICAgYm9vbCByZXN1bHQgPSBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKG1fc3FsaXRlRGF0YWJh
c2UsIHNldFZlcnNpb25RdWVyeS50aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKKyAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4g
ZGF0YWJhc2UgKCVzKSIsIHZlcnNpb24uYXNjaWkoKS5kYXRhKCksIHNldFZlcnNpb25RdWVyeS5h
c2NpaSgpLmRhdGEoKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6OnZlcnNpb25N
YXRjaGVzRXhwZWN0ZWQoKSBjb25zdAoreworICAgIGlmICghbV9leHBlY3RlZFZlcnNpb24uaXNF
bXB0eSgpKSB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAg
ICAgIHJldHVybiBtX2V4cGVjdGVkVmVyc2lvbiA9PSBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1f
Z3VpZCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRh
YmFzZTo6c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICBt
X2V4cGVjdGVkVmVyc2lvbiA9IHZlcnNpb24udGhyZWFkc2FmZUNvcHkoKTsKKyAgICAvLyBVcGRh
dGUgdGhlIGluIG1lbW9yeSBkYXRhYmFzZSB2ZXJzaW9uIG1hcC4KKyAgICBNdXRleExvY2tlciBs
b2NrZXIoZ3VpZE11dGV4KCkpOworICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgdmVy
c2lvbik7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6ZGlzYWJsZUF1dGhvcml6ZXIoKQor
eworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFzZUF1dGhv
cml6ZXItPmRpc2FibGUoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjplbmFibGVBdXRo
b3JpemVyKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0
YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpz
ZXRBdXRob3JpemVyUmVhZE9ubHkoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXpl
cik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFJlYWRPbmx5KCk7Cit9CisKK2Jvb2wg
QWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCit7CisgICAgQVNT
RVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6
ZXItPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFi
YXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0KCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhv
cml6ZXIpOworICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbldhc0lu
c2VydCgpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlc2V0RGVsZXRlcygpCit7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXpl
ci0+cmVzZXREZWxldGVzKCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6aGFkRGVsZXRl
cygpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9k
YXRhYmFzZUF1dGhvcml6ZXItPmhhZERlbGV0ZXMoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFi
YXNlOjpyZXNldEF1dGhvcml6ZXIoKQoreworICAgIGlmIChtX2RhdGFiYXNlQXV0aG9yaXplcikK
KyAgICAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L0Fic3RyYWN0RGF0YWJhc2UuaAkocmV2aXNpb24gNjE4MDMpCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
QWJzdHJhY3REYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMyArMzIsMjEgQEAKICNp
ZiBFTkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgorI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRGF0
YWJhc2VBdXRob3JpemVyOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNl
Y3VyaXR5T3JpZ2luOwogCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCiBjbGFzcyBBYnN0
cmFjdERhdGFiYXNlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8QWJzdHJhY3REYXRhYmFzZT4g
ewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CkBAIC00NiwxNSArNTQs
NjkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+QWJzdHJhY3REYXRhYmFzZSgpOwogCi0gICAg
dmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0lkZW50aWZpZXIoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lv
bigpIGNvbnN0OworCisgICAgYm9vbCBvcGVuZWQoKSBjb25zdCB7IHJldHVybiBtX29wZW5lZDsg
fQorICAgIGJvb2wgaXNOZXcoKSBjb25zdCB7IHJldHVybiBtX25ldzsgfQorCisgICAgdmlydHVh
bCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBT
dHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0
aW1hdGVkU2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7
CisKKyAgICAvLyBGSVhNRTogbW92ZSBhbGwgdmVyc2lvbi1yZWxhdGVkIG1ldGhvZHMgdG8gYSBE
YXRhYmFzZVZlcnNpb25UcmFja2VyIGNsYXNzCisgICAgYm9vbCB2ZXJzaW9uTWF0Y2hlc0V4cGVj
dGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJiB2
ZXJzaW9uKTsKKyAgICBib29sIGdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9u
KTsKKyAgICBib29sIHNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbik7
CisKKyAgICB2b2lkIGRpc2FibGVBdXRob3JpemVyKCk7CisgICAgdm9pZCBlbmFibGVBdXRob3Jp
emVyKCk7CisgICAgdm9pZCBzZXRBdXRob3JpemVyUmVhZE9ubHkoKTsKKyAgICBib29sIGxhc3RB
Y3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKKyAgICBib29sIGxhc3RBY3Rpb25XYXNJbnNlcnQoKTsK
KyAgICB2b2lkIHJlc2V0RGVsZXRlcygpOworICAgIGJvb2wgaGFkRGVsZXRlcygpOworICAgIHZv
aWQgcmVzZXRBdXRob3JpemVyKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFu
ZENsb3NlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZUltbWVkaWF0ZWx5KCkgPSAwOwor
Citwcm90ZWN0ZWQ6CisgICAgQWJzdHJhY3REYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSk7CisKKyAgICB2b2lkIGNsb3NlRGF0YWJhc2UoKTsKKworICAgIHZp
cnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlYyk7CisKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKTsKKworICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25D
b250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbjsKKworICAgIFN0cmluZyBtX25hbWU7
CisgICAgU3RyaW5nIG1fZXhwZWN0ZWRWZXJzaW9uOworICAgIFN0cmluZyBtX2Rpc3BsYXlOYW1l
OworICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOworICAgIFN0cmluZyBtX2ZpbGVu
YW1lOworCisgICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFzZTsKKworI2lmbmRlZiBO
REVCVUcKKyAgICBTdHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSArICI6OiIgKyBtX25hbWU7IH0K
KyNlbmRpZgorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFiYXNlVmVy
c2lvbktleSgpOworCisgICAgaW50IG1fZ3VpZDsKKyAgICBib29sIG1fb3BlbmVkOworICAgIGJv
b2wgbV9uZXc7CisKKyAgICBSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVyPiBtX2RhdGFiYXNlQXV0
aG9yaXplcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
LmNwcAkocmV2aXNpb24gNjE4MDMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAj
aW5jbHVkZSAiQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCIKLSNpbmNsdWRlICJEYXRhYmFzZUF1dGhv
cml6ZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRGF0YWJh
c2VUYXNrLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKQEAgLTUwLDcgKzQ5LDYgQEAK
ICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU3RyaW5n
SGFzaC5oIgogI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNjQsODEgKzYyLDI3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gSWYgd2Ugc2xlZXAgZm9yIG1vcmUgdGhlIDMwIHNlY29u
ZHMgd2hpbGUgYmxvY2tlZCBvbiBTUUxJVEVfQlVTWSwgZ2l2ZSB1cC4KLXN0YXRpYyBjb25zdCBp
bnQgbWF4U3FsaXRlQnVzeVdhaXRUaW1lID0gMzAwMDA7Ci0KLWNvbnN0IFN0cmluZyYgRGF0YWJh
c2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIG5hbWUsICgiX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fIikpOwotICAgIHJldHVy
biBuYW1lOwotfQotCi1zdGF0aWMgTXV0ZXgmIGd1aWRNdXRleCgpCi17Ci0gICAgLy8gTm90ZTog
V2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljIGhlcmUgYmVj
YXVzZQotICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgaW4gdGhlIGNvbnN0cnVj
dG9yIG9uIHRoZSBtYWluIHRocmVhZAotICAgIC8vIGJlZm9yZSBhbnkgb3RoZXIgdGhyZWFkcyB0
aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBhcmUgdXNlZC4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KE11dGV4LCBtdXRleCwgKCkpOwotICAgIHJldHVybiBtdXRleDsKLX0KLQotdHlwZWRlZiBIYXNo
TWFwPGludCwgU3RyaW5nPiBHdWlkVmVyc2lvbk1hcDsKLXN0YXRpYyBHdWlkVmVyc2lvbk1hcCYg
Z3VpZFRvVmVyc2lvbk1hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkVmVyc2lv
bk1hcCwgbWFwLCAoKSk7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotLy8gTk9URTogQ2FsbGVyIG11
c3QgbG9jayBndWlkTXV0ZXgoKS4KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVHdWlkVmVyc2lv
bk1hcChpbnQgZ3VpZCwgU3RyaW5nIG5ld1ZlcnNpb24pCi17Ci0gICAgLy8gRW5zdXJlIHRoZSB0
aGUgbXV0ZXggaXMgbG9ja2VkLgotICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9jaygpKTsK
LQotICAgIC8vIE5vdGU6IEl0IGlzIG5vdCBzYWZlIHRvIHB1dCBhbiBlbXB0eSBzdHJpbmcgaW50
byB0aGUgZ3VpZFRvVmVyc2lvbk1hcCgpIG1hcC4KLSAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGUg
bWFwIGlzIGNyb3NzLXRocmVhZCwgYnV0IGVtcHR5IHN0cmluZ3MgYXJlIHBlci10aHJlYWQuCi0g
ICAgLy8gVGhlIGNvcHkoKSBmdW5jdGlvbiBtYWtlcyBhIHZlcnNpb24gb2YgdGhlIHN0cmluZyB5
b3UgY2FuIHVzZSBvbiB0aGUgY3VycmVudAotICAgIC8vIHRocmVhZCwgYnV0IHdlIG5lZWQgYSBz
dHJpbmcgd2UgY2FuIGtlZXAgaW4gYSBjcm9zcy10aHJlYWQgZGF0YSBzdHJ1Y3R1cmUuCi0gICAg
Ly8gRklYTUU6IFRoaXMgaXMgYSBxdWl0ZS1hd2t3YXJkIHJlc3RyaWN0aW9uIHRvIGhhdmUgdG8g
cHJvZ3JhbSB3aXRoLgotCi0gICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAo
c2VlIGNvbW1lbnQgYWJvdmUpLgotICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5zZXQoZ3VpZCwgbmV3
VmVyc2lvbi5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IG5ld1ZlcnNpb24udGhyZWFkc2FmZUNvcHko
KSk7Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxpbnQsIEhhc2hTZXQ8RGF0YWJhc2UqPio+IEd1aWRE
YXRhYmFzZU1hcDsKLXN0YXRpYyBHdWlkRGF0YWJhc2VNYXAmIGd1aWRUb0RhdGFiYXNlTWFwKCkK
LXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWREYXRhYmFzZU1hcCwgbWFwLCAoKSk7Ci0g
ICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VWZXJzaW9u
S2V5KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywga2V5LCAoIldlYktpdERh
dGFiYXNlVmVyc2lvbktleSIpKTsKLSAgICByZXR1cm4ga2V5OwotfQotCi1zdGF0aWMgaW50IGd1
aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5h
bWUpOwotCiBjbGFzcyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIDogcHVibGljIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNl
PiBkYXRhYmFzZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZUNyZWF0aW9uQ2FsbGJh
Y2tUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVy
biBuZXcgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayhkYXRhYmFzZSk7CisgICAgICAgIHJl
dHVybiBuZXcgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayhkYXRhYmFzZSwgY3JlYXRpb25D
YWxsYmFjayk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+cGVyZm9y
bUNyZWF0aW9uQ2FsbGJhY2soKTsKKyAgICAgICAgbV9jcmVhdGlvbkNhbGxiYWNrLT5oYW5kbGVF
dmVudChjb250ZXh0LCBtX2RhdGFiYXNlLmdldCgpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFz
ZSkKKyAgICBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+
IGRhdGFiYXNlLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNhbGxiYWNrKQogICAgICAg
ICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9jcmVhdGlvbkNhbGxiYWNrKGNh
bGxiYWNrKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7
CisgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IG1fY3JlYXRpb25DYWxsYmFjazsKIH07CiAK
IFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLApAQCAtMTQ3LDE0ICs5MSwx
MyBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZTo6b3BlbkRhdGFiCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGUpCiB7CiAg
ICAgaWYgKCFEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShj
b250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpIHsKLSAgICAgICAgLy8g
RklYTUU6IFRoZXJlIHNob3VsZCBiZSBhbiBleGNlcHRpb24gcmFpc2VkIGhlcmUgaW4gYWRkaXRp
b24gdG8gcmV0dXJuaW5nIGEgbnVsbCBEYXRhYmFzZSBvYmplY3QuICBUaGUgcXVlc3Rpb24gaGFz
IGJlZW4gcmFpc2VkIHdpdGggdGhlIFdIQVRXRy4KICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJE
YXRhYmFzZSAlcyBmb3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwg
bmFtZS5hc2NpaSgpLmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0
cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2UoY29udGV4dCwgbmFt
ZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25D
YWxsYmFjaykpOworICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcg
RGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSkpOwogCi0gICAgaWYgKCFkYXRhYmFzZS0+b3BlbkFuZFZlcmlmeVZlcnNpb24o
ZSkpIHsKKyAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbighY3JlYXRpb25D
YWxsYmFjaywgZSkpIHsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJGYWlsZWQgdG8gb3BlbiBh
bmQgdmVyaWZ5IHZlcnNpb24gKGV4cGVjdGVkICVzKSBvZiBkYXRhYmFzZSAlcyIsIGV4cGVjdGVk
VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UtPmRhdGFiYXNlRGVidWdOYW1lKCkuYXNj
aWkoKS5kYXRhKCkpOwogICAgICAgICBjb250ZXh0LT5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJh
c2UuZ2V0KCkpOwogICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVu
RGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOwpAQCAtMTc2LDU3ICsxMTksMjggQEAgUGFzc1JlZlB0
cjxEYXRhYmFzZT4gRGF0YWJhc2U6Om9wZW5EYXRhYgogICAgIC8vIHZlcnNpb24gdG8gIiIgYW5k
IHNjaGVkdWxlIHRoZSBjcmVhdGlvbiBjYWxsYmFjay4gQmVjYXVzZSBvZiBzb21lIHN1YnRsZSBT
dHJpbmcKICAgICAvLyBpbXBsZW1lbnRhdGlvbiBpc3N1ZXMsIHdlIGhhdmUgdG8gcmVzZXQgbV9l
eHBlY3RlZFZlcnNpb24gaGVyZSBpbnN0ZWFkIG9mIGRvaW5nCiAgICAgLy8gaXQgaW5zaWRlIHBl
cmZvcm1PcGVuQW5kVmVyaWZ5KCkgd2hpY2ggaXMgcnVuIG9uIHRoZSBEQiB0aHJlYWQuCi0gICAg
aWYgKGRhdGFiYXNlLT5pc05ldygpICYmIGRhdGFiYXNlLT5tX2NyZWF0aW9uQ2FsbGJhY2suZ2V0
KCkpIHsKKyAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQo
KSkgewogICAgICAgICBkYXRhYmFzZS0+bV9leHBlY3RlZFZlcnNpb24gPSAiIjsKICAgICAgICAg
TE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2sg
Zm9yIGRhdGFiYXNlICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAgIGRhdGFiYXNlLT5t
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKERhdGFiYXNlQ3JlYXRpb25DYWxsYmFj
a1Rhc2s6OmNyZWF0ZShkYXRhYmFzZSkpOworICAgICAgICBkYXRhYmFzZS0+bV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5wb3N0VGFzayhEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrOjpjcmVh
dGUoZGF0YWJhc2UsIGNyZWF0aW9uQ2FsbGJhY2spKTsKICAgICB9CiAKICAgICByZXR1cm4gZGF0
YWJhc2U7CiB9CiAKLURhdGFiYXNlOjpEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9u
LCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUs
IFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaykKLSAgICA6IG1f
dHJhbnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQorRGF0YWJhc2U6OkRhdGFiYXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSkKKyAgICA6IEFic3RyYWN0RGF0YWJhc2UoY29udGV4dCwgbmFtZSwg
ZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkKKyAgICAsIG1fdHJh
bnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQogICAgICwgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFi
bGVkKHRydWUpCi0gICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKLSAgICAs
IG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX2d1aWQoMCkKLSAgICAs
IG1fZXhwZWN0ZWRWZXJzaW9uKGV4cGVjdGVkVmVyc2lvbi5jcm9zc1RocmVhZFN0cmluZygpKQot
ICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQotICAg
ICwgbV9lc3RpbWF0ZWRTaXplKGVzdGltYXRlZFNpemUpCiAgICAgLCBtX2RlbGV0ZWQoZmFsc2Up
CiAgICAgLCBtX3N0b3BwZWQoZmFsc2UpCi0gICAgLCBtX29wZW5lZChmYWxzZSkKLSAgICAsIG1f
bmV3KGZhbHNlKQotICAgICwgbV9jcmVhdGlvbkNhbGxiYWNrKGNyZWF0aW9uQ2FsbGJhY2spCiB7
Ci0gICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSk7Ci0gICAgbV9jb250
ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3Vy
aXR5T3JpZ2luKCk7CiAgICAgbV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9jb250
ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4tPnRocmVhZHNhZmVDb3B5KCk7Ci0gICAgaWYgKG1fbmFt
ZS5pc051bGwoKSkKLSAgICAgICAgbV9uYW1lID0gIiI7CiAKICAgICBTY3JpcHRDb250cm9sbGVy
Ojppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0KLSAgICBtX2d1aWQgPSBndWlkRm9yT3JpZ2luQW5k
TmFtZShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBuYW1lKTsKLQotICAgIHsKLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLQotICAgICAgICBIYXNoU2V0PERh
dGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmdldChtX2d1aWQpOwotICAg
ICAgICBpZiAoIWhhc2hTZXQpIHsKLSAgICAgICAgICAgIGhhc2hTZXQgPSBuZXcgSGFzaFNldDxE
YXRhYmFzZSo+OwotICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VNYXAoKS5zZXQobV9ndWlkLCBo
YXNoU2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGhhc2hTZXQtPmFkZCh0aGlzKTsKLSAgICB9
Ci0KICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgp
KTsKLSAgICBtX2ZpbGVuYW1lID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZnVsbFBhdGhG
b3JEYXRhYmFzZShzZWN1cml0eU9yaWdpbigpLCBtX25hbWUpOwogCi0gICAgRGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkuYWRkT3BlbkRhdGFiYXNlKHRoaXMpOwotICAgIGNvbnRleHQtPmFkZE9w
ZW5EYXRhYmFzZSh0aGlzKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZE9wZW5E
YXRhYmFzZSh0aGlzKTsKIH0KIAogY2xhc3MgRGVyZWZDb250ZXh0VGFzayA6IHB1YmxpYyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKQEAgLTI1MywxNSArMTY3LDIxIEBAIERhdGFiYXNl
Ojp+RGF0YWJhc2UoKQogICAgIH0KIH0KIAotYm9vbCBEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZl
cnNpb24oRXhjZXB0aW9uQ29kZSYgZSkKK1N0cmluZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0
Cit7CisgICAgaWYgKG1fZGVsZXRlZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJl
dHVybiBBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9uKCk7Cit9CisKK2Jvb2wgRGF0YWJhc2U6Om9w
ZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlv
bkNvZGUmIGUpCiB7CiAgICAgaWYgKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNl
VGhyZWFkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXpl
ciA9IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlKCk7CiAKICAgICBib29sIHN1Y2Nlc3MgPSBm
YWxzZTsKICAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgc3luY2hyb25pemVyOwotICAgIE93
blB0cjxEYXRhYmFzZU9wZW5UYXNrPiB0YXNrID0gRGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRo
aXMsICZzeW5jaHJvbml6ZXIsIGUsIHN1Y2Nlc3MpOworICAgIE93blB0cjxEYXRhYmFzZU9wZW5U
YXNrPiB0YXNrID0gRGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRoaXMsIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCAmc3luY2hyb25pemVyLCBlLCBzdWNjZXNzKTsKIAogICAgIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRh
c2sucmVsZWFzZSgpKTsKICAgICBzeW5jaHJvbml6ZXIud2FpdEZvclRhc2tDb21wbGV0aW9uKCk7
CkBAIC0yNjksOTMgKzE4OSw2IEBAIGJvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9u
KEV4Y2UKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAotCi1zdGF0aWMgYm9vbCByZXRyaWV2ZVRl
eHRSZXN1bHRGcm9tRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1
ZXJ5LCBTdHJpbmcmIHJlc3VsdFN0cmluZykKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KGRiLCBxdWVyeSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0K
LSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiRXJy
b3IgKCVpKSBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCByZXN1bHQgZnJvbSBkYXRh
YmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlm
IChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2Ug
aWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IFN0
cmluZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBMT0df
RVJST1IoIkVycm9yICglaSkgcmVhZGluZyB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcyki
LCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotYm9vbCBEYXRhYmFzZTo6Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcm
IHZlcnNpb24pCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGdldFZlcnNpb25R
dWVyeSwgKCJTRUxFQ1QgdmFsdWUgRlJPTSAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAi
IFdIRVJFIGtleSA9ICciICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAiJzsiKSk7Ci0KLSAgICBt
X2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwotCi0gICAgYm9vbCByZXN1bHQgPSByZXRy
aWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgZ2V0VmVyc2lvblF1
ZXJ5LnRocmVhZHNhZmVDb3B5KCksIHZlcnNpb24pOwotICAgIGlmICghcmVzdWx0KQotICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSB2ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMi
LCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLQotICAgIG1fZGF0YWJhc2VB
dXRob3JpemVyLT5lbmFibGUoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBi
b29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUo
KTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICgl
cykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgdmFsdWUpOwotCi0gICAgcmVzdWx0ID0gc3Rh
dGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3RlcCBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRh
dGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6c2V0VmVy
c2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIC8vIFRoZSBJTlNF
UlQgd2lsbCByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5IGZvciB0aGUgZGF0YWJhc2Ugd2l0aCB0
aGUgbmV3IHZlcnNpb24gbnVtYmVyLCBkdWUgdG8gdGhlIFVOSVFVRSBPTiBDT05GTElDVCBSRVBM
QUNFCi0gICAgLy8gY2xhdXNlIGluIHRoZSBDUkVBVEUgc3RhdGVtZW50IChzZWUgRGF0YWJhc2U6
OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkpLgotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBzZXRWZXJzaW9uUXVlcnksICgiSU5TRVJUIElOVE8gIiArIGRhdGFiYXNlSW5mb1RhYmxlTmFt
ZSgpICsgIiAoa2V5LCB2YWx1ZSkgVkFMVUVTICgnIiArIGRhdGFiYXNlVmVyc2lvbktleSgpICsg
IicsID8pOyIpKTsKLQotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7Ci0KLSAg
ICBib29sIHJlc3VsdCA9IHNldFRleHRWYWx1ZUluRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwg
c2V0VmVyc2lvblF1ZXJ5LnRocmVhZHNhZmVDb3B5KCksIHZlcnNpb24pOwotICAgIGlmICghcmVz
dWx0KQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdmVyc2lvbiAlcyBpbiBkYXRh
YmFzZSAoJXMpIiwgdmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgc2V0VmVyc2lvblF1ZXJ5LmFzY2lp
KCkuZGF0YSgpKTsKLQotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgRGF0YWJhc2U6OnZlcnNpb25NYXRjaGVzRXhwZWN0
ZWQoKSBjb25zdAotewotICAgIGlmICghbV9leHBlY3RlZFZlcnNpb24uaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgICAgIHJldHVybiBt
X2V4cGVjdGVkVmVyc2lvbiA9PSBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRB
bmRDbG9zZSgpCiB7CiAgICAgaWYgKG1fZGVsZXRlZCB8fCAhbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5kYXRhYmFzZVRocmVhZCgpKQpAQCAtNDEwLDMwICsyNDMsMTMgQEAgdm9pZCBEYXRhYmFz
ZTo6Y2xvc2UoQ2xvc2VQb2xpY3kgcG9saWN5KQogewogICAgIFJlZlB0cjxEYXRhYmFzZT4gcHJv
dGVjdCA9IHRoaXM7CiAKLSAgICBpZiAoIW1fb3BlbmVkKQotICAgICAgICByZXR1cm47Ci0KICAg
ICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKTsKICAg
ICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0
YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7Ci0gICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9z
ZSgpOwotICAgIC8vIE11c3QgcmVmKCkgYmVmb3JlIGNhbGxpbmcgZGF0YWJhc2VUaHJlYWQoKS0+
cmVjb3JkRGF0YWJhc2VDbG9zZWQoKS4KLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRh
dGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKHRoaXMpOwotICAgIG1fb3BlbmVk
ID0gZmFsc2U7CiAKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgo
KSk7Ci0KLSAgICAgICAgSGFzaFNldDxEYXRhYmFzZSo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJh
c2VNYXAoKS5nZXQobV9ndWlkKTsKLSAgICAgICAgQVNTRVJUKGhhc2hTZXQpOwotICAgICAgICBB
U1NFUlQoaGFzaFNldC0+Y29udGFpbnModGhpcykpOwotICAgICAgICBoYXNoU2V0LT5yZW1vdmUo
dGhpcyk7Ci0gICAgICAgIGlmIChoYXNoU2V0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGd1
aWRUb0RhdGFiYXNlTWFwKCkucmVtb3ZlKG1fZ3VpZCk7Ci0gICAgICAgICAgICBkZWxldGUgaGFz
aFNldDsKLSAgICAgICAgICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5yZW1vdmUobV9ndWlkKTsKLSAg
ICAgICAgfQotICAgIH0KKyAgICBjbG9zZURhdGFiYXNlKCk7CiAKKyAgICAvLyBNdXN0IHJlZigp
IGJlZm9yZSBjYWxsaW5nIGRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKCku
CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmRE
YXRhYmFzZUNsb3NlZCh0aGlzKTsKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFi
YXNlVGhyZWFkKCktPnVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKHRoaXMpOwogICAgIGlmIChwb2xp
Y3kgPT0gUmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCkKICAgICAgICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5wb3N0VGFzayhDb250ZXh0UmVtb3ZlT3BlbkRhdGFiYXNlVGFzazo6Y3JlYXRl
KHRoaXMpKTsKQEAgLTQ3MCw3OSArMjg2LDYgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNl
OjptYXhpbXVtU2l6ZQogICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5nZXRN
YXhTaXplRm9yRGF0YWJhc2UodGhpcyk7CiB9CiAKLXZvaWQgRGF0YWJhc2U6OmRpc2FibGVBdXRo
b3JpemVyKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fZGF0
YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2U6OmVuYWJsZUF1
dGhvcml6ZXIoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9k
YXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOwotfQotCi12b2lkIERhdGFiYXNlOjpzZXRBdXRo
b3JpemVyUmVhZE9ubHkoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0g
ICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFJlYWRPbmx5KCk7Ci19Ci0KLWJvb2wgRGF0YWJh
c2U6Omxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNl
QXV0aG9yaXplcik7Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlKCk7Ci19Ci0KLWJvb2wgRGF0YWJhc2U6Omxhc3RBY3Rpb25XYXNJbnNl
cnQoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgcmV0dXJuIG1f
ZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9uV2FzSW5zZXJ0KCk7Ci19Ci0KLXZvaWQgRGF0
YWJhc2U6OnJlc2V0RGVsZXRlcygpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVy
KTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXREZWxldGVzKCk7Ci19Ci0KLWJvb2wg
RGF0YWJhc2U6OmhhZERlbGV0ZXMoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXpl
cik7Ci0gICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5oYWREZWxldGVzKCk7Ci19Ci0K
LXN0YXRpYyBpbnQgZ3VpZEZvck9yaWdpbkFuZE5hbWUoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBTdHJpbmcgc3RyaW5nSUQ7Ci0gICAgaWYgKG9yaWdp
bi5lbmRzV2l0aCgiLyIpKQotICAgICAgICBzdHJpbmdJRCA9IG9yaWdpbiArIG5hbWU7Ci0gICAg
ZWxzZQotICAgICAgICBzdHJpbmdJRCA9IG9yaWdpbiArICIvIiArIG5hbWU7Ci0KLSAgICAvLyBO
b3RlOiBXZSBkb24ndCBoYXZlIHRvIHVzZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMgaGVy
ZSBiZWNhdXNlCi0gICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBpbiB0aGUgY29u
c3RydWN0b3Igb24gdGhlIG1haW4gdGhyZWFkCi0gICAgLy8gYmVmb3JlIGFueSBvdGhlciB0aHJl
YWRzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uIGFyZSB1c2VkLgotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoTXV0ZXgsIHN0cmluZ0lkZW50aWZpZXJNdXRleCwgKCkpOwotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihzdHJpbmdJZGVudGlmaWVyTXV0ZXgpOwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIGludD4gSURHdWlkTWFwOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSURHdWlkTWFwLCBz
dHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLCAoKSk7Ci0gICAgaW50IGd1aWQgPSBzdHJpbmdJZGVu
dGlmaWVyVG9HVUlETWFwLmdldChzdHJpbmdJRCk7Ci0gICAgaWYgKCFndWlkKSB7Ci0gICAgICAg
IHN0YXRpYyBpbnQgY3VycmVudE5ld0dVSUQgPSAxOwotICAgICAgICBndWlkID0gY3VycmVudE5l
d0dVSUQrKzsKLSAgICAgICAgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcC5zZXQoc3RyaW5nSUQs
IGd1aWQpOwotICAgIH0KLQotICAgIHJldHVybiBndWlkOwotfQotCi12b2lkIERhdGFiYXNlOjpy
ZXNldEF1dGhvcml6ZXIoKQotewotICAgIGlmIChtX2RhdGFiYXNlQXV0aG9yaXplcikKLSAgICAg
ICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7Ci19Ci0KIHZvaWQgRGF0YWJhc2U6OnBl
cmZvcm1Qb2xpY3lDaGVja3MoKQogewogICAgIC8vIEZJWE1FOiBDb2RlIHNpbWlsYXIgdG8gdGhl
IGZvbGxvd2luZyB3aWxsIG5lZWQgdG8gYmUgcnVuIHRvIGVuZm9yY2UgdGhlIHBlci1vcmlnaW4g
c2l6ZSBsaW1pdCB0aGUgc3BlYyBtYW5kYXRlcy4KQEAgLTU1Nyw5MiArMzAwLDE2IEBAIHZvaWQg
RGF0YWJhc2U6OnBlcmZvcm1Qb2xpY3lDaGVja3MoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLWJvb2wgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KEV4Y2VwdGlvbkNvZGUmIGUp
Citib29sIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlKQogewotICAgIGlmICghbV9zcWxpdGVEYXRhYmFz
ZS5vcGVuKG1fZmlsZW5hbWUsIHRydWUpKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IG9wZW4gZGF0YWJhc2UgYXQgcGF0aCAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCkpOwot
ICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1
bSgpKQotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVudGFsIGF1
dG8tdmFjdXVtIGZvciBkYXRhYmFzZSAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCkpOwor
ICAgIGlmIChBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9u
SW5OZXdEYXRhYmFzZSwgZSkpIHsKKyAgICAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+ZGF0YWJhc2VUaHJlYWQoKSkKKyAgICAgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VPcGVuKHRoaXMpOwogCi0gICAgQVNT
RVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEF1dGhv
cml6ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVz
eVRpbWVvdXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKLQotICAgIFN0cmluZyBjdXJyZW50VmVy
c2lvbjsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0K
LSAgICAgICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1h
cCgpLmZpbmQobV9ndWlkKTsKLSAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAo
KS5lbmQoKSkgewotICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmlu
ZyAoc2VlIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgotICAgICAgICAgICAgY3VycmVudFZlcnNp
b24gPSBlbnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQ7
Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9y
IGd1aWQgJWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiTm8gY2FjaGVk
IHZlcnNpb24gZm9yIGd1aWQgJWkiLCBtX2d1aWQpOwotCi0gICAgICAgICAgICBpZiAoIW1fc3Fs
aXRlRGF0YWJhc2UudGFibGVFeGlzdHMoZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKSB7Ci0gICAg
ICAgICAgICAgICAgbV9uZXcgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKCFtX3NxbGl0
ZURhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgIiArIGRhdGFiYXNlSW5mb1Rh
YmxlTmFtZSgpICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUg
T04gQ09ORkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwp
OyIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSB0
YWJsZSAlcyBpbiBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpLmFzY2lpKCku
ZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAgICAgICAvLyBD
bG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgICAgICAgICAgICAgICAg
ICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShjdXJyZW50VmVyc2lvbikpIHsKLSAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgY3VycmVudCB2ZXJzaW9uIGZyb20gZGF0YWJh
c2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAg
ICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhl
IGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KLSAgICAgICAgICAgICAgICBtX3NxbGl0ZURh
dGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGN1cnJlbnRWZXJzaW9uLmxlbmd0aCgpKSB7Ci0gICAgICAg
ICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJSZXRyaWV2ZWQgY3VycmVudCB2ZXJzaW9uICVzIGZy
b20gZGF0YWJhc2UgJXMiLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VE
ZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFtX25l
dyB8fCAhbV9jcmVhdGlvbkNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgTE9HKFN0b3JhZ2VB
UEksICJTZXR0aW5nIHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMgdGhhdCB3YXMganVzdCBjcmVh
dGVkIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1l
KCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIGlmICghc2V0VmVyc2lvbkluRGF0
YWJhc2UobV9leHBlY3RlZFZlcnNpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICVzIiwgbV9leHBlY3RlZFZl
cnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkp
OwotICAgICAgICAgICAgICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCi0gICAg
ICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBj
dXJyZW50VmVyc2lvbiA9IG1fZXhwZWN0ZWRWZXJzaW9uOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIGN1cnJlbnRWZXJzaW9uKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChjdXJyZW50VmVyc2lvbi5pc051bGwoKSkgewotICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGRvZXMgbm90IGhhdmUgaXRzIHZlcnNp
b24gc2V0IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGN1
cnJlbnRWZXJzaW9uID0gIiI7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNp
b24gaXNuJ3QgdGhlIGVtcHR5IHN0cmluZywgZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGF0YWJh
c2UgdmVyc2lvbiB3ZSBoYXZlIG1hdGNoZXMgdGhhdCB2ZXJzaW9uLiBPdGhlcndpc2UsIHNldCBh
biBleGNlcHRpb24uCi0gICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXMgdGhlIGVtcHR5
IHN0cmluZywgdGhlbiB3ZSBhbHdheXMgcmV0dXJuIHdpdGggd2hhdGV2ZXIgdmVyc2lvbiBvZiB0
aGUgZGF0YWJhc2Ugd2UgaGF2ZS4KLSAgICBpZiAoKCFtX25ldyB8fCAhbV9jcmVhdGlvbkNhbGxi
YWNrKSAmJiBtX2V4cGVjdGVkVmVyc2lvbi5sZW5ndGgoKSAmJiBtX2V4cGVjdGVkVmVyc2lvbiAh
PSBjdXJyZW50VmVyc2lvbikgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgInBhZ2UgZXhwZWN0
cyB2ZXJzaW9uICVzIGZyb20gZGF0YWJhc2UgJXMsIHdoaWNoIGFjdHVhbGx5IGhhcyB2ZXJzaW9u
IG5hbWUgJXMgLSBvcGVuRGF0YWJhc2UoKSBjYWxsIHdpbGwgZmFpbCIsIG1fZXhwZWN0ZWRWZXJz
aW9uLmFzY2lpKCkuZGF0YSgpLAotICAgICAgICAgICAgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2Np
aSgpLmRhdGEoKSwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBlID0g
SU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRh
dGFiYXNlIGZpbGUuCi0gICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICAvLyBBbGwg
Y2hlY2tzIHBhc3NlZCBhbmQgd2Ugc3RpbGwgaGF2ZSBhIGhhbmRsZSB0byB0aGlzIGRhdGFiYXNl
IGZpbGUuCi0gICAgLy8gTWFrZSBzdXJlIERhdGFiYXNlVGhyZWFkIGNsb3NlcyBpdCB3aGVuIERh
dGFiYXNlVGhyZWFkIGdvZXMgYXdheS4KLSAgICBtX29wZW5lZCA9IHRydWU7Ci0gICAgaWYgKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSkKLSAgICAgICAgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZU9wZW4o
dGhpcyk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQg
RGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBT
dHJpbmcmIG5ld1ZlcnNpb24sCkBAIC03NTcsMTEgKzQyNCw2IEBAIFZlY3RvcjxTdHJpbmc+IERh
dGFiYXNlOjpwZXJmb3JtR2V0VGFibGUKICAgICByZXR1cm4gdGFibGVOYW1lczsKIH0KIAotdm9p
ZCBEYXRhYmFzZTo6cGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2soKQotewotICAgIG1fY3JlYXRpb25D
YWxsYmFjay0+aGFuZGxlRXZlbnQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0aGlz
KTsKLX0KLQogU1FMVHJhbnNhY3Rpb25DbGllbnQqIERhdGFiYXNlOjp0cmFuc2FjdGlvbkNsaWVu
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJh
c2VUaHJlYWQoKS0+dHJhbnNhY3Rpb25DbGllbnQoKTsKQEAgLTc3MiwxNCArNDM0LDYgQEAgU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvciogRGF0YWJhc2U6OnRyYQogICAgIHJldHVybiBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IoKTsKIH0KIAotU3RyaW5nIERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKLXsKLSAgICBpZiAo
bV9kZWxldGVkKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKGd1aWRNdXRleCgpKTsKLSAgICByZXR1cm4gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1
aWQpLnRocmVhZHNhZmVDb3B5KCk7Ci19Ci0KIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjp0YWJs
ZU5hbWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90IHVzaW5nIHRocmVhZHNhZmVDb3B5IG9uIHRo
ZXNlIHN0cmluZ3MgbG9va3Mgb2sgc2luY2UgdGhyZWFkcyB0YWtlIHN0cmljdCB0dXJucwpAQCAt
Nzk3LDE0ICs0NTEsNiBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6dGFibGVOYW1lcygpCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBEYXRhYmFzZTo6c2V0RXhwZWN0ZWRWZXJzaW9u
KGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLXsKLSAgICBtX2V4cGVjdGVkVmVyc2lvbiA9IHZlcnNp
b24udGhyZWFkc2FmZUNvcHkoKTsKLSAgICAvLyBVcGRhdGUgdGhlIGluIG1lbW9yeSBkYXRhYmFz
ZSB2ZXJzaW9uIG1hcC4KLSAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotICAg
IHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgdmVyc2lvbik7Ci19Ci0KIFNlY3VyaXR5T3Jp
Z2luKiBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4oKSBjb25zdAogewogICAgIGlmIChtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKQpAQCAtODE0LDI5ICs0NjAsNiBA
QCBTZWN1cml0eU9yaWdpbiogRGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luCiAgICAgcmV0dXJuIDA7
CiB9CiAKLVN0cmluZyBEYXRhYmFzZTo6c3RyaW5nSWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAg
Ly8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQotICAg
IHJldHVybiBtX25hbWUudGhyZWFkc2FmZUNvcHkoKTsKLX0KLQotU3RyaW5nIERhdGFiYXNlOjpk
aXNwbGF5TmFtZSgpIGNvbnN0Ci17Ci0gICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYg
Y291bnRpbmcgdGhyZWFkIHNhZmV0eQotICAgIHJldHVybiBtX2Rpc3BsYXlOYW1lLnRocmVhZHNh
ZmVDb3B5KCk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgRGF0YWJhc2U6OmVzdGltYXRlZFNpemUoKSBj
b25zdAotewotICAgIHJldHVybiBtX2VzdGltYXRlZFNpemU7Ci19Ci0KLVN0cmluZyBEYXRhYmFz
ZTo6ZmlsZU5hbWUoKSBjb25zdAotewotICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVm
IGNvdW50aW5nIHRocmVhZCBzYWZldHkKLSAgICByZXR1cm4gbV9maWxlbmFtZS50aHJlYWRzYWZl
Q29weSgpOwotfQotCiB2b2lkIERhdGFiYXNlOjppbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCkK
IHsKICAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLmZyZWVTcGFj
ZVNpemUoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCShyZXZpc2lvbiA2MTgwMykKKysrIFdlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOCArMzMsMTMgQEAKICNp
bmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgotI2VuZGlmCiAKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERhdGFi
YXNlQXV0aG9yaXplcjsKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7Ci1jbGFzcyBEYXRhYmFzZVRo
cmVhZDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdp
bjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uOwpAQCAtNTQsOCArNDksNiBAQCBjbGFzcyBTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOwog
Y2xhc3MgVm9pZENhbGxiYWNrOwogCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCiBjbGFz
cyBEYXRhYmFzZSA6IHB1YmxpYyBBYnN0cmFjdERhdGFiYXNlIHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5EYXRhYmFzZSgpOwpAQCAtNjMsMzcgKzU2LDE3IEBAIHB1YmxpYzoKICAgICAvLyBEaXJl
Y3Qgc3VwcG9ydCBmb3IgdGhlIERPTSBBUEkKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFz
ZT4gb3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlO
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0
cmluZyB2ZXJzaW9uKCkgY29uc3Q7CiAgICAgdm9pZCBjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmlu
ZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCBQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2s+LAogICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2spOwogICAgIHZvaWQgdHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAog
ICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjaywgYm9vbCByZWFkT25seSk7CiAKICAgICAvLyBJbnRlcm5hbCBlbmdpbmUgc3VwcG9ydAot
ICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpOwotCi0gICAg
dm9pZCBkaXNhYmxlQXV0aG9yaXplcigpOwotICAgIHZvaWQgZW5hYmxlQXV0aG9yaXplcigpOwot
ICAgIHZvaWQgc2V0QXV0aG9yaXplclJlYWRPbmx5KCk7Ci0gICAgYm9vbCBsYXN0QWN0aW9uQ2hh
bmdlZERhdGFiYXNlKCk7Ci0gICAgYm9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0KCk7Ci0gICAgdm9p
ZCByZXNldERlbGV0ZXMoKTsKLSAgICBib29sIGhhZERlbGV0ZXMoKTsKLQogICAgIFZlY3RvcjxT
dHJpbmc+IHRhYmxlTmFtZXMoKTsKIAotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5nZXQoKTsgfQogICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5
T3JpZ2luKCkgY29uc3Q7CiAgICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgeyBy
ZXR1cm4gbV9zcWxpdGVEYXRhYmFzZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0lkZW50
aWZpZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdDsKLQotICAgIGJvb2wgZ2V0VmVyc2lvbkZyb21E
YXRhYmFzZShTdHJpbmcmKTsKLSAgICBib29sIHNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0
cmluZyYpOwotICAgIHZvaWQgc2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYpOwotICAg
IGJvb2wgdmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lk
IG1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOwogICAgIGJvb2wgZGVsZXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVsZXRlZDsgfQpAQCAtMTAxLDI4ICs3NCwyMyBAQCBwdWJsaWM6CiAgICAgZW51bSBD
bG9zZVBvbGljeSB7IERvTm90UmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCwgUmVtb3ZlRGF0YWJh
c2VGcm9tQ29udGV4dCB9OwogICAgIHZvaWQgY2xvc2UoQ2xvc2VQb2xpY3kpOwogICAgIHZpcnR1
YWwgdm9pZCBjbG9zZUltbWVkaWF0ZWx5KCk7Ci0gICAgYm9vbCBvcGVuZWQoKSBjb25zdCB7IHJl
dHVybiBtX29wZW5lZDsgfQogCiAgICAgdm9pZCBzdG9wKCk7CiAgICAgYm9vbCBzdG9wcGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9zdG9wcGVkOyB9CiAKLSAgICBib29sIGlzTmV3KCkgY29uc3QgeyBy
ZXR1cm4gbV9uZXc7IH0KLQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFzZVNpemUoKSBj
b25zdDsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKIAogICAg
IC8vIENhbGxlZCBmcm9tIERhdGFiYXNlVGhyZWFkLCBtdXN0IGJlIHByZXBhcmVkIHRvIHdvcmsg
b24gdGhlIGJhY2tncm91bmQgdGhyZWFkCi0gICAgdm9pZCByZXNldEF1dGhvcml6ZXIoKTsKICAg
ICB2b2lkIHBlcmZvcm1Qb2xpY3lDaGVja3MoKTsKIAotICAgIGJvb2wgcGVyZm9ybU9wZW5BbmRW
ZXJpZnkoRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZl
cmlmeShib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJik7CiAKICAg
ICB2b2lkIGluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIHZvaWQgc2NoZWR1
bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKik7CiAgICAgdm9pZCBzY2hlZHVs
ZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlvbiosIGJvb2wgaW1tZWRpYXRlbHkgPSBmYWxz
ZSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBwZXJmb3JtR2V0VGFibGVOYW1lcygpOwotICAgIHZv
aWQgcGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2soKTsKIAogICAgIFNRTFRyYW5zYWN0aW9uQ2xpZW50
KiB0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0OwogICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdDsKQEAgLTEzMSw0NSArOTksMjMgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAotICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPik7CisgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKIAot
ICAgIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNpb24oRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wg
b3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0
aW9uQ29kZSYpOwogCiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CiAKKyAgICBzdGF0
aWMgdm9pZCBkZWxpdmVyUGVuZGluZ0NhbGxiYWNrKHZvaWQqKTsKKwogICAgIERlcXVlPFJlZlB0
cjxTUUxUcmFuc2FjdGlvbj4gPiBtX3RyYW5zYWN0aW9uUXVldWU7CiAgICAgTXV0ZXggbV90cmFu
c2FjdGlvbkluUHJvZ3Jlc3NNdXRleDsKICAgICBib29sIG1fdHJhbnNhY3Rpb25JblByb2dyZXNz
OwogICAgIGJvb2wgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkOwogCi0gICAgc3RhdGljIHZv
aWQgZGVsaXZlclBlbmRpbmdDYWxsYmFjayh2b2lkKik7Ci0KLSAgICBSZWZQdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW47CiAgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW47Ci0gICAgU3RyaW5n
IG1fbmFtZTsKLSAgICBpbnQgbV9ndWlkOwotICAgIFN0cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsK
LSAgICBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKLSAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVk
U2l6ZTsKLSAgICBTdHJpbmcgbV9maWxlbmFtZTsKIAogICAgIGJvb2wgbV9kZWxldGVkOwotCiAg
ICAgYm9vbCBtX3N0b3BwZWQ7Ci0KLSAgICBib29sIG1fb3BlbmVkOwotCi0gICAgYm9vbCBtX25l
dzsKLQotICAgIFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7Ci0gICAgUmVmUHRyPERh
dGFiYXNlQXV0aG9yaXplcj4gbV9kYXRhYmFzZUF1dGhvcml6ZXI7Ci0KLSAgICBSZWZQdHI8RGF0
YWJhc2VDYWxsYmFjaz4gbV9jcmVhdGlvbkNhbGxiYWNrOwotCi0jaWZuZGVmIE5ERUJVRwotICAg
IFN0cmluZyBkYXRhYmFzZURlYnVnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFRocmVh
ZFNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygpICsgIjo6IiArIG1fbmFtZTsgfQotI2VuZGlmCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VBdXRob3JpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VB
dXRob3JpemVyLmNwcAkocmV2aXNpb24gNjE4MDMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VBdXRob3JpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTMgKzMwLDE5IEBACiAjaW5j
bHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5j
bHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGF0YWJhc2VBdXRo
b3JpemVyOjpEYXRhYmFzZUF1dGhvcml6ZXIoKQorUGFzc1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6
ZXI+IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZv
VGFibGVOYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VBdXRob3JpemVy
KGRhdGFiYXNlSW5mb1RhYmxlTmFtZSkpOworfQorCitEYXRhYmFzZUF1dGhvcml6ZXI6OkRhdGFi
YXNlQXV0aG9yaXplcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSkKICAgICA6
IG1fc2VjdXJpdHlFbmFibGVkKGZhbHNlKQorICAgICwgbV9kYXRhYmFzZUluZm9UYWJsZU5hbWUo
ZGF0YWJhc2VJbmZvVGFibGVOYW1lKQogewogICAgIHJlc2V0KCk7CiAgICAgYWRkV2hpdGVsaXN0
ZWRGdW5jdGlvbnMoKTsKQEAgLTM4OCw3ICszOTQsNyBAQCB2b2lkIERhdGFiYXNlQXV0aG9yaXpl
cjo6c2V0UmVhZE9ubHkoKQogICAgIG1fcmVhZE9ubHkgPSB0cnVlOwogfQogCi1pbnQgRGF0YWJh
c2VBdXRob3JpemVyOjpkZW55QmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmIHRhYmxlTmFt
ZSkKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0
cmluZyYgdGFibGVOYW1lKSBjb25zdAogewogICAgIGlmICghbV9zZWN1cml0eUVuYWJsZWQpCiAg
ICAgICAgIHJldHVybiBTUUxBdXRoQWxsb3c7CkBAIC0zOTksNyArNDA1LDcgQEAgaW50IERhdGFi
YXNlQXV0aG9yaXplcjo6ZGVueUJhc2VkT25UYWJsZQogICAgIC8vICAgIGVxdWFsSWdub3JpbmdD
YXNlKHRhYmxlTmFtZSwgInNxbGl0ZV9zZXF1ZW5jZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHRh
YmxlTmFtZSwgRGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkKICAgICAvLyAgICAg
ICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRhYmxl
TmFtZSwgRGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkKKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UodGFibGVOYW1lLCBtX2RhdGFiYXNlSW5mb1RhYmxlTmFtZSkpCiAgICAgICAg
IHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIHJldHVybiBTUUxBdXRoQWxsb3c7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCShyZXZpc2lvbiA2MTgwMykKKysrIFdlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAg
KzI4LDExIEBACiAjaWZuZGVmIERhdGFiYXNlQXV0aG9yaXplcl9oCiAjZGVmaW5lIERhdGFiYXNl
QXV0aG9yaXplcl9oCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlN0
cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00Myw3ICs0NCw3IEBAIGV4dGVybiBjb25zdCBpbnQgU1FMQXV0aERlbnk7
CiAKIGNsYXNzIERhdGFiYXNlQXV0aG9yaXplciA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERh
dGFiYXNlQXV0aG9yaXplcj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFi
YXNlQXV0aG9yaXplcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlQXV0
aG9yaXplcik7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSk7CiAKICAgICBpbnQgY3Jl
YXRlVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwogICAgIGludCBjcmVhdGVUZW1wVGFi
bGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwpAQCAtOTcsOSArOTgsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYWREZWxldGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYWREZWxldGVzOyB9CiAKIHBy
aXZhdGU6Ci0gICAgRGF0YWJhc2VBdXRob3JpemVyKCk7CisgICAgRGF0YWJhc2VBdXRob3JpemVy
KGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKTsKICAgICB2b2lkIGFkZFdoaXRl
bGlzdGVkRnVuY3Rpb25zKCk7Ci0gICAgaW50IGRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0
cmluZyYpOworICAgIGludCBkZW55QmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmKSBjb25z
dDsKICAgICBpbnQgdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUoY29uc3QgU3RyaW5nJik7
CiAKICAgICBib29sIG1fc2VjdXJpdHlFbmFibGVkIDogMTsKQEAgLTEwOCw2ICsxMDksOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9yZWFkT25seSA6IDE7CiAgICAgYm9vbCBtX2hhZERlbGV0ZXMg
OiAxOwogCisgICAgY29uc3QgU3RyaW5nIG1fZGF0YWJhc2VJbmZvVGFibGVOYW1lOworCiAgICAg
SGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbV93aGl0ZWxpc3RlZEZ1bmN0aW9uczsK
IH07CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZpc2lvbiA2MTgwMykKKysr
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
OCArMzEsMTEwIEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiRGF0YWJhc2VD
YWxsYmFjay5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgU3RyaW5nJiBEYXRhYmFzZVN5bmM6OmRhdGFi
YXNlSW5mb1RhYmxlTmFtZSgpCitQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJhc2VTeW5j
OjpvcGVuRGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxE
YXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgbmFtZSwgKCJfX1dlYktpdERhdGFiYXNl
SW5mb1RhYmxlX18iKSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19CisgICAgQVNTRVJUKGNvbnRleHQt
PmlzQ29udGV4dFRocmVhZCgpKTsKIAotUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNl
U3luYzo6b3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywgUGFzc1Jl
ZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRklY
TUU6IHVuY29tbWVudCB0aGUgYXNzZXJ0IG9uY2Ugd2UgdXNlIHRoZSBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBwYXJhbWV0ZXIKLSAgICAvL0FTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQo
KSk7CisgICAgaWYgKCFEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5Fc3RhYmxpc2hEYXRh
YmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpIHsKKyAgICAg
ICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBmb3Igb3JpZ2luICVzIG5vdCBhbGxvd2Vk
IHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgY29udGV4dC0+c2VjdXJp
dHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIFJlZlB0cjxEYXRhYmFzZVN5bmM+IGRhdGFiYXNlID0gYWRvcHRSZWYo
bmV3IERhdGFiYXNlU3luYyhjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlO
YW1lLCBlc3RpbWF0ZWRTaXplKSk7CisKKyAgICBpZiAoIWRhdGFiYXNlLT5wZXJmb3JtT3BlbkFu
ZFZlcmlmeSghY3JlYXRpb25DYWxsYmFjaywgZWMpKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiRmFpbGVkIHRvIG9wZW4gYW5kIHZlcmlmeSB2ZXJzaW9uIChleHBlY3RlZCAlcykgb2YgZGF0
YWJhc2UgJXMiLCBleHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlLT5kYXRh
YmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgRGF0YWJhc2VUcmFja2Vy
Ojp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0RGF0
YWJhc2VEZXRhaWxzKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIG5hbWUsIGRpc3BsYXlOYW1l
LCBlc3RpbWF0ZWRTaXplKTsKKworICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAmJiBjcmVhdGlv
bkNhbGxiYWNrLmdldCgpKSB7CisgICAgICAgIGRhdGFiYXNlLT5tX2V4cGVjdGVkVmVyc2lvbiA9
ICIiOworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkludm9raW5nIHRoZSBjcmVhdGlvbiBjYWxs
YmFjayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKKyAgICAgICAgY3JlYXRp
b25DYWxsYmFjay0+aGFuZGxlRXZlbnQoY29udGV4dCwgZGF0YWJhc2UuZ2V0KCkpOworICAgIH0K
IAotICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBkYXRh
YmFzZTsKIH0KIAogRGF0YWJhc2VTeW5jOjpEYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVk
VmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNh
bGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrKQotICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KGNvbnRleHQpCi0gICAgLCBtX25hbWUobmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQotICAgICwg
bV9leHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0g
ICAgLCBtX2Rpc3BsYXlOYW1lKGRpc3BsYXlOYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAg
LCBtX2VzdGltYXRlZFNpemUoZXN0aW1hdGVkU2l6ZSkKLSAgICAsIG1fY3JlYXRpb25DYWxsYmFj
ayhjcmVhdGlvbkNhbGxiYWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQorICAgIDogQWJz
dHJhY3REYXRhYmFzZShjb250ZXh0LCBuYW1lLCBleHBlY3RlZFZlcnNpb24sIGRpc3BsYXlOYW1l
LCBlc3RpbWF0ZWRTaXplKQogewotICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQo
KSk7CiB9CiAKIERhdGFiYXNlU3luYzo6fkRhdGFiYXNlU3luYygpCiB7CiAgICAgQVNTRVJUKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmIChvcGVu
ZWQoKSkgeworICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFi
YXNlKHRoaXMpOworICAgICAgY2xvc2VEYXRhYmFzZSgpOworICAgIH0KIH0KIAotU3RyaW5nIERh
dGFiYXNlU3luYzo6dmVyc2lvbigpIGNvbnN0Cit2b2lkIERhdGFiYXNlU3luYzo6Y2hhbmdlVmVy
c2lvbihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIHJldHVybiBTdHJpbmco
KTsKIH0KIAotdm9pZCBEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIEV4
Y2VwdGlvbkNvZGUmKQordm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sLCBFeGNlcHRpb25Db2RlJikKIHsKICAg
ICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiB9
CiAKLXZvaWQgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrPiwgYm9vbCwgRXhjZXB0aW9uQ29kZSYpCit2b2lkIERhdGFiYXNlU3lu
Yzo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkKIHsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gZG8g
c29tZXRoaW5nIHNpbWlsYXIgdG8gY2xvc2VJbW1lZGlhdGVseSgpLCBidXQgaW4gYSBzeW5jIHdh
eQogfQogCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBEYXRhYmFzZVN5bmM6OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdAorY2xhc3MgQ2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJl
YWRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFz
az4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgQ2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrKGRhdGFi
YXNlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopCisgICAgeworICAgICAgICBtX2RhdGFiYXNlLT5jbG9zZUltbWVkaWF0ZWx5
KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhy
ZWFkVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2UpCisgICAgICAgIDogbV9k
YXRhYmFzZShkYXRhYmFzZSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPERhdGFiYXNlU3lu
Yz4gbV9kYXRhYmFzZTsKK307CisKK3ZvaWQgRGF0YWJhc2VTeW5jOjpjbG9zZUltbWVkaWF0ZWx5
KCkKIHsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJl
YWQoKSk7Ci0gICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKTsKKyAgICBp
ZiAoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpIHsKKyAgICAg
ICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhDbG9zZVN5bmNEYXRhYmFzZU9u
Q29udGV4dFRocmVhZFRhc2s6OmNyZWF0ZSh0aGlzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIW9wZW5lZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UodGhpcyk7CisKKyAgICBjbG9zZURh
dGFiYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VTeW5jLmgJKHJldmlzaW9uIDYxODAzKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3lu
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw0OCArMzAsMzYgQEAKICNkZWZpbmUgRGF0YWJhc2VT
eW5jX2gKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKIGNsYXNzIFNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
LQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiAv
LyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5
IG9uIHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KLWNsYXNzIERhdGFiYXNlU3luYyA6IHB1
YmxpYyBSZWZDb3VudGVkPERhdGFiYXNlU3luYz4geworY2xhc3MgRGF0YWJhc2VTeW5jIDogcHVi
bGljIEFic3RyYWN0RGF0YWJhc2UgewogcHVibGljOgotICAgIH5EYXRhYmFzZVN5bmMoKTsKKyAg
ICB2aXJ0dWFsIH5EYXRhYmFzZVN5bmMoKTsKIAotICAgIC8vIERpcmVjdCBzdXBwb3J0IGZvciB0
aGUgRE9NIEFQSQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gb3BlbkRhdGFi
YXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKICAgICB2b2lkIGNoYW5n
ZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNp
b24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrPiwgYm9vbCByZWFkT25seSwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgLy8gSW50ZXJu
YWwgZW5naW5lIHN1cHBvcnQKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZUluZm9UYWJsZU5hbWUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3Nl
KCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKIAogcHJpdmF0ZToKICAg
ICBEYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0gICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1Jl
ZlB0cjxEYXRhYmFzZUNhbGxiYWNrPik7Ci0KLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAg
U3RyaW5nIG1fZXhwZWN0ZWRWZXJzaW9uOwotICAgIFN0cmluZyBtX2Rpc3BsYXlOYW1lOwotICAg
IHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOwotICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxi
YWNrPiBtX2NyZWF0aW9uQ2FsbGJhY2s7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRh
dGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSNlbmRpZgorICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlVGFzay5jcHAJKHJldmlzaW9uIDYxODAzKQorKysgV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDkgQEAgdm9pZCBEYXRh
YmFzZVRhc2s6OnBlcmZvcm1UYXNrKCkKIC8vICoqKiBEYXRhYmFzZU9wZW5UYXNrICoqKgogLy8g
T3BlbnMgdGhlIGRhdGFiYXNlIGZpbGUgYW5kIHZlcmlmaWVzIHRoZSB2ZXJzaW9uIG1hdGNoZXMg
dGhlIGV4cGVjdGVkIHZlcnNpb24uCiAKLURhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRh
c2soRGF0YWJhc2UqIGRhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9u
aXplciwgRXhjZXB0aW9uQ29kZSYgY29kZSwgYm9vbCYgc3VjY2VzcykKK0RhdGFiYXNlT3BlblRh
c2s6OkRhdGFiYXNlT3BlblRhc2soRGF0YWJhc2UqIGRhdGFiYXNlLCBib29sIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhj
ZXB0aW9uQ29kZSYgY29kZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IERhdGFiYXNlVGFzayhkYXRh
YmFzZSwgc3luY2hyb25pemVyKQorICAgICwgbV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZShzZXRW
ZXJzaW9uSW5OZXdEYXRhYmFzZSkKICAgICAsIG1fY29kZShjb2RlKQogICAgICwgbV9zdWNjZXNz
KHN1Y2Nlc3MpCiB7CkBAIC05Nyw3ICs5OCw3IEBAIERhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNl
T3BlblRhc2soRGF0YWIKIAogdm9pZCBEYXRhYmFzZU9wZW5UYXNrOjpkb1BlcmZvcm1UYXNrKCkK
IHsKLSAgICBtX3N1Y2Nlc3MgPSBkYXRhYmFzZSgpLT5wZXJmb3JtT3BlbkFuZFZlcmlmeShtX2Nv
ZGUpOworICAgIG1fc3VjY2VzcyA9IGRhdGFiYXNlKCktPnBlcmZvcm1PcGVuQW5kVmVyaWZ5KG1f
c2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIG1fY29kZSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5oCShyZXZpc2lvbiA2MTgwMykKKysrIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtODUsMTkgKzg1LDIwIEBAIHBy
aXZhdGU6CiAKIGNsYXNzIERhdGFiYXNlT3BlblRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZU9wZW5UYXNrPiBjcmVhdGUo
RGF0YWJhc2UqIGRiLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhj
ZXB0aW9uQ29kZSYgY29kZSwgYm9vbCYgc3VjY2VzcykKKyAgICBzdGF0aWMgUGFzc093blB0cjxE
YXRhYmFzZU9wZW5UYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBib29sIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0
aW9uQ29kZSYgY29kZSwgYm9vbCYgc3VjY2VzcykKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcg
RGF0YWJhc2VPcGVuVGFzayhkYiwgc3luY2hyb25pemVyLCBjb2RlLCBzdWNjZXNzKTsKKyAgICAg
ICAgcmV0dXJuIG5ldyBEYXRhYmFzZU9wZW5UYXNrKGRiLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFz
ZSwgc3luY2hyb25pemVyLCBjb2RlLCBzdWNjZXNzKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
RGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIEV4
Y2VwdGlvbkNvZGUmLCBib29sJiBzdWNjZXNzKTsKKyAgICBEYXRhYmFzZU9wZW5UYXNrKERhdGFi
YXNlKiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyKiwgRXhjZXB0aW9uQ29kZSYsIGJvb2wmIHN1Y2Nlc3MpOwogCiAgICAgdmlydHVhbCB2b2lk
IGRvUGVyZm9ybVRhc2soKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiBkZWJ1Z1Rhc2tOYW1lKCkgY29uc3Q7CiAjZW5kaWYKIAorICAgIGJvb2wgbV9zZXRWZXJzaW9u
SW5OZXdEYXRhYmFzZTsKICAgICBFeGNlcHRpb25Db2RlJiBtX2NvZGU7CiAgICAgYm9vbCYgbV9z
dWNjZXNzOwogfTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYxODAzKQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMjMgIER1bWl0
cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbmNvbW1lbnQgYWxsIHRlc3QgY2FzZXMgaW4gb3Bl
bi1kYXRhYmFzZS1zeW5jLWlucHV0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwNjA3CisKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9v
cGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qczoKKyAg
ICAgICAgKGNhdGNoKToKKwogMjAxMC0wNi0yNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24uCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjE4MDMp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMt
aW5wdXRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNSw0ICs1LDYgQEAgUEFTUzog
dW5kZWZpbmVkCiBQQVNTOiB1bmRlZmluZWQKIFBBU1M6IHVuZGVmaW5lZAogUEFTUzogVFlQRV9N
SVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcKK1BBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBz
dWNjZWVkZWQuCitQQVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRp
b24gY2FsbGJhY2sgc3VjY2VlZGVkLgogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS1zeW5jLWlucHV0cy5qcwkocmV2aXNpb24gNjE4MDMpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTkgKzQ2LDIxIEBAIHRyeSB7CiAgICAgcG9zdE1lc3NhZ2Uo
IlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7CiB9CiAKLS8vIEZJWE1FOiBVbmNvbW1lbnQgdGhlc2Ug
dGVzdHMgd2hlbiB0aGUgc3luYyBEQiBBUEkgaXMgaW1wbGVtZW50ZWQuCi0vL3RyeSB7Ci0vLyAg
ICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlw
dGlvbiIsIDEwMjQpOwotLy8gICAgcG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMo
KSBzdWNjZWVkZWQuIik7Ci0vL30gY2F0Y2ggKGVycikgewotLy8gICAgcG9zdE1lc3NhZ2UoIkZB
SUw6ICIgKyBlcnIubWVzc2FnZSk7Ci0vL30KLS8vCi0vL3RyeSB7Ci0vLyAgICBkYiA9IG9wZW5E
YXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQs
IGZ1bmN0aW9uKGRiKSB7IH0pOwotLy8gICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3Bl
bkRhdGFiYXNlU3luYygpIHdpdGggYSBjcmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuIik7Ci0v
L30gY2F0Y2ggKGVycikgewotLy8gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2Fn
ZSk7Ci0vL30KK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJW
ZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzog
b3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBv
c3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCit0cnkgeworICAgIC8vIE5l
ZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFiYXNlLCBvdGhlcndpc2UgdGhlIGNyZWF0aW9uIGNhbGxi
YWNrIHdvbid0IGJlIGludm9rZWQuCisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWVD
cmVhdGlvbkNhbGxiYWNrIiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksICJEQlZlcnNpb24iLCAi
REJEZXNjcmlwdGlvbiIsIDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KGRiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzog
Y2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2Nl
ZWRlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cit9IGNhdGNoIChlcnIpIHsK
KyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKK30KIAogcG9zdE1lc3Nh
Z2UoImRvbmUiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59831</attachid>
            <date>2010-06-26 04:56:21 -0700</date>
            <delta_ts>2010-06-26 05:19:18 -0700</delta_ts>
            <desc>patch #1: implement DatabaseSync::openDatabaseSync()</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>72887</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTk1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTcgQEAKKzIwMTAtMDYtMjYgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKCkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisgICAgICAg
IDEuIE1vdmVkIHNvbWUgY29tbW9uIGNvZGUgZnJvbSBEYXRhYmFzZSB0byBBYnN0cmFjdERhdGFi
YXNlLgorICAgICAgICAyLiBNYWRlIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkgdmlydHVhbCwgc2lu
Y2UgRGF0YWJhc2VTeW5jIGRvZXNuJ3QKKyAgICAgICAgICAgbmVlZCB0byBpbnRlcmFjdCB3aXRo
IERhdGFiYXNlVGhyZWFkLgorICAgICAgICAzLiBSZW1vdmVkIHRoZSBtX2NyZWF0aW9uQ2FsbGJh
Y2sgZmllbGQsIHNpbmNlIGl0J3Mgb25seSBuZWVkZWQgaW4KKyAgICAgICAgICAgdGhlIG9wZW5E
YXRhYmFzZXtTeW5jfSBtZXRob2RzLgorCTQuIE1hZGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBh
d2FyZSBvZiBzeW5jIERCcywgc28gd2UgY2FuIGNsb3NlCisgICAgICAgICAgIHRoZSBzeW5jIERC
cyBiZWZvcmUgdGhlIGRlc3RydWN0b3IgaXMgY2FsbGVkLgorCTUuIE1vdmVkIGEgY291cGxlIG9m
IGFzeW5jIERCLXNwZWNpZmljIGxpbmVzIGZyb20KKyAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6c3RvcERhdGFiYXNlcygpIHRvIERhdGFiYXNlOjpzdG9wKCkuCisKKyAgICAgICAg
KiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjphZGRPcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVtb3ZlT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN0b3BEYXRhYmFzZXMpOgorICAgICAgICAq
IGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAgICAgICogc3RvcmFnZS9BYnN0cmFj
dERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlVGV4dFJlc3VsdEZyb21E
YXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Omd1aWRNdXRleCk6CisgICAgICAgIChXZWJDb3JlOjpndWlkVG9WZXJz
aW9uTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZUd1aWRWZXJzaW9uTWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6Omd1aWRUb0RhdGFiYXNlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6Omd1aWRG
b3JPcmlnaW5BbmROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmRh
dGFiYXNlSW5mb1RhYmxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNl
OjpBYnN0cmFjdERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6
OmNsb3NlRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6dmVy
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFu
ZFZlcmlmeSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNlY3Vy
aXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnN0cmluZ0lk
ZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZGlzcGxheU5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZXN0aW1hdGVkU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpmaWxlTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZVZlcnNpb25LZXkpOgorICAgICAg
ICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6Z2V0VmVyc2lvbkZyb21EYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZXRWZXJzaW9uSW5EYXRhYmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9uTWF0Y2hlc0V4cGVj
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNldEV4cGVjdGVkVmVy
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkaXNhYmxlQXV0aG9y
aXplcik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjplbmFibGVBdXRob3Jp
emVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJS
ZWFkT25seSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpsYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Omxh
c3RBY3Rpb25XYXNJbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6
cmVzZXREZWxldGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmhhZERl
bGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6cmVzZXRBdXRob3Jp
emVyKToKKyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Om9wZW5lZCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjppc05ldyk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNl
OjpkYXRhYmFzZURlYnVnTmFtZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6cGVyZm9ybVRh
c2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6RGF0
YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6
b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2U6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpzdG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6CisgICAgICAgICogc3Rv
cmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNxbGl0ZURhdGFi
YXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhYmFzZUF1dGhvcml6ZXI6OkRhdGFiYXNlQXV0aG9yaXplcik6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFibGVOYW1lKToKKyAgICAgICAg
KiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJh
c2VTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6b3BlbkRhdGFiYXNl
U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OkRhdGFiYXNlU3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVN5bmM6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpD
bG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2s6OnBlcmZvcm1UYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFz
azo6Q2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlU3luYzo6Y2xvc2VJbW1lZGlhdGVseSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVN5bmM6OnN0b3ApOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmg6Cisg
ICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZU9wZW5UYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
VGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKToKKwog
MjAxMC0wNi0yNiAgVG9ueSBHZW50aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFdlYkNvcmUvZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuY3BwCShyZXZpc2lvbiA2MTk1MykKKysrIFdlYkNvcmUvZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMSBAQAog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaWYgRU5BQkxFKERBVEFCQVNFKQor
I2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRhc2suaCIK
ICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgorI2VuZGlmCiAjaWYgRU5BQkxFKEZJTEVfUkVB
REVSKSB8fCBFTkFCTEUoRklMRV9XUklURVIpCiAjaW5jbHVkZSAiRmlsZVRocmVhZC5oIgogI2Vu
ZGlmCkBAIC0xMDksNyArMTExLDcgQEAgRGF0YWJhc2VUaHJlYWQqIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OgogICAgIHJldHVybiBtX2RhdGFiYXNlVGhyZWFkLmdldCgpOwogfQogCi12b2lkIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2Up
Cit2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkZE9wZW5EYXRhYmFzZShBYnN0cmFjdERh
dGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFkKCkpOwogICAg
IGlmICghbV9vcGVuRGF0YWJhc2VTZXQpCkBAIC0xMTksNyArMTIxLDcgQEAgdm9pZCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjphZGRPcGVuRGF0YQogICAgIG1fb3BlbkRhdGFiYXNlU2V0LT5hZGQo
ZGF0YWJhc2UpOwogfQogCi12b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZU9wZW5E
YXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCit2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OnJlbW92ZU9wZW5EYXRhYmFzZShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBB
U1NFUlQoaXNDb250ZXh0VGhyZWFkKCkpOwogICAgIEFTU0VSVChtX29wZW5EYXRhYmFzZVNldCAm
JiBtX29wZW5EYXRhYmFzZVNldC0+Y29udGFpbnMoZGF0YWJhc2UpKTsKQEAgLTEzNCwxMyArMTM2
LDEwIEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcERhdGFiYXMKICAgICBpZiAo
bV9vcGVuRGF0YWJhc2VTZXQpIHsKICAgICAgICAgRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGkgPSBt
X29wZW5EYXRhYmFzZVNldC0+YmVnaW4oKTsKICAgICAgICAgRGF0YWJhc2VTZXQ6Oml0ZXJhdG9y
IGVuZCA9IG1fb3BlbkRhdGFiYXNlU2V0LT5lbmQoKTsKLSAgICAgICAgZm9yICg7IGkgIT0gZW5k
OyArK2kpIHsKKyAgICAgICAgZm9yICg7IGkgIT0gZW5kOyArK2kpCiAgICAgICAgICAgICAoKmkp
LT5zdG9wKCk7Ci0gICAgICAgICAgICBpZiAobV9kYXRhYmFzZVRocmVhZCkKLSAgICAgICAgICAg
ICAgICBtX2RhdGFiYXNlVGhyZWFkLT51bnNjaGVkdWxlRGF0YWJhc2VUYXNrcygqaSk7Ci0gICAg
ICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAobV9kYXRhYmFzZVRocmVhZCkKICAgICAgICAg
bV9kYXRhYmFzZVRocmVhZC0+cmVxdWVzdFRlcm1pbmF0aW9uKGNsZWFudXBTeW5jKTsKICAgICBl
bHNlIGlmIChjbGVhbnVwU3luYykKSW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgJKHJldmlzaW9uIDYxOTUzKQorKysgV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIGNsYXNzIEFjdGl2ZURPTU9iamVjdDsKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAg
Y2xhc3MgRGF0YWJhc2U7CisgICAgY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKICAgICBjbGFzcyBE
YXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI7CiAgICAgY2xhc3MgRGF0YWJhc2VUaHJlYWQ7CiAjZW5k
aWYKQEAgLTcwLDggKzcwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBEYXRhYmFz
ZVRocmVhZCogZGF0YWJhc2VUaHJlYWQoKTsKICAgICAgICAgdm9pZCBzZXRIYXNPcGVuRGF0YWJh
c2VzKCkgeyBtX2hhc09wZW5EYXRhYmFzZXMgPSB0cnVlOyB9CiAgICAgICAgIGJvb2wgaGFzT3Bl
bkRhdGFiYXNlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzT3BlbkRhdGFiYXNlczsgfQotICAgICAg
ICB2b2lkIGFkZE9wZW5EYXRhYmFzZShEYXRhYmFzZSopOwotICAgICAgICB2b2lkIHJlbW92ZU9w
ZW5EYXRhYmFzZShEYXRhYmFzZSopOworICAgICAgICB2b2lkIGFkZE9wZW5EYXRhYmFzZShBYnN0
cmFjdERhdGFiYXNlKik7CisgICAgICAgIHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKEFic3RyYWN0
RGF0YWJhc2UqKTsKICAgICAgICAgLy8gV2hlbiB0aGUgZGF0YWJhc2UgY2xlYW51cCBpcyBkb25l
LCBjbGVhbnVwU3luYyB3aWxsIGJlIHNpZ25hbGxlZC4KICAgICAgICAgdm9pZCBzdG9wRGF0YWJh
c2VzKERhdGFiYXNlVGFza1N5bmNocm9uaXplciopOwogI2VuZGlmCkBAIC0xNjAsNyArMTYwLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAgICAgUmVm
UHRyPERhdGFiYXNlVGhyZWFkPiBtX2RhdGFiYXNlVGhyZWFkOwogICAgICAgICBib29sIG1faGFz
T3BlbkRhdGFiYXNlczsgLy8gVGhpcyBuZXZlciBjaGFuZ2VzIGJhY2sgdG8gZmFsc2UsIGV2ZW4g
YWZ0ZXIgdGhlIGRhdGFiYXNlIHRocmVhZCBpcyBjbG9zZWQuCi0gICAgICAgIHR5cGVkZWYgSGFz
aFNldDxEYXRhYmFzZSogPiBEYXRhYmFzZVNldDsKKyAgICAgICAgdHlwZWRlZiBIYXNoU2V0PEFi
c3RyYWN0RGF0YWJhc2UqPiBEYXRhYmFzZVNldDsKICAgICAgICAgT3duUHRyPERhdGFiYXNlU2V0
PiBtX29wZW5EYXRhYmFzZVNldDsKICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJz
dHJhY3REYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0
RGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2MTk1MykKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFj
dERhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTMyIEBACiAjaW5jbHVk
ZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUg
IkRhdGFiYXNlQXV0aG9yaXplci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAi
U1FMaXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgor
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGJvb2wg
cmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3Qg
U3RyaW5nJiBxdWVyeSwgU3RyaW5nJiByZXN1bHRTdHJpbmcpCit7CisgICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChkYiwgcXVlcnkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJl
cGFyZSgpOworCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0df
RVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQgcmVzdWx0
IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KTsKKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICByZXN1bHRTdHJp
bmcgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICByZXN1bHRT
dHJpbmcgPSBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgTE9H
X0VSUk9SKCJFcnJvciAoJWkpIHJlYWRpbmcgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMp
IiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgYm9vbCBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwg
Y29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVu
dC5wcmVwYXJlKCk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBk
YXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKKworICAgIHJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25l
KSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHN0ZXAgc3RhdGVtZW50IHRvIHNldCB2
YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEZJWE1FOiBt
b3ZlIGFsbCBndWlkLXJlbGF0ZWQgZnVuY3Rpb25zIHRvIGEgRGF0YWJhc2VWZXJzaW9uVHJhY2tl
ciBjbGFzcy4KK3N0YXRpYyBNdXRleCYgZ3VpZE11dGV4KCkKK3sKKyAgICAvLyBOb3RlOiBXZSBk
b24ndCBoYXZlIHRvIHVzZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMgaGVyZSBiZWNhdXNl
CisgICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBpbiB0aGUgY29uc3RydWN0b3Ig
b24gdGhlIG1haW4gdGhyZWFkCisgICAgLy8gYmVmb3JlIGFueSBvdGhlciB0aHJlYWRzIHRoYXQg
Y2FsbCB0aGlzIGZ1bmN0aW9uIGFyZSB1c2VkLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0
ZXgsIG11dGV4LCAoKSk7CisgICAgcmV0dXJuIG11dGV4OworfQorCit0eXBlZGVmIEhhc2hNYXA8
aW50LCBTdHJpbmc+IEd1aWRWZXJzaW9uTWFwOworc3RhdGljIEd1aWRWZXJzaW9uTWFwJiBndWlk
VG9WZXJzaW9uTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWRWZXJzaW9uTWFw
LCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFwOworfQorCisvLyBOT1RFOiBDYWxsZXIgbXVzdCBs
b2NrIGd1aWRNdXRleCgpLgorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZUd1aWRWZXJzaW9uTWFw
KGludCBndWlkLCBTdHJpbmcgbmV3VmVyc2lvbikKK3sKKyAgICAvLyBFbnN1cmUgdGhlIHRoZSBt
dXRleCBpcyBsb2NrZWQuCisgICAgQVNTRVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOworCisg
ICAgLy8gTm90ZTogSXQgaXMgbm90IHNhZmUgdG8gcHV0IGFuIGVtcHR5IHN0cmluZyBpbnRvIHRo
ZSBndWlkVG9WZXJzaW9uTWFwKCkgbWFwLgorICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZSBtYXAg
aXMgY3Jvc3MtdGhyZWFkLCBidXQgZW1wdHkgc3RyaW5ncyBhcmUgcGVyLXRocmVhZC4KKyAgICAv
LyBUaGUgY29weSgpIGZ1bmN0aW9uIG1ha2VzIGEgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHlvdSBj
YW4gdXNlIG9uIHRoZSBjdXJyZW50CisgICAgLy8gdGhyZWFkLCBidXQgd2UgbmVlZCBhIHN0cmlu
ZyB3ZSBjYW4ga2VlcCBpbiBhIGNyb3NzLXRocmVhZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHF1aXRlLWF3a3dhcmQgcmVzdHJpY3Rpb24gdG8gaGF2ZSB0byBwcm9n
cmFtIHdpdGguCisKKyAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUg
Y29tbWVudCBhYm92ZSkuCisgICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJz
aW9uLmlzRW1wdHkoKSA/IFN0cmluZygpIDogbmV3VmVyc2lvbi50aHJlYWRzYWZlQ29weSgpKTsK
K30KKwordHlwZWRlZiBIYXNoTWFwPGludCwgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj4qPiBH
dWlkRGF0YWJhc2VNYXA7CitzdGF0aWMgR3VpZERhdGFiYXNlTWFwJiBndWlkVG9EYXRhYmFzZU1h
cCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkRGF0YWJhc2VNYXAsIG1hcCwgKCkp
OworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBpbnQgZ3VpZEZvck9yaWdpbkFuZE5hbWUo
Y29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBTdHJpbmcg
c3RyaW5nSUQ7CisgICAgaWYgKG9yaWdpbi5lbmRzV2l0aCgiLyIpKQorICAgICAgICBzdHJpbmdJ
RCA9IG9yaWdpbiArIG5hbWU7CisgICAgZWxzZQorICAgICAgICBzdHJpbmdJRCA9IG9yaWdpbiAr
ICIvIiArIG5hbWU7CisKKyAgICAvLyBOb3RlOiBXZSBkb24ndCBoYXZlIHRvIHVzZSBBdG9taWNh
bGx5SW5pdGlhbGl6ZWRTdGF0aWMgaGVyZSBiZWNhdXNlCisgICAgLy8gdGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgb25jZSBpbiB0aGUgY29uc3RydWN0b3Igb24gdGhlIG1haW4gdGhyZWFkCisgICAg
Ly8gYmVmb3JlIGFueSBvdGhlciB0aHJlYWRzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uIGFyZSB1
c2VkLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIHN0cmluZ0lkZW50aWZpZXJNdXRl
eCwgKCkpOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihzdHJpbmdJZGVudGlmaWVyTXV0ZXgpOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIGludD4gSURHdWlkTWFwOworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoSURHdWlkTWFwLCBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLCAoKSk7Cisg
ICAgaW50IGd1aWQgPSBzdHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLmdldChzdHJpbmdJRCk7Cisg
ICAgaWYgKCFndWlkKSB7CisgICAgICAgIHN0YXRpYyBpbnQgY3VycmVudE5ld0dVSUQgPSAxOwor
ICAgICAgICBndWlkID0gY3VycmVudE5ld0dVSUQrKzsKKyAgICAgICAgc3RyaW5nSWRlbnRpZmll
clRvR1VJRE1hcC5zZXQoc3RyaW5nSUQsIGd1aWQpOworICAgIH0KKworICAgIHJldHVybiBndWlk
OworfQorCiBzdGF0aWMgYm9vbCBpc0RhdGFiYXNlQXZhaWxhYmxlID0gdHJ1ZTsKIAogYm9vbCBB
YnN0cmFjdERhdGFiYXNlOjppc0F2YWlsYWJsZSgpCkBAIC00NSwxMCArMTY4LDMwNCBAQCB2b2lk
IEFic3RyYWN0RGF0YWJhc2U6OnNldElzQXZhaWxhYmxlKGJvCiAgICAgaXNEYXRhYmFzZUF2YWls
YWJsZSA9IGF2YWlsYWJsZTsKIH0KIAorLy8gc3RhdGljCitjb25zdCBTdHJpbmcmIEFic3RyYWN0
RGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIG5hbWUsICgiX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fIikpOworICAg
IHJldHVybiBuYW1lOworfQorCitBYnN0cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSkKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICwgbV9uYW1l
KG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fZXhwZWN0ZWRWZXJzaW9uKGV4cGVj
dGVkVmVyc2lvbi5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICwgbV9kaXNwbGF5TmFtZShkaXNw
bGF5TmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICwgbV9lc3RpbWF0ZWRTaXplKGVzdGlt
YXRlZFNpemUpCisgICAgLCBtX2d1aWQoMCkKKyAgICAsIG1fb3BlbmVkKGZhbHNlKQorICAgICwg
bV9uZXcoZmFsc2UpCit7CisgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsK
KyAgICBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyID0gRGF0
YWJhc2VBdXRob3JpemVyOjpjcmVhdGUoZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpOworCisgICAg
aWYgKG1fbmFtZS5pc051bGwoKSkKKyAgICAgICAgbV9uYW1lID0gIiI7CisKKyAgICBtX2d1aWQg
PSBndWlkRm9yT3JpZ2luQW5kTmFtZShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBuYW1l
KTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisKKyAg
ICAgICAgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFz
ZU1hcCgpLmdldChtX2d1aWQpOworICAgICAgICBpZiAoIWhhc2hTZXQpIHsKKyAgICAgICAgICAg
IGhhc2hTZXQgPSBuZXcgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj47CisgICAgICAgICAgICBn
dWlkVG9EYXRhYmFzZU1hcCgpLnNldChtX2d1aWQsIGhhc2hTZXQpOworICAgICAgICB9CisKKyAg
ICAgICAgaGFzaFNldC0+YWRkKHRoaXMpOworICAgIH0KKworICAgIG1fZmlsZW5hbWUgPSBEYXRh
YmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5mdWxsUGF0aEZvckRhdGFiYXNlKHNlY3VyaXR5T3JpZ2lu
KCksIG1fbmFtZSk7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuYWRkT3BlbkRhdGFi
YXNlKHRoaXMpOworfQorCiBBYnN0cmFjdERhdGFiYXNlOjp+QWJzdHJhY3REYXRhYmFzZSgpCiB7
CiB9CiAKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6Y2xvc2VEYXRhYmFzZSgpCit7CisgICAgaWYg
KCFtX29wZW5lZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9z
ZSgpOworICAgIG1fb3BlbmVkID0gZmFsc2U7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIoZ3VpZE11dGV4KCkpOworCisgICAgICAgIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+
KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKKyAgICAgICAgQVNT
RVJUKGhhc2hTZXQpOworICAgICAgICBBU1NFUlQoaGFzaFNldC0+Y29udGFpbnModGhpcykpOwor
ICAgICAgICBoYXNoU2V0LT5yZW1vdmUodGhpcyk7CisgICAgICAgIGlmIChoYXNoU2V0LT5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkucmVtb3ZlKG1fZ3VpZCk7
CisgICAgICAgICAgICBkZWxldGUgaGFzaFNldDsKKyAgICAgICAgICAgIGd1aWRUb1ZlcnNpb25N
YXAoKS5yZW1vdmUobV9ndWlkKTsKKyAgICAgICAgfQorICAgIH0KK30KKworU3RyaW5nIEFic3Ry
YWN0RGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihn
dWlkTXV0ZXgoKSk7CisgICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS50
aHJlYWRzYWZlQ29weSgpOworfQorCitzdGF0aWMgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0
VGltZSA9IDMwMDAwOworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlm
eShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2Uub3BlbihtX2ZpbGVuYW1lLCB0cnVlKSkgewor
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIGRhdGFiYXNlIGF0IHBhdGggJXMiLCBt
X2ZpbGVuYW1lLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIW1fc3FsaXRlRGF0YWJh
c2UudHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKCkpCisgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIHR1cm4gb24gaW5jcmVtZW50YWwgYXV0by12YWN1dW0gZm9yIGRhdGFiYXNlICVzIiwg
bV9maWxlbmFtZS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhv
cml6ZXIpOworICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0
aG9yaXplcik7CisgICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChtYXhTcWxpdGVC
dXN5V2FpdFRpbWUpOworCisgICAgU3RyaW5nIGN1cnJlbnRWZXJzaW9uOworICAgIHsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKworICAgICAgICBHdWlkVmVyc2lv
bk1hcDo6aXRlcmF0b3IgZW50cnkgPSBndWlkVG9WZXJzaW9uTWFwKCkuZmluZChtX2d1aWQpOwor
ICAgICAgICBpZiAoZW50cnkgIT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmVuZCgpKSB7CisgICAgICAg
ICAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgdXBkYXRlR3VpZFZl
cnNpb25NYXAoKSkuCisgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT5zZWNvbmQu
aXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogZW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIExPRyhT
dG9yYWdlQVBJLCAiQ3VycmVudCBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSBpcyAlcyIsIG1f
Z3VpZCwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJObyBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAl
aSIsIG1fZ3VpZCk7CisKKyAgICAgICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50YWJsZUV4
aXN0cyhkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBtX25ldyA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNv
bW1hbmQoIkNSRUFURSBUQUJMRSAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIChrZXkg
VEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNF
LHZhbHVlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlIHRhYmxlICVzIGluIGRhdGFiYXNl
ICVzIiwgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkuYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVi
dWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOworICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRv
IHRoZSBkYXRhYmFzZSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNl
LmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2V0VmVyc2lvbkZyb21E
YXRhYmFzZShjdXJyZW50VmVyc2lvbikpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBnZXQgY3VycmVudCB2ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURl
YnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURf
U1RBVEVfRVJSOworICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRh
dGFiYXNlIGZpbGUuCisgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChjdXJyZW50VmVyc2lvbi5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiUmV0cmlldmVkIGN1cnJlbnQgdmVyc2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzIiwg
Y3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWko
KS5kYXRhKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICghbV9uZXcgfHwgc2hvdWxkU2V0VmVy
c2lvbkluTmV3RGF0YWJhc2UpIHsKKyAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNl
dHRpbmcgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQiLCBt
X2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRhYmFzZSht
X2V4cGVjdGVkVmVyc2lvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMiLCBtX2V4cGVjdGVkVmVyc2lvbi5h
c2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgICAgICAgICAg
ICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgICAgICAg
ICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50
VmVyc2lvbiA9IG1fZXhwZWN0ZWRWZXJzaW9uOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIGN1cnJlbnRWZXJzaW9uKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChjdXJyZW50VmVyc2lvbi5pc051bGwoKSkgeworICAgICAgICBM
T0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGRvZXMgbm90IGhhdmUgaXRzIHZlcnNpb24gc2V0
IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGN1cnJlbnRW
ZXJzaW9uID0gIiI7CisgICAgfQorCisgICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXNu
J3QgdGhlIGVtcHR5IHN0cmluZywgZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGF0YWJhc2UgdmVy
c2lvbiB3ZSBoYXZlIG1hdGNoZXMgdGhhdCB2ZXJzaW9uLiBPdGhlcndpc2UsIHNldCBhbiBleGNl
cHRpb24uCisgICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXMgdGhlIGVtcHR5IHN0cmlu
ZywgdGhlbiB3ZSBhbHdheXMgcmV0dXJuIHdpdGggd2hhdGV2ZXIgdmVyc2lvbiBvZiB0aGUgZGF0
YWJhc2Ugd2UgaGF2ZS4KKyAgICBpZiAoKCFtX25ldyB8fCBzaG91bGRTZXRWZXJzaW9uSW5OZXdE
YXRhYmFzZSkgJiYgbV9leHBlY3RlZFZlcnNpb24ubGVuZ3RoKCkgJiYgbV9leHBlY3RlZFZlcnNp
b24gIT0gY3VycmVudFZlcnNpb24pIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJwYWdlIGV4
cGVjdHMgdmVyc2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzLCB3aGljaCBhY3R1YWxseSBoYXMgdmVy
c2lvbiBuYW1lICVzIC0gb3BlbkRhdGFiYXNlKCkgY2FsbCB3aWxsIGZhaWwiLCBtX2V4cGVjdGVk
VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwKKyAgICAgICAgICAgIGRhdGFiYXNlRGVidWdOYW1lKCku
YXNjaWkoKS5kYXRhKCksIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0
aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9vcGVuZWQgPSB0cnVlOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEFic3RyYWN0RGF0YWJh
c2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7Cit9CisKK1NlY3VyaXR5T3JpZ2luKiBBYnN0cmFjdERh
dGFiYXNlOjpzZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dFRo
cmVhZFNlY3VyaXR5T3JpZ2luLmdldCgpOworfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6
c3RyaW5nSWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZv
ciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQorICAgIHJldHVybiBtX25hbWUudGhyZWFkc2Fm
ZUNvcHkoKTsKK30KKworU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OmRpc3BsYXlOYW1lKCkgY29u
c3QKK3sKKyAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQg
c2FmZXR5CisgICAgcmV0dXJuIG1fZGlzcGxheU5hbWUudGhyZWFkc2FmZUNvcHkoKTsKK30KKwor
dW5zaWduZWQgbG9uZyBBYnN0cmFjdERhdGFiYXNlOjplc3RpbWF0ZWRTaXplKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9lc3RpbWF0ZWRTaXplOworfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFz
ZTo6ZmlsZU5hbWUoKSBjb25zdAoreworICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVm
IGNvdW50aW5nIHRocmVhZCBzYWZldHkKKyAgICByZXR1cm4gbV9maWxlbmFtZS50aHJlYWRzYWZl
Q29weSgpOworfQorCisvLyBzdGF0aWMKK2NvbnN0IFN0cmluZyYgQWJzdHJhY3REYXRhYmFzZTo6
ZGF0YWJhc2VWZXJzaW9uS2V5KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
a2V5LCAoIldlYktpdERhdGFiYXNlVmVyc2lvbktleSIpKTsKKyAgICByZXR1cm4ga2V5OworfQor
Citib29sIEFic3RyYWN0RGF0YWJhc2U6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2
ZXJzaW9uKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBnZXRWZXJzaW9uUXVl
cnksICgiU0VMRUNUIHZhbHVlIEZST00gIiArIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiBX
SEVSRSBrZXkgPSAnIiArIGRhdGFiYXNlVmVyc2lvbktleSgpICsgIic7IikpOworCisgICAgbV9k
YXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKKworICAgIGJvb2wgcmVzdWx0ID0gcmV0cmll
dmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIGdldFZlcnNpb25RdWVy
eS50aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwg
ZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0
aG9yaXplci0+ZW5hYmxlKCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFic3Ry
YWN0RGF0YWJhc2U6OnNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikK
K3sKKyAgICAvLyBUaGUgSU5TRVJUIHdpbGwgcmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeSBmb3Ig
dGhlIGRhdGFiYXNlIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG51bWJlciwgZHVlIHRvIHRoZSBVTklR
VUUgT04gQ09ORkxJQ1QgUkVQTEFDRQorICAgIC8vIGNsYXVzZSBpbiB0aGUgQ1JFQVRFIHN0YXRl
bWVudCAoc2VlIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSgpKS4KKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgc2V0VmVyc2lvblF1ZXJ5LCAoIklOU0VSVCBJTlRPICIgKyBk
YXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgKGtleSwgdmFsdWUpIFZBTFVFUyAoJyIgKyBkYXRh
YmFzZVZlcnNpb25LZXkoKSArICInLCA/KTsiKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXpl
ci0+ZGlzYWJsZSgpOworCisgICAgYm9vbCByZXN1bHQgPSBzZXRUZXh0VmFsdWVJbkRhdGFiYXNl
KG1fc3FsaXRlRGF0YWJhc2UsIHNldFZlcnNpb25RdWVyeS50aHJlYWRzYWZlQ29weSgpLCB2ZXJz
aW9uKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0
IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgKCVzKSIsIHZlcnNpb24uYXNjaWkoKS5kYXRhKCksIHNl
dFZlcnNpb25RdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXpl
ci0+ZW5hYmxlKCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFic3RyYWN0RGF0
YWJhc2U6OnZlcnNpb25NYXRjaGVzRXhwZWN0ZWQoKSBjb25zdAoreworICAgIGlmICghbV9leHBl
Y3RlZFZlcnNpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlk
TXV0ZXgoKSk7CisgICAgICAgIHJldHVybiBtX2V4cGVjdGVkVmVyc2lvbiA9PSBndWlkVG9WZXJz
aW9uTWFwKCkuZ2V0KG1fZ3VpZCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVy
c2lvbikKK3sKKyAgICBtX2V4cGVjdGVkVmVyc2lvbiA9IHZlcnNpb24udGhyZWFkc2FmZUNvcHko
KTsKKyAgICAvLyBVcGRhdGUgdGhlIGluIG1lbW9yeSBkYXRhYmFzZSB2ZXJzaW9uIG1hcC4KKyAg
ICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgIHVwZGF0ZUd1aWRWZXJzaW9u
TWFwKG1fZ3VpZCwgdmVyc2lvbik7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6ZGlzYWJs
ZUF1dGhvcml6ZXIoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAg
bV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFi
YXNlOjplbmFibGVBdXRob3JpemVyKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6
ZXIpOworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKK30KKwordm9pZCBBYnN0
cmFjdERhdGFiYXNlOjpzZXRBdXRob3JpemVyUmVhZE9ubHkoKQoreworICAgIEFTU0VSVChtX2Rh
dGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFJlYWRPbmx5
KCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFz
ZSgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9k
YXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKK30KKworYm9v
bCBBYnN0cmFjdERhdGFiYXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0KCkKK3sKKyAgICBBU1NFUlQo
bV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+
bGFzdEFjdGlvbldhc0luc2VydCgpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlc2V0
RGVsZXRlcygpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2Rh
dGFiYXNlQXV0aG9yaXplci0+cmVzZXREZWxldGVzKCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRh
YmFzZTo6aGFkRGVsZXRlcygpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsK
KyAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmhhZERlbGV0ZXMoKTsKK30KKwordm9p
ZCBBYnN0cmFjdERhdGFiYXNlOjpyZXNldEF1dGhvcml6ZXIoKQoreworICAgIGlmIChtX2RhdGFi
YXNlQXV0aG9yaXplcikKKyAgICAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAkocmV2aXNpb24gNjE5NTMpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwx
MyArMzIsMjEgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgorI2lmbmRlZiBOREVCVUcK
KyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgRGF0YWJhc2VBdXRob3JpemVyOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2Rl
OworCiBjbGFzcyBBYnN0cmFjdERhdGFiYXNlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8QWJz
dHJhY3REYXRhYmFzZT4gewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7
CkBAIC00NiwxNSArNTQsNzAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+QWJzdHJhY3REYXRh
YmFzZSgpOwogCi0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNl
Y3VyaXR5T3JpZ2luKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0lkZW50
aWZpZXIoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0OworCisgICAgYm9vbCBvcGVuZWQoKSBjb25zdCB7IHJl
dHVybiBtX29wZW5lZDsgfQorICAgIGJvb2wgaXNOZXcoKSBjb25zdCB7IHJldHVybiBtX25ldzsg
fQorCisgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3Q7
CisgICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGZp
bGVOYW1lKCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogbW92ZSBhbGwgdmVyc2lvbi1yZWxhdGVk
IG1ldGhvZHMgdG8gYSBEYXRhYmFzZVZlcnNpb25UcmFja2VyIGNsYXNzCisgICAgYm9vbCB2ZXJz
aW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRFeHBlY3RlZFZlcnNpb24o
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICBib29sIGdldFZlcnNpb25Gcm9tRGF0YWJhc2Uo
U3RyaW5nJiB2ZXJzaW9uKTsKKyAgICBib29sIHNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0
cmluZyYgdmVyc2lvbik7CisKKyAgICB2b2lkIGRpc2FibGVBdXRob3JpemVyKCk7CisgICAgdm9p
ZCBlbmFibGVBdXRob3JpemVyKCk7CisgICAgdm9pZCBzZXRBdXRob3JpemVyUmVhZE9ubHkoKTsK
KyAgICBib29sIGxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKKyAgICBib29sIGxhc3RBY3Rp
b25XYXNJbnNlcnQoKTsKKyAgICB2b2lkIHJlc2V0RGVsZXRlcygpOworICAgIGJvb2wgaGFkRGVs
ZXRlcygpOworICAgIHZvaWQgcmVzZXRBdXRob3JpemVyKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
bWFya0FzRGVsZXRlZEFuZENsb3NlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZUltbWVk
aWF0ZWx5KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAwOworCitwcm90ZWN0ZWQ6
CisgICAgQWJzdHJhY3REYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKKyAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSk7CisKKyAgICB2b2lkIGNsb3NlRGF0YWJhc2UoKTsKKworICAgIHZpcnR1YWwgYm9vbCBw
ZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBF
eGNlcHRpb25Db2RlJiBlYyk7CisKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlu
Zm9UYWJsZU5hbWUoKTsKKworICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2NvbnRl
eHRUaHJlYWRTZWN1cml0eU9yaWdpbjsKKworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5n
IG1fZXhwZWN0ZWRWZXJzaW9uOworICAgIFN0cmluZyBtX2Rpc3BsYXlOYW1lOworICAgIHVuc2ln
bmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOworICAgIFN0cmluZyBtX2ZpbGVuYW1lOworCisgICAg
U1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFzZTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBT
dHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRUaHJlYWRT
ZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSArICI6OiIgKyBtX25hbWU7IH0KKyNlbmRpZgorCitw
cml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFiYXNlVmVyc2lvbktleSgpOwor
CisgICAgaW50IG1fZ3VpZDsKKyAgICBib29sIG1fb3BlbmVkOworICAgIGJvb2wgbV9uZXc7CisK
KyAgICBSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVyPiBtX2RhdGFiYXNlQXV0aG9yaXplcjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNp
b24gNjE5NTMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw3ICszMSw2IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiQ2hh
bmdlVmVyc2lvbldyYXBwZXIuaCIKLSNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKICNp
bmNsdWRlICJEYXRhYmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAj
aW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKQEAgLTUwLDcgKzQ5LDYgQEAKICNpbmNsdWRlICJT
Y3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2lu
Y2x1ZGUgIlZvaWRDYWxsYmFjay5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgpAQCAtNjQsODEgKzYyLDI3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotLy8gSWYgd2Ugc2xlZXAgZm9yIG1vcmUgdGhlIDMwIHNlY29uZHMgd2hpbGUgYmxv
Y2tlZCBvbiBTUUxJVEVfQlVTWSwgZ2l2ZSB1cC4KLXN0YXRpYyBjb25zdCBpbnQgbWF4U3FsaXRl
QnVzeVdhaXRUaW1lID0gMzAwMDA7Ci0KLWNvbnN0IFN0cmluZyYgRGF0YWJhc2U6OmRhdGFiYXNl
SW5mb1RhYmxlTmFtZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG5hbWUs
ICgiX19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fIikpOwotICAgIHJldHVybiBuYW1lOwotfQot
Ci1zdGF0aWMgTXV0ZXgmIGd1aWRNdXRleCgpCi17Ci0gICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2
ZSB0byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljIGhlcmUgYmVjYXVzZQotICAgIC8v
IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgaW4gdGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBt
YWluIHRocmVhZAotICAgIC8vIGJlZm9yZSBhbnkgb3RoZXIgdGhyZWFkcyB0aGF0IGNhbGwgdGhp
cyBmdW5jdGlvbiBhcmUgdXNlZC4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBtdXRl
eCwgKCkpOwotICAgIHJldHVybiBtdXRleDsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPGludCwgU3Ry
aW5nPiBHdWlkVmVyc2lvbk1hcDsKLXN0YXRpYyBHdWlkVmVyc2lvbk1hcCYgZ3VpZFRvVmVyc2lv
bk1hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkVmVyc2lvbk1hcCwgbWFwLCAo
KSk7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotLy8gTk9URTogQ2FsbGVyIG11c3QgbG9jayBndWlk
TXV0ZXgoKS4KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVHdWlkVmVyc2lvbk1hcChpbnQgZ3Vp
ZCwgU3RyaW5nIG5ld1ZlcnNpb24pCi17Ci0gICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXggaXMg
bG9ja2VkLgotICAgIEFTU0VSVCghZ3VpZE11dGV4KCkudHJ5TG9jaygpKTsKLQotICAgIC8vIE5v
dGU6IEl0IGlzIG5vdCBzYWZlIHRvIHB1dCBhbiBlbXB0eSBzdHJpbmcgaW50byB0aGUgZ3VpZFRv
VmVyc2lvbk1hcCgpIG1hcC4KLSAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGUgbWFwIGlzIGNyb3Nz
LXRocmVhZCwgYnV0IGVtcHR5IHN0cmluZ3MgYXJlIHBlci10aHJlYWQuCi0gICAgLy8gVGhlIGNv
cHkoKSBmdW5jdGlvbiBtYWtlcyBhIHZlcnNpb24gb2YgdGhlIHN0cmluZyB5b3UgY2FuIHVzZSBv
biB0aGUgY3VycmVudAotICAgIC8vIHRocmVhZCwgYnV0IHdlIG5lZWQgYSBzdHJpbmcgd2UgY2Fu
IGtlZXAgaW4gYSBjcm9zcy10aHJlYWQgZGF0YSBzdHJ1Y3R1cmUuCi0gICAgLy8gRklYTUU6IFRo
aXMgaXMgYSBxdWl0ZS1hd2t3YXJkIHJlc3RyaWN0aW9uIHRvIGhhdmUgdG8gcHJvZ3JhbSB3aXRo
LgotCi0gICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIGNvbW1lbnQg
YWJvdmUpLgotICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5zZXQoZ3VpZCwgbmV3VmVyc2lvbi5pc0Vt
cHR5KCkgPyBTdHJpbmcoKSA6IG5ld1ZlcnNpb24udGhyZWFkc2FmZUNvcHkoKSk7Ci19Ci0KLXR5
cGVkZWYgSGFzaE1hcDxpbnQsIEhhc2hTZXQ8RGF0YWJhc2UqPio+IEd1aWREYXRhYmFzZU1hcDsK
LXN0YXRpYyBHdWlkRGF0YWJhc2VNYXAmIGd1aWRUb0RhdGFiYXNlTWFwKCkKLXsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEd1aWREYXRhYmFzZU1hcCwgbWFwLCAoKSk7Ci0gICAgcmV0dXJuIG1h
cDsKLX0KLQotc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VWZXJzaW9uS2V5KCkKLXsKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywga2V5LCAoIldlYktpdERhdGFiYXNlVmVyc2lv
bktleSIpKTsKLSAgICByZXR1cm4ga2V5OwotfQotCi1zdGF0aWMgaW50IGd1aWRGb3JPcmlnaW5B
bmROYW1lKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotCiBjbGFz
cyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlQ3Jl
YXRpb25DYWxsYmFja1Rhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSkK
KyAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrPiBjcmVh
dGUoUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxs
YmFjaz4gY3JlYXRpb25DYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRGF0YWJh
c2VDcmVhdGlvbkNhbGxiYWNrVGFzayhkYXRhYmFzZSk7CisgICAgICAgIHJldHVybiBuZXcgRGF0
YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayhkYXRhYmFzZSwgY3JlYXRpb25DYWxsYmFjayk7CiAg
ICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgbV9kYXRhYmFzZS0+cGVyZm9ybUNyZWF0aW9uQ2Fs
bGJhY2soKTsKKyAgICAgICAgbV9jcmVhdGlvbkNhbGxiYWNrLT5oYW5kbGVFdmVudChjb250ZXh0
LCBtX2RhdGFiYXNlLmdldCgpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VDcmVh
dGlvbkNhbGxiYWNrVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSkKKyAgICBEYXRh
YmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBQ
YXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNhbGxiYWNrKQogICAgICAgICA6IG1fZGF0YWJh
c2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9jcmVhdGlvbkNhbGxiYWNrKGNhbGxiYWNrKQogICAg
IHsKICAgICB9CiAKICAgICBSZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgUmVmUHRy
PERhdGFiYXNlQ2FsbGJhY2s+IG1fY3JlYXRpb25DYWxsYmFjazsKIH07CiAKIFBhc3NSZWZQdHI8
RGF0YWJhc2U+IERhdGFiYXNlOjpvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLApAQCAtMTQ3LDE0ICs5MSwxMyBAQCBQYXNzUmVm
UHRyPERhdGFiYXNlPiBEYXRhYmFzZTo6b3BlbkRhdGFiCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUmIGUpCiB7CiAgICAgaWYgKCFEYXRh
YmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1l
LCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoZXJl
IHNob3VsZCBiZSBhbiBleGNlcHRpb24gcmFpc2VkIGhlcmUgaW4gYWRkaXRpb24gdG8gcmV0dXJu
aW5nIGEgbnVsbCBEYXRhYmFzZSBvYmplY3QuICBUaGUgcXVlc3Rpb24gaGFzIGJlZW4gcmFpc2Vk
IHdpdGggdGhlIFdIQVRXRy4KICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBm
b3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgp
LmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0cjxEYXRhYmFzZT4g
ZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRW
ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaykpOwor
ICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2UoY29u
dGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkp
OwogCi0gICAgaWYgKCFkYXRhYmFzZS0+b3BlbkFuZFZlcmlmeVZlcnNpb24oZSkpIHsKKyAgICBp
ZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbighY3JlYXRpb25DYWxsYmFjaywgZSkp
IHsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJGYWlsZWQgdG8gb3BlbiBhbmQgdmVyaWZ5IHZl
cnNpb24gKGV4cGVjdGVkICVzKSBvZiBkYXRhYmFzZSAlcyIsIGV4cGVjdGVkVmVyc2lvbi5hc2Np
aSgpLmRhdGEoKSwgZGF0YWJhc2UtPmRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkp
OwogICAgICAgICBjb250ZXh0LT5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOwog
ICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0
YWJhc2UuZ2V0KCkpOwpAQCAtMTc2LDU3ICsxMTksMjggQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4g
RGF0YWJhc2U6Om9wZW5EYXRhYgogICAgIC8vIHZlcnNpb24gdG8gIiIgYW5kIHNjaGVkdWxlIHRo
ZSBjcmVhdGlvbiBjYWxsYmFjay4gQmVjYXVzZSBvZiBzb21lIHN1YnRsZSBTdHJpbmcKICAgICAv
LyBpbXBsZW1lbnRhdGlvbiBpc3N1ZXMsIHdlIGhhdmUgdG8gcmVzZXQgbV9leHBlY3RlZFZlcnNp
b24gaGVyZSBpbnN0ZWFkIG9mIGRvaW5nCiAgICAgLy8gaXQgaW5zaWRlIHBlcmZvcm1PcGVuQW5k
VmVyaWZ5KCkgd2hpY2ggaXMgcnVuIG9uIHRoZSBEQiB0aHJlYWQuCi0gICAgaWYgKGRhdGFiYXNl
LT5pc05ldygpICYmIGRhdGFiYXNlLT5tX2NyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKKyAgICBp
ZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgewogICAgICAg
ICBkYXRhYmFzZS0+bV9leHBlY3RlZFZlcnNpb24gPSAiIjsKICAgICAgICAgTE9HKFN0b3JhZ2VB
UEksICJTY2hlZHVsaW5nIERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2sgZm9yIGRhdGFiYXNl
ICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7Ci0gICAgICAgIGRhdGFiYXNlLT5tX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPnBvc3RUYXNrKERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2s6OmNyZWF0
ZShkYXRhYmFzZSkpOworICAgICAgICBkYXRhYmFzZS0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5wb3N0VGFzayhEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrOjpjcmVhdGUoZGF0YWJhc2Us
IGNyZWF0aW9uQ2FsbGJhY2spKTsKICAgICB9CiAKICAgICByZXR1cm4gZGF0YWJhc2U7CiB9CiAK
LURhdGFiYXNlOjpEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaykKLSAgICA6IG1fdHJhbnNhY3Rpb25J
blByb2dyZXNzKGZhbHNlKQorRGF0YWJhc2U6OkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZl
cnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSkKKyAgICA6IEFic3RyYWN0RGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJz
aW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkKKyAgICAsIG1fdHJhbnNhY3Rpb25JblBy
b2dyZXNzKGZhbHNlKQogICAgICwgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkKHRydWUpCi0g
ICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKLSAgICAsIG1fbmFtZShuYW1l
LmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX2d1aWQoMCkKLSAgICAsIG1fZXhwZWN0ZWRW
ZXJzaW9uKGV4cGVjdGVkVmVyc2lvbi5jcm9zc1RocmVhZFN0cmluZygpKQotICAgICwgbV9kaXNw
bGF5TmFtZShkaXNwbGF5TmFtZS5jcm9zc1RocmVhZFN0cmluZygpKQotICAgICwgbV9lc3RpbWF0
ZWRTaXplKGVzdGltYXRlZFNpemUpCiAgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCiAgICAgLCBtX3N0
b3BwZWQoZmFsc2UpCi0gICAgLCBtX29wZW5lZChmYWxzZSkKLSAgICAsIG1fbmV3KGZhbHNlKQot
ICAgICwgbV9jcmVhdGlvbkNhbGxiYWNrKGNyZWF0aW9uQ2FsbGJhY2spCiB7Ci0gICAgQVNTRVJU
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSk7Ci0gICAgbV9jb250ZXh0VGhyZWFkU2Vj
dXJpdHlPcmlnaW4gPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7
CiAgICAgbV9kYXRhYmFzZVRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9jb250ZXh0VGhyZWFkU2Vj
dXJpdHlPcmlnaW4tPnRocmVhZHNhZmVDb3B5KCk7Ci0gICAgaWYgKG1fbmFtZS5pc051bGwoKSkK
LSAgICAgICAgbV9uYW1lID0gIiI7CiAKICAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXpl
VGhyZWFkaW5nKCk7Ci0KLSAgICBtX2d1aWQgPSBndWlkRm9yT3JpZ2luQW5kTmFtZShzZWN1cml0
eU9yaWdpbigpLT50b1N0cmluZygpLCBuYW1lKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLQotICAgICAgICBIYXNoU2V0PERhdGFiYXNlKj4qIGhh
c2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmdldChtX2d1aWQpOwotICAgICAgICBpZiAoIWhh
c2hTZXQpIHsKLSAgICAgICAgICAgIGhhc2hTZXQgPSBuZXcgSGFzaFNldDxEYXRhYmFzZSo+Owot
ICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VNYXAoKS5zZXQobV9ndWlkLCBoYXNoU2V0KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGhhc2hTZXQtPmFkZCh0aGlzKTsKLSAgICB9Ci0KICAgICBBU1NF
UlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKTsKLSAgICBtX2Zp
bGVuYW1lID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZnVsbFBhdGhGb3JEYXRhYmFzZShz
ZWN1cml0eU9yaWdpbigpLCBtX25hbWUpOwogCi0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
KCkuYWRkT3BlbkRhdGFiYXNlKHRoaXMpOwotICAgIGNvbnRleHQtPmFkZE9wZW5EYXRhYmFzZSh0
aGlzKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZE9wZW5EYXRhYmFzZSh0aGlz
KTsKIH0KIAogY2xhc3MgRGVyZWZDb250ZXh0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrIHsKQEAgLTI1MywxNSArMTY3LDIxIEBAIERhdGFiYXNlOjp+RGF0YWJhc2Uo
KQogICAgIH0KIH0KIAotYm9vbCBEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24oRXhjZXB0
aW9uQ29kZSYgZSkKK1N0cmluZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0Cit7CisgICAgaWYg
KG1fZGVsZXRlZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBBYnN0cmFj
dERhdGFiYXNlOjp2ZXJzaW9uKCk7Cit9CisKK2Jvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlW
ZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGUpCiB7
CiAgICAgaWYgKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplciA9IERhdGFiYXNl
QXV0aG9yaXplcjo6Y3JlYXRlKCk7CiAKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICBE
YXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgc3luY2hyb25pemVyOwotICAgIE93blB0cjxEYXRhYmFz
ZU9wZW5UYXNrPiB0YXNrID0gRGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRoaXMsICZzeW5jaHJv
bml6ZXIsIGUsIHN1Y2Nlc3MpOworICAgIE93blB0cjxEYXRhYmFzZU9wZW5UYXNrPiB0YXNrID0g
RGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRoaXMsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCAm
c3luY2hyb25pemVyLCBlLCBzdWNjZXNzKTsKIAogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRhc2sucmVsZWFzZSgp
KTsKICAgICBzeW5jaHJvbml6ZXIud2FpdEZvclRhc2tDb21wbGV0aW9uKCk7CkBAIC0yNjksOTMg
KzE4OSw2IEBAIGJvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKEV4Y2UKICAgICBy
ZXR1cm4gc3VjY2VzczsKIH0KIAotCi1zdGF0aWMgYm9vbCByZXRyaWV2ZVRleHRSZXN1bHRGcm9t
RGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBTdHJpbmcm
IHJlc3VsdFN0cmluZykKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVy
eSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVz
dWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBwcmVw
YXJpbmcgc3RhdGVtZW50IHRvIHJlYWQgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwg
cmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgPT0g
U1FMUmVzdWx0Um93KSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IHN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHJlc3VsdCA9
PSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZygpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBMT0dfRVJST1IoIkVycm9y
ICglaSkgcmVhZGluZyB0ZXh0IHJlc3VsdCBmcm9tIGRhdGFiYXNlICglcykiLCByZXN1bHQsIHF1
ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQot
Ym9vbCBEYXRhYmFzZTo6Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24pCi17
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGdldFZlcnNpb25RdWVyeSwgKCJTRUxF
Q1QgdmFsdWUgRlJPTSAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIFdIRVJFIGtleSA9
ICciICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAiJzsiKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0
aG9yaXplci0+ZGlzYWJsZSgpOwotCi0gICAgYm9vbCByZXN1bHQgPSByZXRyaWV2ZVRleHRSZXN1
bHRGcm9tRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgZ2V0VmVyc2lvblF1ZXJ5LnRocmVhZHNh
ZmVDb3B5KCksIHZlcnNpb24pOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byByZXRyaWV2ZSB2ZXJzaW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURl
YnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLQotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5l
bmFibGUoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBib29sIHNldFRleHRW
YWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIs
IHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlm
IChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
cHJlcGFyZSBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzdGF0
ZW1lbnQuYmluZFRleHQoMSwgdmFsdWUpOwotCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAo
KTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gc3RlcCBzdGF0ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcyki
LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6c2V0VmVyc2lvbkluRGF0YWJh
c2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIC8vIFRoZSBJTlNFUlQgd2lsbCByZXBs
YWNlIGFuIGV4aXN0aW5nIGVudHJ5IGZvciB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgbmV3IHZlcnNp
b24gbnVtYmVyLCBkdWUgdG8gdGhlIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFCi0gICAgLy8g
Y2xhdXNlIGluIHRoZSBDUkVBVEUgc3RhdGVtZW50IChzZWUgRGF0YWJhc2U6OnBlcmZvcm1PcGVu
QW5kVmVyaWZ5KCkpLgotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzZXRWZXJzaW9u
UXVlcnksICgiSU5TRVJUIElOVE8gIiArIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiAoa2V5
LCB2YWx1ZSkgVkFMVUVTICgnIiArIGRhdGFiYXNlVmVyc2lvbktleSgpICsgIicsID8pOyIpKTsK
LQotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7Ci0KLSAgICBib29sIHJlc3Vs
dCA9IHNldFRleHRWYWx1ZUluRGF0YWJhc2UobV9zcWxpdGVEYXRhYmFzZSwgc2V0VmVyc2lvblF1
ZXJ5LnRocmVhZHNhZmVDb3B5KCksIHZlcnNpb24pOwotICAgIGlmICghcmVzdWx0KQotICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAoJXMpIiwg
dmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgc2V0VmVyc2lvblF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsK
LQotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLWJvb2wgRGF0YWJhc2U6OnZlcnNpb25NYXRjaGVzRXhwZWN0ZWQoKSBjb25zdAot
ewotICAgIGlmICghbV9leHBlY3RlZFZlcnNpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgICAgIHJldHVybiBtX2V4cGVjdGVkVmVy
c2lvbiA9PSBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KIHZvaWQgRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCiB7
CiAgICAgaWYgKG1fZGVsZXRlZCB8fCAhbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFz
ZVRocmVhZCgpKQpAQCAtNDEwLDMwICsyNDMsMTMgQEAgdm9pZCBEYXRhYmFzZTo6Y2xvc2UoQ2xv
c2VQb2xpY3kgcG9saWN5KQogewogICAgIFJlZlB0cjxEYXRhYmFzZT4gcHJvdGVjdCA9IHRoaXM7
CiAKLSAgICBpZiAoIW1fb3BlbmVkKQotICAgICAgICByZXR1cm47Ci0KICAgICBBU1NFUlQobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKTsKICAgICBBU1NFUlQoY3Vy
cmVudFRocmVhZCgpID09IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQo
KS0+Z2V0VGhyZWFkSUQoKSk7Ci0gICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgIC8v
IE11c3QgcmVmKCkgYmVmb3JlIGNhbGxpbmcgZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJh
c2VDbG9zZWQoKS4KLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFk
KCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKHRoaXMpOwotICAgIG1fb3BlbmVkID0gZmFsc2U7Ci0K
LSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CiAKLSAgICAg
ICAgSGFzaFNldDxEYXRhYmFzZSo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQo
bV9ndWlkKTsKLSAgICAgICAgQVNTRVJUKGhhc2hTZXQpOwotICAgICAgICBBU1NFUlQoaGFzaFNl
dC0+Y29udGFpbnModGhpcykpOwotICAgICAgICBoYXNoU2V0LT5yZW1vdmUodGhpcyk7Ci0gICAg
ICAgIGlmIChoYXNoU2V0LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGd1aWRUb0RhdGFiYXNl
TWFwKCkucmVtb3ZlKG1fZ3VpZCk7Ci0gICAgICAgICAgICBkZWxldGUgaGFzaFNldDsKLSAgICAg
ICAgICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5yZW1vdmUobV9ndWlkKTsKLSAgICAgICAgfQotICAg
IH0KKyAgICBjbG9zZURhdGFiYXNlKCk7CiAKKyAgICAvLyBNdXN0IHJlZigpIGJlZm9yZSBjYWxs
aW5nIGRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKCkuCisgICAgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3Nl
ZCh0aGlzKTsKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkt
PnVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKHRoaXMpOwogICAgIGlmIChwb2xpY3kgPT0gUmVtb3Zl
RGF0YWJhc2VGcm9tQ29udGV4dCkKICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5w
b3N0VGFzayhDb250ZXh0UmVtb3ZlT3BlbkRhdGFiYXNlVGFzazo6Y3JlYXRlKHRoaXMpKTsKQEAg
LTQ2Myw2ICsyNzksOSBAQCB2b2lkIERhdGFiYXNlOjpzdG9wKCkKICAgICAgICAgbV9pc1RyYW5z
YWN0aW9uUXVldWVFbmFibGVkID0gZmFsc2U7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dy
ZXNzID0gZmFsc2U7CiAgICAgfQorCisgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
ZGF0YWJhc2VUaHJlYWQoKSkKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRh
YmFzZVRocmVhZCgpLT51bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyh0aGlzKTsKIH0KIAogdW5zaWdu
ZWQgbG9uZyBsb25nIERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0CkBAIC00NzAsNzkgKzI4
OSw2IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZTo6bWF4aW11bVNpemUKICAgICByZXR1
cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKHRoaXMp
OwogfQogCi12b2lkIERhdGFiYXNlOjpkaXNhYmxlQXV0aG9yaXplcigpCi17Ci0gICAgQVNTRVJU
KG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJs
ZSgpOwotfQotCi12b2lkIERhdGFiYXNlOjplbmFibGVBdXRob3JpemVyKCkKLXsKLSAgICBBU1NF
UlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFi
bGUoKTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6c2V0QXV0aG9yaXplclJlYWRPbmx5KCkKLXsKLSAg
ICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVy
LT5zZXRSZWFkT25seSgpOwotfQotCi1ib29sIERhdGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERh
dGFiYXNlKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIHJldHVy
biBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwotfQot
Ci1ib29sIERhdGFiYXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0KCkKLXsKLSAgICBBU1NFUlQobV9k
YXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFz
dEFjdGlvbldhc0luc2VydCgpOwotfQotCi12b2lkIERhdGFiYXNlOjpyZXNldERlbGV0ZXMoKQot
ewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhv
cml6ZXItPnJlc2V0RGVsZXRlcygpOwotfQotCi1ib29sIERhdGFiYXNlOjpoYWREZWxldGVzKCkK
LXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIHJldHVybiBtX2RhdGFi
YXNlQXV0aG9yaXplci0+aGFkRGVsZXRlcygpOwotfQotCi1zdGF0aWMgaW50IGd1aWRGb3JPcmln
aW5BbmROYW1lKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgU3RyaW5nIHN0cmluZ0lEOwotICAgIGlmIChvcmlnaW4uZW5kc1dpdGgoIi8iKSkKLSAgICAg
ICAgc3RyaW5nSUQgPSBvcmlnaW4gKyBuYW1lOwotICAgIGVsc2UKLSAgICAgICAgc3RyaW5nSUQg
PSBvcmlnaW4gKyAiLyIgKyBuYW1lOwotCi0gICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1
c2UgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljIGhlcmUgYmVjYXVzZQotICAgIC8vIHRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgaW4gdGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRo
cmVhZAotICAgIC8vIGJlZm9yZSBhbnkgb3RoZXIgdGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5j
dGlvbiBhcmUgdXNlZC4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBzdHJpbmdJZGVu
dGlmaWVyTXV0ZXgsICgpKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIoc3RyaW5nSWRlbnRpZmll
ck11dGV4KTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IElER3VpZE1hcDsKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKElER3VpZE1hcCwgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1h
cCwgKCkpOwotICAgIGludCBndWlkID0gc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcC5nZXQoc3Ry
aW5nSUQpOwotICAgIGlmICghZ3VpZCkgewotICAgICAgICBzdGF0aWMgaW50IGN1cnJlbnROZXdH
VUlEID0gMTsKLSAgICAgICAgZ3VpZCA9IGN1cnJlbnROZXdHVUlEKys7Ci0gICAgICAgIHN0cmlu
Z0lkZW50aWZpZXJUb0dVSURNYXAuc2V0KHN0cmluZ0lELCBndWlkKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZ3VpZDsKLX0KLQotdm9pZCBEYXRhYmFzZTo6cmVzZXRBdXRob3JpemVyKCkKLXsKLSAg
ICBpZiAobV9kYXRhYmFzZUF1dGhvcml6ZXIpCi0gICAgICAgIG1fZGF0YWJhc2VBdXRob3JpemVy
LT5yZXNldCgpOwotfQotCiB2b2lkIERhdGFiYXNlOjpwZXJmb3JtUG9saWN5Q2hlY2tzKCkKIHsK
ICAgICAvLyBGSVhNRTogQ29kZSBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgd2lsbCBuZWVkIHRv
IGJlIHJ1biB0byBlbmZvcmNlIHRoZSBwZXItb3JpZ2luIHNpemUgbGltaXQgdGhlIHNwZWMgbWFu
ZGF0ZXMuCkBAIC01NTcsOTIgKzMwMywxNiBAQCB2b2lkIERhdGFiYXNlOjpwZXJmb3JtUG9saWN5
Q2hlY2tzKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIERhdGFiYXNlOjpwZXJm
b3JtT3BlbkFuZFZlcmlmeShFeGNlcHRpb25Db2RlJiBlKQorYm9vbCBEYXRhYmFzZTo6cGVyZm9y
bU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29k
ZSYgZSkKIHsKLSAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2Uub3BlbihtX2ZpbGVuYW1lLCB0cnVl
KSkgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIGRhdGFiYXNlIGF0IHBhdGgg
JXMiLCBtX2ZpbGVuYW1lLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgZSA9IElOVkFMSURfU1RB
VEVfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghbV9zcWxpdGVE
YXRhYmFzZS50dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1dW0oKSkKLSAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gdHVybiBvbiBpbmNyZW1lbnRhbCBhdXRvLXZhY3V1bSBmb3IgZGF0YWJhc2Ug
JXMiLCBtX2ZpbGVuYW1lLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBpZiAoQWJzdHJhY3REYXRhYmFz
ZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGUpKSB7Cisg
ICAgICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpCisg
ICAgICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnJl
Y29yZERhdGFiYXNlT3Blbih0aGlzKTsKIAotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXpl
cik7Ci0gICAgbV9zcWxpdGVEYXRhYmFzZS5zZXRBdXRob3JpemVyKG1fZGF0YWJhc2VBdXRob3Jp
emVyKTsKLSAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEJ1c3lUaW1lb3V0KG1heFNxbGl0ZUJ1c3lX
YWl0VGltZSk7Ci0KLSAgICBTdHJpbmcgY3VycmVudFZlcnNpb247Ci0gICAgewotICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotCi0gICAgICAgIEd1aWRWZXJzaW9uTWFw
OjppdGVyYXRvciBlbnRyeSA9IGd1aWRUb1ZlcnNpb25NYXAoKS5maW5kKG1fZ3VpZCk7Ci0gICAg
ICAgIGlmIChlbnRyeSAhPSBndWlkVG9WZXJzaW9uTWFwKCkuZW5kKCkpIHsKLSAgICAgICAgICAg
IC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSB1cGRhdGVHdWlkVmVyc2lv
bk1hcCgpKS4KLSAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gZW50cnktPnNlY29uZC5pc051
bGwoKSA/IFN0cmluZygiIikgOiBlbnRyeS0+c2Vjb25kOwotICAgICAgICAgICAgTE9HKFN0b3Jh
Z2VBUEksICJDdXJyZW50IGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIGlzICVzIiwgbV9ndWlk
LCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBMT0coU3RvcmFnZUFQSSwgIk5vIGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIiwg
bV9ndWlkKTsKLQotICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnRhYmxlRXhpc3Rz
KGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkgewotICAgICAgICAgICAgICAgIG1fbmV3ID0gdHJ1
ZTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZCgiQ1JFQVRFIFRBQkxFICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgKGtleSBURVhU
IE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsdmFs
dWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsiKSkgewotICAgICAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgdGFibGUgJXMgaW4gZGF0YWJhc2UgJXMi
LCBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05h
bWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBJTlZBTElEX1NU
QVRFX0VSUjsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUg
ZGF0YWJhc2UgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9z
ZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWdldFZlcnNpb25Gcm9tRGF0YWJh
c2UoY3VycmVudFZlcnNpb24pKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gZ2V0IGN1cnJlbnQgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05h
bWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgZSA9IElOVkFMSURfU1RBVEVf
RVJSOwotICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNl
IGZpbGUuCi0gICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChj
dXJyZW50VmVyc2lvbi5sZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiUmV0cmlldmVkIGN1cnJlbnQgdmVyc2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzIiwgY3VycmVu
dFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRh
KCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbV9uZXcgfHwgIW1fY3JlYXRpb25DYWxsYmFj
aykgewotICAgICAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2V0dGluZyB2ZXJzaW9uICVz
IGluIGRhdGFiYXNlICVzIHRoYXQgd2FzIGp1c3QgY3JlYXRlZCIsIG1fZXhwZWN0ZWRWZXJzaW9u
LmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIXNldFZlcnNpb25JbkRhdGFiYXNlKG1fZXhwZWN0ZWRWZXJzaW9u
KSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdmVyc2lv
biAlcyBpbiBkYXRhYmFzZSAlcyIsIG1fZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBk
YXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ZSA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUg
aGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgICAgICAgICAgICAgICAgICBtX3NxbGl0
ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBtX2V4cGVj
dGVkVmVyc2lvbjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNp
b25NYXAobV9ndWlkLCBjdXJyZW50VmVyc2lvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAoY3VycmVudFZlcnNpb24uaXNOdWxsKCkpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJE
YXRhYmFzZSAlcyBkb2VzIG5vdCBoYXZlIGl0cyB2ZXJzaW9uIHNldCIsIGRhdGFiYXNlRGVidWdO
YW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBjdXJyZW50VmVyc2lvbiA9ICIiOwotICAg
IH0KLQotICAgIC8vIElmIHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlzbid0IHRoZSBlbXB0eSBzdHJp
bmcsIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRhdGFiYXNlIHZlcnNpb24gd2UgaGF2ZSBtYXRj
aGVzIHRoYXQgdmVyc2lvbi4gT3RoZXJ3aXNlLCBzZXQgYW4gZXhjZXB0aW9uLgotICAgIC8vIElm
IHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gd2UgYWx3YXlz
IHJldHVybiB3aXRoIHdoYXRldmVyIHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIHdlIGhhdmUuCi0g
ICAgaWYgKCghbV9uZXcgfHwgIW1fY3JlYXRpb25DYWxsYmFjaykgJiYgbV9leHBlY3RlZFZlcnNp
b24ubGVuZ3RoKCkgJiYgbV9leHBlY3RlZFZlcnNpb24gIT0gY3VycmVudFZlcnNpb24pIHsKLSAg
ICAgICAgTE9HKFN0b3JhZ2VBUEksICJwYWdlIGV4cGVjdHMgdmVyc2lvbiAlcyBmcm9tIGRhdGFi
YXNlICVzLCB3aGljaCBhY3R1YWxseSBoYXMgdmVyc2lvbiBuYW1lICVzIC0gb3BlbkRhdGFiYXNl
KCkgY2FsbCB3aWxsIGZhaWwiLCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwKLSAg
ICAgICAgICAgIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCksIGN1cnJlbnRWZXJz
aW9uLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwotICAg
ICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgICAgICBt
X3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgLy8gQWxsIGNoZWNrcyBwYXNzZWQgYW5kIHdlIHN0
aWxsIGhhdmUgYSBoYW5kbGUgdG8gdGhpcyBkYXRhYmFzZSBmaWxlLgotICAgIC8vIE1ha2Ugc3Vy
ZSBEYXRhYmFzZVRocmVhZCBjbG9zZXMgaXQgd2hlbiBEYXRhYmFzZVRocmVhZCBnb2VzIGF3YXku
Ci0gICAgbV9vcGVuZWQgPSB0cnVlOwotICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmRhdGFiYXNlVGhyZWFkKCkpCi0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0
YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VPcGVuKHRoaXMpOwotCi0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJzaW9u
KGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLApAQCAt
NzU3LDExICs0MjcsNiBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxl
CiAgICAgcmV0dXJuIHRhYmxlTmFtZXM7CiB9CiAKLXZvaWQgRGF0YWJhc2U6OnBlcmZvcm1DcmVh
dGlvbkNhbGxiYWNrKCkKLXsKLSAgICBtX2NyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSwgdGhpcyk7Ci19Ci0KIFNRTFRyYW5zYWN0aW9u
Q2xpZW50KiBEYXRhYmFzZTo6dHJhbnNhY3Rpb25DbGllbnQoKSBjb25zdAogewogICAgIHJldHVy
biBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnRyYW5zYWN0aW9u
Q2xpZW50KCk7CkBAIC03NzIsMTQgKzQzNyw2IEBAIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iq
IERhdGFiYXNlOjp0cmEKICAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRh
YmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7CiB9CiAKLVN0cmluZyBEYXRh
YmFzZTo6dmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAg
cmV0dXJuIGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS50aHJlYWRzYWZlQ29weSgpOwot
fQotCiBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6dGFibGVOYW1lcygpCiB7CiAgICAgLy8gRklY
TUU6IE5vdCB1c2luZyB0aHJlYWRzYWZlQ29weSBvbiB0aGVzZSBzdHJpbmdzIGxvb2tzIG9rIHNp
bmNlIHRocmVhZHMgdGFrZSBzdHJpY3QgdHVybnMKQEAgLTc5NywxNCArNDU0LDYgQEAgVmVjdG9y
PFN0cmluZz4gRGF0YWJhc2U6OnRhYmxlTmFtZXMoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgRGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24p
Ci17Ci0gICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLnRocmVhZHNhZmVDb3B5KCk7Ci0g
ICAgLy8gVXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAuCi0gICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKLSAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcCht
X2d1aWQsIHZlcnNpb24pOwotfQotCiBTZWN1cml0eU9yaWdpbiogRGF0YWJhc2U6OnNlY3VyaXR5
T3JpZ2luKCkgY29uc3QKIHsKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0Nv
bnRleHRUaHJlYWQoKSkKQEAgLTgxNCwyOSArNDYzLDYgQEAgU2VjdXJpdHlPcmlnaW4qIERhdGFi
YXNlOjpzZWN1cml0eU9yaWdpbgogICAgIHJldHVybiAwOwogfQogCi1TdHJpbmcgRGF0YWJhc2U6
OnN0cmluZ0lkZW50aWZpZXIoKSBjb25zdAotewotICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBm
b3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkKLSAgICByZXR1cm4gbV9uYW1lLnRocmVhZHNh
ZmVDb3B5KCk7Ci19Ci0KLVN0cmluZyBEYXRhYmFzZTo6ZGlzcGxheU5hbWUoKSBjb25zdAotewot
ICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkK
LSAgICByZXR1cm4gbV9kaXNwbGF5TmFtZS50aHJlYWRzYWZlQ29weSgpOwotfQotCi11bnNpZ25l
ZCBsb25nIERhdGFiYXNlOjplc3RpbWF0ZWRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9l
c3RpbWF0ZWRTaXplOwotfQotCi1TdHJpbmcgRGF0YWJhc2U6OmZpbGVOYW1lKCkgY29uc3QKLXsK
LSAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5
Ci0gICAgcmV0dXJuIG1fZmlsZW5hbWUudGhyZWFkc2FmZUNvcHkoKTsKLX0KLQogdm9pZCBEYXRh
YmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpCiB7CiAgICAgaW50NjRfdCBmcmVlU3Bh
Y2VTaXplID0gbV9zcWxpdGVEYXRhYmFzZS5mcmVlU3BhY2VTaXplKCk7CkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2UuaAkocmV2aXNpb24gNjE5NTMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsMTggKzMzLDEzIEBACiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFz
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJh
c2UuaCIKLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNlbmRp
ZgogCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEYXRhYmFzZUF1dGhvcml6ZXI7CiBjbGFzcyBE
YXRhYmFzZUNhbGxiYWNrOwotY2xhc3MgRGF0YWJhc2VUaHJlYWQ7CiBjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTUUxUcmFuc2FjdGlv
bjsKQEAgLTU0LDggKzQ5LDYgQEAgY2xhc3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjsKIGNs
YXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKIGNsYXNzIFZvaWRDYWxsYmFjazsKIAot
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQogY2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgQWJz
dHJhY3REYXRhYmFzZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RGF0YWJhc2UoKTsKQEAgLTYz
LDM3ICs1NiwxNyBAQCBwdWJsaWM6CiAgICAgLy8gRGlyZWN0IHN1cHBvcnQgZm9yIHRoZSBET00g
QVBJCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVj
dGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwg
UGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmlu
ZyB2ZXJzaW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0Owog
ICAgIHZvaWQgY2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0
cmluZyYgbmV3VmVyc2lvbiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwKICAg
ICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKTsKICAgICB2b2lk
IHRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKICAgICAgICAgICAgICAgICAgICAgIFBh
c3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpOwog
CiAgICAgLy8gSW50ZXJuYWwgZW5naW5lIHN1cHBvcnQKLSAgICBzdGF0aWMgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKTsKLQotICAgIHZvaWQgZGlzYWJsZUF1dGhvcml6ZXIo
KTsKLSAgICB2b2lkIGVuYWJsZUF1dGhvcml6ZXIoKTsKLSAgICB2b2lkIHNldEF1dGhvcml6ZXJS
ZWFkT25seSgpOwotICAgIGJvb2wgbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwotICAgIGJv
b2wgbGFzdEFjdGlvbldhc0luc2VydCgpOwotICAgIHZvaWQgcmVzZXREZWxldGVzKCk7Ci0gICAg
Ym9vbCBoYWREZWxldGVzKCk7Ci0KICAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzKCk7CiAK
LSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7IH0KICAg
ICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwogICAgIFNR
TGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFzZSgpIHsgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2U7
IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkg
Y29uc3Q7Ci0KLSAgICBib29sIGdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJik7Ci0gICAg
Ym9vbCBzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNldEV4
cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHZlcnNpb25NYXRjaGVzRXhw
ZWN0ZWQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXJrQXNEZWxldGVkQW5kQ2xvc2Uo
KTsKICAgICBib29sIGRlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KQEAgLTEw
MSwyOCArNzQsMjMgQEAgcHVibGljOgogICAgIGVudW0gQ2xvc2VQb2xpY3kgeyBEb05vdFJlbW92
ZURhdGFiYXNlRnJvbUNvbnRleHQsIFJlbW92ZURhdGFiYXNlRnJvbUNvbnRleHQgfTsKICAgICB2
b2lkIGNsb3NlKENsb3NlUG9saWN5KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVs
eSgpOwotICAgIGJvb2wgb3BlbmVkKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuZWQ7IH0KIAotICAg
IHZvaWQgc3RvcCgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAgICAgYm9vbCBzdG9wcGVk
KCkgY29uc3QgeyByZXR1cm4gbV9zdG9wcGVkOyB9CiAKLSAgICBib29sIGlzTmV3KCkgY29uc3Qg
eyByZXR1cm4gbV9uZXc7IH0KLQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFzZVNpemUo
KSBjb25zdDsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKIAog
ICAgIC8vIENhbGxlZCBmcm9tIERhdGFiYXNlVGhyZWFkLCBtdXN0IGJlIHByZXBhcmVkIHRvIHdv
cmsgb24gdGhlIGJhY2tncm91bmQgdGhyZWFkCi0gICAgdm9pZCByZXNldEF1dGhvcml6ZXIoKTsK
ICAgICB2b2lkIHBlcmZvcm1Qb2xpY3lDaGVja3MoKTsKIAotICAgIGJvb2wgcGVyZm9ybU9wZW5B
bmRWZXJpZnkoRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFu
ZFZlcmlmeShib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJik7CiAK
ICAgICB2b2lkIGluUHJvZ3Jlc3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIHZvaWQgc2No
ZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKik7CiAgICAgdm9pZCBzY2hl
ZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlvbiosIGJvb2wgaW1tZWRpYXRlbHkgPSBm
YWxzZSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBwZXJmb3JtR2V0VGFibGVOYW1lcygpOwotICAg
IHZvaWQgcGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2soKTsKIAogICAgIFNRTFRyYW5zYWN0aW9uQ2xp
ZW50KiB0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0OwogICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdDsKQEAgLTEzMSw0NSArOTksMjMg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAot
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0
aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPik7CisgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsK
IAotICAgIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNpb24oRXhjZXB0aW9uQ29kZSYpOworICAgIGJv
b2wgb3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhj
ZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CiAKKyAgICBz
dGF0aWMgdm9pZCBkZWxpdmVyUGVuZGluZ0NhbGxiYWNrKHZvaWQqKTsKKwogICAgIERlcXVlPFJl
ZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBtX3RyYW5zYWN0aW9uUXVldWU7CiAgICAgTXV0ZXggbV90
cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleDsKICAgICBib29sIG1fdHJhbnNhY3Rpb25JblByb2dy
ZXNzOwogICAgIGJvb2wgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkOwogCi0gICAgc3RhdGlj
IHZvaWQgZGVsaXZlclBlbmRpbmdDYWxsYmFjayh2b2lkKik7Ci0KLSAgICBSZWZQdHI8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW47CiAgICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBtX2RhdGFiYXNlVGhyZWFkU2VjdXJpdHlPcmlnaW47Ci0gICAgU3Ry
aW5nIG1fbmFtZTsKLSAgICBpbnQgbV9ndWlkOwotICAgIFN0cmluZyBtX2V4cGVjdGVkVmVyc2lv
bjsKLSAgICBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKLSAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1h
dGVkU2l6ZTsKLSAgICBTdHJpbmcgbV9maWxlbmFtZTsKIAogICAgIGJvb2wgbV9kZWxldGVkOwot
CiAgICAgYm9vbCBtX3N0b3BwZWQ7Ci0KLSAgICBib29sIG1fb3BlbmVkOwotCi0gICAgYm9vbCBt
X25ldzsKLQotICAgIFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7Ci0gICAgUmVmUHRy
PERhdGFiYXNlQXV0aG9yaXplcj4gbV9kYXRhYmFzZUF1dGhvcml6ZXI7Ci0KLSAgICBSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4gbV9jcmVhdGlvbkNhbGxiYWNrOwotCi0jaWZuZGVmIE5ERUJVRwot
ICAgIFN0cmluZyBkYXRhYmFzZURlYnVnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFRo
cmVhZFNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygpICsgIjo6IiArIG1fbmFtZTsgfQotI2VuZGlm
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VBdXRob3JpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VBdXRob3JpemVyLmNwcAkocmV2aXNpb24gNjE5NTMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VBdXRob3JpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTMgKzMwLDE5IEBACiAj
aW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0j
aW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGF0YWJhc2VB
dXRob3JpemVyOjpEYXRhYmFzZUF1dGhvcml6ZXIoKQorUGFzc1JlZlB0cjxEYXRhYmFzZUF1dGhv
cml6ZXI+IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJ
bmZvVGFibGVOYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VBdXRob3Jp
emVyKGRhdGFiYXNlSW5mb1RhYmxlTmFtZSkpOworfQorCitEYXRhYmFzZUF1dGhvcml6ZXI6OkRh
dGFiYXNlQXV0aG9yaXplcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSkKICAg
ICA6IG1fc2VjdXJpdHlFbmFibGVkKGZhbHNlKQorICAgICwgbV9kYXRhYmFzZUluZm9UYWJsZU5h
bWUoZGF0YWJhc2VJbmZvVGFibGVOYW1lKQogewogICAgIHJlc2V0KCk7CiAgICAgYWRkV2hpdGVs
aXN0ZWRGdW5jdGlvbnMoKTsKQEAgLTM4OCw3ICszOTQsNyBAQCB2b2lkIERhdGFiYXNlQXV0aG9y
aXplcjo6c2V0UmVhZE9ubHkoKQogICAgIG1fcmVhZE9ubHkgPSB0cnVlOwogfQogCi1pbnQgRGF0
YWJhc2VBdXRob3JpemVyOjpkZW55QmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmIHRhYmxl
TmFtZSkKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0
IFN0cmluZyYgdGFibGVOYW1lKSBjb25zdAogewogICAgIGlmICghbV9zZWN1cml0eUVuYWJsZWQp
CiAgICAgICAgIHJldHVybiBTUUxBdXRoQWxsb3c7CkBAIC0zOTksNyArNDA1LDcgQEAgaW50IERh
dGFiYXNlQXV0aG9yaXplcjo6ZGVueUJhc2VkT25UYWJsZQogICAgIC8vICAgIGVxdWFsSWdub3Jp
bmdDYXNlKHRhYmxlTmFtZSwgInNxbGl0ZV9zZXF1ZW5jZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KHRhYmxlTmFtZSwgRGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkKICAgICAvLyAg
ICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRh
YmxlTmFtZSwgRGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkKKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UodGFibGVOYW1lLCBtX2RhdGFiYXNlSW5mb1RhYmxlTmFtZSkpCiAgICAg
ICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIHJldHVybiBTUUxBdXRoQWxsb3c7CkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCShyZXZpc2lvbiA2MTk1MykKKysrIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
MTAgKzI4LDExIEBACiAjaWZuZGVmIERhdGFiYXNlQXV0aG9yaXplcl9oCiAjZGVmaW5lIERhdGFi
YXNlQXV0aG9yaXplcl9oCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00Myw3ICs0NCw3IEBAIGV4dGVybiBjb25zdCBpbnQgU1FMQXV0aERl
bnk7CiAKIGNsYXNzIERhdGFiYXNlQXV0aG9yaXplciA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVk
PERhdGFiYXNlQXV0aG9yaXplcj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERh
dGFiYXNlQXV0aG9yaXplcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNl
QXV0aG9yaXplcik7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSk7CiAKICAgICBpbnQg
Y3JlYXRlVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwogICAgIGludCBjcmVhdGVUZW1w
VGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwpAQCAtOTcsOSArOTgsOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYWREZWxldGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYWREZWxldGVzOyB9CiAK
IHByaXZhdGU6Ci0gICAgRGF0YWJhc2VBdXRob3JpemVyKCk7CisgICAgRGF0YWJhc2VBdXRob3Jp
emVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKTsKICAgICB2b2lkIGFkZFdo
aXRlbGlzdGVkRnVuY3Rpb25zKCk7Ci0gICAgaW50IGRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0
IFN0cmluZyYpOworICAgIGludCBkZW55QmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmKSBj
b25zdDsKICAgICBpbnQgdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUoY29uc3QgU3RyaW5n
Jik7CiAKICAgICBib29sIG1fc2VjdXJpdHlFbmFibGVkIDogMTsKQEAgLTEwOCw2ICsxMDksOCBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9yZWFkT25seSA6IDE7CiAgICAgYm9vbCBtX2hhZERlbGV0
ZXMgOiAxOwogCisgICAgY29uc3QgU3RyaW5nIG1fZGF0YWJhc2VJbmZvVGFibGVOYW1lOworCiAg
ICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbV93aGl0ZWxpc3RlZEZ1bmN0aW9u
czsKIH07CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZpc2lvbiA2MTk1MykK
KysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw0MSArMzEsNTAgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICNpbmNsdWRlICJEYXRhYmFz
ZUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
KyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBTdHJpbmcmIERhdGFiYXNlU3luYzo6ZGF0
YWJhc2VJbmZvVGFibGVOYW1lKCkKK1Bhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZVN5
bmM6Om9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRy
PERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBuYW1lLCAoIl9fV2ViS2l0RGF0YWJh
c2VJbmZvVGFibGVfXyIpKTsKLSAgICByZXR1cm4gbmFtZTsKLX0KKyAgICBBU1NFUlQoY29udGV4
dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogCi1QYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJh
c2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLCBQYXNz
UmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBG
SVhNRTogdW5jb21tZW50IHRoZSBhc3NlcnQgb25jZSB3ZSB1c2UgdGhlIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHBhcmFtZXRlcgotICAgIC8vQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVh
ZCgpKTsKKyAgICBpZiAoIURhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmNhbkVzdGFibGlzaERh
dGFiYXNlKGNvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSkgeworICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93
ZWQgdG8gYmUgZXN0YWJsaXNoZWQiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBjb250ZXh0LT5zZWN1
cml0eU9yaWdpbigpLT50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2UgPSBhZG9wdFJl
ZihuZXcgRGF0YWJhc2VTeW5jKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxh
eU5hbWUsIGVzdGltYXRlZFNpemUpKTsKKworICAgIGlmICghZGF0YWJhc2UtPnBlcmZvcm1PcGVu
QW5kVmVyaWZ5KCFjcmVhdGlvbkNhbGxiYWNrLCBlYykpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VB
UEksICJGYWlsZWQgdG8gb3BlbiBhbmQgdmVyaWZ5IHZlcnNpb24gKGV4cGVjdGVkICVzKSBvZiBk
YXRhYmFzZSAlcyIsIGV4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UtPmRh
dGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBEYXRhYmFzZVRyYWNr
ZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRE
YXRhYmFzZURldGFpbHMoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5h
bWUsIGVzdGltYXRlZFNpemUpOworCisgICAgaWYgKGRhdGFiYXNlLT5pc05ldygpICYmIGNyZWF0
aW9uQ2FsbGJhY2suZ2V0KCkpIHsKKyAgICAgICAgZGF0YWJhc2UtPm1fZXhwZWN0ZWRWZXJzaW9u
ID0gIiI7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiSW52b2tpbmcgdGhlIGNyZWF0aW9uIGNh
bGxiYWNrIGZvciBkYXRhYmFzZSAlcFxuIiwgZGF0YWJhc2UuZ2V0KCkpOworICAgICAgICBjcmVh
dGlvbkNhbGxiYWNrLT5oYW5kbGVFdmVudChjb250ZXh0LCBkYXRhYmFzZS5nZXQoKSk7CisgICAg
fQogCi0gICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRh
dGFiYXNlOwogfQogCiBEYXRhYmFzZVN5bmM6OkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0
ZWRWZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNl
Q2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2spCi0gICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoY29udGV4dCkKLSAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAg
LCBtX2V4cGVjdGVkVmVyc2lvbihleHBlY3RlZFZlcnNpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKSkK
LSAgICAsIG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAg
ICAsIG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRTaXplKQotICAgICwgbV9jcmVhdGlvbkNhbGxi
YWNrKGNyZWF0aW9uQ2FsbGJhY2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCisgICAgOiBB
YnN0cmFjdERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5h
bWUsIGVzdGltYXRlZFNpemUpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVh
ZCgpKTsKIH0KIAogRGF0YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5jKCkKQEAgLTczLDI2ICs4Miw2
MCBAQCBEYXRhYmFzZVN5bmM6On5EYXRhYmFzZVN5bmMoKQogICAgIEFTU0VSVChtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAotU3RyaW5nIERhdGFiYXNl
U3luYzo6dmVyc2lvbigpIGNvbnN0Cit2b2lkIERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbihj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3lu
Y0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIHJldHVybiBTdHJpbmcoKTsKIH0K
IAotdm9pZCBEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIEV4Y2VwdGlv
bkNvZGUmKQordm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sLCBFeGNlcHRpb25Db2RlJikKIHsKICAgICBBU1NF
UlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiB9CiAKLXZv
aWQgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3lu
Y0NhbGxiYWNrPiwgYm9vbCwgRXhjZXB0aW9uQ29kZSYpCit2b2lkIERhdGFiYXNlU3luYzo6bWFy
a0FzRGVsZXRlZEFuZENsb3NlKCkKIHsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gZG8gc29tZXRo
aW5nIHNpbWlsYXIgdG8gY2xvc2VJbW1lZGlhdGVseSgpLCBidXQgaW4gYSBzeW5jIHdheQorfQor
CitjbGFzcyBDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2sgOiBwdWJsaWMgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0
cjxEYXRhYmFzZVN5bmM+IGRhdGFiYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDbG9z
ZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2soZGF0YWJhc2UpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKKyAgICB7
CisgICAgICAgIG1fZGF0YWJhc2UtPmNsb3NlSW1tZWRpYXRlbHkoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgQ2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrKFBhc3NSZWZQdHI8
RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQor
ICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBtX2RhdGFiYXNlOworfTsK
Kwordm9pZCBEYXRhYmFzZVN5bmM6OmNsb3NlSW1tZWRpYXRlbHkoKQoreworICAgIGlmICghbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkgeworICAgICAgICBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKENsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0
VGhyZWFkVGFzazo6Y3JlYXRlKHRoaXMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghb3BlbmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZSh0aGlzKTsKKworICAgIGNsb3NlRGF0YWJhc2Uo
KTsKIH0KIAotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogRGF0YWJhc2VTeW5jOjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QKK3ZvaWQgRGF0YWJhc2VTeW5jOjpzdG9wKCkKIHsKLSAgICBB
U1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAg
cmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKTsKKyAgICBjbG9zZUltbWVkaWF0
ZWx5KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VT
eW5jLmgJKHJldmlzaW9uIDYxOTUzKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw0OCArMzAsMzcgQEAKICNkZWZpbmUgRGF0YWJhc2VTeW5j
X2gKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKIGNsYXNzIFNRTFRy
YW5zYWN0aW9uU3luY0NhbGxiYWNrOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQot
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiAvLyBJ
bnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9u
IHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KLWNsYXNzIERhdGFiYXNlU3luYyA6IHB1Ymxp
YyBSZWZDb3VudGVkPERhdGFiYXNlU3luYz4geworY2xhc3MgRGF0YWJhc2VTeW5jIDogcHVibGlj
IEFic3RyYWN0RGF0YWJhc2UgewogcHVibGljOgotICAgIH5EYXRhYmFzZVN5bmMoKTsKKyAgICB2
aXJ0dWFsIH5EYXRhYmFzZVN5bmMoKTsKIAotICAgIC8vIERpcmVjdCBzdXBwb3J0IGZvciB0aGUg
RE9NIEFQSQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gb3BlbkRhdGFiYXNl
U3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKICAgICB2b2lkIGNoYW5nZVZl
cnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24s
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7
CiAgICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrPiwgYm9vbCByZWFkT25seSwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgLy8gSW50ZXJuYWwg
ZW5naW5lIHN1cHBvcnQKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlu
Zm9UYWJsZU5hbWUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7
CisgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpOwogCiBwcml2YXRlOgogICAgIERhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwK
LSAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+KTsKLQotICAgIFJl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0g
ICAgU3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV9leHBlY3RlZFZlcnNpb247Ci0gICAgU3Ry
aW5nIG1fZGlzcGxheU5hbWU7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2VzdGltYXRlZFNpemU7Ci0g
ICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IG1fY3JlYXRpb25DYWxsYmFjazsKLQotI2lmbmRl
ZiBOREVCVUcKLSAgICBTdHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25zdCB7IHJldHVybiBT
dHJpbmcoKTsgfQotI2VuZGlmCisgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAkocmV2aXNpb24gNjE5NTMp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODcsOCArODcsOSBAQCB2b2lkIERhdGFiYXNlVGFzazo6cGVyZm9ybVRhc2soKQogLy8gKioqIERh
dGFiYXNlT3BlblRhc2sgKioqCiAvLyBPcGVucyB0aGUgZGF0YWJhc2UgZmlsZSBhbmQgdmVyaWZp
ZXMgdGhlIHZlcnNpb24gbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdmVyc2lvbi4KIAotRGF0YWJhc2VP
cGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFiYXNlVGFz
a1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBz
dWNjZXNzKQorRGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSogZGF0
YWJhc2UsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9u
aXplciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQog
ICAgIDogRGF0YWJhc2VUYXNrKGRhdGFiYXNlLCBzeW5jaHJvbml6ZXIpCisgICAgLCBtX3NldFZl
cnNpb25Jbk5ld0RhdGFiYXNlKHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKQogICAgICwgbV9jb2Rl
KGNvZGUpCiAgICAgLCBtX3N1Y2Nlc3Moc3VjY2VzcykKIHsKQEAgLTk3LDcgKzk4LDcgQEAgRGF0
YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayhEYXRhYgogCiB2b2lkIERhdGFiYXNlT3Bl
blRhc2s6OmRvUGVyZm9ybVRhc2soKQogewotICAgIG1fc3VjY2VzcyA9IGRhdGFiYXNlKCktPnBl
cmZvcm1PcGVuQW5kVmVyaWZ5KG1fY29kZSk7CisgICAgbV9zdWNjZXNzID0gZGF0YWJhc2UoKS0+
cGVyZm9ybU9wZW5BbmRWZXJpZnkobV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgbV9jb2RlKTsK
IH0KIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgJKHJldmlzaW9u
IDYxOTUzKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NSwxOSArODUsMjAgQEAgcHJpdmF0ZToKIAogY2xhc3MgRGF0YWJhc2VPcGVuVGFzayA6
IHB1YmxpYyBEYXRhYmFzZVRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERh
dGFiYXNlT3BlblRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIERhdGFiYXNlVGFza1N5bmNocm9u
aXplciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlT3BlblRhc2s+IGNyZWF0ZShEYXRhYmFzZSog
ZGIsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXpl
ciogc3luY2hyb25pemVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFzZU9wZW5UYXNrKGRiLCBzeW5jaHJvbml6ZXIs
IGNvZGUsIHN1Y2Nlc3MpOworICAgICAgICByZXR1cm4gbmV3IERhdGFiYXNlT3BlblRhc2soZGIs
IHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBzeW5jaHJvbml6ZXIsIGNvZGUsIHN1Y2Nlc3MpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBEYXRhYmFzZU9wZW5UYXNrKERhdGFiYXNlKiwgRGF0YWJh
c2VUYXNrU3luY2hyb25pemVyKiwgRXhjZXB0aW9uQ29kZSYsIGJvb2wmIHN1Y2Nlc3MpOworICAg
IERhdGFiYXNlT3BlblRhc2soRGF0YWJhc2UqLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNl
LCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqLCBFeGNlcHRpb25Db2RlJiwgYm9vbCYgc3VjY2Vz
cyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwogI2lmbmRlZiBOREVCVUcK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFza05hbWUoKSBjb25zdDsKICNlbmRpZgog
CisgICAgYm9vbCBtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNlOwogICAgIEV4Y2VwdGlvbkNvZGUm
IG1fY29kZTsKICAgICBib29sJiBtX3N1Y2Nlc3M7CiB9OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjE5
NTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NSBAQAorMjAxMC0wNi0yNiAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuY29tbWVu
dCBzb21lIHRlc3QgY2FzZXMgaW4gb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cywgYW5kCisgICAg
ICAgIGNvbW1lbnQgb3V0IGZvciBub3cgdGhlIG9uZXMgdGhhdCBmYWlsIGluIFY4LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA2MDcKKworICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRh
dGFiYXNlLXN5bmMtaW5wdXRzLmpzOgorICAgICAgICAoY2F0Y2gpOgorCiAyMDEwLTA2LTI2ICBS
b2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3lu
Yy1pbnB1dHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MTk1MykKKysrIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsOCBAQAogVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhh
dCBvcGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlkIHBhcmFtZXRlcnMuCiBQQVNT
OiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCiBQQVNTOiBTWU5UQVhfRVJSOiBET00gRXhj
ZXB0aW9uIDEyCi1QQVNTOiB1bmRlZmluZWQKLVBBU1M6IHVuZGVmaW5lZAotUEFTUzogdW5kZWZp
bmVkCiBQQVNTOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNworUEFTUzogb3Bl
bkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4KK1BBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNj
ZWVkZWQuCitQQVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24g
Y2FsbGJhY2sgc3VjY2VlZGVkLgogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFz
ZS1zeW5jLWlucHV0cy5qcwkocmV2aXNpb24gNjE5NTMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMTgsNDcgKzE4LDU5IEBAIHRyeSB7CiAgICAgcG9zdE1lc3NhZ2UoIlBB
U1M6ICIgKyBlcnIubWVzc2FnZSk7CiB9CiAKKy8vIFdlIGhhdmUgdG8gZGlzYWJsZSB0aGVzZSB0
ZXN0cyBmb3Igbm93LCBiZWNhdXNlIFY4IHN1cHByZXNzZXMgdGhlIGV4Y2VwdGlvbiB0aHJvd24g
YnkgdG9TdHJpbmcoKQorLy8gYW5kIGp1c3QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuCisvLyB0
cnkgeworLy8gICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYyhub3RBU3RyaW5nLCAiREJWZXJzaW9u
IiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKKy8vICAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhl
IGZpcnN0IGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEgc3RyaW5nLiIp
OworLy8gfSBjYXRjaCAoZXJyKSB7CisvLyAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIu
bWVzc2FnZSk7CisvLyB9CisKKy8vIHRyeSB7CisvLyAgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5j
KCJEQk5hbWUiLCBub3RBU3RyaW5nLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOworLy8gICAgIHBv
c3RNZXNzYWdlKCJGQUlMOiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMo
KSBtdXN0IGJlIGEgc3RyaW5nLiIpOworLy8gfSBjYXRjaCAoZXJyKSB7CisvLyAgICAgcG9zdE1l
c3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7CisvLyB9CisKKy8vIHRyeSB7CisvLyAgICAg
ZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgbm90QVN0cmluZywg
MTAyNCk7CisvLyAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSB0aGlyZCBhcmd1bWVudCB0byBv
cGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKKy8vIH0gY2F0Y2ggKGVycikg
eworLy8gICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOworLy8gfQorCiB0
cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYyhub3RBU3RyaW5nLCAiREJWZXJzaW9uIiwg
IkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIGZpcnN0
IGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEgc3RyaW5nLiIpOworICAg
IGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0
aW9uIiwgMTAyNCwgMCk7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBmaWZ0aCBhcmd1bWVu
dCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhbiBvYmplY3QsIGlmIHByZXNlbnQuIik7
CiB9IGNhdGNoIChlcnIpIHsKICAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdl
KTsKIH0KIAogdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsIG5vdEFT
dHJpbmcsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRo
ZSBzZWNvbmQgYXJndW1lbnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11c3QgYmUgYSBzdHJpbmcu
Iik7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRC
RGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNl
U3luYygpIHN1Y2NlZWRlZC4iKTsKIH0gY2F0Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQ
QVNTOiAiICsgZXJyLm1lc3NhZ2UpOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1l
c3NhZ2UpOwogfQogCisvLyBSdW4gdGhpcyB0ZXN0IGNhc2Ugb25lIG1vcmUgdGltZSwgdG8gdGVz
dCB0aGUgY29kZSB3aXRoIGFuIGV4aXN0aW5nIGRhdGFiYXNlLgogdHJ5IHsKLSAgICBkYiA9IG9w
ZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCBub3RBU3RyaW5nLCAxMDI0KTsK
LSAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIGZvdXJ0aCBhcmd1bWVudCB0byBvcGVuRGF0YWJh
c2VTeW5jKCkgbXVzdCBiZSBhbiBpbnRlZ2VyLiIpOworICAgIGRiID0gb3BlbkRhdGFiYXNlU3lu
YygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7CisgICAgcG9z
dE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuIik7CiB9IGNhdGNo
IChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKKyAgICBw
b3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKIH0KIAogdHJ5IHsKLSAgICBkYiA9
IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIs
IDEwMjQsIDApOwotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgZmlmdGggYXJndW1lbnQgdG8g
b3BlbkRhdGFiYXNlU3luYygpIG11c3QgYmUgYW4gb2JqZWN0LCBpZiBwcmVzZW50LiIpOworICAg
IC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFiYXNlLCBvdGhlcndpc2UgdGhlIGNyZWF0aW9u
IGNhbGxiYWNrIHdvbid0IGJlIGludm9rZWQuCisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJE
Qk5hbWVDcmVhdGlvbkNhbGxiYWNrIiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksICJEQlZlcnNp
b24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bmN0aW9uKGRiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgi
UEFTUzogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNr
IHN1Y2NlZWRlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiB9IGNhdGNoIChl
cnIpIHsKLSAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKKyAgICBwb3N0
TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKIH0KIAotLy8gRklYTUU6IFVuY29tbWVu
dCB0aGVzZSB0ZXN0cyB3aGVuIHRoZSBzeW5jIERCIEFQSSBpcyBpbXBsZW1lbnRlZC4KLS8vdHJ5
IHsKLS8vICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJE
QkRlc2NyaXB0aW9uIiwgMTAyNCk7Ci0vLyAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFi
YXNlU3luYygpIHN1Y2NlZWRlZC4iKTsKLS8vfSBjYXRjaCAoZXJyKSB7Ci0vLyAgICBwb3N0TWVz
c2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKLS8vfQotLy8KLS8vdHJ5IHsKLS8vICAgIGRi
ID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9u
IiwgMTAyNCwgZnVuY3Rpb24oZGIpIHsgfSk7Ci0vLyAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2Fs
bGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRl
ZC4iKTsKLS8vfSBjYXRjaCAoZXJyKSB7Ci0vLyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVy
ci5tZXNzYWdlKTsKLS8vfQotCiBwb3N0TWVzc2FnZSgiZG9uZSIpOwo=
</data>
<flag name="commit-queue"
          id="46941"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59833</attachid>
            <date>2010-06-26 05:19:18 -0700</date>
            <delta_ts>2010-06-29 16:03:10 -0700</delta_ts>
            <desc>patch #1: implement DatabaseSync::openDatabaseSync()</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>72806</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTk1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTcgQEAKKzIwMTAtMDYtMjYgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKCkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisgICAgICAg
IDEuIE1vdmVkIHNvbWUgY29tbW9uIGNvZGUgZnJvbSBEYXRhYmFzZSB0byBBYnN0cmFjdERhdGFi
YXNlLgorICAgICAgICAyLiBNYWRlIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkgdmlydHVhbCwgc2lu
Y2UgRGF0YWJhc2VTeW5jIGRvZXNuJ3QKKyAgICAgICAgICAgbmVlZCB0byBpbnRlcmFjdCB3aXRo
IERhdGFiYXNlVGhyZWFkLgorICAgICAgICAzLiBSZW1vdmVkIHRoZSBtX2NyZWF0aW9uQ2FsbGJh
Y2sgZmllbGQsIHNpbmNlIGl0J3Mgb25seSBuZWVkZWQgaW4KKyAgICAgICAgICAgdGhlIG9wZW5E
YXRhYmFzZXtTeW5jfSBtZXRob2RzLgorICAgICAgICA0LiBNYWRlIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgYXdhcmUgb2Ygc3luYyBEQnMsIHNvIHdlIGNhbiBjbG9zZQorICAgICAgICAgICB0aGUg
c3luYyBEQnMgYmVmb3JlIHRoZSBkZXN0cnVjdG9yIGlzIGNhbGxlZC4KKyAgICAgICAgNS4gTW92
ZWQgYSBjb3VwbGUgb2YgYXN5bmMgREItc3BlY2lmaWMgbGluZXMgZnJvbQorICAgICAgICAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wRGF0YWJhc2VzKCkgdG8gRGF0YWJhc2U6OnN0b3Ao
KS4KKworICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkZE9wZW5EYXRhYmFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZW1vdmVPcGVuRGF0YWJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3RvcERhdGFiYXNl
cyk6CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKiBz
dG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVU
ZXh0UmVzdWx0RnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFRleHRWYWx1ZUlu
RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Z3VpZE11dGV4KToKKyAgICAgICAgKFdlYkNv
cmU6Omd1aWRUb1ZlcnNpb25NYXApOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlR3VpZFZlcnNp
b25NYXApOgorICAgICAgICAoV2ViQ29yZTo6Z3VpZFRvRGF0YWJhc2VNYXApOgorICAgICAgICAo
V2ViQ29yZTo6Z3VpZEZvck9yaWdpbkFuZE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJh
Y3REYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6Y2xvc2VEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFj
dERhdGFiYXNlOjp2ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6
OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RE
YXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRh
YmFzZTo6c3RyaW5nSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpkaXNwbGF5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpl
c3RpbWF0ZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmZpbGVO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlVmVyc2lv
bktleSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpnZXRWZXJzaW9uRnJv
bURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnNldFZlcnNp
b25JbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnZlcnNp
b25NYXRjaGVzRXhwZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6
c2V0RXhwZWN0ZWRWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6
OmRpc2FibGVBdXRob3JpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6
OmVuYWJsZUF1dGhvcml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6
c2V0QXV0aG9yaXplclJlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6Omxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJh
Y3REYXRhYmFzZTo6bGFzdEFjdGlvbldhc0luc2VydCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0
cmFjdERhdGFiYXNlOjpyZXNldERlbGV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RE
YXRhYmFzZTo6aGFkRGVsZXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNl
OjpyZXNldEF1dGhvcml6ZXIpOgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5o
OgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6b3BlbmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OmlzTmV3KToKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlRGVidWdOYW1lKToKKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rh
c2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tU
YXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUNyZWF0aW9uQ2Fs
bGJhY2tUYXNrOjpEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6
OkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjp2ZXJzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnN0
b3ApOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZTo6c3FsaXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6RGF0YWJhc2VBdXRob3JpemVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZGVueUJhc2VkT25UYWJsZU5h
bWUpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmg6CisgICAgICAgICog
c3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5j
OjpvcGVuRGF0YWJhc2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6RGF0
YWJhc2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6bWFya0FzRGVsZXRlZEFuZENsb3NlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFzazo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFz
azo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q2xvc2VTeW5jRGF0YWJhc2VPbkNv
bnRleHRUaHJlYWRUYXNrOjpDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRocmVhZFRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjbG9zZUltbWVkaWF0ZWx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6c3RvcCk6CisgICAgICAgICogc3RvcmFnZS9EYXRh
YmFzZVN5bmMuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGFzay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlT3BlblRhc2s6OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAqIHN0
b3JhZ2UvRGF0YWJhc2VUYXNrLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU9wZW5UYXNr
OjpjcmVhdGUpOgorCiAyMDEwLTA2LTI2ICBUb255IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHJldmlzaW9uIDYxOTUzKQorKysgV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDkgKzI4LDExIEBACiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiAjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpZiBFTkFC
TEUoREFUQUJBU0UpCisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRh
dGFiYXNlVGFzay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjZW5kaWYKICNpZiBF
TkFCTEUoRklMRV9SRUFERVIpIHx8IEVOQUJMRShGSUxFX1dSSVRFUikKICNpbmNsdWRlICJGaWxl
VGhyZWFkLmgiCiAjZW5kaWYKQEAgLTEwOSw3ICsxMTEsNyBAQCBEYXRhYmFzZVRocmVhZCogU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6CiAgICAgcmV0dXJuIG1fZGF0YWJhc2VUaHJlYWQuZ2V0KCk7
CiB9CiAKLXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRkT3BlbkRhdGFiYXNlKERhdGFi
YXNlKiBkYXRhYmFzZSkKK3ZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRkT3BlbkRhdGFi
YXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIEFTU0VSVChpc0NvbnRleHRU
aHJlYWQoKSk7CiAgICAgaWYgKCFtX29wZW5EYXRhYmFzZVNldCkKQEAgLTExOSw3ICsxMjEsNyBA
QCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkZE9wZW5EYXRhCiAgICAgbV9vcGVuRGF0
YWJhc2VTZXQtPmFkZChkYXRhYmFzZSk7CiB9CiAKLXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6cmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKK3ZvaWQgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6cmVtb3ZlT3BlbkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFi
YXNlKQogewogICAgIEFTU0VSVChpc0NvbnRleHRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fb3Bl
bkRhdGFiYXNlU2V0ICYmIG1fb3BlbkRhdGFiYXNlU2V0LT5jb250YWlucyhkYXRhYmFzZSkpOwpA
QCAtMTM0LDEzICsxMzYsMTAgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wRGF0
YWJhcwogICAgIGlmIChtX29wZW5EYXRhYmFzZVNldCkgewogICAgICAgICBEYXRhYmFzZVNldDo6
aXRlcmF0b3IgaSA9IG1fb3BlbkRhdGFiYXNlU2V0LT5iZWdpbigpOwogICAgICAgICBEYXRhYmFz
ZVNldDo6aXRlcmF0b3IgZW5kID0gbV9vcGVuRGF0YWJhc2VTZXQtPmVuZCgpOwotICAgICAgICBm
b3IgKDsgaSAhPSBlbmQ7ICsraSkgeworICAgICAgICBmb3IgKDsgaSAhPSBlbmQ7ICsraSkKICAg
ICAgICAgICAgICgqaSktPnN0b3AoKTsKLSAgICAgICAgICAgIGlmIChtX2RhdGFiYXNlVGhyZWFk
KQotICAgICAgICAgICAgICAgIG1fZGF0YWJhc2VUaHJlYWQtPnVuc2NoZWR1bGVEYXRhYmFzZVRh
c2tzKCppKTsKLSAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmIChtX2RhdGFiYXNlVGhy
ZWFkKQogICAgICAgICBtX2RhdGFiYXNlVGhyZWFkLT5yZXF1ZXN0VGVybWluYXRpb24oY2xlYW51
cFN5bmMpOwogICAgIGVsc2UgaWYgKGNsZWFudXBTeW5jKQpJbmRleDogV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaAkocmV2aXNpb24gNjE5NTMpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQWN0aXZlRE9NT2JqZWN0OwogI2lmIEVOQUJMRShE
QVRBQkFTRSkKLSAgICBjbGFzcyBEYXRhYmFzZTsKKyAgICBjbGFzcyBBYnN0cmFjdERhdGFiYXNl
OwogICAgIGNsYXNzIERhdGFiYXNlVGFza1N5bmNocm9uaXplcjsKICAgICBjbGFzcyBEYXRhYmFz
ZVRocmVhZDsKICNlbmRpZgpAQCAtNzAsOCArNzAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIERhdGFiYXNlVGhyZWFkKiBkYXRhYmFzZVRocmVhZCgpOwogICAgICAgICB2b2lkIHNl
dEhhc09wZW5EYXRhYmFzZXMoKSB7IG1faGFzT3BlbkRhdGFiYXNlcyA9IHRydWU7IH0KICAgICAg
ICAgYm9vbCBoYXNPcGVuRGF0YWJhc2VzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNPcGVuRGF0YWJh
c2VzOyB9Ci0gICAgICAgIHZvaWQgYWRkT3BlbkRhdGFiYXNlKERhdGFiYXNlKik7Ci0gICAgICAg
IHZvaWQgcmVtb3ZlT3BlbkRhdGFiYXNlKERhdGFiYXNlKik7CisgICAgICAgIHZvaWQgYWRkT3Bl
bkRhdGFiYXNlKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICAgICAgdm9pZCByZW1vdmVPcGVuRGF0
YWJhc2UoQWJzdHJhY3REYXRhYmFzZSopOwogICAgICAgICAvLyBXaGVuIHRoZSBkYXRhYmFzZSBj
bGVhbnVwIGlzIGRvbmUsIGNsZWFudXBTeW5jIHdpbGwgYmUgc2lnbmFsbGVkLgogICAgICAgICB2
b2lkIHN0b3BEYXRhYmFzZXMoRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKik7CiAjZW5kaWYKQEAg
LTE2MCw3ICsxNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKERBVEFCQVNF
KQogICAgICAgICBSZWZQdHI8RGF0YWJhc2VUaHJlYWQ+IG1fZGF0YWJhc2VUaHJlYWQ7CiAgICAg
ICAgIGJvb2wgbV9oYXNPcGVuRGF0YWJhc2VzOyAvLyBUaGlzIG5ldmVyIGNoYW5nZXMgYmFjayB0
byBmYWxzZSwgZXZlbiBhZnRlciB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIGNsb3NlZC4KLSAgICAg
ICAgdHlwZWRlZiBIYXNoU2V0PERhdGFiYXNlKiA+IERhdGFiYXNlU2V0OworICAgICAgICB0eXBl
ZGVmIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+IERhdGFiYXNlU2V0OwogICAgICAgICBPd25Q
dHI8RGF0YWJhc2VTZXQ+IG1fb3BlbkRhdGFiYXNlU2V0OwogI2VuZGlmCiAKSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHJldmlzaW9uIDYxOTUzKQorKysgV2ViQ29yZS9z
dG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwx
MjggQEAKICNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAKICNpZiBFTkFCTEUoREFUQUJB
U0UpCisjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VU
cmFja2VyLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTdHJp
bmdIYXNoLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitzdGF0aWMgYm9vbCByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UoU1FMaXRlRGF0YWJh
c2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sKKyAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7CisgICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC5wcmVwYXJlKCk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7
CisgICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIHJl
YWQgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBz
dGF0ZW1lbnQuc3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7CisgICAg
ICAgIHJlc3VsdFN0cmluZyA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKSB7Cisg
ICAgICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcmVhZGluZyB0ZXh0IHJlc3VsdCBmcm9t
IGRhdGFiYXNlICglcykiLCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRl
RGF0YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKKyAgICBpbnQgcmVz
dWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0
T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8g
c2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgdmFs
dWUpOworCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ICE9
IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3RlcCBzdGF0
ZW1lbnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworLy8gRklYTUU6IG1vdmUgYWxsIGd1aWQtcmVsYXRlZCBmdW5jdGlvbnMgdG8gYSBEYXRhYmFz
ZVZlcnNpb25UcmFja2VyIGNsYXNzLgorc3RhdGljIE11dGV4JiBndWlkTXV0ZXgoKQoreworICAg
IC8vIE5vdGU6IFdlIGRvbid0IGhhdmUgdG8gdXNlIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRp
YyBoZXJlIGJlY2F1c2UKKyAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGluIHRo
ZSBjb25zdHJ1Y3RvciBvbiB0aGUgbWFpbiB0aHJlYWQKKyAgICAvLyBiZWZvcmUgYW55IG90aGVy
IHRocmVhZHMgdGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQuCisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChNdXRleCwgbXV0ZXgsICgpKTsKKyAgICByZXR1cm4gbXV0ZXg7Cit9CisKK3R5
cGVkZWYgSGFzaE1hcDxpbnQsIFN0cmluZz4gR3VpZFZlcnNpb25NYXA7CitzdGF0aWMgR3VpZFZl
cnNpb25NYXAmIGd1aWRUb1ZlcnNpb25NYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
R3VpZFZlcnNpb25NYXAsIG1hcCwgKCkpOworICAgIHJldHVybiBtYXA7Cit9CisKKy8vIE5PVEU6
IENhbGxlciBtdXN0IGxvY2sgZ3VpZE11dGV4KCkuCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRl
R3VpZFZlcnNpb25NYXAoaW50IGd1aWQsIFN0cmluZyBuZXdWZXJzaW9uKQoreworICAgIC8vIEVu
c3VyZSB0aGUgdGhlIG11dGV4IGlzIGxvY2tlZC4KKyAgICBBU1NFUlQoIWd1aWRNdXRleCgpLnRy
eUxvY2soKSk7CisKKyAgICAvLyBOb3RlOiBJdCBpcyBub3Qgc2FmZSB0byBwdXQgYW4gZW1wdHkg
c3RyaW5nIGludG8gdGhlIGd1aWRUb1ZlcnNpb25NYXAoKSBtYXAuCisgICAgLy8gVGhhdCdzIGJl
Y2F1c2UgdGhlIG1hcCBpcyBjcm9zcy10aHJlYWQsIGJ1dCBlbXB0eSBzdHJpbmdzIGFyZSBwZXIt
dGhyZWFkLgorICAgIC8vIFRoZSBjb3B5KCkgZnVuY3Rpb24gbWFrZXMgYSB2ZXJzaW9uIG9mIHRo
ZSBzdHJpbmcgeW91IGNhbiB1c2Ugb24gdGhlIGN1cnJlbnQKKyAgICAvLyB0aHJlYWQsIGJ1dCB3
ZSBuZWVkIGEgc3RyaW5nIHdlIGNhbiBrZWVwIGluIGEgY3Jvc3MtdGhyZWFkIGRhdGEgc3RydWN0
dXJlLgorICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgcXVpdGUtYXdrd2FyZCByZXN0cmljdGlvbiB0
byBoYXZlIHRvIHByb2dyYW0gd2l0aC4KKworICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBlbXB0
eSBzdHJpbmcgKHNlZSBjb21tZW50IGFib3ZlKS4KKyAgICBndWlkVG9WZXJzaW9uTWFwKCkuc2V0
KGd1aWQsIG5ld1ZlcnNpb24uaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBuZXdWZXJzaW9uLnRocmVh
ZHNhZmVDb3B5KCkpOworfQorCit0eXBlZGVmIEhhc2hNYXA8aW50LCBIYXNoU2V0PEFic3RyYWN0
RGF0YWJhc2UqPio+IEd1aWREYXRhYmFzZU1hcDsKK3N0YXRpYyBHdWlkRGF0YWJhc2VNYXAmIGd1
aWRUb0RhdGFiYXNlTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWREYXRhYmFz
ZU1hcCwgbWFwLCAoKSk7CisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGludCBndWlkRm9y
T3JpZ2luQW5kTmFtZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQor
eworICAgIFN0cmluZyBzdHJpbmdJRCA9IG9yaWdpbiArICIvIiArIG5hbWU7CisKKyAgICAvLyBO
b3RlOiBXZSBkb24ndCBoYXZlIHRvIHVzZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMgaGVy
ZSBiZWNhdXNlCisgICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBpbiB0aGUgY29u
c3RydWN0b3Igb24gdGhlIG1haW4gdGhyZWFkCisgICAgLy8gYmVmb3JlIGFueSBvdGhlciB0aHJl
YWRzIHRoYXQgY2FsbCB0aGlzIGZ1bmN0aW9uIGFyZSB1c2VkLgorICAgIERFRklORV9TVEFUSUNf
TE9DQUwoTXV0ZXgsIHN0cmluZ0lkZW50aWZpZXJNdXRleCwgKCkpOworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihzdHJpbmdJZGVudGlmaWVyTXV0ZXgpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIGludD4gSURHdWlkTWFwOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSURHdWlkTWFwLCBz
dHJpbmdJZGVudGlmaWVyVG9HVUlETWFwLCAoKSk7CisgICAgaW50IGd1aWQgPSBzdHJpbmdJZGVu
dGlmaWVyVG9HVUlETWFwLmdldChzdHJpbmdJRCk7CisgICAgaWYgKCFndWlkKSB7CisgICAgICAg
IHN0YXRpYyBpbnQgY3VycmVudE5ld0dVSUQgPSAxOworICAgICAgICBndWlkID0gY3VycmVudE5l
d0dVSUQrKzsKKyAgICAgICAgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcC5zZXQoc3RyaW5nSUQs
IGd1aWQpOworICAgIH0KKworICAgIHJldHVybiBndWlkOworfQorCiBzdGF0aWMgYm9vbCBpc0Rh
dGFiYXNlQXZhaWxhYmxlID0gdHJ1ZTsKIAogYm9vbCBBYnN0cmFjdERhdGFiYXNlOjppc0F2YWls
YWJsZSgpCkBAIC00NSwxMCArMTY0LDMwNCBAQCB2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldElz
QXZhaWxhYmxlKGJvCiAgICAgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IGF2YWlsYWJsZTsKIH0KIAor
Ly8gc3RhdGljCitjb25zdCBTdHJpbmcmIEFic3RyYWN0RGF0YWJhc2U6OmRhdGFiYXNlSW5mb1Rh
YmxlTmFtZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG5hbWUsICgiX19X
ZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fIikpOworICAgIHJldHVybiBuYW1lOworfQorCitBYnN0
cmFjdERhdGFiYXNlOjpBYnN0cmFjdERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICA6IG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dChjb250ZXh0KQorICAgICwgbV9uYW1lKG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmco
KSkKKyAgICAsIG1fZXhwZWN0ZWRWZXJzaW9uKGV4cGVjdGVkVmVyc2lvbi5jcm9zc1RocmVhZFN0
cmluZygpKQorICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5jcm9zc1RocmVhZFN0cmlu
ZygpKQorICAgICwgbV9lc3RpbWF0ZWRTaXplKGVzdGltYXRlZFNpemUpCisgICAgLCBtX2d1aWQo
MCkKKyAgICAsIG1fb3BlbmVkKGZhbHNlKQorICAgICwgbV9uZXcoZmFsc2UpCit7CisgICAgQVNT
RVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2NvbnRleHRUaHJlYWRTZWN1
cml0eU9yaWdpbiA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsK
KworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyID0gRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGUo
ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpOworCisgICAgaWYgKG1fbmFtZS5pc051bGwoKSkKKyAg
ICAgICAgbV9uYW1lID0gIiI7CisKKyAgICBtX2d1aWQgPSBndWlkRm9yT3JpZ2luQW5kTmFtZShz
ZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBuYW1lKTsKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisKKyAgICAgICAgSGFzaFNldDxBYnN0cmFjdERh
dGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1hcCgpLmdldChtX2d1aWQpOworICAg
ICAgICBpZiAoIWhhc2hTZXQpIHsKKyAgICAgICAgICAgIGhhc2hTZXQgPSBuZXcgSGFzaFNldDxB
YnN0cmFjdERhdGFiYXNlKj47CisgICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnNldCht
X2d1aWQsIGhhc2hTZXQpOworICAgICAgICB9CisKKyAgICAgICAgaGFzaFNldC0+YWRkKHRoaXMp
OworICAgIH0KKworICAgIG1fZmlsZW5hbWUgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5m
dWxsUGF0aEZvckRhdGFiYXNlKHNlY3VyaXR5T3JpZ2luKCksIG1fbmFtZSk7CisgICAgRGF0YWJh
c2VUcmFja2VyOjp0cmFja2VyKCkuYWRkT3BlbkRhdGFiYXNlKHRoaXMpOworfQorCiBBYnN0cmFj
dERhdGFiYXNlOjp+QWJzdHJhY3REYXRhYmFzZSgpCiB7CiB9CiAKK3ZvaWQgQWJzdHJhY3REYXRh
YmFzZTo6Y2xvc2VEYXRhYmFzZSgpCit7CisgICAgaWYgKCFtX29wZW5lZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgIG1fb3BlbmVkID0gZmFs
c2U7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworCisg
ICAgICAgIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0YWJh
c2VNYXAoKS5nZXQobV9ndWlkKTsKKyAgICAgICAgQVNTRVJUKGhhc2hTZXQpOworICAgICAgICBB
U1NFUlQoaGFzaFNldC0+Y29udGFpbnModGhpcykpOworICAgICAgICBoYXNoU2V0LT5yZW1vdmUo
dGhpcyk7CisgICAgICAgIGlmIChoYXNoU2V0LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGd1
aWRUb0RhdGFiYXNlTWFwKCkucmVtb3ZlKG1fZ3VpZCk7CisgICAgICAgICAgICBkZWxldGUgaGFz
aFNldDsKKyAgICAgICAgICAgIGd1aWRUb1ZlcnNpb25NYXAoKS5yZW1vdmUobV9ndWlkKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworU3RyaW5nIEFic3RyYWN0RGF0YWJhc2U6OnZlcnNpb24oKSBj
b25zdAoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgcmV0dXJu
IGd1aWRUb1ZlcnNpb25NYXAoKS5nZXQobV9ndWlkKS50aHJlYWRzYWZlQ29weSgpOworfQorCitz
dGF0aWMgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMwMDAwOworYm9vbCBBYnN0
cmFjdERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIW1fc3FsaXRlRGF0
YWJhc2Uub3BlbihtX2ZpbGVuYW1lLCB0cnVlKSkgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBvcGVuIGRhdGFiYXNlIGF0IHBhdGggJXMiLCBtX2ZpbGVuYW1lLmFzY2lpKCkuZGF0YSgp
KTsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UudHVybk9uSW5jcmVtZW50YWxBdXRv
VmFjdXVtKCkpCisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHR1cm4gb24gaW5jcmVtZW50
YWwgYXV0by12YWN1dW0gZm9yIGRhdGFiYXNlICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRhdGEo
KSk7CisKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fc3FsaXRlRGF0
YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9zcWxpdGVE
YXRhYmFzZS5zZXRCdXN5VGltZW91dChtYXhTcWxpdGVCdXN5V2FpdFRpbWUpOworCisgICAgU3Ry
aW5nIGN1cnJlbnRWZXJzaW9uOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1
aWRNdXRleCgpKTsKKworICAgICAgICBHdWlkVmVyc2lvbk1hcDo6aXRlcmF0b3IgZW50cnkgPSBn
dWlkVG9WZXJzaW9uTWFwKCkuZmluZChtX2d1aWQpOworICAgICAgICBpZiAoZW50cnkgIT0gZ3Vp
ZFRvVmVyc2lvbk1hcCgpLmVuZCgpKSB7CisgICAgICAgICAgICAvLyBNYXAgbnVsbCBzdHJpbmcg
dG8gZW1wdHkgc3RyaW5nIChzZWUgdXBkYXRlR3VpZFZlcnNpb25NYXAoKSkuCisgICAgICAgICAg
ICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT5zZWNvbmQuaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDog
ZW50cnktPnNlY29uZDsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQ3VycmVudCBjYWNo
ZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSBpcyAlcyIsIG1fZ3VpZCwgY3VycmVudFZlcnNpb24uYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTE9HKFN0b3JhZ2VB
UEksICJObyBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSIsIG1fZ3VpZCk7CisKKyAgICAgICAg
ICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50YWJsZUV4aXN0cyhkYXRhYmFzZUluZm9UYWJsZU5h
bWUoKSkpIHsKKyAgICAgICAgICAgICAgICBtX25ldyA9IHRydWU7CisKKyAgICAgICAgICAgICAg
ICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSAiICsg
ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIChrZXkgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElD
VCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLHZhbHVlIFRFWFQgTk9UIE5VTEwgT04g
Q09ORkxJQ1QgRkFJTCk7IikpIHsKKyAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gY3JlYXRlIHRhYmxlICVzIGluIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VJbmZvVGFibGVO
YW1lKCkuYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkp
OworICAgICAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICAg
ICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgorICAg
ICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShjdXJyZW50VmVyc2lvbikp
IHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgY3VycmVudCB2ZXJz
aW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgp
KTsKKyAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICAgICAg
ICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgICAgICAg
ICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdXJyZW50VmVyc2lvbi5sZW5n
dGgoKSkgeworICAgICAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiUmV0cmlldmVkIGN1cnJl
bnQgdmVyc2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzIiwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5k
YXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAg
fSBlbHNlIGlmICghbV9uZXcgfHwgc2hvdWxkU2V0VmVyc2lvbkluTmV3RGF0YWJhc2UpIHsKKyAg
ICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNldHRpbmcgdmVyc2lvbiAlcyBpbiBkYXRh
YmFzZSAlcyB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQiLCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgp
LmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFzZXRWZXJzaW9uSW5EYXRhYmFzZShtX2V4cGVjdGVkVmVyc2lvbikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4g
ZGF0YWJhc2UgJXMiLCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VE
ZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGVjID0gSU5W
QUxJRF9TVEFURV9FUlI7CisgICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUg
dG8gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJh
c2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IG1fZXhwZWN0ZWRWZXJz
aW9uOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcCht
X2d1aWQsIGN1cnJlbnRWZXJzaW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjdXJy
ZW50VmVyc2lvbi5pc051bGwoKSkgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNl
ICVzIGRvZXMgbm90IGhhdmUgaXRzIHZlcnNpb24gc2V0IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gIiI7CisgICAgfQorCisg
ICAgLy8gSWYgdGhlIGV4cGVjdGVkIHZlcnNpb24gaXNuJ3QgdGhlIGVtcHR5IHN0cmluZywgZW5z
dXJlIHRoYXQgdGhlIGN1cnJlbnQgZGF0YWJhc2UgdmVyc2lvbiB3ZSBoYXZlIG1hdGNoZXMgdGhh
dCB2ZXJzaW9uLiBPdGhlcndpc2UsIHNldCBhbiBleGNlcHRpb24uCisgICAgLy8gSWYgdGhlIGV4
cGVjdGVkIHZlcnNpb24gaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiB3ZSBhbHdheXMgcmV0dXJu
IHdpdGggd2hhdGV2ZXIgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2Ugd2UgaGF2ZS4KKyAgICBpZiAo
KCFtX25ldyB8fCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkgJiYgbV9leHBlY3RlZFZl
cnNpb24ubGVuZ3RoKCkgJiYgbV9leHBlY3RlZFZlcnNpb24gIT0gY3VycmVudFZlcnNpb24pIHsK
KyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJwYWdlIGV4cGVjdHMgdmVyc2lvbiAlcyBmcm9tIGRh
dGFiYXNlICVzLCB3aGljaCBhY3R1YWxseSBoYXMgdmVyc2lvbiBuYW1lICVzIC0gb3BlbkRhdGFi
YXNlKCkgY2FsbCB3aWxsIGZhaWwiLCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwK
KyAgICAgICAgICAgIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCksIGN1cnJlbnRW
ZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
KyAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAg
ICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgbV9vcGVuZWQgPSB0cnVlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIEFic3RyYWN0RGF0YWJhc2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7
Cit9CisKK1NlY3VyaXR5T3JpZ2luKiBBYnN0cmFjdERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLmdldCgp
OworfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6c3RyaW5nSWRlbnRpZmllcigpIGNvbnN0
Cit7CisgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNh
ZmV0eQorICAgIHJldHVybiBtX25hbWUudGhyZWFkc2FmZUNvcHkoKTsKK30KKworU3RyaW5nIEFi
c3RyYWN0RGF0YWJhc2U6OmRpc3BsYXlOYW1lKCkgY29uc3QKK3sKKyAgICAvLyBSZXR1cm4gYSBk
ZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5CisgICAgcmV0dXJuIG1fZGlz
cGxheU5hbWUudGhyZWFkc2FmZUNvcHkoKTsKK30KKwordW5zaWduZWQgbG9uZyBBYnN0cmFjdERh
dGFiYXNlOjplc3RpbWF0ZWRTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lc3RpbWF0ZWRT
aXplOworfQorCitTdHJpbmcgQWJzdHJhY3REYXRhYmFzZTo6ZmlsZU5hbWUoKSBjb25zdAorewor
ICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkK
KyAgICByZXR1cm4gbV9maWxlbmFtZS50aHJlYWRzYWZlQ29weSgpOworfQorCisvLyBzdGF0aWMK
K2NvbnN0IFN0cmluZyYgQWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VWZXJzaW9uS2V5KCkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywga2V5LCAoIldlYktpdERhdGFiYXNlVmVy
c2lvbktleSIpKTsKKyAgICByZXR1cm4ga2V5OworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6
OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBnZXRWZXJzaW9uUXVlcnksICgiU0VMRUNUIHZhbHVlIEZST00g
IiArIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiBXSEVSRSBrZXkgPSAnIiArIGRhdGFiYXNl
VmVyc2lvbktleSgpICsgIic7IikpOworCisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2Fi
bGUoKTsKKworICAgIGJvb2wgcmVzdWx0ID0gcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNl
KG1fc3FsaXRlRGF0YWJhc2UsIGdldFZlcnNpb25RdWVyeS50aHJlYWRzYWZlQ29weSgpLCB2ZXJz
aW9uKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0
cmlldmUgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2Np
aSgpLmRhdGEoKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6OnNldFZlcnNpb25J
bkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICAvLyBUaGUgSU5TRVJUIHdp
bGwgcmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeSBmb3IgdGhlIGRhdGFiYXNlIHdpdGggdGhlIG5l
dyB2ZXJzaW9uIG51bWJlciwgZHVlIHRvIHRoZSBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRQor
ICAgIC8vIGNsYXVzZSBpbiB0aGUgQ1JFQVRFIHN0YXRlbWVudCAoc2VlIERhdGFiYXNlOjpwZXJm
b3JtT3BlbkFuZFZlcmlmeSgpKS4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc2V0
VmVyc2lvblF1ZXJ5LCAoIklOU0VSVCBJTlRPICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSAr
ICIgKGtleSwgdmFsdWUpIFZBTFVFUyAoJyIgKyBkYXRhYmFzZVZlcnNpb25LZXkoKSArICInLCA/
KTsiKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOworCisgICAgYm9v
bCByZXN1bHQgPSBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIHNldFZl
cnNpb25RdWVyeS50aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9uKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2Ug
KCVzKSIsIHZlcnNpb24uYXNjaWkoKS5kYXRhKCksIHNldFZlcnNpb25RdWVyeS5hc2NpaSgpLmRh
dGEoKSk7CisKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6OnZlcnNpb25NYXRjaGVzRXhw
ZWN0ZWQoKSBjb25zdAoreworICAgIGlmICghbV9leHBlY3RlZFZlcnNpb24uaXNFbXB0eSgpKSB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisgICAgICAgIHJldHVy
biBtX2V4cGVjdGVkVmVyc2lvbiA9PSBndWlkVG9WZXJzaW9uTWFwKCkuZ2V0KG1fZ3VpZCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0
RXhwZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICBtX2V4cGVjdGVk
VmVyc2lvbiA9IHZlcnNpb24udGhyZWFkc2FmZUNvcHkoKTsKKyAgICAvLyBVcGRhdGUgdGhlIGlu
IG1lbW9yeSBkYXRhYmFzZSB2ZXJzaW9uIG1hcC4KKyAgICBNdXRleExvY2tlciBsb2NrZXIoZ3Vp
ZE11dGV4KCkpOworICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgdmVyc2lvbik7Cit9
CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6ZGlzYWJsZUF1dGhvcml6ZXIoKQoreworICAgIEFT
U0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRp
c2FibGUoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjplbmFibGVBdXRob3JpemVyKCkK
K3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJhc2VBdXRo
b3JpemVyLT5lbmFibGUoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRBdXRob3Jp
emVyUmVhZE9ubHkoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7CisgICAg
bV9kYXRhYmFzZUF1dGhvcml6ZXItPnNldFJlYWRPbmx5KCk7Cit9CisKK2Jvb2wgQWJzdHJhY3RE
YXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKG1fZGF0
YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxhc3RB
Y3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpsYXN0
QWN0aW9uV2FzSW5zZXJ0KCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwor
ICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbldhc0luc2VydCgpOwor
fQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnJlc2V0RGVsZXRlcygpCit7CisgICAgQVNTRVJU
KG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXRE
ZWxldGVzKCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6aGFkRGVsZXRlcygpCit7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1
dGhvcml6ZXItPmhhZERlbGV0ZXMoKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXNl
dEF1dGhvcml6ZXIoKQoreworICAgIGlmIChtX2RhdGFiYXNlQXV0aG9yaXplcikKKyAgICAgICAg
bV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9B
YnN0cmFjdERhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0
RGF0YWJhc2UuaAkocmV2aXNpb24gNjE5NTMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3RE
YXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMyArMzIsMjEgQEAKICNpZiBFTkFCTEUo
REFUQUJBU0UpCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTGl0
ZURhdGFiYXNlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVNoYXJlZC5oPgorI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRGF0YWJhc2VBdXRo
b3JpemVyOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3Jp
Z2luOwogCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCiBjbGFzcyBBYnN0cmFjdERhdGFi
YXNlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8QWJzdHJhY3REYXRhYmFzZT4gewogcHVibGlj
OgogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CkBAIC00NiwxNSArNTQsNzAgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB+QWJzdHJhY3REYXRhYmFzZSgpOwogCi0gICAgdmlydHVhbCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0lkZW50aWZpZXIoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcg
ZmlsZU5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0
OworCisgICAgYm9vbCBvcGVuZWQoKSBjb25zdCB7IHJldHVybiBtX29wZW5lZDsgfQorICAgIGJv
b2wgaXNOZXcoKSBjb25zdCB7IHJldHVybiBtX25ldzsgfQorCisgICAgdmlydHVhbCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgZGlz
cGxheU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7CisKKyAgICAv
LyBGSVhNRTogbW92ZSBhbGwgdmVyc2lvbi1yZWxhdGVkIG1ldGhvZHMgdG8gYSBEYXRhYmFzZVZl
cnNpb25UcmFja2VyIGNsYXNzCisgICAgYm9vbCB2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsK
KyAgICBib29sIGdldFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICBi
b29sIHNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisKKyAgICB2
b2lkIGRpc2FibGVBdXRob3JpemVyKCk7CisgICAgdm9pZCBlbmFibGVBdXRob3JpemVyKCk7Cisg
ICAgdm9pZCBzZXRBdXRob3JpemVyUmVhZE9ubHkoKTsKKyAgICBib29sIGxhc3RBY3Rpb25DaGFu
Z2VkRGF0YWJhc2UoKTsKKyAgICBib29sIGxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKKyAgICB2b2lk
IHJlc2V0RGVsZXRlcygpOworICAgIGJvb2wgaGFkRGVsZXRlcygpOworICAgIHZvaWQgcmVzZXRB
dXRob3JpemVyKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZUltbWVkaWF0ZWx5KCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzdG9wKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgQWJzdHJhY3REYXRhYmFzZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGV4cGVjdGVkVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisKKyAgICB2b2lkIGNsb3Nl
RGF0YWJhc2UoKTsKKworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29s
IHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlYyk7CisKKyAg
ICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKTsKKworICAgIFJl
ZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Cisg
ICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbjsK
KworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fZXhwZWN0ZWRWZXJzaW9uOworICAg
IFN0cmluZyBtX2Rpc3BsYXlOYW1lOworICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXpl
OworICAgIFN0cmluZyBtX2ZpbGVuYW1lOworCisgICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVE
YXRhYmFzZTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBTdHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dG9TdHJpbmco
KSArICI6OiIgKyBtX25hbWU7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlVmVyc2lvbktleSgpOworCisgICAgaW50IG1fZ3VpZDsKKyAgICBi
b29sIG1fb3BlbmVkOworICAgIGJvb2wgbV9uZXc7CisKKyAgICBSZWZQdHI8RGF0YWJhc2VBdXRo
b3JpemVyPiBtX2RhdGFiYXNlQXV0aG9yaXplcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gNjE5NTMpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAKICNp
ZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCIKLSNp
bmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNr
LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQu
aCIKQEAgLTUwLDcgKzQ5LDYgQEAKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCi0jaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlZvaWRDYWxsYmFjay5oIgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAt
NjQsODEgKzYyLDI3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gSWYgd2Ugc2xlZXAg
Zm9yIG1vcmUgdGhlIDMwIHNlY29uZHMgd2hpbGUgYmxvY2tlZCBvbiBTUUxJVEVfQlVTWSwgZ2l2
ZSB1cC4KLXN0YXRpYyBjb25zdCBpbnQgbWF4U3FsaXRlQnVzeVdhaXRUaW1lID0gMzAwMDA7Ci0K
LWNvbnN0IFN0cmluZyYgRGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpCi17Ci0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG5hbWUsICgiX19XZWJLaXREYXRhYmFzZUluZm9U
YWJsZV9fIikpOwotICAgIHJldHVybiBuYW1lOwotfQotCi1zdGF0aWMgTXV0ZXgmIGd1aWRNdXRl
eCgpCi17Ci0gICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRvbWljYWxseUluaXRp
YWxpemVkU3RhdGljIGhlcmUgYmVjYXVzZQotICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
IG9uY2UgaW4gdGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRocmVhZAotICAgIC8vIGJlZm9y
ZSBhbnkgb3RoZXIgdGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBhcmUgdXNlZC4KLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBtdXRleCwgKCkpOwotICAgIHJldHVybiBtdXRl
eDsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPGludCwgU3RyaW5nPiBHdWlkVmVyc2lvbk1hcDsKLXN0
YXRpYyBHdWlkVmVyc2lvbk1hcCYgZ3VpZFRvVmVyc2lvbk1hcCgpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChHdWlkVmVyc2lvbk1hcCwgbWFwLCAoKSk7Ci0gICAgcmV0dXJuIG1hcDsKLX0K
LQotLy8gTk9URTogQ2FsbGVyIG11c3QgbG9jayBndWlkTXV0ZXgoKS4KLXN0YXRpYyBpbmxpbmUg
dm9pZCB1cGRhdGVHdWlkVmVyc2lvbk1hcChpbnQgZ3VpZCwgU3RyaW5nIG5ld1ZlcnNpb24pCi17
Ci0gICAgLy8gRW5zdXJlIHRoZSB0aGUgbXV0ZXggaXMgbG9ja2VkLgotICAgIEFTU0VSVCghZ3Vp
ZE11dGV4KCkudHJ5TG9jaygpKTsKLQotICAgIC8vIE5vdGU6IEl0IGlzIG5vdCBzYWZlIHRvIHB1
dCBhbiBlbXB0eSBzdHJpbmcgaW50byB0aGUgZ3VpZFRvVmVyc2lvbk1hcCgpIG1hcC4KLSAgICAv
LyBUaGF0J3MgYmVjYXVzZSB0aGUgbWFwIGlzIGNyb3NzLXRocmVhZCwgYnV0IGVtcHR5IHN0cmlu
Z3MgYXJlIHBlci10aHJlYWQuCi0gICAgLy8gVGhlIGNvcHkoKSBmdW5jdGlvbiBtYWtlcyBhIHZl
cnNpb24gb2YgdGhlIHN0cmluZyB5b3UgY2FuIHVzZSBvbiB0aGUgY3VycmVudAotICAgIC8vIHRo
cmVhZCwgYnV0IHdlIG5lZWQgYSBzdHJpbmcgd2UgY2FuIGtlZXAgaW4gYSBjcm9zcy10aHJlYWQg
ZGF0YSBzdHJ1Y3R1cmUuCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSBxdWl0ZS1hd2t3YXJkIHJl
c3RyaWN0aW9uIHRvIGhhdmUgdG8gcHJvZ3JhbSB3aXRoLgotCi0gICAgLy8gTWFwIG51bGwgc3Ry
aW5nIHRvIGVtcHR5IHN0cmluZyAoc2VlIGNvbW1lbnQgYWJvdmUpLgotICAgIGd1aWRUb1ZlcnNp
b25NYXAoKS5zZXQoZ3VpZCwgbmV3VmVyc2lvbi5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IG5ld1Zl
cnNpb24udGhyZWFkc2FmZUNvcHkoKSk7Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxpbnQsIEhhc2hT
ZXQ8RGF0YWJhc2UqPio+IEd1aWREYXRhYmFzZU1hcDsKLXN0YXRpYyBHdWlkRGF0YWJhc2VNYXAm
IGd1aWRUb0RhdGFiYXNlTWFwKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWREYXRh
YmFzZU1hcCwgbWFwLCAoKSk7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VWZXJzaW9uS2V5KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0
cmluZywga2V5LCAoIldlYktpdERhdGFiYXNlVmVyc2lvbktleSIpKTsKLSAgICByZXR1cm4ga2V5
OwotfQotCi1zdGF0aWMgaW50IGd1aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYgb3Jp
Z2luLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotCiBjbGFzcyBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJh
Y2tUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2s+IGNyZWF0
ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxE
YXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFzZT4g
ZGF0YWJhc2UsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayhk
YXRhYmFzZSk7CisgICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFz
ayhkYXRhYmFzZSwgY3JlYXRpb25DYWxsYmFjayk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lk
IHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQorICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKLSAgICAg
ICAgbV9kYXRhYmFzZS0+cGVyZm9ybUNyZWF0aW9uQ2FsbGJhY2soKTsKKyAgICAgICAgbV9jcmVh
dGlvbkNhbGxiYWNrLT5oYW5kbGVFdmVudChjb250ZXh0LCBtX2RhdGFiYXNlLmdldCgpKTsKICAg
ICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzayhQYXNzUmVm
UHRyPERhdGFiYXNlPiBkYXRhYmFzZSkKKyAgICBEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNr
KFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+IGNhbGxiYWNrKQogICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwg
bV9jcmVhdGlvbkNhbGxiYWNrKGNhbGxiYWNrKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQdHI8
RGF0YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IG1fY3Jl
YXRpb25DYWxsYmFjazsKIH07CiAKIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpvcGVu
RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBu
YW1lLApAQCAtMTQ3LDE0ICs5MSwxMyBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZTo6
b3BlbkRhdGFiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4
Y2VwdGlvbkNvZGUmIGUpCiB7CiAgICAgaWYgKCFEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5j
YW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVk
U2l6ZSkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoZXJlIHNob3VsZCBiZSBhbiBleGNlcHRpb24g
cmFpc2VkIGhlcmUgaW4gYWRkaXRpb24gdG8gcmV0dXJuaW5nIGEgbnVsbCBEYXRhYmFzZSBvYmpl
Y3QuICBUaGUgcXVlc3Rpb24gaGFzIGJlZW4gcmFpc2VkIHdpdGggdGhlIFdIQVRXRy4KICAgICAg
ICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBmb3Igb3JpZ2luICVzIG5vdCBhbGxvd2Vk
IHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgY29udGV4dC0+c2VjdXJp
dHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcg
RGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaykpOworICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0
YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJz
aW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwogCi0gICAgaWYgKCFkYXRhYmFzZS0+
b3BlbkFuZFZlcmlmeVZlcnNpb24oZSkpIHsKKyAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVy
aWZ5VmVyc2lvbighY3JlYXRpb25DYWxsYmFjaywgZSkpIHsKICAgICAgICAgTE9HKFN0b3JhZ2VB
UEksICJGYWlsZWQgdG8gb3BlbiBhbmQgdmVyaWZ5IHZlcnNpb24gKGV4cGVjdGVkICVzKSBvZiBk
YXRhYmFzZSAlcyIsIGV4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UtPmRh
dGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICBjb250ZXh0LT5yZW1v
dmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOwpAQCAtMTc2LDU3
ICsxMTksMjggQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0YWJhc2U6Om9wZW5EYXRhYgogICAg
IC8vIHZlcnNpb24gdG8gIiIgYW5kIHNjaGVkdWxlIHRoZSBjcmVhdGlvbiBjYWxsYmFjay4gQmVj
YXVzZSBvZiBzb21lIHN1YnRsZSBTdHJpbmcKICAgICAvLyBpbXBsZW1lbnRhdGlvbiBpc3N1ZXMs
IHdlIGhhdmUgdG8gcmVzZXQgbV9leHBlY3RlZFZlcnNpb24gaGVyZSBpbnN0ZWFkIG9mIGRvaW5n
CiAgICAgLy8gaXQgaW5zaWRlIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkgd2hpY2ggaXMgcnVuIG9u
IHRoZSBEQiB0aHJlYWQuCi0gICAgaWYgKGRhdGFiYXNlLT5pc05ldygpICYmIGRhdGFiYXNlLT5t
X2NyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKKyAgICBpZiAoZGF0YWJhc2UtPmlzTmV3KCkgJiYg
Y3JlYXRpb25DYWxsYmFjay5nZXQoKSkgewogICAgICAgICBkYXRhYmFzZS0+bV9leHBlY3RlZFZl
cnNpb24gPSAiIjsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNl
Q3JlYXRpb25DYWxsYmFja1Rhc2sgZm9yIGRhdGFiYXNlICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7
Ci0gICAgICAgIGRhdGFiYXNlLT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKERh
dGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2s6OmNyZWF0ZShkYXRhYmFzZSkpOworICAgICAgICBk
YXRhYmFzZS0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhEYXRhYmFzZUNyZWF0
aW9uQ2FsbGJhY2tUYXNrOjpjcmVhdGUoZGF0YWJhc2UsIGNyZWF0aW9uQ2FsbGJhY2spKTsKICAg
ICB9CiAKICAgICByZXR1cm4gZGF0YWJhc2U7CiB9CiAKLURhdGFiYXNlOjpEYXRhYmFzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRp
b25DYWxsYmFjaykKLSAgICA6IG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQorRGF0YWJh
c2U6OkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICA6IEFic3RyYWN0RGF0
YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSkKKyAgICAsIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZhbHNlKQogICAgICwgbV9p
c1RyYW5zYWN0aW9uUXVldWVFbmFibGVkKHRydWUpCi0gICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoY29udGV4dCkKLSAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0g
ICAgLCBtX2d1aWQoMCkKLSAgICAsIG1fZXhwZWN0ZWRWZXJzaW9uKGV4cGVjdGVkVmVyc2lvbi5j
cm9zc1RocmVhZFN0cmluZygpKQotICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5jcm9z
c1RocmVhZFN0cmluZygpKQotICAgICwgbV9lc3RpbWF0ZWRTaXplKGVzdGltYXRlZFNpemUpCiAg
ICAgLCBtX2RlbGV0ZWQoZmFsc2UpCiAgICAgLCBtX3N0b3BwZWQoZmFsc2UpCi0gICAgLCBtX29w
ZW5lZChmYWxzZSkKLSAgICAsIG1fbmV3KGZhbHNlKQotICAgICwgbV9jcmVhdGlvbkNhbGxiYWNr
KGNyZWF0aW9uQ2FsbGJhY2spCiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5nZXQoKSk7Ci0gICAgbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7CiAgICAgbV9kYXRhYmFzZVRocmVhZFNl
Y3VyaXR5T3JpZ2luID0gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4tPnRocmVhZHNhZmVD
b3B5KCk7Ci0gICAgaWYgKG1fbmFtZS5pc051bGwoKSkKLSAgICAgICAgbV9uYW1lID0gIiI7CiAK
ICAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0KLSAgICBtX2d1
aWQgPSBndWlkRm9yT3JpZ2luQW5kTmFtZShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBu
YW1lKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsK
LQotICAgICAgICBIYXNoU2V0PERhdGFiYXNlKj4qIGhhc2hTZXQgPSBndWlkVG9EYXRhYmFzZU1h
cCgpLmdldChtX2d1aWQpOwotICAgICAgICBpZiAoIWhhc2hTZXQpIHsKLSAgICAgICAgICAgIGhh
c2hTZXQgPSBuZXcgSGFzaFNldDxEYXRhYmFzZSo+OwotICAgICAgICAgICAgZ3VpZFRvRGF0YWJh
c2VNYXAoKS5zZXQobV9ndWlkLCBoYXNoU2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGhhc2hT
ZXQtPmFkZCh0aGlzKTsKLSAgICB9Ci0KICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5kYXRhYmFzZVRocmVhZCgpKTsKLSAgICBtX2ZpbGVuYW1lID0gRGF0YWJhc2VUcmFja2Vy
Ojp0cmFja2VyKCkuZnVsbFBhdGhGb3JEYXRhYmFzZShzZWN1cml0eU9yaWdpbigpLCBtX25hbWUp
OwogCi0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuYWRkT3BlbkRhdGFiYXNlKHRoaXMp
OwotICAgIGNvbnRleHQtPmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKKyAgICBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKIH0KIAogY2xhc3MgRGVyZWZDb250
ZXh0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKQEAgLTI1Mywx
NSArMTY3LDIxIEBAIERhdGFiYXNlOjp+RGF0YWJhc2UoKQogICAgIH0KIH0KIAotYm9vbCBEYXRh
YmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24oRXhjZXB0aW9uQ29kZSYgZSkKK1N0cmluZyBEYXRh
YmFzZTo6dmVyc2lvbigpIGNvbnN0Cit7CisgICAgaWYgKG1fZGVsZXRlZCkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIHJldHVybiBBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9uKCk7Cit9
CisKK2Jvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbklu
TmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGUpCiB7CiAgICAgaWYgKCFtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX2RhdGFiYXNlQXV0aG9yaXplciA9IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlKCk7CiAK
ICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIg
c3luY2hyb25pemVyOwotICAgIE93blB0cjxEYXRhYmFzZU9wZW5UYXNrPiB0YXNrID0gRGF0YWJh
c2VPcGVuVGFzazo6Y3JlYXRlKHRoaXMsICZzeW5jaHJvbml6ZXIsIGUsIHN1Y2Nlc3MpOworICAg
IE93blB0cjxEYXRhYmFzZU9wZW5UYXNrPiB0YXNrID0gRGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRl
KHRoaXMsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCAmc3luY2hyb25pemVyLCBlLCBzdWNjZXNz
KTsKIAogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+c2No
ZWR1bGVJbW1lZGlhdGVUYXNrKHRhc2sucmVsZWFzZSgpKTsKICAgICBzeW5jaHJvbml6ZXIud2Fp
dEZvclRhc2tDb21wbGV0aW9uKCk7CkBAIC0yNjksOTMgKzE4OSw2IEBAIGJvb2wgRGF0YWJhc2U6
Om9wZW5BbmRWZXJpZnlWZXJzaW9uKEV4Y2UKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAotCi1z
dGF0aWMgYm9vbCByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UoU1FMaXRlRGF0YWJhc2Um
IGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBTdHJpbmcmIHJlc3VsdFN0cmluZykKLXsKLSAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7Ci0gICAgaW50IHJlc3VsdCA9IHN0
YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiRXJyb3IgKCVpKSBwcmVwYXJpbmcgc3RhdGVtZW50IHRvIHJlYWQg
dGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRh
dGEoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBzdGF0
ZW1lbnQuc3RlcCgpOwotICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7Ci0gICAgICAg
IHJlc3VsdFN0cmluZyA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKSB7Ci0gICAg
ICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
IGVsc2UgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcmVhZGluZyB0ZXh0IHJlc3Vs
dCBmcm9tIGRhdGFiYXNlICglcykiLCByZXN1bHQsIHF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBEYXRhYmFzZTo6Z2V0VmVyc2lv
bkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIGdldFZlcnNpb25RdWVyeSwgKCJTRUxFQ1QgdmFsdWUgRlJPTSAiICsgZGF0YWJh
c2VJbmZvVGFibGVOYW1lKCkgKyAiIFdIRVJFIGtleSA9ICciICsgZGF0YWJhc2VWZXJzaW9uS2V5
KCkgKyAiJzsiKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwotCi0g
ICAgYm9vbCByZXN1bHQgPSByZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UobV9zcWxpdGVE
YXRhYmFzZSwgZ2V0VmVyc2lvblF1ZXJ5LnRocmVhZHNhZmVDb3B5KCksIHZlcnNpb24pOwotICAg
IGlmICghcmVzdWx0KQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSB2ZXJz
aW9uIGZyb20gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgp
KTsKLQotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKLQotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXN0YXRpYyBib29sIHNldFRleHRWYWx1ZUluRGF0YWJhc2UoU1FMaXRlRGF0
YWJhc2UmIGRiLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGIsIHF1ZXJ5KTsKLSAgICBpbnQgcmVzdWx0
ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQotICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2sp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gc2V0
IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzdGF0ZW1lbnQuYmluZFRleHQoMSwgdmFsdWUp
OwotCi0gICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ICE9IFNR
TFJlc3VsdERvbmUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc3RlcCBzdGF0ZW1l
bnQgdG8gc2V0IHZhbHVlIGluIGRhdGFiYXNlICglcykiLCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBEYXRhYmFzZTo6c2V0VmVyc2lvbkluRGF0YWJhc2UoY29uc3QgU3RyaW5nJiB2ZXJzaW9u
KQotewotICAgIC8vIFRoZSBJTlNFUlQgd2lsbCByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5IGZv
ciB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgbmV3IHZlcnNpb24gbnVtYmVyLCBkdWUgdG8gdGhlIFVO
SVFVRSBPTiBDT05GTElDVCBSRVBMQUNFCi0gICAgLy8gY2xhdXNlIGluIHRoZSBDUkVBVEUgc3Rh
dGVtZW50IChzZWUgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkpLgotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzZXRWZXJzaW9uUXVlcnksICgiSU5TRVJUIElOVE8gIiAr
IGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiAoa2V5LCB2YWx1ZSkgVkFMVUVTICgnIiArIGRh
dGFiYXNlVmVyc2lvbktleSgpICsgIicsID8pOyIpKTsKLQotICAgIG1fZGF0YWJhc2VBdXRob3Jp
emVyLT5kaXNhYmxlKCk7Ci0KLSAgICBib29sIHJlc3VsdCA9IHNldFRleHRWYWx1ZUluRGF0YWJh
c2UobV9zcWxpdGVEYXRhYmFzZSwgc2V0VmVyc2lvblF1ZXJ5LnRocmVhZHNhZmVDb3B5KCksIHZl
cnNpb24pOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBz
ZXQgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAoJXMpIiwgdmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwg
c2V0VmVyc2lvblF1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLQotICAgIG1fZGF0YWJhc2VBdXRob3Jp
emVyLT5lbmFibGUoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgRGF0YWJhc2U6
OnZlcnNpb25NYXRjaGVzRXhwZWN0ZWQoKSBjb25zdAotewotICAgIGlmICghbV9leHBlY3RlZFZl
cnNpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgo
KSk7Ci0gICAgICAgIHJldHVybiBtX2V4cGVjdGVkVmVyc2lvbiA9PSBndWlkVG9WZXJzaW9uTWFw
KCkuZ2V0KG1fZ3VpZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgRGF0
YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCiB7CiAgICAgaWYgKG1fZGVsZXRlZCB8fCAh
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKQpAQCAtNDEwLDMwICsy
NDMsMTMgQEAgdm9pZCBEYXRhYmFzZTo6Y2xvc2UoQ2xvc2VQb2xpY3kgcG9saWN5KQogewogICAg
IFJlZlB0cjxEYXRhYmFzZT4gcHJvdGVjdCA9IHRoaXM7CiAKLSAgICBpZiAoIW1fb3BlbmVkKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5k
YXRhYmFzZVRocmVhZCgpKTsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7Ci0gICAg
bV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgIC8vIE11c3QgcmVmKCkgYmVmb3JlIGNhbGxp
bmcgZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQoKS4KLSAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2Vk
KHRoaXMpOwotICAgIG1fb3BlbmVkID0gZmFsc2U7Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CiAKLSAgICAgICAgSGFzaFNldDxEYXRhYmFzZSo+KiBo
YXNoU2V0ID0gZ3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKLSAgICAgICAgQVNTRVJU
KGhhc2hTZXQpOwotICAgICAgICBBU1NFUlQoaGFzaFNldC0+Y29udGFpbnModGhpcykpOwotICAg
ICAgICBoYXNoU2V0LT5yZW1vdmUodGhpcyk7Ci0gICAgICAgIGlmIChoYXNoU2V0LT5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIGd1aWRUb0RhdGFiYXNlTWFwKCkucmVtb3ZlKG1fZ3VpZCk7Ci0g
ICAgICAgICAgICBkZWxldGUgaGFzaFNldDsKLSAgICAgICAgICAgIGd1aWRUb1ZlcnNpb25NYXAo
KS5yZW1vdmUobV9ndWlkKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBjbG9zZURhdGFiYXNlKCk7
CiAKKyAgICAvLyBNdXN0IHJlZigpIGJlZm9yZSBjYWxsaW5nIGRhdGFiYXNlVGhyZWFkKCktPnJl
Y29yZERhdGFiYXNlQ2xvc2VkKCkuCisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRh
YmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCh0aGlzKTsKICAgICBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnVuc2NoZWR1bGVEYXRhYmFzZVRhc2tz
KHRoaXMpOwogICAgIGlmIChwb2xpY3kgPT0gUmVtb3ZlRGF0YWJhc2VGcm9tQ29udGV4dCkKICAg
ICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhDb250ZXh0UmVtb3ZlT3Bl
bkRhdGFiYXNlVGFzazo6Y3JlYXRlKHRoaXMpKTsKQEAgLTQ2Myw2ICsyNzksOSBAQCB2b2lkIERh
dGFiYXNlOjpzdG9wKCkKICAgICAgICAgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkID0gZmFs
c2U7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CiAgICAgfQorCisg
ICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSkKKyAgICAg
ICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT51bnNjaGVkdWxl
RGF0YWJhc2VUYXNrcyh0aGlzKTsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlOjpt
YXhpbXVtU2l6ZSgpIGNvbnN0CkBAIC00NzAsNzkgKzI4OSw2IEBAIHVuc2lnbmVkIGxvbmcgbG9u
ZyBEYXRhYmFzZTo6bWF4aW11bVNpemUKICAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkuZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKHRoaXMpOwogfQogCi12b2lkIERhdGFiYXNlOjpk
aXNhYmxlQXV0aG9yaXplcigpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsK
LSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwotfQotCi12b2lkIERhdGFiYXNl
OjplbmFibGVBdXRob3JpemVyKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIp
OwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKLX0KLQotdm9pZCBEYXRhYmFz
ZTo6c2V0QXV0aG9yaXplclJlYWRPbmx5KCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhv
cml6ZXIpOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5zZXRSZWFkT25seSgpOwotfQotCi1i
b29sIERhdGFiYXNlOjpsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkKLXsKLSAgICBBU1NFUlQo
bV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+
bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwotfQotCi1ib29sIERhdGFiYXNlOjpsYXN0QWN0
aW9uV2FzSW5zZXJ0KCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAg
IHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+bGFzdEFjdGlvbldhc0luc2VydCgpOwotfQot
Ci12b2lkIERhdGFiYXNlOjpyZXNldERlbGV0ZXMoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNl
QXV0aG9yaXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0RGVsZXRlcygpOwot
fQotCi1ib29sIERhdGFiYXNlOjpoYWREZWxldGVzKCkKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFz
ZUF1dGhvcml6ZXIpOwotICAgIHJldHVybiBtX2RhdGFiYXNlQXV0aG9yaXplci0+aGFkRGVsZXRl
cygpOwotfQotCi1zdGF0aWMgaW50IGd1aWRGb3JPcmlnaW5BbmROYW1lKGNvbnN0IFN0cmluZyYg
b3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgU3RyaW5nIHN0cmluZ0lEOwotICAg
IGlmIChvcmlnaW4uZW5kc1dpdGgoIi8iKSkKLSAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyBu
YW1lOwotICAgIGVsc2UKLSAgICAgICAgc3RyaW5nSUQgPSBvcmlnaW4gKyAiLyIgKyBuYW1lOwot
Ci0gICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVk
U3RhdGljIGhlcmUgYmVjYXVzZQotICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2Ug
aW4gdGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBtYWluIHRocmVhZAotICAgIC8vIGJlZm9yZSBhbnkg
b3RoZXIgdGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBhcmUgdXNlZC4KLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKE11dGV4LCBzdHJpbmdJZGVudGlmaWVyTXV0ZXgsICgpKTsKLSAgICBN
dXRleExvY2tlciBsb2NrZXIoc3RyaW5nSWRlbnRpZmllck11dGV4KTsKLSAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBpbnQ+IElER3VpZE1hcDsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKElE
R3VpZE1hcCwgc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcCwgKCkpOwotICAgIGludCBndWlkID0g
c3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcC5nZXQoc3RyaW5nSUQpOwotICAgIGlmICghZ3VpZCkg
ewotICAgICAgICBzdGF0aWMgaW50IGN1cnJlbnROZXdHVUlEID0gMTsKLSAgICAgICAgZ3VpZCA9
IGN1cnJlbnROZXdHVUlEKys7Ci0gICAgICAgIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuc2V0
KHN0cmluZ0lELCBndWlkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ3VpZDsKLX0KLQotdm9pZCBE
YXRhYmFzZTo6cmVzZXRBdXRob3JpemVyKCkKLXsKLSAgICBpZiAobV9kYXRhYmFzZUF1dGhvcml6
ZXIpCi0gICAgICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5yZXNldCgpOwotfQotCiB2b2lkIERh
dGFiYXNlOjpwZXJmb3JtUG9saWN5Q2hlY2tzKCkKIHsKICAgICAvLyBGSVhNRTogQ29kZSBzaW1p
bGFyIHRvIHRoZSBmb2xsb3dpbmcgd2lsbCBuZWVkIHRvIGJlIHJ1biB0byBlbmZvcmNlIHRoZSBw
ZXItb3JpZ2luIHNpemUgbGltaXQgdGhlIHNwZWMgbWFuZGF0ZXMuCkBAIC01NTcsOTIgKzMwMywx
NiBAQCB2b2lkIERhdGFiYXNlOjpwZXJmb3JtUG9saWN5Q2hlY2tzKCkKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi1ib29sIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShFeGNlcHRp
b25Db2RlJiBlKQorYm9vbCBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRW
ZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYgZSkKIHsKLSAgICBpZiAoIW1fc3Fs
aXRlRGF0YWJhc2Uub3BlbihtX2ZpbGVuYW1lLCB0cnVlKSkgewotICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBvcGVuIGRhdGFiYXNlIGF0IHBhdGggJXMiLCBtX2ZpbGVuYW1lLmFzY2lpKCku
ZGF0YSgpKTsKLSAgICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50dXJuT25JbmNyZW1lbnRh
bEF1dG9WYWN1dW0oKSkKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gdHVybiBvbiBpbmNy
ZW1lbnRhbCBhdXRvLXZhY3V1bSBmb3IgZGF0YWJhc2UgJXMiLCBtX2ZpbGVuYW1lLmFzY2lpKCku
ZGF0YSgpKTsKKyAgICBpZiAoQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnko
c2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIGUpKSB7CisgICAgICAgIGlmIChtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpCisgICAgICAgICAgICBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlT3Blbih0aGlzKTsK
IAotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9zcWxpdGVEYXRhYmFz
ZS5zZXRBdXRob3JpemVyKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICBtX3NxbGl0ZURhdGFi
YXNlLnNldEJ1c3lUaW1lb3V0KG1heFNxbGl0ZUJ1c3lXYWl0VGltZSk7Ci0KLSAgICBTdHJpbmcg
Y3VycmVudFZlcnNpb247Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11
dGV4KCkpOwotCi0gICAgICAgIEd1aWRWZXJzaW9uTWFwOjppdGVyYXRvciBlbnRyeSA9IGd1aWRU
b1ZlcnNpb25NYXAoKS5maW5kKG1fZ3VpZCk7Ci0gICAgICAgIGlmIChlbnRyeSAhPSBndWlkVG9W
ZXJzaW9uTWFwKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIC8vIE1hcCBudWxsIHN0cmluZyB0byBl
bXB0eSBzdHJpbmcgKHNlZSB1cGRhdGVHdWlkVmVyc2lvbk1hcCgpKS4KLSAgICAgICAgICAgIGN1
cnJlbnRWZXJzaW9uID0gZW50cnktPnNlY29uZC5pc051bGwoKSA/IFN0cmluZygiIikgOiBlbnRy
eS0+c2Vjb25kOwotICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJDdXJyZW50IGNhY2hlZCB2
ZXJzaW9uIGZvciBndWlkICVpIGlzICVzIiwgbV9ndWlkLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgp
LmRhdGEoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwg
Ik5vIGNhY2hlZCB2ZXJzaW9uIGZvciBndWlkICVpIiwgbV9ndWlkKTsKLQotICAgICAgICAgICAg
aWYgKCFtX3NxbGl0ZURhdGFiYXNlLnRhYmxlRXhpc3RzKGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgp
KSkgewotICAgICAgICAgICAgICAgIG1fbmV3ID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGlm
ICghbV9zcWxpdGVEYXRhYmFzZS5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFICIgKyBkYXRh
YmFzZUluZm9UYWJsZU5hbWUoKSArICIgKGtleSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsdmFsdWUgVEVYVCBOT1QgTlVMTCBPTiBDT05G
TElDVCBGQUlMKTsiKSkgewotICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
byBjcmVhdGUgdGFibGUgJXMgaW4gZGF0YWJhc2UgJXMiLCBkYXRhYmFzZUluZm9UYWJsZU5hbWUo
KS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGUgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KLSAgICAgICAg
ICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoIWdldFZlcnNpb25Gcm9tRGF0YWJhc2UoY3VycmVudFZlcnNpb24pKSB7Ci0g
ICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdmVyc2lvbiBm
cm9tIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICAgICAgICAgIC8v
IENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCi0gICAgICAgICAgICAgICAg
bV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjdXJyZW50VmVyc2lvbi5sZW5ndGgoKSkg
ewotICAgICAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiUmV0cmlldmVkIGN1cnJlbnQgdmVy
c2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzIiwgY3VycmVudFZlcnNpb24uYXNjaWkoKS5kYXRhKCks
IGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgfSBlbHNl
IGlmICghbV9uZXcgfHwgIW1fY3JlYXRpb25DYWxsYmFjaykgewotICAgICAgICAgICAgICAgIExP
RyhTdG9yYWdlQVBJLCAiU2V0dGluZyB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICVzIHRoYXQgd2Fz
IGp1c3QgY3JlYXRlZCIsIG1fZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFz
ZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNldFZl
cnNpb25JbkRhdGFiYXNlKG1fZXhwZWN0ZWRWZXJzaW9uKSkgewotICAgICAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyIsIG1f
ZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lp
KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwot
ICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBm
aWxlLgotICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgY3VycmVudFZlcnNpb24gPSBtX2V4cGVjdGVkVmVyc2lvbjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCBjdXJyZW50VmVy
c2lvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY3VycmVudFZlcnNpb24uaXNOdWxs
KCkpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBkb2VzIG5vdCBoYXZl
IGl0cyB2ZXJzaW9uIHNldCIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwot
ICAgICAgICBjdXJyZW50VmVyc2lvbiA9ICIiOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBleHBl
Y3RlZCB2ZXJzaW9uIGlzbid0IHRoZSBlbXB0eSBzdHJpbmcsIGVuc3VyZSB0aGF0IHRoZSBjdXJy
ZW50IGRhdGFiYXNlIHZlcnNpb24gd2UgaGF2ZSBtYXRjaGVzIHRoYXQgdmVyc2lvbi4gT3RoZXJ3
aXNlLCBzZXQgYW4gZXhjZXB0aW9uLgotICAgIC8vIElmIHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlz
IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gd2UgYWx3YXlzIHJldHVybiB3aXRoIHdoYXRldmVyIHZl
cnNpb24gb2YgdGhlIGRhdGFiYXNlIHdlIGhhdmUuCi0gICAgaWYgKCghbV9uZXcgfHwgIW1fY3Jl
YXRpb25DYWxsYmFjaykgJiYgbV9leHBlY3RlZFZlcnNpb24ubGVuZ3RoKCkgJiYgbV9leHBlY3Rl
ZFZlcnNpb24gIT0gY3VycmVudFZlcnNpb24pIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJw
YWdlIGV4cGVjdHMgdmVyc2lvbiAlcyBmcm9tIGRhdGFiYXNlICVzLCB3aGljaCBhY3R1YWxseSBo
YXMgdmVyc2lvbiBuYW1lICVzIC0gb3BlbkRhdGFiYXNlKCkgY2FsbCB3aWxsIGZhaWwiLCBtX2V4
cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwKLSAgICAgICAgICAgIGRhdGFiYXNlRGVidWdO
YW1lKCkuYXNjaWkoKS5kYXRhKCksIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKLSAg
ICAgICAgZSA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxl
IHRvIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgLy8gQWxsIGNoZWNrcyBwYXNzZWQgYW5kIHdlIHN0aWxsIGhhdmUgYSBoYW5kbGUgdG8gdGhp
cyBkYXRhYmFzZSBmaWxlLgotICAgIC8vIE1ha2Ugc3VyZSBEYXRhYmFzZVRocmVhZCBjbG9zZXMg
aXQgd2hlbiBEYXRhYmFzZVRocmVhZCBnb2VzIGF3YXkuCi0gICAgbV9vcGVuZWQgPSB0cnVlOwot
ICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkpCi0gICAg
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0
YWJhc2VPcGVuKHRoaXMpOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwog
fQogCiB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lv
biwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLApAQCAtNzU3LDExICs0MjcsNiBAQCBWZWN0b3I8
U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlCiAgICAgcmV0dXJuIHRhYmxlTmFtZXM7
CiB9CiAKLXZvaWQgRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKCkKLXsKLSAgICBt
X2NyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5n
ZXQoKSwgdGhpcyk7Ci19Ci0KIFNRTFRyYW5zYWN0aW9uQ2xpZW50KiBEYXRhYmFzZTo6dHJhbnNh
Y3Rpb25DbGllbnQoKSBjb25zdAogewogICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmRhdGFiYXNlVGhyZWFkKCktPnRyYW5zYWN0aW9uQ2xpZW50KCk7CkBAIC03NzIsMTQgKzQz
Nyw2IEBAIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIERhdGFiYXNlOjp0cmEKICAgICByZXR1
cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCk7CiB9CiAKLVN0cmluZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fZGVsZXRlZCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7Ci0gICAgcmV0dXJuIGd1aWRUb1ZlcnNpb25NYXAo
KS5nZXQobV9ndWlkKS50aHJlYWRzYWZlQ29weSgpOwotfQotCiBWZWN0b3I8U3RyaW5nPiBEYXRh
YmFzZTo6dGFibGVOYW1lcygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB1c2luZyB0aHJlYWRzYWZl
Q29weSBvbiB0aGVzZSBzdHJpbmdzIGxvb2tzIG9rIHNpbmNlIHRocmVhZHMgdGFrZSBzdHJpY3Qg
dHVybnMKQEAgLTc5NywxNCArNDU0LDYgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnRhYmxl
TmFtZXMoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRGF0YWJhc2U6OnNldEV4cGVj
dGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAgbV9leHBlY3RlZFZlcnNp
b24gPSB2ZXJzaW9uLnRocmVhZHNhZmVDb3B5KCk7Ci0gICAgLy8gVXBkYXRlIHRoZSBpbiBtZW1v
cnkgZGF0YWJhc2UgdmVyc2lvbiBtYXAuCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRl
eCgpKTsKLSAgICB1cGRhdGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIHZlcnNpb24pOwotfQotCiBT
ZWN1cml0eU9yaWdpbiogRGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKIHsKICAgICBp
ZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkKQEAgLTgxNCwy
OSArNDYzLDYgQEAgU2VjdXJpdHlPcmlnaW4qIERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbgogICAg
IHJldHVybiAwOwogfQogCi1TdHJpbmcgRGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIoKSBjb25z
dAotewotICAgIC8vIFJldHVybiBhIGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBz
YWZldHkKLSAgICByZXR1cm4gbV9uYW1lLnRocmVhZHNhZmVDb3B5KCk7Ci19Ci0KLVN0cmluZyBE
YXRhYmFzZTo6ZGlzcGxheU5hbWUoKSBjb25zdAotewotICAgIC8vIFJldHVybiBhIGRlZXAgY29w
eSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkKLSAgICByZXR1cm4gbV9kaXNwbGF5TmFt
ZS50aHJlYWRzYWZlQ29weSgpOwotfQotCi11bnNpZ25lZCBsb25nIERhdGFiYXNlOjplc3RpbWF0
ZWRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lc3RpbWF0ZWRTaXplOwotfQotCi1TdHJp
bmcgRGF0YWJhc2U6OmZpbGVOYW1lKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNv
cHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fZmlsZW5hbWUu
dGhyZWFkc2FmZUNvcHkoKTsKLX0KLQogdm9pZCBEYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1J
Zk5lZWRlZCgpCiB7CiAgICAgaW50NjRfdCBmcmVlU3BhY2VTaXplID0gbV9zcWxpdGVEYXRhYmFz
ZS5mcmVlU3BhY2VTaXplKCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkocmV2aXNpb24gNjE5NTMpCisr
KyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTggKzMz
LDEzIEBACiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKLSNpZm5kZWYgTkRFQlVHCi0j
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL0RlcXVl
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBEYXRhYmFzZUF1dGhvcml6ZXI7CiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOwotY2xhc3Mg
RGF0YWJhc2VUaHJlYWQ7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2Vj
dXJpdHlPcmlnaW47CiBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKQEAgLTU0LDggKzQ5LDYgQEAgY2xh
c3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjazsKIGNsYXNzIFZvaWRDYWxsYmFjazsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKLQogY2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+RGF0YWJhc2UoKTsKQEAgLTYzLDM3ICs1NiwxNyBAQCBwdWJsaWM6CiAg
ICAgLy8gRGlyZWN0IHN1cHBvcnQgZm9yIHRoZSBET00gQVBJCiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxi
YWNrPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CisgICAg
dmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0OwogICAgIHZvaWQgY2hhbmdlVmVyc2lvbihj
b25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbiwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwKICAgICAgICAgICAgICAgICAgICAgICAgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxs
YmFjaz4gc3VjY2Vzc0NhbGxiYWNrKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrPiwKICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpOwogCiAgICAgLy8gSW50ZXJuYWwgZW5naW5l
IHN1cHBvcnQKLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUo
KTsKLQotICAgIHZvaWQgZGlzYWJsZUF1dGhvcml6ZXIoKTsKLSAgICB2b2lkIGVuYWJsZUF1dGhv
cml6ZXIoKTsKLSAgICB2b2lkIHNldEF1dGhvcml6ZXJSZWFkT25seSgpOwotICAgIGJvb2wgbGFz
dEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpOwotICAgIGJvb2wgbGFzdEFjdGlvbldhc0luc2VydCgp
OwotICAgIHZvaWQgcmVzZXREZWxldGVzKCk7Ci0gICAgYm9vbCBoYWREZWxldGVzKCk7Ci0KICAg
ICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzKCk7CiAKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2lu
KiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwogICAgIFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRh
YmFzZSgpIHsgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2U7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBz
dHJpbmdJZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5hbWUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7Ci0KLSAgICBib29sIGdldFZl
cnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJik7Ci0gICAgYm9vbCBzZXRWZXJzaW9uSW5EYXRhYmFz
ZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJp
bmcmKTsKLSAgICBib29sIHZlcnNpb25NYXRjaGVzRXhwZWN0ZWQoKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgdm9pZCBtYXJrQXNEZWxldGVkQW5kQ2xvc2UoKTsKICAgICBib29sIGRlbGV0ZWQoKSBj
b25zdCB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KQEAgLTEwMSwyOCArNzQsMjMgQEAgcHVibGljOgog
ICAgIGVudW0gQ2xvc2VQb2xpY3kgeyBEb05vdFJlbW92ZURhdGFiYXNlRnJvbUNvbnRleHQsIFJl
bW92ZURhdGFiYXNlRnJvbUNvbnRleHQgfTsKICAgICB2b2lkIGNsb3NlKENsb3NlUG9saWN5KTsK
ICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVseSgpOwotICAgIGJvb2wgb3BlbmVkKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGVuZWQ7IH0KIAotICAgIHZvaWQgc3RvcCgpOworICAgIHZpcnR1
YWwgdm9pZCBzdG9wKCk7CiAgICAgYm9vbCBzdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdG9w
cGVkOyB9CiAKLSAgICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4gbV9uZXc7IH0KLQogICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFzZVNpemUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBs
b25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKIAogICAgIC8vIENhbGxlZCBmcm9tIERhdGFi
YXNlVGhyZWFkLCBtdXN0IGJlIHByZXBhcmVkIHRvIHdvcmsgb24gdGhlIGJhY2tncm91bmQgdGhy
ZWFkCi0gICAgdm9pZCByZXNldEF1dGhvcml6ZXIoKTsKICAgICB2b2lkIHBlcmZvcm1Qb2xpY3lD
aGVja3MoKTsKIAotICAgIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhjZXB0aW9uQ29kZSYp
OworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIGluUHJvZ3Jlc3NUcmFu
c2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNr
KFNRTFRyYW5zYWN0aW9uKik7CiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxU
cmFuc2FjdGlvbiosIGJvb2wgaW1tZWRpYXRlbHkgPSBmYWxzZSk7CiAKICAgICBWZWN0b3I8U3Ry
aW5nPiBwZXJmb3JtR2V0VGFibGVOYW1lcygpOwotICAgIHZvaWQgcGVyZm9ybUNyZWF0aW9uQ2Fs
bGJhY2soKTsKIAogICAgIFNRTFRyYW5zYWN0aW9uQ2xpZW50KiB0cmFuc2FjdGlvbkNsaWVudCgp
IGNvbnN0OwogICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IoKSBjb25zdDsKQEAgLTEzMSw0NSArOTksMjMgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAotICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxE
YXRhYmFzZUNhbGxiYWNrPik7CisgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKIAotICAgIGJvb2wgb3BlbkFuZFZlcmlm
eVZlcnNpb24oRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgb3BlbkFuZFZlcmlmeVZlcnNpb24o
Ym9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9p
ZCBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CiAKKyAgICBzdGF0aWMgdm9pZCBkZWxpdmVyUGVuZGlu
Z0NhbGxiYWNrKHZvaWQqKTsKKwogICAgIERlcXVlPFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBt
X3RyYW5zYWN0aW9uUXVldWU7CiAgICAgTXV0ZXggbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRl
eDsKICAgICBib29sIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzOwogICAgIGJvb2wgbV9pc1RyYW5z
YWN0aW9uUXVldWVFbmFibGVkOwogCi0gICAgc3RhdGljIHZvaWQgZGVsaXZlclBlbmRpbmdDYWxs
YmFjayh2b2lkKik7Ci0KLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0OwotICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0
VGhyZWFkU2VjdXJpdHlPcmlnaW47CiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2RhdGFi
YXNlVGhyZWFkU2VjdXJpdHlPcmlnaW47Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBpbnQgbV9n
dWlkOwotICAgIFN0cmluZyBtX2V4cGVjdGVkVmVyc2lvbjsKLSAgICBTdHJpbmcgbV9kaXNwbGF5
TmFtZTsKLSAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKLSAgICBTdHJpbmcgbV9m
aWxlbmFtZTsKIAogICAgIGJvb2wgbV9kZWxldGVkOwotCiAgICAgYm9vbCBtX3N0b3BwZWQ7Ci0K
LSAgICBib29sIG1fb3BlbmVkOwotCi0gICAgYm9vbCBtX25ldzsKLQotICAgIFNRTGl0ZURhdGFi
YXNlIG1fc3FsaXRlRGF0YWJhc2U7Ci0gICAgUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gbV9k
YXRhYmFzZUF1dGhvcml6ZXI7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gbV9jcmVh
dGlvbkNhbGxiYWNrOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyBkYXRhYmFzZURlYnVn
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLT50b1N0
cmluZygpICsgIjo6IiArIG1fbmFtZTsgfQotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkocmV2aXNp
b24gNjE5NTMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTMgKzMwLDE5IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3Jp
emVyLmgiCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGF0YWJhc2VBdXRob3JpemVyOjpEYXRhYmFzZUF1dGhv
cml6ZXIoKQorUGFzc1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IERhdGFiYXNlQXV0aG9yaXpl
cjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VBdXRob3JpemVyKGRhdGFiYXNlSW5mb1RhYmxlTmFt
ZSkpOworfQorCitEYXRhYmFzZUF1dGhvcml6ZXI6OkRhdGFiYXNlQXV0aG9yaXplcihjb25zdCBT
dHJpbmcmIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSkKICAgICA6IG1fc2VjdXJpdHlFbmFibGVkKGZh
bHNlKQorICAgICwgbV9kYXRhYmFzZUluZm9UYWJsZU5hbWUoZGF0YWJhc2VJbmZvVGFibGVOYW1l
KQogewogICAgIHJlc2V0KCk7CiAgICAgYWRkV2hpdGVsaXN0ZWRGdW5jdGlvbnMoKTsKQEAgLTM4
OCw3ICszOTQsNyBAQCB2b2lkIERhdGFiYXNlQXV0aG9yaXplcjo6c2V0UmVhZE9ubHkoKQogICAg
IG1fcmVhZE9ubHkgPSB0cnVlOwogfQogCi1pbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkZW55QmFz
ZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK2ludCBEYXRhYmFzZUF1dGhv
cml6ZXI6OmRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKSBjb25z
dAogewogICAgIGlmICghbV9zZWN1cml0eUVuYWJsZWQpCiAgICAgICAgIHJldHVybiBTUUxBdXRo
QWxsb3c7CkBAIC0zOTksNyArNDA1LDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZGVueUJh
c2VkT25UYWJsZQogICAgIC8vICAgIGVxdWFsSWdub3JpbmdDYXNlKHRhYmxlTmFtZSwgInNxbGl0
ZV9zZXF1ZW5jZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHRhYmxlTmFtZSwgRGF0YWJhc2U6OmRh
dGFiYXNlSW5mb1RhYmxlTmFtZSgpKSkKICAgICAvLyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55
OwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRhYmxlTmFtZSwgRGF0YWJhc2U6OmRhdGFi
YXNlSW5mb1RhYmxlTmFtZSgpKSkKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodGFibGVOYW1l
LCBtX2RhdGFiYXNlSW5mb1RhYmxlTmFtZSkpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsK
IAogICAgIHJldHVybiBTUUxBdXRoQWxsb3c7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VBdXRob3JpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0
aG9yaXplci5oCShyZXZpc2lvbiA2MTk1MykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1
dGhvcml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDExIEBACiAjaWZuZGVmIERh
dGFiYXNlQXV0aG9yaXplcl9oCiAjZGVmaW5lIERhdGFiYXNlQXV0aG9yaXplcl9oCiAKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0
NCw3IEBAIGV4dGVybiBjb25zdCBpbnQgU1FMQXV0aERlbnk7CiAKIGNsYXNzIERhdGFiYXNlQXV0
aG9yaXplciA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERhdGFiYXNlQXV0aG9yaXplcj4gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlQXV0aG9yaXplcik7IH0KKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRh
dGFiYXNlSW5mb1RhYmxlTmFtZSk7CiAKICAgICBpbnQgY3JlYXRlVGFibGUoY29uc3QgU3RyaW5n
JiB0YWJsZU5hbWUpOwogICAgIGludCBjcmVhdGVUZW1wVGFibGUoY29uc3QgU3RyaW5nJiB0YWJs
ZU5hbWUpOwpAQCAtOTcsOSArOTgsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYWREZWxldGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYWREZWxldGVzOyB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VB
dXRob3JpemVyKCk7CisgICAgRGF0YWJhc2VBdXRob3JpemVyKGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VJbmZvVGFibGVOYW1lKTsKICAgICB2b2lkIGFkZFdoaXRlbGlzdGVkRnVuY3Rpb25zKCk7Ci0g
ICAgaW50IGRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIGludCBkZW55
QmFzZWRPblRhYmxlTmFtZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICBpbnQgdXBkYXRlRGVs
ZXRlc0Jhc2VkT25UYWJsZU5hbWUoY29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIG1fc2VjdXJp
dHlFbmFibGVkIDogMTsKQEAgLTEwOCw2ICsxMDksOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9y
ZWFkT25seSA6IDE7CiAgICAgYm9vbCBtX2hhZERlbGV0ZXMgOiAxOwogCisgICAgY29uc3QgU3Ry
aW5nIG1fZGF0YWJhc2VJbmZvVGFibGVOYW1lOworCiAgICAgSGFzaFNldDxTdHJpbmcsIENhc2VG
b2xkaW5nSGFzaD4gbV93aGl0ZWxpc3RlZEZ1bmN0aW9uczsKIH07CiAKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVN5bmMuY3BwCShyZXZpc2lvbiA2MTk1MykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0MSArMzEsNTAgQEAKIAogI2lmIEVO
QUJMRShEQVRBQkFTRSkKICNpbmNsdWRlICJEYXRhYmFzZUNhbGxiYWNrLmgiCisjaW5jbHVkZSAi
RGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jb25zdCBTdHJpbmcmIERhdGFiYXNlU3luYzo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkKK1Bh
c3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBEYXRhYmFzZVN5bmM6Om9wZW5EYXRhYmFzZVN5bmMoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0
aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoU3RyaW5nLCBuYW1lLCAoIl9fV2ViS2l0RGF0YWJhc2VJbmZvVGFibGVfXyIpKTsKLSAgICBy
ZXR1cm4gbmFtZTsKLX0KKyAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwog
Ci1QYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5j
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogdW5jb21tZW50IHRoZSBhc3Nl
cnQgb25jZSB3ZSB1c2UgdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHBhcmFtZXRlcgotICAg
IC8vQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIURhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLmNhbkVzdGFibGlzaERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGRp
c3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSkgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRh
dGFiYXNlICVzIGZvciBvcmlnaW4gJXMgbm90IGFsbG93ZWQgdG8gYmUgZXN0YWJsaXNoZWQiLCBu
YW1lLmFzY2lpKCkuZGF0YSgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygp
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRy
PERhdGFiYXNlU3luYz4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2VTeW5jKGNvbnRl
eHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsK
KworICAgIGlmICghZGF0YWJhc2UtPnBlcmZvcm1PcGVuQW5kVmVyaWZ5KCFjcmVhdGlvbkNhbGxi
YWNrLCBlYykpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJGYWlsZWQgdG8gb3BlbiBhbmQg
dmVyaWZ5IHZlcnNpb24gKGV4cGVjdGVkICVzKSBvZiBkYXRhYmFzZSAlcyIsIGV4cGVjdGVkVmVy
c2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2UtPmRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWko
KS5kYXRhKCkpOworICAgICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVu
RGF0YWJhc2UoZGF0YWJhc2UuZ2V0KCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURldGFpbHMoY29udGV4dC0+
c2VjdXJpdHlPcmlnaW4oKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworCisg
ICAgaWYgKGRhdGFiYXNlLT5pc05ldygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKKyAg
ICAgICAgZGF0YWJhc2UtPm1fZXhwZWN0ZWRWZXJzaW9uID0gIiI7CisgICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiSW52b2tpbmcgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIGZvciBkYXRhYmFzZSAlcFxu
IiwgZGF0YWJhc2UuZ2V0KCkpOworICAgICAgICBjcmVhdGlvbkNhbGxiYWNrLT5oYW5kbGVFdmVu
dChjb250ZXh0LCBkYXRhYmFzZS5nZXQoKSk7CisgICAgfQogCi0gICAgZWMgPSBTRUNVUklUWV9F
UlI7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRhdGFiYXNlOwogfQogCiBEYXRhYmFzZVN5
bmM6OkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBl
c3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJh
Y2spCi0gICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKLSAgICAsIG1fbmFt
ZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCi0gICAgLCBtX2V4cGVjdGVkVmVyc2lvbihleHBl
Y3RlZFZlcnNpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZGlzcGxheU5hbWUoZGlz
cGxheU5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZXN0aW1hdGVkU2l6ZShlc3Rp
bWF0ZWRTaXplKQotICAgICwgbV9jcmVhdGlvbkNhbGxiYWNrKGNyZWF0aW9uQ2FsbGJhY2spCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUpCisgICAgOiBBYnN0cmFjdERhdGFiYXNlKGNvbnRleHQs
IG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpCiB7Ci0g
ICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAogRGF0YWJhc2VTeW5j
Ojp+RGF0YWJhc2VTeW5jKCkKQEAgLTczLDI2ICs4Miw2MCBAQCBEYXRhYmFzZVN5bmM6On5EYXRh
YmFzZVN5bmMoKQogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4
dFRocmVhZCgpKTsKIH0KIAotU3RyaW5nIERhdGFiYXNlU3luYzo6dmVyc2lvbigpIGNvbnN0Cit2
b2lkIERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29k
ZSYpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpOwotICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBEYXRhYmFzZVN5bmM6OmNo
YW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKQordm9pZCBEYXRhYmFzZVN5
bmM6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBi
b29sLCBFeGNlcHRpb25Db2RlJikKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VTeW5jOjp0cmFuc2Fj
dGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCwgRXhjZXB0
aW9uQ29kZSYpCit2b2lkIERhdGFiYXNlU3luYzo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkKIHsK
LSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7
CisgICAgLy8gRklYTUU6IG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIgdG8gY2xvc2VJbW1l
ZGlhdGVseSgpLCBidXQgaW4gYSBzeW5jIHdheQorfQorCitjbGFzcyBDbG9zZVN5bmNEYXRhYmFz
ZU9uQ29udGV4dFRocmVhZFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
ayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q2xvc2VTeW5jRGF0YWJhc2VPbkNv
bnRleHRUaHJlYWRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IGRhdGFiYXNl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDbG9zZVN5bmNEYXRhYmFzZU9uQ29udGV4dFRo
cmVhZFRhc2soZGF0YWJhc2UpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFz
ayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKKyAgICB7CisgICAgICAgIG1fZGF0YWJhc2UtPmNs
b3NlSW1tZWRpYXRlbHkoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2xvc2VTeW5jRGF0YWJh
c2VPbkNvbnRleHRUaHJlYWRUYXNrKFBhc3NSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSkK
KyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQ
dHI8RGF0YWJhc2VTeW5jPiBtX2RhdGFiYXNlOworfTsKKwordm9pZCBEYXRhYmFzZVN5bmM6OmNs
b3NlSW1tZWRpYXRlbHkoKQoreworICAgIGlmICghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5p
c0NvbnRleHRUaHJlYWQoKSkgeworICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBv
c3RUYXNrKENsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFzazo6Y3JlYXRlKHRoaXMp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghb3BlbmVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRh
YmFzZSh0aGlzKTsKKworICAgIGNsb3NlRGF0YWJhc2UoKTsKIH0KIAotU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogRGF0YWJhc2VTeW5jOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3Zv
aWQgRGF0YWJhc2VTeW5jOjpzdG9wKCkKIHsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5nZXQoKTsKKyAgICBjbG9zZUltbWVkaWF0ZWx5KCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmgJKHJldmlzaW9uIDYxOTUzKQor
KysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw0
OCArMzAsMzcgQEAKICNkZWZpbmUgRGF0YWJhc2VTeW5jX2gKIAogI2lmIEVOQUJMRShEQVRBQkFT
RSkKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRGF0YWJhc2VDYWxsYmFjazsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwog
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiAvLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBz
aG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9uIHRoZSB3b3JrZXIncyBjb250ZXh0IHRo
cmVhZC4KLWNsYXNzIERhdGFiYXNlU3luYyA6IHB1YmxpYyBSZWZDb3VudGVkPERhdGFiYXNlU3lu
Yz4geworY2xhc3MgRGF0YWJhc2VTeW5jIDogcHVibGljIEFic3RyYWN0RGF0YWJhc2UgewogcHVi
bGljOgotICAgIH5EYXRhYmFzZVN5bmMoKTsKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZVN5bmMoKTsK
IAotICAgIC8vIERpcmVjdCBzdXBwb3J0IGZvciB0aGUgRE9NIEFQSQogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERhdGFiYXNlU3luYz4gb3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNz
UmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHZl
cnNpb24oKSBjb25zdDsKICAgICB2b2lkIGNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRW
ZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCB0cmFuc2FjdGlvbihQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSwgRXhj
ZXB0aW9uQ29kZSYpOwogCi0gICAgLy8gSW50ZXJuYWwgZW5naW5lIHN1cHBvcnQKLSAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7Ci0KLSAg
ICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3Nl
SW1tZWRpYXRlbHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwogCiBwcml2YXRlOgogICAg
IERhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVm
UHRyPERhdGFiYXNlQ2FsbGJhY2s+KTsKLQotICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBT
dHJpbmcgbV9leHBlY3RlZFZlcnNpb247Ci0gICAgU3RyaW5nIG1fZGlzcGxheU5hbWU7Ci0gICAg
dW5zaWduZWQgbG9uZyBtX2VzdGltYXRlZFNpemU7Ci0gICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+IG1fY3JlYXRpb25DYWxsYmFjazsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBTdHJpbmcgZGF0
YWJhc2VEZWJ1Z05hbWUoKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQotI2VuZGlmCisgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0
aW1hdGVkU2l6ZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VUYXNrLmNwcAkocmV2aXNpb24gNjE5NTMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsOCArODcsOSBAQCB2b2lkIERhdGFi
YXNlVGFzazo6cGVyZm9ybVRhc2soKQogLy8gKioqIERhdGFiYXNlT3BlblRhc2sgKioqCiAvLyBP
cGVucyB0aGUgZGF0YWJhc2UgZmlsZSBhbmQgdmVyaWZpZXMgdGhlIHZlcnNpb24gbWF0Y2hlcyB0
aGUgZXhwZWN0ZWQgdmVyc2lvbi4KIAotRGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFz
ayhEYXRhYmFzZSogZGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25p
emVyLCBFeGNlcHRpb25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQorRGF0YWJhc2VPcGVuVGFz
azo6RGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIGJvb2wgc2V0VmVyc2lvbklu
TmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNl
cHRpb25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQogICAgIDogRGF0YWJhc2VUYXNrKGRhdGFi
YXNlLCBzeW5jaHJvbml6ZXIpCisgICAgLCBtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNlKHNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlKQogICAgICwgbV9jb2RlKGNvZGUpCiAgICAgLCBtX3N1Y2Nlc3Mo
c3VjY2VzcykKIHsKQEAgLTk3LDcgKzk4LDcgQEAgRGF0YWJhc2VPcGVuVGFzazo6RGF0YWJhc2VP
cGVuVGFzayhEYXRhYgogCiB2b2lkIERhdGFiYXNlT3BlblRhc2s6OmRvUGVyZm9ybVRhc2soKQog
ewotICAgIG1fc3VjY2VzcyA9IGRhdGFiYXNlKCktPnBlcmZvcm1PcGVuQW5kVmVyaWZ5KG1fY29k
ZSk7CisgICAgbV9zdWNjZXNzID0gZGF0YWJhc2UoKS0+cGVyZm9ybU9wZW5BbmRWZXJpZnkobV9z
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgbV9jb2RlKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgJKHJldmlzaW9uIDYxOTUzKQorKysgV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxOSArODUsMjAgQEAgcHJp
dmF0ZToKIAogY2xhc3MgRGF0YWJhc2VPcGVuVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlT3BlblRhc2s+IGNyZWF0ZShE
YXRhYmFzZSogZGIsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNl
cHRpb25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPERh
dGFiYXNlT3BlblRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIGJvb2wgc2V0VmVyc2lvbkluTmV3
RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBFeGNlcHRp
b25Db2RlJiBjb2RlLCBib29sJiBzdWNjZXNzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBE
YXRhYmFzZU9wZW5UYXNrKGRiLCBzeW5jaHJvbml6ZXIsIGNvZGUsIHN1Y2Nlc3MpOworICAgICAg
ICByZXR1cm4gbmV3IERhdGFiYXNlT3BlblRhc2soZGIsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNl
LCBzeW5jaHJvbml6ZXIsIGNvZGUsIHN1Y2Nlc3MpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBE
YXRhYmFzZU9wZW5UYXNrKERhdGFiYXNlKiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiwgRXhj
ZXB0aW9uQ29kZSYsIGJvb2wmIHN1Y2Nlc3MpOworICAgIERhdGFiYXNlT3BlblRhc2soRGF0YWJh
c2UqLCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6
ZXIqLCBFeGNlcHRpb25Db2RlJiwgYm9vbCYgc3VjY2Vzcyk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZG9QZXJmb3JtVGFzaygpOwogI2lmbmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IGRlYnVnVGFza05hbWUoKSBjb25zdDsKICNlbmRpZgogCisgICAgYm9vbCBtX3NldFZlcnNpb25J
bk5ld0RhdGFiYXNlOwogICAgIEV4Y2VwdGlvbkNvZGUmIG1fY29kZTsKICAgICBib29sJiBtX3N1
Y2Nlc3M7CiB9OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjE5NTMpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNi0yNiAgRHVtaXRy
dSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuY29tbWVudCBzb21lIHRlc3QgY2FzZXMgaW4gb3Bl
bi1kYXRhYmFzZS1zeW5jLWlucHV0cywgYW5kCisgICAgICAgIGNvbW1lbnQgb3V0IGZvciBub3cg
dGhlIG9uZXMgdGhhdCBmYWlsIGluIFY4LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDA2MDcKKworICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qv
d29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzOgor
ICAgICAgICAoY2F0Y2gpOgorCiAyMDEwLTA2LTI2ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNl
bi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
c3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA2MTk1MykKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4t
ZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDgg
KzEsOCBAQAogVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBvcGVuRGF0YWJhc2VTeW5jKCkgYWNj
ZXB0cyBvbmx5IHZhbGlkIHBhcmFtZXRlcnMuCiBQQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0
aW9uIDEyCiBQQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCi1QQVNTOiB1bmRlZmlu
ZWQKLVBBU1M6IHVuZGVmaW5lZAotUEFTUzogdW5kZWZpbmVkCiBQQVNTOiBUWVBFX01JU01BVENI
X0VSUjogRE9NIEV4Y2VwdGlvbiAxNworUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRl
ZC4KK1BBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuCitQQVNTOiBjYWxsaW5nIG9w
ZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sgc3VjY2VlZGVkLgogCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS1zeW5jLWlucHV0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwkocmV2aXNp
b24gNjE5NTMpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
b3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTgsNDcgKzE4
LDU5IEBAIHRyeSB7CiAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7CiB9
CiAKKy8vIFdlIGhhdmUgdG8gZGlzYWJsZSB0aGVzZSB0ZXN0cyBmb3Igbm93LCBiZWNhdXNlIFY4
IHN1cHByZXNzZXMgdGhlIGV4Y2VwdGlvbiB0aHJvd24gYnkgdG9TdHJpbmcoKQorLy8gYW5kIGp1
c3QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuCisvLyB0cnkgeworLy8gICAgIGRiID0gb3BlbkRh
dGFiYXNlU3luYyhub3RBU3RyaW5nLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0
KTsKKy8vICAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG9wZW5E
YXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEgc3RyaW5nLiIpOworLy8gfSBjYXRjaCAoZXJyKSB7Cisv
LyAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7CisvLyB9CisKKy8vIHRy
eSB7CisvLyAgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCBub3RBU3RyaW5nLCAi
REJEZXNjcmlwdGlvbiIsIDEwMjQpOworLy8gICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgc2Vj
b25kIGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEgc3RyaW5nLiIpOwor
Ly8gfSBjYXRjaCAoZXJyKSB7CisvLyAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVz
c2FnZSk7CisvLyB9CisKKy8vIHRyeSB7CisvLyAgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJE
Qk5hbWUiLCAiREJWZXJzaW9uIiwgbm90QVN0cmluZywgMTAyNCk7CisvLyAgICAgcG9zdE1lc3Nh
Z2UoIkZBSUw6IHRoZSB0aGlyZCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBi
ZSBhIHN0cmluZy4iKTsKKy8vIH0gY2F0Y2ggKGVycikgeworLy8gICAgIHBvc3RNZXNzYWdlKCJQ
QVNTOiAiICsgZXJyLm1lc3NhZ2UpOworLy8gfQorCiB0cnkgewotICAgIGRiID0gb3BlbkRhdGFi
YXNlU3luYyhub3RBU3RyaW5nLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsK
LSAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFz
ZVN5bmMoKSBtdXN0IGJlIGEgc3RyaW5nLiIpOworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygi
REJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwgMCk7CisgICAgcG9z
dE1lc3NhZ2UoIkZBSUw6IHRoZSBmaWZ0aCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkg
bXVzdCBiZSBhbiBvYmplY3QsIGlmIHByZXNlbnQuIik7CiB9IGNhdGNoIChlcnIpIHsKICAgICBw
b3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKIH0KIAogdHJ5IHsKLSAgICBkYiA9
IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsIG5vdEFTdHJpbmcsICJEQkRlc2NyaXB0aW9uIiwg
MTAyNCk7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gb3Bl
bkRhdGFiYXNlU3luYygpIG11c3QgYmUgYSBzdHJpbmcuIik7CisgICAgZGIgPSBvcGVuRGF0YWJh
c2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKKyAg
ICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4iKTsKIH0g
Y2F0Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwor
ICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOwogfQogCisvLyBSdW4gdGhp
cyB0ZXN0IGNhc2Ugb25lIG1vcmUgdGltZSwgdG8gdGVzdCB0aGUgY29kZSB3aXRoIGFuIGV4aXN0
aW5nIGRhdGFiYXNlLgogdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIs
ICJEQlZlcnNpb24iLCBub3RBU3RyaW5nLCAxMDI0KTsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDog
dGhlIGZvdXJ0aCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhbiBpbnRl
Z2VyLiIpOworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIs
ICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRh
YmFzZVN5bmMoKSBzdWNjZWVkZWQuIik7CiB9IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2Fn
ZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVy
ci5tZXNzYWdlKTsKIH0KIAogdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFt
ZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQsIDApOwotICAgIHBvc3RNZXNz
YWdlKCJGQUlMOiB0aGUgZmlmdGggYXJndW1lbnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11c3Qg
YmUgYW4gb2JqZWN0LCBpZiBwcmVzZW50LiIpOworICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3
IGRhdGFiYXNlLCBvdGhlcndpc2UgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIHdvbid0IGJlIGludm9r
ZWQuCisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWVDcmVhdGlvbkNhbGxiYWNrIiAr
IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEw
MjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGRiKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2FsbGluZyBvcGVuRGF0YWJh
c2VTeW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CiB9IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgi
UEFTUzogIiArIGVyci5tZXNzYWdlKTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5t
ZXNzYWdlKTsKIH0KIAotLy8gRklYTUU6IFVuY29tbWVudCB0aGVzZSB0ZXN0cyB3aGVuIHRoZSBz
eW5jIERCIEFQSSBpcyBpbXBsZW1lbnRlZC4KLS8vdHJ5IHsKLS8vICAgIGRiID0gb3BlbkRhdGFi
YXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7Ci0v
LyAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4iKTsK
LS8vfSBjYXRjaCAoZXJyKSB7Ci0vLyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNz
YWdlKTsKLS8vfQotLy8KLS8vdHJ5IHsKLS8vICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJO
YW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwgZnVuY3Rpb24oZGIpIHsg
fSk7Ci0vLyAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkg
d2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4iKTsKLS8vfSBjYXRjaCAoZXJyKSB7
Ci0vLyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKLS8vfQotCiBwb3N0
TWVzc2FnZSgiZG9uZSIpOwo=
</data>
<flag name="commit-queue"
          id="46944"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60066</attachid>
            <date>2010-06-29 16:03:10 -0700</date>
            <delta_ts>2010-06-29 17:03:59 -0700</delta_ts>
            <desc>patch #1: implement DatabaseSync::openDatabaseSync()</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>72503</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjE1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTAgQEAKKzIwMTAtMDYtMjkgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjpvcGVuRGF0YWJhc2VTeW5jKCkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYwNworCisgICAgICAg
IDEuIE1vdmVkIHNvbWUgY29tbW9uIGNvZGUgZnJvbSBEYXRhYmFzZSB0byBBYnN0cmFjdERhdGFi
YXNlLgorICAgICAgICAyLiBNYWRlIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KCkgdmlydHVhbCwgc2lu
Y2UgRGF0YWJhc2VTeW5jIGRvZXNuJ3QKKyAgICAgICAgICAgbmVlZCB0byBpbnRlcmFjdCB3aXRo
IERhdGFiYXNlVGhyZWFkLgorICAgICAgICAzLiBSZW1vdmVkIHRoZSBtX2NyZWF0aW9uQ2FsbGJh
Y2sgZmllbGQsIHNpbmNlIGl0J3Mgb25seSBuZWVkZWQgaW4KKyAgICAgICAgICAgdGhlIG9wZW5E
YXRhYmFzZXtTeW5jfSBtZXRob2RzLgorICAgICAgICA0LiBNYWRlIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgYXdhcmUgb2Ygc3luYyBEQnMsIHNvIHdlIGNhbiBjbG9zZQorICAgICAgICAgICB0aGUg
c3luYyBEQnMgYmVmb3JlIHRoZSBkZXN0cnVjdG9yIGlzIGNhbGxlZC4KKyAgICAgICAgNS4gTW92
ZWQgYSBjb3VwbGUgb2YgYXN5bmMgREItc3BlY2lmaWMgbGluZXMgZnJvbQorICAgICAgICAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpzdG9wRGF0YWJhc2VzKCkgdG8gRGF0YWJhc2U6OnN0b3Ao
KS4KKworICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpyZXRyaWV2ZVRleHRSZXN1bHRGcm9tRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0VGV4dFZhbHVlSW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpndWlkTXV0ZXgp
OgorICAgICAgICAoV2ViQ29yZTo6Z3VpZFRvVmVyc2lvbk1hcCk6CisgICAgICAgIChXZWJDb3Jl
Ojp1cGRhdGVHdWlkVmVyc2lvbk1hcCk6CisgICAgICAgIChXZWJDb3JlOjpndWlkVG9EYXRhYmFz
ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpndWlkRm9yT3JpZ2luQW5kTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6QWJzdHJhY3REYXRhYmFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpjbG9zZURhdGFiYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
QWJzdHJhY3REYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkpOgorICAgICAgICAoV2ViQ29y
ZTo6QWJzdHJhY3REYXRhYmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpBYnN0cmFjdERhdGFiYXNlOjpzdHJpbmdJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkFic3RyYWN0RGF0YWJhc2U6OmRpc3BsYXlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2U6OmVzdGltYXRlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJh
Y3REYXRhYmFzZTo6ZmlsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFz
ZTo6ZGF0YWJhc2VWZXJzaW9uS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6OmdldFZlcnNpb25Gcm9tRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RE
YXRhYmFzZTo6c2V0VmVyc2lvbkluRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJh
Y3REYXRhYmFzZTo6dmVyc2lvbk1hdGNoZXNFeHBlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
YnN0cmFjdERhdGFiYXNlOjpzZXRFeHBlY3RlZFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
QWJzdHJhY3REYXRhYmFzZTo6ZGlzYWJsZUF1dGhvcml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QWJzdHJhY3REYXRhYmFzZTo6ZW5hYmxlQXV0aG9yaXplcik6CisgICAgICAgIChXZWJDb3JlOjpB
YnN0cmFjdERhdGFiYXNlOjpzZXRBdXRob3JpemVyUmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29y
ZTo6QWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OnJlc2V0RGVsZXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpoYWREZWxldGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkFic3RyYWN0RGF0YWJhc2U6OnJlc2V0QXV0aG9yaXplcik6CisgICAgICAgICogc3RvcmFnZS9B
YnN0cmFjdERhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjpv
cGVuZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6aXNOZXcpOgorICAg
ICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6ZGF0YWJhc2VEZWJ1Z05hbWUpOgorICAg
ICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VD
cmVhdGlvbkNhbGxiYWNrVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
Q3JlYXRpb25DYWxsYmFja1Rhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2s6OkRhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZTo6RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6
OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpjbG9zZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6cGVyZm9y
bU9wZW5BbmRWZXJpZnkpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9E
YXRhYmFzZUF1dGhvcml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3Jp
emVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpEYXRh
YmFzZUF1dGhvcml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpk
ZW55QmFzZWRPblRhYmxlTmFtZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6
ZXIuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZVN5bmM6Om9wZW5EYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VTeW5jOjpEYXRhYmFzZVN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VT
eW5jOjp+RGF0YWJhc2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6bWFy
a0FzRGVsZXRlZEFuZENsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb3NlU3luY0RhdGFiYXNl
T25Db250ZXh0VGhyZWFkVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb3NlU3lu
Y0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrOjpDbG9zZVN5bmNEYXRh
YmFzZU9uQ29udGV4dFRocmVhZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5j
OjpjbG9zZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlU3luYy5oOgor
ICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRhc2spOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VPcGVuVGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZVRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSk6CisK
IDIwMTAtMDYtMjkgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3RE
YXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJh
c2UuY3BwCShyZXZpc2lvbiA2MjE1MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFi
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTI4IEBACiAjaW5jbHVkZSAiQWJz
dHJhY3REYXRhYmFzZS5oIgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUgIkRhdGFi
YXNlQXV0aG9yaXplci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMaXRl
U3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGJvb2wgcmV0cmll
dmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5n
JiBxdWVyeSwgU3RyaW5nJiByZXN1bHRTdHJpbmcpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0
YXRlbWVudChkYiwgcXVlcnkpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgp
OworCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0dfRVJST1Io
IkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0byByZWFkIHRleHQgcmVzdWx0IGZyb20g
ZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAg
ICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICByZXN1bHRTdHJpbmcgPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICByZXN1bHRTdHJpbmcg
PSBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgTE9HX0VSUk9S
KCJFcnJvciAoJWkpIHJlYWRpbmcgdGV4dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVz
dWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0
aWMgYm9vbCBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNRTGl0ZURhdGFiYXNlJiBkYiwgY29uc3Qg
U3RyaW5nJiBxdWVyeSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVw
YXJlKCk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFz
ZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIHZhbHVlKTsKKworICAgIHJlc3VsdCA9
IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Cisg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHN0ZXAgc3RhdGVtZW50IHRvIHNldCB2YWx1ZSBp
biBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEZJWE1FOiBtb3ZlIGFs
bCBndWlkLXJlbGF0ZWQgZnVuY3Rpb25zIHRvIGEgRGF0YWJhc2VWZXJzaW9uVHJhY2tlciBjbGFz
cy4KK3N0YXRpYyBNdXRleCYgZ3VpZE11dGV4KCkKK3sKKyAgICAvLyBOb3RlOiBXZSBkb24ndCBo
YXZlIHRvIHVzZSBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMgaGVyZSBiZWNhdXNlCisgICAg
Ly8gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBpbiB0aGUgY29uc3RydWN0b3Igb24gdGhl
IG1haW4gdGhyZWFkCisgICAgLy8gYmVmb3JlIGFueSBvdGhlciB0aHJlYWRzIHRoYXQgY2FsbCB0
aGlzIGZ1bmN0aW9uIGFyZSB1c2VkLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIG11
dGV4LCAoKSk7CisgICAgcmV0dXJuIG11dGV4OworfQorCit0eXBlZGVmIEhhc2hNYXA8aW50LCBT
dHJpbmc+IEd1aWRWZXJzaW9uTWFwOworc3RhdGljIEd1aWRWZXJzaW9uTWFwJiBndWlkVG9WZXJz
aW9uTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEd1aWRWZXJzaW9uTWFwLCBtYXAs
ICgpKTsKKyAgICByZXR1cm4gbWFwOworfQorCisvLyBOT1RFOiBDYWxsZXIgbXVzdCBsb2NrIGd1
aWRNdXRleCgpLgorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKGludCBn
dWlkLCBTdHJpbmcgbmV3VmVyc2lvbikKK3sKKyAgICAvLyBFbnN1cmUgdGhlIHRoZSBtdXRleCBp
cyBsb2NrZWQuCisgICAgQVNTRVJUKCFndWlkTXV0ZXgoKS50cnlMb2NrKCkpOworCisgICAgLy8g
Tm90ZTogSXQgaXMgbm90IHNhZmUgdG8gcHV0IGFuIGVtcHR5IHN0cmluZyBpbnRvIHRoZSBndWlk
VG9WZXJzaW9uTWFwKCkgbWFwLgorICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZSBtYXAgaXMgY3Jv
c3MtdGhyZWFkLCBidXQgZW1wdHkgc3RyaW5ncyBhcmUgcGVyLXRocmVhZC4KKyAgICAvLyBUaGUg
Y29weSgpIGZ1bmN0aW9uIG1ha2VzIGEgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHlvdSBjYW4gdXNl
IG9uIHRoZSBjdXJyZW50CisgICAgLy8gdGhyZWFkLCBidXQgd2UgbmVlZCBhIHN0cmluZyB3ZSBj
YW4ga2VlcCBpbiBhIGNyb3NzLXRocmVhZCBkYXRhIHN0cnVjdHVyZS4KKyAgICAvLyBGSVhNRTog
VGhpcyBpcyBhIHF1aXRlLWF3a3dhcmQgcmVzdHJpY3Rpb24gdG8gaGF2ZSB0byBwcm9ncmFtIHdp
dGguCisKKyAgICAvLyBNYXAgbnVsbCBzdHJpbmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgY29tbWVu
dCBhYm92ZSkuCisgICAgZ3VpZFRvVmVyc2lvbk1hcCgpLnNldChndWlkLCBuZXdWZXJzaW9uLmlz
RW1wdHkoKSA/IFN0cmluZygpIDogbmV3VmVyc2lvbi50aHJlYWRzYWZlQ29weSgpKTsKK30KKwor
dHlwZWRlZiBIYXNoTWFwPGludCwgSGFzaFNldDxBYnN0cmFjdERhdGFiYXNlKj4qPiBHdWlkRGF0
YWJhc2VNYXA7CitzdGF0aWMgR3VpZERhdGFiYXNlTWFwJiBndWlkVG9EYXRhYmFzZU1hcCgpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChHdWlkRGF0YWJhc2VNYXAsIG1hcCwgKCkpOworICAg
IHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBpbnQgZ3VpZEZvck9yaWdpbkFuZE5hbWUoY29uc3Qg
U3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBTdHJpbmcgc3RyaW5n
SUQgPSBvcmlnaW4gKyAiLyIgKyBuYW1lOworCisgICAgLy8gTm90ZTogV2UgZG9uJ3QgaGF2ZSB0
byB1c2UgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljIGhlcmUgYmVjYXVzZQorICAgIC8vIHRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgaW4gdGhlIGNvbnN0cnVjdG9yIG9uIHRoZSBtYWlu
IHRocmVhZAorICAgIC8vIGJlZm9yZSBhbnkgb3RoZXIgdGhyZWFkcyB0aGF0IGNhbGwgdGhpcyBm
dW5jdGlvbiBhcmUgdXNlZC4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBzdHJpbmdJ
ZGVudGlmaWVyTXV0ZXgsICgpKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIoc3RyaW5nSWRlbnRp
Zmllck11dGV4KTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IElER3VpZE1hcDsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKElER3VpZE1hcCwgc3RyaW5nSWRlbnRpZmllclRvR1VJ
RE1hcCwgKCkpOworICAgIGludCBndWlkID0gc3RyaW5nSWRlbnRpZmllclRvR1VJRE1hcC5nZXQo
c3RyaW5nSUQpOworICAgIGlmICghZ3VpZCkgeworICAgICAgICBzdGF0aWMgaW50IGN1cnJlbnRO
ZXdHVUlEID0gMTsKKyAgICAgICAgZ3VpZCA9IGN1cnJlbnROZXdHVUlEKys7CisgICAgICAgIHN0
cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuc2V0KHN0cmluZ0lELCBndWlkKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZ3VpZDsKK30KKwogc3RhdGljIGJvb2wgaXNEYXRhYmFzZUF2YWlsYWJsZSA9IHRy
dWU7CiAKIGJvb2wgQWJzdHJhY3REYXRhYmFzZTo6aXNBdmFpbGFibGUoKQpAQCAtNDUsMTAgKzE2
NCwzMDQgQEAgdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpzZXRJc0F2YWlsYWJsZShibwogICAgIGlz
RGF0YWJhc2VBdmFpbGFibGUgPSBhdmFpbGFibGU7CiB9CiAKKy8vIHN0YXRpYworY29uc3QgU3Ry
aW5nJiBBYnN0cmFjdERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBuYW1lLCAoIl9fV2ViS2l0RGF0YWJhc2VJbmZvVGFi
bGVfXyIpKTsKKyAgICByZXR1cm4gbmFtZTsKK30KKworQWJzdHJhY3REYXRhYmFzZTo6QWJzdHJh
Y3REYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkK
KyAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCisgICAgLCBtX2V4cGVjdGVk
VmVyc2lvbihleHBlY3RlZFZlcnNpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fZGlz
cGxheU5hbWUoZGlzcGxheU5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fZXN0aW1h
dGVkU2l6ZShlc3RpbWF0ZWRTaXplKQorICAgICwgbV9ndWlkKDApCisgICAgLCBtX29wZW5lZChm
YWxzZSkKKyAgICAsIG1fbmV3KGZhbHNlKQoreworICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRl
eHRUaHJlYWQoKSk7CisgICAgbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4gPSBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCk7CisKKyAgICBtX2RhdGFiYXNlQXV0
aG9yaXplciA9IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlKGRhdGFiYXNlSW5mb1RhYmxlTmFt
ZSgpKTsKKworICAgIGlmIChtX25hbWUuaXNOdWxsKCkpCisgICAgICAgIG1fbmFtZSA9ICIiOwor
CisgICAgbV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5hbWUoc2VjdXJpdHlPcmlnaW4oKS0+dG9T
dHJpbmcoKSwgbmFtZSk7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11
dGV4KCkpOworCisgICAgICAgIEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+KiBoYXNoU2V0ID0g
Z3VpZFRvRGF0YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKKyAgICAgICAgaWYgKCFoYXNoU2V0KSB7
CisgICAgICAgICAgICBoYXNoU2V0ID0gbmV3IEhhc2hTZXQ8QWJzdHJhY3REYXRhYmFzZSo+Owor
ICAgICAgICAgICAgZ3VpZFRvRGF0YWJhc2VNYXAoKS5zZXQobV9ndWlkLCBoYXNoU2V0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGhhc2hTZXQtPmFkZCh0aGlzKTsKKyAgICB9CisKKyAgICBtX2Zp
bGVuYW1lID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZnVsbFBhdGhGb3JEYXRhYmFzZShz
ZWN1cml0eU9yaWdpbigpLCBtX25hbWUpOworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LmFkZE9wZW5EYXRhYmFzZSh0aGlzKTsKK30KKwogQWJzdHJhY3REYXRhYmFzZTo6fkFic3RyYWN0
RGF0YWJhc2UoKQogewogfQogCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmNsb3NlRGF0YWJhc2Uo
KQoreworICAgIGlmICghbV9vcGVuZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3FsaXRl
RGF0YWJhc2UuY2xvc2UoKTsKKyAgICBtX29wZW5lZCA9IGZhbHNlOworICAgIHsKKyAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKworICAgICAgICBIYXNoU2V0PEFic3Ry
YWN0RGF0YWJhc2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7
CisgICAgICAgIEFTU0VSVChoYXNoU2V0KTsKKyAgICAgICAgQVNTRVJUKGhhc2hTZXQtPmNvbnRh
aW5zKHRoaXMpKTsKKyAgICAgICAgaGFzaFNldC0+cmVtb3ZlKHRoaXMpOworICAgICAgICBpZiAo
aGFzaFNldC0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnJl
bW92ZShtX2d1aWQpOworICAgICAgICAgICAgZGVsZXRlIGhhc2hTZXQ7CisgICAgICAgICAgICBn
dWlkVG9WZXJzaW9uTWFwKCkucmVtb3ZlKG1fZ3VpZCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKK3sKKyAgICBNdXRleExv
Y2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgIHJldHVybiBndWlkVG9WZXJzaW9uTWFwKCku
Z2V0KG1fZ3VpZCkudGhyZWFkc2FmZUNvcHkoKTsKK30KKworc3RhdGljIGNvbnN0IGludCBtYXhT
cWxpdGVCdXN5V2FpdFRpbWUgPSAzMDAwMDsKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6cGVyZm9y
bU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxlbmFt
ZSwgdHJ1ZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3BlbiBkYXRhYmFzZSBh
dCBwYXRoICVzIiwgbV9maWxlbmFtZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIGVjID0gSU5W
QUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFt
X3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQorICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVudGFsIGF1dG8tdmFjdXVtIGZvciBk
YXRhYmFzZSAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCkpOworCisgICAgQVNTRVJUKG1f
ZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIo
bV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fc3FsaXRlRGF0YWJhc2Uuc2V0QnVzeVRpbWVv
dXQobWF4U3FsaXRlQnVzeVdhaXRUaW1lKTsKKworICAgIFN0cmluZyBjdXJyZW50VmVyc2lvbjsK
KyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0ZXgoKSk7CisKKyAgICAg
ICAgR3VpZFZlcnNpb25NYXA6Oml0ZXJhdG9yIGVudHJ5ID0gZ3VpZFRvVmVyc2lvbk1hcCgpLmZp
bmQobV9ndWlkKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9IGd1aWRUb1ZlcnNpb25NYXAoKS5lbmQo
KSkgeworICAgICAgICAgICAgLy8gTWFwIG51bGwgc3RyaW5nIHRvIGVtcHR5IHN0cmluZyAoc2Vl
IHVwZGF0ZUd1aWRWZXJzaW9uTWFwKCkpLgorICAgICAgICAgICAgY3VycmVudFZlcnNpb24gPSBl
bnRyeS0+c2Vjb25kLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IGVudHJ5LT5zZWNvbmQ7CisgICAg
ICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkN1cnJlbnQgY2FjaGVkIHZlcnNpb24gZm9yIGd1aWQg
JWkgaXMgJXMiLCBtX2d1aWQsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiTm8gY2FjaGVkIHZlcnNp
b24gZm9yIGd1aWQgJWkiLCBtX2d1aWQpOworCisgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0
YWJhc2UudGFibGVFeGlzdHMoZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkpKSB7CisgICAgICAgICAg
ICAgICAgbV9uZXcgPSB0cnVlOworCisgICAgICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgIiArIGRhdGFiYXNlSW5mb1RhYmxlTmFt
ZSgpICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09O
RkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7
CisgICAgICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSB0YWJsZSAl
cyBpbiBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpLmFzY2lpKCkuZGF0YSgp
LCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2Ug
dGhlIGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgbV9z
cWxpdGVEYXRhYmFzZS5jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdl
dFZlcnNpb25Gcm9tRGF0YWJhc2UoY3VycmVudFZlcnNpb24pKSB7CisgICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVz
IiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFu
ZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgorICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJh
c2UuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoY3VycmVudFZlcnNpb24ubGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIlJldHJpZXZlZCBjdXJyZW50IHZlcnNpb24gJXMgZnJvbSBk
YXRhYmFzZSAlcyIsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZURlYnVn
TmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fbmV3IHx8
IHNob3VsZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlKSB7CisgICAgICAgICAgICAgICAgTE9HKFN0
b3JhZ2VBUEksICJTZXR0aW5nIHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgJXMgdGhhdCB3YXMganVz
dCBjcmVhdGVkIiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVi
dWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGlmICghc2V0VmVyc2lv
bkluRGF0YWJhc2UobV9leHBlY3RlZFZlcnNpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICVzIiwgbV9leHBl
Y3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAg
ICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxl
LgorICAgICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNsb3NlKCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgY3VycmVudFZlcnNpb24gPSBtX2V4cGVjdGVkVmVyc2lvbjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCBjdXJyZW50VmVyc2lv
bik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3VycmVudFZlcnNpb24uaXNOdWxsKCkp
IHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBkb2VzIG5vdCBoYXZlIGl0
cyB2ZXJzaW9uIHNldCIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICBjdXJyZW50VmVyc2lvbiA9ICIiOworICAgIH0KKworICAgIC8vIElmIHRoZSBleHBlY3Rl
ZCB2ZXJzaW9uIGlzbid0IHRoZSBlbXB0eSBzdHJpbmcsIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50
IGRhdGFiYXNlIHZlcnNpb24gd2UgaGF2ZSBtYXRjaGVzIHRoYXQgdmVyc2lvbi4gT3RoZXJ3aXNl
LCBzZXQgYW4gZXhjZXB0aW9uLgorICAgIC8vIElmIHRoZSBleHBlY3RlZCB2ZXJzaW9uIGlzIHRo
ZSBlbXB0eSBzdHJpbmcsIHRoZW4gd2UgYWx3YXlzIHJldHVybiB3aXRoIHdoYXRldmVyIHZlcnNp
b24gb2YgdGhlIGRhdGFiYXNlIHdlIGhhdmUuCisgICAgaWYgKCghbV9uZXcgfHwgc2hvdWxkU2V0
VmVyc2lvbkluTmV3RGF0YWJhc2UpICYmIG1fZXhwZWN0ZWRWZXJzaW9uLmxlbmd0aCgpICYmIG1f
ZXhwZWN0ZWRWZXJzaW9uICE9IGN1cnJlbnRWZXJzaW9uKSB7CisgICAgICAgIExPRyhTdG9yYWdl
QVBJLCAicGFnZSBleHBlY3RzIHZlcnNpb24gJXMgZnJvbSBkYXRhYmFzZSAlcywgd2hpY2ggYWN0
dWFsbHkgaGFzIHZlcnNpb24gbmFtZSAlcyAtIG9wZW5EYXRhYmFzZSgpIGNhbGwgd2lsbCBmYWls
IiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksCisgICAgICAgICAgICBkYXRhYmFz
ZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIC8vIENsb3NlIHRo
ZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCisgICAgICAgIG1fc3FsaXRlRGF0YWJhc2Uu
Y2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1fb3BlbmVkID0g
dHJ1ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBB
YnN0cmFjdERhdGFiYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpOworfQorCitTZWN1cml0eU9yaWdp
biogQWJzdHJhY3REYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4oKSBjb25zdAoreworICAgIHJldHVy
biBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi5nZXQoKTsKK30KKworU3RyaW5nIEFic3Ry
YWN0RGF0YWJhc2U6OnN0cmluZ0lkZW50aWZpZXIoKSBjb25zdAoreworICAgIC8vIFJldHVybiBh
IGRlZXAgY29weSBmb3IgcmVmIGNvdW50aW5nIHRocmVhZCBzYWZldHkKKyAgICByZXR1cm4gbV9u
YW1lLnRocmVhZHNhZmVDb3B5KCk7Cit9CisKK1N0cmluZyBBYnN0cmFjdERhdGFiYXNlOjpkaXNw
bGF5TmFtZSgpIGNvbnN0Cit7CisgICAgLy8gUmV0dXJuIGEgZGVlcCBjb3B5IGZvciByZWYgY291
bnRpbmcgdGhyZWFkIHNhZmV0eQorICAgIHJldHVybiBtX2Rpc3BsYXlOYW1lLnRocmVhZHNhZmVD
b3B5KCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgQWJzdHJhY3REYXRhYmFzZTo6ZXN0aW1hdGVkU2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZTsKK30KKworU3RyaW5nIEFi
c3RyYWN0RGF0YWJhc2U6OmZpbGVOYW1lKCkgY29uc3QKK3sKKyAgICAvLyBSZXR1cm4gYSBkZWVw
IGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5CisgICAgcmV0dXJuIG1fZmlsZW5h
bWUudGhyZWFkc2FmZUNvcHkoKTsKK30KKworLy8gc3RhdGljCitjb25zdCBTdHJpbmcmIEFic3Ry
YWN0RGF0YWJhc2U6OmRhdGFiYXNlVmVyc2lvbktleSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIGtleSwgKCJXZWJLaXREYXRhYmFzZVZlcnNpb25LZXkiKSk7CisgICAgcmV0
dXJuIGtleTsKK30KKworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpnZXRWZXJzaW9uRnJvbURhdGFi
YXNlKFN0cmluZyYgdmVyc2lvbikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
Z2V0VmVyc2lvblF1ZXJ5LCAoIlNFTEVDVCB2YWx1ZSBGUk9NICIgKyBkYXRhYmFzZUluZm9UYWJs
ZU5hbWUoKSArICIgV0hFUkUga2V5ID0gJyIgKyBkYXRhYmFzZVZlcnNpb25LZXkoKSArICInOyIp
KTsKKworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7CisKKyAgICBib29sIHJl
c3VsdCA9IHJldHJpZXZlVGV4dFJlc3VsdEZyb21EYXRhYmFzZShtX3NxbGl0ZURhdGFiYXNlLCBn
ZXRWZXJzaW9uUXVlcnkudGhyZWFkc2FmZUNvcHkoKSwgdmVyc2lvbik7CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIHZlcnNpb24gZnJvbSBk
YXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAg
bV9kYXRhYmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworYm9vbCBBYnN0cmFjdERhdGFiYXNlOjpzZXRWZXJzaW9uSW5EYXRhYmFzZShjb25zdCBTdHJp
bmcmIHZlcnNpb24pCit7CisgICAgLy8gVGhlIElOU0VSVCB3aWxsIHJlcGxhY2UgYW4gZXhpc3Rp
bmcgZW50cnkgZm9yIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBuZXcgdmVyc2lvbiBudW1iZXIsIGR1
ZSB0byB0aGUgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UKKyAgICAvLyBjbGF1c2UgaW4gdGhl
IENSRUFURSBzdGF0ZW1lbnQgKHNlZSBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoKSku
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHNldFZlcnNpb25RdWVyeSwgKCJJTlNF
UlQgSU5UTyAiICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIChrZXksIHZhbHVlKSBWQUxV
RVMgKCciICsgZGF0YWJhc2VWZXJzaW9uS2V5KCkgKyAiJywgPyk7IikpOworCisgICAgbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKKworICAgIGJvb2wgcmVzdWx0ID0gc2V0VGV4dFZh
bHVlSW5EYXRhYmFzZShtX3NxbGl0ZURhdGFiYXNlLCBzZXRWZXJzaW9uUXVlcnkudGhyZWFkc2Fm
ZUNvcHkoKSwgdmVyc2lvbik7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIHNldCB2ZXJzaW9uICVzIGluIGRhdGFiYXNlICglcykiLCB2ZXJzaW9uLmFzY2lp
KCkuZGF0YSgpLCBzZXRWZXJzaW9uUXVlcnkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgbV9kYXRh
YmFzZUF1dGhvcml6ZXItPmVuYWJsZSgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9v
bCBBYnN0cmFjdERhdGFiYXNlOjp2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fZXhwZWN0ZWRWZXJzaW9uLmlzRW1wdHkoKSkgeworICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIoZ3VpZE11dGV4KCkpOworICAgICAgICByZXR1cm4gbV9leHBlY3RlZFZlcnNpb24g
PT0gZ3VpZFRvVmVyc2lvbk1hcCgpLmdldChtX2d1aWQpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25z
dCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgbV9leHBlY3RlZFZlcnNpb24gPSB2ZXJzaW9uLnRo
cmVhZHNhZmVDb3B5KCk7CisgICAgLy8gVXBkYXRlIHRoZSBpbiBtZW1vcnkgZGF0YWJhc2UgdmVy
c2lvbiBtYXAuCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGd1aWRNdXRleCgpKTsKKyAgICB1cGRh
dGVHdWlkVmVyc2lvbk1hcChtX2d1aWQsIHZlcnNpb24pOworfQorCit2b2lkIEFic3RyYWN0RGF0
YWJhc2U6OmRpc2FibGVBdXRob3JpemVyKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhv
cml6ZXIpOworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7Cit9CisKK3ZvaWQg
QWJzdHJhY3REYXRhYmFzZTo6ZW5hYmxlQXV0aG9yaXplcigpCit7CisgICAgQVNTRVJUKG1fZGF0
YWJhc2VBdXRob3JpemVyKTsKKyAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Cit9
CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6c2V0QXV0aG9yaXplclJlYWRPbmx5KCkKK3sKKyAg
ICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJhc2VBdXRob3JpemVy
LT5zZXRSZWFkT25seSgpOworfQorCitib29sIEFic3RyYWN0RGF0YWJhc2U6Omxhc3RBY3Rpb25D
aGFuZ2VkRGF0YWJhc2UoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXplcik7Cisg
ICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNl
KCk7Cit9CisKK2Jvb2wgQWJzdHJhY3REYXRhYmFzZTo6bGFzdEFjdGlvbldhc0luc2VydCgpCit7
CisgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFz
ZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKK30KKwordm9pZCBBYnN0cmFjdERh
dGFiYXNlOjpyZXNldERlbGV0ZXMoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9yaXpl
cik7CisgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0RGVsZXRlcygpOworfQorCitib29s
IEFic3RyYWN0RGF0YWJhc2U6OmhhZERlbGV0ZXMoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNl
QXV0aG9yaXplcik7CisgICAgcmV0dXJuIG1fZGF0YWJhc2VBdXRob3JpemVyLT5oYWREZWxldGVz
KCk7Cit9CisKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVzZXRBdXRob3JpemVyKCkKK3sKKyAg
ICBpZiAobV9kYXRhYmFzZUF1dGhvcml6ZXIpCisgICAgICAgIG1fZGF0YWJhc2VBdXRob3JpemVy
LT5yZXNldCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJKHJldmlzaW9u
IDYyMTUxKQorKysgV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsMTMgKzMyLDIxIEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KKyNp
Zm5kZWYgTkRFQlVHCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERhdGFiYXNlQXV0aG9yaXplcjsKIGNsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAordHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKKwogY2xhc3MgQWJzdHJhY3REYXRhYmFzZSA6IHB1YmxpYyBUaHJlYWRT
YWZlU2hhcmVkPEFic3RyYWN0RGF0YWJhc2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBp
c0F2YWlsYWJsZSgpOwpAQCAtNDYsMTUgKzU0LDY5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
fkFic3RyYWN0RGF0YWJhc2UoKTsKIAotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBzdHJpbmdJZGVudGlmaWVyKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGRpc3Bs
YXlOYW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKKworICAgIGJvb2wgb3BlbmVk
KCkgY29uc3QgeyByZXR1cm4gbV9vcGVuZWQ7IH0KKyAgICBib29sIGlzTmV3KCkgY29uc3QgeyBy
ZXR1cm4gbV9uZXc7IH0KKworICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4q
IHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nSWRlbnRp
ZmllcigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OworCisgICAgLy8gRklYTUU6IG1vdmUgYWxsIHZl
cnNpb24tcmVsYXRlZCBtZXRob2RzIHRvIGEgRGF0YWJhc2VWZXJzaW9uVHJhY2tlciBjbGFzcwor
ICAgIGJvb2wgdmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0RXhw
ZWN0ZWRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgYm9vbCBnZXRWZXJzaW9u
RnJvbURhdGFiYXNlKFN0cmluZyYgdmVyc2lvbik7CisgICAgYm9vbCBzZXRWZXJzaW9uSW5EYXRh
YmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24pOworCisgICAgdm9pZCBkaXNhYmxlQXV0aG9yaXpl
cigpOworICAgIHZvaWQgZW5hYmxlQXV0aG9yaXplcigpOworICAgIHZvaWQgc2V0QXV0aG9yaXpl
clJlYWRPbmx5KCk7CisgICAgYm9vbCBsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCk7CisgICAg
Ym9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0KCk7CisgICAgdm9pZCByZXNldERlbGV0ZXMoKTsKKyAg
ICBib29sIGhhZERlbGV0ZXMoKTsKKyAgICB2b2lkIHJlc2V0QXV0aG9yaXplcigpOwogCiAgICAg
dmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VJbW1lZGlhdGVseSgpID0gMDsKKworcHJvdGVjdGVkOgorICAgIEFic3RyYWN0RGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOworCisgICAgdm9p
ZCBjbG9zZURhdGFiYXNlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJp
ZnkoYm9vbCBzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYgZWMp
OworCisgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCk7CisK
KyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0OworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlP
cmlnaW47CisKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmluZyBtX2V4cGVjdGVkVmVyc2lv
bjsKKyAgICBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKKyAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1h
dGVkU2l6ZTsKKyAgICBTdHJpbmcgbV9maWxlbmFtZTsKKworICAgIFNRTGl0ZURhdGFiYXNlIG1f
c3FsaXRlRGF0YWJhc2U7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIGRhdGFiYXNlRGVi
dWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4tPnRv
U3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVZlcnNpb25LZXkoKTsKKworICAgIGludCBtX2d1aWQ7
CisgICAgYm9vbCBtX29wZW5lZDsKKyAgICBib29sIG1fbmV3OworCisgICAgUmVmUHRyPERhdGFi
YXNlQXV0aG9yaXplcj4gbV9kYXRhYmFzZUF1dGhvcml6ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDYyMTUxKQorKysgV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBA
QAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogI2luY2x1ZGUgIkNoYW5nZVZlcnNpb25XcmFwcGVy
LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VD
YWxsYmFjay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
VGhyZWFkLmgiCkBAIC01MCw3ICs0OSw2IEBACiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgotI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJWb2lkQ2FsbGJh
Y2suaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KQEAgLTY0LDgxICs2MiwyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIElmIHdl
IHNsZWVwIGZvciBtb3JlIHRoZSAzMCBzZWNvbmRzIHdoaWxlIGJsb2NrZWQgb24gU1FMSVRFX0JV
U1ksIGdpdmUgdXAuCi1zdGF0aWMgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9IDMw
MDAwOwotCi1jb25zdCBTdHJpbmcmIERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBuYW1lLCAoIl9fV2ViS2l0RGF0YWJh
c2VJbmZvVGFibGVfXyIpKTsKLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3RhdGljIE11dGV4JiBn
dWlkTXV0ZXgoKQotewotICAgIC8vIE5vdGU6IFdlIGRvbid0IGhhdmUgdG8gdXNlIEF0b21pY2Fs
bHlJbml0aWFsaXplZFN0YXRpYyBoZXJlIGJlY2F1c2UKLSAgICAvLyB0aGlzIGZ1bmN0aW9uIGlz
IGNhbGxlZCBvbmNlIGluIHRoZSBjb25zdHJ1Y3RvciBvbiB0aGUgbWFpbiB0aHJlYWQKLSAgICAv
LyBiZWZvcmUgYW55IG90aGVyIHRocmVhZHMgdGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVz
ZWQuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwgbXV0ZXgsICgpKTsKLSAgICByZXR1
cm4gbXV0ZXg7Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxpbnQsIFN0cmluZz4gR3VpZFZlcnNpb25N
YXA7Ci1zdGF0aWMgR3VpZFZlcnNpb25NYXAmIGd1aWRUb1ZlcnNpb25NYXAoKQotewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoR3VpZFZlcnNpb25NYXAsIG1hcCwgKCkpOwotICAgIHJldHVybiBt
YXA7Ci19Ci0KLS8vIE5PVEU6IENhbGxlciBtdXN0IGxvY2sgZ3VpZE11dGV4KCkuCi1zdGF0aWMg
aW5saW5lIHZvaWQgdXBkYXRlR3VpZFZlcnNpb25NYXAoaW50IGd1aWQsIFN0cmluZyBuZXdWZXJz
aW9uKQotewotICAgIC8vIEVuc3VyZSB0aGUgdGhlIG11dGV4IGlzIGxvY2tlZC4KLSAgICBBU1NF
UlQoIWd1aWRNdXRleCgpLnRyeUxvY2soKSk7Ci0KLSAgICAvLyBOb3RlOiBJdCBpcyBub3Qgc2Fm
ZSB0byBwdXQgYW4gZW1wdHkgc3RyaW5nIGludG8gdGhlIGd1aWRUb1ZlcnNpb25NYXAoKSBtYXAu
Ci0gICAgLy8gVGhhdCdzIGJlY2F1c2UgdGhlIG1hcCBpcyBjcm9zcy10aHJlYWQsIGJ1dCBlbXB0
eSBzdHJpbmdzIGFyZSBwZXItdGhyZWFkLgotICAgIC8vIFRoZSBjb3B5KCkgZnVuY3Rpb24gbWFr
ZXMgYSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgeW91IGNhbiB1c2Ugb24gdGhlIGN1cnJlbnQKLSAg
ICAvLyB0aHJlYWQsIGJ1dCB3ZSBuZWVkIGEgc3RyaW5nIHdlIGNhbiBrZWVwIGluIGEgY3Jvc3Mt
dGhyZWFkIGRhdGEgc3RydWN0dXJlLgotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgcXVpdGUtYXdr
d2FyZCByZXN0cmljdGlvbiB0byBoYXZlIHRvIHByb2dyYW0gd2l0aC4KLQotICAgIC8vIE1hcCBu
dWxsIHN0cmluZyB0byBlbXB0eSBzdHJpbmcgKHNlZSBjb21tZW50IGFib3ZlKS4KLSAgICBndWlk
VG9WZXJzaW9uTWFwKCkuc2V0KGd1aWQsIG5ld1ZlcnNpb24uaXNFbXB0eSgpID8gU3RyaW5nKCkg
OiBuZXdWZXJzaW9uLnRocmVhZHNhZmVDb3B5KCkpOwotfQotCi10eXBlZGVmIEhhc2hNYXA8aW50
LCBIYXNoU2V0PERhdGFiYXNlKj4qPiBHdWlkRGF0YWJhc2VNYXA7Ci1zdGF0aWMgR3VpZERhdGFi
YXNlTWFwJiBndWlkVG9EYXRhYmFzZU1hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChH
dWlkRGF0YWJhc2VNYXAsIG1hcCwgKCkpOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRpYyBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlVmVyc2lvbktleSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIGtleSwgKCJXZWJLaXREYXRhYmFzZVZlcnNpb25LZXkiKSk7Ci0gICAgcmV0
dXJuIGtleTsKLX0KLQotc3RhdGljIGludCBndWlkRm9yT3JpZ2luQW5kTmFtZShjb25zdCBTdHJp
bmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLQogY2xhc3MgRGF0YWJhc2VDcmVhdGlv
bkNhbGxiYWNrVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNr
PiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UpCisgICAgc3RhdGljIFBhc3NP
d25QdHI8RGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0
YWJhc2U+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2Fs
bGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IERhdGFiYXNlQ3JlYXRpb25DYWxsYmFj
a1Rhc2soZGF0YWJhc2UpOworICAgICAgICByZXR1cm4gbmV3IERhdGFiYXNlQ3JlYXRpb25DYWxs
YmFja1Rhc2soZGF0YWJhc2UsIGNyZWF0aW9uQ2FsbGJhY2spOwogICAgIH0KIAotICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKKyAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICB7
Ci0gICAgICAgIG1fZGF0YWJhc2UtPnBlcmZvcm1DcmVhdGlvbkNhbGxiYWNrKCk7CisgICAgICAg
IG1fY3JlYXRpb25DYWxsYmFjay0+aGFuZGxlRXZlbnQoY29udGV4dCwgbV9kYXRhYmFzZS5nZXQo
KSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIERhdGFiYXNlQ3JlYXRpb25DYWxsYmFja1Rhc2so
UGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UpCisgICAgRGF0YWJhc2VDcmVhdGlvbkNhbGxi
YWNrVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxEYXRhYmFz
ZUNhbGxiYWNrPiBjYWxsYmFjaykKICAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAg
ICAgICAsIG1fY3JlYXRpb25DYWxsYmFjayhjYWxsYmFjaykKICAgICB7CiAgICAgfQogCiAgICAg
UmVmUHRyPERhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNr
PiBtX2NyZWF0aW9uQ2FsbGJhY2s7CiB9OwogCiBQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFz
ZTo6b3BlbkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgbmFtZSwKQEAgLTE0NywxNCArOTEsMTMgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gRGF0
YWJhc2U6Om9wZW5EYXRhYgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlJiBlKQogewogICAgIGlmICghRGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyKCkuY2FuRXN0YWJsaXNoRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGVyZSBzaG91bGQgYmUgYW4gZXhj
ZXB0aW9uIHJhaXNlZCBoZXJlIGluIGFkZGl0aW9uIHRvIHJldHVybmluZyBhIG51bGwgRGF0YWJh
c2Ugb2JqZWN0LiAgVGhlIHF1ZXN0aW9uIGhhcyBiZWVuIHJhaXNlZCB3aXRoIHRoZSBXSEFUV0cu
CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdpbiAlcyBub3Qg
YWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRS
ZWYobmV3IERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5h
bWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2spKTsKKyAgICBSZWZQdHI8RGF0YWJh
c2U+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVj
dGVkVmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKIAotICAgIGlmICghZGF0
YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKGUpKSB7CisgICAgaWYgKCFkYXRhYmFzZS0+b3Bl
bkFuZFZlcmlmeVZlcnNpb24oIWNyZWF0aW9uQ2FsbGJhY2ssIGUpKSB7CiAgICAgICAgIExPRyhT
dG9yYWdlQVBJLCAiRmFpbGVkIHRvIG9wZW4gYW5kIHZlcmlmeSB2ZXJzaW9uIChleHBlY3RlZCAl
cykgb2YgZGF0YWJhc2UgJXMiLCBleHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksIGRhdGFi
YXNlLT5kYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgY29udGV4
dC0+cmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKICAgICAgICAgRGF0YWJhc2VU
cmFja2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKQEAg
LTE3Niw1NyArMTE5LDI4IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpvcGVuRGF0
YWIKICAgICAvLyB2ZXJzaW9uIHRvICIiIGFuZCBzY2hlZHVsZSB0aGUgY3JlYXRpb24gY2FsbGJh
Y2suIEJlY2F1c2Ugb2Ygc29tZSBzdWJ0bGUgU3RyaW5nCiAgICAgLy8gaW1wbGVtZW50YXRpb24g
aXNzdWVzLCB3ZSBoYXZlIHRvIHJlc2V0IG1fZXhwZWN0ZWRWZXJzaW9uIGhlcmUgaW5zdGVhZCBv
ZiBkb2luZwogICAgIC8vIGl0IGluc2lkZSBwZXJmb3JtT3BlbkFuZFZlcmlmeSgpIHdoaWNoIGlz
IHJ1biBvbiB0aGUgREIgdGhyZWFkLgotICAgIGlmIChkYXRhYmFzZS0+aXNOZXcoKSAmJiBkYXRh
YmFzZS0+bV9jcmVhdGlvbkNhbGxiYWNrLmdldCgpKSB7CisgICAgaWYgKGRhdGFiYXNlLT5pc05l
dygpICYmIGNyZWF0aW9uQ2FsbGJhY2suZ2V0KCkpIHsKICAgICAgICAgZGF0YWJhc2UtPm1fZXhw
ZWN0ZWRWZXJzaW9uID0gIiI7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBE
YXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrIGZvciBkYXRhYmFzZSAlcFxuIiwgZGF0YWJhc2Uu
Z2V0KCkpOwotICAgICAgICBkYXRhYmFzZS0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0
VGFzayhEYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2tUYXNrOjpjcmVhdGUoZGF0YWJhc2UpKTsKKyAg
ICAgICAgZGF0YWJhc2UtPm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soRGF0YWJh
c2VDcmVhdGlvbkNhbGxiYWNrVGFzazo6Y3JlYXRlKGRhdGFiYXNlLCBjcmVhdGlvbkNhbGxiYWNr
KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGRhdGFiYXNlOwogfQogCi1EYXRhYmFzZTo6RGF0YWJh
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+
IGNyZWF0aW9uQ2FsbGJhY2spCi0gICAgOiBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSkK
K0RhdGFiYXNlOjpEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCisgICAgOiBBYnN0
cmFjdERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGV4cGVjdGVkVmVyc2lvbiwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUpCisgICAgLCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyhmYWxzZSkKICAg
ICAsIG1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxlZCh0cnVlKQotICAgICwgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KGNvbnRleHQpCi0gICAgLCBtX25hbWUobmFtZS5jcm9zc1RocmVhZFN0cmlu
ZygpKQotICAgICwgbV9ndWlkKDApCi0gICAgLCBtX2V4cGVjdGVkVmVyc2lvbihleHBlY3RlZFZl
cnNpb24uY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZGlzcGxheU5hbWUoZGlzcGxheU5h
bWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKLSAgICAsIG1fZXN0aW1hdGVkU2l6ZShlc3RpbWF0ZWRT
aXplKQogICAgICwgbV9kZWxldGVkKGZhbHNlKQogICAgICwgbV9zdG9wcGVkKGZhbHNlKQotICAg
ICwgbV9vcGVuZWQoZmFsc2UpCi0gICAgLCBtX25ldyhmYWxzZSkKLSAgICAsIG1fY3JlYXRpb25D
YWxsYmFjayhjcmVhdGlvbkNhbGxiYWNrKQogewotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuZ2V0KCkpOwotICAgIG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpOwogICAgIG1fZGF0YWJhc2VU
aHJlYWRTZWN1cml0eU9yaWdpbiA9IG1fY29udGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLT50aHJl
YWRzYWZlQ29weSgpOwotICAgIGlmIChtX25hbWUuaXNOdWxsKCkpCi0gICAgICAgIG1fbmFtZSA9
ICIiOwogCiAgICAgU2NyaXB0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotCi0g
ICAgbV9ndWlkID0gZ3VpZEZvck9yaWdpbkFuZE5hbWUoc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJp
bmcoKSwgbmFtZSk7Ci0KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihndWlkTXV0
ZXgoKSk7Ci0KLSAgICAgICAgSGFzaFNldDxEYXRhYmFzZSo+KiBoYXNoU2V0ID0gZ3VpZFRvRGF0
YWJhc2VNYXAoKS5nZXQobV9ndWlkKTsKLSAgICAgICAgaWYgKCFoYXNoU2V0KSB7Ci0gICAgICAg
ICAgICBoYXNoU2V0ID0gbmV3IEhhc2hTZXQ8RGF0YWJhc2UqPjsKLSAgICAgICAgICAgIGd1aWRU
b0RhdGFiYXNlTWFwKCkuc2V0KG1fZ3VpZCwgaGFzaFNldCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBoYXNoU2V0LT5hZGQodGhpcyk7Ci0gICAgfQotCiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSk7Ci0gICAgbV9maWxlbmFtZSA9IERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLmZ1bGxQYXRoRm9yRGF0YWJhc2Uoc2VjdXJpdHlPcmlnaW4oKSwg
bV9uYW1lKTsKIAotICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmFkZE9wZW5EYXRhYmFz
ZSh0aGlzKTsKLSAgICBjb250ZXh0LT5hZGRPcGVuRGF0YWJhc2UodGhpcyk7CisgICAgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5hZGRPcGVuRGF0YWJhc2UodGhpcyk7CiB9CiAKIGNsYXNzIERl
cmVmQ29udGV4dFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CkBA
IC0yNTMsMTUgKzE2NywyMSBAQCBEYXRhYmFzZTo6fkRhdGFiYXNlKCkKICAgICB9CiB9CiAKLWJv
b2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKEV4Y2VwdGlvbkNvZGUmIGUpCitTdHJp
bmcgRGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAoreworICAgIGlmIChtX2RlbGV0ZWQpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gQWJzdHJhY3REYXRhYmFzZTo6dmVyc2lv
bigpOworfQorCitib29sIERhdGFiYXNlOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlKQogewogICAgIGlmICghbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXIgPSBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0
ZSgpOwogCiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CiAgICAgRGF0YWJhc2VUYXNrU3luY2hy
b25pemVyIHN5bmNocm9uaXplcjsKLSAgICBPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9
IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSh0aGlzLCAmc3luY2hyb25pemVyLCBlLCBzdWNjZXNz
KTsKKyAgICBPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9IERhdGFiYXNlT3BlblRhc2s6
OmNyZWF0ZSh0aGlzLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgJnN5bmNocm9uaXplciwgZSwg
c3VjY2Vzcyk7CiAKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFk
KCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrLnJlbGVhc2UoKSk7CiAgICAgc3luY2hyb25p
emVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwpAQCAtMjY5LDkzICsxODksNiBAQCBib29sIERh
dGFiYXNlOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihFeGNlCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9
CiAKLQotc3RhdGljIGJvb2wgcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKFNRTGl0ZURh
dGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgU3RyaW5nJiByZXN1bHRTdHJpbmcpCi17
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChkYiwgcXVlcnkpOwotICAgIGludCByZXN1
bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRP
aykgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yICglaSkgcHJlcGFyaW5nIHN0YXRlbWVudCB0
byByZWFkIHRleHQgcmVzdWx0IGZyb20gZGF0YWJhc2UgKCVzKSIsIHJlc3VsdCwgcXVlcnkuYXNj
aWkoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKLSAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgewot
ICAgICAgICByZXN1bHRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkg
ewotICAgICAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvciAoJWkpIHJlYWRpbmcgdGV4
dCByZXN1bHQgZnJvbSBkYXRhYmFzZSAoJXMpIiwgcmVzdWx0LCBxdWVyeS5hc2NpaSgpLmRhdGEo
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgRGF0YWJhc2U6Omdl
dFZlcnNpb25Gcm9tRGF0YWJhc2UoU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBnZXRWZXJzaW9uUXVlcnksICgiU0VMRUNUIHZhbHVlIEZST00gIiAr
IGRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpICsgIiBXSEVSRSBrZXkgPSAnIiArIGRhdGFiYXNlVmVy
c2lvbktleSgpICsgIic7IikpOwotCi0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUo
KTsKLQotICAgIGJvb2wgcmVzdWx0ID0gcmV0cmlldmVUZXh0UmVzdWx0RnJvbURhdGFiYXNlKG1f
c3FsaXRlRGF0YWJhc2UsIGdldFZlcnNpb25RdWVyeS50aHJlYWRzYWZlQ29weSgpLCB2ZXJzaW9u
KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmll
dmUgdmVyc2lvbiBmcm9tIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgp
LmRhdGEoKSk7Ci0KLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgYm9vbCBzZXRUZXh0VmFsdWVJbkRhdGFiYXNlKFNR
TGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGRiLCBxdWVyeSk7Ci0gICAgaW50
IHJlc3VsdCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IFNRTFJl
c3VsdE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBhcmUgc3RhdGVtZW50
IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5kYXRhKCkpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3RhdGVtZW50LmJpbmRUZXh0KDEs
IHZhbHVlKTsKLQotICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Ci0gICAgaWYgKHJlc3Vs
dCAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHN0ZXAg
c3RhdGVtZW50IHRvIHNldCB2YWx1ZSBpbiBkYXRhYmFzZSAoJXMpIiwgcXVlcnkuYXNjaWkoKS5k
YXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgRGF0YWJhc2U6OnNldFZlcnNpb25JbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYg
dmVyc2lvbikKLXsKLSAgICAvLyBUaGUgSU5TRVJUIHdpbGwgcmVwbGFjZSBhbiBleGlzdGluZyBl
bnRyeSBmb3IgdGhlIGRhdGFiYXNlIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG51bWJlciwgZHVlIHRv
IHRoZSBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRQotICAgIC8vIGNsYXVzZSBpbiB0aGUgQ1JF
QVRFIHN0YXRlbWVudCAoc2VlIERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSgpKS4KLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc2V0VmVyc2lvblF1ZXJ5LCAoIklOU0VSVCBJ
TlRPICIgKyBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKSArICIgKGtleSwgdmFsdWUpIFZBTFVFUyAo
JyIgKyBkYXRhYmFzZVZlcnNpb25LZXkoKSArICInLCA/KTsiKSk7Ci0KLSAgICBtX2RhdGFiYXNl
QXV0aG9yaXplci0+ZGlzYWJsZSgpOwotCi0gICAgYm9vbCByZXN1bHQgPSBzZXRUZXh0VmFsdWVJ
bkRhdGFiYXNlKG1fc3FsaXRlRGF0YWJhc2UsIHNldFZlcnNpb25RdWVyeS50aHJlYWRzYWZlQ29w
eSgpLCB2ZXJzaW9uKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2UgKCVzKSIsIHZlcnNpb24uYXNjaWkoKS5k
YXRhKCksIHNldFZlcnNpb25RdWVyeS5hc2NpaSgpLmRhdGEoKSk7Ci0KLSAgICBtX2RhdGFiYXNl
QXV0aG9yaXplci0+ZW5hYmxlKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIERh
dGFiYXNlOjp2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZXhw
ZWN0ZWRWZXJzaW9uLmlzRW1wdHkoKSkgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZ3Vp
ZE11dGV4KCkpOwotICAgICAgICByZXR1cm4gbV9leHBlY3RlZFZlcnNpb24gPT0gZ3VpZFRvVmVy
c2lvbk1hcCgpLmdldChtX2d1aWQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCiB2
b2lkIERhdGFiYXNlOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKQogewogICAgIGlmIChtX2RlbGV0
ZWQgfHwgIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSkKQEAgLTQx
MCwzMCArMjQzLDEzIEBAIHZvaWQgRGF0YWJhc2U6OmNsb3NlKENsb3NlUG9saWN5IHBvbGljeSkK
IHsKICAgICBSZWZQdHI8RGF0YWJhc2U+IHByb3RlY3QgPSB0aGlzOwogCi0gICAgaWYgKCFtX29w
ZW5lZCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+ZGF0YWJhc2VUaHJlYWQoKSk7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkp
OwotICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAvLyBNdXN0IHJlZigpIGJlZm9y
ZSBjYWxsaW5nIGRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKCkuCi0gICAg
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFz
ZUNsb3NlZCh0aGlzKTsKLSAgICBtX29wZW5lZCA9IGZhbHNlOwotCi0gICAgewotICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwogCi0gICAgICAgIEhhc2hTZXQ8RGF0YWJh
c2UqPiogaGFzaFNldCA9IGd1aWRUb0RhdGFiYXNlTWFwKCkuZ2V0KG1fZ3VpZCk7Ci0gICAgICAg
IEFTU0VSVChoYXNoU2V0KTsKLSAgICAgICAgQVNTRVJUKGhhc2hTZXQtPmNvbnRhaW5zKHRoaXMp
KTsKLSAgICAgICAgaGFzaFNldC0+cmVtb3ZlKHRoaXMpOwotICAgICAgICBpZiAoaGFzaFNldC0+
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBndWlkVG9EYXRhYmFzZU1hcCgpLnJlbW92ZShtX2d1
aWQpOwotICAgICAgICAgICAgZGVsZXRlIGhhc2hTZXQ7Ci0gICAgICAgICAgICBndWlkVG9WZXJz
aW9uTWFwKCkucmVtb3ZlKG1fZ3VpZCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgY2xvc2VEYXRh
YmFzZSgpOwogCisgICAgLy8gTXVzdCByZWYoKSBiZWZvcmUgY2FsbGluZyBkYXRhYmFzZVRocmVh
ZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCgpLgorICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+ZGF0YWJhc2VUaHJlYWQoKS0+cmVjb3JkRGF0YWJhc2VDbG9zZWQodGhpcyk7CiAgICAgbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT51bnNjaGVkdWxlRGF0YWJh
c2VUYXNrcyh0aGlzKTsKICAgICBpZiAocG9saWN5ID09IFJlbW92ZURhdGFiYXNlRnJvbUNvbnRl
eHQpCiAgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soQ29udGV4dFJl
bW92ZU9wZW5EYXRhYmFzZVRhc2s6OmNyZWF0ZSh0aGlzKSk7CkBAIC00NjMsNiArMjc5LDkgQEAg
dm9pZCBEYXRhYmFzZTo6c3RvcCgpCiAgICAgICAgIG1faXNUcmFuc2FjdGlvblF1ZXVlRW5hYmxl
ZCA9IGZhbHNlOwogICAgICAgICBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAg
IH0KKworICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCkp
CisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5z
Y2hlZHVsZURhdGFiYXNlVGFza3ModGhpcyk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRh
YmFzZTo6bWF4aW11bVNpemUoKSBjb25zdApAQCAtNDcwLDc5ICsyODksNiBAQCB1bnNpZ25lZCBs
b25nIGxvbmcgRGF0YWJhc2U6Om1heGltdW1TaXplCiAgICAgcmV0dXJuIERhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlcigpLmdldE1heFNpemVGb3JEYXRhYmFzZSh0aGlzKTsKIH0KIAotdm9pZCBEYXRh
YmFzZTo6ZGlzYWJsZUF1dGhvcml6ZXIoKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQXV0aG9y
aXplcik7Ci0gICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKLX0KLQotdm9pZCBE
YXRhYmFzZTo6ZW5hYmxlQXV0aG9yaXplcigpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRo
b3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Ci19Ci0KLXZvaWQg
RGF0YWJhc2U6OnNldEF1dGhvcml6ZXJSZWFkT25seSgpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJh
c2VBdXRob3JpemVyKTsKLSAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+c2V0UmVhZE9ubHkoKTsK
LX0KLQotYm9vbCBEYXRhYmFzZTo6bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpCi17Ci0gICAg
QVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhv
cml6ZXItPmxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6
bGFzdEFjdGlvbldhc0luc2VydCgpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVy
KTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25XYXNJbnNlcnQo
KTsKLX0KLQotdm9pZCBEYXRhYmFzZTo6cmVzZXREZWxldGVzKCkKLXsKLSAgICBBU1NFUlQobV9k
YXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5yZXNldERlbGV0
ZXMoKTsKLX0KLQotYm9vbCBEYXRhYmFzZTo6aGFkRGVsZXRlcygpCi17Ci0gICAgQVNTRVJUKG1f
ZGF0YWJhc2VBdXRob3JpemVyKTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmhh
ZERlbGV0ZXMoKTsKLX0KLQotc3RhdGljIGludCBndWlkRm9yT3JpZ2luQW5kTmFtZShjb25zdCBT
dHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIFN0cmluZyBzdHJpbmdJ
RDsKLSAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCIvIikpCi0gICAgICAgIHN0cmluZ0lEID0gb3Jp
Z2luICsgbmFtZTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmluZ0lEID0gb3JpZ2luICsgIi8iICsg
bmFtZTsKLQotICAgIC8vIE5vdGU6IFdlIGRvbid0IGhhdmUgdG8gdXNlIEF0b21pY2FsbHlJbml0
aWFsaXplZFN0YXRpYyBoZXJlIGJlY2F1c2UKLSAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBvbmNlIGluIHRoZSBjb25zdHJ1Y3RvciBvbiB0aGUgbWFpbiB0aHJlYWQKLSAgICAvLyBiZWZv
cmUgYW55IG90aGVyIHRocmVhZHMgdGhhdCBjYWxsIHRoaXMgZnVuY3Rpb24gYXJlIHVzZWQuCi0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwgc3RyaW5nSWRlbnRpZmllck11dGV4LCAoKSk7
Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHN0cmluZ0lkZW50aWZpZXJNdXRleCk7Ci0gICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgaW50PiBJREd1aWRNYXA7Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChJREd1aWRNYXAsIHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAsICgpKTsKLSAgICBpbnQg
Z3VpZCA9IHN0cmluZ0lkZW50aWZpZXJUb0dVSURNYXAuZ2V0KHN0cmluZ0lEKTsKLSAgICBpZiAo
IWd1aWQpIHsKLSAgICAgICAgc3RhdGljIGludCBjdXJyZW50TmV3R1VJRCA9IDE7Ci0gICAgICAg
IGd1aWQgPSBjdXJyZW50TmV3R1VJRCsrOwotICAgICAgICBzdHJpbmdJZGVudGlmaWVyVG9HVUlE
TWFwLnNldChzdHJpbmdJRCwgZ3VpZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGd1aWQ7Ci19Ci0K
LXZvaWQgRGF0YWJhc2U6OnJlc2V0QXV0aG9yaXplcigpCi17Ci0gICAgaWYgKG1fZGF0YWJhc2VB
dXRob3JpemVyKQotICAgICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsKLX0KLQog
dm9pZCBEYXRhYmFzZTo6cGVyZm9ybVBvbGljeUNoZWNrcygpCiB7CiAgICAgLy8gRklYTUU6IENv
ZGUgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIHdpbGwgbmVlZCB0byBiZSBydW4gdG8gZW5mb3Jj
ZSB0aGUgcGVyLW9yaWdpbiBzaXplIGxpbWl0IHRoZSBzcGVjIG1hbmRhdGVzLgpAQCAtNTU3LDky
ICszMDMsMTYgQEAgdm9pZCBEYXRhYmFzZTo6cGVyZm9ybVBvbGljeUNoZWNrcygpCiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnko
RXhjZXB0aW9uQ29kZSYgZSkKK2Jvb2wgRGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJv
b2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGUpCiB7Ci0gICAgaWYg
KCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxlbmFtZSwgdHJ1ZSkpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gb3BlbiBkYXRhYmFzZSBhdCBwYXRoICVzIiwgbV9maWxlbmFtZS5h
c2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGUgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UudHVybk9uSW5j
cmVtZW50YWxBdXRvVmFjdXVtKCkpCi0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHR1cm4g
b24gaW5jcmVtZW50YWwgYXV0by12YWN1dW0gZm9yIGRhdGFiYXNlICVzIiwgbV9maWxlbmFtZS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgaWYgKEFic3RyYWN0RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5k
VmVyaWZ5KHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBlKSkgeworICAgICAgICBpZiAobV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpKQorICAgICAgICAgICAgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZU9wZW4o
dGhpcyk7CiAKLSAgICBBU1NFUlQobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwotICAgIG1fc3FsaXRl
RGF0YWJhc2Uuc2V0QXV0aG9yaXplcihtX2RhdGFiYXNlQXV0aG9yaXplcik7Ci0gICAgbV9zcWxp
dGVEYXRhYmFzZS5zZXRCdXN5VGltZW91dChtYXhTcWxpdGVCdXN5V2FpdFRpbWUpOwotCi0gICAg
U3RyaW5nIGN1cnJlbnRWZXJzaW9uOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KGd1aWRNdXRleCgpKTsKLQotICAgICAgICBHdWlkVmVyc2lvbk1hcDo6aXRlcmF0b3IgZW50cnkg
PSBndWlkVG9WZXJzaW9uTWFwKCkuZmluZChtX2d1aWQpOwotICAgICAgICBpZiAoZW50cnkgIT0g
Z3VpZFRvVmVyc2lvbk1hcCgpLmVuZCgpKSB7Ci0gICAgICAgICAgICAvLyBNYXAgbnVsbCBzdHJp
bmcgdG8gZW1wdHkgc3RyaW5nIChzZWUgdXBkYXRlR3VpZFZlcnNpb25NYXAoKSkuCi0gICAgICAg
ICAgICBjdXJyZW50VmVyc2lvbiA9IGVudHJ5LT5zZWNvbmQuaXNOdWxsKCkgPyBTdHJpbmcoIiIp
IDogZW50cnktPnNlY29uZDsKLSAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQ3VycmVudCBj
YWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSBpcyAlcyIsIG1fZ3VpZCwgY3VycmVudFZlcnNpb24u
YXNjaWkoKS5kYXRhKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTE9HKFN0b3Jh
Z2VBUEksICJObyBjYWNoZWQgdmVyc2lvbiBmb3IgZ3VpZCAlaSIsIG1fZ3VpZCk7Ci0KLSAgICAg
ICAgICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50YWJsZUV4aXN0cyhkYXRhYmFzZUluZm9UYWJs
ZU5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICBtX25ldyA9IHRydWU7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSAi
ICsgZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkgKyAiIChrZXkgVEVYVCBOT1QgTlVMTCBPTiBDT05G
TElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLHZhbHVlIFRFWFQgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gY3JlYXRlIHRhYmxlICVzIGluIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VJbmZvVGFi
bGVOYW1lKCkuYXNjaWkoKS5kYXRhKCksIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRh
KCkpOwotICAgICAgICAgICAgICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBoYW5kbGUgdG8gdGhlIGRhdGFiYXNlIGZpbGUuCi0g
ICAgICAgICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKCFnZXRWZXJzaW9uRnJvbURhdGFiYXNlKGN1cnJlbnRWZXJzaW9u
KSkgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBjdXJyZW50IHZl
cnNpb24gZnJvbSBkYXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRh
KCkpOwotICAgICAgICAgICAgICAgIGUgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgICAg
ICAgICAvLyBDbG9zZSB0aGUgaGFuZGxlIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgICAgICAg
ICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY3VycmVudFZlcnNpb24ubGVu
Z3RoKCkpIHsKLSAgICAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlJldHJpZXZlZCBjdXJy
ZW50IHZlcnNpb24gJXMgZnJvbSBkYXRhYmFzZSAlcyIsIGN1cnJlbnRWZXJzaW9uLmFzY2lpKCku
ZGF0YSgpLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoIW1fbmV3IHx8ICFtX2NyZWF0aW9uQ2FsbGJhY2spIHsKLSAgICAgICAgICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIlNldHRpbmcgdmVyc2lvbiAlcyBpbiBkYXRhYmFzZSAlcyB0
aGF0IHdhcyBqdXN0IGNyZWF0ZWQiLCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwg
ZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFzZXRWZXJzaW9uSW5EYXRhYmFzZShtX2V4cGVjdGVkVmVyc2lvbikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHZlcnNpb24gJXMgaW4gZGF0YWJhc2Ug
JXMiLCBtX2V4cGVjdGVkVmVyc2lvbi5hc2NpaSgpLmRhdGEoKSwgZGF0YWJhc2VEZWJ1Z05hbWUo
KS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBJTlZBTElEX1NUQVRF
X0VSUjsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZSB0byB0aGUgZGF0
YWJhc2UgZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5jbG9zZSgp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gbV9leHBlY3RlZFZlcnNpb247Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUd1aWRWZXJzaW9uTWFwKG1fZ3VpZCwgY3Vy
cmVudFZlcnNpb24pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRWZXJzaW9u
LmlzTnVsbCgpKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZG9lcyBu
b3QgaGF2ZSBpdHMgdmVyc2lvbiBzZXQiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0
YSgpKTsKLSAgICAgICAgY3VycmVudFZlcnNpb24gPSAiIjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0
aGUgZXhwZWN0ZWQgdmVyc2lvbiBpc24ndCB0aGUgZW1wdHkgc3RyaW5nLCBlbnN1cmUgdGhhdCB0
aGUgY3VycmVudCBkYXRhYmFzZSB2ZXJzaW9uIHdlIGhhdmUgbWF0Y2hlcyB0aGF0IHZlcnNpb24u
IE90aGVyd2lzZSwgc2V0IGFuIGV4Y2VwdGlvbi4KLSAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgdmVy
c2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHdlIGFsd2F5cyByZXR1cm4gd2l0aCB3aGF0
ZXZlciB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSB3ZSBoYXZlLgotICAgIGlmICgoIW1fbmV3IHx8
ICFtX2NyZWF0aW9uQ2FsbGJhY2spICYmIG1fZXhwZWN0ZWRWZXJzaW9uLmxlbmd0aCgpICYmIG1f
ZXhwZWN0ZWRWZXJzaW9uICE9IGN1cnJlbnRWZXJzaW9uKSB7Ci0gICAgICAgIExPRyhTdG9yYWdl
QVBJLCAicGFnZSBleHBlY3RzIHZlcnNpb24gJXMgZnJvbSBkYXRhYmFzZSAlcywgd2hpY2ggYWN0
dWFsbHkgaGFzIHZlcnNpb24gbmFtZSAlcyAtIG9wZW5EYXRhYmFzZSgpIGNhbGwgd2lsbCBmYWls
IiwgbV9leHBlY3RlZFZlcnNpb24uYXNjaWkoKS5kYXRhKCksCi0gICAgICAgICAgICBkYXRhYmFz
ZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBjdXJyZW50VmVyc2lvbi5hc2NpaSgpLmRhdGEo
KSk7Ci0gICAgICAgIGUgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgLy8gQ2xvc2UgdGhl
IGhhbmRsZSB0byB0aGUgZGF0YWJhc2UgZmlsZS4KLSAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5j
bG9zZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIC8vIEFsbCBjaGVja3MgcGFzc2VkIGFuZCB3ZSBzdGlsbCBoYXZlIGEgaGFuZGxl
IHRvIHRoaXMgZGF0YWJhc2UgZmlsZS4KLSAgICAvLyBNYWtlIHN1cmUgRGF0YWJhc2VUaHJlYWQg
Y2xvc2VzIGl0IHdoZW4gRGF0YWJhc2VUaHJlYWQgZ29lcyBhd2F5LgotICAgIG1fb3BlbmVkID0g
dHJ1ZTsKLSAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgp
KQotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmRhdGFiYXNlVGhyZWFkKCktPnJl
Y29yZERhdGFiYXNlT3Blbih0aGlzKTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBm
YWxzZTsKIH0KIAogdm9pZCBEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbihjb25zdCBTdHJpbmcmIG9s
ZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbiwKQEAgLTc1NywxMSArNDI3LDYgQEAg
VmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZQogICAgIHJldHVybiB0YWJs
ZU5hbWVzOwogfQogCi12b2lkIERhdGFiYXNlOjpwZXJmb3JtQ3JlYXRpb25DYWxsYmFjaygpCi17
Ci0gICAgbV9jcmVhdGlvbkNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuZ2V0KCksIHRoaXMpOwotfQotCiBTUUxUcmFuc2FjdGlvbkNsaWVudCogRGF0YWJhc2U6
OnRyYW5zYWN0aW9uQ2xpZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNsaWVudCgpOwpAQCAtNzcy
LDE0ICs0MzcsNiBAQCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBEYXRhYmFzZTo6dHJhCiAg
ICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGF0YWJhc2VUaHJlYWQoKS0+dHJh
bnNhY3Rpb25Db29yZGluYXRvcigpOwogfQogCi1TdHJpbmcgRGF0YWJhc2U6OnZlcnNpb24oKSBj
b25zdAotewotICAgIGlmIChtX2RlbGV0ZWQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICBNdXRleExvY2tlciBsb2NrZXIoZ3VpZE11dGV4KCkpOwotICAgIHJldHVybiBndWlkVG9WZXJz
aW9uTWFwKCkuZ2V0KG1fZ3VpZCkudGhyZWFkc2FmZUNvcHkoKTsKLX0KLQogVmVjdG9yPFN0cmlu
Zz4gRGF0YWJhc2U6OnRhYmxlTmFtZXMoKQogewogICAgIC8vIEZJWE1FOiBOb3QgdXNpbmcgdGhy
ZWFkc2FmZUNvcHkgb24gdGhlc2Ugc3RyaW5ncyBsb29rcyBvayBzaW5jZSB0aHJlYWRzIHRha2Ug
c3RyaWN0IHR1cm5zCkBAIC03OTcsMTQgKzQ1NCw2IEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNl
Ojp0YWJsZU5hbWVzKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERhdGFiYXNlOjpz
ZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIG1fZXhwZWN0
ZWRWZXJzaW9uID0gdmVyc2lvbi50aHJlYWRzYWZlQ29weSgpOwotICAgIC8vIFVwZGF0ZSB0aGUg
aW4gbWVtb3J5IGRhdGFiYXNlIHZlcnNpb24gbWFwLgotICAgIE11dGV4TG9ja2VyIGxvY2tlcihn
dWlkTXV0ZXgoKSk7Ci0gICAgdXBkYXRlR3VpZFZlcnNpb25NYXAobV9ndWlkLCB2ZXJzaW9uKTsK
LX0KLQogU2VjdXJpdHlPcmlnaW4qIERhdGFiYXNlOjpzZWN1cml0eU9yaWdpbigpIGNvbnN0CiB7
CiAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpCkBA
IC04MTQsMjkgKzQ2Myw2IEBAIFNlY3VyaXR5T3JpZ2luKiBEYXRhYmFzZTo6c2VjdXJpdHlPcmln
aW4KICAgICByZXR1cm4gMDsKIH0KIAotU3RyaW5nIERhdGFiYXNlOjpzdHJpbmdJZGVudGlmaWVy
KCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBkZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0
aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fbmFtZS50aHJlYWRzYWZlQ29weSgpOwotfQotCi1T
dHJpbmcgRGF0YWJhc2U6OmRpc3BsYXlOYW1lKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm4gYSBk
ZWVwIGNvcHkgZm9yIHJlZiBjb3VudGluZyB0aHJlYWQgc2FmZXR5Ci0gICAgcmV0dXJuIG1fZGlz
cGxheU5hbWUudGhyZWFkc2FmZUNvcHkoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBEYXRhYmFzZTo6
ZXN0aW1hdGVkU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZTsKLX0K
LQotU3RyaW5nIERhdGFiYXNlOjpmaWxlTmFtZSgpIGNvbnN0Ci17Ci0gICAgLy8gUmV0dXJuIGEg
ZGVlcCBjb3B5IGZvciByZWYgY291bnRpbmcgdGhyZWFkIHNhZmV0eQotICAgIHJldHVybiBtX2Zp
bGVuYW1lLnRocmVhZHNhZmVDb3B5KCk7Ci19Ci0KIHZvaWQgRGF0YWJhc2U6OmluY3JlbWVudGFs
VmFjdXVtSWZOZWVkZWQoKQogewogICAgIGludDY0X3QgZnJlZVNwYWNlU2l6ZSA9IG1fc3FsaXRl
RGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDYy
MTUxKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDE4ICszMywxMyBAQAogI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCi0jaWZuZGVmIE5E
RUJVRwotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jZW5kaWYKIAogI2luY2x1ZGUgPHd0
Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgRGF0YWJhc2VBdXRob3JpemVyOwogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsK
LWNsYXNzIERhdGFiYXNlVGhyZWFkOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNs
YXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU1FMVHJhbnNhY3Rpb247CkBAIC01NCw4ICs0OSw2
IEBAIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBTUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2s7CiBjbGFzcyBWb2lkQ2FsbGJhY2s7CiAKLXR5cGVkZWYgaW50IEV4Y2Vw
dGlvbkNvZGU7Ci0KIGNsYXNzIERhdGFiYXNlIDogcHVibGljIEFic3RyYWN0RGF0YWJhc2Ugewog
cHVibGljOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlKCk7CkBAIC02MywzNyArNTYsMTcgQEAgcHVi
bGljOgogICAgIC8vIERpcmVjdCBzdXBwb3J0IGZvciB0aGUgRE9NIEFQSQogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPERhdGFiYXNlPiBvcGVuRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJh
c2VDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgdmVyc2lvbigpIGNvbnN0
OworICAgIHZpcnR1YWwgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKICAgICB2b2lkIGNoYW5nZVZl
cnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24s
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sCiAgICAgICAgICAgICAgICAgICAg
ICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxW
b2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7CiAgICAgdm9pZCB0cmFuc2FjdGlvbihQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjaz4sCiAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxs
YmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBib29sIHJlYWRPbmx5KTsKIAogICAgIC8vIEludGVybmFs
IGVuZ2luZSBzdXBwb3J0Ci0gICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFi
bGVOYW1lKCk7Ci0KLSAgICB2b2lkIGRpc2FibGVBdXRob3JpemVyKCk7Ci0gICAgdm9pZCBlbmFi
bGVBdXRob3JpemVyKCk7Ci0gICAgdm9pZCBzZXRBdXRob3JpemVyUmVhZE9ubHkoKTsKLSAgICBi
b29sIGxhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UoKTsKLSAgICBib29sIGxhc3RBY3Rpb25XYXNJ
bnNlcnQoKTsKLSAgICB2b2lkIHJlc2V0RGVsZXRlcygpOwotICAgIGJvb2wgaGFkRGVsZXRlcygp
OwotCiAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVOYW1lcygpOwogCi0gICAgdmlydHVhbCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpOyB9CiAgICAgdmlydHVhbCBTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKICAgICBTUUxpdGVEYXRhYmFzZSYgc3Fs
aXRlRGF0YWJhc2UoKSB7IHJldHVybiBtX3NxbGl0ZURhdGFiYXNlOyB9Ci0gICAgdmlydHVhbCBT
dHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGRpc3Bs
YXlOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OwotCi0gICAgYm9v
bCBnZXRWZXJzaW9uRnJvbURhdGFiYXNlKFN0cmluZyYpOwotICAgIGJvb2wgc2V0VmVyc2lvbklu
RGF0YWJhc2UoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRFeHBlY3RlZFZlcnNpb24oY29u
c3QgU3RyaW5nJik7Ci0gICAgYm9vbCB2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAgICAgYm9vbCBkZWxl
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CkBAIC0xMDEsMjggKzc0LDIzIEBAIHB1
YmxpYzoKICAgICBlbnVtIENsb3NlUG9saWN5IHsgRG9Ob3RSZW1vdmVEYXRhYmFzZUZyb21Db250
ZXh0LCBSZW1vdmVEYXRhYmFzZUZyb21Db250ZXh0IH07CiAgICAgdm9pZCBjbG9zZShDbG9zZVBv
bGljeSk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKLSAgICBib29sIG9w
ZW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbmVkOyB9CiAKICAgICB2b2lkIHN0b3AoKTsKICAg
ICBib29sIHN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX3N0b3BwZWQ7IH0KIAotICAgIGJvb2wg
aXNOZXcoKSBjb25zdCB7IHJldHVybiBtX25ldzsgfQotCiAgICAgdW5zaWduZWQgbG9uZyBsb25n
IGRhdGFiYXNlU2l6ZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6
ZSgpIGNvbnN0OwogCiAgICAgLy8gQ2FsbGVkIGZyb20gRGF0YWJhc2VUaHJlYWQsIG11c3QgYmUg
cHJlcGFyZWQgdG8gd29yayBvbiB0aGUgYmFja2dyb3VuZCB0aHJlYWQKLSAgICB2b2lkIHJlc2V0
QXV0aG9yaXplcigpOwogICAgIHZvaWQgcGVyZm9ybVBvbGljeUNoZWNrcygpOwogCi0gICAgYm9v
bCBwZXJmb3JtT3BlbkFuZFZlcmlmeShFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBib29s
IHBlcmZvcm1PcGVuQW5kVmVyaWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2Vw
dGlvbkNvZGUmKTsKIAogICAgIHZvaWQgaW5Qcm9ncmVzc1RyYW5zYWN0aW9uQ29tcGxldGVkKCk7
CiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsK
ICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uKiwgYm9vbCBp
bW1lZGlhdGVseSA9IGZhbHNlKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJs
ZU5hbWVzKCk7Ci0gICAgdm9pZCBwZXJmb3JtQ3JlYXRpb25DYWxsYmFjaygpOwogCiAgICAgU1FM
VHJhbnNhY3Rpb25DbGllbnQqIHRyYW5zYWN0aW9uQ2xpZW50KCkgY29uc3Q7CiAgICAgU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0OwpAQCAt
MTMxLDQ1ICs5OSwyMyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgRGF0YWJhc2UoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBl
Y3RlZFZlcnNpb24sCi0gICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+KTsK
KyAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpOwogCi0gICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihFeGNlcHRpb25D
b2RlJik7CisgICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rp
b24oKTsKIAorICAgIHN0YXRpYyB2b2lkIGRlbGl2ZXJQZW5kaW5nQ2FsbGJhY2sodm9pZCopOwor
CiAgICAgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+IG1fdHJhbnNhY3Rpb25RdWV1ZTsK
ICAgICBNdXRleCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4OwogICAgIGJvb2wgbV90cmFu
c2FjdGlvbkluUHJvZ3Jlc3M7CiAgICAgYm9vbCBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQ7
CiAKLSAgICBzdGF0aWMgdm9pZCBkZWxpdmVyUGVuZGluZ0NhbGxiYWNrKHZvaWQqKTsKLQotICAg
IFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
Ci0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdp
bjsKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fZGF0YWJhc2VUaHJlYWRTZWN1cml0eU9y
aWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIGludCBtX2d1aWQ7Ci0gICAgU3RyaW5nIG1f
ZXhwZWN0ZWRWZXJzaW9uOwotICAgIFN0cmluZyBtX2Rpc3BsYXlOYW1lOwotICAgIHVuc2lnbmVk
IGxvbmcgbV9lc3RpbWF0ZWRTaXplOwotICAgIFN0cmluZyBtX2ZpbGVuYW1lOwogCiAgICAgYm9v
bCBtX2RlbGV0ZWQ7Ci0KICAgICBib29sIG1fc3RvcHBlZDsKLQotICAgIGJvb2wgbV9vcGVuZWQ7
Ci0KLSAgICBib29sIG1fbmV3OwotCi0gICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFz
ZTsKLSAgICBSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVyPiBtX2RhdGFiYXNlQXV0aG9yaXplcjsK
LQotICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBtX2NyZWF0aW9uQ2FsbGJhY2s7Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRhdGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9u
YW1lOyB9Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCShyZXZpc2lvbiA2MjE1MSkKKysrIFdlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwx
MyArMzAsMTkgQEAKICNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKIAogI2lmIEVOQUJM
RShEQVRBQkFTRSkKLSNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1EYXRhYmFzZUF1dGhvcml6ZXI6OkRhdGFiYXNlQXV0aG9yaXplcigpCitQYXNzUmVmUHRy
PERhdGFiYXNlQXV0aG9yaXplcj4gRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGUoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBE
YXRhYmFzZUF1dGhvcml6ZXIoZGF0YWJhc2VJbmZvVGFibGVOYW1lKSk7Cit9CisKK0RhdGFiYXNl
QXV0aG9yaXplcjo6RGF0YWJhc2VBdXRob3JpemVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZv
VGFibGVOYW1lKQogICAgIDogbV9zZWN1cml0eUVuYWJsZWQoZmFsc2UpCisgICAgLCBtX2RhdGFi
YXNlSW5mb1RhYmxlTmFtZShkYXRhYmFzZUluZm9UYWJsZU5hbWUpCiB7CiAgICAgcmVzZXQoKTsK
ICAgICBhZGRXaGl0ZWxpc3RlZEZ1bmN0aW9ucygpOwpAQCAtMzg4LDcgKzM5NCw3IEBAIHZvaWQg
RGF0YWJhc2VBdXRob3JpemVyOjpzZXRSZWFkT25seSgpCiAgICAgbV9yZWFkT25seSA9IHRydWU7
CiB9CiAKLWludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRlbnlCYXNlZE9uVGFibGVOYW1lKGNvbnN0
IFN0cmluZyYgdGFibGVOYW1lKQoraW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZGVueUJhc2VkT25U
YWJsZU5hbWUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3Nl
Y3VyaXR5RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhBbGxvdzsKQEAgLTM5OSw3ICs0
MDUsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkZW55QmFzZWRPblRhYmxlCiAgICAgLy8g
ICAgZXF1YWxJZ25vcmluZ0Nhc2UodGFibGVOYW1lLCAic3FsaXRlX3NlcXVlbmNlIikgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UodGFibGVOYW1lLCBEYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1l
KCkpKQogICAgIC8vICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKLSAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UodGFibGVOYW1lLCBEYXRhYmFzZTo6ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkp
KQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0YWJsZU5hbWUsIG1fZGF0YWJhc2VJbmZvVGFi
bGVOYW1lKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAgcmV0dXJuIFNRTEF1
dGhBbGxvdzsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHJldmlzaW9u
IDYyMTUxKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCwxMCArMjgsMTEgQEAKICNpZm5kZWYgRGF0YWJhc2VBdXRob3JpemVyX2gK
ICNkZWZpbmUgRGF0YWJhc2VBdXRob3JpemVyX2gKIAorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcgKzQ0LDcgQEAgZXh0ZXJuIGNvbnN0
IGludCBTUUxBdXRoRGVueTsKIAogY2xhc3MgRGF0YWJhc2VBdXRob3JpemVyIDogcHVibGljIFRo
cmVhZFNhZmVTaGFyZWQ8RGF0YWJhc2VBdXRob3JpemVyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgRGF0YWJhc2VBdXRob3JpemVyKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFi
YXNlQXV0aG9yaXplcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZvVGFibGVOYW1l
KTsKIAogICAgIGludCBjcmVhdGVUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CiAgICAg
aW50IGNyZWF0ZVRlbXBUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CkBAIC05Nyw5ICs5
OCw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhZERlbGV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2hh
ZERlbGV0ZXM7IH0KIAogcHJpdmF0ZToKLSAgICBEYXRhYmFzZUF1dGhvcml6ZXIoKTsKKyAgICBE
YXRhYmFzZUF1dGhvcml6ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUpOwog
ICAgIHZvaWQgYWRkV2hpdGVsaXN0ZWRGdW5jdGlvbnMoKTsKLSAgICBpbnQgZGVueUJhc2VkT25U
YWJsZU5hbWUoY29uc3QgU3RyaW5nJik7CisgICAgaW50IGRlbnlCYXNlZE9uVGFibGVOYW1lKGNv
bnN0IFN0cmluZyYpIGNvbnN0OwogICAgIGludCB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFt
ZShjb25zdCBTdHJpbmcmKTsKIAogICAgIGJvb2wgbV9zZWN1cml0eUVuYWJsZWQgOiAxOwpAQCAt
MTA4LDYgKzEwOSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3JlYWRPbmx5IDogMTsKICAgICBi
b29sIG1faGFkRGVsZXRlcyA6IDE7CiAKKyAgICBjb25zdCBTdHJpbmcgbV9kYXRhYmFzZUluZm9U
YWJsZU5hbWU7CisKICAgICBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBtX3doaXRl
bGlzdGVkRnVuY3Rpb25zOwogfTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3lu
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHJl
dmlzaW9uIDYyMTUxKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDUyICszMSw2MCBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogI2lu
Y2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIK
ICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIlNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IFN0cmluZyYgRGF0
YWJhc2VTeW5jOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKQorUGFzc1JlZlB0cjxEYXRhYmFzZVN5
bmM+IERhdGFiYXNlU3luYzo6b3BlbkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJz
aW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIG5hbWUsICgi
X19XZWJLaXREYXRhYmFzZUluZm9UYWJsZV9fIikpOwotICAgIHJldHVybiBuYW1lOwotfQorICAg
IEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiAKLVBhc3NSZWZQdHI8RGF0YWJh
c2VTeW5jPiBEYXRhYmFzZVN5bmM6Om9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGxvbmcsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIC8vIEZJWE1FOiB1bmNvbW1lbnQgdGhlIGFzc2VydCBvbmNlIHdlIHVzZSB0aGUg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogcGFyYW1ldGVyCi0gICAgLy9BU1NFUlQoY29udGV4dC0+
aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmICghRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCku
Y2FuRXN0YWJsaXNoRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUpKSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9yIG9yaWdp
biAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5kYXRhKCks
IGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRh
YmFzZSA9IGFkb3B0UmVmKG5ldyBEYXRhYmFzZVN5bmMoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRW
ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOworCisgICAgaWYgKCFkYXRhYmFz
ZS0+cGVyZm9ybU9wZW5BbmRWZXJpZnkoIWNyZWF0aW9uQ2FsbGJhY2ssIGVjKSkgeworICAgICAg
ICBMT0coU3RvcmFnZUFQSSwgIkZhaWxlZCB0byBvcGVuIGFuZCB2ZXJpZnkgdmVyc2lvbiAoZXhw
ZWN0ZWQgJXMpIG9mIGRhdGFiYXNlICVzIiwgZXhwZWN0ZWRWZXJzaW9uLmFzY2lpKCkuZGF0YSgp
LCBkYXRhYmFzZS0+ZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnJlbW92ZU9wZW5EYXRhYmFzZShkYXRhYmFzZS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLnNldERhdGFiYXNlRGV0YWlscyhjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBu
YW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CisKKyAgICBpZiAoZGF0YWJhc2UtPmlz
TmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQoKSkgeworICAgICAgICBkYXRhYmFzZS0+bV9l
eHBlY3RlZFZlcnNpb24gPSAiIjsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJJbnZva2luZyB0
aGUgY3JlYXRpb24gY2FsbGJhY2sgZm9yIGRhdGFiYXNlICVwXG4iLCBkYXRhYmFzZS5nZXQoKSk7
CisgICAgICAgIGNyZWF0aW9uQ2FsbGJhY2stPmhhbmRsZUV2ZW50KGNvbnRleHQsIGRhdGFiYXNl
LmdldCgpKTsKKyAgICB9CiAKLSAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gZGF0YWJhc2U7CiB9CiAKIERhdGFiYXNlU3luYzo6RGF0YWJhc2VTeW5jKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NS
ZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaykKLSAgICA6IG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQotICAgICwgbV9uYW1lKG5hbWUuY3Jvc3NUaHJlYWRT
dHJpbmcoKSkKLSAgICAsIG1fZXhwZWN0ZWRWZXJzaW9uKGV4cGVjdGVkVmVyc2lvbi5jcm9zc1Ro
cmVhZFN0cmluZygpKQotICAgICwgbV9kaXNwbGF5TmFtZShkaXNwbGF5TmFtZS5jcm9zc1RocmVh
ZFN0cmluZygpKQotICAgICwgbV9lc3RpbWF0ZWRTaXplKGVzdGltYXRlZFNpemUpCi0gICAgLCBt
X2NyZWF0aW9uQ2FsbGJhY2soY3JlYXRpb25DYWxsYmFjaykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSkKKyAgICA6IEFic3RyYWN0RGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJz
aW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkKIHsKLSAgICBBU1NFUlQoY29udGV4dC0+
aXNDb250ZXh0VGhyZWFkKCkpOwogfQogCiBEYXRhYmFzZVN5bmM6On5EYXRhYmFzZVN5bmMoKQog
ewogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgp
KTsKLX0KIAotU3RyaW5nIERhdGFiYXNlU3luYzo6dmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICBpZiAob3BlbmVkKCkpIHsKKyAgICAgICAgRGF0YWJhc2VUcmFj
a2VyOjp0cmFja2VyKCkucmVtb3ZlT3BlbkRhdGFiYXNlKHRoaXMpOworICAgICAgICBjbG9zZURh
dGFiYXNlKCk7CisgICAgfQogfQogCiB2b2lkIERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbihj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3lu
Y0NhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpCkBAIC04OSwxMCArOTcsNDUgQEAgdm9pZCBEYXRh
YmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdAogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIH0KIAotU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogRGF0YWJhc2VTeW5jOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3ZvaWQg
RGF0YWJhc2VTeW5jOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKQogewotICAgIEFTU0VSVChtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICByZXR1cm4gbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpOworICAgIC8vIEZJWE1FOiBuZWVkIHRvIGRvIHNv
bWV0aGluZyBzaW1pbGFyIHRvIGNsb3NlSW1tZWRpYXRlbHkoKSwgYnV0IGluIGEgc3luYyB3YXkK
K30KKworY2xhc3MgQ2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrIDogcHVibGlj
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPENsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFzaz4gY3JlYXRlKFBhc3NS
ZWZQdHI8RGF0YWJhc2VTeW5jPiBkYXRhYmFzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcg
Q2xvc2VTeW5jRGF0YWJhc2VPbkNvbnRleHRUaHJlYWRUYXNrKGRhdGFiYXNlKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopCisg
ICAgeworICAgICAgICBtX2RhdGFiYXNlLT5jbG9zZUltbWVkaWF0ZWx5KCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIENsb3NlU3luY0RhdGFiYXNlT25Db250ZXh0VGhyZWFkVGFzayhQYXNzUmVm
UHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2UpCisgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFz
ZSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPERhdGFiYXNlU3luYz4gbV9kYXRhYmFzZTsK
K307CisKK3ZvaWQgRGF0YWJhc2VTeW5jOjpjbG9zZUltbWVkaWF0ZWx5KCkKK3sKKyAgICBpZiAo
IW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpIHsKKyAgICAgICAg
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhDbG9zZVN5bmNEYXRhYmFzZU9uQ29u
dGV4dFRocmVhZFRhc2s6OmNyZWF0ZSh0aGlzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoIW9wZW5lZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRhYmFzZVRyYWNr
ZXI6OnRyYWNrZXIoKS5yZW1vdmVPcGVuRGF0YWJhc2UodGhpcyk7CisKKyAgICBjbG9zZURhdGFi
YXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VT
eW5jLmgJKHJldmlzaW9uIDYyMTUxKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw0OCArMzAsMzYgQEAKICNkZWZpbmUgRGF0YWJhc2VTeW5j
X2gKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKIGNsYXNzIFNRTFRy
YW5zYWN0aW9uU3luY0NhbGxiYWNrOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQot
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOwogCiAvLyBJ
bnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9u
IHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KLWNsYXNzIERhdGFiYXNlU3luYyA6IHB1Ymxp
YyBSZWZDb3VudGVkPERhdGFiYXNlU3luYz4geworY2xhc3MgRGF0YWJhc2VTeW5jIDogcHVibGlj
IEFic3RyYWN0RGF0YWJhc2UgewogcHVibGljOgotICAgIH5EYXRhYmFzZVN5bmMoKTsKKyAgICB2
aXJ0dWFsIH5EYXRhYmFzZVN5bmMoKTsKIAotICAgIC8vIERpcmVjdCBzdXBwb3J0IGZvciB0aGUg
RE9NIEFQSQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gb3BlbkRhdGFiYXNl
U3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKICAgICB2b2lkIGNoYW5nZVZl
cnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24s
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7
CiAgICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrPiwgYm9vbCByZWFkT25seSwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgLy8gSW50ZXJuYWwg
ZW5naW5lIHN1cHBvcnQKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlu
Zm9UYWJsZU5hbWUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7
CisgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKIAogcHJpdmF0ZToKICAgICBE
YXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCi0gICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0
cjxEYXRhYmFzZUNhbGxiYWNrPik7Ci0KLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgU3Ry
aW5nIG1fZXhwZWN0ZWRWZXJzaW9uOwotICAgIFN0cmluZyBtX2Rpc3BsYXlOYW1lOwotICAgIHVu
c2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOwotICAgIFJlZlB0cjxEYXRhYmFzZUNhbGxiYWNr
PiBtX2NyZWF0aW9uQ2FsbGJhY2s7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIGRhdGFi
YXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSNlbmRpZgorICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVGFzay5jcHAJKHJldmlzaW9uIDYyMTUxKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDkgQEAgdm9pZCBEYXRhYmFz
ZVRhc2s6OnBlcmZvcm1UYXNrKCkKIC8vICoqKiBEYXRhYmFzZU9wZW5UYXNrICoqKgogLy8gT3Bl
bnMgdGhlIGRhdGFiYXNlIGZpbGUgYW5kIHZlcmlmaWVzIHRoZSB2ZXJzaW9uIG1hdGNoZXMgdGhl
IGV4cGVjdGVkIHZlcnNpb24uCiAKLURhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRhc2so
RGF0YWJhc2UqIGRhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXpl
ciwgRXhjZXB0aW9uQ29kZSYgY29kZSwgYm9vbCYgc3VjY2VzcykKK0RhdGFiYXNlT3BlblRhc2s6
OkRhdGFiYXNlT3BlblRhc2soRGF0YWJhc2UqIGRhdGFiYXNlLCBib29sIHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0
aW9uQ29kZSYgY29kZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFz
ZSwgc3luY2hyb25pemVyKQorICAgICwgbV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZShzZXRWZXJz
aW9uSW5OZXdEYXRhYmFzZSkKICAgICAsIG1fY29kZShjb2RlKQogICAgICwgbV9zdWNjZXNzKHN1
Y2Nlc3MpCiB7CkBAIC05Nyw3ICs5OCw3IEBAIERhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3Bl
blRhc2soRGF0YWIKIAogdm9pZCBEYXRhYmFzZU9wZW5UYXNrOjpkb1BlcmZvcm1UYXNrKCkKIHsK
LSAgICBtX3N1Y2Nlc3MgPSBkYXRhYmFzZSgpLT5wZXJmb3JtT3BlbkFuZFZlcmlmeShtX2NvZGUp
OworICAgIG1fc3VjY2VzcyA9IGRhdGFiYXNlKCktPnBlcmZvcm1PcGVuQW5kVmVyaWZ5KG1fc2V0
VmVyc2lvbkluTmV3RGF0YWJhc2UsIG1fY29kZSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlVGFzay5oCShyZXZpc2lvbiA2MjE1MSkKKysrIFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtODUsMTkgKzg1LDIwIEBAIHByaXZh
dGU6CiAKIGNsYXNzIERhdGFiYXNlT3BlblRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZU9wZW5UYXNrPiBjcmVhdGUoRGF0
YWJhc2UqIGRiLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0
aW9uQ29kZSYgY29kZSwgYm9vbCYgc3VjY2VzcykKKyAgICBzdGF0aWMgUGFzc093blB0cjxEYXRh
YmFzZU9wZW5UYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBib29sIHNldFZlcnNpb25Jbk5ld0Rh
dGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9u
Q29kZSYgY29kZSwgYm9vbCYgc3VjY2VzcykKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRGF0
YWJhc2VPcGVuVGFzayhkYiwgc3luY2hyb25pemVyLCBjb2RlLCBzdWNjZXNzKTsKKyAgICAgICAg
cmV0dXJuIG5ldyBEYXRhYmFzZU9wZW5UYXNrKGRiLCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwg
c3luY2hyb25pemVyLCBjb2RlLCBzdWNjZXNzKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0
YWJhc2VPcGVuVGFzayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIEV4Y2Vw
dGlvbkNvZGUmLCBib29sJiBzdWNjZXNzKTsKKyAgICBEYXRhYmFzZU9wZW5UYXNrKERhdGFiYXNl
KiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVy
KiwgRXhjZXB0aW9uQ29kZSYsIGJvb2wmIHN1Y2Nlc3MpOwogCiAgICAgdmlydHVhbCB2b2lkIGRv
UGVyZm9ybVRhc2soKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBk
ZWJ1Z1Rhc2tOYW1lKCkgY29uc3Q7CiAjZW5kaWYKIAorICAgIGJvb2wgbV9zZXRWZXJzaW9uSW5O
ZXdEYXRhYmFzZTsKICAgICBFeGNlcHRpb25Db2RlJiBtX2NvZGU7CiAgICAgYm9vbCYgbV9zdWNj
ZXNzOwogfTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjIxNTEpCisrKyBXZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDYt
MjkgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmeSB0aGUgV2ViRGF0YWJh
c2UgaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDA2MDcKKworICAgICAgICBEbyBub3QgcmVmKCkvZGVyZWYoKSB0aGUgcHJpdmF0ZSBB
YnN0cmFjdERhdGFiYXNlIG1lbWJlci4gVGhpcworICAgICAgICBhbGxvd3MgdXMgdG8gdXNlIFdl
YkRhdGFiYXNlIGluIHRoZSBkZXN0cnVjdG9ycyBvZiB0aGUgREIKKyAgICAgICAgY2xhc3Nlcy4K
KworICAgICAgICAqIHB1YmxpYy9XZWJEYXRhYmFzZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJE
YXRhYmFzZTo6V2ViRGF0YWJhc2UpOgorICAgICAgICAqIHNyYy9XZWJEYXRhYmFzZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRhdGFiYXNlOjpuYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RGF0YWJhc2U6OmRpc3BsYXlOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2U6OmVz
dGltYXRlZFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhYmFzZTo6c2VjdXJpdHlPcmln
aW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhYmFzZTo6V2ViRGF0YWJhc2UpOgorCiAyMDEw
LTA2LTI5ICBaaGUgU3UgIDxzdXpoZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEYXRhYmFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRGF0YWJhc2UuaAko
cmV2aXNpb24gNjIxNTEpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRhdGFiYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDMzICszNCwxNSBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5o
IgogI2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2luLmgiCiAKLSNpZiBXRUJLSVRfSU1QTEVNRU5U
QVRJT04KIG5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsgfQotbmFt
ZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9Ci0j
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkRhdGFiYXNlT2JzZXJ2ZXI7
Ci1jbGFzcyBXZWJEYXRhYmFzZVByaXZhdGU7CiBjbGFzcyBXZWJTdHJpbmc7CiAKIGNsYXNzIFdl
YkRhdGFiYXNlIHsKIHB1YmxpYzoKLSAgICBXZWJEYXRhYmFzZSgpIDogbV9wcml2YXRlKDApIHsg
fQotICAgIFdlYkRhdGFiYXNlKGNvbnN0IFdlYkRhdGFiYXNlJiBkKSA6IG1fcHJpdmF0ZSgwKSB7
IGFzc2lnbihkKTsgfQotICAgIH5XZWJEYXRhYmFzZSgpIHsgcmVzZXQoKTsgfQotCi0gICAgV2Vi
RGF0YWJhc2UmIG9wZXJhdG9yPShjb25zdCBXZWJEYXRhYmFzZSYgZCkKLSAgICB7Ci0gICAgICAg
IGFzc2lnbihkKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIFdFQktJVF9B
UEkgdm9pZCByZXNldCgpOwotICAgIFdFQktJVF9BUEkgdm9pZCBhc3NpZ24oY29uc3QgV2ViRGF0
YWJhc2UmKTsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0K
LQogICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJ
IFdlYlN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0OwogICAgIFdFQktJVF9BUEkgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3Q7CkBAIC03NiwxNSArNTgsMTIgQEAgcHVibGljOgog
ICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFdlYlN0cmlu
ZyYgZGF0YWJhc2VOYW1lKTsKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdlYkRh
dGFiYXNlKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlPiYp
OwotICAgIFdlYkRhdGFiYXNlJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OkFic3RyYWN0RGF0YWJhc2U+Jik7Ci0gICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6OkFic3RyYWN0RGF0YWJhc2U+KCkgY29uc3Q7CisgICAgV2ViRGF0YWJhc2UoY29uc3Qg
V2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZSopOwogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBhc3NpZ24oV2ViRGF0YWJhc2VQcml2YXRlKik7Ci0KLSAgICBXZWJEYXRhYmFzZVByaXZhdGUq
IG1fcHJpdmF0ZTsKKyAgICBXZWJEYXRhYmFzZSgpIHsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkFi
c3RyYWN0RGF0YWJhc2UqIG1fZGF0YWJhc2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2MjE1MSkKKysr
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MiwxMSArMzIsNyBAQAogI2luY2x1ZGUgIldlYkRhdGFiYXNlLmgiCiAKICNpbmNsdWRlICJBYnN0
cmFjdERhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCi0jaW5jbHVkZSAiRGF0
YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJE
b2N1bWVudC5oIgotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJRdW90YVRyYWNrZXIuaCIK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIldlYkRhdGFiYXNlT2JzZXJ2
ZXIuaCIKQEAgLTUwLDQ0ICs0NiwyOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIFdl
YkRhdGFiYXNlT2JzZXJ2ZXIqIGRhdGFiYXNlT2JzZXJ2ZXIgPSAwOwogCi1jbGFzcyBXZWJEYXRh
YmFzZVByaXZhdGUgOiBwdWJsaWMgQWJzdHJhY3REYXRhYmFzZSB7Ci19OwotCi12b2lkIFdlYkRh
dGFiYXNlOjpyZXNldCgpCi17Ci0gICAgYXNzaWduKDApOwotfQotCi12b2lkIFdlYkRhdGFiYXNl
Ojphc3NpZ24oY29uc3QgV2ViRGF0YWJhc2UmIG90aGVyKQotewotICAgIFdlYkRhdGFiYXNlUHJp
dmF0ZSogZCA9IGNvbnN0X2Nhc3Q8V2ViRGF0YWJhc2VQcml2YXRlKj4ob3RoZXIubV9wcml2YXRl
KTsKLSAgICBpZiAoZCkKLSAgICAgICAgZC0+cmVmKCk7Ci0gICAgYXNzaWduKGQpOwotfQotCiBX
ZWJTdHJpbmcgV2ViRGF0YWJhc2U6Om5hbWUoKSBjb25zdAogewotICAgIEFTU0VSVChtX3ByaXZh
dGUpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPnN0cmluZ0lkZW50aWZpZXIoKTsKKyAgICBBU1NF
UlQobV9kYXRhYmFzZSk7CisgICAgcmV0dXJuIG1fZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIo
KTsKIH0KIAogV2ViU3RyaW5nIFdlYkRhdGFiYXNlOjpkaXNwbGF5TmFtZSgpIGNvbnN0CiB7Ci0g
ICAgQVNTRVJUKG1fcHJpdmF0ZSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZGlzcGxheU5hbWUo
KTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgcmV0dXJuIG1fZGF0YWJhc2UtPmRpc3Bs
YXlOYW1lKCk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgV2ViRGF0YWJhc2U6OmVzdGltYXRlZFNpemUo
KSBjb25zdAogewotICAgIEFTU0VSVChtX3ByaXZhdGUpOwotICAgIHJldHVybiBtX3ByaXZhdGUt
PmVzdGltYXRlZFNpemUoKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgcmV0dXJuIG1f
ZGF0YWJhc2UtPmVzdGltYXRlZFNpemUoKTsKIH0KIAogV2ViU2VjdXJpdHlPcmlnaW4gV2ViRGF0
YWJhc2U6OnNlY3VyaXR5T3JpZ2luKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9wcml2YXRlKTsK
LSAgICByZXR1cm4gV2ViU2VjdXJpdHlPcmlnaW4obV9wcml2YXRlLT5zZWN1cml0eU9yaWdpbigp
KTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgcmV0dXJuIFdlYlNlY3VyaXR5T3JpZ2lu
KG1fZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwogfQogCiB2b2lkIFdlYkRhdGFiYXNlOjpz
ZXRPYnNlcnZlcihXZWJEYXRhYmFzZU9ic2VydmVyKiBvYnNlcnZlcikKQEAgLTExNywyOCArOTcs
OSBAQCB2b2lkIFdlYkRhdGFiYXNlOjpjbG9zZURhdGFiYXNlSW1tZWRpYXRlCiAgICAgICAgIGl0
LT5nZXQoKS0+Y2xvc2VJbW1lZGlhdGVseSgpOwogfQogCi1XZWJEYXRhYmFzZTo6V2ViRGF0YWJh
c2UoY29uc3QgV1RGOjpQYXNzUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+JiBkYXRhYmFzZSkKLSAg
ICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJEYXRhYmFzZVByaXZhdGUqPihkYXRhYmFzZS5y
ZWxlYXNlUmVmKCkpKQotewotfQotCi1XZWJEYXRhYmFzZSYgV2ViRGF0YWJhc2U6Om9wZXJhdG9y
PShjb25zdCBXVEY6OlBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4mIGRhdGFiYXNlKQotewot
ICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJEYXRhYmFzZVByaXZhdGUqPihkYXRhYmFzZS5yZWxl
YXNlUmVmKCkpKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYkRhdGFiYXNlOjpvcGVyYXRv
ciBXVEY6OlBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4oKSBjb25zdAotewotICAgIHJldHVy
biBQYXNzUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+KGNvbnN0X2Nhc3Q8V2ViRGF0YWJhc2VQcml2
YXRlKj4obV9wcml2YXRlKSk7Ci19Ci0KLXZvaWQgV2ViRGF0YWJhc2U6OmFzc2lnbihXZWJEYXRh
YmFzZVByaXZhdGUqIGQpCitXZWJEYXRhYmFzZTo6V2ViRGF0YWJhc2UoY29uc3QgQWJzdHJhY3RE
YXRhYmFzZSogZGF0YWJhc2UpCisgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQogewotICAgIC8v
IGQgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNhbGxlcgotICAgIGlmIChtX3ByaXZh
dGUpCi0gICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKLSAgICBtX3ByaXZhdGUgPSBkOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMTUxKQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAt
MDYtMjkgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVbmNvbW1lbnQgc29tZSB0ZXN0
IGNhc2VzIGluIG9wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMsIGFuZAorICAgICAgICBjb21tZW50
IG91dCBmb3Igbm93IHRoZSBvbmVzIHRoYXQgZmFpbCBpbiBWOC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNjA3CisKKyAgICAgICAgKiBmYXN0L3dv
cmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5j
LWlucHV0cy5qczoKKyAgICAgICAgKGNhdGNoKToKKwogMjAxMC0wNi0yOSAgWmhlbnlhbyBNbyAg
PHptb0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3lu
Yy1pbnB1dHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA2MjE1MSkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0
YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01LDQgKzUs
NyBAQCBQQVNTOiB1bmRlZmluZWQKIFBBU1M6IHVuZGVmaW5lZAogUEFTUzogdW5kZWZpbmVkCiBQ
QVNTOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNworUEFTUzogb3BlbkRhdGFi
YXNlU3luYygpIHN1Y2NlZWRlZC4KK1BBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQu
CitQQVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJh
Y2sgc3VjY2VlZGVkLgogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9y
ZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5j
LWlucHV0cy5qcwkocmV2aXNpb24gNjIxNTEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCB0cnkgewogCiB0cnkgewogICAgIGRiID0gb3BlbkRhdGFi
YXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsIG5vdEFTdHJpbmcsIDEwMjQpOwotICAgIHBv
c3RNZXNzYWdlKCJGQUlMOiB0aGUgZm91cnRoIGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMo
KSBtdXN0IGJlIGFuIGludGVnZXIuIik7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSB0aGly
ZCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKIH0g
Y2F0Y2ggKGVycikgewogICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwog
fQpAQCAtNDYsMTkgKzQ2LDI5IEBAIHRyeSB7CiAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBl
cnIubWVzc2FnZSk7CiB9CiAKLS8vIEZJWE1FOiBVbmNvbW1lbnQgdGhlc2UgdGVzdHMgd2hlbiB0
aGUgc3luYyBEQiBBUEkgaXMgaW1wbGVtZW50ZWQuCi0vL3RyeSB7Ci0vLyAgICBkYiA9IG9wZW5E
YXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQp
OwotLy8gICAgcG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQu
Iik7Ci0vL30gY2F0Y2ggKGVycikgewotLy8gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIu
bWVzc2FnZSk7Ci0vL30KLS8vCi0vL3RyeSB7Ci0vLyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMo
IkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQsIGZ1bmN0aW9uKGRi
KSB7IH0pOwotLy8gICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3lu
YygpIHdpdGggYSBjcmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuIik7Ci0vL30gY2F0Y2ggKGVy
cikgewotLy8gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Ci0vL30KK3Ry
eSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRC
RGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNl
U3luYygpIHN1Y2NlZWRlZC4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJG
QUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCisvLyBSdW4gdGhpcyB0ZXN0IGNhc2Ugb25lIG1v
cmUgdGltZSwgdG8gdGVzdCB0aGUgY29kZSB3aXRoIGFuIGV4aXN0aW5nIGRhdGFiYXNlLgordHJ5
IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJE
ZXNjcmlwdGlvbiIsIDEwMjQpOworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBvcGVuRGF0YWJhc2VT
eW5jKCkgc3VjY2VlZGVkLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZB
SUw6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgLy8gTmVlZCB0byBjcmVhdGUg
YSBuZXcgZGF0YWJhc2UsIG90aGVyd2lzZSB0aGUgY3JlYXRpb24gY2FsbGJhY2sgd29uJ3QgYmUg
aW52b2tlZC4KKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZUNyZWF0aW9uQ2FsbGJh
Y2siICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9u
IiwgMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZGIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBjYWxsaW5nIG9wZW5E
YXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sgc3VjY2VlZGVkLiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNz
YWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQogCiBwb3N0TWVzc2FnZSgiZG9uZSIpOwo=
</data>
<flag name="review"
          id="47327"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="47328"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60325</attachid>
            <date>2010-07-01 18:51:03 -0700</date>
            <delta_ts>2010-07-02 15:24:03 -0700</delta_ts>
            <desc>patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>118169</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjM0NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODYgQEAKKzIwMTAtMDctMDEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbigpIGFuZCBEYXRhYmFzZVN5
bmM6OmNoYW5nZVZlcnNpb24oKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNjA3CisKKyAgICAgICAgVGVzdHM6IGZhc3Qvd29ya2Vycy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1v
bmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMv
c3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5o
dG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNy
ZWF0aW9uLWNhbGxiYWNrLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0
eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRt
bAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rl
cy1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0
aG9yaXplci1zeW5jLmh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJD
b3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3RvcmFn
ZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6Om1heGltdW1TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Omlu
Y3JlbWVudGFsVmFjdXVtSWZOZWVkZWQpOgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRh
YmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6c3FsaXRlRGF0YWJh
c2UpOgorICAgICAgICAqIHN0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hhbmdlVmVyc2lvbldyYXBwZXI6OnBlcmZvcm1QcmVmbGlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hhbmdlVmVyc2lvbldyYXBwZXI6OnBlcmZvcm1Qb3N0ZmxpZ2h0KToK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpwZXJmb3JtR2V0VGFibGVOYW1lcyk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5o
OgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVlRhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFZUYWJsZSk6CisgICAgICAgICogc3RvcmFnZS9E
YXRhYmFzZVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhbmdlVmVyc2lvblByZWZsaWdo
dFN0ZXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0
U3RlcDo6cGVyZm9ybVN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6Q2hhbmdlVmVyc2lvblByZWZs
aWdodFN0ZXA6OkNoYW5nZVZlcnNpb25QcmVmbGlnaHRTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3RlcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3RlcDo6cGVyZm9ybVN0ZXApOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpDaGFuZ2VWZXJzaW9uUG9zdGZsaWdo
dFN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6dHJhbnNhY3Rpb24pOgorICAgICAgICAq
IHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRyYWNr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9y
RGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVtZW50U3luYyk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnRTeW5jOjpleGVjdXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFN0YXRlbWVudFN5bmM6OnJlc3VsdFNldCk6CisgICAgICAgICogc3RvcmFn
ZS9TUUxTdGF0ZW1lbnRTeW5jLmg6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25TeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zYWN0aW9uQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6flNRTFRyYW5zYWN0aW9uU3luYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTUUwpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpT
UUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb25TeW5jOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5j
Ojpyb2xsYmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jT3B0
aW9uYWxTdGVwOjp+U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwKToKKyAgICAgICAgKiBz
dG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50OjpkaWRDb21taXRUcmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQ6OmRpZEV4ZWN1dGVTdGF0
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50OjpkaWRF
eGNlZWRRdW90YSk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDbGllbnQu
aDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVu
dENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ2xpZW50Ojpk
aWRDb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgICogc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFu
c2FjdGlvblN5bmNDbGllbnRDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50OjpkaWRDb21taXRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50OjpkaWRFeGNlZWRR
dW90YSk6CisKIDIwMTAtMDctMDEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21h
aWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2MjMyMS4KSW5kZXg6
IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gNjIzNDQpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xNDE3LDEwICsxNDE3LDEyIEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBz
dG9yYWdlL1NRTFJlc3VsdFNldC5jcHAKICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3Qu
Y3BwCiAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCisgICAgc3RvcmFnZS9TUUxTdGF0ZW1l
bnRTeW5jLmNwcAogICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCiAgICAgc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbkNsaWVudC5jcHAKICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuY3BwCiAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwCisgICAgc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvblN5bmNDbGllbnQuY3BwCiAgICAgc3RvcmFnZS9TdG9yYWdlLmNwcAog
ICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAogICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFT
eW5jLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2MjM0NCkKKysrIFdlYkNvcmUvR05VbWFrZWZp
bGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI0OTgsNiArMjQ5OCw4IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2suaCBcCisJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3Bw
IFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
aCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBcCkBAIC0yNTA4
LDcgKzI1MTAsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uU3luYy5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaCBcCi0J
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgKKwlXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCBcCisJV2ViQ29yZS9zdG9yYWdlL1NR
TFRyYW5zYWN0aW9uU3luY0NsaWVudC5jcHAgXAorCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvblN5bmNDbGllbnQuaAogCiBlbHNlCiB3ZWJjb3JlX2NwcGZsYWdzICs9IC1ERU5BQkxFX0RB
VEFCQVNFPTAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2MjM0NCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBp
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDEwLDYgKzM0MTAsNyBAQAogICAgICAgICAgICAgJ3N0b3Jh
Z2UvY2hyb21pdW0vUXVvdGFUcmFja2VyLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9jaHJv
bWl1bS9RdW90YVRyYWNrZXIuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9jaHJvbWl1bS9TUUxU
cmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcCcsCisgICAgICAgICAgICAnc3RvcmFnZS9jaHJv
bWl1bS9TUUxUcmFuc2FjdGlvblN5bmNDbGllbnRDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAg
J3N0b3JhZ2UvRGF0YWJhc2UuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL0RhdGFiYXNlLmgn
LAogICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcCcsCkBAIC0zNDc5
LDYgKzM0ODAsOCBAQAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMU3RhdGVtZW50LmgnLAogICAg
ICAgICAgICAgJ3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaCcsCiAgICAgICAgICAgICAn
c3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgnLAorICAgICAgICAgICAgJ3N0b3Jh
Z2UvU1FMU3RhdGVtZW50U3luYy5jcHAnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMU3RhdGVt
ZW50U3luYy5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oJywKICAgICAgICAgICAgICdzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCcsCkBAIC0zNDkwLDYgKzM0OTMsOCBAQAogICAg
ICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCcsCiAgICAgICAgICAgICAn
c3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjay5oJywKKyAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5z
YWN0aW9uU3luY0NsaWVudC5jcHAnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25TeW5jQ2xpZW50LmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZS5jcHAnLAogICAg
ICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZS5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3Jh
Z2VBcmVhLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2MjM0NCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTIzNzIsMTAgKzIzNzIsMTIgQEAgY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX0RBVEFCQVNFPTEpIHsKICAgICAgICAgc3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwIFwK
ICAgICAgICAgc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBcCiAgICAgICAgIHN0b3Jh
Z2UvU1FMU3RhdGVtZW50LmNwcCBcCisgICAgICAgIHN0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5j
cHAgXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcCBcCiAgICAgICAgIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
LmNwcCBcCisgICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50LmNwcCBcCiAg
ICAgICAgIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAg
XAogICAgICAgICBiaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJp
bmRpbmdzL2pzL0pTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcCBcCkBAIC0yNDQ1LDExICsyNDQ3LDEz
IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ET01fU1RPUkFHRT0xKSAKICAgICAgICAgc3Rv
cmFnZS9TUUxSZXN1bHRTZXQuaCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlz
dC5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaCBcCisgICAgICAgIHN0b3JhZ2Uv
U1FMU3RhdGVtZW50U3luYy5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwK
ICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oIFwKICAgICAgICAgc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5z
YWN0aW9uU3luYy5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFj
ay5oIFwKKyAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDbGllbnQuaCBcCiAgICAg
ICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWEuaCBcCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFJ
bXBsLmggXAogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5oIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNjIzNDQpCisrKyBXZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00OTczNyw2
ICs0OTczNywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxzdG9yYWdlXFNRTFN0YXRlbWVudFN5bmMuY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxTdGF0ZW1l
bnRTeW5jLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CkBAIC00OTc4MSw2ICs0OTc4OSwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5j
cHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5oIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTdG9yYWdlLmNwcCIN
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gNjIzNDQpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDI3MSw2ICs0MjcxLDEwIEBA
CiAJCUI1MjNDRjBCMTE4MjY3NTQwMEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjNDRjA0MTE4MjY3NTQwMEVC
QjI5QyAvKiBEYXRhYmFzZVN5bmMuaCAqLzsgfTsKIAkJQjUyNUE5NjUxMUNBMjM0MDAwM0EyM0E4
IC8qIEpTU1FMRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNTI1QTk2MzExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24uaCAq
LzsgfTsKIAkJQjUyNUE5NjYxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjVBOTY0MTFD
QTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5jcHAgKi87IH07CisJCUI1NTBCNTI1MTFE
QzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NTBCNTIxMTFEQzY4QTgwMDkyMzg4NSAvKiBT
UUxTdGF0ZW1lbnRTeW5jLmNwcCAqLzsgfTsKKwkJQjU1MEI1MjYxMURDNjhBODAwOTIzODg1IC8q
IFNRTFN0YXRlbWVudFN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEI1NTBCNTIyMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmgg
Ki87IH07CisJCUI1NTBCNTI3MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxUcmFuc2FjdGlvblN5bmND
bGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjU1MEI1MjMxMURDNjhBODAwOTIzODg1IC8qIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5jcHAg
Ki87IH07CisJCUI1NTBCNTI4MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxUcmFuc2FjdGlvblN5bmND
bGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1
NTBCNTI0MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQuaCAqLzsg
fTsKIAkJQjU1RDVBQTQxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2Fs
bGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1
NUQ1QUEyMTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgg
Ki87IH07CiAJCUI1NUQ1QUE1MTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3lu
Y0NhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEI1NUQ1QUEzMTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrLmNwcCAqLzsgfTsKIAkJQjU1RDVBQTgxMTkxMzI1MDAwQkNDMzE1IC8qIEpTRGF0YWJhc2VT
eW5jQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEI1NUQ1QUE2MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAg
Ki87IH07CkBAIC05ODI0LDYgKzk4MjgsMTAgQEAKIAkJQjUyM0NGMDQxMTgyNjc1NDAwRUJCMjlD
IC8qIERhdGFiYXNlU3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRh
YmFzZVN5bmMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjUyNUE5NjMxMUNBMjM0
MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTU1FMRXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1
MjVBOTY0MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTEV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUI1NTBCNTIxMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1l
bnRTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFN0YXRl
bWVudFN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNTUwQjUyMjExREM2
OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTUUxTdGF0ZW1lbnRTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUI1NTBCNTIzMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMVHJhbnNhY3Rpb25T
eW5jQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjU1MEI1MjQxMURD
NjhBODAwOTIzODg1IC8qIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU1RDVBQTIxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCNTVENUFBMzExOTEzMUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxs
YmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU1
RDVBQTYxMTkxMzI1MDAwQkNDMzE1IC8qIEpTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMjYzLDYgKzExMjcxLDggQEAKIAkJCQlC
NTlERDY4RTExOTAyOThFMDA3RTk2ODQgLyogU1FMU3RhdGVtZW50Q2FsbGJhY2suaWRsICovLAog
CQkJCTFBN0NDQjE2MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
LmggKi8sCiAJCQkJQjU5REQ2OEYxMTkwMjk4RTAwN0U5Njg0IC8qIFNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2suaWRsICovLAorCQkJCUI1NTBCNTIxMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0
ZW1lbnRTeW5jLmNwcCAqLywKKwkJCQlCNTUwQjUyMjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3Rh
dGVtZW50U3luYy5oICovLAogCQkJCTFBQkZFNzUyMENEOTY4RDAwMEZFNDgzNCAvKiBTUUxUcmFu
c2FjdGlvbi5jcHAgKi8sCiAJCQkJMUE3Q0NCMjIwQ0Q5NDZGRDAwQjdCNjRFIC8qIFNRTFRyYW5z
YWN0aW9uLmggKi8sCiAJCQkJMUE3Q0NCMjMwQ0Q5NDZGRDAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0
aW9uLmlkbCAqLywKQEAgLTExMjc5LDYgKzExMjg5LDggQEAKIAkJCQlCNTVENUFCQzExOTEzMjcy
MDBCQ0MzMTUgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmlkbCAqLywKIAkJCQlCNTIzQ0VGRjExODI2
NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCAqLywKIAkJCQlCNTVE
NUFCRDExOTEzMjcyMDBCQ0MzMTUgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsICov
LAorCQkJCUI1NTBCNTIzMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxUcmFuc2FjdGlvblN5bmNDbGll
bnQuY3BwICovLAorCQkJCUI1NTBCNTI0MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxUcmFuc2FjdGlv
blN5bmNDbGllbnQuaCAqLywKIAkJCQk1MUUzRjlDNTBEQTA1OURDMDAyNTA5MTEgLyogU3RvcmFn
ZS5jcHAgKi8sCiAJCQkJNTFFM0Y5QzQwREEwNTlEQzAwMjUwOTExIC8qIFN0b3JhZ2UuaCAqLywK
IAkJCQk1MUUzRjlEMTBEQTA1RDcxMDAyNTA5MTEgLyogU3RvcmFnZS5pZGwgKi8sCkBAIC0xOTIy
Miw2ICsxOTIzNCw3IEBACiAJCQkJNTE1QjAzOTkwQ0QxNjQyQTAwQjdFQTlDIC8qIFNRTFN0YXRl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3Q0NCMTkwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNR
TFN0YXRlbWVudENhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTdDQ0IxQTBDRDk0NjlB
MDBCN0I2NEUgLyogU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQjU1MEI1MjYxMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBN0NDQjI0MENEOTQ2RkQwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3Q0NCMUIwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUI1MUJGNkYxMTAyQzlFNTkwMDAy
QzE1QSAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xOTIyOSw2
ICsxOTI0Miw3IEBACiAJCQkJMUE3Q0NCMUMwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjUyM0NGMDgxMTgyNjc1NDAw
RUJCMjlDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjUyM0NG
MDYxMTgyNjc1NDAwRUJCMjlDIC8qIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlCNTUwQjUyODExREM2OEE4MDA5MjM4ODUgLyogU1FMVHJhbnNhY3Rpb25T
eW5jQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTJFNkU1QTBDQzU1MjEzMDA0QTIwNjIg
LyogU1FMVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTYzMDgyNDVFNTkwMDFFOUFC
QyAvKiBTU0xLZXlHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFQTM5NDlEMTFENDVD
REEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAt
MjE2MTYsMTAgKzIxNjMwLDEyIEBACiAJCQkJNTE5NjExNzMwQ0FDNTY1NzAwMTBBODBDIC8qIFNR
TFJlc3VsdFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUZFMTE3RDBDQkZGQjM2MDAzMDE3
RkEgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTVCMDM5
QTBDRDE2NDJBMDBCN0VBOUMgLyogU1FMU3RhdGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUI1NTBCNTI1MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBQkZFNzUzMENEOTY4RDAwMEZFNDgzNCAvKiBTUUxUcmFuc2FjdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTFCRjZGMDEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJh
bnNhY3Rpb25DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjVDMTEyM0IxMDJCNkM0NjAw
MDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjUyM0NGMDkxMTgyNjc1NDAwRUJCMjlDIC8qIFNRTFRyYW5zYWN0aW9uU3luYy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlCNTUwQjUyNzExREM2OEE4MDA5MjM4ODUgLyogU1FMVHJhbnNhY3Rp
b25TeW5jQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkU2RTU5MENDNTUyMTMwMDRB
MjA2MiAvKiBTUUxWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFFNjA4MjQ1RTU5
MDAxRTlBQkMgLyogU1NMS2V5R2VuZXJhdG9yTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0VB
Mzk0OUMxMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHJldmlzaW9u
IDYyMzQ0KQorKysgV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NjIsNiArNDYyLDE5IEBAIHZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVzZXRB
dXRob3JpemVyKCkKICAgICAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7CiB9CiAK
K3Vuc2lnbmVkIGxvbmcgbG9uZyBBYnN0cmFjdERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmdldE1heFNpemVGb3JE
YXRhYmFzZSh0aGlzKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjppbmNyZW1lbnRhbFZh
Y3V1bUlmTmVlZGVkKCkKK3sKKyAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURh
dGFiYXNlLmZyZWVTcGFjZVNpemUoKTsKKyAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRl
RGF0YWJhc2UudG90YWxTaXplKCk7CisgICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZyZWVTcGFj
ZVNpemUpCisgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1dW1Db21t
YW5kKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShE
QVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAkocmV2aXNpb24gNjIz
NDQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw2ICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzcGxheU5h
bWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7CisgICAgU1FMaXRlRGF0
YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9zcWxpdGVEYXRhYmFzZTsgfQorCisg
ICAgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplKCkgY29uc3Q7CisgICAgdm9pZCBpbmNy
ZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7CiAKICAgICAvLyBGSVhNRTogbW92ZSBhbGwgdmVyc2lv
bi1yZWxhdGVkIG1ldGhvZHMgdG8gYSBEYXRhYmFzZVZlcnNpb25UcmFja2VyIGNsYXNzCiAgICAg
Ym9vbCB2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3Q7CkBAIC0xMDMsOCArMTA3LDYgQEAg
cHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOwogICAgIFN0cmlu
ZyBtX2ZpbGVuYW1lOwogCi0gICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFzZTsKLQog
I2lmbmRlZiBOREVCVUcKICAgICBTdHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSArICI6OiIgKyBt
X25hbWU7IH0KICNlbmRpZgpAQCAtMTE2LDYgKzExOCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X29wZW5lZDsKICAgICBib29sIG1fbmV3OwogCisgICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVE
YXRhYmFzZTsKKwogICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IG1fZGF0YWJhc2VBdXRo
b3JpemVyOwogfTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIu
Y3BwCShyZXZpc2lvbiA2MjM0NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3Jh
cHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQCBib29sIENoYW5nZVZl
cnNpb25XcmFwcGVyOjpwZXJmb3JtUHJlZmxpCiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLT5nZXRWZXJzaW9uRnJvbURhdGFiYXNlKGFjdHVhbFZlcnNpb24pKSB7CiAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHJldHJpZXZlIGFjdHVhbCBjdXJyZW50IHZlcnNpb24gZnJv
bSBkYXRhYmFzZSIpOwotICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZSgwLCAi
dW5hYmxlIHRvIHZlcmlmeSBjdXJyZW50IHZlcnNpb24gb2YgZGF0YWJhc2UiKTsKKyAgICAgICAg
bV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidW5h
YmxlIHRvIHZlcmlmeSBjdXJyZW50IHZlcnNpb24gb2YgZGF0YWJhc2UiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmIChhY3R1YWxWZXJzaW9uICE9IG1fb2xkVmVyc2lv
bikgewogICAgICAgICBMT0dfRVJST1IoIk9sZCB2ZXJzaW9uIGRvZXNuJ3QgbWF0Y2ggYWN0dWFs
IHZlcnNpb24iKTsKLSAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoMiwgImN1
cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBhcmd1bWVudCBk
byBub3QgbWF0Y2giKTsKKyAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FM
RXJyb3I6OlZFUlNJT05fRVJSLCAiY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSBhbmQg
YG9sZFZlcnNpb25gIGFyZ3VtZW50IGRvIG5vdCBtYXRjaCIpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgQ2hhbmdlVmVyc2lvbldyYXBwZXI6
OnBlcmZvcm1Qb3N0ZmwKIAogICAgIGlmICghdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNldFZl
cnNpb25JbkRhdGFiYXNlKG1fbmV3VmVyc2lvbikpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gc2V0IG5ldyB2ZXJzaW9uIGluIGRhdGFiYXNlIik7Ci0gICAgICAgIG1fc3FsRXJyb3Ig
PSBTUUxFcnJvcjo6Y3JlYXRlKDAsICJ1bmFibGUgdG8gc2V0IG5ldyB2ZXJzaW9uIGluIGRhdGFi
YXNlIik7CisgICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpV
TktOT1dOX0VSUiwgInVuYWJsZSB0byBzZXQgbmV3IHZlcnNpb24gaW4gZGF0YWJhc2UiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZp
c2lvbiA2MjM0NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwMiw3ICs0MDIsNyBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdl
dFRhYmxlCiB7CiAgICAgZGlzYWJsZUF1dGhvcml6ZXIoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQobV9zcWxpdGVEYXRhYmFzZSwgIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21h
c3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7Iik7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChzcWxpdGVEYXRhYmFzZSgpLCAiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHR5cGU9J3RhYmxlJzsiKTsKICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZXRyaWV2ZSBsaXN0IG9mIHRh
YmxlcyBmb3IgZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgp
KTsKICAgICAgICAgZW5hYmxlQXV0aG9yaXplcigpOwpAQCAtNDYzLDE0ICs0NjMsNiBAQCBTZWN1
cml0eU9yaWdpbiogRGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luCiAgICAgcmV0dXJuIDA7CiB9CiAK
LXZvaWQgRGF0YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKQotewotICAgIGludDY0
X3QgZnJlZVNwYWNlU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOwotICAg
IGludDY0X3QgdG90YWxTaXplID0gbV9zcWxpdGVEYXRhYmFzZS50b3RhbFNpemUoKTsKLSAgICBp
ZiAodG90YWxTaXplIDw9IDEwICogZnJlZVNwYWNlU2l6ZSkKLSAgICAgICAgbV9zcWxpdGVEYXRh
YmFzZS5ydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJ
KHJldmlzaW9uIDYyMzQ0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDcgKzY2LDYgQEAgcHVibGljOgogICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxl
TmFtZXMoKTsKIAogICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkg
Y29uc3Q7Ci0gICAgU1FMaXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9z
cWxpdGVEYXRhYmFzZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9z
ZSgpOwogICAgIGJvb2wgZGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQpAQCAt
OTUsOCArOTQsNiBAQCBwdWJsaWM6CiAgICAgU1FMVHJhbnNhY3Rpb25DbGllbnQqIHRyYW5zYWN0
aW9uQ2xpZW50KCkgY29uc3Q7CiAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNh
Y3Rpb25Db29yZGluYXRvcigpIGNvbnN0OwogCi0gICAgdm9pZCBpbmNyZW1lbnRhbFZhY3V1bUlm
TmVlZGVkKCk7Ci0KIHByaXZhdGU6CiAgICAgRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sCiAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCShy
ZXZpc2lvbiA2MjM0NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsNyArMjkwLDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXpl
cjo6Y3JlYXRlVlRhYmxlKGNvbgogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICAv
LyBBbGxvdyBvbmx5IHRoZSBGVFMzIGV4dGVuc2lvbgotICAgIGlmIChtb2R1bGVOYW1lICE9ICJm
dHMzIikKKyAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKG1vZHVsZU5hbWUsICJmdHMzIikpCiAg
ICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRh
YmFzZSA9IHRydWU7CkBAIC0zMDMsNyArMzAzLDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6
ZHJvcFZUYWJsZShjb25zdAogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICAvLyBB
bGxvdyBvbmx5IHRoZSBGVFMzIGV4dGVuc2lvbgotICAgIGlmIChtb2R1bGVOYW1lICE9ICJmdHMz
IikKKyAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKG1vZHVsZU5hbWUsICJmdHMzIikpCiAgICAg
ICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFzZWRP
blRhYmxlTmFtZSh0YWJsZU5hbWUpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3lu
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHJl
dmlzaW9uIDYyMzQ0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIK
ICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIlNRTEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luYy5oIgogI2lu
Y2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC04NywxNCAr
ODksNzEgQEAgRGF0YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5jKCkKICAgICB9CiB9CiAKLXZvaWQg
RGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYs
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJikK
K2NsYXNzIENoYW5nZVZlcnNpb25QcmVmbGlnaHRTdGVwIDogcHVibGljIFNRTFRyYW5zYWN0aW9u
U3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0U3RlcD4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgZXhwZWN0ZWRWZXJzaW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDaGFuZ2VW
ZXJzaW9uUHJlZmxpZ2h0U3RlcChleHBlY3RlZFZlcnNpb24pOworICAgIH0KKworICAgIHZpcnR1
YWwgYm9vbCBwZXJmb3JtU3RlcChTUUxUcmFuc2FjdGlvblN5bmMqIHRyYW5zYWN0aW9uLCBFeGNl
cHRpb25Db2RlJiBlYykKKyAgICB7CisgICAgICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOworICAg
ICAgICBpZiAoIXRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5nZXRWZXJzaW9uRnJvbURhdGFiYXNl
KGFjdHVhbFZlcnNpb24pKSB7CisgICAgICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6VU5LTk9X
Tl9FUlI7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoYWN0dWFsVmVyc2lvbiAhPSBtX2V4cGVjdGVkVmVyc2lvbikgeworICAgICAgICAgICAgZWMg
PSBTUUxFeGNlcHRpb246OlZFUlNJT05fRVJSOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAg
IENoYW5nZVZlcnNpb25QcmVmbGlnaHRTdGVwKGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9u
KSA6IG1fZXhwZWN0ZWRWZXJzaW9uKGV4cGVjdGVkVmVyc2lvbikgeyB9CisgICAgU3RyaW5nIG1f
ZXhwZWN0ZWRWZXJzaW9uOworfTsKKworY2xhc3MgQ2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVw
IDogcHVibGljIFNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxT
dGVwIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaGFuZ2VWZXJzaW9uUG9zdGZs
aWdodFN0ZXA+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24pCisgICAgeworICAgICAg
ICByZXR1cm4gbmV3IENoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3RlcChuZXdWZXJzaW9uKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVN0ZXAoU1FMVHJhbnNhY3Rpb25TeW5jKiB0
cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgICBpZiAoIXRyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLT5zZXRWZXJzaW9uSW5EYXRhYmFzZShtX25ld1ZlcnNpb24pKSB7
CisgICAgICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB0cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS0+c2V0RXhwZWN0ZWRWZXJzaW9uKG1fbmV3VmVyc2lvbik7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXAo
Y29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uKSA6IG1fbmV3VmVyc2lvbihuZXdWZXJzaW9uKSB7IH0K
KyAgICBTdHJpbmcgbV9uZXdWZXJzaW9uOworfTsKKwordm9pZCBEYXRhYmFzZVN5bmM6OmNoYW5n
ZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNp
b24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNoYW5nZVZlcnNpb25D
YWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlv
blN5bmM+IHRyYW5zYWN0aW9uID0gU1FMVHJhbnNhY3Rpb25TeW5jOjpjcmVhdGUodGhpcywgY2hh
bmdlVmVyc2lvbkNhbGxiYWNrLCBmYWxzZSwgQ2hhbmdlVmVyc2lvblByZWZsaWdodFN0ZXA6OmNy
ZWF0ZShvbGRWZXJzaW9uKSwgQ2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpjcmVhdGUobmV3
VmVyc2lvbikpOworICAgIGlmICghdHJhbnNhY3Rpb24tPmJlZ2luKGVjKSB8fCAhdHJhbnNhY3Rp
b24tPmV4ZWN1dGUoZWMpIHx8ICF0cmFuc2FjdGlvbi0+Y29tbWl0KGVjKSkKKyAgICAgICAgdHJh
bnNhY3Rpb24tPnJvbGxiYWNrKCk7CiB9CiAKLXZvaWQgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlv
bihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCwgRXhjZXB0aW9u
Q29kZSYpCit2b2lkIERhdGFiYXNlU3luYzo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2ssIGJvb2wgcmVhZE9ubHksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4
dFRocmVhZCgpKTsKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jPiB0cmFuc2FjdGlvbiA9
IFNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRlKHRoaXMsIGNhbGxiYWNrLCByZWFkT25seSk7Cisg
ICAgaWYgKCF0cmFuc2FjdGlvbi0+YmVnaW4oZWMpIHx8ICF0cmFuc2FjdGlvbi0+ZXhlY3V0ZShl
YykgfHwgIXRyYW5zYWN0aW9uLT5jb21taXQoZWMpKQorICAgICAgICB0cmFuc2FjdGlvbi0+cm9s
bGJhY2soKTsKIH0KIAogdm9pZCBEYXRhYmFzZVN5bmM6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgp
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5oCShyZXZpc2lvbiA2MjM0NCkKKysrIFdlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CiBjbGFzcyBTUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjazsKK2NsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudDsK
IGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIApJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHJldmlzaW9uIDYyMzQ0KQorKysg
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
MSw3ICsyMjEsNiBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFzCiAK
IHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRhYmFz
ZShjb25zdCBBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKLSAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFiYXNl
VGhyZWFkKCktPmdldFRocmVhZElEKCkpOwogICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgZm9yIGEg
ZGF0YWJhc2UgaXMgdGhlIGZ1bGwgcXVvdGEgZm9yIGl0cyBvcmlnaW4sIG1pbnVzIHRoZSBjdXJy
ZW50IHVzYWdlIHdpdGhpbiB0aGUgb3JpZ2luLAogICAgIC8vIHBsdXMgdGhlIGN1cnJlbnQgdXNh
Z2Ugb2YgdGhlIGdpdmVuIGRhdGFiYXNlCiAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1f
ZGF0YWJhc2VHdWFyZCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
UUxTdGF0ZW1lbnRTeW5jLmgiCisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisKKyNpbmNsdWRlICJE
YXRhYmFzZVN5bmMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiU1FM
RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCisjaW5jbHVkZSAiU1FMVmFs
dWUuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRl
bWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NRTFN0YXRlbWVudFN5bmM6OlNRTFN0YXRl
bWVudFN5bmMoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4m
IGFyZ3VtZW50cywgYm9vbCByZWFkT25seSkKKyAgICA6IG1fc3RhdGVtZW50KHN0YXRlbWVudCkK
KyAgICAsIG1fYXJndW1lbnRzKGFyZ3VtZW50cykKKyAgICAsIG1fcmVhZE9ubHkocmVhZE9ubHkp
Cit7CisgICAgQVNTRVJUKCFtX3N0YXRlbWVudC5pc0VtcHR5KCkpOworfQorCitib29sIFNRTFN0
YXRlbWVudFN5bmM6OmV4ZWN1dGUoRGF0YWJhc2VTeW5jKiBkYiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgQVNTRVJUKCFtX3Jlc3VsdFNldCk7CisKKyAgICBpZiAobV9yZWFkT25seSkKKyAg
ICAgICAgZGItPnNldEF1dGhvcml6ZXJSZWFkT25seSgpOworCisgICAgU1FMaXRlRGF0YWJhc2Uq
IGRhdGFiYXNlID0gJmRiLT5zcWxpdGVEYXRhYmFzZSgpOworCisgICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudCgqZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsKKyAgICBpbnQgcmVzdWx0ID0gc3Rh
dGVtZW50LnByZXBhcmUoKTsKKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKKyAg
ICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1f
YXJndW1lbnRzLnNpemUoKSkgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6U1lOVEFYX0VS
UjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0ID0g
c3RhdGVtZW50LmJpbmRWYWx1ZShpICsgMSwgbV9hcmd1bWVudHNbaV0pOworICAgICAgICBpZiAo
cmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKKyAgICAgICAgICAgIGVjID0gU1FMRXhjZXB0aW9u
OjpRVU9UQV9FUlI7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgICAgICBlYyA9IFNRTEV4
Y2VwdGlvbjo6REFUQUJBU0VfRVJSOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgUmVmUHRyPFNRTFJlc3VsdFNldD4gcmVzdWx0U2V0ID0gU1FMUmVz
dWx0U2V0OjpjcmVhdGUoKTsKKworICAgIC8vIFN0ZXAgc28gd2UgY2FuIGZldGNoIHRoZSBjb2x1
bW4gbmFtZXMuCisgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0
ID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1lbnQu
Y29sdW1uQ291bnQoKTsKKyAgICAgICAgU1FMUmVzdWx0U2V0Um93TGlzdCogcm93cyA9IHJlc3Vs
dFNldC0+cm93cygpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7
IGkrKykKKyAgICAgICAgICAgIHJvd3MtPmFkZENvbHVtbihzdGF0ZW1lbnQuZ2V0Q29sdW1uTmFt
ZShpKSk7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b2x1bW5Db3VudDsgaSsrKQorICAgICAgICAgICAgICAgIHJvd3MtPmFkZFJlc3VsdChzdGF0ZW1l
bnQuZ2V0Q29sdW1uVmFsdWUoaSkpOworCisgICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQu
c3RlcCgpOworICAgICAgICB9IHdoaWxlIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KTsKKworICAg
ICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIGVjID0gU1FM
RXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHREb25lKSB7CisgICAgICAg
IC8vIERpZG4ndCBmaW5kIGFueXRoaW5nLCBvciB3YXMgYW4gaW5zZXJ0CisgICAgICAgIGlmIChk
Yi0+bGFzdEFjdGlvbldhc0luc2VydCgpKQorICAgICAgICAgICAgcmVzdWx0U2V0LT5zZXRJbnNl
cnRJZChkYXRhYmFzZS0+bGFzdEluc2VydFJvd0lEKCkpOworICAgIH0gZWxzZSBpZiAocmVzdWx0
ID09IFNRTFJlc3VsdEZ1bGwpIHsKKyAgICAgICAgLy8gUXVvdGEgZXJyb3IsIHRoZSBkZWxlZ2F0
ZSB3aWxsIGJlIGFza2VkIGZvciBtb3JlIHNwYWNlIGFuZCB0aGlzIHN0YXRlbWVudCBtaWdodCBi
ZSByZS1ydW4uCisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpRVU9UQV9FUlI7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6
REFUQUJBU0VfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmVzdWx0
U2V0LT5zZXRSb3dzQWZmZWN0ZWQoZGF0YWJhc2UtPmxhc3RDaGFuZ2VzKCkpOworICAgIG1fcmVz
dWx0U2V0ID0gcmVzdWx0U2V0OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8
U1FMUmVzdWx0U2V0PiBTUUxTdGF0ZW1lbnRTeW5jOjpyZXN1bHRTZXQoKQoreworICAgIHJldHVy
biBtX3Jlc3VsdFNldC5yZWxlYXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0
ZW1lbnRTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5
bmMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNRTFN0YXRlbWVudFN5bmNfaAor
I2RlZmluZSBTUUxTdGF0ZW1lbnRTeW5jX2gKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBEYXRhYmFzZVN5bmM7CitjbGFzcyBTUUxSZXN1bHRTZXQ7CisKK3R5
cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIFNRTFN0YXRlbWVudFN5bmMgeworcHVi
bGljOgorICAgIFNRTFN0YXRlbWVudFN5bmMoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0
IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgYm9vbCByZWFkT25seSk7CisKKyAgICBib29s
IGV4ZWN1dGUoRGF0YWJhc2VTeW5jKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8
U1FMUmVzdWx0U2V0PiByZXN1bHRTZXQoKTsKKworcHJpdmF0ZToKKworICAgIFN0cmluZyBtX3N0
YXRlbWVudDsKKyAgICBWZWN0b3I8U1FMVmFsdWU+IG1fYXJndW1lbnRzOworICAgIGJvb2wgbV9y
ZWFkT25seTsKKyAgICBSZWZQdHI8U1FMUmVzdWx0U2V0PiBtX3Jlc3VsdFNldDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKKworI2Vu
ZGlmIC8vIFNRTFN0YXRlbWVudFN5bmNfaApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uU3luYy5jcHAJKHJldmlzaW9uIDYyMzQ0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDM4ICszNCwxOTcgQEAKICNpbmNs
dWRlICJEYXRhYmFzZVN5bmMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxFeGNlcHRpb24uaCIKICNpbmNsdWRl
ICJTUUxSZXN1bHRTZXQuaCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnRTeW5jLmgiCiAjaW5jbHVk
ZSAiU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlv
blN5bmNDbGllbnQuaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVRy
YW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jPiBTUUxUcmFuc2Fj
dGlvblN5bmM6OmNyZWF0ZShEYXRhYmFzZVN5bmMqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjaywgYm9vbCByZWFkT25seSkKK3N0YXRpYyBTUUxUcmFu
c2FjdGlvblN5bmNDbGllbnQqIHRyYW5zYWN0aW9uQ2xpZW50KCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNRTFRyYW5zYWN0aW9uU3luYyhkYiwgY2FsbGJhY2ssIHJlYWRPbmx5KSk7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQsIHRyYW5zYWN0
aW9uQ2xpZW50LCAoKSk7CisgICAgcmV0dXJuICZ0cmFuc2FjdGlvbkNsaWVudDsKIH0KIAotU1FM
VHJhbnNhY3Rpb25TeW5jOjpTUUxUcmFuc2FjdGlvblN5bmMoRGF0YWJhc2VTeW5jKiBkYiwgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2ssIGJvb2wgcmVhZE9u
bHkpCitQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luYz4gU1FMVHJhbnNhY3Rpb25TeW5jOjpj
cmVhdGUoRGF0YWJhc2VTeW5jKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxs
YmFjaz4gY2FsbGJhY2ssIGJvb2wgcmVhZE9ubHksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
blN5bmNPcHRpb25hbFN0ZXA+IHByZWZsaWdodFN0ZXAsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jT3B0aW9uYWxTdGVwPiBwb3N0ZmxpZ2h0U3RlcCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNRTFRyYW5zYWN0aW9uU3luYyhkYiwgY2FsbGJhY2ssIHJlYWRPbmx5LCBwcmVmbGln
aHRTdGVwLCBwb3N0ZmxpZ2h0U3RlcCkpOworfQorCitTUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRy
YW5zYWN0aW9uU3luYyhEYXRhYmFzZVN5bmMqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
U3luY0NhbGxiYWNrPiBjYWxsYmFjaywgYm9vbCByZWFkT25seSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9u
YWxTdGVwPiBwcmVmbGlnaHRTdGVwLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY09wdGlv
bmFsU3RlcD4gcG9zdGZsaWdodFN0ZXApCiAgICAgOiBtX2RhdGFiYXNlKGRiKQogICAgICwgbV9j
YWxsYmFjayhjYWxsYmFjaykKICAgICAsIG1fcmVhZE9ubHkocmVhZE9ubHkpCisgICAgLCBtX3By
ZWZsaWdodFN0ZXAocHJlZmxpZ2h0U3RlcCkKKyAgICAsIG1fcG9zdGZsaWdodFN0ZXAocG9zdGZs
aWdodFN0ZXApCisgICAgLCBtX21vZGlmaWVkRGF0YWJhc2UoZmFsc2UpCiB7CiAgICAgQVNTRVJU
KG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkp
OwotICAgIEFTU0VSVChjYWxsYmFjayk7CiB9CiAKIFNRTFRyYW5zYWN0aW9uU3luYzo6flNRTFRy
YW5zYWN0aW9uU3luYygpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0
aW9uICYmIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgcm9sbGJh
Y2soKTsKK30KKworUGFzc1JlZlB0cjxTUUxSZXN1bHRTZXQ+IFNRTFRyYW5zYWN0aW9uU3luYzo6
ZXhlY3V0ZVNRTChjb25zdCBTdHJpbmcmIHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZh
bHVlPiYgYXJndW1lbnRzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9kYXRh
YmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
aWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSkgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6
VU5LTk9XTl9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghbV9kYXRh
YmFzZS0+dmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgpKSB7CisgICAgICAgIGVjID0gU1FMRXhjZXB0
aW9uOjpWRVJTSU9OX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHNx
bFN0YXRlbWVudC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgYm9vbCByZWFk
T25seU1vZGUgPSBtX3JlYWRPbmx5IHx8IG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+aXNEYXRhYmFzZVJlYWRPbmx5KCk7CisgICAgU1FMU3RhdGVtZW50U3luYyBzdGF0ZW1l
bnQoc3FsU3RhdGVtZW50LCBhcmd1bWVudHMsIHJlYWRPbmx5TW9kZSk7CisKKyAgICBtX2RhdGFi
YXNlLT5yZXNldEF1dGhvcml6ZXIoKTsKKyAgICBib29sIHJldHJ5U3RhdGVtZW50ID0gdHJ1ZTsK
KyAgICB3aGlsZSAocmV0cnlTdGF0ZW1lbnQpIHsKKyAgICAgICAgcmV0cnlTdGF0ZW1lbnQgPSBm
YWxzZTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQuZXhlY3V0ZShtX2RhdGFiYXNlLmdldCgpLCBl
YykpIHsKKyAgICAgICAgICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uLT53YXNSb2xsZWRCYWNr
QnlTcWxpdGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgaWYg
KGVjID09IFNRTEV4Y2VwdGlvbjo6UVVPVEFfRVJSKSB7CisgICAgICAgICAgICAgICAgaWYgKHRy
YW5zYWN0aW9uQ2xpZW50KCktPmRpZEV4Y2VlZFF1b3RhKHRoaXMpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGVjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0cnlTdGF0ZW1lbnQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2RhdGFiYXNlLT5s
YXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkpIHsKKyAgICAgICAgbV9tb2RpZmllZERhdGFiYXNl
ID0gdHJ1ZTsKKyAgICAgICAgdHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhlY3V0ZVN0YXRlbWVu
dCh0aGlzKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGVtZW50LnJlc3VsdFNldCgpOworfQor
Citib29sIFNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4oRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0
VGhyZWFkKCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKKyAgICAgICAgZWMg
PSBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9u
SW5Qcm9ncmVzcygpKTsKKworICAgIC8vIFNldCB0aGUgbWF4aW11bSB1c2FnZSBmb3IgdGhpcyB0
cmFuc2FjdGlvbiBpZiB0aGlzIHRyYW5zYWN0aW9ucyBpcyBub3QgcmVhZC1vbmx5LgorICAgIGlm
ICghbV9yZWFkT25seSkKKyAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5zZXRN
YXhpbXVtU2l6ZShtX2RhdGFiYXNlLT5tYXhpbXVtU2l6ZSgpKTsKKworICAgIGlmIChtX3ByZWZs
aWdodFN0ZXApIHsKKyAgICAgICAgYm9vbCBwcmVmbGlnaHRTdWNjZXNzID0gbV9wcmVmbGlnaHRT
dGVwLT5wZXJmb3JtU3RlcCh0aGlzLCBlYyk7CisgICAgICAgIG1fcHJlZmxpZ2h0U3RlcCA9IDA7
CisgICAgICAgIGlmICghcHJlZmxpZ2h0U3VjY2VzcykKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBBU1NFUlQoIW1fc3FsaXRlVHJhbnNhY3Rpb24pOworICAgIG1fc3Fs
aXRlVHJhbnNhY3Rpb24uc2V0KG5ldyBTUUxpdGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlLT5zcWxp
dGVEYXRhYmFzZSgpLCBtX3JlYWRPbmx5KSk7CisKKyAgICBtX2RhdGFiYXNlLT5yZXNldERlbGV0
ZXMoKTsKKyAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOworICAgIG1fc3FsaXRl
VHJhbnNhY3Rpb24tPmJlZ2luKCk7CisgICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigp
OworCisgICAgLy8gQ2hlY2sgaWYgYmVnaW4oKSBzdWNjZWVkZWQuCisgICAgaWYgKCFtX3NxbGl0
ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFiYXNl
LT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICAgICAgbV9z
cWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFU
QUJBU0VfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlKEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpIHx8ICFt
X2NhbGxiYWNrIHx8ICFtX2NhbGxiYWNrLT5oYW5kbGVFdmVudChtX2RhdGFiYXNlLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIHRoaXMpKSB7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpV
TktOT1dOX0VSUjsKKyAgICAgICAgbV9jYWxsYmFjayA9IDA7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBtX2NhbGxiYWNrID0gMDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
UGFzc1JlZlB0cjxTUUxSZXN1bHRTZXQ+IFNRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZVNRTChj
b25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiwgRXhjZXB0aW9uQ29kZSYpCiti
b29sIFNRTFRyYW5zYWN0aW9uU3luYzo6Y29tbWl0KEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRo
cmVhZCgpKTsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7
CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIEFTU0VSVChtX3NxbGl0ZVRyYW5zYWN0aW9uKTsKKworICAg
IG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7CisgICAgbV9zcWxpdGVUcmFuc2FjdGlv
bi0+Y29tbWl0KCk7CisgICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOworCisgICAg
Ly8gSWYgdGhlIGNvbW1pdCBmYWlsZWQsIHRoZSB0cmFuc2FjdGlvbiB3aWxsIHN0aWxsIGJlIG1h
cmtlZCBhcyAiaW4gcHJvZ3Jlc3MiCisgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJv
Z3Jlc3MoKSkgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVh
cigpOworCisgICAgLy8gVmFjdXVtIHRoZSBkYXRhYmFzZSBpZiBhbnl0aGluZyB3YXMgZGVsZXRl
ZC4KKyAgICBpZiAobV9kYXRhYmFzZS0+aGFkRGVsZXRlcygpKQorICAgICAgICBtX2RhdGFiYXNl
LT5pbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7CisKKyAgICAvLyBUaGUgY29tbWl0IHdhcyBz
dWNjZXNzZnVsLiBJZiB0aGUgdHJhbnNhY3Rpb24gbW9kaWZpZWQgdGhpcyBkYXRhYmFzZSwgbm90
aWZ5IHRoZSBkZWxlZ2F0ZXMuCisgICAgaWYgKG1fbW9kaWZpZWREYXRhYmFzZSkKKyAgICAgICAg
dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkQ29tbWl0VHJhbnNhY3Rpb24odGhpcyk7CisKKyAgICBi
b29sIHBvc3RmbGlnaHRTdWNjZXNzID0gdHJ1ZTsKKyAgICBpZiAobV9wb3N0ZmxpZ2h0U3RlcCkK
KyAgICAgICAgcG9zdGZsaWdodFN1Y2Nlc3MgPSBtX3Bvc3RmbGlnaHRTdGVwLT5wZXJmb3JtU3Rl
cCh0aGlzLCBlYyk7CisKKyAgICBtX3Bvc3RmbGlnaHRTdGVwID0gMDsKKyAgICByZXR1cm4gcG9z
dGZsaWdodFN1Y2Nlc3M7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25TeW5jOjpyb2xsYmFjaygp
Cit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXND
b250ZXh0VGhyZWFkKCkpOworICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7Cisg
ICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlv
bi0+cm9sbGJhY2soKTsKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOworICAg
IH0KKyAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICBBU1NFUlQoIW1f
ZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25TeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
U3luYy5oCShyZXZpc2lvbiA2MjM0NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
blN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTIgKzQyLDIxIEBAIGNsYXNzIERhdGFiYXNl
U3luYzsKIGNsYXNzIFNRTFJlc3VsdFNldDsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrOwogY2xhc3MgU1FMVmFsdWU7CitjbGFzcyBTUUxpdGVUcmFuc2FjdGlvbjsKIGNsYXNzIFN0
cmluZzsKIAogLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGNyZWF0ZWQgYW5k
IHVzZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0aHJlYWQuCiBjbGFzcyBTUUxUcmFu
c2FjdGlvblN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvblN5bmM+IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IGNyZWF0ZShE
YXRhYmFzZVN5bmMqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9v
bCByZWFkT25seSA9IGZhbHNlKTsKKworICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uU3luY09wdGlv
bmFsU3RlcCA6IHB1YmxpYyBSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3Rl
cD4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+U1FMVHJhbnNhY3Rpb25TeW5jT3B0
aW9uYWxTdGVwKCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtU3RlcChTUUxUcmFu
c2FjdGlvblN5bmMqLCBFeGNlcHRpb25Db2RlJikgPSAwOworICAgIH07CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IGNyZWF0ZShEYXRhYmFzZVN5bmMqLCBQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSA9IGZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwPiBwcmVmbGlnaHRTdGVwID0gMCwg
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXA+IHBvc3RmbGlnaHRTdGVw
ID0gMCk7CiAKICAgICB+U1FMVHJhbnNhY3Rpb25TeW5jKCk7CiAKQEAgLTU2LDEyICs2NSwyMyBA
QCBwdWJsaWM6CiAgICAgRGF0YWJhc2VTeW5jKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJh
c2UuZ2V0KCk7IH0KICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX3JlYWRP
bmx5OyB9CiAKKyAgICBib29sIGJlZ2luKEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICBib29sIGV4
ZWN1dGUoRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIGJvb2wgY29tbWl0KEV4Y2VwdGlvbkNvZGUm
IGVjKTsKKyAgICB2b2lkIHJvbGxiYWNrKCk7CisKIHByaXZhdGU6Ci0gICAgU1FMVHJhbnNhY3Rp
b25TeW5jKERhdGFiYXNlU3luYyosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2s+LCBib29sIHJlYWRPbmx5KTsKKyAgICBTUUxUcmFuc2FjdGlvblN5bmMoRGF0YWJhc2VTeW5j
KiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wgcmVhZE9ubHks
CisgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jT3B0
aW9uYWxTdGVwPiBwcmVmbGlnaHRTdGVwLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY09w
dGlvbmFsU3RlcD4gcG9zdGZsaWdodFN0ZXApOwogCiAgICAgUmVmUHRyPERhdGFiYXNlU3luYz4g
bV9kYXRhYmFzZTsKICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IG1fY2Fs
bGJhY2s7CiAgICAgYm9vbCBtX3JlYWRPbmx5OworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5
bmNPcHRpb25hbFN0ZXA+IG1fcHJlZmxpZ2h0U3RlcDsKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jT3B0aW9uYWxTdGVwPiBtX3Bvc3RmbGlnaHRTdGVwOworCisgICAgYm9vbCBtX21vZGlm
aWVkRGF0YWJhc2U7CisgICAgT3duUHRyPFNRTGl0ZVRyYW5zYWN0aW9uPiBtX3NxbGl0ZVRyYW5z
YWN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlv
blN5bmNDbGllbnQuaCIKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKworI2luY2x1ZGUgIkRhdGFi
YXNlU3luYy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorI2luY2x1ZGUgIlNRTFRy
YW5zYWN0aW9uU3luYy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudDo6ZGlk
Q29tbWl0VHJhbnNhY3Rpb24oU1FMVHJhbnNhY3Rpb25TeW5jKiB0cmFuc2FjdGlvbikKK3sKKyAg
ICBBU1NFUlQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIERhdGFiYXNlU3luYyogZGF0YWJhc2UgPSB0cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zY2hl
ZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZCgKKyAgICAgICAgZGF0YWJhc2UtPnNlY3VyaXR5T3Jp
Z2luKCksIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOworfQorCit2b2lkIFNRTFRyYW5z
YWN0aW9uU3luY0NsaWVudDo6ZGlkRXhlY3V0ZVN0YXRlbWVudChTUUxUcmFuc2FjdGlvblN5bmMq
IHRyYW5zYWN0aW9uKQoreworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgRGF0YWJhc2VU
cmFja2VyOjp0cmFja2VyKCkuZGF0YWJhc2VDaGFuZ2VkKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
KTsKK30KKworYm9vbCBTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKFNR
TFRyYW5zYWN0aW9uU3luYyogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgp
KTsKKyAgICBEYXRhYmFzZVN5bmMqIGRhdGFiYXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7
CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudFF1b3RhID0gRGF0YWJhc2VUcmFja2Vy
Ojp0cmFja2VyKCkucXVvdGFGb3JPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwor
ICAgIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFiYXNlRXhjZWVkZWRR
dW90YShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKKyAgICB1bnNpZ25lZCBsb25nIGxv
bmcgbmV3UXVvdGEgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5xdW90YUZvck9yaWdpbihk
YXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgcmV0dXJuIChuZXdRdW90YSA+IGN1cnJl
bnRRdW90YSk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50LmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudF9oCisjZGVm
aW5lIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudF9oCisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jOworCisvLyBB
IGNsaWVudCB0byB0aGUgU1FMVHJhbnNhY3Rpb24gY2xhc3MuIEFsbG93cyBTUUxUcmFuc2FjdGlv
biB0byBub3RpZnkgaW50ZXJlc3RlZAorLy8gcGFydGllcyB0aGF0IGNlcnRhaW4gdGhpbmdzIGhh
dmUgaGFwcGVuZWQgaW4gYSB0cmFuc2FjdGlvbi4KK2NsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0Ns
aWVudCB7CitwdWJsaWM6CisgICAgdm9pZCBkaWRDb21taXRUcmFuc2FjdGlvbihTUUxUcmFuc2Fj
dGlvblN5bmMqKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVTdGF0ZW1lbnQoU1FMVHJhbnNhY3Rpb25T
eW5jKik7CisgICAgYm9vbCBkaWRFeGNlZWRRdW90YShTUUxUcmFuc2FjdGlvblN5bmMqKTsKK307
CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCisKKyNlbmRp
ZiAvLyBTUUxUcmFuc2FjdGlvblN5bmNDbGllbnRfaApJbmRleDogV2ViQ29yZS9zdG9yYWdlL2No
cm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcAko
cmV2aXNpb24gNjIzNDQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rp
b25DbGllbnRDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDcgQEAKICNp
bmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIKICNpbmNs
dWRlICJEYXRhYmFzZVRocmVhZC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
U1FMVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTY0LDkgKzYyLDggQEAgcHJpdmF0ZToKIHZvaWQgU1FMVHJhbnNh
Y3Rpb25DbGllbnQ6OmRpZENvbW1pdFRyYW5zYWN0aW9uKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbikKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IHRyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRo
cmVhZElEKCkpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgIGlm
ICghdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkKICAgICAgICAgdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soTm90aWZ5RGF0YWJhc2VD
aGFuZ2VkVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKSk7Ci0gICAgfQogfQog
CiB2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KFNRTFRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbikKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9TUUxU
cmFuc2FjdGlvblN5bmNDbGllbnRDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uU3luY0NsaWVudENocm9taXVtLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvblN5bmND
bGllbnRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50LmgiCisKKyNpbmNs
dWRlICJEYXRhYmFzZVN5bmMuaCIKKyNpbmNsdWRlICJEYXRhYmFzZU9ic2VydmVyLmgiCisjaW5j
bHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQ6OmRpZENvbW1pdFRyYW5zYWN0aW9uKFNRTFRyYW5z
YWN0aW9uU3luYyogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpCisgICAgICAgIERhdGFiYXNlT2JzZXJ2
ZXI6OmRhdGFiYXNlTW9kaWZpZWQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKTsKK30KKwordm9pZCBT
UUxUcmFuc2FjdGlvblN5bmNDbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQoU1FMVHJhbnNhY3Rp
b25TeW5jKiB0cmFuc2FjdGlvbikKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0
ZXIgZXhlY3V0aW5nIGV2ZXJ5IHN0YXRlbWVudCB0aGF0IGNoYW5nZXMgdGhlIERCLgorICAgIC8v
IENocm9taXVtIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBhdCB0aGF0IHBvaW50LgorICAg
IEFTU0VSVCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5pc0NvbnRleHRUaHJlYWQoKSk7Cit9CisKK2Jvb2wgU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50
OjpkaWRFeGNlZWRRdW90YShTUUxUcmFuc2FjdGlvblN5bmMqIHRyYW5zYWN0aW9uKQoreworICAg
IC8vIENocm9taXVtIGRvZXMgbm90IGFsbG93IHVzZXJzIHRvIG1hbnVhbGx5IGNoYW5nZSB0aGUg
cXVvdGEgZm9yIGFuIG9yaWdpbiAoZm9yIG5vdywgYXQgbGVhc3QpLgorICAgIC8vIERvbid0IGRv
IGFueXRoaW5nLgorICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjM0NCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBACisyMDEwLTA3LTAxICBEdW1pdHJ1IERh
bmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUG9ydGluZyBhcyBtYW55IGFzeW5jIERCIHRlc3RzIGFzIHBv
c3NpYmxlIHRvIHN5bmMgREJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDA2MDcKKworICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5n
ZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNp
b24tc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9y
YWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5
bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9l
eGVjdXRlLXNxbC1hcmdzLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJz
L3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNx
bC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQt
aGFuZGxlcy1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJz
L3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFz
ZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5j
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJh
c2UtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1
dHMtc3luYy1leHBlY3RlZC50eHQ6IENvcGllZCBmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0LgorICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbDog
Q29waWVkIGZyb20gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFz
ZS1zeW5jLWlucHV0cy5odG1sLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4t
ZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNp
b24tc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVu
LWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBm
YXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmh0bWw6IFJlbW92
ZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10
cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1p
bi1wcm9ncmVzcy1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9y
YWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5qczogQWRkZWQu
CisgICAgICAgIChjYXRjaCk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMS5qczogQWRkZWQuCisgICAgICAgICgpOgorICAgICAg
ICAodHJ5KToKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdl
LXZlcnNpb24tc3luYy0yLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFn
ZS9yZXNvdXJjZXMvZW1wdHktc3RhdGVtZW50LXN5bmMuanM6IEFkZGVkLgorICAgICAgICAqIGZh
c3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9leGVjdXRlLXNxbC1hcmdzLXN5bmMuanM6IEFk
ZGVkLgorICAgICAgICAodGhyb3dPblRvU3RyaW5nT2JqZWN0LnRvU3RyaW5nKToKKyAgICAgICAg
KHZhcik6CisgICAgICAgICgpOgorICAgICAgICAocnVuVHJhbnNhY3Rpb25UZXN0KToKKyAgICAg
ICAgKHJ1blRyYW5zYWN0aW9uVGVzdHMpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuanM6
IEFkZGVkLgorICAgICAgICAoZXhlY3V0ZVN0YXRlbWVudCk6CisgICAgICAgICogZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQt
aGFuZGxlcy1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKHJ1blRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKHZhcik6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRp
cGxlLXRyYW5zYWN0aW9ucy1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNrQ29tcGxldGlv
bik6CisgICAgICAgIChydW5UZXN0LmRiKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAq
IGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNh
bGxiYWNrLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jl
c291cmNlcy9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy5qczogQWRkZWQuCisgICAg
ICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtaW5wdXRz
LXN5bmMuanM6IENvcGllZCBmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jl
c291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzLgorICAgICAgICAqIGZhc3Qvd29y
a2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5
bmMuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9v
cGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvd29y
a2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWlu
LXByb2dyZXNzLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAob3BlblRlc3REYXRhYmFzZSk6Cisg
ICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3NxbC1kYXRhLXR5cGVzLXN5
bmMuanM6IEFkZGVkLgorICAgICAgICAoKToKKyAgICAgICAgKHRlc3REQlZhbHVlcyk6CisgICAg
ICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3NxbC1leGNlcHRpb24tY29kZXMt
c3luYy5qczogQWRkZWQuCisgICAgICAgICh0ZXN0VHJhbnNhY3Rpb24pOgorICAgICAgICAoKToK
KyAgICAgICAgKHRlc3RJbnZhbGlkU3RhdGVtZW50KToKKyAgICAgICAgKHRlc3RJbmNvcnJlY3RO
dW1iZXJPZkJpbmRQYXJhbWV0ZXJzKToKKyAgICAgICAgKHRlc3RCaW5kUGFyYW1ldGVyT2ZXcm9u
Z1R5cGUuYmFkU3RyaW5nLnRvU3RyaW5nKToKKyAgICAgICAgKHRlc3RCaW5kUGFyYW1ldGVyT2ZX
cm9uZ1R5cGUpOgorICAgICAgICAodGVzdFZlcnNpb25NaXNtYXRjaC50ZXN0VHJhbnNhY3Rpb24p
OgorICAgICAgICAodGVzdFZlcnNpb25NaXNtYXRjaCk6CisgICAgICAgICogZmFzdC93b3JrZXJz
L3N0b3JhZ2UvcmVzb3VyY2VzL3Rlc3QtYXV0aG9yaXplci1zeW5jLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGNsZWFudXApOgorICAgICAgICAoZXhlY3V0ZVN0YXRlbWVudCk6CisgICAgICAgIChjcmVh
dGVUYWJsZUNhbGxiYWNrKToKKyAgICAgICAgKGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayk6Cisg
ICAgICAgIChvdGhlclN0YXRlbWVudHNDYWxsYmFjayk6CisgICAgICAgIChkcm9wU3RhdGVtZW50
c0NhbGxiYWNrKToKKyAgICAgICAgKHRlc3RSZWFkV3JpdGVNb2RlKToKKyAgICAgICAgKHRlc3RS
ZWFkT25seU1vZGUpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5
cGVzLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3Rv
cmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29y
a2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3lu
Yy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhv
cml6ZXItc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9z
dG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA3LTAxICBE
YXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKHRyaXZpYWwgdGVzdF9leHBlY3RhdGlvbnMgY2hhbmdlKS4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5j
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lv
bi1oYW5kbGUtcmV1c2Utc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NSBAQAorVGVzdCB0aGF0IHRoZSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdp
bmcgaXRzIHZlcnNpb24uCitQQVNTOiBjaGFuZ2VWZXJzaW9uKCkgdHJhbnNhY3Rpb24gY2FsbGJh
Y2sgd2FzIGNhbGxlZC4KK1BBU1M6IE5vIGV4Y2VwdGlvbiB0aHJvd24gd2hpbGUgZXhlY3V0aW5n
IHN0YXRlbWVudHMuCitQQVNTOiBObyBleGNlcHRpb24gdGhyb3duIHdoaWxlIHJ1bm5pbmcgYSB0
cmFuc2FjdGlvbi4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hh
bmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3lu
Yy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
Y2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1p
bnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5U
ZXN0KCdyZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuanMnKSI+CitU
ZXN0IHRoYXQgdGhlIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMg
dmVyc2lvbi4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5j
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhhdCB2ZXJzaW9uIHVw
ZGF0ZXMgaW4gc3luYyBkYXRhYmFzZXMgd29yayBjb3JyZWN0bHkuCitQQVNTOiBkYi52ZXJzaW9u
IGlzIDMgYXMgZXhwZWN0ZWQuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5j
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0PgorZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworZnVuY3Rp
b24gZmluaXNoVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlv
biBydW5UZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGlmICh3aW5kb3cu
bG9jYXRpb24uc2VhcmNoID09ICI/MiIpIHsKKyAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3Jr
ZXIoInJlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1zeW5jLTIuanMiKTsKKyAgICAgICAgd29ya2Vy
Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICBpZiAoZXZlbnQuZGF0
YSA9PSAiZG9uZSIpCisgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGxvZyhldmVudC5kYXRhKTsKKyAgICAgICAgfTsKKyAgICB9
IGVsc2UgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3VyY2VzL2NoYW5n
ZS12ZXJzaW9uLXN5bmMtMS5qcyIpOworICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC5kYXRhID09ICJkb25lIikKKyAgICAg
ICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHdpbmRvdy5sb2NhdGlvbiArICI/MiI7
CisgICAgICAgICAgICBlbHNlIGlmIChldmVudC5kYXRhID09ICJmYWlsIikKKyAgICAgICAgICAg
ICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9n
KGV2ZW50LmRhdGEpOworICAgICAgICB9OworICAgIH0KK30KKzwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorVGVzdCB0aGF0IHZlcnNpb24gdXBkYXRlcyBpbiBz
eW5jIGRhdGFiYXNlcyB3b3JrIGNvcnJlY3RseS4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1w
dHktc3RhdGVtZW50LXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQg
QEAKK1RoaXMgdGVzdCB0cmllcyB0byBleGVjdXRlIGFuIGVtcHR5IHN0YXRlbWVudC4KK1BBU1M6
IHJlc3VsdCBpcyBudWxsCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL2VtcHR5LXN0YXRlbWVudC1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2VtcHR5LXN0YXRlbWVu
dC1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL2VtcHR5LXN0YXRl
bWVudC1zeW5jLmpzJykiPgorVGhpcyB0ZXN0IHRyaWVzIHRvIGV4ZWN1dGUgYW4gZW1wdHkgc3Rh
dGVtZW50LgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtc3lu
Yy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKK1Rlc3QgdmFyaW91cyBp
bnB1dHMgdG8gZXhlY3V0ZVNxbCgpLgorUEFTUzogZXhlY3V0ZVNxbCgiIikgZGlkIG5vdCB0aHJv
dyBhbiBleGNlcHRpb24uCitQQVNTOiBleGVjdXRlU3FsKCIiLCBudWxsKSBkaWQgbm90IHRocm93
IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIHVuZGVmaW5lZCkgZGlkIG5vdCB0
aHJvdyBhbiBleGNlcHRpb24uCitQQVNTOiBleGVjdXRlU3FsKCIiLCBbXSkgZGlkIG5vdCB0aHJv
dyBhbiBleGNlcHRpb24uCitQQVNTOiBleGVjdXRlU3FsKCIiLCBbICJhcmcwIiBdKSBkaWQgbm90
IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIHsgfSkgZGlkIG5vdCB0
aHJvdyBhbiBleGNlcHRpb24uCitQQVNTOiBleGVjdXRlU3FsKCIiLCB7IGxlbmd0aDogMCB9KSBk
aWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIHsgbGVuZ3Ro
OiAxLCAwOiAiYXJnMCIgfSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uCitQQVNTOiBleGVj
dXRlU3FsKCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNx
bChudWxsKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3Fs
KHVuZGVmaW5lZCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0
ZVNxbCgwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3Fs
KHRocm93T25Ub1N0cmluZ09iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgor
UEFTUzogZXhlY3V0ZVNxbCgiIiwgdGhyb3dPbkdldExlbmd0aE9iamVjdCkgdGhyZXcgYW4gZXhj
ZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgdGhyb3dPbkdldFplcm9P
YmplY3QpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwo
IiIsIFsgdGhyb3dPblRvU3RyaW5nT2JqZWN0IF0pIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBl
Y3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBl
Y3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsICIiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhw
ZWN0ZWQuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGUt
c3FsLWFyZ3Mtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisK
Kzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5q
cycpIj4KK1Rlc3QgdmFyaW91cyBpbnB1dHMgdG8gZXhlY3V0ZVNxbCgpLgorPHByZSBpZD0iY29u
c29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3lu
Yy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4
ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdGhhdCBleGVjdXRlU3FsKCkgYWNjZXB0
cyBvbmx5IG9uZSBzdGF0ZW1lbnQuCitQQVNTOiBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMSkK
K1BBU1M6IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgyKTsKK1BBU1M6ICAgIElOU0VSVCBJTlRP
IFRlc3QgVkFMVUVTICgzKSAgICAKK1BBU1M6ICAgIElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg0
KTsgICAKK1BBU1M6IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg1KSAgIDsKK1BBU1M6IElOU0VS
VCBJTlRPIFRlc3QgVkFMVUVTICg2KTsgZ2FyYmFnZQorUEFTUzogSU5TRVJUIElOVE8gVGVzdCBW
QUxVRVMgKDcpOyBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoOCkKK1BBU1M6ICAgSU5TRVJUIElO
VE8gVGVzdCBWQUxVRVMgKDkpOyAgIElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgxMCk7ICAgCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0
cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1l
bnQtc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxi
b2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9u
ZS1zdGF0ZW1lbnQtc3luYy5qcycpIj4KK1Rlc3QgdGhhdCBleGVjdXRlU3FsKCkgYWNjZXB0cyBv
bmx5IG9uZSBzdGF0ZW1lbnQuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvbXVsdGlwbGUt
dHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5z
YWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0
aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzIEBACitUZXN0IHRoYXQgZXhlY3V0aW5nIG11bHRpcGxlIHRyYW5zYWN0aW9u
cyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBkYXRhYmFzZSBkb2Vzbid0IGNhdXNl
IGRlYWRsb2Nrcy4KK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10
cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25z
LW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMt
Y29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdy
ZXNvdXJjZXMvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMu
anMnKSI+CitUZXN0IHRoYXQgZXhlY3V0aW5nIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZm
ZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBkYXRhYmFzZSBkb2Vzbid0IGNhdXNlIGRlYWRsb2Nr
cy4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNh
bGxiYWNrLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKK1RoaXMgdGVzdCB0ZXN0cyBvcGVuRGF0YWJhc2VTeW5j
KCkncyBjcmVhdGlvbiBjYWxsYmFjay4KK1BBU1M6IENyZWF0aW9uIGNhbGxiYWNrIHdhcyBjYWxs
ZWQuCitQQVNTOiBWZXJzaW9uIHNldCB0byBlbXB0eSBzdHJpbmcgYXMgZXhwZWN0ZWQuCitQQVNT
OiBBbiBleGNlcHRpb24gd2FzIHRocm93biBhbmQgZGIxRmFpbCBpcyBudWxsIGFzIGV4cGVjdGVk
LgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNl
LWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0
LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1
blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMuanMn
KSI+CitUaGlzIHRlc3QgdGVzdHMgb3BlbkRhdGFiYXNlU3luYygpJ3MgY3JlYXRpb24gY2FsbGJh
Y2suCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJz
aW9uLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4t
ZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzIEBACitUZXN0IHRoYXQgbm8gZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIHRoZSBk
YXRhYmFzZSBpcyBvcGVuZWQgd2l0aCBhbiBlbXB0eSB2ZXJzaW9uLgorUEFTUworCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNp
b24tc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWVtcHR5LXZl
cnNpb24tc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRh
dGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy5qcycpIj4KK1Rlc3QgdGhhdCBubyBleGNlcHRpb24g
aXMgdGhyb3duIHdoZW4gdGhlIGRhdGFiYXNlIGlzIG9wZW5lZCB3aXRoIGFuIGVtcHR5IHZlcnNp
b24uCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3lu
Yy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYy
MjMwKQkoZnJvbSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNl
LXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dDo2MjIzMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEgQEAKK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgb3Bl
bkRhdGFiYXNlU3luYygpIGFjY2VwdHMgb25seSB2YWxpZCBwYXJhbWV0ZXJzLgorUEFTUzogU1lO
VEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMgorUEFTUzogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlv
biAxMgorUEFTUzogdW5kZWZpbmVkCitQQVNTOiB1bmRlZmluZWQKK1BBU1M6IHVuZGVmaW5lZAor
UEFTUzogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcKK1BBU1M6IG9wZW5EYXRh
YmFzZVN5bmMoKSBzdWNjZWVkZWQuCitQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVk
LgorUEFTUzogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxi
YWNrIHN1Y2NlZWRlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbAkocmV2
aXNpb24gNjIyMzApCShmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4t
ZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbDo2MjIzMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyIEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3lu
Yy1pbnB1dHMuanMnKSI+CitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IG9wZW5EYXRhYmFzZVN5
bmMoKSBhY2NlcHRzIG9ubHkgdmFsaWQgcGFyYW1ldGVycy4KKzxwcmUgaWQ9ImNvbnNvbGUiPgor
PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5o
dG1sCShyZXZpc2lvbiA2MjIzMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0
LDcgQEAKIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3Nj
cmlwdD4KIDwvaGVhZD4KIAotPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Blbi1k
YXRhYmFzZS1zeW5jLWlucHV0cy5qcycpIj4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3Vy
Y2VzL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuanMnKSI+CiBUaGlzIHRlc3QgbWFrZXMgc3Vy
ZSB0aGF0IG9wZW5EYXRhYmFzZVN5bmMoKSBhY2NlcHRzIG9ubHkgdmFsaWQgcGFyYW1ldGVycy4K
IDxwcmUgaWQ9ImNvbnNvbGUiPgogPC9wcmU+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4t
ZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1l
bXB0eS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMg
QEAKK1RoaXMgdGVzdHMgdGhhdCBjYWxsaW5nIG9wZW5EYXRhYmFzZSB3aXRoIGFuIGVtcHR5IHZl
cnNpb24gc3RyaW5nIHNldHMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGF0IGRhdGFiYXNlIHRv
IHRoZSBlbXB0eSBzdHJpbmcgYW5kIHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8gb3BlbiB0aGUgZGF0
YWJhc2Ugd2l0aCBhIGRpZmZlcmVudCBleHBlY3RlZCB2ZXJzaW9uIHRocm93IGFuIGV4Y2VwdGlv
bi4KK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1k
YXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lv
bi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25s
b2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1z
eW5jLmpzJykiPgorVGhpcyB0ZXN0cyB0aGF0IGNhbGxpbmcgb3BlbkRhdGFiYXNlIHdpdGggYW4g
ZW1wdHkgdmVyc2lvbiBzdHJpbmcgc2V0cyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoYXQgZGF0
YWJhc2UgdG8gdGhlIGVtcHR5IHN0cmluZyBhbmQgc3Vic2VxdWVudCBhdHRlbXB0cyB0byBvcGVu
IHRoZSBkYXRhYmFzZSB3aXRoIGEgZGlmZmVyZW50IGV4cGVjdGVkIHZlcnNpb24gdGhyb3cgYW4g
ZXhjZXB0aW9uLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3lu
Yy1pbnB1dHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA2MjM0NCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0
YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDExICsw
LDAgQEAKLVRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgb3BlbkRhdGFiYXNlU3luYygpIGFjY2Vw
dHMgb25seSB2YWxpZCBwYXJhbWV0ZXJzLgotUEFTUzogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlv
biAxMgotUEFTUzogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMgotUEFTUzogdW5kZWZpbmVk
Ci1QQVNTOiB1bmRlZmluZWQKLVBBU1M6IHVuZGVmaW5lZAotUEFTUzogVFlQRV9NSVNNQVRDSF9F
UlI6IERPTSBFeGNlcHRpb24gMTcKLVBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQu
Ci1QQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLgotUEFTUzogY2FsbGluZyBvcGVu
RGF0YWJhc2VTeW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4KLQpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlu
cHV0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbAkocmV2aXNpb24gNjIzNDQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIgKzAsMCBAQAotPCFkb2N0eXBlIGh0bWw+Ci08aHRt
bD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMi
Pjwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9v
cGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzJykiPgotVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhh
dCBvcGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlkIHBhcmFtZXRlcnMuCi08cHJl
IGlkPSJjb25zb2xlIj4KLTwvcHJlPgotPC9ib2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1p
bi1wcm9ncmVzcy1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXBy
b2dyZXNzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9n
cmVzcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0
IHRoYXQgYSBzZWNvbmQgaGFuZGxlIHRvIHRoZSBzYW1lIGRhdGFiYXNlIGNhbiBiZSBvcGVuZWQg
aW5zaWRlIGEgdHJhbnNhY3Rpb24gcnVubmluZyBvbiB0aGUgZmlyc3QgaGFuZGxlLgorUEFTUzog
c2Vjb25kIGhhbmRsZSBvcGVuZWQgc3VjY2Vzc2Z1bGx5LgorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXBy
b2dyZXNzLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9k
eSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0
aW9uLWluLXByb2dyZXNzLXN5bmMuanMnKSI+CitUZXN0IHRoYXQgYSBzZWNvbmQgaGFuZGxlIHRv
IHRoZSBzYW1lIGRhdGFiYXNlIGNhbiBiZSBvcGVuZWQgaW5zaWRlIGEgdHJhbnNhY3Rpb24gcnVu
bmluZyBvbiB0aGUgZmlyc3QgaGFuZGxlLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Nx
bC1kYXRhLXR5cGVzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRhdGEt
dHlwZXMtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorVGVz
dCB0aGF0IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgREIgcXVlcmllcyBhcmUgb2YgdGhlIHNhbWUg
dHlwZSBhcyB0aGUgdmFsdWVzIGluc2VydGVkIGluIHRoZSBkYXRhYmFzZS4KK1BBU1M6IHByb3Bl
cnR5ICd0aW1lc3RhbXAnIE9LLCB0eXBlIHdhcyBudW1iZXIKK1BBU1M6IHByb3BlcnR5ICdpZCcg
T0ssIHR5cGUgd2FzIG51bWJlcgorUEFTUzogcHJvcGVydHkgJ3JlYWwnIE9LLCB0eXBlIHdhcyBu
dW1iZXIKK1BBU1M6IHByb3BlcnR5ICd0ZXh0JyBPSywgdHlwZSB3YXMgc3RyaW5nCitQQVNTOiBw
cm9wZXJ0eSAnYmxvYicgT0ssIHR5cGUgd2FzIHN0cmluZworCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlwZXMtc3luYy5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3Fs
LWRhdGEtdHlwZXMtc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9z
cWwtZGF0YS10eXBlcy1zeW5jLmpzJykiPgorVGVzdCB0aGF0IHRoZSB2YWx1ZXMgcmV0dXJuZWQg
YnkgREIgcXVlcmllcyBhcmUgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgdmFsdWVzIGluc2VydGVk
IGluIHRoZSBkYXRhYmFzZS4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0
aW9uLWNvZGVzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhj
ZXB0aW9uLWNvZGVzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkg
QEAKK1Rlc3QgdGhhdCB0aGUgY29ycmVjdCBleGNlcHRpb25zIGFyZSB0aHJvd24gaW4gZXhjZXB0
aW9uYWwgc2l0dWF0aW9ucy4KK1BBU1M6IGV4cGVjdGVkIGFuZCBnb3QgZXJyb3IgY29kZSBVTktO
T1dOX0VSUgorUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFNZTlRBWF9FUlIKK1BB
U1M6IGV4cGVjdGVkIGFuZCBnb3QgZXJyb3IgY29kZSBTWU5UQVhfRVJSCitQQVNTOiBleHBlY3Rl
ZCBhbmQgZ290IGVycm9yIGNvZGUgVU5LTk9XTl9FUlIKK1BBU1M6IGV4cGVjdGVkIGFuZCBnb3Qg
ZXJyb3IgY29kZSBRVU9UQV9FUlIKK1BBU1M6IFRyYW5zYWN0aW9uIHdhcyByb2xsZWQgYmFjayBi
eSBTUUxpdGUgYXMgZXhwZWN0ZWQuCitQQVNTOiBleHBlY3RlZCBhbmQgZ290IGVycm9yIGNvZGUg
VkVSU0lPTl9FUlIKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3Fs
LWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNv
ZGVzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvc3FsLWV4Y2Vw
dGlvbi1jb2Rlcy1zeW5jLmpzJykiPgorVGVzdCB0aGF0IHRoZSBjb3JyZWN0IGV4Y2VwdGlvbnMg
YXJlIHRocm93biBpbiBleGNlcHRpb25hbCBzaXR1YXRpb25zLgorPHByZSBpZD0iY29uc29sZSI+
Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzEgQEAKK1Rlc3QgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuCitCZWdpbm5pbmcgd3Jp
dGUgdHJhbnNhY3Rpb246CitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQu
CitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRF
X1RFTVBfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9UUklH
R0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1l
bnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQu
CitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVf
VlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElU
RV9SRUFEIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfU0VMRUNUIHN0YXRlbWVudCBzdWNj
ZWVkZWQuCitTUUxJVEVfREVMRVRFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfSU5TRVJU
IHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfVVBEQVRFIHN0YXRlbWVudCBzdWNjZWVkZWQu
CitTUUxJVEVfUFJBR01BIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAo
NSkKK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0FMVEVS
X1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfVFJBTlNBQ1RJT04gc3RhdGVtZW50
IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0FUVEFDSCBzdGF0ZW1l
bnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfREVUQUNIIHN0YXRl
bWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9SRUlOREVYIHN0
YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQU5BTFlaRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2Jq
ZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9JTkRFWCBzdGF0ZW1lbnQgc3VjY2Vl
ZGVkLgorU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRF
X0RST1BfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9URU1Q
X1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RSSUdHRVIgc3RhdGVtZW50
IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElU
RV9EUk9QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitXcml0ZSB0cmFuc2FjdGlvbiBzdWNj
ZWVkZWQuCisKK0JlZ2lubmluZyByZWFkIHRyYW5zYWN0aW9uczoKK1NRTElURV9DUkVBVEVfVEFC
TEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0NS
RUFURV9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9JTkRFWCBzdGF0
ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1RF
TVBfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FM
SVRFX0NSRUFURV9URU1QX1RSSUdHRVIgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNl
cHRpb25dICg1KQorU1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogW29i
amVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBm
YWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9DUkVBVEVfVklFVyBzdGF0
ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1ZU
QUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVf
Q1JFQVRFX0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVEFC
TEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHN0YXRl
bWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1lbnQgc3VjY2Vl
ZGVkLgorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVf
Q1JFQVRFX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVlRBQkxFIHN0
YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9SRUFEIHN0
YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfU0VMRUNUIHN0YXRlbWVudCBzdWNjZWVkZWQuCitT
UUxJVEVfREVMRVRFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkK
K1NRTElURV9JTlNFUlQgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1
KQorU1FMSVRFX1VQREFURSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0g
KDUpCitTUUxJVEVfUFJBR01BIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9u
XSAoNSkKK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4
Y2VwdGlvbl0gKDUpCitTUUxJVEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVj
dCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX1RSQU5TQUNUSU9OIHN0YXRlbWVudCBmYWlsZWQ6
IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9BVFRBQ0ggc3RhdGVtZW50IGZhaWxl
ZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RFVEFDSCBzdGF0ZW1lbnQgZmFp
bGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfUkVJTkRFWCBzdGF0ZW1lbnQg
ZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQU5BTFlaRSBzdGF0ZW1l
bnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9JTkRFWCBz
dGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9U
RU1QX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NR
TElURV9EUk9QX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2Vw
dGlvbl0gKDUpCitTUUxJVEVfRFJPUF9URU1QX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogW29iamVj
dCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RST1BfVFJJR0dFUiBzdGF0ZW1lbnQgZmFpbGVk
OiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9WSUVXIHN0YXRlbWVudCBm
YWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9QX1RBQkxFIHN0YXRl
bWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1JlYWQgdHJhbnNhY3Rpb25z
IHN1Y2NlZWRlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVz
dC1hdXRob3JpemVyLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
KworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvdGVzdC1hdXRob3JpemVyLXN5bmMu
anMnKSI+CitUZXN0IHRoZSBkYXRhYmFzZSBhdXRob3JpemVyLgorPHByZSBpZD0iY29uc29sZSI+
Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
Y2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24taGFu
ZGxlLXJldXNlLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK3ZhciBkYiA9
IG51bGw7Cit0cnkgeworICAgIHZhciBkYk5hbWUgPSAiQ2hhbmdlVmVyc2lvbkhhbmRsZVJldXNl
VGVzdCIgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgIGRiID0gb3BlbkRhdGFiYXNlU3lu
YyhkYk5hbWUsICIiLCAiVGVzdCB0aGF0IHRoZSBEQiBoYW5kbGUgaXMgdmFsaWQgYWZ0ZXIgY2hh
bmdpbmcgdGhlIHZlcnNpb24uIiwgMSk7CisgICAgdmFyIHZlcnNpb24gPSBkYi52ZXJzaW9uOwor
ICAgIHZhciBuZXdWZXJzaW9uID0gdmVyc2lvbiA/IChwYXJzZUludCh2ZXJzaW9uKSArIDEpLnRv
U3RyaW5nKCkgOiAiMSI7CisgICAgZGIuY2hhbmdlVmVyc2lvbih2ZXJzaW9uLCBuZXdWZXJzaW9u
LCBmdW5jdGlvbih0eCkgeworICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2hhbmdlVmVyc2lv
bigpIHRyYW5zYWN0aW9uIGNhbGxiYWNrIHdhcyBjYWxsZWQuIik7CisgICAgfSk7Cit9IGNhdGNo
IChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogY2hhbmdlVmVyc2lvbigpIHRocmV3IGFu
IGV4Y2VwdGlvbjogIiArIGVycik7Cit9CisKK3RyeSB7CisgICAgZGIudHJhbnNhY3Rpb24oZnVu
Y3Rpb24odHgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNS
RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBJTlQpIik7CisgICAgICAgICAgICB0
eC5leGVjdXRlU3FsKCJTRUxFQ1QgKiBmcm9tIFRlc3QiKTsKKyAgICAgICAgICAgIHBvc3RNZXNz
YWdlKCJQQVNTOiBObyBleGNlcHRpb24gdGhyb3duIHdoaWxlIGV4ZWN1dGluZyBzdGF0ZW1lbnRz
LiIpOworICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJG
QUlMOiBBbiBleGNlcHRpb24gd2FzIHRocm93biB3aGlsZSBleGVjdXRpbmcgc3RhdGVtZW50czog
IiArIGVycik7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogTm8g
ZXhjZXB0aW9uIHRocm93biB3aGlsZSBydW5uaW5nIGEgdHJhbnNhY3Rpb24uIik7Cit9IGNhdGNo
IChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogQW4gZXhjZXB0aW9uIHdhcyB0aHJvd24g
d2hpbGUgcnVubmluZyBhIHRyYW5zYWN0aW9uOiAiICsgZXJyKTsKK30KKworcG9zdE1lc3NhZ2Uo
ImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9jaGFuZ2UtdmVyc2lvbi1zeW5jLTEuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMS5qcwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9j
aGFuZ2UtdmVyc2lvbi1zeW5jLTEuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKK3Zh
ciBFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX0hJWElFX1RFU1QgPSAiMiI7Cit2YXIgRVhQRUNURURf
VkVSU0lPTl9BRlRFUl9SRUxPQUQgPSAiMyI7CisKK2Z1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7
IH0KKwordmFyIGRiMSA9IG9wZW5EYXRhYmFzZVN5bmMoIkNoYW5nZVZlcnNpb25UZXN0IiwgIjEi
LCAiVGVzdCBmb3IgdGhlIGRhdGFiYXNlLmNoYW5nZVZlcnNpb24oKSBmdW5jdGlvbiIsIDEpOwor
dmFyIGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoIkNoYW5nZVZlcnNpb25UZXN0IiwgIjEiLCAiVGVz
dCBmb3IgdGhlIGRhdGFiYXNlLmNoYW5nZVZlcnNpb24oKSBmdW5jdGlvbiIsIDEpOworCisvLyBG
aXJzdCBydW4gSGl4aWUncyB0ZXN0IHRvIGVuc3VyZSBiYXNpYyBjaGFuZ2VWZXJzaW9uKCkgZnVu
Y3Rpb25hbGl0eSB3b3JrcyAoc2VlIGJ1ZyAyODQxOCkuCitkYjEuY2hhbmdlVmVyc2lvbigiMSIs
IEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfSElYSUVfVEVTVCwgZW1wdHlGdW5jdGlvbik7CitpZiAo
ZGIyLnZlcnNpb24gIT0gZGIxLnZlcnNpb24pIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogY2hh
bmdpbmcgZGIxJ3MgdmVyc2lvbiAoIiArIGRiMS52ZXJzaW9uICsgIikgZGlkIG5vdCBjaGFuZ2Ug
ZGIyJ3MgdmVyc2lvbiAoIiArIGRiMi52ZXJzaW9uICsgIikgYXMgZXhwZWN0ZWQuIik7CisgICAg
cG9zdE1lc3NhZ2UoImZhaWwiKTsKK30gZWxzZQorICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBjaGFu
Z2luZyBkYjEncyB2ZXJzaW9uICgiICsgZGIxLnZlcnNpb24gKyAiKSBjaGFuZ2VkIGRiMidzIHZl
cnNpb24gdG9vLiIpOworCitkYjIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICB0cnkg
eworICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBUZXN0
IChGb28gSU5UKSIpOworICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogVGhlIERCIHZlcnNpb24g
Y2hhbmdlZCwgZXhlY3V0aW5nIGFueSBzdGF0ZW1lbnQgb24gZGIyIHNob3VsZCBmYWlsLiIpOwor
ICAgICAgICBwb3N0TWVzc2FnZSgiZmFpbCIpOworICAgIH0gY2F0Y2goZXJyKSB7CisgICAgICBw
b3N0TWVzc2FnZSgiUEFTUzogRXhlY3V0aW5nIGEgc3RhdGVtZW50IG9uIGRiMiB0aHJldyBhbiBl
eGNlcHRpb24gYXMgZXhwZWN0ZWQuIik7CisgICAgfQorfSk7CisKKy8vIE1ha2Ugc3VyZSBhbnkg
bmV3IGhhbmRsZSB0byB0aGUgc2FtZSBEQiBzZWVzIHRoZSBuZXcgdmVyc2lvbgordHJ5IHsKKyAg
ICB2YXIgZGIzID0gb3BlbkRhdGFiYXNlU3luYygiQ2hhbmdlVmVyc2lvblRlc3QiLCBFWFBFQ1RF
RF9WRVJTSU9OX0FGVEVSX0hJWElFX1RFU1QsICIiLCAxKTsKKyAgICBwb3N0TWVzc2FnZSgiUEFT
UzogU3VjY2Vzc2Z1bGx5IG9wZW5lZCBhIG5ldyBEQiBoYW5kbGUuIik7Cit9IGNhdGNoIChlcnIp
IHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogVW5leHBlY3RlZCBleGNlcHRpb24gdGhyb3duIHdo
aWxlIHRyeWluZyB0byBvcGVuIGEgbmV3IERCIGhhbmRsZTogIiArIGVycik7CisgICAgcG9zdE1l
c3NhZ2UoImZhaWwiKTsKK30KKworaWYgKGRiMS52ZXJzaW9uICE9IGRiMy52ZXJzaW9uKSB7Cisg
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGRiMS52ZXJzaW9uICgiICsgZGIxLnZlcnNpb24gKyAiKSBk
b2VzIG5vdCBtYXRjaCBkYjMudmVyc2lvbigiICsgZGIzLnZlcnNpb24gKyIpIik7CisgICAgcG9z
dE1lc3NhZ2UoImZhaWwiKTsKK30gZWxzZQorICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBkYjEudmVy
c2lvbiAoIiArIGRiMS52ZXJzaW9uICsgIikgbWF0Y2hlcyBkYjMudmVyc2lvbi4iKTsKKworLy8g
Tm93IHRyeSBhIHRlc3QgdG8gZW5zdXJlIHRoZSB2ZXJzaW9uIHBlcnNpc3RzIGFmdGVyIHJlbG9h
ZGluZyAoc2VlIGJ1ZyAyNzgzNikKK2RiMS5jaGFuZ2VWZXJzaW9uKEVYUEVDVEVEX1ZFUlNJT05f
QUZURVJfSElYSUVfVEVTVCwgRVhQRUNURURfVkVSU0lPTl9BRlRFUl9SRUxPQUQsCisgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgICAgICAgIHR4LmV4ZWN1
dGVTcWwoIkRST1AgVEFCTEUgSUYgRVhJU1RTIEluZm8iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJbmZvIChWZXJzaW9u
IElOVEVHRVIpIik7CisgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJU
IElOVE8gSW5mbyBWQUxVRVMgKD8pIiwgW0VYUEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FEXSk7
CisgICAgICAgICAgICAgICAgICB9KTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1z
eW5jLTIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
cmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMi5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1zeW5j
LTIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK3ZhciBFWFBFQ1RFRF9WRVJTSU9O
X0FGVEVSX1JFTE9BRCA9ICczJzsKKwordmFyIGRiID0gb3BlbkRhdGFiYXNlU3luYygiQ2hhbmdl
VmVyc2lvblRlc3QiLCAiIiwgIlRlc3QgdGhlIGNoYW5nZVZlcnNpb24oKSBmdW5jdGlvbi4iLCAx
KTsKK2lmIChkYi52ZXJzaW9uID09IEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FEKQorICAg
IHBvc3RNZXNzYWdlKCJQQVNTOiBkYi52ZXJzaW9uIGlzICIgKyBFWFBFQ1RFRF9WRVJTSU9OX0FG
VEVSX1JFTE9BRCArICIgYXMgZXhwZWN0ZWQuIik7CitlbHNlCisgICAgcG9zdE1lc3NhZ2UoIkZB
SUw6IGRiLnZlcnNpb24gaXMgIiArIGRiLnZlcnNpb24gKyAiOyBleHBlY3RlZCAiICsgRVhQRUNU
RURfVkVSU0lPTl9BRlRFUl9SRUxPQUQpOworCisvLyBSZXNldCB0aGUgdmVyc2lvbjsgb3RoZXJ3
aXNlIHRoaXMgdGVzdCB3aWxsIGZhaWwgdGhlIG5leHQgdGltZSBpdCdzIHJ1bgorZGIuY2hhbmdl
VmVyc2lvbihkYi52ZXJzaW9uLCAiMSIsIGZ1bmN0aW9uKHR4KSB7IH0pOworCitwb3N0TWVzc2Fn
ZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL2VtcHR5LXN0YXRlbWVudC1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9lbXB0eS1zdGF0ZW1lbnQtc3luYy5qcwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9l
bXB0eS1zdGF0ZW1lbnQtc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAordHJ5
IHsKKyAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJFbXB0eVN0YXRlbWVudFN5bmMiLCAi
MS4wIiwgIlRlc3QgYW4gZW1wdHkgc3RhdGVtZW50LiIsIDEpOworICAgIGRiLnRyYW5zYWN0aW9u
KGZ1bmN0aW9uKHR4KSB7CisgICAgICAgIHZhciByZXN1bHQgPSB0eC5leGVjdXRlU3FsKCIiKTsK
KyAgICAgICAgcG9zdE1lc3NhZ2UocmVzdWx0ID8gIkZBSUw6IHJlc3VsdCBpcyBub3QgbnVsbCIg
OiAiUEFTUzogcmVzdWx0IGlzIG51bGwiKTsKKyAgICB9KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFT
UyIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUwiKTsKK30KKworcG9z
dE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy9leGVjdXRlLXNxbC1hcmdzLXN5bmMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGUtc3FsLWFyZ3Mtc3lu
Yy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jl
c291cmNlcy9leGVjdXRlLXNxbC1hcmdzLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzAgQEAKK3ZhciB0aHJvd09uVG9TdHJpbmdPYmplY3QgPSB7IH07Cit0aHJvd09uVG9TdHJpbmdP
YmplY3QudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgY2FsbCB0b1N0cmlu
ZyBvbiB0aGlzIG9iamVjdC4iIH07CisKK3ZhciB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0ID0geyB9
OwordGhyb3dPbkdldExlbmd0aE9iamVjdC5fX2RlZmluZUdldHRlcl9fKCJsZW5ndGgiLCBmdW5j
dGlvbiAoKSB7IHRocm93ICJDYW5ub3QgZ2V0IGxlbmd0aCBvZiB0aGlzIG9iamVjdC4iOyB9KTsK
KwordmFyIHRocm93T25HZXRaZXJvT2JqZWN0ID0geyBsZW5ndGg6IDEgfTsKK3Rocm93T25HZXRa
ZXJvT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18oIjAiLCBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5u
b3QgZ2V0IDAgcHJvcGVydHkgb2YgdGhpcyBvYmplY3QuIjsgfSk7CisKK3ZhciBleHBlY3ROb0V4
Y2VwdGlvbiA9IFsKKyAgICAnIiInLAorICAgICciIiwgbnVsbCcsCisgICAgJyIiLCB1bmRlZmlu
ZWQnLAorICAgICciIiwgW10nLAorICAgICciIiwgWyAiYXJnMCIgXScsCisgICAgJyIiLCB7IH0n
LAorICAgICciIiwgeyBsZW5ndGg6IDAgfScsCisgICAgJyIiLCB7IGxlbmd0aDogMSwgMDogImFy
ZzAiIH0nLAorXTsKKwordmFyIGV4cGVjdEV4Y2VwdGlvbiA9IFsKKyAgICAnJywKKyAgICAnbnVs
bCcsCisgICAgJ3VuZGVmaW5lZCcsCisgICAgJzAnLAorICAgICd0aHJvd09uVG9TdHJpbmdPYmpl
Y3QnLAorICAgICciIiwgdGhyb3dPbkdldExlbmd0aE9iamVjdCcsCisgICAgJyIiLCB0aHJvd09u
R2V0WmVyb09iamVjdCcsCisgICAgJyIiLCBbIHRocm93T25Ub1N0cmluZ09iamVjdCBdJywKKyAg
ICAnIiIsIDAnLAorICAgICciIiwgIiInLAorXTsKKworZnVuY3Rpb24gdHJ5RXhlY3V0ZVNxbCh0
cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCkKK3sKKyAgICB0cnkgeworICAgICAgICBldmFsKCd0
cmFuc2FjdGlvbi5leGVjdXRlU3FsKCcgKyBwYXJhbWV0ZXJMaXN0ICsgJyknKTsKKyAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgICAgIHJldHVybiBl
eGNlcHRpb247CisgICAgfQorfQorCitmdW5jdGlvbiBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNh
Y3Rpb24sIHBhcmFtZXRlckxpc3QsIGV4cGVjdEV4Y2VwdGlvbikKK3sKKyAgICB2YXIgZXhjZXB0
aW9uID0gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCk7CisgICAgaWYg
KGV4cGVjdEV4Y2VwdGlvbikgeworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAg
cG9zdE1lc3NhZ2UoIlBBU1M6IGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSB0aHJl
dyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHBvc3RNZXNzYWdlKCJGQUlMOiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgZGlk
IG5vdCB0aHJvdyBhbiBleGNlcHRpb24uIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV4
Y2VwdGlvbikKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBleGVjdXRlU3FsKCIgKyBw
YXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgZXhjZXB0aW9uKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGV4ZWN1dGVTcWwoIiAr
IHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIHJ1blRyYW5zYWN0aW9uVGVzdHModHJhbnNhY3Rpb24pCit7CisgICAg
Zm9yIChpIGluIGV4cGVjdE5vRXhjZXB0aW9uKQorICAgICAgICBydW5UcmFuc2FjdGlvblRlc3Qo
dHJhbnNhY3Rpb24sIGV4cGVjdE5vRXhjZXB0aW9uW2ldLCBmYWxzZSk7CisgICAgZm9yIChpIGlu
IGV4cGVjdEV4Y2VwdGlvbikKKyAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9u
LCBleHBlY3RFeGNlcHRpb25baV0sIHRydWUpOworfQorCit2YXIgZGIgPSBvcGVuRGF0YWJhc2VT
eW5jKCJFeGVjdXRlU1FMQXJnc1Rlc3QiLCAiMS4wIiwgIlRlc3Qgb2YgaGFuZGxpbmcgb2YgdGhl
IGFyZ3VtZW50cyB0byBTUUxUcmFuc2FjdGlvblN5bmMuZXhlY3V0ZVNxbCIsIDEpOworZGIudHJh
bnNhY3Rpb24ocnVuVHJhbnNhY3Rpb25UZXN0cyk7Citwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGVzcWwt
YWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZXNxbC1hY2NlcHRzLW9u
bHktb25lLXN0YXRlbWVudC1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1z
dGF0ZW1lbnQtc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorZnVuY3Rpb24g
ZXhlY3V0ZVN0YXRlbWVudCh0eCwgZXhwZWN0ZWRUb1Bhc3MsIHN0YXRlbWVudCkKK3sKKyAgICB0
cnkgeworICAgICAgICB0eC5leGVjdXRlU3FsKHN0YXRlbWVudCk7CisgICAgICAgIHBvc3RNZXNz
YWdlKGV4cGVjdGVkVG9QYXNzID8gIlBBU1M6ICIgKyBzdGF0ZW1lbnQgOiAiRkFJTDogIiArIHN0
YXRlbWVudCk7CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCFleHBl
Y3RlZFRvUGFzcyA/ICJQQVNTOiAiICsgc3RhdGVtZW50IDogIkZBSUw6ICIgKyBzdGF0ZW1lbnQp
OworICAgIH0KK30KKwordmFyIGRiID0gb3BlbkRhdGFiYXNlU3luYygiRXhlY3V0ZVNRTEFjY2Vw
dHNPbmx5T25lU3RhdGVtZW50VGVzdCIsICIxLjAiLCAiIiwgMSk7CitkYi50cmFuc2FjdGlvbihm
dW5jdGlvbih0eCkgeworICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJ
U1RTIFRlc3QgKEZvbyBJTlQpIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgdHJ1ZSwgIklO
U0VSVCBJTlRPIFRlc3QgVkFMVUVTICgxKSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIHRy
dWUsICJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMik7Iik7CisgICAgZXhlY3V0ZVN0YXRlbWVu
dCh0eCwgdHJ1ZSwgIiAgIElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgzKSAgICAiKTsKKyAgICBl
eGVjdXRlU3RhdGVtZW50KHR4LCB0cnVlLCAiICAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDQp
OyAgICIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIHRydWUsICJJTlNFUlQgSU5UTyBUZXN0
IFZBTFVFUyAoNSkgICA7Iik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgZmFsc2UsICJJTlNF
UlQgSU5UTyBUZXN0IFZBTFVFUyAoNik7IGdhcmJhZ2UiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50
KHR4LCBmYWxzZSwgIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg3KTsgSU5TRVJUIElOVE8gVGVz
dCBWQUxVRVMgKDgpIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgZmFsc2UsICIgIElOU0VS
VCBJTlRPIFRlc3QgVkFMVUVTICg5KTsgICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMTApOyAg
ICIpOworfSk7Citwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJl
bnQtaGFuZGxlcy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhh
bmRsZXMtc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRs
ZXMtc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorZnVuY3Rpb24gcnVuVHJh
bnNhY3Rpb24oZGIpCit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAg
ICAvLyBFeGVjdXRlIGEgcmVhZC1vbmx5IHN0YXRlbWVudAorICAgICAgIHR4LmV4ZWN1dGVTcWwo
IlNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7Iik7CisKKyAgICAgICAvLyBFeGVjdXRlIGEgd3Jp
dGUgc3RhdGVtZW50IHRvIG1ha2Ugc3VyZSBTUUxpdGUgdHJpZXMgdG8gYWNxdWlyZSBhbiBleGNs
dXNpdmUgbG9jayBvbiB0aGUgREIgZmlsZQorICAgICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJ
TlRPIFRlc3QgVkFMVUVTICg/KTsiLCBbMV0pOworICAgIH0pOworfQorCit2YXIgZGIxID0gb3Bl
bkRhdGFiYXNlU3luYygiTXVsdGlwbGVUcmFuc2FjdGlvbnNPbkRpZmZlcmVudEhhbmRsZXNUZXN0
IiwgIjEuMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdCB0cmFuc2FjdGlvbnMg
b24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhlIHNhbWUgREIuIiwgMSk7CitkYjEudHJhbnNhY3Rp
b24oZnVuY3Rpb24odHgpIHsKKyAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9U
IEVYSVNUUyBUZXN0IChGb28gaW50KTsiKTsKK30pOworCit2YXIgZGIyID0gb3BlbkRhdGFiYXNl
U3luYygiTXVsdGlwbGVUcmFuc2FjdGlvbnNPbkRpZmZlcmVudEhhbmRsZXNUZXN0IiwgIjEuMCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdCB0cmFuc2FjdGlvbnMgb24gZGlmZmVy
ZW50IGhhbmRsZXMgdG8gdGhlIHNhbWUgREIuIiwgMSk7CitpZiAoZGIxID09IGRiMikKKyAgICBw
b3N0TWVzc2FnZSgiRkFJTDogZGIxID09IGRiMiIpOworZWxzZSB7CisgICAgdHJ5IHsKKyAgICAg
ICAgcnVuVHJhbnNhY3Rpb24oZGIxKTsKKyAgICAgICAgcnVuVHJhbnNhY3Rpb24oZGIyKTsKKyAg
ICAgICAgcG9zdE1lc3NhZ2UoIlBBU1MiKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAg
cG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIpOworICAgIH0KK30KKworcG9zdE1lc3NhZ2UoImRv
bmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9t
dWx0aXBsZS10cmFuc2FjdGlvbnMtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLXN5bmMu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNv
dXJjZXMvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzIgQEAKK3ZhciBjb21wbGV0ZSA9IDA7CisKK2Z1bmN0aW9uIGNoZWNrQ29tcGxldGlvbigp
Cit7CisgICAgaWYgKCsrY29tcGxldGUgPT0gMiAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVu
Y3Rpb24gcnVuVGVzdCgpCit7CisgICAgdmFyIGRiID0gb3BlbkRhdGFiYXNlV2l0aFN1ZmZpeCgi
TXVsdGlwbGVUcmFuc2FjdGlvbnNUZXN0IiwgIjEuMCIsICJUZXN0IHRvIG1ha2Ugc3VyZSBtdWx0
aXBsZSB0cmFuc2FjdGlvbnMgY2FuIGJlIHF1ZXVlZCBhdCBvbmNlIGZvciBhbiBIVE1MNSBkYXRh
YmFzZSIsIDMyNzY4KTsKKworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAg
ICAgIGxvZygiVHJhbnNhY3Rpb24gMSBTdGFydGVkIik7CisgICAgfSwgZnVuY3Rpb24oZXJyKSB7
CisgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gMSBFcnJvcmVkIC0gIiArIGVycik7CisgICAgICAg
IGNoZWNrQ29tcGxldGlvbigpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBsb2coIlRy
YW5zYWN0aW9uIDEgU3VjY2VlZGVkIik7CisgICAgICAgIGNoZWNrQ29tcGxldGlvbigpOworICAg
IH0pOworCisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgbG9nKCJU
cmFuc2FjdGlvbiAyIFN0YXJ0ZWQiKTsKKyAgICB9LCBmdW5jdGlvbihlcnIpIHsKKyAgICAgICAg
bG9nKCJUcmFuc2FjdGlvbiAyIEVycm9yZWQgLSAiICsgZXJyKTsKKyAgICAgICAgY2hlY2tDb21w
bGV0aW9uKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygiVHJhbnNhY3Rpb24g
MiBTdWNjZWVkZWQiKTsKKyAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgfSk7Cit9Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNh
bGxiYWNrLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmpz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACit2YXIgY3JlYXRpb25DYWxsYmFja0NhbGxl
ZDEgPSBmYWxzZTsKK3ZhciBkYjFOYW1lID0gIk9wZW5EYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2sx
IiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7Cit2YXIgZGIyTmFtZSA9ICJPcGVuRGF0YWJhc2VD
cmVhdGlvbkNhbGxiYWNrMiIgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpOwordmFyIGRiMSA9IG9w
ZW5EYXRhYmFzZVN5bmMoZGIxTmFtZSwgIjEuMCIsICIiLCAxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24oZGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b3N0TWVzc2FnZSgiUEFTUzogQ3JlYXRpb24gY2FsbGJhY2sgd2FzIGNhbGxlZC4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGIudmVyc2lvbiAhPSAiIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IFdyb25nIHZlcnNp
b24gIiArIGRiLnZlcnNpb24gKyAiOyBlbXB0eSBzdHJpbmcgZXhwZWN0ZWQuIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogVmVyc2lvbiBzZXQgdG8gZW1wdHkgc3RyaW5nIGFz
IGV4cGVjdGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisKK3ZhciBkYjFG
YWlsID0gbnVsbDsKK3RyeSB7CisgICAgZGIxRmFpbCA9IG9wZW5EYXRhYmFzZVN5bmMoZGIxTmFt
ZSwgIjEuMCIsICIiLCAxKTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogQW4gSU5WQUxJRF9TVEFU
RV9FUlIgZXhjZXB0aW9uIHNob3VsZCd2ZSBiZWVuIHRocm93bi4iKTsKK30gY2F0Y2goZXJyKSB7
CisgICAgaWYgKGRiMUZhaWwpCisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBkYjFGYWlsIHNo
b3VsZCBoYXZlIGJlZW4gbnVsbC4iKTsKKyAgICBlbHNlCisgICAgICAgIHBvc3RNZXNzYWdlKCJQ
QVNTOiBBbiBleGNlcHRpb24gd2FzIHRocm93biBhbmQgZGIxRmFpbCBpcyBudWxsIGFzIGV4cGVj
dGVkLiIpOworfQorCisvLyBPcGVuIGEgaGFuZGxlIHRvIGFub3RoZXIgZGF0YWJhc2UsIGZpcnN0
IHdpdGhvdXQgYSBjcmVhdGlvbiBjYWxsYmFjaywgdGhlbiB3aXRoIG9uZS4KKy8vIE1ha2Ugc3Vy
ZSB0aGUgY3JlYXRpb24gY2FsbGJhY2sgaXMgbm90IGNhbGxlZC4KK3ZhciBkYjIgPSBvcGVuRGF0
YWJhc2VTeW5jKGRiMk5hbWUsICIxLjAiLCAiIiwgMSk7CitkYjIgPSBvcGVuRGF0YWJhc2VTeW5j
KGRiMk5hbWUsICIxLjAiLCAiIiwgMSwgZnVuY3Rpb24oZGIpIHsgcG9zdE1lc3NhZ2UoIkZBSUw6
IENyZWF0aW9uIGNhbGxiYWNrIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZC4iKTsgfSk7CisK
K3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4t
ZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtZW1wdHktdmVy
c2lvbi1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK3RyeSB7CisgICAgdmFy
IGRiID0gb3BlbkRhdGFiYXNlU3luYygiT3BlbkRhdGFiYXNlRW1wdHlWZXJzaW9uVGVzdCIsICIi
LCAiVGVzdCB0aGF0IHdlIGNhbiBvcGVuIGRhdGFiYXNlcyB3aXRoIGFuIGVtcHR5IHZlcnNpb24u
IiwgMSk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1MiKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBv
c3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyKTsKK30KK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFz
ZS1pbnB1dHMtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5qcwkocmV2aXNpb24g
NjIyMzApCShmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9v
cGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzOjYyMjMwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAordmFyIGRiOworCit2YXIgbm90QVN0cmluZyA9
IHsKKyAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7IHRocm93ICJmb28iOyB9Cit9OworCit0cnkg
eworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygpOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBj
YWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRob3V0IGFueSBhcmd1bWVudCBzaG91bGQgdGhy
b3cgYW4gZXhjZXB0aW9uLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIlBB
U1M6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VT
eW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIik7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNhbGxp
bmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGggZmV3ZXIgdGhhbiBmb3VyIGFyZ3VtZW50cyBzaG91
bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3Nh
Z2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0
YWJhc2VTeW5jKG5vdEFTdHJpbmcsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQp
OworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gb3BlbkRhdGFi
YXNlU3luYygpIG11c3QgYmUgYSBzdHJpbmcuIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0
TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsKKyAgICBkYiA9IG9w
ZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsIG5vdEFTdHJpbmcsICJEQkRlc2NyaXB0aW9uIiwgMTAy
NCk7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gb3BlbkRh
dGFiYXNlU3luYygpIG11c3QgYmUgYSBzdHJpbmcuIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBw
b3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsKKyAgICBkYiA9
IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCBub3RBU3RyaW5nLCAxMDI0
KTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIHRoaXJkIGFyZ3VtZW50IHRvIG9wZW5EYXRh
YmFzZVN5bmMoKSBtdXN0IGJlIGEgc3RyaW5nLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9z
dE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBv
cGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAx
MDI0LCAwKTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIGZpZnRoIGFyZ3VtZW50IHRvIG9w
ZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGFuIG9iamVjdCwgaWYgcHJlc2VudC4iKTsKK30gY2F0
Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOworfQor
Cit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIs
ICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRh
YmFzZVN5bmMoKSBzdWNjZWVkZWQuIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2Fn
ZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKK30KKworLy8gUnVuIHRoaXMgdGVzdCBjYXNlIG9u
ZSBtb3JlIHRpbWUsIHRvIHRlc3QgdGhlIGNvZGUgd2l0aCBhbiBleGlzdGluZyBkYXRhYmFzZS4K
K3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwg
IkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFi
YXNlU3luYygpIHN1Y2NlZWRlZC4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCit0cnkgeworICAgIC8vIE5lZWQgdG8gY3Jl
YXRlIGEgbmV3IGRhdGFiYXNlLCBvdGhlcndpc2UgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIHdvbid0
IGJlIGludm9rZWQuCisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWVDcmVhdGlvbkNh
bGxiYWNrIiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksICJEQlZlcnNpb24iLCAiREJEZXNjcmlw
dGlvbiIsIDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGRiKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2FsbGluZyBv
cGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0
TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKK30KKworcG9zdE1lc3NhZ2UoImRvbmUi
KTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVu
LWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc2V0LWVt
cHR5LXZlcnNpb24tc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5
bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAordmFyIGRiID0gb3BlbkRhdGFiYXNl
U3luYygiT3BlbkRhdGFiYXNlU2V0RW1wdHlWZXJzaW9uVGVzdCIsICIiLCAiVGVzdCB0aGF0IHRo
ZSBEQiB2ZXJzaW9uIGlzIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nLiIsIDEpOworCit0cnkgewor
ICAgIHZhciBkYjIgPSBvcGVuRGF0YWJhc2VTeW5jKCJPcGVuRGF0YWJhc2VTZXRFbXB0eVZlcnNp
b25UZXN0IiwgInRlc3QiLCAiVGVzdCB0aGF0IHRoZSBEQiB2ZXJzaW9uIGlzIHNldCB0byB0aGUg
ZW1wdHkgc3RyaW5nLiIsIDEpOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBBbiBleGNlcHRpb24g
c2hvdWxkJ3ZlIGJlZW4gdGhyb3duLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3Nh
Z2UoIlBBU1MiKTsKK30KK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJj
ZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwkocmV2aXNpb24gNjIzNDQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5j
LWlucHV0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw3NCArMCwwIEBACi12YXIgZGI7Ci0KLXZh
ciBub3RBU3RyaW5nID0gewotICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsgdGhyb3cgImZvbyI7
IH0KLX07Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCk7Ci0gICAgcG9zdE1l
c3NhZ2UoIkZBSUw6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGhvdXQgYW55IGFyZ3Vt
ZW50IHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBw
b3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5IHsKLSAgICBkYiA9
IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iKTsKLSAgICBwb3N0TWVzc2Fn
ZSgiRkFJTDogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBmZXdlciB0aGFuIGZvdXIg
YXJndW1lbnRzIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIik7Ci19IGNhdGNoIChlcnIpIHsK
LSAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5IHsKLSAg
ICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMobm90QVN0cmluZywgIkRCVmVyc2lvbiIsICJEQkRlc2Ny
aXB0aW9uIiwgMTAyNCk7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBmaXJzdCBhcmd1bWVu
dCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKLX0gY2F0Y2ggKGVy
cikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi10cnkg
ewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgbm90QVN0cmluZywgIkRCRGVz
Y3JpcHRpb24iLCAxMDI0KTsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIHNlY29uZCBhcmd1
bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKLX0gY2F0Y2gg
KGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi10
cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsIG5v
dEFTdHJpbmcsIDEwMjQpOwotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgdGhpcmQgYXJndW1l
bnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11c3QgYmUgYSBzdHJpbmcuIik7Ci19IGNhdGNoIChl
cnIpIHsKLSAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5
IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJE
ZXNjcmlwdGlvbiIsIDEwMjQsIDApOwotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgZmlmdGgg
YXJndW1lbnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11c3QgYmUgYW4gb2JqZWN0LCBpZiBwcmVz
ZW50LiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIu
bWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUi
LCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKLSAgICBwb3N0TWVzc2FnZSgi
UEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4iKTsKLX0gY2F0Y2ggKGVycikgewot
ICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi0vLyBSdW4gdGhp
cyB0ZXN0IGNhc2Ugb25lIG1vcmUgdGltZSwgdG8gdGVzdCB0aGUgY29kZSB3aXRoIGFuIGV4aXN0
aW5nIGRhdGFiYXNlLgotdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIs
ICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwotICAgIHBvc3RNZXNzYWdlKCJQ
QVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0g
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAg
Ly8gTmVlZCB0byBjcmVhdGUgYSBuZXcgZGF0YWJhc2UsIG90aGVyd2lzZSB0aGUgY3JlYXRpb24g
Y2FsbGJhY2sgd29uJ3QgYmUgaW52b2tlZC4KLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRC
TmFtZUNyZWF0aW9uQ2FsbGJhY2siICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwgIkRCVmVyc2lv
biIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24oZGIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQ
QVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sg
c3VjY2VlZGVkLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLX0gY2F0Y2ggKGVy
cikgewotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi1wb3N0
TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
cmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3lu
Yy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNv
dXJjZXMvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorZnVuY3Rpb24gb3BlblRlc3REYXRhYmFzZSgp
Cit7CisgICAgcmV0dXJuIG9wZW5EYXRhYmFzZVN5bmMoIk9wZW5EYXRhYmFzZVdoaWxlVHJhbnNh
Y3Rpb25JblByb2dyZXNzVGVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEuMCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgY2Fs
bGluZyBvcGVuRGF0YWJhc2UoKSB3aGlsZSBhIHRyYW5zYWN0aW9uIGlzIGluIHByb2dyZXNzIG9u
IGEgZGlmZmVyZW50IGhhbmRsZSB0byB0aGUgc2FtZSBkYXRhYmFzZSBkb2VzIG5vdCByZXN1bHQg
aW4gYSBkZWFkbG9jay4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxMDAwMDApOyAv
LyAyTUIgKyBlcHNpbG9uCit9CisKKy8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjgyMDcKKy8vIEluIG9yZGVyIHRvIHRyaWdnZXIgdGhpcyBidWcsIHRoZSB0
cmFuc2FjdGlvbiBtdXN0IGFjcXVpcmUgYW4gZXhjbHVzaXZlCisvLyBsb2NrIG9uIHRoZSBEQiBm
aWxlIGJlZm9yZSB0cnlpbmcgdG8gb2J0YWluIGEgc2Vjb25kIGhhbmRsZSB0byB0aGUgc2FtZSBE
Qi4KKy8vIFRoZSBvbmx5IHdheSB0byBmb3JjZSBTUUxpdGUgdG8gb2J0YWluIGFuIGV4Y2x1c2l2
ZSBsb2NrIGlzIHRvIGNoYW5nZSBtb3JlCisvLyB0aGFuIGNhY2hlX3NpemUgKiBwYWdlX3NpemUg
Ynl0ZXMgaW4gdGhlIGRhdGFiYXNlLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IKKy8vIGNhY2hlX3Np
emUgaXMgMjAwMCBwYWdlcywgYW5kIHRoZSBkZWZhdWx0IHBhZ2Vfc2l6ZSBpcyAxMDI0IGJ5dGVz
LiBTbyB0aGUKKy8vIHNpemUgb2YgdGhlIGJsb2IgbXVzdCBiZSBhdCBsZWFzdCAyTUIuCit2YXIg
ZGIxID0gb3BlblRlc3REYXRhYmFzZSgpOworZGIxLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7
CisgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9v
IEJMT0IpOyIpOworICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICha
RVJPQkxPQigyMDk3MTUyKSk7Iik7CisgICAgdmFyIGRiMiA9IG9wZW5UZXN0RGF0YWJhc2UoKTsK
KyAgICBwb3N0TWVzc2FnZSgiUEFTUzogc2Vjb25kIGhhbmRsZSBvcGVuZWQgc3VjY2Vzc2Z1bGx5
LiIpOworCisgICAgLy8gQ2xlYW4gdXAgdGhlIERCIHRvIGFsbG93IGZvciByZXBlYXRlZCBydW5z
IG9mIHRoaXMgdGVzdAorICAgIC8vIHdpdGhvdXQgbmVlZGluZyB0byBpbmNyZWFzZSB0aGUgZGVm
YXVsdCBhbGxvd2VkIHF1b3RhICg1TUIpCisgICAgdHguZXhlY3V0ZVNxbCgiREVMRVRFIEZST00g
VGVzdDsiKTsKK30pOworCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3NxbC1kYXRhLXR5cGVzLXN5bmMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3Nx
bC1kYXRhLXR5cGVzLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvc3FsLWRhdGEtdHlwZXMtc3luYy5qcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzNiBAQAordmFyIHRlc3RWYWx1ZXMgPSB7CisgICAgdGltZXN0YW1wOiBu
ZXcgRGF0ZSgiV2VkIEZlYiAwNiAyMDA4IDEyOjE2OjUyIEdNVCswMjAwIChFRVQpIikudmFsdWVP
ZigpLAorICAgIGlkOiAxMDAxLAorICAgIHJlYWw6IDEwMS40NDQsCisgICAgdGV4dDogIldlYktp
dCBkYiBURVhUIiwKKyAgICBibG9iOiAic3VwZXJjYWxpZnJhZ2lsaXN0aWMiCit9OworCitmdW5j
dGlvbiBzaG91bGRCZVNhbWVUeXBlQW5kVmFsdWUocHJvcE5hbWUsIHRlc3RWYWx1ZSwgcmVzdWx0
KSB7CisgICAgaWYgKHRlc3RWYWx1ZSA9PSByZXN1bHQgJiYgdHlwZW9mIHRlc3RWYWx1ZSA9PSB0
eXBlb2YgcmVzdWx0KQorICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogcHJvcGVydHkgJyIgKyBw
cm9wTmFtZSArICInIE9LLCB0eXBlIHdhcyAiICsgdHlwZW9mIHJlc3VsdCk7CisgICAgZWxzZQor
ICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogcHJvcGVydHkgJyIgKyBwcm9wTmFtZSArICInIGZh
aWxlZDsgIiArCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAiICsgdHlwZW9mIHRlc3RW
YWx1ZSArICI6JyIgKyB0ZXN0VmFsdWUgKyAiJywgIiArCisgICAgICAgICAgICAgICAgICAgICJn
b3QgIiArIHR5cGVvZiByZXN1bHQgKyAiOiciICsgcmVzdWx0ICsiJyIpOworfQorCitmdW5jdGlv
biB0ZXN0REJWYWx1ZXMocmVzdWx0KSB7CisgICAgdmFyIGkgPSAidGltZXN0YW1wIjsgc2hvdWxk
QmVTYW1lVHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7CisgICAgaSA9
ICJpZCI7IHNob3VsZEJlU2FtZVR5cGVBbmRWYWx1ZShpLCB0ZXN0VmFsdWVzW2ldLCByZXN1bHRb
aV0pOworICAgIGkgPSAicmVhbCI7IHNob3VsZEJlU2FtZVR5cGVBbmRWYWx1ZShpLCB0ZXN0VmFs
dWVzW2ldLCByZXN1bHRbaV0pOworICAgIGkgPSAidGV4dCI7IHNob3VsZEJlU2FtZVR5cGVBbmRW
YWx1ZShpLCB0ZXN0VmFsdWVzW2ldLCByZXN1bHRbaV0pOworICAgIGkgPSAiYmxvYiI7IHNob3Vs
ZEJlU2FtZVR5cGVBbmRWYWx1ZShpLCB0ZXN0VmFsdWVzW2ldLCByZXN1bHRbaV0pOworfQorCit2
YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJTUUxEYXRhVHlwZXNUZXN0IiwgIjEuMCIsICJEYXRh
YmFzZSBmb3IgU1FMIGRhdGEgdHlwZSB0ZXN0IiwgMSk7CitkYi50cmFuc2FjdGlvbihmdW5jdGlv
bih0eCkgeworICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIERh
dGFUeXBlVGVzdFRhYmxlIChpZCBJTlRFR0VSIFVOSVFVRSwgcmVhbCBSRUFMLCB0aW1lc3RhbXAg
SU5URUdFUiwgdGV4dCBURVhULCBibG9iIEJMT0IpIik7CisgICAgdHguZXhlY3V0ZVNxbCgiSU5T
RVJUIElOVE8gRGF0YVR5cGVUZXN0VGFibGUgKGlkLCByZWFsLCB0aW1lc3RhbXAsIHRleHQsIGJs
b2IpIFZBTFVFUyAoPyw/LD8sPyw/KSIsCisgICAgICAgICAgICAgICAgICBbdGVzdFZhbHVlcy5p
ZCwgdGVzdFZhbHVlcy5yZWFsLCB0ZXN0VmFsdWVzLnRpbWVzdGFtcCwgdGVzdFZhbHVlcy50ZXh0
LCB0ZXN0VmFsdWVzLmJsb2JdKTsKKyAgICB2YXIgcmVzdWx0ID0gdHguZXhlY3V0ZVNxbCgiU0VM
RUNUICogRlJPTSBEYXRhVHlwZVRlc3RUYWJsZSIpOworICAgIHRlc3REQlZhbHVlcyhyZXN1bHQu
cm93cy5pdGVtKDApKTsKKyAgICB0eC5leGVjdXRlU3FsKCJEUk9QIFRBQkxFIERhdGFUeXBlVGVz
dFRhYmxlIik7Cit9KTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5
bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYgQEAKK3ZhciBkYk5hbWUgPSAiU1FMRXhj
ZXB0aW9uQ29kZXNUZXN0IiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CisKK2Z1bmN0aW9uIHRl
c3RUcmFuc2FjdGlvbihkYiwgZXhlY3V0ZVN0YXRlbWVudHNDYWxsYmFjaywgZXhwZWN0ZWRFcnJv
ckNvZGVOYW1lKQoreworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAg
IHRyeSB7CisgICAgICAgICAgICBleGVjdXRlU3RhdGVtZW50c0NhbGxiYWNrKHR4KTsKKyAgICAg
ICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBhbiBleGNlcHRpb24gKCIgKyBleHBlY3RlZEVycm9y
Q29kZU5hbWUgKyAiKSBzaG91bGQndmUgYmVlbiB0aHJvd24uIik7CisgICAgICAgIH0gY2F0Y2gg
KGVycikgeworICAgICAgICAgICAgaWYgKGVyci5jb2RlID09IGVycltleHBlY3RlZEVycm9yQ29k
ZU5hbWVdKQorICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBleHBlY3RlZCBhbmQg
Z290IGVycm9yIGNvZGUgIiArIGV4cGVjdGVkRXJyb3JDb2RlTmFtZSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGV4cGVjdGVkIGVycm9yIGNv
ZGUgIiArIGV4cGVjdGVkRXJyb3JDb2RlTmFtZSArICIgKCIgKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycltleHBlY3RlZEVycm9yQ29kZU5hbWVdICsgIiksIGdvdCAiICsgZXJyLmNv
ZGUpOworICAgICAgICB9CisgICAgICB9KTsKK30KKworZnVuY3Rpb24gdGVzdFRyYW5zYWN0aW9u
VGhyb3dzRXhjZXB0aW9uKGRiKQoreworICAgIHRlc3RUcmFuc2FjdGlvbihkYiwgZnVuY3Rpb24o
dHgpIHsgdGhyb3cgIkV4Y2VwdGlvbiB0aHJvd24gaW4gdHJhbnNhY3Rpb24gY2FsbGJhY2suIjsg
fSwgIlVOS05PV05fRVJSIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RJbnZhbGlkU3RhdGVtZW50KGRi
KQoreworICAgIHRlc3RUcmFuc2FjdGlvbihkYiwgZnVuY3Rpb24odHgpIHsgdHguZXhlY3V0ZVNx
bCgiQkFEIFNUQVRFTUVOVCIpOyB9LCAiU1lOVEFYX0VSUiIpOworfQorCitmdW5jdGlvbiB0ZXN0
SW5jb3JyZWN0TnVtYmVyT2ZCaW5kUGFyYW1ldGVycyhkYikKK3sKKyAgICB0ZXN0VHJhbnNhY3Rp
b24oZGIsCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBCYWRC
aW5kTnVtYmVyVGVzdCAoRm9vIElOVCwgQmFyIElOVCkiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJTlRPIEJhZEJpbmROdW1iZXJUZXN0IFZBTFVFUyAo
PywgPykiLCBbMV0pOworICAgICAgICAgICAgICAgICAgICB9LCAiU1lOVEFYX0VSUiIpOworfQor
CitmdW5jdGlvbiB0ZXN0QmluZFBhcmFtZXRlck9mV3JvbmdUeXBlKGRiKQoreworICAgIHZhciBi
YWRTdHJpbmcgPSB7IH07CisgICAgYmFkU3RyaW5nLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHRo
cm93ICJDYW5ub3QgY2FsbCB0b1N0cmluZygpIG9uIHRoaXMgb2JqZWN0LiIgfTsKKworICAgIHRl
c3RUcmFuc2FjdGlvbihkYiwgZnVuY3Rpb24odHgpIHsKKyAgICAgICAgdHguZXhlY3V0ZVNxbCgi
Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQmFkQmluZFR5cGVUZXN0IChGb28gVEVYVCkiKTsK
KyAgICAgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8gQmFkQmluZFR5cGVUZXN0IFZBTFVF
UyAoPykiLCBbYmFkU3RyaW5nXSk7CisgICAgfSwgIlVOS05PV05fRVJSIik7Cit9CisKK2Z1bmN0
aW9uIHRlc3RRdW90YUV4Y2VlZGVkKGRiKQoreworICAgIC8vIFNvbWV0aW1lcywgU1FMaXRlIGF1
dG9tYXRpY2FsbHkgcm9sbHMgYmFjayBhIHRyYW5zYWN0aW9uIGlmIGV4ZWN1dGluZyBhIHN0YXRl
bWVudCBmYWlscy4KKyAgICAvLyBUaGlzIHNlZW1zIHRvIGJlIG9uZSBvZiB0aG9zZSBjYXNlcy4K
KyAgICB0cnkgeworICAgICAgICB0ZXN0VHJhbnNhY3Rpb24oZGIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4LmV4
ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFF1b3RhVGVzdCAoRm9vIEJMT0Ip
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJUIElO
VE8gUXVvdGFUZXN0IFZBTFVFUyAoWkVST0JMT0IoMTAgKiAxMDI0ICogMTAyNCkpIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9LCAiUVVPVEFfRVJSIik7CisgICAgICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiBUcmFuc2FjdGlvbiBzaG91bGQndmUgYmVlbiByb2xsZWQgYmFjayBieSBTUUxpdGUu
Iik7CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGlmIChlcnIuY29kZSA9PSBlcnJbIkRB
VEFCQVNFX0VSUiJdKQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IFRyYW5zYWN0aW9u
IHdhcyByb2xsZWQgYmFjayBieSBTUUxpdGUgYXMgZXhwZWN0ZWQuIik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBBbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiB3
YXMgdGhyb3duOiAiICsgZXJyKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RWZXJzaW9uTWlz
bWF0Y2goZGIpCit7CisgICAgdmFyIGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoZGJOYW1lLCAiMS4w
IiwgIlRlc3RzIHRoZSBlcnJvciBjb2Rlcy4iLCAxKTsKKyAgICBkYjIuY2hhbmdlVmVyc2lvbigi
MS4wIiwgIjIuMCIsIGZ1bmN0aW9uKHR4KSB7IH0pOworICAgIHRlc3RUcmFuc2FjdGlvbihkYiwK
KyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHR4LmV4ZWN1dGVTcWwoIlRISVMgU1RBVEVNRU5UIFNIT1VMRCBORVZFUiBHRVQgRVhFQ1VU
RUQiKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgIlZFUlNJT05fRVJSIik7Cit9CisKK3ZhciBk
YiA9IG9wZW5EYXRhYmFzZVN5bmMoZGJOYW1lLCAiMS4wIiwgIlRlc3RzIHRoZSBleGNlcHRpb24g
Y29kZXMuIiwgMSk7Cit0ZXN0VHJhbnNhY3Rpb25UaHJvd3NFeGNlcHRpb24oZGIpOwordGVzdElu
dmFsaWRTdGF0ZW1lbnQoZGIpOwordGVzdEluY29ycmVjdE51bWJlck9mQmluZFBhcmFtZXRlcnMo
ZGIpOwordGVzdEJpbmRQYXJhbWV0ZXJPZldyb25nVHlwZShkYik7Cit0ZXN0UXVvdGFFeGNlZWRl
ZChkYik7Cit0ZXN0VmVyc2lvbk1pc21hdGNoKGRiKTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90ZXN0LWF1
dGhvcml6ZXItc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9yZXNvdXJjZXMvdGVzdC1hdXRob3JpemVyLXN5bmMuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvdGVzdC1hdXRob3Jp
emVyLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACitmdW5jdGlvbiBjbGVh
bnVwKGRiKQoreworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAg
ICB0eC5leGVjdXRlU3FsKCJEUk9QIFRBQkxFIElGIEVYSVNUUyBUZXN0Iik7CisgICAgICAgICAg
ICB0eC5leGVjdXRlU3FsKCJEUk9QIElOREVYIElGIEVYSVNUUyBUZXN0SW5kZXgiKTsKKyAgICAg
ICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgVklFVyBJRiBFWElTVFMgVGVzdFZpZXciKTsKKyAg
ICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgVFJJR0dFUiBJRiBFWElTVFMgVGVzdFRyaWdn
ZXIiKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gZXhlY3V0ZVN0YXRlbWVudCh0eCwgc3RhdGVt
ZW50LCBvcGVyYXRpb24pCit7CisgICAgdHJ5IHsKKyAgICAgICAgdHguZXhlY3V0ZVNxbChzdGF0
ZW1lbnQpOworICAgICAgICBwb3N0TWVzc2FnZShvcGVyYXRpb24gKyAiIHN0YXRlbWVudCBzdWNj
ZWVkZWQuIik7CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIHBvc3RNZXNzYWdlKG9wZXJh
dGlvbiArICIgc3RhdGVtZW50IGZhaWxlZDogIiArIGVyciArICIgKCIgKyBlcnIuY29kZSArICIp
Iik7CisgICAgfQorfQorCitmdW5jdGlvbiBjcmVhdGVUYWJsZUNhbGxiYWNrKHR4KQoreworICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEFCTEUgVGVzdCAoRm9vIGludCkiLCAiU1FM
SVRFX0NSRUFURV9UQUJMRSIpOworfQorCitmdW5jdGlvbiBjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJh
Y2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBJTkRFWCBUZXN0SW5k
ZXggT04gVGVzdCAoRm9vKSIsICJTUUxJVEVfQ1JFQVRFX0lOREVYIik7CisKKyAgICAvLyBFdmVu
IHRob3VnaCB0aGUgZm9sbG93aW5nIHF1ZXJ5IHNob3VsZCB0cmlnZ2VyIGEgU1FMSVRFX0NSRUFU
RV9URU1QX0lOREVYIG9wZXJhdGlvbgorICAgIC8vIChhY2NvcmRpbmcgdG8gaHR0cDovL3d3dy5z
cWxpdGUub3JnL3RlbXBmaWxlcy5odG1sKSwgaXQgZG9lc24ndCwgYW5kIEknbSBub3QgYXdhcmUK
KyAgICAvLyBvZiBhbnkgb3RoZXIgd2F5IHRvIHRyaWdnZXIgdGhpcyBvcGVyYXRpb24uIFNvIHdl
J2xsIHNraXAgaXQgZm9yIG5vdy4KKyAgICAvL2V4ZWN1dGVTdGF0ZW1lbnQodHgsICJTRUxFQ1Qg
KiBGUk9NIFRlc3QgV0hFUkUgRm9vIElOICgxLCAyLCAzKSIsICJTUUxJVEVfQ1JFQVRFX1RFTVBf
SU5ERVgiKTsKKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBUQUJMRSBU
ZXN0VGVtcFRhYmxlIChGb28gaW50KSIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUiKTsKKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRFTVAgVFJJR0dFUiBUZXN0VGVtcFRyaWdn
ZXIgSU5TRVJUIE9OIFRlc3QgQkVHSU4gU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsgRU5EIiwg
IlNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwg
IkNSRUFURSBURU1QIFZJRVcgVGVzdFRlbXBWaWV3IEFTIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRl
c3QiLCAiU1FMSVRFX0NSRUFURV9URU1QX1ZJRVciKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiQ1JFQVRFIFRSSUdHRVIgVGVzdFRyaWdnZXIgSU5TRVJUIE9OIFRlc3QgQkVHSU4gU0VMRUNU
IENPVU5UKCopIEZST00gVGVzdDsgRU5EIiwgIlNRTElURV9DUkVBVEVfVFJJR0dFUiIpOworICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVklFVyBUZXN0VmlldyBBUyBTRUxFQ1QgQ09V
TlQoKikgRlJPTSBUZXN0IiwgIlNRTElURV9DUkVBVEVfVklFVyIpOworCisgICAgLy8gV2Ugc2hv
dWxkIHRyeSB0byBjcmVhdGUgYSB2aXJ0dWFsIHRhYmxlIHVzaW5nIGZ0czMsIHdoZW4gV2ViS2l0
J3Mgc3FsaXRlIGxpYnJhcnkgc3VwcG9ydHMgaXQuCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwg
IkNSRUFURSBWSVJUVUFMIFRBQkxFIFRlc3RWaXJ0dWFsVGFibGUgVVNJTkcgVW5zdXBwb3J0ZWRN
b2R1bGUiLCAiU1FMSVRFX0NSRUFURV9WVEFCTEUiKTsKK30KKworZnVuY3Rpb24gb3RoZXJTdGF0
ZW1lbnRzQ2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCBD
T1VOVCgqKSBGUk9NIFRlc3QiLCAiU1FMSVRFX1JFQUQiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50
KHR4LCAiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdCIsICJTUUxJVEVfU0VMRUNUIik7CisgICAg
ZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRFTEVURSBGUk9NIFRlc3QiLCAiU1FMSVRFX0RFTEVURSIp
OworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMSki
LCAiU1FMSVRFX0lOU0VSVCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJVUERBVEUgVGVz
dCBTRVQgRm9vID0gMiBXSEVSRSBGb28gPSAxIiwgIlNRTElURV9VUERBVEUiKTsKKyAgICBleGVj
dXRlU3RhdGVtZW50KHR4LCAiUFJBR01BIGNhY2hlX3NpemUiLCAiU1FMSVRFX1BSQUdNQSIpOwor
CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFMVEVSIFRBQkxFIFRlc3QgUkVOQU1FIFRPIFRl
c3RUYWJsZSIsICJTUUxJVEVfQUxURVJfVEFCTEUiKTsKKyAgICAvLyBSZW5hbWUgdGhlIHRhYmxl
IGJhY2sgdG8gaXRzIG9yaWdpbmFsIG5hbWUKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQUxU
RVIgVEFCTEUgVGVzdFRhYmxlIFJFTkFNRSBUbyBUZXN0IiwgIlNRTElURV9BTFRFUl9UQUJMRSIp
OworCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkJFR0lOIFRSQU5TQUNUSU9OIiwgIlNRTElU
RV9UUkFOU0FDVElPTiIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJBVFRBQ0ggbWFpbiBB
UyBUZXN0TWFpbiIsICJTUUxJVEVfQVRUQUNIIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwg
IkRFVEFDSCBUZXN0TWFpbiIsICJTUUxJVEVfREVUQUNIIik7CisgICAgZXhlY3V0ZVN0YXRlbWVu
dCh0eCwgIlJFSU5ERVgiLCAiU1FMSVRFX1JFSU5ERVgiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50
KHR4LCAiQU5BTFlaRSIsICJTUUxJVEVfQU5BTFlaRSIpOworCisgICAgLy8gU1FMSVRFX0ZVTkNU
SU9OOiBhbGxvd2VkIGluIHdyaXRlIG1vZGUKKyAgICAvLyBUaGVyZSBpcyBubyBTUUwvSmF2YXNj
cmlwdCBBUEkgdG8gYWRkIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgdG8gU1FMaXRlLAorICAgIC8v
IHNvIHdlIGNhbm5vdCB0ZXN0IHRoaXMgb3BlcmF0aW9uCit9CisKK2Z1bmN0aW9uIGRyb3BTdGF0
ZW1lbnRzQ2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgSU5E
RVggVGVzdEluZGV4IiwgIlNRTElURV9EUk9QX0lOREVYIik7CisKKyAgICAvLyBTUUxJVEVfRFJP
UF9URU1QX0lOREVYOiBhbGxvd2VkIGluIHdyaXRlIG1vZGUKKyAgICAvLyBOb3Qgc3VyZSBob3cg
dG8gdGVzdCB0aGlzOiB0ZW1wIGluZGV4ZXMgYXJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCB3aGVu
CisgICAgLy8gdGhlIGRhdGFiYXNlIGlzIGNsb3NlZCwgYnV0IEhUTUw1IGRvZXNuJ3Qgc3BlY2lm
eSBhIGNsb3NlRGF0YWJhc2UoKSBjYWxsLgorCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRS
T1AgVEFCTEUgVGVzdFRlbXBUYWJsZSIsICJTUUxJVEVfRFJPUF9URU1QX1RBQkxFIik7CisgICAg
ZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVFJJR0dFUiBUZXN0VGVtcFRyaWdnZXIiLCAiU1FM
SVRFX0RST1BfVEVNUF9UUklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1Ag
VklFVyBUZXN0VGVtcFZpZXciLCAiU1FMSVRFX0RST1BfVEVNUF9WSUVXIik7CisgICAgZXhlY3V0
ZVN0YXRlbWVudCh0eCwgIkRST1AgVFJJR0dFUiBUZXN0VHJpZ2dlciIsICJTUUxJVEVfRFJPUF9U
UklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVklFVyBUZXN0VmlldyIs
ICJTUUxJVEVfRFJPUF9WSUVXIik7CisKKyAgICAvLyBTUUxJVEVfRFJPUF9WVEFCTEU6IGFsbG93
ZWQgaW4gd3JpdGUgbW9kZQorICAgIC8vIE5vdCBzdXJlIGhvdyB0byB0ZXN0IHRoaXM6IHdlIGNh
bm5vdCBjcmVhdGUgYSB2aXJ0dWFsIHRhYmxlIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgLy8gaGF2
ZSBTUUwvSmF2YXNjcmlwdCBBUElzIHRvIHJlZ2lzdGVyIGEgbW9kdWxlIHRoYXQgaW1wbGVtZW50
cyBhIHZpcnR1YWwgdGFibGUuCisgICAgLy8gVGhlcmVmb3JlLCB0cnlpbmcgdG8gZHJvcCBhIHZp
cnR1YWwgdGFibGUgd2lsbCBhbHdheXMgZmFpbCAobm8gc3VjaCB0YWJsZSkKKyAgICAvLyBiZWZv
cmUgZXZlbiBnZXR0aW5nIHRvIHRoZSBhdXRob3JpemVyLgorCisgICAgZXhlY3V0ZVN0YXRlbWVu
dCh0eCwgIkRST1AgVEFCTEUgVGVzdCIsICJTUUxJVEVfRFJPUF9UQUJMRSIpOworfQorCitmdW5j
dGlvbiB0ZXN0UmVhZFdyaXRlTW9kZShkYikKK3sKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlv
bih0eCkgeworICAgICAgICBwb3N0TWVzc2FnZSgiQmVnaW5uaW5nIHdyaXRlIHRyYW5zYWN0aW9u
OiIpOworICAgICAgICBjcmVhdGVUYWJsZUNhbGxiYWNrKHR4KTsKKyAgICAgICAgY3JlYXRlU3Rh
dGVtZW50c0NhbGxiYWNrKHR4KTsKKyAgICAgICAgb3RoZXJTdGF0ZW1lbnRzQ2FsbGJhY2sodHgp
OworICAgICAgICBkcm9wU3RhdGVtZW50c0NhbGxiYWNrKHR4KTsKKyAgICAgICAgcG9zdE1lc3Nh
Z2UoIldyaXRlIHRyYW5zYWN0aW9uIHN1Y2NlZWRlZC5cbiIpOworICAgIH0pOworfQorCitmdW5j
dGlvbiB0ZXN0UmVhZE9ubHlNb2RlKGRiKQoreworICAgIHBvc3RNZXNzYWdlKCJCZWdpbm5pbmcg
cmVhZCB0cmFuc2FjdGlvbnM6Iik7CisgICAgLy8gVGVzdCB0aGUgJ0NSRUFURSBUQUJMRScgb3Bl
cmF0aW9uOyBpdCBzaG91bGQgYmUgZGlzYWxsb3dlZAorICAgIGRiLnJlYWRUcmFuc2FjdGlvbihj
cmVhdGVUYWJsZUNhbGxiYWNrKTsKKworICAgIC8vIEluIG9yZGVyIHRvIHRlc3QgYWxsIG90aGVy
ICdDUkVBVEUnIG9wZXJhdGlvbnMsIHdlIG11c3QgY3JlYXRlIHRoZSB0YWJsZSBmaXJzdAorICAg
IGRiLnRyYW5zYWN0aW9uKGNyZWF0ZVRhYmxlQ2FsbGJhY2spOworICAgIGRiLnJlYWRUcmFuc2Fj
dGlvbihjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2spOworCisgICAgLy8gSW4gb3JkZXIgdG8gdGVz
dCB0aGUgJ0RST1AnIGFuZCAnb3RoZXInIG9wZXJhdGlvbnMsIHdlIG5lZWQgdG8gZmlyc3QgY3Jl
YXRlIHRoZSByZXNwZWN0aXZlIGVudGl0aWVzCisgICAgZGIudHJhbnNhY3Rpb24oY3JlYXRlU3Rh
dGVtZW50c0NhbGxiYWNrKTsKKyAgICBkYi5yZWFkVHJhbnNhY3Rpb24ob3RoZXJTdGF0ZW1lbnRz
Q2FsbGJhY2spOworICAgIGRiLnJlYWRUcmFuc2FjdGlvbihkcm9wU3RhdGVtZW50c0NhbGxiYWNr
KTsKKyAgICBwb3N0TWVzc2FnZSgiUmVhZCB0cmFuc2FjdGlvbnMgc3VjY2VlZGVkLiIpOworfQor
Cit2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJUZXN0QXV0aG9yaXplclRlc3QiLCAiMS4wIiwg
IlRlc3QgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuIiwgMSk7CitjbGVhbnVwKGRiKTsKK3Rlc3RS
ZWFkV3JpdGVNb2RlKGRiKTsKK3Rlc3RSZWFkT25seU1vZGUoZGIpOworCitwb3N0TWVzc2FnZSgi
ZG9uZSIpOwo=
</data>
<flag name="commit-queue"
          id="47745"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60412</attachid>
            <date>2010-07-02 15:24:03 -0700</date>
            <delta_ts>2010-07-03 02:54:43 -0700</delta_ts>
            <desc>patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>118183</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjQwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODYgQEAKKzIwMTAtMDctMDIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbigpIGFuZCBEYXRhYmFzZVN5
bmM6OmNoYW5nZVZlcnNpb24oKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNjA3CisKKyAgICAgICAgVGVzdHM6IGZhc3Qvd29ya2Vycy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1v
bmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMv
c3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5o
dG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNy
ZWF0aW9uLWNhbGxiYWNrLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0
eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRt
bAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rl
cy1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0
aG9yaXplci1zeW5jLmh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJD
b3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3RvcmFn
ZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJh
c2U6Om1heGltdW1TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6Omlu
Y3JlbWVudGFsVmFjdXVtSWZOZWVkZWQpOgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRh
YmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6c3FsaXRlRGF0YWJh
c2UpOgorICAgICAgICAqIHN0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hhbmdlVmVyc2lvbldyYXBwZXI6OnBlcmZvcm1QcmVmbGlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hhbmdlVmVyc2lvbldyYXBwZXI6OnBlcmZvcm1Qb3N0ZmxpZ2h0KToK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlOjpwZXJmb3JtR2V0VGFibGVOYW1lcyk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5o
OgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVlRhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFZUYWJsZSk6CisgICAgICAgICogc3RvcmFnZS9E
YXRhYmFzZVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhbmdlVmVyc2lvblByZWZsaWdo
dFN0ZXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0
U3RlcDo6cGVyZm9ybVN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6Q2hhbmdlVmVyc2lvblByZWZs
aWdodFN0ZXA6OkNoYW5nZVZlcnNpb25QcmVmbGlnaHRTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3RlcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3RlcDo6cGVyZm9ybVN0ZXApOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpDaGFuZ2VWZXJzaW9uUG9zdGZsaWdo
dFN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6dHJhbnNhY3Rpb24pOgorICAgICAgICAq
IHN0b3JhZ2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRyYWNr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9y
RGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVtZW50U3luYyk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnRTeW5jOjpleGVjdXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFN0YXRlbWVudFN5bmM6OnJlc3VsdFNldCk6CisgICAgICAgICogc3RvcmFn
ZS9TUUxTdGF0ZW1lbnRTeW5jLmg6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25TeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zYWN0aW9uQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6flNRTFRyYW5zYWN0aW9uU3luYyk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTUUwpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpT
UUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb25TeW5jOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5j
Ojpyb2xsYmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jT3B0
aW9uYWxTdGVwOjp+U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwKToKKyAgICAgICAgKiBz
dG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50OjpkaWRDb21taXRUcmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQ6OmRpZEV4ZWN1dGVTdGF0
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50OjpkaWRF
eGNlZWRRdW90YSk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDbGllbnQu
aDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVu
dENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ2xpZW50Ojpk
aWRDb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgICogc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFu
c2FjdGlvblN5bmNDbGllbnRDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50OjpkaWRDb21taXRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50OjpkaWRFeGNlZWRR
dW90YSk6CisKIDIwMTAtMDctMDIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBBZGQgbWlzc2luZyBzeW1ib2wgdG8gZXhwb3J0cyBmaWxlLgpJbmRleDogV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiA2MjQwNykKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTE0MTksMTAgKzE0MTksMTIgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHN0b3JhZ2UvU1FM
UmVzdWx0U2V0LmNwcAogICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAKICAgICBz
dG9yYWdlL1NRTFN0YXRlbWVudC5jcHAKKyAgICBzdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3Bw
CiAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0
aW9uQ2xpZW50LmNwcAogICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAK
ICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAKKyAgICBzdG9yYWdlL1NRTFRyYW5z
YWN0aW9uU3luY0NsaWVudC5jcHAKICAgICBzdG9yYWdlL1N0b3JhZ2UuY3BwCiAgICAgc3RvcmFn
ZS9TdG9yYWdlQXJlYUltcGwuY3BwCiAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCklu
ZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0JKHJldmlzaW9uIDYyNDA3KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29y
a2luZyBjb3B5KQpAQCAtMjUwNCw2ICsyNTA0LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlX
ZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmggXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0
ZW1lbnRDYWxsYmFjay5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAgXAorCVdlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKIAlXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIFwKQEAgLTI1MTQsNyArMjUxNiw5
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjay5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNw
cCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5oIFwKLQlXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAorCVdlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25TeW5jQ2xpZW50LmNwcCBcCisJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0Ns
aWVudC5oCiAKIGVsc2UKIHdlYmNvcmVfY3BwZmxhZ3MgKz0gLURFTkFCTEVfREFUQUJBU0U9MApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHJldmlzaW9uIDYyNDA3KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTM0MTUsNiArMzQxNSw3IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9jaHJvbWl1
bS9RdW90YVRyYWNrZXIuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL2Nocm9taXVtL1F1b3Rh
VHJhY2tlci5oJywKICAgICAgICAgICAgICdzdG9yYWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9u
Q2xpZW50Q2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL2Nocm9taXVtL1NRTFRy
YW5zYWN0aW9uU3luY0NsaWVudENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9E
YXRhYmFzZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvRGF0YWJhc2UuaCcsCiAgICAgICAg
ICAgICAnc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwJywKQEAgLTM0ODQsNiArMzQ4NSw4
IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaCcsCiAgICAgICAgICAgICAn
c3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1NR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxTdGF0
ZW1lbnRTeW5jLmNwcCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmgn
LAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwJywKICAgICAgICAgICAg
ICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25DYWxsYmFjay5oJywKQEAgLTM0OTUsNiArMzQ5OCw4IEBACiAgICAgICAgICAgICAn
c3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uU3luYy5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9u
U3luY0NhbGxiYWNrLmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
Q2xpZW50LmNwcCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDbGll
bnQuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TdG9yYWdlLmNwcCcsCiAgICAgICAgICAgICAn
c3RvcmFnZS9TdG9yYWdlLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZUFyZWEuaCcs
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5wcm8JKHJldmlzaW9uIDYyNDA3KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBj
b3B5KQpAQCAtMjM3NCwxMCArMjM3NCwxMiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfREFU
QUJBU0U9MSkgewogICAgICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldC5jcHAgXAogICAgICAgICBz
dG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TUUxTdGF0
ZW1lbnQuY3BwIFwKKyAgICAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcCBcCiAgICAg
ICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwIFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNsaWVudC5jcHAgXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwIFwKKyAg
ICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDbGllbnQuY3BwIFwKICAgICAgICAgYmlu
ZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBcCiAgICAgICAg
IGJpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMv
SlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwIFwKQEAgLTI0NDcsMTEgKzI0NDksMTMgQEAgY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX0RPTV9TVE9SQUdFPTEpIAogICAgICAgICBzdG9yYWdlL1NRTFJl
c3VsdFNldC5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmggXAogICAg
ICAgICBzdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKKyAgICAgICAgc3RvcmFnZS9TUUxTdGF0ZW1l
bnRTeW5jLmggXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmggXAogICAgICAgICBz
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmggXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
LmggXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggXAorICAg
ICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5oIFwKICAgICAgICAgc3RvcmFn
ZS9TdG9yYWdlQXJlYS5oIFwKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaCBcCiAg
ICAgICAgIHN0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2MjQwNykKKysrIFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5ODQxLDYgKzQ5ODQxLDE0
IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHN0b3JhZ2VcU1FMU3RhdGVtZW50U3luYy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFN0YXRlbWVudFN5bmMuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0
b3JhZ2VcU1FMVHJhbnNhY3Rpb24uY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTQ5ODg1
LDYgKzQ5ODkzLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50LmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2Vc
U1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2UuY3BwIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiA2MjQwNykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00Mjc1LDYgKzQyNzUsMTAgQEAKIAkJQjUyM0NG
MEIxMTgyNjc1NDAwRUJCMjlDIC8qIERhdGFiYXNlU3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUyM0NGMDQxMTgyNjc1NDAwRUJCMjlDIC8qIERh
dGFiYXNlU3luYy5oICovOyB9OwogCQlCNTI1QTk2NTExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxF
eGNlcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI1MjVBOTYzMTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5oICovOyB9OwogCQlC
NTI1QTk2NjExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUyNUE5NjQxMUNBMjM0MDAwM0Ey
M0E4IC8qIEpTU1FMRXhjZXB0aW9uLmNwcCAqLzsgfTsKKwkJQjU1MEI1MjUxMURDNjhBODAwOTIz
ODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjU1MEI1MjExMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVu
dFN5bmMuY3BwICovOyB9OworCQlCNTUwQjUyNjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVt
ZW50U3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjU1MEI1MjIxMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCAqLzsgfTsKKwkJ
QjU1MEI1MjcxMURDNjhBODAwOTIzODg1IC8qIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTUwQjUyMzEx
REM2OEE4MDA5MjM4ODUgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50LmNwcCAqLzsgfTsKKwkJ
QjU1MEI1MjgxMURDNjhBODAwOTIzODg1IC8qIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1MEI1MjQxMURD
NjhBODAwOTIzODg1IC8qIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5oICovOyB9OwogCQlCNTVE
NUFBNDExOTEzMUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RDVBQTIxMTkx
MzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCAqLzsgfTsKIAkJ
QjU1RDVBQTUxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2su
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RDVB
QTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwICov
OyB9OwogCQlCNTVENUFBODExOTEzMjUwMDBCQ0MzMTUgLyogSlNEYXRhYmFzZVN5bmNDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RDVB
QTYxMTkxMzI1MDAwQkNDMzE1IC8qIEpTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcCAqLzsgfTsKQEAg
LTk4MzMsNiArOTgzNywxMCBAQAogCQlCNTIzQ0YwNDExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJh
c2VTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFiYXNlU3luYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTI1QTk2MzExQ0EyMzQwMDAzQTIzQTgg
LyogSlNTUUxFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNT
UUxFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjUyNUE5NjQxMUNB
MjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTU1FMRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQjU1MEI1MjExMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMU3RhdGVtZW50U3luYy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI1NTBCNTIyMTFEQzY4QTgwMDkyMzg4
NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNRTFN0YXRlbWVudFN5bmMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjU1MEI1
MjMxMURDNjhBODAwOTIzODg1IC8qIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNTUwQjUyNDExREM2OEE4MDA5MjM4
ODUgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCNTVENUFBMjExOTEzMUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5
bmNDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1
QUEzMTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFBNjExOTEz
MjUwMDBCQ0MzMTUgLyogSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTEyNzIsNiArMTEyODAsOCBAQAogCQkJCUI1OURENjhFMTE5
MDI5OEUwMDdFOTY4NCAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwgKi8sCiAJCQkJMUE3Q0NC
MTYwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCAqLywKIAkJ
CQlCNTlERDY4RjExOTAyOThFMDA3RTk2ODQgLyogU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5p
ZGwgKi8sCisJCQkJQjU1MEI1MjExMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMu
Y3BwICovLAorCQkJCUI1NTBCNTIyMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5j
LmggKi8sCiAJCQkJMUFCRkU3NTIwQ0Q5NjhEMDAwRkU0ODM0IC8qIFNRTFRyYW5zYWN0aW9uLmNw
cCAqLywKIAkJCQkxQTdDQ0IyMjBDRDk0NkZEMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb24uaCAq
LywKIAkJCQkxQTdDQ0IyMzBDRDk0NkZEMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb24uaWRsICov
LApAQCAtMTEyODgsNiArMTEyOTgsOCBAQAogCQkJCUI1NUQ1QUJDMTE5MTMyNzIwMEJDQzMxNSAv
KiBTUUxUcmFuc2FjdGlvblN5bmMuaWRsICovLAogCQkJCUI1MjNDRUZGMTE4MjY3NTQwMEVCQjI5
QyAvKiBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oICovLAogCQkJCUI1NUQ1QUJEMTE5MTMy
NzIwMEJDQzMxNSAvKiBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGwgKi8sCisJCQkJQjU1
MEI1MjMxMURDNjhBODAwOTIzODg1IC8qIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5jcHAgKi8s
CisJCQkJQjU1MEI1MjQxMURDNjhBODAwOTIzODg1IC8qIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVu
dC5oICovLAogCQkJCTUxRTNGOUM1MERBMDU5REMwMDI1MDkxMSAvKiBTdG9yYWdlLmNwcCAqLywK
IAkJCQk1MUUzRjlDNDBEQTA1OURDMDAyNTA5MTEgLyogU3RvcmFnZS5oICovLAogCQkJCTUxRTNG
OUQxMERBMDVENzEwMDI1MDkxMSAvKiBTdG9yYWdlLmlkbCAqLywKQEAgLTE5MjM1LDYgKzE5MjQ3
LDcgQEAKIAkJCQk1MTVCMDM5OTBDRDE2NDJBMDBCN0VBOUMgLyogU1FMU3RhdGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTdDQ0IxOTBDRDk0NjlBMDBCN0I2NEUgLyogU1FMU3RhdGVtZW50
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTFBN0NDQjFBMENEOTQ2OUEwMEI3QjY0RSAv
KiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNTUwQjUy
NjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUE3Q0NCMjQwQ0Q5NDZGRDAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTdDQ0IxQjBDRDk0NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb25DYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjUxQkY2RjExMDJDOUU1OTAwMDJDMTVBIC8qIFNR
TFRyYW5zYWN0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE5MjQyLDYgKzE5MjU1LDcg
QEAKIAkJCQkxQTdDQ0IxQzBDRDk0NjlBMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTIzQ0YwODExODI2NzU0MDBFQkIyOUMgLyog
U1FMVHJhbnNhY3Rpb25TeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTIzQ0YwNjExODI2NzU0
MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAor
CQkJCUI1NTBCNTI4MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkU2RTVBMENDNTUyMTMwMDRBMjA2MiAvKiBTUUxWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5NjMwODI0NUU1OTAwMUU5QUJDIC8qIFNTTEtl
eUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VBMzk0OUQxMUQ0NUNEQTAwMzA5NENG
IC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTYzMiwxMCAr
MjE2NDYsMTIgQEAKIAkJCQk1MTk2MTE3MzBDQUM1NjU3MDAxMEE4MEMgLyogU1FMUmVzdWx0U2V0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRkUxMTdEMENCRkZCMzYwMDMwMTdGQSAvKiBTUUxS
ZXN1bHRTZXRSb3dMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNUIwMzlBMENEMTY0MkEw
MEI3RUE5QyAvKiBTUUxTdGF0ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjU1MEI1MjUx
MURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFCRkU3NTMwQ0Q5NjhEMDAwRkU0ODM0IC8qIFNRTFRyYW5zYWN0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUI1MUJGNkYwMTAyQzlFNTkwMDAyQzE1QSAvKiBTUUxUcmFuc2FjdGlvbkNs
aWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNUMxMTIzQjEwMkI2QzQ2MDAwOTY1NzggLyog
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTIzQ0Yw
OTExODI2NzU0MDBFQkIyOUMgLyogU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUI1NTBCNTI3MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxUcmFuc2FjdGlvblN5bmNDbGll
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyRTZFNTkwQ0M1NTIxMzAwNEEyMDYyIC8qIFNR
TFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QUU2MDgyNDVFNTkwMDFFOUFCQyAv
KiBTU0xLZXlHZW5lcmF0b3JNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRUEzOTQ5QzExRDQ1
Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkocmV2aXNpb24gNjI0MDcpCisr
KyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2Miw2ICs0NjIsMTkgQEAgdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpyZXNldEF1dGhvcml6ZXIo
KQogICAgICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsKIH0KIAordW5zaWduZWQg
bG9uZyBsb25nIEFic3RyYWN0RGF0YWJhc2U6Om1heGltdW1TaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKHRo
aXMpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVk
ZWQoKQoreworICAgIGludDY0X3QgZnJlZVNwYWNlU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2UuZnJl
ZVNwYWNlU2l6ZSgpOworICAgIGludDY0X3QgdG90YWxTaXplID0gbV9zcWxpdGVEYXRhYmFzZS50
b3RhbFNpemUoKTsKKyAgICBpZiAodG90YWxTaXplIDw9IDEwICogZnJlZVNwYWNlU2l6ZSkKKyAg
ICAgICAgbV9zcWxpdGVEYXRhYmFzZS5ydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCShyZXZpc2lvbiA2MjQwNykKKysrIFdl
YkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYg
KzY1LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBkaXNwbGF5TmFtZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdDsKKyAgICBTUUxpdGVEYXRhYmFzZSYgc3Fs
aXRlRGF0YWJhc2UoKSB7IHJldHVybiBtX3NxbGl0ZURhdGFiYXNlOyB9CisKKyAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKKyAgICB2b2lkIGluY3JlbWVudGFsVmFj
dXVtSWZOZWVkZWQoKTsKIAogICAgIC8vIEZJWE1FOiBtb3ZlIGFsbCB2ZXJzaW9uLXJlbGF0ZWQg
bWV0aG9kcyB0byBhIERhdGFiYXNlVmVyc2lvblRyYWNrZXIgY2xhc3MKICAgICBib29sIHZlcnNp
b25NYXRjaGVzRXhwZWN0ZWQoKSBjb25zdDsKQEAgLTEwMyw4ICsxMDcsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdW5zaWduZWQgbG9uZyBtX2VzdGltYXRlZFNpemU7CiAgICAgU3RyaW5nIG1fZmlsZW5h
bWU7CiAKLSAgICBTUUxpdGVEYXRhYmFzZSBtX3NxbGl0ZURhdGFiYXNlOwotCiAjaWZuZGVmIE5E
RUJVRwogICAgIFN0cmluZyBkYXRhYmFzZURlYnVnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dFRocmVhZFNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygpICsgIjo6IiArIG1fbmFtZTsgfQog
I2VuZGlmCkBAIC0xMTYsNiArMTE4LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fb3BlbmVkOwog
ICAgIGJvb2wgbV9uZXc7CiAKKyAgICBTUUxpdGVEYXRhYmFzZSBtX3NxbGl0ZURhdGFiYXNlOwor
CiAgICAgUmVmUHRyPERhdGFiYXNlQXV0aG9yaXplcj4gbV9kYXRhYmFzZUF1dGhvcml6ZXI7CiB9
OwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAJKHJldmlz
aW9uIDYyNDA3KQorKysgV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsMTMgKzUwLDEzIEBAIGJvb2wgQ2hhbmdlVmVyc2lvbldyYXBw
ZXI6OnBlcmZvcm1QcmVmbGkKIAogICAgIGlmICghdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmdl
dFZlcnNpb25Gcm9tRGF0YWJhc2UoYWN0dWFsVmVyc2lvbikpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcmV0cmlldmUgYWN0dWFsIGN1cnJlbnQgdmVyc2lvbiBmcm9tIGRhdGFiYXNl
Iik7Ci0gICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKDAsICJ1bmFibGUgdG8g
dmVyaWZ5IGN1cnJlbnQgdmVyc2lvbiBvZiBkYXRhYmFzZSIpOworICAgICAgICBtX3NxbEVycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ1bmFibGUgdG8gdmVy
aWZ5IGN1cnJlbnQgdmVyc2lvbiBvZiBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgaWYgKGFjdHVhbFZlcnNpb24gIT0gbV9vbGRWZXJzaW9uKSB7CiAgICAg
ICAgIExPR19FUlJPUigiT2xkIHZlcnNpb24gZG9lc24ndCBtYXRjaCBhY3R1YWwgdmVyc2lvbiIp
OwotICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZSgyLCAiY3VycmVudCB2ZXJz
aW9uIG9mIHRoZSBkYXRhYmFzZSBhbmQgYG9sZFZlcnNpb25gIGFyZ3VtZW50IGRvIG5vdCBtYXRj
aCIpOworICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VkVS
U0lPTl9FUlIsICJjdXJyZW50IHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lv
bmAgYXJndW1lbnQgZG8gbm90IG1hdGNoIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTY5LDcgKzY5LDcgQEAgYm9vbCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9ybVBv
c3RmbAogCiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2V0VmVyc2lvbkluRGF0
YWJhc2UobV9uZXdWZXJzaW9uKSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXQg
bmV3IHZlcnNpb24gaW4gZGF0YWJhc2UiKTsKLSAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9y
OjpjcmVhdGUoMCwgInVuYWJsZSB0byBzZXQgbmV3IHZlcnNpb24gaW4gZGF0YWJhc2UiKTsKKyAg
ICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJS
LCAidW5hYmxlIHRvIHNldCBuZXcgdmVyc2lvbiBpbiBkYXRhYmFzZSIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDYyNDA3
KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAy
LDcgKzQwMiw3IEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjpwZXJmb3JtR2V0VGFibGUKIHsK
ICAgICBkaXNhYmxlQXV0aG9yaXplcigpOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX3NxbGl0ZURhdGFiYXNlLCAiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHR5cGU9J3RhYmxlJzsiKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KHNxbGl0ZURh
dGFiYXNlKCksICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFi
bGUnOyIpOwogICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CiAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJldHJpZXZlIGxpc3Qgb2YgdGFibGVzIGZvciBk
YXRhYmFzZSAlcyIsIGRhdGFiYXNlRGVidWdOYW1lKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAg
ICBlbmFibGVBdXRob3JpemVyKCk7CkBAIC00NjMsMTQgKzQ2Myw2IEBAIFNlY3VyaXR5T3JpZ2lu
KiBEYXRhYmFzZTo6c2VjdXJpdHlPcmlnaW4KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBEYXRh
YmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpCi17Ci0gICAgaW50NjRfdCBmcmVlU3Bh
Y2VTaXplID0gbV9zcWxpdGVEYXRhYmFzZS5mcmVlU3BhY2VTaXplKCk7Ci0gICAgaW50NjRfdCB0
b3RhbFNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLnRvdGFsU2l6ZSgpOwotICAgIGlmICh0b3RhbFNp
emUgPD0gMTAgKiBmcmVlU3BhY2VTaXplKQotICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLnJ1bklu
Y3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkocmV2aXNpb24g
NjI0MDcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNyArNjYsNiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVOYW1lcygpOwog
CiAgICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLSAg
ICBTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSB7IHJldHVybiBtX3NxbGl0ZURhdGFi
YXNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAgICAg
Ym9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CkBAIC05NSw4ICs5NCw2
IEBAIHB1YmxpYzoKICAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQo
KSBjb25zdDsKICAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCkgY29uc3Q7CiAKLSAgICB2b2lkIGluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsK
LQogcHJpdmF0ZToKICAgICBEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwKICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUp
OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHJldmlzaW9uIDYy
NDA3KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5MCw3ICsyOTAsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVW
VGFibGUoY29uCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIC8vIEFsbG93IG9u
bHkgdGhlIEZUUzMgZXh0ZW5zaW9uCi0gICAgaWYgKG1vZHVsZU5hbWUgIT0gImZ0czMiKQorICAg
IGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobW9kdWxlTmFtZSwgImZ0czMiKSkKICAgICAgICAgcmV0
dXJuIFNRTEF1dGhEZW55OwogCiAgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1
ZTsKQEAgLTMwMyw3ICszMDMsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVlRhYmxl
KGNvbnN0CiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIC8vIEFsbG93IG9ubHkg
dGhlIEZUUzMgZXh0ZW5zaW9uCi0gICAgaWYgKG1vZHVsZU5hbWUgIT0gImZ0czMiKQorICAgIGlm
ICghZXF1YWxJZ25vcmluZ0Nhc2UobW9kdWxlTmFtZSwgImZ0czMiKSkKICAgICAgICAgcmV0dXJu
IFNRTEF1dGhEZW55OwogCiAgICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1l
KHRhYmxlTmFtZSk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcAkocmV2aXNpb24gNjI0
MDcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMRXhj
ZXB0aW9uLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jLmgiCiAjaW5jbHVkZSAiU1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTg3LDE0ICs4OSw3MSBAQCBE
YXRhYmFzZVN5bmM6On5EYXRhYmFzZVN5bmMoKQogICAgIH0KIH0KIAotdm9pZCBEYXRhYmFzZVN5
bmM6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKQorY2xhc3MgQ2hh
bmdlVmVyc2lvblByZWZsaWdodFN0ZXAgOiBwdWJsaWMgU1FMVHJhbnNhY3Rpb25TeW5jOjpTUUxU
cmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXAgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENoYW5nZVZlcnNpb25QcmVmbGlnaHRTdGVwPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBleHBl
Y3RlZFZlcnNpb24pCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENoYW5nZVZlcnNpb25QcmVm
bGlnaHRTdGVwKGV4cGVjdGVkVmVyc2lvbik7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHBl
cmZvcm1TdGVwKFNRTFRyYW5zYWN0aW9uU3luYyogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUm
IGVjKQorICAgIHsKKyAgICAgICAgU3RyaW5nIGFjdHVhbFZlcnNpb247CisgICAgICAgIGlmICgh
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmdldFZlcnNpb25Gcm9tRGF0YWJhc2UoYWN0dWFsVmVy
c2lvbikpIHsKKyAgICAgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3R1YWxW
ZXJzaW9uICE9IG1fZXhwZWN0ZWRWZXJzaW9uKSB7CisgICAgICAgICAgICBlYyA9IFNRTEV4Y2Vw
dGlvbjo6VkVSU0lPTl9FUlI7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2hhbmdlVmVy
c2lvblByZWZsaWdodFN0ZXAoY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24pIDogbV9leHBl
Y3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uKSB7IH0KKyAgICBTdHJpbmcgbV9leHBlY3RlZFZl
cnNpb247Cit9OworCitjbGFzcyBDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXAgOiBwdWJsaWMg
U1FMVHJhbnNhY3Rpb25TeW5jOjpTUUxUcmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXAgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3RlcD4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBu
ZXcgQ2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwKG5ld1ZlcnNpb24pOworICAgIH0KKworICAg
IHZpcnR1YWwgYm9vbCBwZXJmb3JtU3RlcChTUUxUcmFuc2FjdGlvblN5bmMqIHRyYW5zYWN0aW9u
LCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICB7CisgICAgICAgIGlmICghdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCktPnNldFZlcnNpb25JbkRhdGFiYXNlKG1fbmV3VmVyc2lvbikpIHsKKyAgICAgICAg
ICAgIGVjID0gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zZXRF
eHBlY3RlZFZlcnNpb24obV9uZXdWZXJzaW9uKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCitwcml2YXRlOgorICAgIENoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3RlcChjb25zdCBTdHJp
bmcmIG5ld1ZlcnNpb24pIDogbV9uZXdWZXJzaW9uKG5ld1ZlcnNpb24pIHsgfQorICAgIFN0cmlu
ZyBtX25ld1ZlcnNpb247Cit9OworCit2b2lkIERhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lvbihj
b25zdCBTdHJpbmcmIG9sZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbiwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2hhbmdlVmVyc2lvbkNhbGxiYWNrLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luYz4gdHJh
bnNhY3Rpb24gPSBTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZSh0aGlzLCBjaGFuZ2VWZXJzaW9u
Q2FsbGJhY2ssIGZhbHNlLCBDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0U3RlcDo6Y3JlYXRlKG9sZFZl
cnNpb24pLCBDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXA6OmNyZWF0ZShuZXdWZXJzaW9uKSk7
CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+YmVnaW4oZWMpIHx8ICF0cmFuc2FjdGlvbi0+ZXhlY3V0
ZShlYykgfHwgIXRyYW5zYWN0aW9uLT5jb21taXQoZWMpKQorICAgICAgICB0cmFuc2FjdGlvbi0+
cm9sbGJhY2soKTsKIH0KIAotdm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sLCBFeGNlcHRpb25Db2RlJikKK3Zv
aWQgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3lu
Y0NhbGxiYWNrPiBjYWxsYmFjaywgYm9vbCByZWFkT25seSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkp
OworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IHRyYW5zYWN0aW9uID0gU1FMVHJhbnNh
Y3Rpb25TeW5jOjpjcmVhdGUodGhpcywgY2FsbGJhY2ssIHJlYWRPbmx5KTsKKyAgICBpZiAoIXRy
YW5zYWN0aW9uLT5iZWdpbihlYykgfHwgIXRyYW5zYWN0aW9uLT5leGVjdXRlKGVjKSB8fCAhdHJh
bnNhY3Rpb24tPmNvbW1pdChlYykpCisgICAgICAgIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwog
fQogCiB2b2lkIERhdGFiYXNlU3luYzo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VTeW5jLmgJKHJldmlzaW9uIDYyNDA3KQorKysgV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKIGNsYXNzIFNRTFRyYW5zYWN0aW9u
U3luY0NhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50OwogY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gNjI0MDcpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw2
IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvckRhdGFiYXMKIAogdW5zaWduZWQg
bG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFi
c3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewotICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkg
PT0gZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+
Z2V0VGhyZWFkSUQoKSk7CiAgICAgLy8gVGhlIG1heGltdW0gc2l6ZSBmb3IgYSBkYXRhYmFzZSBp
cyB0aGUgZnVsbCBxdW90YSBmb3IgaXRzIG9yaWdpbiwgbWludXMgdGhlIGN1cnJlbnQgdXNhZ2Ug
d2l0aGluIHRoZSBvcmlnaW4sCiAgICAgLy8gcGx1cyB0aGUgY3VycmVudCB1c2FnZSBvZiB0aGUg
Z2l2ZW4gZGF0YWJhc2UKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1
YXJkKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVu
dFN5bmMuaCIKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKworI2luY2x1ZGUgIkRhdGFiYXNlU3lu
Yy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJTUUxFeGNlcHRpb24u
aCIKKyNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKKyNpbmNsdWRlICJTUUxWYWx1ZS5oIgorI2lu
Y2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVtZW50U3luYyhj
b25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRz
LCBib29sIHJlYWRPbmx5KQorICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQorICAgICwgbV9h
cmd1bWVudHMoYXJndW1lbnRzKQorICAgICwgbV9yZWFkT25seShyZWFkT25seSkKK3sKKyAgICBB
U1NFUlQoIW1fc3RhdGVtZW50LmlzRW1wdHkoKSk7Cit9CisKK2Jvb2wgU1FMU3RhdGVtZW50U3lu
Yzo6ZXhlY3V0ZShEYXRhYmFzZVN5bmMqIGRiLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBB
U1NFUlQoIW1fcmVzdWx0U2V0KTsKKworICAgIGlmIChtX3JlYWRPbmx5KQorICAgICAgICBkYi0+
c2V0QXV0aG9yaXplclJlYWRPbmx5KCk7CisKKyAgICBTUUxpdGVEYXRhYmFzZSogZGF0YWJhc2Ug
PSAmZGItPnNxbGl0ZURhdGFiYXNlKCk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KCpkYXRhYmFzZSwgbV9zdGF0ZW1lbnQpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJl
cGFyZSgpOworCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBlYyA9
IFNRTEV4Y2VwdGlvbjo6U1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmIChzdGF0ZW1lbnQuYmluZFBhcmFtZXRlckNvdW50KCkgIT0gbV9hcmd1bWVudHMu
c2l6ZSgpKSB7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpTWU5UQVhfRVJSOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQu
YmluZFZhbHVlKGkgKyAxLCBtX2FyZ3VtZW50c1tpXSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0g
U1FMUmVzdWx0RnVsbCkgeworICAgICAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlFVT1RBX0VS
UjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpE
QVRBQkFTRV9FUlI7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBSZWZQdHI8U1FMUmVzdWx0U2V0PiByZXN1bHRTZXQgPSBTUUxSZXN1bHRTZXQ6OmNy
ZWF0ZSgpOworCisgICAgLy8gU3RlcCBzbyB3ZSBjYW4gZmV0Y2ggdGhlIGNvbHVtbiBuYW1lcy4K
KyAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0gU1FMUmVz
dWx0Um93KSB7CisgICAgICAgIGludCBjb2x1bW5Db3VudCA9IHN0YXRlbWVudC5jb2x1bW5Db3Vu
dCgpOworICAgICAgICBTUUxSZXN1bHRTZXRSb3dMaXN0KiByb3dzID0gcmVzdWx0U2V0LT5yb3dz
KCk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQorICAg
ICAgICAgICAgcm93cy0+YWRkQ29sdW1uKHN0YXRlbWVudC5nZXRDb2x1bW5OYW1lKGkpKTsKKwor
ICAgICAgICBkbyB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50
OyBpKyspCisgICAgICAgICAgICAgICAgcm93cy0+YWRkUmVzdWx0KHN0YXRlbWVudC5nZXRDb2x1
bW5WYWx1ZShpKSk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7Cisg
ICAgICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpOworCisgICAgICAgIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246
OkRBVEFCQVNFX0VSUjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSBpZiAocmVzdWx0ID09IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgLy8gRGlkbid0
IGZpbmQgYW55dGhpbmcsIG9yIHdhcyBhbiBpbnNlcnQKKyAgICAgICAgaWYgKGRiLT5sYXN0QWN0
aW9uV2FzSW5zZXJ0KCkpCisgICAgICAgICAgICByZXN1bHRTZXQtPnNldEluc2VydElkKGRhdGFi
YXNlLT5sYXN0SW5zZXJ0Um93SUQoKSk7CisgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVz
dWx0RnVsbCkgeworICAgICAgICAvLyBRdW90YSBlcnJvciwgdGhlIGRlbGVnYXRlIHdpbGwgYmUg
YXNrZWQgZm9yIG1vcmUgc3BhY2UgYW5kIHRoaXMgc3RhdGVtZW50IG1pZ2h0IGJlIHJlLXJ1bi4K
KyAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlFVT1RBX0VSUjsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9F
UlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXN1bHRTZXQtPnNldFJv
d3NBZmZlY3RlZChkYXRhYmFzZS0+bGFzdENoYW5nZXMoKSk7CisgICAgbV9yZXN1bHRTZXQgPSBy
ZXN1bHRTZXQ7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxTUUxSZXN1bHRT
ZXQ+IFNRTFN0YXRlbWVudFN5bmM6OnJlc3VsdFNldCgpCit7CisgICAgcmV0dXJuIG1fcmVzdWx0
U2V0LnJlbGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU1FMU3RhdGVtZW50U3luY19oCisjZGVmaW5lIFNR
TFN0YXRlbWVudFN5bmNfaAorCisjaWYgRU5BQkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIERhdGFiYXNlU3luYzsKK2NsYXNzIFNRTFJlc3VsdFNldDsKKwordHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKKworY2xhc3MgU1FMU3RhdGVtZW50U3luYyB7CitwdWJsaWM6CisgICAg
U1FMU3RhdGVtZW50U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNR
TFZhbHVlPiYgYXJndW1lbnRzLCBib29sIHJlYWRPbmx5KTsKKworICAgIGJvb2wgZXhlY3V0ZShE
YXRhYmFzZVN5bmMqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxTUUxSZXN1bHRT
ZXQ+IHJlc3VsdFNldCgpOworCitwcml2YXRlOgorCisgICAgU3RyaW5nIG1fc3RhdGVtZW50Owor
ICAgIFZlY3RvcjxTUUxWYWx1ZT4gbV9hcmd1bWVudHM7CisgICAgYm9vbCBtX3JlYWRPbmx5Owor
ICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IG1fcmVzdWx0U2V0OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQorCisjZW5kaWYgLy8gU1FM
U3RhdGVtZW50U3luY19oCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNw
cAkocmV2aXNpb24gNjI0MDcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMzggKzM0LDE5NyBAQAogI2luY2x1ZGUgIkRhdGFi
YXNlU3luYy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIlNRTFJlc3Vs
dFNldC5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudFN5bmMuaCIKICNpbmNsdWRlICJTUUxUcmFu
c2FjdGlvblN5bmNDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luY0NsaWVu
dC5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSAiU1FMaXRlVHJhbnNhY3Rpb24u
aCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IFNRTFRyYW5zYWN0aW9uU3luYzo6
Y3JlYXRlKERhdGFiYXNlU3luYyogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2Fs
bGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQorc3RhdGljIFNRTFRyYW5zYWN0aW9uU3lu
Y0NsaWVudCogdHJhbnNhY3Rpb25DbGllbnQoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U1FMVHJhbnNhY3Rpb25TeW5jKGRiLCBjYWxsYmFjaywgcmVhZE9ubHkpKTsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudCwgdHJhbnNhY3Rpb25DbGllbnQs
ICgpKTsKKyAgICByZXR1cm4gJnRyYW5zYWN0aW9uQ2xpZW50OwogfQogCi1TUUxUcmFuc2FjdGlv
blN5bmM6OlNRTFRyYW5zYWN0aW9uU3luYyhEYXRhYmFzZVN5bmMqIGRiLCBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjaywgYm9vbCByZWFkT25seSkKK1Bhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jPiBTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZShEYXRh
YmFzZVN5bmMqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxs
YmFjaywgYm9vbCByZWFkT25seSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY09wdGlv
bmFsU3RlcD4gcHJlZmxpZ2h0U3RlcCwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNPcHRp
b25hbFN0ZXA+IHBvc3RmbGlnaHRTdGVwKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FM
VHJhbnNhY3Rpb25TeW5jKGRiLCBjYWxsYmFjaywgcmVhZE9ubHksIHByZWZsaWdodFN0ZXAsIHBv
c3RmbGlnaHRTdGVwKSk7Cit9CisKK1NRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25T
eW5jKERhdGFiYXNlU3luYyogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXA+IHBy
ZWZsaWdodFN0ZXAsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwPiBw
b3N0ZmxpZ2h0U3RlcCkKICAgICA6IG1fZGF0YWJhc2UoZGIpCiAgICAgLCBtX2NhbGxiYWNrKGNh
bGxiYWNrKQogICAgICwgbV9yZWFkT25seShyZWFkT25seSkKKyAgICAsIG1fcHJlZmxpZ2h0U3Rl
cChwcmVmbGlnaHRTdGVwKQorICAgICwgbV9wb3N0ZmxpZ2h0U3RlcChwb3N0ZmxpZ2h0U3RlcCkK
KyAgICAsIG1fbW9kaWZpZWREYXRhYmFzZShmYWxzZSkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFz
ZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgQVNT
RVJUKGNhbGxiYWNrKTsKIH0KIAogU1FMVHJhbnNhY3Rpb25TeW5jOjp+U1FMVHJhbnNhY3Rpb25T
eW5jKCkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24gJiYgbV9z
cWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQorICAgICAgICByb2xsYmFjaygpOworfQor
CitQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU1FM
KGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1
bWVudHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIW1fZGF0
YWJhc2UtPm9wZW5lZCgpKSB7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLT52ZXJz
aW9uTWF0Y2hlc0V4cGVjdGVkKCkpIHsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlZFUlNJ
T05fRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoc3FsU3RhdGVtZW50
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBib29sIHJlYWRPbmx5TW9kZSA9
IG1fcmVhZE9ubHkgfHwgbV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0Rh
dGFiYXNlUmVhZE9ubHkoKTsKKyAgICBTUUxTdGF0ZW1lbnRTeW5jIHN0YXRlbWVudChzcWxTdGF0
ZW1lbnQsIGFyZ3VtZW50cywgcmVhZE9ubHlNb2RlKTsKKworICAgIG1fZGF0YWJhc2UtPnJlc2V0
QXV0aG9yaXplcigpOworICAgIGJvb2wgcmV0cnlTdGF0ZW1lbnQgPSB0cnVlOworICAgIHdoaWxl
IChyZXRyeVN0YXRlbWVudCkgeworICAgICAgICByZXRyeVN0YXRlbWVudCA9IGZhbHNlOworICAg
ICAgICBpZiAoIXN0YXRlbWVudC5leGVjdXRlKG1fZGF0YWJhc2UuZ2V0KCksIGVjKSkgeworICAg
ICAgICAgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24tPndhc1JvbGxlZEJhY2tCeVNxbGl0ZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBpZiAoZWMgPT0gU1FM
RXhjZXB0aW9uOjpRVU9UQV9FUlIpIHsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNhY3Rpb25D
bGllbnQoKS0+ZGlkRXhjZWVkUXVvdGEodGhpcykpIHsKKyAgICAgICAgICAgICAgICAgICAgZWMg
PSAwOworICAgICAgICAgICAgICAgICAgICByZXRyeVN0YXRlbWVudCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RBY3Rpb25D
aGFuZ2VkRGF0YWJhc2UoKSkgeworICAgICAgICBtX21vZGlmaWVkRGF0YWJhc2UgPSB0cnVlOwor
ICAgICAgICB0cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGVjdXRlU3RhdGVtZW50KHRoaXMpOwor
ICAgIH0KKworICAgIHJldHVybiBzdGF0ZW1lbnQucmVzdWx0U2V0KCk7Cit9CisKK2Jvb2wgU1FM
VHJhbnNhY3Rpb25TeW5jOjpiZWdpbihFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQo
bV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7
CisgICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSkgeworICAgICAgICBlYyA9IFNRTEV4Y2Vw
dGlvbjo6VU5LTk9XTl9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBB
U1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNz
KCkpOworCisgICAgLy8gU2V0IHRoZSBtYXhpbXVtIHVzYWdlIGZvciB0aGlzIHRyYW5zYWN0aW9u
IGlmIHRoaXMgdHJhbnNhY3Rpb25zIGlzIG5vdCByZWFkLW9ubHkuCisgICAgaWYgKCFtX3JlYWRP
bmx5KQorICAgICAgICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnNldE1heGltdW1TaXpl
KG1fZGF0YWJhc2UtPm1heGltdW1TaXplKCkpOworCisgICAgaWYgKG1fcHJlZmxpZ2h0U3RlcCkg
eworICAgICAgICBib29sIHByZWZsaWdodFN1Y2Nlc3MgPSBtX3ByZWZsaWdodFN0ZXAtPnBlcmZv
cm1TdGVwKHRoaXMsIGVjKTsKKyAgICAgICAgbV9wcmVmbGlnaHRTdGVwID0gMDsKKyAgICAgICAg
aWYgKCFwcmVmbGlnaHRTdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlvbik7CisgICAgbV9zcWxpdGVUcmFuc2Fj
dGlvbi5zZXQobmV3IFNRTGl0ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNl
KCksIG1fcmVhZE9ubHkpKTsKKworICAgIG1fZGF0YWJhc2UtPnJlc2V0RGVsZXRlcygpOworICAg
IG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7CisgICAgbV9zcWxpdGVUcmFuc2FjdGlv
bi0+YmVnaW4oKTsKKyAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICAv
LyBDaGVjayBpZiBiZWdpbigpIHN1Y2NlZWRlZC4KKyAgICBpZiAoIW1fc3FsaXRlVHJhbnNhY3Rp
b24tPmluUHJvZ3Jlc3MoKSkgeworICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURh
dGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgICAgICBtX3NxbGl0ZVRyYW5z
YWN0aW9uLmNsZWFyKCk7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGUoRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0
VGhyZWFkKCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkgfHwgIW1fY2FsbGJhY2sg
fHwgIW1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgdGhpcykpIHsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlVOS05PV05fRVJS
OworICAgICAgICBtX2NhbGxiYWNrID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIG1fY2FsbGJhY2sgPSAwOworICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRy
PFNRTFJlc3VsdFNldD4gU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU1FMKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mLCBFeGNlcHRpb25Db2RlJikKK2Jvb2wgU1FMVHJh
bnNhY3Rpb25TeW5jOjpjb21taXQoRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKG1f
ZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwot
ICAgIHJldHVybiAwOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKKyAgICAgICAg
ZWMgPSBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgQVNTRVJUKG1fc3FsaXRlVHJhbnNhY3Rpb24pOworCisgICAgbV9kYXRhYmFz
ZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5jb21taXQo
KTsKKyAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICAvLyBJZiB0aGUg
Y29tbWl0IGZhaWxlZCwgdGhlIHRyYW5zYWN0aW9uIHdpbGwgc3RpbGwgYmUgbWFya2VkIGFzICJp
biBwcm9ncmVzcyIKKyAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7
CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisKKyAg
ICAvLyBWYWN1dW0gdGhlIGRhdGFiYXNlIGlmIGFueXRoaW5nIHdhcyBkZWxldGVkLgorICAgIGlm
IChtX2RhdGFiYXNlLT5oYWREZWxldGVzKCkpCisgICAgICAgIG1fZGF0YWJhc2UtPmluY3JlbWVu
dGFsVmFjdXVtSWZOZWVkZWQoKTsKKworICAgIC8vIFRoZSBjb21taXQgd2FzIHN1Y2Nlc3NmdWwu
IElmIHRoZSB0cmFuc2FjdGlvbiBtb2RpZmllZCB0aGlzIGRhdGFiYXNlLCBub3RpZnkgdGhlIGRl
bGVnYXRlcy4KKyAgICBpZiAobV9tb2RpZmllZERhdGFiYXNlKQorICAgICAgICB0cmFuc2FjdGlv
bkNsaWVudCgpLT5kaWRDb21taXRUcmFuc2FjdGlvbih0aGlzKTsKKworICAgIGJvb2wgcG9zdGZs
aWdodFN1Y2Nlc3MgPSB0cnVlOworICAgIGlmIChtX3Bvc3RmbGlnaHRTdGVwKQorICAgICAgICBw
b3N0ZmxpZ2h0U3VjY2VzcyA9IG1fcG9zdGZsaWdodFN0ZXAtPnBlcmZvcm1TdGVwKHRoaXMsIGVj
KTsKKworICAgIG1fcG9zdGZsaWdodFN0ZXAgPSAwOworICAgIHJldHVybiBwb3N0ZmxpZ2h0U3Vj
Y2VzczsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvblN5bmM6OnJvbGxiYWNrKCkKK3sKKyAgICBB
U1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJl
YWQoKSk7CisgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKKyAgICBpZiAobV9z
cWxpdGVUcmFuc2FjdGlvbikgeworICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5yb2xsYmFj
aygpOworICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgfQorICAgIG1f
ZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKKworICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+
c3FsaXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgJKHJl
dmlzaW9uIDYyNDA3KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxMiArNDIsMjEgQEAgY2xhc3MgRGF0YWJhc2VTeW5jOwogY2xh
c3MgU1FMUmVzdWx0U2V0OwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7CiBjbGFz
cyBTUUxWYWx1ZTsKK2NsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uOwogY2xhc3MgU3RyaW5nOwogCiAv
LyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5
IG9uIHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KIGNsYXNzIFNRTFRyYW5zYWN0aW9uU3lu
YyA6IHB1YmxpYyBSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9uU3luYz4gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luYz4gY3JlYXRlKERhdGFiYXNlU3lu
YyosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5
ID0gZmFsc2UpOworCisgICAgY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwIDog
cHVibGljIFJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwPiB7CisgICAg
cHVibGljOgorICAgICAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXAo
KSB7IH0KKyAgICAgICAgdmlydHVhbCBib29sIHBlcmZvcm1TdGVwKFNRTFRyYW5zYWN0aW9uU3lu
YyosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uU3luYz4gY3JlYXRlKERhdGFiYXNlU3luYyosIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5ID0gZmFsc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXA+IHByZWZsaWdodFN0ZXAgPSAwLCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3RlcD4gcG9zdGZsaWdodFN0ZXAgPSAwKTsKIAog
ICAgIH5TUUxUcmFuc2FjdGlvblN5bmMoKTsKIApAQCAtNTYsMTIgKzY1LDIzIEBAIHB1YmxpYzoK
ICAgICBEYXRhYmFzZVN5bmMqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsg
fQogICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KIAor
ICAgIGJvb2wgYmVnaW4oRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIGJvb2wgZXhlY3V0ZShFeGNl
cHRpb25Db2RlJiBlYyk7CisgICAgYm9vbCBjb21taXQoRXhjZXB0aW9uQ29kZSYgZWMpOworICAg
IHZvaWQgcm9sbGJhY2soKTsKKwogcHJpdmF0ZToKLSAgICBTUUxUcmFuc2FjdGlvblN5bmMoRGF0
YWJhc2VTeW5jKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wg
cmVhZE9ubHkpOworICAgIFNRTFRyYW5zYWN0aW9uU3luYyhEYXRhYmFzZVN5bmMqLCBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXA+
IHByZWZsaWdodFN0ZXAsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVw
PiBwb3N0ZmxpZ2h0U3RlcCk7CiAKICAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBtX2RhdGFiYXNl
OwogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gbV9jYWxsYmFjazsKICAg
ICBib29sIG1fcmVhZE9ubHk7CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFs
U3RlcD4gbV9wcmVmbGlnaHRTdGVwOworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNPcHRp
b25hbFN0ZXA+IG1fcG9zdGZsaWdodFN0ZXA7CisKKyAgICBib29sIG1fbW9kaWZpZWREYXRhYmFz
ZTsKKyAgICBPd25QdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25TeW5jQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25TeW5jQ2xpZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvblN5bmNDbGllbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luY0NsaWVu
dC5oIgorCisjaWYgRU5BQkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgi
CisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25T
eW5jLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50OjpkaWRDb21taXRUcmFu
c2FjdGlvbihTUUxUcmFuc2FjdGlvblN5bmMqIHRyYW5zYWN0aW9uKQoreworICAgIEFTU0VSVCh0
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRl
eHRUaHJlYWQoKSk7CisgICAgRGF0YWJhc2VTeW5jKiBkYXRhYmFzZSA9IHRyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpOworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNjaGVkdWxlTm90aWZ5
RGF0YWJhc2VDaGFuZ2VkKAorICAgICAgICBkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0
YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25TeW5j
Q2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KFNRTFRyYW5zYWN0aW9uU3luYyogdHJhbnNhY3Rp
b24pCit7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5kYXRhYmFzZUNoYW5nZWQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkpOworfQorCiti
b29sIFNRTFRyYW5zYWN0aW9uU3luY0NsaWVudDo6ZGlkRXhjZWVkUXVvdGEoU1FMVHJhbnNhY3Rp
b25TeW5jKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIERh
dGFiYXNlU3luYyogZGF0YWJhc2UgPSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKKworICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50UXVvdGEgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIo
KS5xdW90YUZvck9yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgZGF0YWJh
c2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGRhdGFi
YXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90
YSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnF1b3RhRm9yT3JpZ2luKGRhdGFiYXNlLT5z
ZWN1cml0eU9yaWdpbigpKTsKKyAgICByZXR1cm4gKG5ld1F1b3RhID4gY3VycmVudFF1b3RhKTsK
K30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uU3luY0NsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDbGllbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50X2gKKyNkZWZpbmUgU1FMVHJh
bnNhY3Rpb25TeW5jQ2xpZW50X2gKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmM7CisKKy8vIEEgY2xpZW50IHRv
IHRoZSBTUUxUcmFuc2FjdGlvbiBjbGFzcy4gQWxsb3dzIFNRTFRyYW5zYWN0aW9uIHRvIG5vdGlm
eSBpbnRlcmVzdGVkCisvLyBwYXJ0aWVzIHRoYXQgY2VydGFpbiB0aGluZ3MgaGF2ZSBoYXBwZW5l
ZCBpbiBhIHRyYW5zYWN0aW9uLgorY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICB2b2lkIGRpZENvbW1pdFRyYW5zYWN0aW9uKFNRTFRyYW5zYWN0aW9uU3luYyop
OworICAgIHZvaWQgZGlkRXhlY3V0ZVN0YXRlbWVudChTUUxUcmFuc2FjdGlvblN5bmMqKTsKKyAg
ICBib29sIGRpZEV4Y2VlZFF1b3RhKFNRTFRyYW5zYWN0aW9uU3luYyopOworfTsKKworfSAvLyBu
YW1lc3BhY2UKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKKworI2VuZGlmIC8vIFNRTFRy
YW5zYWN0aW9uU3luY0NsaWVudF9oCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vU1FM
VHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9y
YWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA2
MjQwNykKKysrIFdlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENo
cm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOCBAQAogI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlVGhyZWFkLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTUUxUcmFuc2Fj
dGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY0LDkgKzYzLDgg
QEAgcHJpdmF0ZToKIHZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENvbW1pdFRyYW5zYWN0
aW9uKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKIHsKICAgICBBU1NFUlQoY3VycmVudFRo
cmVhZCgpID09IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwotICAgIGlmICghdHJhbnNhY3Rp
b24tPmlzUmVhZE9ubHkoKSkgeworICAgIGlmICghdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkK
ICAgICAgICAgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+cG9zdFRhc2soTm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpKSk7Ci0gICAgfQogfQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50Ojpk
aWRFeGVjdXRlU3RhdGVtZW50KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvblN5bmNDbGllbnRDaHJvbWl1bS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9u
U3luY0NsaWVudENocm9taXVtLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9j
aHJvbWl1bS9TUUxUcmFuc2FjdGlvblN5bmNDbGllbnRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNh
Y3Rpb25TeW5jQ2xpZW50LmgiCisKKyNpbmNsdWRlICJEYXRhYmFzZU9ic2VydmVyLmgiCisjaW5j
bHVkZSAiRGF0YWJhc2VTeW5jLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQ6OmRp
ZENvbW1pdFRyYW5zYWN0aW9uKFNRTFRyYW5zYWN0aW9uU3luYyogdHJhbnNhY3Rpb24pCit7Cisg
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5pc1JlYWRPbmx5
KCkpCisgICAgICAgIERhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNlTW9kaWZpZWQodHJhbnNhY3Rp
b24tPmRhdGFiYXNlKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvblN5bmNDbGllbnQ6OmRpZEV4
ZWN1dGVTdGF0ZW1lbnQoU1FMVHJhbnNhY3Rpb25TeW5jKiB0cmFuc2FjdGlvbikKK3sKKyAgICAv
LyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgZXhlY3V0aW5nIGV2ZXJ5IHN0YXRlbWVudCB0
aGF0IGNoYW5nZXMgdGhlIERCLgorICAgIC8vIENocm9taXVtIGRvZXNuJ3QgbmVlZCB0byBkbyBh
bnl0aGluZyBhdCB0aGF0IHBvaW50LgorICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Cit9CisKK2Jv
b2wgU1FMVHJhbnNhY3Rpb25TeW5jQ2xpZW50OjpkaWRFeGNlZWRRdW90YShTUUxUcmFuc2FjdGlv
blN5bmMqIHRyYW5zYWN0aW9uKQoreworICAgIC8vIENocm9taXVtIGRvZXMgbm90IGFsbG93IHVz
ZXJzIHRvIG1hbnVhbGx5IGNoYW5nZSB0aGUgcXVvdGEgZm9yIGFuIG9yaWdpbiAoZm9yIG5vdywg
YXQgbGVhc3QpLgorICAgIC8vIERvbid0IGRvIGFueXRoaW5nLgorICAgIEFTU0VSVCh0cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJl
YWQoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjQw
NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkx
IEBACisyMDEwLTA3LTAyICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUG9ydGluZyBh
cyBtYW55IGFzeW5jIERCIHRlc3RzIGFzIHBvc3NpYmxlIHRvIHN5bmMgREJzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA2MDcKKworICAgICAgICAq
IGZhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdl
LXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93
b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5
bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9l
bXB0eS1zdGF0ZW1lbnQtc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMv
c3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9u
bHktb25lLXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1z
eW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxl
LXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25z
LW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93
b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRh
YmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFz
ZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy1leHBlY3RlZC50eHQ6IENvcGllZCBm
cm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1p
bnB1dHMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4t
ZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sLgorICAgICAgICAq
IGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3lu
Yy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVk
LnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFi
YXNlLXN5bmMtaW5wdXRzLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1k
YXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1o
YW5kbGUtcmV1c2Utc3luYy5qczogQWRkZWQuCisgICAgICAgIChjYXRjaCk6CisgICAgICAgICog
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMS5qczog
QWRkZWQuCisgICAgICAgICgpOgorICAgICAgICAodHJ5KToKKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0yLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZW1wdHktc3RhdGVtZW50LXN5
bmMuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9l
eGVjdXRlLXNxbC1hcmdzLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAodGhyb3dPblRvU3RyaW5n
T2JqZWN0LnRvU3RyaW5nKToKKyAgICAgICAgKHZhcik6CisgICAgICAgICgpOgorICAgICAgICAo
cnVuVHJhbnNhY3Rpb25UZXN0KToKKyAgICAgICAgKHJ1blRyYW5zYWN0aW9uVGVzdHMpOgorICAg
ICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9leGVjdXRlc3FsLWFjY2VwdHMt
b25seS1vbmUtc3RhdGVtZW50LXN5bmMuanM6IEFkZGVkLgorICAgICAgICAoZXhlY3V0ZVN0YXRl
bWVudCk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxl
LXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmpzOiBBZGRlZC4KKyAgICAg
ICAgKHJ1blRyYW5zYWN0aW9uKToKKyAgICAgICAgKHZhcik6CisgICAgICAgICogZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1zeW5jLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGNoZWNrQ29tcGxldGlvbik6CisgICAgICAgIChydW5UZXN0LmRiKToKKyAg
ICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMuanM6IEFkZGVkLgorICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWVtcHR5LXZl
cnNpb24tc3luYy5qczogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVz
b3VyY2VzL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuanM6IENvcGllZCBmcm9tIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5w
dXRzLmpzLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRh
dGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
d29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzOiBS
ZW1vdmVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRh
dGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMuanM6IEFkZGVkLgorICAg
ICAgICAob3BlblRlc3REYXRhYmFzZSk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
cmVzb3VyY2VzL3NxbC1kYXRhLXR5cGVzLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAoKToKKyAg
ICAgICAgKHRlc3REQlZhbHVlcyk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVz
b3VyY2VzL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5qczogQWRkZWQuCisgICAgICAgICh0ZXN0
VHJhbnNhY3Rpb24pOgorICAgICAgICAoKToKKyAgICAgICAgKHRlc3RJbnZhbGlkU3RhdGVtZW50
KToKKyAgICAgICAgKHRlc3RJbmNvcnJlY3ROdW1iZXJPZkJpbmRQYXJhbWV0ZXJzKToKKyAgICAg
ICAgKHRlc3RCaW5kUGFyYW1ldGVyT2ZXcm9uZ1R5cGUuYmFkU3RyaW5nLnRvU3RyaW5nKToKKyAg
ICAgICAgKHRlc3RCaW5kUGFyYW1ldGVyT2ZXcm9uZ1R5cGUpOgorICAgICAgICAodGVzdFZlcnNp
b25NaXNtYXRjaC50ZXN0VHJhbnNhY3Rpb24pOgorICAgICAgICAodGVzdFZlcnNpb25NaXNtYXRj
aCk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3Rlc3QtYXV0aG9y
aXplci1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKGNsZWFudXApOgorICAgICAgICAoZXhlY3V0
ZVN0YXRlbWVudCk6CisgICAgICAgIChjcmVhdGVUYWJsZUNhbGxiYWNrKToKKyAgICAgICAgKGNy
ZWF0ZVN0YXRlbWVudHNDYWxsYmFjayk6CisgICAgICAgIChvdGhlclN0YXRlbWVudHNDYWxsYmFj
ayk6CisgICAgICAgIChkcm9wU3RhdGVtZW50c0NhbGxiYWNrKToKKyAgICAgICAgKHRlc3RSZWFk
V3JpdGVNb2RlKToKKyAgICAgICAgKHRlc3RSZWFkT25seU1vZGUpOgorICAgICAgICAqIGZhc3Qv
d29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29k
ZXMtc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9y
YWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLmh0
bWw6IEFkZGVkLgorCiAyMDEwLTA3LTAyICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFw
cGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBBbmRlcnMgQ2FybHNzb24uIApJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFu
ZGxlLXJldXNlLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1IEBACitUZXN0IHRoYXQgdGhlIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3Nl
ZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4KK1BBU1M6IGNoYW5nZVZlcnNpb24oKSB0cmFu
c2FjdGlvbiBjYWxsYmFjayB3YXMgY2FsbGVkLgorUEFTUzogTm8gZXhjZXB0aW9uIHRocm93biB3
aGlsZSBleGVjdXRpbmcgc3RhdGVtZW50cy4KK1BBU1M6IE5vIGV4Y2VwdGlvbiB0aHJvd24gd2hp
bGUgcnVubmluZyBhIHRyYW5zYWN0aW9uLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhh
bmRsZS1yZXVzZS1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9k
eSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Ut
c3luYy5qcycpIj4KK1Rlc3QgdGhhdCB0aGUgZGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVy
IGNoYW5naW5nIGl0cyB2ZXJzaW9uLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5n
ZS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNp
b24tc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCB0
aGF0IHZlcnNpb24gdXBkYXRlcyBpbiBzeW5jIGRhdGFiYXNlcyB3b3JrIGNvcnJlY3RseS4KK1BB
U1M6IGRiLnZlcnNpb24gaXMgMyBhcyBleHBlY3RlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5n
ZS12ZXJzaW9uLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4i
OworfQorCitmdW5jdGlvbiBmaW5pc2hUZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisg
ICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj8yIikgeworICAgICAgICB2YXIgd29y
a2VyID0gbmV3IFdvcmtlcigicmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMi5qcyIpOwor
ICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAg
IGlmIChldmVudC5kYXRhID09ICJkb25lIikKKyAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9nKGV2ZW50LmRhdGEpOworICAg
ICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCJy
ZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0xLmpzIik7CisgICAgICAgIHdvcmtlci5vbm1l
c3NhZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT0g
ImRvbmUiKQorICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gd2luZG93Lmxv
Y2F0aW9uICsgIj8yIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT0gImZhaWwi
KQorICAgICAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBsb2coZXZlbnQuZGF0YSk7CisgICAgICAgIH07CisgICAgfQorfQorPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CitUZXN0IHRoYXQgdmVyc2lv
biB1cGRhdGVzIGluIHN5bmMgZGF0YWJhc2VzIHdvcmsgY29ycmVjdGx5LgorPHByZSBpZD0iY29u
c29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL2VtcHR5LXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQt
c3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNCBAQAorVGhpcyB0ZXN0IHRyaWVzIHRvIGV4ZWN1dGUgYW4gZW1wdHkgc3Rh
dGVtZW50LgorUEFTUzogcmVzdWx0IGlzIG51bGwKK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3lu
Yy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
ZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9u
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJj
ZXMvZW1wdHktc3RhdGVtZW50LXN5bmMuanMnKSI+CitUaGlzIHRlc3QgdHJpZXMgdG8gZXhlY3V0
ZSBhbiBlbXB0eSBzdGF0ZW1lbnQuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0
ZS1zcWwtYXJncy1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1z
cWwtYXJncy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAor
VGVzdCB2YXJpb3VzIGlucHV0cyB0byBleGVjdXRlU3FsKCkuCitQQVNTOiBleGVjdXRlU3FsKCIi
KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIG51bGwp
IGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgdW5kZWZp
bmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIFtd
KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIFsgImFy
ZzAiIF0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwg
eyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIHsg
bGVuZ3RoOiAwIH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhlY3V0ZVNx
bCgiIiwgeyBsZW5ndGg6IDEsIDA6ICJhcmcwIiB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlv
bi4KK1BBU1M6IGV4ZWN1dGVTcWwoKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQ
QVNTOiBleGVjdXRlU3FsKG51bGwpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BB
U1M6IGV4ZWN1dGVTcWwodW5kZWZpbmVkKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQu
CitQQVNTOiBleGVjdXRlU3FsKDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BB
U1M6IGV4ZWN1dGVTcWwodGhyb3dPblRvU3RyaW5nT2JqZWN0KSB0aHJldyBhbiBleGNlcHRpb24g
YXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKCIiLCB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0
KSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKCIiLCB0
aHJvd09uR2V0WmVyb09iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFT
UzogZXhlY3V0ZVNxbCgiIiwgWyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXSkgdGhyZXcgYW4gZXhj
ZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgMCkgdGhyZXcgYW4gZXhj
ZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgIiIpIHRocmV3IGFuIGV4
Y2VwdGlvbiBhcyBleHBlY3RlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1h
cmdzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvZXhlY3V0ZS1z
cWwtYXJncy1zeW5jLmpzJykiPgorVGVzdCB2YXJpb3VzIGlucHV0cyB0byBleGVjdXRlU3FsKCku
Cis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25l
LXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50
LXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCB0aGF0IGV4ZWN1
dGVTcWwoKSBhY2NlcHRzIG9ubHkgb25lIHN0YXRlbWVudC4KK1BBU1M6IElOU0VSVCBJTlRPIFRl
c3QgVkFMVUVTICgxKQorUEFTUzogSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDIpOworUEFTUzog
ICAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDMpICAgIAorUEFTUzogICAgSU5TRVJUIElOVE8g
VGVzdCBWQUxVRVMgKDQpOyAgIAorUEFTUzogSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDUpICAg
OworUEFTUzogSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDYpOyBnYXJiYWdlCitQQVNTOiBJTlNF
UlQgSU5UTyBUZXN0IFZBTFVFUyAoNyk7IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg4KQorUEFT
UzogICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoOSk7ICAgSU5TRVJUIElOVE8gVGVzdCBWQUxV
RVMgKDEwKTsgICAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhl
Y3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9u
bHktb25lLXN0YXRlbWVudC1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50
LXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvZXhlY3V0ZXNxbC1h
Y2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmpzJykiPgorVGVzdCB0aGF0IGV4ZWN1dGVT
cWwoKSBhY2NlcHRzIG9ubHkgb25lIHN0YXRlbWVudC4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9w
cmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
bXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvbXVs
dGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhhdCBleGVjdXRpbmcgbXVsdGlw
bGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNl
IGRvZXNuJ3QgY2F1c2UgZGVhZGxvY2tzLgorUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRs
ZXMtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBs
ZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxv
YWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50
LWhhbmRsZXMtc3luYy5qcycpIj4KK1Rlc3QgdGhhdCBleGVjdXRpbmcgbXVsdGlwbGUgdHJhbnNh
Y3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIGRvZXNuJ3Qg
Y2F1c2UgZGVhZGxvY2tzLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJh
c2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxs
YmFjay1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorVGhpcyB0ZXN0IHRlc3RzIG9w
ZW5EYXRhYmFzZVN5bmMoKSdzIGNyZWF0aW9uIGNhbGxiYWNrLgorUEFTUzogQ3JlYXRpb24gY2Fs
bGJhY2sgd2FzIGNhbGxlZC4KK1BBU1M6IFZlcnNpb24gc2V0IHRvIGVtcHR5IHN0cmluZyBhcyBl
eHBlY3RlZC4KK1BBU1M6IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGFuZCBkYjFGYWlsIGlzIG51
bGwgYXMgZXhwZWN0ZWQuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24t
Y2FsbGJhY2stc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxi
b2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2Fs
bGJhY2stc3luYy5qcycpIj4KK1RoaXMgdGVzdCB0ZXN0cyBvcGVuRGF0YWJhc2VTeW5jKCkncyBj
cmVhdGlvbiBjYWxsYmFjay4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFi
YXNlLWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5
bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhhdCBubyBleGNlcHRpb24gaXMgdGhy
b3duIHdoZW4gdGhlIGRhdGFiYXNlIGlzIG9wZW5lZCB3aXRoIGFuIGVtcHR5IHZlcnNpb24uCitQ
QVNTCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJh
c2UtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0
YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEg
QEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNv
bW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVz
b3VyY2VzL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmpzJykiPgorVGVzdCB0aGF0
IG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiB0aGUgZGF0YWJhc2UgaXMgb3BlbmVkIHdpdGgg
YW4gZW1wdHkgdmVyc2lvbi4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFi
YXNlLWlucHV0cy1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNjIyMzApCShmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0OjYyMjMwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMSBAQAorVGhpcyB0ZXN0IG1ha2Vz
IHN1cmUgdGhhdCBvcGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlkIHBhcmFtZXRl
cnMuCitQQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCitQQVNTOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyCitQQVNTOiB1bmRlZmluZWQKK1BBU1M6IHVuZGVmaW5lZAorUEFT
UzogdW5kZWZpbmVkCitQQVNTOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNwor
UEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4KK1BBU1M6IG9wZW5EYXRhYmFzZVN5
bmMoKSBzdWNjZWVkZWQuCitQQVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEg
Y3JlYXRpb24gY2FsbGJhY2sgc3VjY2VlZGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMt
c3luYy5odG1sCShyZXZpc2lvbiA2MjIzMCkJKGZyb20gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sOjYyMjMwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Bl
bi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcycpIj4KK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQg
b3BlbkRhdGFiYXNlU3luYygpIGFjY2VwdHMgb25seSB2YWxpZCBwYXJhbWV0ZXJzLgorPHByZSBp
ZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNl
LWlucHV0cy1zeW5jLmh0bWwJKHJldmlzaW9uIDYyMjMwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC00LDcgKzQsNyBAQAogPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1j
b21tb24uanMiPjwvc2NyaXB0PgogPC9oZWFkPgogCi08Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jl
c291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzJykiPgorPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCdyZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5qcycpIj4KIFRoaXMg
dGVzdCBtYWtlcyBzdXJlIHRoYXQgb3BlbkRhdGFiYXNlU3luYygpIGFjY2VwdHMgb25seSB2YWxp
ZCBwYXJhbWV0ZXJzLgogPHByZSBpZD0iY29uc29sZSI+CiA8L3ByZT4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24t
c3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4t
ZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMyBAQAorVGhpcyB0ZXN0cyB0aGF0IGNhbGxpbmcgb3BlbkRhdGFiYXNlIHdp
dGggYW4gZW1wdHkgdmVyc2lvbiBzdHJpbmcgc2V0cyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRo
YXQgZGF0YWJhc2UgdG8gdGhlIGVtcHR5IHN0cmluZyBhbmQgc3Vic2VxdWVudCBhdHRlbXB0cyB0
byBvcGVuIHRoZSBkYXRhYmFzZSB3aXRoIGEgZGlmZmVyZW50IGV4cGVjdGVkIHZlcnNpb24gdGhy
b3cgYW4gZXhjZXB0aW9uLgorUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNl
dC1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXNldC1l
bXB0eS12ZXJzaW9uLXN5bmMuanMnKSI+CitUaGlzIHRlc3RzIHRoYXQgY2FsbGluZyBvcGVuRGF0
YWJhc2Ugd2l0aCBhbiBlbXB0eSB2ZXJzaW9uIHN0cmluZyBzZXRzIHRoZSBjdXJyZW50IHZlcnNp
b24gb2YgdGhhdCBkYXRhYmFzZSB0byB0aGUgZW1wdHkgc3RyaW5nIGFuZCBzdWJzZXF1ZW50IGF0
dGVtcHRzIHRvIG9wZW4gdGhlIGRhdGFiYXNlIHdpdGggYSBkaWZmZXJlbnQgZXhwZWN0ZWQgdmVy
c2lvbiB0aHJvdyBhbiBleGNlcHRpb24uCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Bl
bi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDYyNDA3KQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTEgKzAsMCBAQAotVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBvcGVuRGF0YWJh
c2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlkIHBhcmFtZXRlcnMuCi1QQVNTOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyCi1QQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCi1Q
QVNTOiB1bmRlZmluZWQKLVBBU1M6IHVuZGVmaW5lZAotUEFTUzogdW5kZWZpbmVkCi1QQVNTOiBU
WVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNwotUEFTUzogb3BlbkRhdGFiYXNlU3lu
YygpIHN1Y2NlZWRlZC4KLVBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuCi1QQVNT
OiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sgc3Vj
Y2VlZGVkLgotCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRh
dGFiYXNlLXN5bmMtaW5wdXRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sCShyZXZpc2lvbiA2
MjQwNykKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
c3luYy1pbnB1dHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMCwwIEBACi08IWRvY3R5
cGUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5w
dXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IG9ubG9hZD0icnVuVGVz
dCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanMnKSI+Ci1UaGlzIHRlc3Qg
bWFrZXMgc3VyZSB0aGF0IG9wZW5EYXRhYmFzZVN5bmMoKSBhY2NlcHRzIG9ubHkgdmFsaWQgcGFy
YW1ldGVycy4KLTxwcmUgaWQ9ImNvbnNvbGUiPgotPC9wcmU+Ci08L2JvZHk+Ci08L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxl
LXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJh
bnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5z
YWN0aW9uLWluLXByb2dyZXNzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMgQEAKK1Rlc3QgdGhhdCBhIHNlY29uZCBoYW5kbGUgdG8gdGhlIHNhbWUgZGF0YWJhc2Ug
Y2FuIGJlIG9wZW5lZCBpbnNpZGUgYSB0cmFuc2FjdGlvbiBydW5uaW5nIG9uIHRoZSBmaXJzdCBo
YW5kbGUuCitQQVNTOiBzZWNvbmQgaGFuZGxlIG9wZW5lZCBzdWNjZXNzZnVsbHkuCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJh
bnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4t
cHJvZ3Jlc3Mtc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1z
eW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2Ut
d2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5qcycpIj4KK1Rlc3QgdGhhdCBhIHNl
Y29uZCBoYW5kbGUgdG8gdGhlIHNhbWUgZGF0YWJhc2UgY2FuIGJlIG9wZW5lZCBpbnNpZGUgYSB0
cmFuc2FjdGlvbiBydW5uaW5nIG9uIHRoZSBmaXJzdCBoYW5kbGUuCis8cHJlIGlkPSJjb25zb2xl
Ij4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlwZXMtc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlwZXMtc3luYy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3IEBACitUZXN0IHRoYXQgdGhlIHZhbHVlcyByZXR1cm5lZCBieSBEQiBxdWVyaWVzIGFy
ZSBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSB2YWx1ZXMgaW5zZXJ0ZWQgaW4gdGhlIGRhdGFiYXNl
LgorUEFTUzogcHJvcGVydHkgJ3RpbWVzdGFtcCcgT0ssIHR5cGUgd2FzIG51bWJlcgorUEFTUzog
cHJvcGVydHkgJ2lkJyBPSywgdHlwZSB3YXMgbnVtYmVyCitQQVNTOiBwcm9wZXJ0eSAncmVhbCcg
T0ssIHR5cGUgd2FzIG51bWJlcgorUEFTUzogcHJvcGVydHkgJ3RleHQnIE9LLCB0eXBlIHdhcyBz
dHJpbmcKK1BBU1M6IHByb3BlcnR5ICdibG9iJyBPSywgdHlwZSB3YXMgc3RyaW5nCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0
YS10eXBlcy1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5w
dXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVz
dCgncmVzb3VyY2VzL3NxbC1kYXRhLXR5cGVzLXN5bmMuanMnKSI+CitUZXN0IHRoYXQgdGhlIHZh
bHVlcyByZXR1cm5lZCBieSBEQiBxdWVyaWVzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSB2
YWx1ZXMgaW5zZXJ0ZWQgaW4gdGhlIGRhdGFiYXNlLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3By
ZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5j
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOSBAQAorVGVzdCB0aGF0IHRoZSBjb3JyZWN0IGV4Y2VwdGlvbnMgYXJlIHRo
cm93biBpbiBleGNlcHRpb25hbCBzaXR1YXRpb25zLgorUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBl
cnJvciBjb2RlIFVOS05PV05fRVJSCitQQVNTOiBleHBlY3RlZCBhbmQgZ290IGVycm9yIGNvZGUg
U1lOVEFYX0VSUgorUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFNZTlRBWF9FUlIK
K1BBU1M6IGV4cGVjdGVkIGFuZCBnb3QgZXJyb3IgY29kZSBVTktOT1dOX0VSUgorUEFTUzogZXhw
ZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFFVT1RBX0VSUgorUEFTUzogVHJhbnNhY3Rpb24gd2Fz
IHJvbGxlZCBiYWNrIGJ5IFNRTGl0ZSBhcyBleHBlY3RlZC4KK1BBU1M6IGV4cGVjdGVkIGFuZCBn
b3QgZXJyb3IgY29kZSBWRVJTSU9OX0VSUgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Nx
bC1leGNlcHRpb24tY29kZXMtc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBA
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21t
b24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291
cmNlcy9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMuanMnKSI+CitUZXN0IHRoYXQgdGhlIGNvcnJl
Y3QgZXhjZXB0aW9ucyBhcmUgdGhyb3duIGluIGV4Y2VwdGlvbmFsIHNpdHVhdGlvbnMuCis8cHJl
IGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0
aG9yaXplci1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorVGVzdCB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci4K
K0JlZ2lubmluZyB3cml0ZSB0cmFuc2FjdGlvbjoKK1NRTElURV9DUkVBVEVfVEFCTEUgc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4K
K1NRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NS
RUFURV9URU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVN
UF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RSSUdHRVIgc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgor
U1FMSVRFX0NSRUFURV9WVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRp
b25dICg1KQorU1FMSVRFX1JFQUQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9TRUxFQ1Qg
c3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9ERUxFVEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4K
K1NRTElURV9JTlNFUlQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9VUERBVEUgc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9QUkFHTUEgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBT
UUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQu
CitTUUxJVEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9UUkFOU0FD
VElPTiBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVf
QVRUQUNIIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElU
RV9ERVRBQ0ggc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FM
SVRFX1JFSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9BTkFMWVpFIHN0YXRlbWVu
dCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9QX0lOREVYIHN0
YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9URU1QX1RBQkxFIHN0YXRlbWVudCBzdWNj
ZWVkZWQuCitTUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NR
TElURV9EUk9QX1RFTVBfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVFJJ
R0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVklFVyBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorU1FMSVRFX0RST1BfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1dyaXRlIHRy
YW5zYWN0aW9uIHN1Y2NlZWRlZC4KKworQmVnaW5uaW5nIHJlYWQgdHJhbnNhY3Rpb25zOgorU1FM
SVRFX0NSRUFURV9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0g
KDUpCitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JF
QVRFX0lOREVYIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NR
TElURV9DUkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2Vw
dGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQgZmFpbGVkOiBb
b2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1l
bnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1RSSUdH
RVIgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0NS
RUFURV9WSUVXIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NR
TElURV9DUkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9u
XSAoNSkKK1NRTElURV9DUkVBVEVfSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9D
UkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1Q
X1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9WSUVXIHN0
YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2Nl
ZWRlZC4KK1NRTElURV9DUkVBVEVfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NS
RUFURV9WVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQor
U1FMSVRFX1JFQUQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9TRUxFQ1Qgc3RhdGVtZW50
IHN1Y2NlZWRlZC4KK1NRTElURV9ERUxFVEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxF
eGNlcHRpb25dICg1KQorU1FMSVRFX0lOU0VSVCBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNR
TEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfVVBEQVRFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3Qg
U1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9QUkFHTUEgc3RhdGVtZW50IGZhaWxlZDogW29iamVj
dCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6
IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQg
ZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfVFJBTlNBQ1RJT04gc3Rh
dGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0FUVEFDSCBz
dGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfREVUQUNI
IHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9SRUlO
REVYIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9B
TkFMWVpFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElU
RV9EUk9QX0lOREVYIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkK
K1NRTElURV9EUk9QX1RFTVBfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNl
cHRpb25dICg1KQorU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IFtv
YmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9QX1RFTVBfVklFVyBzdGF0ZW1lbnQg
ZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9UUklHR0VSIHN0
YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9QX1ZJ
RVcgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RS
T1BfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorUmVh
ZCB0cmFuc2FjdGlvbnMgc3VjY2VlZGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhv
cml6ZXItc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy90ZXN0LWF1
dGhvcml6ZXItc3luYy5qcycpIj4KK1Rlc3QgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuCis8cHJl
IGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1y
ZXVzZS1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFu
Z2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
OSBAQAordmFyIGRiID0gbnVsbDsKK3RyeSB7CisgICAgdmFyIGRiTmFtZSA9ICJDaGFuZ2VWZXJz
aW9uSGFuZGxlUmV1c2VUZXN0IiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CisgICAgZGIgPSBv
cGVuRGF0YWJhc2VTeW5jKGRiTmFtZSwgIiIsICJUZXN0IHRoYXQgdGhlIERCIGhhbmRsZSBpcyB2
YWxpZCBhZnRlciBjaGFuZ2luZyB0aGUgdmVyc2lvbi4iLCAxKTsKKyAgICB2YXIgdmVyc2lvbiA9
IGRiLnZlcnNpb247CisgICAgdmFyIG5ld1ZlcnNpb24gPSB2ZXJzaW9uID8gKHBhcnNlSW50KHZl
cnNpb24pICsgMSkudG9TdHJpbmcoKSA6ICIxIjsKKyAgICBkYi5jaGFuZ2VWZXJzaW9uKHZlcnNp
b24sIG5ld1ZlcnNpb24sIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNT
OiBjaGFuZ2VWZXJzaW9uKCkgdHJhbnNhY3Rpb24gY2FsbGJhY2sgd2FzIGNhbGxlZC4iKTsKKyAg
ICB9KTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBjaGFuZ2VWZXJz
aW9uKCkgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgZXJyKTsKK30KKwordHJ5IHsKKyAgICBkYi50
cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdHgu
ZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCkiKTsK
KyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCAqIGZyb20gVGVzdCIpOworICAgICAg
ICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IE5vIGV4Y2VwdGlvbiB0aHJvd24gd2hpbGUgZXhlY3V0
aW5nIHN0YXRlbWVudHMuIik7CisgICAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICAgICAg
cG9zdE1lc3NhZ2UoIkZBSUw6IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIHdoaWxlIGV4ZWN1dGlu
ZyBzdGF0ZW1lbnRzOiAiICsgZXJyKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIHBvc3RNZXNz
YWdlKCJQQVNTOiBObyBleGNlcHRpb24gdGhyb3duIHdoaWxlIHJ1bm5pbmcgYSB0cmFuc2FjdGlv
bi4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBBbiBleGNlcHRp
b24gd2FzIHRocm93biB3aGlsZSBydW5uaW5nIGEgdHJhbnNhY3Rpb246ICIgKyBlcnIpOworfQor
Citwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24t
c3luYy0xLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMS5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1MCBAQAordmFyIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfSElYSUVfVEVTVCA9ICIyIjsK
K3ZhciBFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX1JFTE9BRCA9ICIzIjsKKworZnVuY3Rpb24gZW1w
dHlGdW5jdGlvbigpIHsgfQorCit2YXIgZGIxID0gb3BlbkRhdGFiYXNlU3luYygiQ2hhbmdlVmVy
c2lvblRlc3QiLCAiMSIsICJUZXN0IGZvciB0aGUgZGF0YWJhc2UuY2hhbmdlVmVyc2lvbigpIGZ1
bmN0aW9uIiwgMSk7Cit2YXIgZGIyID0gb3BlbkRhdGFiYXNlU3luYygiQ2hhbmdlVmVyc2lvblRl
c3QiLCAiMSIsICJUZXN0IGZvciB0aGUgZGF0YWJhc2UuY2hhbmdlVmVyc2lvbigpIGZ1bmN0aW9u
IiwgMSk7CisKKy8vIEZpcnN0IHJ1biBIaXhpZSdzIHRlc3QgdG8gZW5zdXJlIGJhc2ljIGNoYW5n
ZVZlcnNpb24oKSBmdW5jdGlvbmFsaXR5IHdvcmtzIChzZWUgYnVnIDI4NDE4KS4KK2RiMS5jaGFu
Z2VWZXJzaW9uKCIxIiwgRVhQRUNURURfVkVSU0lPTl9BRlRFUl9ISVhJRV9URVNULCBlbXB0eUZ1
bmN0aW9uKTsKK2lmIChkYjIudmVyc2lvbiAhPSBkYjEudmVyc2lvbikgeworICAgIHBvc3RNZXNz
YWdlKCJGQUlMOiBjaGFuZ2luZyBkYjEncyB2ZXJzaW9uICgiICsgZGIxLnZlcnNpb24gKyAiKSBk
aWQgbm90IGNoYW5nZSBkYjIncyB2ZXJzaW9uICgiICsgZGIyLnZlcnNpb24gKyAiKSBhcyBleHBl
Y3RlZC4iKTsKKyAgICBwb3N0TWVzc2FnZSgiZmFpbCIpOworfSBlbHNlCisgICAgcG9zdE1lc3Nh
Z2UoIlBBU1M6IGNoYW5naW5nIGRiMSdzIHZlcnNpb24gKCIgKyBkYjEudmVyc2lvbiArICIpIGNo
YW5nZWQgZGIyJ3MgdmVyc2lvbiB0b28uIik7CisKK2RiMi50cmFuc2FjdGlvbihmdW5jdGlvbih0
eCkgeworICAgIHRyeSB7CisgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBO
T1QgRVhJU1RTIFRlc3QgKEZvbyBJTlQpIik7CisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBU
aGUgREIgdmVyc2lvbiBjaGFuZ2VkLCBleGVjdXRpbmcgYW55IHN0YXRlbWVudCBvbiBkYjIgc2hv
dWxkIGZhaWwuIik7CisgICAgICAgIHBvc3RNZXNzYWdlKCJmYWlsIik7CisgICAgfSBjYXRjaChl
cnIpIHsKKyAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBFeGVjdXRpbmcgYSBzdGF0ZW1lbnQgb24g
ZGIyIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4iKTsKKyAgICB9Cit9KTsKKworLy8g
TWFrZSBzdXJlIGFueSBuZXcgaGFuZGxlIHRvIHRoZSBzYW1lIERCIHNlZXMgdGhlIG5ldyB2ZXJz
aW9uCit0cnkgeworICAgIHZhciBkYjMgPSBvcGVuRGF0YWJhc2VTeW5jKCJDaGFuZ2VWZXJzaW9u
VGVzdCIsIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfSElYSUVfVEVTVCwgIiIsIDEpOworICAgIHBv
c3RNZXNzYWdlKCJQQVNTOiBTdWNjZXNzZnVsbHkgb3BlbmVkIGEgbmV3IERCIGhhbmRsZS4iKTsK
K30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBVbmV4cGVjdGVkIGV4Y2Vw
dGlvbiB0aHJvd24gd2hpbGUgdHJ5aW5nIHRvIG9wZW4gYSBuZXcgREIgaGFuZGxlOiAiICsgZXJy
KTsKKyAgICBwb3N0TWVzc2FnZSgiZmFpbCIpOworfQorCitpZiAoZGIxLnZlcnNpb24gIT0gZGIz
LnZlcnNpb24pIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogZGIxLnZlcnNpb24gKCIgKyBkYjEu
dmVyc2lvbiArICIpIGRvZXMgbm90IG1hdGNoIGRiMy52ZXJzaW9uKCIgKyBkYjMudmVyc2lvbiAr
IikiKTsKKyAgICBwb3N0TWVzc2FnZSgiZmFpbCIpOworfSBlbHNlCisgICAgcG9zdE1lc3NhZ2Uo
IlBBU1M6IGRiMS52ZXJzaW9uICgiICsgZGIxLnZlcnNpb24gKyAiKSBtYXRjaGVzIGRiMy52ZXJz
aW9uLiIpOworCisvLyBOb3cgdHJ5IGEgdGVzdCB0byBlbnN1cmUgdGhlIHZlcnNpb24gcGVyc2lz
dHMgYWZ0ZXIgcmVsb2FkaW5nIChzZWUgYnVnIDI3ODM2KQorZGIxLmNoYW5nZVZlcnNpb24oRVhQ
RUNURURfVkVSU0lPTl9BRlRFUl9ISVhJRV9URVNULCBFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX1JF
TE9BRCwKKyAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBUQUJMRSBJRiBFWElTVFMgSW5mbyIpOworICAgICAg
ICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT
IEluZm8gKFZlcnNpb24gSU5URUdFUikiKTsKKyAgICAgICAgICAgICAgICAgICAgICB0eC5leGVj
dXRlU3FsKCJJTlNFUlQgSU5UTyBJbmZvIFZBTFVFUyAoPykiLCBbRVhQRUNURURfVkVSU0lPTl9B
RlRFUl9SRUxPQURdKTsKKyAgICAgICAgICAgICAgICAgIH0pOworCitwb3N0TWVzc2FnZSgiZG9u
ZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2No
YW5nZS12ZXJzaW9uLXN5bmMtMi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0yLmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5n
ZS12ZXJzaW9uLXN5bmMtMi5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAordmFyIEVY
UEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FEID0gJzMnOworCit2YXIgZGIgPSBvcGVuRGF0YWJh
c2VTeW5jKCJDaGFuZ2VWZXJzaW9uVGVzdCIsICIiLCAiVGVzdCB0aGUgY2hhbmdlVmVyc2lvbigp
IGZ1bmN0aW9uLiIsIDEpOworaWYgKGRiLnZlcnNpb24gPT0gRVhQRUNURURfVkVSU0lPTl9BRlRF
Ul9SRUxPQUQpCisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGRiLnZlcnNpb24gaXMgIiArIEVYUEVD
VEVEX1ZFUlNJT05fQUZURVJfUkVMT0FEICsgIiBhcyBleHBlY3RlZC4iKTsKK2Vsc2UKKyAgICBw
b3N0TWVzc2FnZSgiRkFJTDogZGIudmVyc2lvbiBpcyAiICsgZGIudmVyc2lvbiArICI7IGV4cGVj
dGVkICIgKyBFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX1JFTE9BRCk7CisKKy8vIFJlc2V0IHRoZSB2
ZXJzaW9uOyBvdGhlcndpc2UgdGhpcyB0ZXN0IHdpbGwgZmFpbCB0aGUgbmV4dCB0aW1lIGl0J3Mg
cnVuCitkYi5jaGFuZ2VWZXJzaW9uKGRiLnZlcnNpb24sICIxIiwgZnVuY3Rpb24odHgpIHsgfSk7
CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9yZXNvdXJjZXMvZW1wdHktc3RhdGVtZW50LXN5bmMuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2VtcHR5LXN0YXRlbWVu
dC1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvcmVzb3VyY2VzL2VtcHR5LXN0YXRlbWVudC1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEyIEBACit0cnkgeworICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkVtcHR5U3Rh
dGVtZW50U3luYyIsICIxLjAiLCAiVGVzdCBhbiBlbXB0eSBzdGF0ZW1lbnQuIiwgMSk7CisgICAg
ZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IHR4LmV4
ZWN1dGVTcWwoIiIpOworICAgICAgICBwb3N0TWVzc2FnZShyZXN1bHQgPyAiRkFJTDogcmVzdWx0
IGlzIG5vdCBudWxsIiA6ICJQQVNTOiByZXN1bHQgaXMgbnVsbCIpOworICAgIH0pOworICAgIHBv
c3RNZXNzYWdlKCJQQVNTIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJ
TCIpOworfQorCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0
ZS1zcWwtYXJncy1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5qcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3MCBAQAordmFyIHRocm93T25Ub1N0cmluZ09iamVjdCA9IHsgfTsKK3Ro
cm93T25Ub1N0cmluZ09iamVjdC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5v
dCBjYWxsIHRvU3RyaW5nIG9uIHRoaXMgb2JqZWN0LiIgfTsKKwordmFyIHRocm93T25HZXRMZW5n
dGhPYmplY3QgPSB7IH07Cit0aHJvd09uR2V0TGVuZ3RoT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18o
Imxlbmd0aCIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBnZXQgbGVuZ3RoIG9mIHRoaXMg
b2JqZWN0LiI7IH0pOworCit2YXIgdGhyb3dPbkdldFplcm9PYmplY3QgPSB7IGxlbmd0aDogMSB9
OwordGhyb3dPbkdldFplcm9PYmplY3QuX19kZWZpbmVHZXR0ZXJfXygiMCIsIGZ1bmN0aW9uICgp
IHsgdGhyb3cgIkNhbm5vdCBnZXQgMCBwcm9wZXJ0eSBvZiB0aGlzIG9iamVjdC4iOyB9KTsKKwor
dmFyIGV4cGVjdE5vRXhjZXB0aW9uID0gWworICAgICciIicsCisgICAgJyIiLCBudWxsJywKKyAg
ICAnIiIsIHVuZGVmaW5lZCcsCisgICAgJyIiLCBbXScsCisgICAgJyIiLCBbICJhcmcwIiBdJywK
KyAgICAnIiIsIHsgfScsCisgICAgJyIiLCB7IGxlbmd0aDogMCB9JywKKyAgICAnIiIsIHsgbGVu
Z3RoOiAxLCAwOiAiYXJnMCIgfScsCitdOworCit2YXIgZXhwZWN0RXhjZXB0aW9uID0gWworICAg
ICcnLAorICAgICdudWxsJywKKyAgICAndW5kZWZpbmVkJywKKyAgICAnMCcsCisgICAgJ3Rocm93
T25Ub1N0cmluZ09iamVjdCcsCisgICAgJyIiLCB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0JywKKyAg
ICAnIiIsIHRocm93T25HZXRaZXJvT2JqZWN0JywKKyAgICAnIiIsIFsgdGhyb3dPblRvU3RyaW5n
T2JqZWN0IF0nLAorICAgICciIiwgMCcsCisgICAgJyIiLCAiIicsCitdOworCitmdW5jdGlvbiB0
cnlFeGVjdXRlU3FsKHRyYW5zYWN0aW9uLCBwYXJhbWV0ZXJMaXN0KQoreworICAgIHRyeSB7Cisg
ICAgICAgIGV2YWwoJ3RyYW5zYWN0aW9uLmV4ZWN1dGVTcWwoJyArIHBhcmFtZXRlckxpc3QgKyAn
KScpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKKyAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1blRyYW5zYWN0
aW9uVGVzdCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCwgZXhwZWN0RXhjZXB0aW9uKQorewor
ICAgIHZhciBleGNlcHRpb24gPSB0cnlFeGVjdXRlU3FsKHRyYW5zYWN0aW9uLCBwYXJhbWV0ZXJM
aXN0KTsKKyAgICBpZiAoZXhwZWN0RXhjZXB0aW9uKSB7CisgICAgICAgIGlmIChleGNlcHRpb24p
CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVy
TGlzdCArICIpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4iKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRl
ckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGV4
ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSB0aHJldyBhbiBleGNlcHRpb246ICIgKyBl
eGNlcHRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzog
ZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0
aW9uLiIpOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0cyh0cmFuc2Fj
dGlvbikKK3sKKyAgICBmb3IgKGkgaW4gZXhwZWN0Tm9FeGNlcHRpb24pCisgICAgICAgIHJ1blRy
YW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgZXhwZWN0Tm9FeGNlcHRpb25baV0sIGZhbHNlKTsK
KyAgICBmb3IgKGkgaW4gZXhwZWN0RXhjZXB0aW9uKQorICAgICAgICBydW5UcmFuc2FjdGlvblRl
c3QodHJhbnNhY3Rpb24sIGV4cGVjdEV4Y2VwdGlvbltpXSwgdHJ1ZSk7Cit9CisKK3ZhciBkYiA9
IG9wZW5EYXRhYmFzZVN5bmMoIkV4ZWN1dGVTUUxBcmdzVGVzdCIsICIxLjAiLCAiVGVzdCBvZiBo
YW5kbGluZyBvZiB0aGUgYXJndW1lbnRzIHRvIFNRTFRyYW5zYWN0aW9uU3luYy5leGVjdXRlU3Fs
IiwgMSk7CitkYi50cmFuc2FjdGlvbihydW5UcmFuc2FjdGlvblRlc3RzKTsKK3Bvc3RNZXNzYWdl
KCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJj
ZXMvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9leGVjdXRl
c3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZXNxbC1hY2Nl
cHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIz
IEBACitmdW5jdGlvbiBleGVjdXRlU3RhdGVtZW50KHR4LCBleHBlY3RlZFRvUGFzcywgc3RhdGVt
ZW50KQoreworICAgIHRyeSB7CisgICAgICAgIHR4LmV4ZWN1dGVTcWwoc3RhdGVtZW50KTsKKyAg
ICAgICAgcG9zdE1lc3NhZ2UoZXhwZWN0ZWRUb1Bhc3MgPyAiUEFTUzogIiArIHN0YXRlbWVudCA6
ICJGQUlMOiAiICsgc3RhdGVtZW50KTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgcG9z
dE1lc3NhZ2UoIWV4cGVjdGVkVG9QYXNzID8gIlBBU1M6ICIgKyBzdGF0ZW1lbnQgOiAiRkFJTDog
IiArIHN0YXRlbWVudCk7CisgICAgfQorfQorCit2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJF
eGVjdXRlU1FMQWNjZXB0c09ubHlPbmVTdGF0ZW1lbnRUZXN0IiwgIjEuMCIsICIiLCAxKTsKK2Ri
LnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRB
QkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCkiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50
KHR4LCB0cnVlLCAiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDEpIik7CisgICAgZXhlY3V0ZVN0
YXRlbWVudCh0eCwgdHJ1ZSwgIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgyKTsiKTsKKyAgICBl
eGVjdXRlU3RhdGVtZW50KHR4LCB0cnVlLCAiICAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDMp
ICAgICIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIHRydWUsICIgICBJTlNFUlQgSU5UTyBU
ZXN0IFZBTFVFUyAoNCk7ICAgIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgdHJ1ZSwgIklO
U0VSVCBJTlRPIFRlc3QgVkFMVUVTICg1KSAgIDsiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCBmYWxzZSwgIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg2KTsgZ2FyYmFnZSIpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsIGZhbHNlLCAiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDcpOyBJ
TlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoOCkiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCBm
YWxzZSwgIiAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDkpOyAgIElOU0VSVCBJTlRPIFRlc3Qg
VkFMVUVTICgxMCk7ICAgIik7Cit9KTsKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvbXVsdGlwbGUtdHJhbnNhY3Rp
b25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1v
bi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1k
aWZmZXJlbnQtaGFuZGxlcy1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACitm
dW5jdGlvbiBydW5UcmFuc2FjdGlvbihkYikKK3sKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlv
bih0eCkgeworICAgICAgIC8vIEV4ZWN1dGUgYSByZWFkLW9ubHkgc3RhdGVtZW50CisgICAgICAg
dHguZXhlY3V0ZVNxbCgiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsiKTsKKworICAgICAgIC8v
IEV4ZWN1dGUgYSB3cml0ZSBzdGF0ZW1lbnQgdG8gbWFrZSBzdXJlIFNRTGl0ZSB0cmllcyB0byBh
Y3F1aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBEQiBmaWxlCisgICAgICAgdHguZXhlY3V0
ZVNxbCgiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKD8pOyIsIFsxXSk7CisgICAgfSk7Cit9CisK
K3ZhciBkYjEgPSBvcGVuRGF0YWJhc2VTeW5jKCJNdWx0aXBsZVRyYW5zYWN0aW9uc09uRGlmZmVy
ZW50SGFuZGxlc1Rlc3QiLCAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0
IHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBEQi4iLCAxKTsK
K2RiMS50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFU
RSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIpOworfSk7CisKK3ZhciBkYjIg
PSBvcGVuRGF0YWJhc2VTeW5jKCJNdWx0aXBsZVRyYW5zYWN0aW9uc09uRGlmZmVyZW50SGFuZGxl
c1Rlc3QiLCAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0IHRyYW5zYWN0
aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBEQi4iLCAxKTsKK2lmIChkYjEg
PT0gZGIyKQorICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBkYjEgPT0gZGIyIik7CitlbHNlIHsKKyAg
ICB0cnkgeworICAgICAgICBydW5UcmFuc2FjdGlvbihkYjEpOworICAgICAgICBydW5UcmFuc2Fj
dGlvbihkYjIpOworICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUyIpOworICAgIH0gY2F0Y2ggKGVy
cikgeworICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVycik7CisgICAgfQorfQorCitw
b3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1zeW5jLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10cmFu
c2FjdGlvbnMtc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtc3luYy5qcwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMiBAQAordmFyIGNvbXBsZXRlID0gMDsKKworZnVuY3Rpb24gY2hl
Y2tDb21wbGV0aW9uKCkKK3sKKyAgICBpZiAoKytjb21wbGV0ZSA9PSAyICYmIHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICB2YXIgZGIgPSBvcGVuRGF0YWJh
c2VXaXRoU3VmZml4KCJNdWx0aXBsZVRyYW5zYWN0aW9uc1Rlc3QiLCAiMS4wIiwgIlRlc3QgdG8g
bWFrZSBzdXJlIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBjYW4gYmUgcXVldWVkIGF0IG9uY2UgZm9y
IGFuIEhUTUw1IGRhdGFiYXNlIiwgMzI3NjgpOworCisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rp
b24odHgpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiAxIFN0YXJ0ZWQiKTsKKyAgICB9LCBm
dW5jdGlvbihlcnIpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiAxIEVycm9yZWQgLSAiICsg
ZXJyKTsKKyAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGxvZygiVHJhbnNhY3Rpb24gMSBTdWNjZWVkZWQiKTsKKyAgICAgICAgY2hlY2tDb21w
bGV0aW9uKCk7CisgICAgfSk7CisKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgewor
ICAgICAgICBsb2coIlRyYW5zYWN0aW9uIDIgU3RhcnRlZCIpOworICAgIH0sIGZ1bmN0aW9uKGVy
cikgeworICAgICAgICBsb2coIlRyYW5zYWN0aW9uIDIgRXJyb3JlZCAtICIgKyBlcnIpOworICAg
ICAgICBjaGVja0NvbXBsZXRpb24oKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9n
KCJUcmFuc2FjdGlvbiAyIFN1Y2NlZWRlZCIpOworICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsK
KyAgICB9KTsKK30KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJh
c2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNh
bGxiYWNrLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK3ZhciBjcmVhdGlv
bkNhbGxiYWNrQ2FsbGVkMSA9IGZhbHNlOwordmFyIGRiMU5hbWUgPSAiT3BlbkRhdGFiYXNlQ3Jl
YXRpb25DYWxsYmFjazEiICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKK3ZhciBkYjJOYW1lID0g
Ik9wZW5EYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2syIiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7
Cit2YXIgZGIxID0gb3BlbkRhdGFiYXNlU3luYyhkYjFOYW1lLCAiMS4wIiwgIiIsIDEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihkYikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBDcmVhdGlvbiBjYWxsYmFjayB3YXMgY2Fs
bGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYi52ZXJzaW9uICE9
ICIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgiRkFJ
TDogV3JvbmcgdmVyc2lvbiAiICsgZGIudmVyc2lvbiArICI7IGVtcHR5IHN0cmluZyBleHBlY3Rl
ZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBWZXJzaW9uIHNldCB0byBl
bXB0eSBzdHJpbmcgYXMgZXhwZWN0ZWQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKwordmFyIGRiMUZhaWwgPSBudWxsOwordHJ5IHsKKyAgICBkYjFGYWlsID0gb3BlbkRhdGFi
YXNlU3luYyhkYjFOYW1lLCAiMS4wIiwgIiIsIDEpOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBB
biBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRpb24gc2hvdWxkJ3ZlIGJlZW4gdGhyb3duLiIpOwor
fSBjYXRjaChlcnIpIHsKKyAgICBpZiAoZGIxRmFpbCkKKyAgICAgICAgcG9zdE1lc3NhZ2UoIkZB
SUw6IGRiMUZhaWwgc2hvdWxkIGhhdmUgYmVlbiBudWxsLiIpOworICAgIGVsc2UKKyAgICAgICAg
cG9zdE1lc3NhZ2UoIlBBU1M6IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGFuZCBkYjFGYWlsIGlz
IG51bGwgYXMgZXhwZWN0ZWQuIik7Cit9CisKKy8vIE9wZW4gYSBoYW5kbGUgdG8gYW5vdGhlciBk
YXRhYmFzZSwgZmlyc3Qgd2l0aG91dCBhIGNyZWF0aW9uIGNhbGxiYWNrLCB0aGVuIHdpdGggb25l
LgorLy8gTWFrZSBzdXJlIHRoZSBjcmVhdGlvbiBjYWxsYmFjayBpcyBub3QgY2FsbGVkLgordmFy
IGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoZGIyTmFtZSwgIjEuMCIsICIiLCAxKTsKK2RiMiA9IG9w
ZW5EYXRhYmFzZVN5bmMoZGIyTmFtZSwgIjEuMCIsICIiLCAxLCBmdW5jdGlvbihkYikgeyBwb3N0
TWVzc2FnZSgiRkFJTDogQ3JlYXRpb24gY2FsbGJhY2sgc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2Fs
bGVkLiIpOyB9KTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24t
c3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9y
ZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAor
dHJ5IHsKKyAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJPcGVuRGF0YWJhc2VFbXB0eVZl
cnNpb25UZXN0IiwgIiIsICJUZXN0IHRoYXQgd2UgY2FuIG9wZW4gZGF0YWJhc2VzIHdpdGggYW4g
ZW1wdHkgdmVyc2lvbi4iLCAxKTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUyIpOworfSBjYXRjaCAo
ZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIpOworfQorcG9zdE1lc3NhZ2Uo
ImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5j
LmpzCShyZXZpc2lvbiA2MjIzMCkJKGZyb20gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanM6NjIyMzApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1pbnB1
dHMtc3luYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACit2YXIgZGI7CisKK3Zh
ciBub3RBU3RyaW5nID0geworICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsgdGhyb3cgImZvbyI7
IH0KK307CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCk7CisgICAgcG9zdE1l
c3NhZ2UoIkZBSUw6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGhvdXQgYW55IGFyZ3Vt
ZW50IHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBw
b3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsKKyAgICBkYiA9
IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iKTsKKyAgICBwb3N0TWVzc2Fn
ZSgiRkFJTDogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBmZXdlciB0aGFuIGZvdXIg
YXJndW1lbnRzIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIik7Cit9IGNhdGNoIChlcnIpIHsK
KyAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsKKyAg
ICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMobm90QVN0cmluZywgIkRCVmVyc2lvbiIsICJEQkRlc2Ny
aXB0aW9uIiwgMTAyNCk7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBmaXJzdCBhcmd1bWVu
dCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKK30gY2F0Y2ggKGVy
cikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCit0cnkg
eworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgbm90QVN0cmluZywgIkRCRGVz
Y3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIHNlY29uZCBhcmd1
bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKK30gY2F0Y2gg
KGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCit0
cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsIG5v
dEFTdHJpbmcsIDEwMjQpOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgdGhpcmQgYXJndW1l
bnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11c3QgYmUgYSBzdHJpbmcuIik7Cit9IGNhdGNoIChl
cnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5
IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJE
ZXNjcmlwdGlvbiIsIDEwMjQsIDApOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgZmlmdGgg
YXJndW1lbnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11c3QgYmUgYW4gb2JqZWN0LCBpZiBwcmVz
ZW50LiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIu
bWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUi
LCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgi
UEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4iKTsKK30gY2F0Y2ggKGVycikgewor
ICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCisvLyBSdW4gdGhp
cyB0ZXN0IGNhc2Ugb25lIG1vcmUgdGltZSwgdG8gdGVzdCB0aGUgY29kZSB3aXRoIGFuIGV4aXN0
aW5nIGRhdGFiYXNlLgordHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIs
ICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOworICAgIHBvc3RNZXNzYWdlKCJQ
QVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLiIpOworfSBjYXRjaCAoZXJyKSB7Cisg
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAg
Ly8gTmVlZCB0byBjcmVhdGUgYSBuZXcgZGF0YWJhc2UsIG90aGVyd2lzZSB0aGUgY3JlYXRpb24g
Y2FsbGJhY2sgd29uJ3QgYmUgaW52b2tlZC4KKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRC
TmFtZUNyZWF0aW9uQ2FsbGJhY2siICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwgIkRCVmVyc2lv
biIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24oZGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQ
QVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sg
c3VjY2VlZGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKK30gY2F0Y2ggKGVy
cikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCitwb3N0
TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
cmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1k
YXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc2V0LWVt
cHR5LXZlcnNpb24tc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACit2YXIgZGIg
PSBvcGVuRGF0YWJhc2VTeW5jKCJPcGVuRGF0YWJhc2VTZXRFbXB0eVZlcnNpb25UZXN0IiwgIiIs
ICJUZXN0IHRoYXQgdGhlIERCIHZlcnNpb24gaXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcuIiwg
MSk7CisKK3RyeSB7CisgICAgdmFyIGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoIk9wZW5EYXRhYmFz
ZVNldEVtcHR5VmVyc2lvblRlc3QiLCAidGVzdCIsICJUZXN0IHRoYXQgdGhlIERCIHZlcnNpb24g
aXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcuIiwgMSk7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6
IEFuIGV4Y2VwdGlvbiBzaG91bGQndmUgYmVlbiB0aHJvd24uIik7Cit9IGNhdGNoIChlcnIpIHsK
KyAgICBwb3N0TWVzc2FnZSgiUEFTUyIpOworfQorcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNl
LXN5bmMtaW5wdXRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCShyZXZpc2lvbiA2
MjQwNykKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVu
LWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAK
LXZhciBkYjsKLQotdmFyIG5vdEFTdHJpbmcgPSB7Ci0gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkg
eyB0aHJvdyAiZm9vIjsgfQotfTsKLQotdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMo
KTsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0
aG91dCBhbnkgYXJndW1lbnQgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKLX0gY2F0Y2gg
KGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi10
cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIpOwot
ICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGZl
d2VyIHRoYW4gZm91ciBhcmd1bWVudHMgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKLX0g
Y2F0Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwot
fQotCi10cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYyhub3RBU3RyaW5nLCAiREJWZXJz
aW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhl
IGZpcnN0IGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEgc3RyaW5nLiIp
OwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2Fn
ZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCBub3RB
U3RyaW5nLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0
aGUgc2Vjb25kIGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEgc3RyaW5n
LiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVz
c2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAi
REJWZXJzaW9uIiwgbm90QVN0cmluZywgMTAyNCk7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRo
ZSB0aGlyZCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4i
KTsKLX0gY2F0Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3Nh
Z2UpOwotfQotCi10cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRC
VmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwgMCk7Ci0gICAgcG9zdE1lc3NhZ2UoIkZB
SUw6IHRoZSBmaWZ0aCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhbiBv
YmplY3QsIGlmIHByZXNlbnQuIik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgi
UEFTUzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFz
ZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwotICAg
IHBvc3RNZXNzYWdlKCJQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLiIpOwotfSBj
YXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Ci19
Ci0KLS8vIFJ1biB0aGlzIHRlc3QgY2FzZSBvbmUgbW9yZSB0aW1lLCB0byB0ZXN0IHRoZSBjb2Rl
IHdpdGggYW4gZXhpc3RpbmcgZGF0YWJhc2UuCi10cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNl
U3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7Ci0gICAg
cG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuIik7Ci19IGNh
dGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKLX0K
LQotdHJ5IHsKLSAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhYmFzZSwgb3RoZXJ3aXNl
IHRoZSBjcmVhdGlvbiBjYWxsYmFjayB3b24ndCBiZSBpbnZva2VkLgotICAgIGRiID0gb3BlbkRh
dGFiYXNlU3luYygiREJOYW1lQ3JlYXRpb25DYWxsYmFjayIgKyAobmV3IERhdGUoKSkuZ2V0VGlt
ZSgpLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbihkYikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9zdE1lc3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGggYSBjcmVh
dGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0p
OwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2Fn
ZSk7Ci19Ci0KLXBvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1p
bi1wcm9ncmVzcy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXBy
b2dyZXNzLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9n
cmVzcy1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiBvcGVu
VGVzdERhdGFiYXNlKCkKK3sKKyAgICByZXR1cm4gb3BlbkRhdGFiYXNlU3luYygiT3BlbkRhdGFi
YXNlV2hpbGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NUZXN0IiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdCB0byBtYWtl
IHN1cmUgdGhhdCBjYWxsaW5nIG9wZW5EYXRhYmFzZSgpIHdoaWxlIGEgdHJhbnNhY3Rpb24gaXMg
aW4gcHJvZ3Jlc3Mgb24gYSBkaWZmZXJlbnQgaGFuZGxlIHRvIHRoZSBzYW1lIGRhdGFiYXNlIGRv
ZXMgbm90IHJlc3VsdCBpbiBhIGRlYWRsb2NrLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMjEwMDAwMCk7IC8vIDJNQiArIGVwc2lsb24KK30KKworLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIwNworLy8gSW4gb3JkZXIgdG8gdHJpZ2dlciB0
aGlzIGJ1ZywgdGhlIHRyYW5zYWN0aW9uIG11c3QgYWNxdWlyZSBhbiBleGNsdXNpdmUKKy8vIGxv
Y2sgb24gdGhlIERCIGZpbGUgYmVmb3JlIHRyeWluZyB0byBvYnRhaW4gYSBzZWNvbmQgaGFuZGxl
IHRvIHRoZSBzYW1lIERCLgorLy8gVGhlIG9ubHkgd2F5IHRvIGZvcmNlIFNRTGl0ZSB0byBvYnRh
aW4gYW4gZXhjbHVzaXZlIGxvY2sgaXMgdG8gY2hhbmdlIG1vcmUKKy8vIHRoYW4gY2FjaGVfc2l6
ZSAqIHBhZ2Vfc2l6ZSBieXRlcyBpbiB0aGUgZGF0YWJhc2UuIFRoZSBkZWZhdWx0IHZhbHVlIGZv
cgorLy8gY2FjaGVfc2l6ZSBpcyAyMDAwIHBhZ2VzLCBhbmQgdGhlIGRlZmF1bHQgcGFnZV9zaXpl
IGlzIDEwMjQgYnl0ZXMuIFNvIHRoZQorLy8gc2l6ZSBvZiB0aGUgYmxvYiBtdXN0IGJlIGF0IGxl
YXN0IDJNQi4KK3ZhciBkYjEgPSBvcGVuVGVzdERhdGFiYXNlKCk7CitkYjEudHJhbnNhY3Rpb24o
ZnVuY3Rpb24odHgpIHsKKyAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVY
SVNUUyBUZXN0IChGb28gQkxPQik7Iik7CisgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8g
VGVzdCBWQUxVRVMgKFpFUk9CTE9CKDIwOTcxNTIpKTsiKTsKKyAgICB2YXIgZGIyID0gb3BlblRl
c3REYXRhYmFzZSgpOworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBzZWNvbmQgaGFuZGxlIG9wZW5l
ZCBzdWNjZXNzZnVsbHkuIik7CisKKyAgICAvLyBDbGVhbiB1cCB0aGUgREIgdG8gYWxsb3cgZm9y
IHJlcGVhdGVkIHJ1bnMgb2YgdGhpcyB0ZXN0CisgICAgLy8gd2l0aG91dCBuZWVkaW5nIHRvIGlu
Y3JlYXNlIHRoZSBkZWZhdWx0IGFsbG93ZWQgcXVvdGEgKDVNQikKKyAgICB0eC5leGVjdXRlU3Fs
KCJERUxFVEUgRlJPTSBUZXN0OyIpOworfSk7CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvc3FsLWRhdGEtdHlw
ZXMtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9yZXNvdXJjZXMvc3FsLWRhdGEtdHlwZXMtc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9zcWwtZGF0YS10eXBlcy1zeW5j
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACit2YXIgdGVzdFZhbHVlcyA9IHsKKyAg
ICB0aW1lc3RhbXA6IG5ldyBEYXRlKCJXZWQgRmViIDA2IDIwMDggMTI6MTY6NTIgR01UKzAyMDAg
KEVFVCkiKS52YWx1ZU9mKCksCisgICAgaWQ6IDEwMDEsCisgICAgcmVhbDogMTAxLjQ0NCwKKyAg
ICB0ZXh0OiAiV2ViS2l0IGRiIFRFWFQiLAorICAgIGJsb2I6ICJzdXBlcmNhbGlmcmFnaWxpc3Rp
YyIKK307CisKK2Z1bmN0aW9uIHNob3VsZEJlU2FtZVR5cGVBbmRWYWx1ZShwcm9wTmFtZSwgdGVz
dFZhbHVlLCByZXN1bHQpIHsKKyAgICBpZiAodGVzdFZhbHVlID09IHJlc3VsdCAmJiB0eXBlb2Yg
dGVzdFZhbHVlID09IHR5cGVvZiByZXN1bHQpCisgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBw
cm9wZXJ0eSAnIiArIHByb3BOYW1lICsgIicgT0ssIHR5cGUgd2FzICIgKyB0eXBlb2YgcmVzdWx0
KTsKKyAgICBlbHNlCisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBwcm9wZXJ0eSAnIiArIHBy
b3BOYW1lICsgIicgZmFpbGVkOyAiICsKKyAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICIg
KyB0eXBlb2YgdGVzdFZhbHVlICsgIjonIiArIHRlc3RWYWx1ZSArICInLCAiICsKKyAgICAgICAg
ICAgICAgICAgICAgImdvdCAiICsgdHlwZW9mIHJlc3VsdCArICI6JyIgKyByZXN1bHQgKyInIik7
Cit9CisKK2Z1bmN0aW9uIHRlc3REQlZhbHVlcyhyZXN1bHQpIHsKKyAgICB2YXIgaSA9ICJ0aW1l
c3RhbXAiOyBzaG91bGRCZVNhbWVUeXBlQW5kVmFsdWUoaSwgdGVzdFZhbHVlc1tpXSwgcmVzdWx0
W2ldKTsKKyAgICBpID0gImlkIjsgc2hvdWxkQmVTYW1lVHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1
ZXNbaV0sIHJlc3VsdFtpXSk7CisgICAgaSA9ICJyZWFsIjsgc2hvdWxkQmVTYW1lVHlwZUFuZFZh
bHVlKGksIHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7CisgICAgaSA9ICJ0ZXh0Ijsgc2hvdWxk
QmVTYW1lVHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7CisgICAgaSA9
ICJibG9iIjsgc2hvdWxkQmVTYW1lVHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNbaV0sIHJlc3Vs
dFtpXSk7Cit9CisKK3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIlNRTERhdGFUeXBlc1Rlc3Qi
LCAiMS4wIiwgIkRhdGFiYXNlIGZvciBTUUwgZGF0YSB0eXBlIHRlc3QiLCAxKTsKK2RiLnRyYW5z
YWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElG
IE5PVCBFWElTVFMgRGF0YVR5cGVUZXN0VGFibGUgKGlkIElOVEVHRVIgVU5JUVVFLCByZWFsIFJF
QUwsIHRpbWVzdGFtcCBJTlRFR0VSLCB0ZXh0IFRFWFQsIGJsb2IgQkxPQikiKTsKKyAgICB0eC5l
eGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBEYXRhVHlwZVRlc3RUYWJsZSAoaWQsIHJlYWwsIHRpbWVz
dGFtcCwgdGV4dCwgYmxvYikgVkFMVUVTICg/LD8sPyw/LD8pIiwKKyAgICAgICAgICAgICAgICAg
IFt0ZXN0VmFsdWVzLmlkLCB0ZXN0VmFsdWVzLnJlYWwsIHRlc3RWYWx1ZXMudGltZXN0YW1wLCB0
ZXN0VmFsdWVzLnRleHQsIHRlc3RWYWx1ZXMuYmxvYl0pOworICAgIHZhciByZXN1bHQgPSB0eC5l
eGVjdXRlU3FsKCJTRUxFQ1QgKiBGUk9NIERhdGFUeXBlVGVzdFRhYmxlIik7CisgICAgdGVzdERC
VmFsdWVzKHJlc3VsdC5yb3dzLml0ZW0oMCkpOworICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgVEFC
TEUgRGF0YVR5cGVUZXN0VGFibGUiKTsKK30pOworCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3NxbC1leGNlcHRp
b24tY29kZXMtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9yZXNvdXJjZXMvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3NxbC1leGNl
cHRpb24tY29kZXMtc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NiBAQAordmFyIGRi
TmFtZSA9ICJTUUxFeGNlcHRpb25Db2Rlc1Rlc3QiICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsK
KworZnVuY3Rpb24gdGVzdFRyYW5zYWN0aW9uKGRiLCBleGVjdXRlU3RhdGVtZW50c0NhbGxiYWNr
LCBleHBlY3RlZEVycm9yQ29kZU5hbWUpCit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24o
dHgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnRzQ2FsbGJh
Y2sodHgpOworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGFuIGV4Y2VwdGlvbiAoIiAr
IGV4cGVjdGVkRXJyb3JDb2RlTmFtZSArICIpIHNob3VsZCd2ZSBiZWVuIHRocm93bi4iKTsKKyAg
ICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgICAgICBpZiAoZXJyLmNvZGUgPT0gZXJyW2V4
cGVjdGVkRXJyb3JDb2RlTmFtZV0pCisgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6
IGV4cGVjdGVkIGFuZCBnb3QgZXJyb3IgY29kZSAiICsgZXhwZWN0ZWRFcnJvckNvZGVOYW1lKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogZXhw
ZWN0ZWQgZXJyb3IgY29kZSAiICsgZXhwZWN0ZWRFcnJvckNvZGVOYW1lICsgIiAoIiArCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyW2V4cGVjdGVkRXJyb3JDb2RlTmFtZV0gKyAiKSwg
Z290ICIgKyBlcnIuY29kZSk7CisgICAgICAgIH0KKyAgICAgIH0pOworfQorCitmdW5jdGlvbiB0
ZXN0VHJhbnNhY3Rpb25UaHJvd3NFeGNlcHRpb24oZGIpCit7CisgICAgdGVzdFRyYW5zYWN0aW9u
KGRiLCBmdW5jdGlvbih0eCkgeyB0aHJvdyAiRXhjZXB0aW9uIHRocm93biBpbiB0cmFuc2FjdGlv
biBjYWxsYmFjay4iOyB9LCAiVU5LTk9XTl9FUlIiKTsKK30KKworZnVuY3Rpb24gdGVzdEludmFs
aWRTdGF0ZW1lbnQoZGIpCit7CisgICAgdGVzdFRyYW5zYWN0aW9uKGRiLCBmdW5jdGlvbih0eCkg
eyB0eC5leGVjdXRlU3FsKCJCQUQgU1RBVEVNRU5UIik7IH0sICJTWU5UQVhfRVJSIik7Cit9CisK
K2Z1bmN0aW9uIHRlc3RJbmNvcnJlY3ROdW1iZXJPZkJpbmRQYXJhbWV0ZXJzKGRiKQoreworICAg
IHRlc3RUcmFuc2FjdGlvbihkYiwKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBO
T1QgRVhJU1RTIEJhZEJpbmROdW1iZXJUZXN0IChGb28gSU5ULCBCYXIgSU5UKSIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8gQmFkQmluZE51bWJl
clRlc3QgVkFMVUVTICg/LCA/KSIsIFsxXSk7CisgICAgICAgICAgICAgICAgICAgIH0sICJTWU5U
QVhfRVJSIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RCaW5kUGFyYW1ldGVyT2ZXcm9uZ1R5cGUoZGIp
Cit7CisgICAgdmFyIGJhZFN0cmluZyA9IHsgfTsKKyAgICBiYWRTdHJpbmcudG9TdHJpbmcgPSBm
dW5jdGlvbigpIHsgdGhyb3cgIkNhbm5vdCBjYWxsIHRvU3RyaW5nKCkgb24gdGhpcyBvYmplY3Qu
IiB9OworCisgICAgdGVzdFRyYW5zYWN0aW9uKGRiLCBmdW5jdGlvbih0eCkgeworICAgICAgICB0
eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBCYWRCaW5kVHlwZVRlc3Qg
KEZvbyBURVhUKSIpOworICAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBCYWRCaW5k
VHlwZVRlc3QgVkFMVUVTICg/KSIsIFtiYWRTdHJpbmddKTsKKyAgICB9LCAiVU5LTk9XTl9FUlIi
KTsKK30KKworZnVuY3Rpb24gdGVzdFF1b3RhRXhjZWVkZWQoZGIpCit7CisgICAgLy8gU29tZXRp
bWVzLCBTUUxpdGUgYXV0b21hdGljYWxseSByb2xscyBiYWNrIGEgdHJhbnNhY3Rpb24gaWYgZXhl
Y3V0aW5nIGEgc3RhdGVtZW50IGZhaWxzLgorICAgIC8vIFRoaXMgc2VlbXMgdG8gYmUgb25lIG9m
IHRob3NlIGNhc2VzLgorICAgIHRyeSB7CisgICAgICAgIHRlc3RUcmFuc2FjdGlvbihkYiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgUXVvdGFU
ZXN0IChGb28gQkxPQikiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eC5leGVjdXRl
U3FsKCJJTlNFUlQgSU5UTyBRdW90YVRlc3QgVkFMVUVTIChaRVJPQkxPQigxMCAqIDEwMjQgKiAx
MDI0KSkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sICJRVU9UQV9FUlIiKTsKKyAgICAg
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6IFRyYW5zYWN0aW9uIHNob3VsZCd2ZSBiZWVuIHJvbGxlZCBi
YWNrIGJ5IFNRTGl0ZS4iKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgaWYgKGVyci5j
b2RlID09IGVyclsiREFUQUJBU0VfRVJSIl0pCisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFT
UzogVHJhbnNhY3Rpb24gd2FzIHJvbGxlZCBiYWNrIGJ5IFNRTGl0ZSBhcyBleHBlY3RlZC4iKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IEFuIHVuZXhwZWN0
ZWQgZXhjZXB0aW9uIHdhcyB0aHJvd246ICIgKyBlcnIpOworICAgIH0KK30KKworZnVuY3Rpb24g
dGVzdFZlcnNpb25NaXNtYXRjaChkYikKK3sKKyAgICB2YXIgZGIyID0gb3BlbkRhdGFiYXNlU3lu
YyhkYk5hbWUsICIxLjAiLCAiVGVzdHMgdGhlIGVycm9yIGNvZGVzLiIsIDEpOworICAgIGRiMi5j
aGFuZ2VWZXJzaW9uKCIxLjAiLCAiMi4wIiwgZnVuY3Rpb24odHgpIHsgfSk7CisgICAgdGVzdFRy
YW5zYWN0aW9uKGRiLAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiVEhJUyBTVEFURU1FTlQgU0hPVUxEIE5F
VkVSIEdFVCBFWEVDVVRFRCIpOworICAgICAgICAgICAgICAgICAgICB9LCAiVkVSU0lPTl9FUlIi
KTsKK30KKwordmFyIGRiID0gb3BlbkRhdGFiYXNlU3luYyhkYk5hbWUsICIxLjAiLCAiVGVzdHMg
dGhlIGV4Y2VwdGlvbiBjb2Rlcy4iLCAxKTsKK3Rlc3RUcmFuc2FjdGlvblRocm93c0V4Y2VwdGlv
bihkYik7Cit0ZXN0SW52YWxpZFN0YXRlbWVudChkYik7Cit0ZXN0SW5jb3JyZWN0TnVtYmVyT2ZC
aW5kUGFyYW1ldGVycyhkYik7Cit0ZXN0QmluZFBhcmFtZXRlck9mV3JvbmdUeXBlKGRiKTsKK3Rl
c3RRdW90YUV4Y2VlZGVkKGRiKTsKK3Rlc3RWZXJzaW9uTWlzbWF0Y2goZGIpOworCitwb3N0TWVz
c2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVz
b3VyY2VzL3Rlc3QtYXV0aG9yaXplci1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90ZXN0LWF1dGhvcml6ZXItc3luYy5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy90ZXN0LWF1dGhvcml6ZXItc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjYgQEAK
K2Z1bmN0aW9uIGNsZWFudXAoZGIpCit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgp
IHsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgVEFCTEUgSUYgRVhJU1RTIFRlc3Qi
KTsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgSU5ERVggSUYgRVhJU1RTIFRlc3RJ
bmRleCIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBWSUVXIElGIEVYSVNUUyBU
ZXN0VmlldyIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBUUklHR0VSIElGIEVY
SVNUUyBUZXN0VHJpZ2dlciIpOworICAgIH0pOworfQorCitmdW5jdGlvbiBleGVjdXRlU3RhdGVt
ZW50KHR4LCBzdGF0ZW1lbnQsIG9wZXJhdGlvbikKK3sKKyAgICB0cnkgeworICAgICAgICB0eC5l
eGVjdXRlU3FsKHN0YXRlbWVudCk7CisgICAgICAgIHBvc3RNZXNzYWdlKG9wZXJhdGlvbiArICIg
c3RhdGVtZW50IHN1Y2NlZWRlZC4iKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgcG9z
dE1lc3NhZ2Uob3BlcmF0aW9uICsgIiBzdGF0ZW1lbnQgZmFpbGVkOiAiICsgZXJyICsgIiAoIiAr
IGVyci5jb2RlICsgIikiKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRhYmxlQ2FsbGJh
Y2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBUQUJMRSBUZXN0IChG
b28gaW50KSIsICJTUUxJVEVfQ1JFQVRFX1RBQkxFIik7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVN0
YXRlbWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRF
IElOREVYIFRlc3RJbmRleCBPTiBUZXN0IChGb28pIiwgIlNRTElURV9DUkVBVEVfSU5ERVgiKTsK
KworICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBmb2xsb3dpbmcgcXVlcnkgc2hvdWxkIHRyaWdnZXIg
YSBTUUxJVEVfQ1JFQVRFX1RFTVBfSU5ERVggb3BlcmF0aW9uCisgICAgLy8gKGFjY29yZGluZyB0
byBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvdGVtcGZpbGVzLmh0bWwpLCBpdCBkb2Vzbid0LCBhbmQg
SSdtIG5vdCBhd2FyZQorICAgIC8vIG9mIGFueSBvdGhlciB3YXkgdG8gdHJpZ2dlciB0aGlzIG9w
ZXJhdGlvbi4gU28gd2UnbGwgc2tpcCBpdCBmb3Igbm93LgorICAgIC8vZXhlY3V0ZVN0YXRlbWVu
dCh0eCwgIlNFTEVDVCAqIEZST00gVGVzdCBXSEVSRSBGb28gSU4gKDEsIDIsIDMpIiwgIlNRTElU
RV9DUkVBVEVfVEVNUF9JTkRFWCIpOworCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFU
RSBURU1QIFRBQkxFIFRlc3RUZW1wVGFibGUgKEZvbyBpbnQpIiwgIlNRTElURV9DUkVBVEVfVEVN
UF9UQUJMRSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBUUklHR0VS
IFRlc3RUZW1wVHJpZ2dlciBJTlNFUlQgT04gVGVzdCBCRUdJTiBTRUxFQ1QgQ09VTlQoKikgRlJP
TSBUZXN0OyBFTkQiLCAiU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIiKTsKKyAgICBleGVjdXRl
U3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRFTVAgVklFVyBUZXN0VGVtcFZpZXcgQVMgU0VMRUNUIENP
VU5UKCopIEZST00gVGVzdCIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyIpOworICAgIGV4ZWN1
dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVFJJR0dFUiBUZXN0VHJpZ2dlciBJTlNFUlQgT04gVGVz
dCBCRUdJTiBTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyBFTkQiLCAiU1FMSVRFX0NSRUFURV9U
UklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBWSUVXIFRlc3RWaWV3
IEFTIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3QiLCAiU1FMSVRFX0NSRUFURV9WSUVXIik7CisK
KyAgICAvLyBXZSBzaG91bGQgdHJ5IHRvIGNyZWF0ZSBhIHZpcnR1YWwgdGFibGUgdXNpbmcgZnRz
Mywgd2hlbiBXZWJLaXQncyBzcWxpdGUgbGlicmFyeSBzdXBwb3J0cyBpdC4KKyAgICBleGVjdXRl
U3RhdGVtZW50KHR4LCAiQ1JFQVRFIFZJUlRVQUwgVEFCTEUgVGVzdFZpcnR1YWxUYWJsZSBVU0lO
RyBVbnN1cHBvcnRlZE1vZHVsZSIsICJTUUxJVEVfQ1JFQVRFX1ZUQUJMRSIpOworfQorCitmdW5j
dGlvbiBvdGhlclN0YXRlbWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50
KHR4LCAiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdCIsICJTUUxJVEVfUkVBRCIpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0IiwgIlNRTElURV9T
RUxFQ1QiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiREVMRVRFIEZST00gVGVzdCIsICJT
UUxJVEVfREVMRVRFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIklOU0VSVCBJTlRPIFRl
c3QgVkFMVUVTICgxKSIsICJTUUxJVEVfSU5TRVJUIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0
eCwgIlVQREFURSBUZXN0IFNFVCBGb28gPSAyIFdIRVJFIEZvbyA9IDEiLCAiU1FMSVRFX1VQREFU
RSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJQUkFHTUEgY2FjaGVfc2l6ZSIsICJTUUxJ
VEVfUFJBR01BIik7CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQUxURVIgVEFCTEUgVGVz
dCBSRU5BTUUgVE8gVGVzdFRhYmxlIiwgIlNRTElURV9BTFRFUl9UQUJMRSIpOworICAgIC8vIFJl
bmFtZSB0aGUgdGFibGUgYmFjayB0byBpdHMgb3JpZ2luYWwgbmFtZQorICAgIGV4ZWN1dGVTdGF0
ZW1lbnQodHgsICJBTFRFUiBUQUJMRSBUZXN0VGFibGUgUkVOQU1FIFRvIFRlc3QiLCAiU1FMSVRF
X0FMVEVSX1RBQkxFIik7CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQkVHSU4gVFJBTlNB
Q1RJT04iLCAiU1FMSVRFX1RSQU5TQUNUSU9OIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwg
IkFUVEFDSCBtYWluIEFTIFRlc3RNYWluIiwgIlNRTElURV9BVFRBQ0giKTsKKyAgICBleGVjdXRl
U3RhdGVtZW50KHR4LCAiREVUQUNIIFRlc3RNYWluIiwgIlNRTElURV9ERVRBQ0giKTsKKyAgICBl
eGVjdXRlU3RhdGVtZW50KHR4LCAiUkVJTkRFWCIsICJTUUxJVEVfUkVJTkRFWCIpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsICJBTkFMWVpFIiwgIlNRTElURV9BTkFMWVpFIik7CisKKyAgICAv
LyBTUUxJVEVfRlVOQ1RJT046IGFsbG93ZWQgaW4gd3JpdGUgbW9kZQorICAgIC8vIFRoZXJlIGlz
IG5vIFNRTC9KYXZhc2NyaXB0IEFQSSB0byBhZGQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyB0byBT
UUxpdGUsCisgICAgLy8gc28gd2UgY2Fubm90IHRlc3QgdGhpcyBvcGVyYXRpb24KK30KKworZnVu
Y3Rpb24gZHJvcFN0YXRlbWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50
KHR4LCAiRFJPUCBJTkRFWCBUZXN0SW5kZXgiLCAiU1FMSVRFX0RST1BfSU5ERVgiKTsKKworICAg
IC8vIFNRTElURV9EUk9QX1RFTVBfSU5ERVg6IGFsbG93ZWQgaW4gd3JpdGUgbW9kZQorICAgIC8v
IE5vdCBzdXJlIGhvdyB0byB0ZXN0IHRoaXM6IHRlbXAgaW5kZXhlcyBhcmUgYXV0b21hdGljYWxs
eSBkcm9wcGVkIHdoZW4KKyAgICAvLyB0aGUgZGF0YWJhc2UgaXMgY2xvc2VkLCBidXQgSFRNTDUg
ZG9lc24ndCBzcGVjaWZ5IGEgY2xvc2VEYXRhYmFzZSgpIGNhbGwuCisKKyAgICBleGVjdXRlU3Rh
dGVtZW50KHR4LCAiRFJPUCBUQUJMRSBUZXN0VGVtcFRhYmxlIiwgIlNRTElURV9EUk9QX1RFTVBf
VEFCTEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUUklHR0VSIFRlc3RUZW1w
VHJpZ2dlciIsICJTUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVt
ZW50KHR4LCAiRFJPUCBWSUVXIFRlc3RUZW1wVmlldyIsICJTUUxJVEVfRFJPUF9URU1QX1ZJRVci
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUUklHR0VSIFRlc3RUcmlnZ2VyIiwg
IlNRTElURV9EUk9QX1RSSUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBW
SUVXIFRlc3RWaWV3IiwgIlNRTElURV9EUk9QX1ZJRVciKTsKKworICAgIC8vIFNRTElURV9EUk9Q
X1ZUQUJMRTogYWxsb3dlZCBpbiB3cml0ZSBtb2RlCisgICAgLy8gTm90IHN1cmUgaG93IHRvIHRl
c3QgdGhpczogd2UgY2Fubm90IGNyZWF0ZSBhIHZpcnR1YWwgdGFibGUgYmVjYXVzZSB3ZSBkbyBu
b3QKKyAgICAvLyBoYXZlIFNRTC9KYXZhc2NyaXB0IEFQSXMgdG8gcmVnaXN0ZXIgYSBtb2R1bGUg
dGhhdCBpbXBsZW1lbnRzIGEgdmlydHVhbCB0YWJsZS4KKyAgICAvLyBUaGVyZWZvcmUsIHRyeWlu
ZyB0byBkcm9wIGEgdmlydHVhbCB0YWJsZSB3aWxsIGFsd2F5cyBmYWlsIChubyBzdWNoIHRhYmxl
KQorICAgIC8vIGJlZm9yZSBldmVuIGdldHRpbmcgdG8gdGhlIGF1dGhvcml6ZXIuCisKKyAgICBl
eGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUQUJMRSBUZXN0IiwgIlNRTElURV9EUk9QX1RBQkxF
Iik7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkV3JpdGVNb2RlKGRiKQoreworICAgIGRiLnRyYW5z
YWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJCZWdpbm5pbmcgd3Jp
dGUgdHJhbnNhY3Rpb246Iik7CisgICAgICAgIGNyZWF0ZVRhYmxlQ2FsbGJhY2sodHgpOworICAg
ICAgICBjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpOworICAgICAgICBvdGhlclN0YXRlbWVu
dHNDYWxsYmFjayh0eCk7CisgICAgICAgIGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpOworICAg
ICAgICBwb3N0TWVzc2FnZSgiV3JpdGUgdHJhbnNhY3Rpb24gc3VjY2VlZGVkLlxuIik7CisgICAg
fSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkT25seU1vZGUoZGIpCit7CisgICAgcG9zdE1lc3Nh
Z2UoIkJlZ2lubmluZyByZWFkIHRyYW5zYWN0aW9uczoiKTsKKyAgICAvLyBUZXN0IHRoZSAnQ1JF
QVRFIFRBQkxFJyBvcGVyYXRpb247IGl0IHNob3VsZCBiZSBkaXNhbGxvd2VkCisgICAgZGIucmVh
ZFRyYW5zYWN0aW9uKGNyZWF0ZVRhYmxlQ2FsbGJhY2spOworCisgICAgLy8gSW4gb3JkZXIgdG8g
dGVzdCBhbGwgb3RoZXIgJ0NSRUFURScgb3BlcmF0aW9ucywgd2UgbXVzdCBjcmVhdGUgdGhlIHRh
YmxlIGZpcnN0CisgICAgZGIudHJhbnNhY3Rpb24oY3JlYXRlVGFibGVDYWxsYmFjayk7CisgICAg
ZGIucmVhZFRyYW5zYWN0aW9uKGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayk7CisKKyAgICAvLyBJ
biBvcmRlciB0byB0ZXN0IHRoZSAnRFJPUCcgYW5kICdvdGhlcicgb3BlcmF0aW9ucywgd2UgbmVl
ZCB0byBmaXJzdCBjcmVhdGUgdGhlIHJlc3BlY3RpdmUgZW50aXRpZXMKKyAgICBkYi50cmFuc2Fj
dGlvbihjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2spOworICAgIGRiLnJlYWRUcmFuc2FjdGlvbihv
dGhlclN0YXRlbWVudHNDYWxsYmFjayk7CisgICAgZGIucmVhZFRyYW5zYWN0aW9uKGRyb3BTdGF0
ZW1lbnRzQ2FsbGJhY2spOworICAgIHBvc3RNZXNzYWdlKCJSZWFkIHRyYW5zYWN0aW9ucyBzdWNj
ZWVkZWQuIik7Cit9CisKK3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIlRlc3RBdXRob3JpemVy
VGVzdCIsICIxLjAiLCAiVGVzdCB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci4iLCAxKTsKK2NsZWFu
dXAoZGIpOwordGVzdFJlYWRXcml0ZU1vZGUoZGIpOwordGVzdFJlYWRPbmx5TW9kZShkYik7CisK
K3Bvc3RNZXNzYWdlKCJkb25lIik7Cg==
</data>
<flag name="commit-queue"
          id="47888"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60445</attachid>
            <date>2010-07-03 02:54:43 -0700</date>
            <delta_ts>2010-07-07 17:34:59 -0700</delta_ts>
            <desc>patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>134854</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjQ0MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTkgQEAKKzIwMTAtMDctMDMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbigpIGFuZCBEYXRhYmFzZVN5
bmM6OmNoYW5nZVZlcnNpb24oKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNjA3CisKKyAgICAgICAgVGVzdHM6IGZhc3Qvd29ya2Vycy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1v
bmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMv
c3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5o
dG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNy
ZWF0aW9uLWNhbGxiYWNrLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0
eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRt
bAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rl
cy1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0
aG9yaXplci1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Ry
YW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWJzdHJhY3REYXRhYmFzZTo6bWF4aW11bVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCk6CisgICAgICAgICogc3Rv
cmFnZS9BYnN0cmFjdERhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3Jh
cHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9y
bVByZWZsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVy
Zm9ybVBvc3RmbGlnaHQpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKToKKyAgICAgICAgKiBz
dG9yYWdlL0RhdGFiYXNlLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVlRhYmxlKToKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0
U3RlcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5nZVZlcnNpb25QcmVmbGlnaHRT
dGVwOjpwZXJmb3JtU3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uUHJlZmxp
Z2h0U3RlcDo6Q2hhbmdlVmVyc2lvblByZWZsaWdodFN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpwZXJmb3JtU3RlcCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXA6OkNoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0
U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVN5bmM6OnJ1blRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBzdG9yYWdl
L0RhdGFiYXNlU3luYy5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNl
KToKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxS
ZXN1bHRTZXQuY3BwOgorICAgICAgICAqIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Lmg6CisgICAgICAg
ICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50
U3luYy5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVtZW50U3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnRTeW5jOjpleGVjdXRlKToKKyAgICAgICAgKiBz
dG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6cnVuQ3Vy
cmVudFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clF1b3RhSW5jcmVhc2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bjo6cG9zdGZsaWdodEFuZENvbW1pdCk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bi5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOgorICAgICAg
ICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKToK
KyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50Lmg6CisgICAgICAgICogc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2FjdGlvbkNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRyYW5zYWN0aW9uU3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6On5TUUxUcmFuc2FjdGlvblN5bmMp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU1FMKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFRyYW5zYWN0aW9uU3luYzo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uU3luYzo6cm9sbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRyYW5zYWN0aW9u
U3luY09wdGlvbmFsU3RlcDo6flNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3RlcCk6CisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oOgorICAgICAgICAqIHN0
b3JhZ2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0
YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhj
ZWVkUXVvdGEpOgorCiAyMDEwLTA3LTAzICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEw
MC5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCkluZGV4OiBXZWJDb3Jl
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDYyNDQzKQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTQxOSw2ICsxNDE5LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHN0b3JhZ2UvU1FM
UmVzdWx0U2V0LmNwcAogICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAKICAgICBz
dG9yYWdlL1NRTFN0YXRlbWVudC5jcHAKKyAgICBzdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3Bw
CiAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0
aW9uQ2xpZW50LmNwcAogICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAK
SW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkocmV2aXNpb24gNjI0NDMpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTA4LDYgKzI1MDgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFN0
YXRlbWVudENhbGxiYWNrLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmggXAorCVdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcCBcCisJV2Vi
Q29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uLmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmggXAogCVdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmggXApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDYyNDQzKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM0ODQs
NiArMzQ4NCw4IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaCcsCiAgICAg
ICAgICAgICAnc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oJywKICAgICAgICAgICAgICdz
dG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCcsCisgICAgICAgICAgICAnc3RvcmFn
ZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxTdGF0ZW1l
bnRTeW5jLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwJywKICAg
ICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgnLAogICAgICAgICAgICAgJ3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjI0NDMpCisrKyBX
ZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yMzc0LDYgKzIzNzQsNyBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfREFUQUJBU0U9MSkgewogICAgICAgICBzdG9yYWdlL1NR
TFJlc3VsdFNldC5jcHAgXAogICAgICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3Bw
IFwKICAgICAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwIFwKKyAgICAgICAgc3RvcmFnZS9T
UUxTdGF0ZW1lbnRTeW5jLmNwcCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3Bw
IFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgXAogICAgICAgICBz
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIFwKQEAgLTI0NDcsNiArMjQ0OCw3
IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ET01fU1RPUkFHRT0xKSAKICAgICAgICAgc3Rv
cmFnZS9TUUxSZXN1bHRTZXQuaCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlz
dC5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaCBcCisgICAgICAgIHN0b3JhZ2Uv
U1FMU3RhdGVtZW50U3luYy5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwK
ICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oIFwKICAgICAgICAgc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2MjQ0MykKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5ODQxLDYgKzQ5ODQxLDE0IEBA
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0
b3JhZ2VcU1FMU3RhdGVtZW50U3luYy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFN0YXRlbWVudFN5bmMuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3Jh
Z2VcU1FMVHJhbnNhY3Rpb24uY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2MjQ0MykKKysr
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00Mjc1LDYgKzQyNzUsOCBAQAogCQlCNTIzQ0YwQjExODI2NzU0MDBFQkIyOUMgLyogRGF0
YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCNTIzQ0YwNDExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmggKi87IH07CiAJCUI1
MjVBOTY1MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4
IC8qIEpTU1FMRXhjZXB0aW9uLmggKi87IH07CiAJCUI1MjVBOTY2MTFDQTIzNDAwMDNBMjNBOCAv
KiBKU1NRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNTI1QTk2NDExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24uY3Bw
ICovOyB9OworCQlCNTUwQjUyNTExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTUwQjUy
MTExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgKi87IH07CisJCUI1NTBC
NTI2MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTUwQjUyMjExREM2OEE4MDA5MjM4ODUg
LyogU1FMU3RhdGVtZW50U3luYy5oICovOyB9OwogCQlCNTVENUFBNDExOTEzMUZDMDBCQ0MzMTUg
LyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RDVBQTIxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCAqLzsgfTsKIAkJQjU1RDVBQTUxMTkxMzFGQzAwQkND
MzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8q
IEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwICovOyB9OwogCQlCNTVENUFBODExOTEz
MjUwMDBCQ0MzMTUgLyogSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RDVBQTYxMTkxMzI1MDAwQkNDMzE1IC8q
IEpTRGF0YWJhc2VTeW5jQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTk4MzMsNiArOTgzNSw4IEBACiAJ
CUI1MjNDRjA0MTE4MjY3NTQwMEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUI1MjVBOTYzMTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTEV4Y2VwdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCNTI1QTk2NDExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxF
eGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTUUxF
eGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNTUwQjUyMTExREM2
OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTUUxTdGF0ZW1lbnRTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQjU1MEI1MjIxMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMU3RhdGVtZW50U3luYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFBMjExOTEzMUZDMDBCQ0MzMTUgLyog
SlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUI1NUQ1QUEzMTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9u
U3luY0NhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCNTVENUFBNjExOTEzMjUwMDBCQ0MzMTUgLyogSlNEYXRhYmFzZVN5bmNDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhYmFzZVN5bmNDdXN0
b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyNzIsNiArMTEyNzYsOCBA
QAogCQkJCUI1OURENjhFMTE5MDI5OEUwMDdFOTY4NCAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5p
ZGwgKi8sCiAJCQkJMUE3Q0NCMTYwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2suaCAqLywKIAkJCQlCNTlERDY4RjExOTAyOThFMDA3RTk2ODQgLyogU1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjay5pZGwgKi8sCisJCQkJQjU1MEI1MjExMURDNjhBODAwOTIzODg1IC8q
IFNRTFN0YXRlbWVudFN5bmMuY3BwICovLAorCQkJCUI1NTBCNTIyMTFEQzY4QTgwMDkyMzg4NSAv
KiBTUUxTdGF0ZW1lbnRTeW5jLmggKi8sCiAJCQkJMUFCRkU3NTIwQ0Q5NjhEMDAwRkU0ODM0IC8q
IFNRTFRyYW5zYWN0aW9uLmNwcCAqLywKIAkJCQkxQTdDQ0IyMjBDRDk0NkZEMDBCN0I2NEUgLyog
U1FMVHJhbnNhY3Rpb24uaCAqLywKIAkJCQkxQTdDQ0IyMzBDRDk0NkZEMDBCN0I2NEUgLyogU1FM
VHJhbnNhY3Rpb24uaWRsICovLApAQCAtMTkyMzUsNiArMTkyNDEsNyBAQAogCQkJCTUxNUIwMzk5
MENEMTY0MkEwMEI3RUE5QyAvKiBTUUxTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
N0NDQjE5MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE3Q0NCMUEwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUI1NTBCNTI2MTFEQzY4QTgwMDkyMzg4NSAv
KiBTUUxTdGF0ZW1lbnRTeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTdDQ0IyNDBDRDk0NkZE
MDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBN0NDQjFC
MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCNTFCRjZGMTEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtMjE2MzIsNiArMjE2MzksNyBAQAogCQkJCTUxOTYxMTczMENB
QzU2NTcwMDEwQTgwQyAvKiBTUUxSZXN1bHRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFG
RTExN0QwQ0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTE1QjAzOUEwQ0QxNjQyQTAwQjdFQTlDIC8qIFNRTFN0YXRlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlCNTUwQjUyNTExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVt
ZW50U3luYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUJGRTc1MzBDRDk2OEQwMDBGRTQ4MzQg
LyogU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjUxQkY2RjAxMDJDOUU1
OTAwMDJDMTVBIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUI1QzExMjNCMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAko
cmV2aXNpb24gNjI0NDMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAj
aW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2Vy
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCkBAIC00NjIsNiArNDYxLDE5IEBAIHZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVzZXRB
dXRob3JpemVyKCkKICAgICAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7CiB9CiAK
K3Vuc2lnbmVkIGxvbmcgbG9uZyBBYnN0cmFjdERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmdldE1heFNpemVGb3JE
YXRhYmFzZSh0aGlzKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjppbmNyZW1lbnRhbFZh
Y3V1bUlmTmVlZGVkKCkKK3sKKyAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURh
dGFiYXNlLmZyZWVTcGFjZVNpemUoKTsKKyAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRl
RGF0YWJhc2UudG90YWxTaXplKCk7CisgICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZyZWVTcGFj
ZVNpemUpCisgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1dW1Db21t
YW5kKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShE
QVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAkocmV2aXNpb24gNjI0
NDMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJT
UUxpdGVEYXRhYmFzZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC00NSw4ICs0Niw2
IEBAIGNsYXNzIERhdGFiYXNlQXV0aG9yaXplcjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
LQogY2xhc3MgQWJzdHJhY3REYXRhYmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPEFic3Ry
YWN0RGF0YWJhc2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwpA
QCAtNjUsNiArNjQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1l
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OworICAgIFNRTGl0ZURhdGFi
YXNlJiBzcWxpdGVEYXRhYmFzZSgpIHsgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2U7IH0KKworICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgaW5jcmVt
ZW50YWxWYWN1dW1JZk5lZWRlZCgpOwogCiAgICAgLy8gRklYTUU6IG1vdmUgYWxsIHZlcnNpb24t
cmVsYXRlZCBtZXRob2RzIHRvIGEgRGF0YWJhc2VWZXJzaW9uVHJhY2tlciBjbGFzcwogICAgIGJv
b2wgdmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgpIGNvbnN0OwpAQCAtMTAzLDggKzEwNiw2IEBAIHBy
b3RlY3RlZDoKICAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKICAgICBTdHJpbmcg
bV9maWxlbmFtZTsKIAotICAgIFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7Ci0KICNp
Zm5kZWYgTkRFQlVHCiAgICAgU3RyaW5nIGRhdGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9u
YW1lOyB9CiAjZW5kaWYKQEAgLTExNiw2ICsxMTcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9v
cGVuZWQ7CiAgICAgYm9vbCBtX25ldzsKIAorICAgIFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0
YWJhc2U7CisKICAgICBSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVyPiBtX2RhdGFiYXNlQXV0aG9y
aXplcjsKIH07CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNw
cAkocmV2aXNpb24gNjI0NDMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBw
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMyArNTAsMTMgQEAgYm9vbCBDaGFuZ2VWZXJz
aW9uV3JhcHBlcjo6cGVyZm9ybVByZWZsaQogCiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS0+Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShhY3R1YWxWZXJzaW9uKSkgewogICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byByZXRyaWV2ZSBhY3R1YWwgY3VycmVudCB2ZXJzaW9uIGZyb20g
ZGF0YWJhc2UiKTsKLSAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoMCwgInVu
YWJsZSB0byB2ZXJpZnkgY3VycmVudCB2ZXJzaW9uIG9mIGRhdGFiYXNlIik7CisgICAgICAgIG1f
c3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVuYWJs
ZSB0byB2ZXJpZnkgY3VycmVudCB2ZXJzaW9uIG9mIGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKICAgICBpZiAoYWN0dWFsVmVyc2lvbiAhPSBtX29sZFZlcnNpb24p
IHsKICAgICAgICAgTE9HX0VSUk9SKCJPbGQgdmVyc2lvbiBkb2Vzbid0IG1hdGNoIGFjdHVhbCB2
ZXJzaW9uIik7Ci0gICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKDIsICJjdXJy
ZW50IHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lvbmAgYXJndW1lbnQgZG8g
bm90IG1hdGNoIik7CisgICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVy
cm9yOjpWRVJTSU9OX0VSUiwgImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBv
bGRWZXJzaW9uYCBhcmd1bWVudCBkbyBub3QgbWF0Y2giKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIApAQCAtNjksNyArNjksNyBAQCBib29sIENoYW5nZVZlcnNpb25XcmFwcGVyOjpw
ZXJmb3JtUG9zdGZsCiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zZXRWZXJz
aW9uSW5EYXRhYmFzZShtX25ld1ZlcnNpb24pKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIHNldCBuZXcgdmVyc2lvbiBpbiBkYXRhYmFzZSIpOwotICAgICAgICBtX3NxbEVycm9yID0g
U1FMRXJyb3I6OmNyZWF0ZSgwLCAidW5hYmxlIHRvIHNldCBuZXcgdmVyc2lvbiBpbiBkYXRhYmFz
ZSIpOworICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5L
Tk9XTl9FUlIsICJ1bmFibGUgdG8gc2V0IG5ldyB2ZXJzaW9uIGluIGRhdGFiYXNlIik7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNp
b24gNjI0NDMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRl
ICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC0zMzYsNyArMzM1
LDcgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZQogewogICAgIGRp
c2FibGVBdXRob3JpemVyKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fc3Fs
aXRlRGF0YWJhc2UsICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0n
dGFibGUnOyIpOworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoc3FsaXRlRGF0YWJhc2Uo
KSwgIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7Iik7
CiAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0cmlldmUgbGlzdCBvZiB0YWJsZXMgZm9yIGRhdGFiYXNl
ICVzIiwgZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIGVuYWJs
ZUF1dGhvcml6ZXIoKTsKQEAgLTM5NywxNCArMzk2LDYgQEAgU2VjdXJpdHlPcmlnaW4qIERhdGFi
YXNlOjpzZWN1cml0eU9yaWdpbgogICAgIHJldHVybiAwOwogfQogCi12b2lkIERhdGFiYXNlOjpp
bmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCkKLXsKLSAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUg
PSBtX3NxbGl0ZURhdGFiYXNlLmZyZWVTcGFjZVNpemUoKTsKLSAgICBpbnQ2NF90IHRvdGFsU2l6
ZSA9IG1fc3FsaXRlRGF0YWJhc2UudG90YWxTaXplKCk7Ci0gICAgaWYgKHRvdGFsU2l6ZSA8PSAx
MCAqIGZyZWVTcGFjZVNpemUpCi0gICAgICAgIG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50
YWxWYWN1dW1Db21tYW5kKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCShyZXZpc2lvbiA2MjQ0MykK
KysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAKQEAgLTY2LDcgKzY3LDYgQEAgcHVi
bGljOgogICAgIFZlY3RvcjxTdHJpbmc+IHRhYmxlTmFtZXMoKTsKIAogICAgIHZpcnR1YWwgU2Vj
dXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7Ci0gICAgU1FMaXRlRGF0YWJhc2Um
IHNxbGl0ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9zcWxpdGVEYXRhYmFzZTsgfQogCiAgICAgdmly
dHVhbCB2b2lkIG1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOwogICAgIGJvb2wgZGVsZXRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQpAQCAtODMsOCArODMsNiBAQCBwdWJsaWM6CiAgICAg
U1FMVHJhbnNhY3Rpb25DbGllbnQqIHRyYW5zYWN0aW9uQ2xpZW50KCkgY29uc3Q7CiAgICAgU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0Owog
Ci0gICAgdm9pZCBpbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7Ci0KIHByaXZhdGU6CiAgICAg
Y2xhc3MgRGF0YWJhc2VPcGVuVGFzazsKICAgICBjbGFzcyBEYXRhYmFzZUNsb3NlVGFzazsKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCShyZXZpc2lvbiA2MjQ0MykK
KysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTAsNyArMjkwLDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVlRhYmxl
KGNvbgogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICAvLyBBbGxvdyBvbmx5IHRo
ZSBGVFMzIGV4dGVuc2lvbgotICAgIGlmIChtb2R1bGVOYW1lICE9ICJmdHMzIikKKyAgICBpZiAo
IWVxdWFsSWdub3JpbmdDYXNlKG1vZHVsZU5hbWUsICJmdHMzIikpCiAgICAgICAgIHJldHVybiBT
UUxBdXRoRGVueTsKIAogICAgIG1fbGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSA9IHRydWU7CkBA
IC0zMDMsNyArMzAzLDcgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFZUYWJsZShjb25z
dAogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKICAgICAvLyBBbGxvdyBvbmx5IHRoZSBG
VFMzIGV4dGVuc2lvbgotICAgIGlmIChtb2R1bGVOYW1lICE9ICJmdHMzIikKKyAgICBpZiAoIWVx
dWFsSWdub3JpbmdDYXNlKG1vZHVsZU5hbWUsICJmdHMzIikpCiAgICAgICAgIHJldHVybiBTUUxB
dXRoRGVueTsKIAogICAgIHJldHVybiB1cGRhdGVEZWxldGVzQmFzZWRPblRhYmxlTmFtZSh0YWJs
ZU5hbWUpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5oCShyZXZpc2lvbiA2MjQ0
MykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCShyZXZpc2lv
biA2MjQ0MykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw4ICszMiw5IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogI2luY2x1ZGUgIkRh
dGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTEV4
Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luYy5oIgogI2luY2x1ZGUgIlNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC04NywxNCArODgsNzkgQEAg
RGF0YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5jKCkKICAgICB9CiB9CiAKLXZvaWQgRGF0YWJhc2VT
eW5jOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJikKK2NsYXNzIENo
YW5nZVZlcnNpb25QcmVmbGlnaHRTdGVwIDogcHVibGljIFNRTFRyYW5zYWN0aW9uU3luYzo6U1FM
VHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0U3RlcD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDaGFuZ2VWZXJzaW9uUHJl
ZmxpZ2h0U3RlcChleHBlY3RlZFZlcnNpb24pOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBw
ZXJmb3JtU3RlcChTUUxUcmFuc2FjdGlvblN5bmMqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2Rl
JiBlYykKKyAgICB7CisgICAgICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOworICAgICAgICBpZiAo
IXRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5nZXRWZXJzaW9uRnJvbURhdGFiYXNlKGFjdHVhbFZl
cnNpb24pKSB7CisgICAgICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWN0dWFs
VmVyc2lvbiAhPSBtX2V4cGVjdGVkVmVyc2lvbikgeworICAgICAgICAgICAgZWMgPSBTUUxFeGNl
cHRpb246OlZFUlNJT05fRVJSOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIENoYW5nZVZl
cnNpb25QcmVmbGlnaHRTdGVwKGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uKSA6IG1fZXhw
ZWN0ZWRWZXJzaW9uKGV4cGVjdGVkVmVyc2lvbikgeyB9CisgICAgU3RyaW5nIG1fZXhwZWN0ZWRW
ZXJzaW9uOworfTsKKworY2xhc3MgQ2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwIDogcHVibGlj
IFNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXA+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24pCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IENoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3RlcChuZXdWZXJzaW9uKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgcGVyZm9ybVN0ZXAoU1FMVHJhbnNhY3Rpb25TeW5jKiB0cmFuc2FjdGlv
biwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLT5zZXRWZXJzaW9uSW5EYXRhYmFzZShtX25ld1ZlcnNpb24pKSB7CisgICAgICAg
ICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2V0
RXhwZWN0ZWRWZXJzaW9uKG1fbmV3VmVyc2lvbik7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXAoY29uc3QgU3Ry
aW5nJiBuZXdWZXJzaW9uKSA6IG1fbmV3VmVyc2lvbihuZXdWZXJzaW9uKSB7IH0KKyAgICBTdHJp
bmcgbV9uZXdWZXJzaW9uOworfTsKKwordm9pZCBEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24o
Y29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNoYW5nZVZlcnNpb25DYWxsYmFjaywg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIHJ1blRyYW5zYWN0aW9uKFNRTFRyYW5zYWN0aW9u
U3luYzo6Y3JlYXRlKHRoaXMsIGNoYW5nZVZlcnNpb25DYWxsYmFjaywgZmFsc2UsIENoYW5nZVZl
cnNpb25QcmVmbGlnaHRTdGVwOjpjcmVhdGUob2xkVmVyc2lvbiksIENoYW5nZVZlcnNpb25Qb3N0
ZmxpZ2h0U3RlcDo6Y3JlYXRlKG5ld1ZlcnNpb24pKSwgZWMpOwogfQogCi12b2lkIERhdGFiYXNl
U3luYzo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4s
IGJvb2wsIEV4Y2VwdGlvbkNvZGUmKQordm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRP
bmx5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgcnVuVHJhbnNhY3Rpb24oU1FMVHJhbnNh
Y3Rpb25TeW5jOjpjcmVhdGUodGhpcywgY2FsbGJhY2ssIHJlYWRPbmx5KSwgZWMpOworfQorCit2
b2lkIERhdGFiYXNlU3luYzo6cnVuVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
blN5bmM+IHRyYW5zYWN0aW9uUHJQLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoc3Fs
aXRlRGF0YWJhc2UoKS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgeworICAgICAgICBlYyA9IFNR
TEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luYz4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblByUDsK
KyAgICBpZiAoIXRyYW5zYWN0aW9uLT5iZWdpbihlYykgfHwgIXRyYW5zYWN0aW9uLT5leGVjdXRl
KGVjKSB8fCAhdHJhbnNhY3Rpb24tPmNvbW1pdChlYykpCisgICAgICAgIHRyYW5zYWN0aW9uLT5y
b2xsYmFjaygpOwogfQogCiB2b2lkIERhdGFiYXNlU3luYzo6bWFya0FzRGVsZXRlZEFuZENsb3Nl
KCkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmgJKHJldmlzaW9uIDYyNDQzKQorKysgV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaWZuZGVmIE5ERUJVRwpAQCAtNDAsNiArNDEsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOworY2xhc3Mg
U1FMVHJhbnNhY3Rpb25TeW5jOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7CiBj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CkBAIC02
MCw2ICs2Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VTeW5jKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhwZWN0
ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOworICAgIHZvaWQgcnVuVHJhbnNhY3Rpb24oUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+LCBFeGNlcHRpb25Db2RlJik7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAko
cmV2aXNpb24gNjI0NDMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw2IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpo
YXNFbnRyeUZvckRhdGFiYXMKIAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6
Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQog
ewotICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CiAgICAgLy8gVGhl
IG1heGltdW0gc2l6ZSBmb3IgYSBkYXRhYmFzZSBpcyB0aGUgZnVsbCBxdW90YSBmb3IgaXRzIG9y
aWdpbiwgbWludXMgdGhlIGN1cnJlbnQgdXNhZ2Ugd2l0aGluIHRoZSBvcmlnaW4sCiAgICAgLy8g
cGx1cyB0aGUgY3VycmVudCB1c2FnZSBvZiB0aGUgZ2l2ZW4gZGF0YWJhc2UKICAgICBNdXRleExv
Y2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFzZUd1YXJkKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxFcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5oCShy
ZXZpc2lvbiA2MjQ0MykKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcAkocmV2aXNpb24gNjI0NDMpCisrKyBXZWJDb3JlL3N0b3Jh
Z2UvU1FMUmVzdWx0U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsNiBAQAogCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIlNRTFZhbHVlLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHVuc2lnbmVk
IGNvbnN0IE1heEVycm9yQ29kZSA9IDI7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5oCShyZXZp
c2lvbiA2MjQ0MykKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsMTMgKzMxLDEyIEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0Um93TGlzdC5oIgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJl
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
Ci0KIGNsYXNzIFNRTFJlc3VsdFNldCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFJlc3Vs
dFNldD4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFJlc3VsdFNldCk7IH0KSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCShyZXZpc2lvbiA2MjQ0MykKKysrIFdlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrLmgJKHJldmlzaW9uIDYyNDQzKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaWYgRU5B
QkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAkocmV2aXNpb24gNjI0MjQpCShmcm9tIFdlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwOjYyNDI0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NR
TFN0YXRlbWVudFN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudC5oIgorCisjaWYgRU5BQkxFKERB
VEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisj
aW5jbHVkZSAiU1FMRXJyb3IuaCIKKyNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1
ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgi
CisjaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFRy
YW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gU1FMU3RhdGVtZW50OjpjcmVhdGUoY29uc3Qg
U3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFz
c1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgYm9vbCByZWFkT25seSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFN0YXRlbWVudChzdGF0ZW1lbnQsIGFyZ3VtZW50cywg
Y2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHJlYWRPbmx5KSk7Cit9CisKK1NRTFN0YXRlbWVudDo6
U1FMU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFs
dWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNr
LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGJv
b2wgcmVhZE9ubHkpCisgICAgOiBtX3N0YXRlbWVudChzdGF0ZW1lbnQuY3Jvc3NUaHJlYWRTdHJp
bmcoKSkKKyAgICAsIG1fYXJndW1lbnRzKGFyZ3VtZW50cykKKyAgICAsIG1fc3RhdGVtZW50Q2Fs
bGJhY2soY2FsbGJhY2spCisgICAgLCBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2soZXJyb3JDYWxs
YmFjaykKKyAgICAsIG1fcmVhZE9ubHkocmVhZE9ubHkpCit7Cit9CisKK2Jvb2wgU1FMU3RhdGVt
ZW50OjpleGVjdXRlKERhdGFiYXNlKiBkYikKK3sKKyAgICBBU1NFUlQoIW1fcmVzdWx0U2V0KTsK
KworICAgIC8vIElmIHdlJ3JlIHJlLXJ1bm5pbmcgdGhpcyBzdGF0ZW1lbnQgYWZ0ZXIgYSBxdW90
YSB2aW9sYXRpb24sIHdlIG5lZWQgdG8gY2xlYXIgdGhhdCBlcnJvciBub3cKKyAgICBjbGVhckZh
aWx1cmVEdWVUb1F1b3RhKCk7CisKKyAgICAvLyBUaGlzIHRyYW5zYWN0aW9uIG1pZ2h0IGhhdmUg
YmVlbiBtYXJrZWQgYmFkIHdoaWxlIGl0IHdhcyBiZWluZyBzZXQgdXAgb24gdGhlIG1haW4gdGhy
ZWFkLAorICAgIC8vIHNvIGlmIHRoZXJlIGlzIHN0aWxsIGFuIGVycm9yLCByZXR1cm4gZmFsc2Uu
CisgICAgaWYgKG1fZXJyb3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3Jl
YWRPbmx5KQorICAgICAgICBkYi0+c2V0QXV0aG9yaXplclJlYWRPbmx5KCk7CisKKyAgICBTUUxp
dGVEYXRhYmFzZSogZGF0YWJhc2UgPSAmZGItPnNxbGl0ZURhdGFiYXNlKCk7CisKKyAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KCpkYXRhYmFzZSwgbV9zdGF0ZW1lbnQpOworICAgIGludCBy
ZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOworCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1
bHRPaykgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlVuYWJsZSB0byB2ZXJpZnkgY29ycmVj
dG5lc3Mgb2Ygc3RhdGVtZW50ICVzIC0gZXJyb3IgJWkgKCVzKSIsIG1fc3RhdGVtZW50LmFzY2lp
KCkuZGF0YSgpLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIG1f
ZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCBkYXRhYmFzZS0+
bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8g
RklYTUU6ICBJZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRlZCBi
eSBzcWxpdGUsIHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYgZnJv
bSB0aGUgbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgorICAgIC8vIElmIHRoaXMgaXMgdGhlIGNh
c2UsIHRoZXkgbWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxpY2lv
dXMKKyAgICBpZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRz
LnNpemUoKSkgeworICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJpbmQgcGFyYW1ldGVyIGNvdW50
IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIik7CisgICAgICAgIG1fZXJy
b3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAibnVtYmVyIG9mICc/
J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9
PSBTUUxSZXN1bHRGdWxsKSB7CisgICAgICAgICAgICBzZXRGYWlsdXJlRHVlVG9RdW90YSgpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJGYWlsZWQg
dG8gYmluZCB2YWx1ZSBpbmRleCAlaSB0byBzdGF0ZW1lbnQgZm9yIHF1ZXJ5ICclcyciLCBpICsg
MSwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgbV9lcnJvciA9IFNR
TEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgZGF0YWJhc2UtPmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IHJlc3VsdFNldCA9IFNRTFJlc3VsdFNldDo6Y3JlYXRl
KCk7CisKKyAgICAvLyBTdGVwIHNvIHdlIGNhbiBmZXRjaCB0aGUgY29sdW1uIG5hbWVzLgorICAg
IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRS
b3cpIHsKKyAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gc3RhdGVtZW50LmNvbHVtbkNvdW50KCk7
CisgICAgICAgIFNRTFJlc3VsdFNldFJvd0xpc3QqIHJvd3MgPSByZXN1bHRTZXQtPnJvd3MoKTsK
KworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspCisgICAgICAg
ICAgICByb3dzLT5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOworCisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkr
KykKKyAgICAgICAgICAgICAgICByb3dzLT5hZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZh
bHVlKGkpKTsKKworICAgICAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAg
ICAgfSB3aGlsZSAocmVzdWx0ID09IFNRTFJlc3VsdFJvdyk7CisKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNy
ZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChyZXN1
bHQgPT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAvLyBEaWRuJ3QgZmluZCBhbnl0aGluZywg
b3Igd2FzIGFuIGluc2VydAorICAgICAgICBpZiAoZGItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKSkK
KyAgICAgICAgICAgIHJlc3VsdFNldC0+c2V0SW5zZXJ0SWQoZGF0YWJhc2UtPmxhc3RJbnNlcnRS
b3dJRCgpKTsKKyAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRGdWxsKSB7CisgICAg
ICAgIC8vIFJldHVybiB0aGUgUXVvdGEgZXJyb3IgLSB0aGUgZGVsZWdhdGUgd2lsbCBiZSBhc2tl
ZCBmb3IgbW9yZSBzcGFjZSBhbmQgdGhpcyBzdGF0ZW1lbnQgbWlnaHQgYmUgcmUtcnVuCisgICAg
ICAgIHNldEZhaWx1cmVEdWVUb1F1b3RhKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFU
QUJBU0VfRVJSLCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gRklYTUU6IElmIHRoZSBzcGVjIGFsbG93cyB0cmlnZ2Vycywg
YW5kIHdlIHdhbnQgdG8gYmUgImFjY3VyYXRlIiBpbiBhIGRpZmZlcmVudCB3YXksIHdlJ2QgdXNl
CisgICAgLy8gc3FsaXRlM190b3RhbF9jaGFuZ2VzKCkgaGVyZSBpbnN0ZWFkIG9mIHNxbGl0ZTNf
Y2hhbmdlZCwgYmVjYXVzZSB0aGF0IGluY2x1ZGVzIHJvd3MgbW9kaWZpZWQgZnJvbSB3aXRoaW4g
YSB0cmlnZ2VyCisgICAgLy8gRm9yIG5vdywgdGhpcyBzZWVtcyBzdWZmaWNpZW50CisgICAgcmVz
dWx0U2V0LT5zZXRSb3dzQWZmZWN0ZWQoZGF0YWJhc2UtPmxhc3RDaGFuZ2VzKCkpOworCisgICAg
bV9yZXN1bHRTZXQgPSByZXN1bHRTZXQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1FM
U3RhdGVtZW50OjpzZXREYXRhYmFzZURlbGV0ZWRFcnJvcigpCit7CisgICAgQVNTRVJUKCFtX2Vy
cm9yICYmICFtX3Jlc3VsdFNldCk7CisgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FM
RXJyb3I6OlVOS05PV05fRVJSLCAidW5hYmxlIHRvIGV4ZWN1dGUgc3RhdGVtZW50LCBiZWNhdXNl
IHRoZSB1c2VyIGRlbGV0ZWQgdGhlIGRhdGFiYXNlIik7Cit9CisKK3ZvaWQgU1FMU3RhdGVtZW50
OjpzZXRWZXJzaW9uTWlzbWF0Y2hlZEVycm9yKCkKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3IgJiYg
IW1fcmVzdWx0U2V0KTsKKyAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6
VkVSU0lPTl9FUlIsICJjdXJyZW50IHZlcnNpb24gb2YgdGhlIGRhdGFiYXNlIGFuZCBgb2xkVmVy
c2lvbmAgYXJndW1lbnQgZG8gbm90IG1hdGNoIik7Cit9CisKK2Jvb2wgU1FMU3RhdGVtZW50Ojpw
ZXJmb3JtQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIEFTU0VS
VCh0cmFuc2FjdGlvbik7CisKKyAgICBib29sIGNhbGxiYWNrRXJyb3IgPSBmYWxzZTsKKworICAg
IC8vIENhbGwgdGhlIGFwcHJvcHJpYXRlIHN0YXRlbWVudCBjYWxsYmFjayBhbmQgdHJhY2sgaWYg
aXQgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsCisgICAgLy8gYmVjYXVzZSB0aGVuIHdlIG5lZWQgdG8g
anVtcCB0byB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2suCisgICAgaWYgKG1fZXJyb3Ip
IHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayk7CisgICAgICAgIGNh
bGxiYWNrRXJyb3IgPSBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9u
LCBtX2Vycm9yLmdldCgpKTsKKyAgICB9IGVsc2UgaWYgKG1fc3RhdGVtZW50Q2FsbGJhY2spCisg
ICAgICAgIGNhbGxiYWNrRXJyb3IgPSAhbV9zdGF0ZW1lbnRDYWxsYmFjay0+aGFuZGxlRXZlbnQo
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNh
Y3Rpb24sIG1fcmVzdWx0U2V0LmdldCgpKTsKKworICAgIC8vIE5vdyByZWxlYXNlIG91ciBjYWxs
YmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCisgICAgbV9zdGF0ZW1lbnRDYWxsYmFj
ayA9IDA7CisgICAgbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrID0gMDsKKworICAgIHJldHVybiBj
YWxsYmFja0Vycm9yOworfQorCit2b2lkIFNRTFN0YXRlbWVudDo6c2V0RmFpbHVyZUR1ZVRvUXVv
dGEoKQoreworICAgIEFTU0VSVCghbV9lcnJvciAmJiAhbV9yZXN1bHRTZXQpOworICAgIG1fZXJy
b3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpRVU9UQV9FUlIsICJ0aGVyZSB3YXMgbm90
IGVub3VnaCByZW1haW5pbmcgc3RvcmFnZSBzcGFjZSwgb3IgdGhlIHN0b3JhZ2UgcXVvdGEgd2Fz
IHJlYWNoZWQgYW5kIHRoZSB1c2VyIGRlY2xpbmVkIHRvIGFsbG93IG1vcmUgc3BhY2UiKTsKK30K
Kwordm9pZCBTUUxTdGF0ZW1lbnQ6OmNsZWFyRmFpbHVyZUR1ZVRvUXVvdGEoKQoreworICAgIGlm
IChsYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpKQorICAgICAgICBtX2Vycm9yID0gMDsK
K30KKworYm9vbCBTUUxTdGF0ZW1lbnQ6Omxhc3RFeGVjdXRpb25GYWlsZWREdWVUb1F1b3RhKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9lcnJvciAmJiBtX2Vycm9yLT5jb2RlKCkgPT0gU1FMRXJy
b3I6OlFVT1RBX0VSUjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAko
cmV2aXNpb24gNjI0MjQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNzMgKzEsNTkgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxT
dGF0ZW1lbnRTeW5jLmgiCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlICJEYXRh
YmFzZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTUUxFcnJvci5oIgorI2lu
Y2x1ZGUgIkRhdGFiYXNlU3luYy5oIgorI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgorI2luY2x1
ZGUgIlNRTFJlc3VsdFNldC5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAjaW5jbHVkZSAiU1FM
aXRlRGF0YWJhc2UuaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJT
UUxTdGF0ZW1lbnRDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNRTFZhbHVlLmgi
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IFNRTFN0YXRl
bWVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFs
dWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNr
LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGJv
b2wgcmVhZE9ubHkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0ZW1lbnQoc3Rh
dGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCByZWFkT25seSkpOwot
fQotCi1TUUxTdGF0ZW1lbnQ6OlNRTFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwg
Y29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQotICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVt
ZW50LmNyb3NzVGhyZWFkU3RyaW5nKCkpCitTUUxTdGF0ZW1lbnRTeW5jOjpTUUxTdGF0ZW1lbnRT
eW5jKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1
bWVudHMsIGJvb2wgcmVhZE9ubHkpCisgICAgOiBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAgICAg
LCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBtX3N0YXRlbWVudENhbGxiYWNrKGNhbGxi
YWNrKQotICAgICwgbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spCiAgICAg
LCBtX3JlYWRPbmx5KHJlYWRPbmx5KQogeworICAgIEFTU0VSVCghbV9zdGF0ZW1lbnQuaXNFbXB0
eSgpKTsKIH0KIAotYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UqIGRiKQorUGFz
c1JlZlB0cjxTUUxSZXN1bHRTZXQ+IFNRTFN0YXRlbWVudFN5bmM6OmV4ZWN1dGUoRGF0YWJhc2VT
eW5jKiBkYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKCFtX3Jlc3VsdFNldCk7
Ci0KLSAgICAvLyBJZiB3ZSdyZSByZS1ydW5uaW5nIHRoaXMgc3RhdGVtZW50IGFmdGVyIGEgcXVv
dGEgdmlvbGF0aW9uLCB3ZSBuZWVkIHRvIGNsZWFyIHRoYXQgZXJyb3Igbm93Ci0gICAgY2xlYXJG
YWlsdXJlRHVlVG9RdW90YSgpOwotCi0gICAgLy8gVGhpcyB0cmFuc2FjdGlvbiBtaWdodCBoYXZl
IGJlZW4gbWFya2VkIGJhZCB3aGlsZSBpdCB3YXMgYmVpbmcgc2V0IHVwIG9uIHRoZSBtYWluIHRo
cmVhZCwKLSAgICAvLyBzbyBpZiB0aGVyZSBpcyBzdGlsbCBhbiBlcnJvciwgcmV0dXJuIGZhbHNl
LgotICAgIGlmIChtX2Vycm9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBpZiAobV9y
ZWFkT25seSkKICAgICAgICAgZGItPnNldEF1dGhvcml6ZXJSZWFkT25seSgpOwogCkBAIC03Nywz
MCArNjMsMjUgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UqIGRiKQogICAg
IGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgpOwogCiAgICAgaWYgKHJlc3VsdCAhPSBT
UUxSZXN1bHRPaykgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlVuYWJsZSB0byB2ZXJpZnkg
Y29ycmVjdG5lc3Mgb2Ygc3RhdGVtZW50ICVzIC0gZXJyb3IgJWkgKCVzKSIsIG1fc3RhdGVtZW50
LmFzY2lpKCkuZGF0YSgpLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAg
ICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCBkYXRh
YmFzZS0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVj
ID0gU1FMRXhjZXB0aW9uOjpTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICAvLyBGSVhNRTogIElmIHRoZSBzdGF0ZW1lbnQgdXNlcyB0aGUgPyMjIyBzeW50YXggc3Vw
cG9ydGVkIGJ5IHNxbGl0ZSwgdGhlIGJpbmQgcGFyYW1ldGVyIGNvdW50IGlzIHZlcnkgbGlrZWx5
IG9mZiBmcm9tIHRoZSBudW1iZXIgb2YgcXVlc3Rpb24gbWFya3MuCi0gICAgLy8gSWYgdGhpcyBp
cyB0aGUgY2FzZSwgdGhleSBtaWdodCBiZSB0cnlpbmcgdG8gZG8gc29tZXRoaW5nIGZpc2h5IG9y
IG1hbGljaW91cwogICAgIGlmIChzdGF0ZW1lbnQuYmluZFBhcmFtZXRlckNvdW50KCkgIT0gbV9h
cmd1bWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQmluZCBwYXJhbWV0
ZXIgY291bnQgZG9lc24ndCBtYXRjaCBudW1iZXIgb2YgcXVlc3Rpb24gbWFya3MiKTsKLSAgICAg
ICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJudW1i
ZXIgb2YgJz8ncyBpbiBzdGF0ZW1lbnQgc3RyaW5nIGRvZXMgbm90IG1hdGNoIGFyZ3VtZW50IGNv
dW50Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246
OlNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgcmVz
dWx0ID0gc3RhdGVtZW50LmJpbmRWYWx1ZShpICsgMSwgbV9hcmd1bWVudHNbaV0pOwogICAgICAg
ICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKLSAgICAgICAgICAgIHNldEZhaWx1cmVE
dWVUb1F1b3RhKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlYyA9
IFNRTEV4Y2VwdGlvbjo6UVVPVEFfRVJSOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgICAgICBM
T0coU3RvcmFnZUFQSSwgIkZhaWxlZCB0byBiaW5kIHZhbHVlIGluZGV4ICVpIHRvIHN0YXRlbWVu
dCBmb3IgcXVlcnkgJyVzJyIsIGkgKyAxLCBtX3N0YXRlbWVudC5hc2NpaSgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0Vf
RVJSLCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsKKyAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjMsNzkgKzEwNCwyNCBAQCBi
b29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSogZGIpCiAgICAgICAgIH0gd2hpbGUg
KHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpOwogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVz
dWx0RG9uZSkgewotICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJy
b3I6OkRBVEFCQVNFX0VSUiwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9F
UlI7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAocmVz
dWx0ID09IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55dGhpbmcs
IG9yIHdhcyBhbiBpbnNlcnQKKyAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55dGhpbmcsIG9yIHdh
cyBhbiBpbnNlcnQuCiAgICAgICAgIGlmIChkYi0+bGFzdEFjdGlvbldhc0luc2VydCgpKQogICAg
ICAgICAgICAgcmVzdWx0U2V0LT5zZXRJbnNlcnRJZChkYXRhYmFzZS0+bGFzdEluc2VydFJvd0lE
KCkpOwogICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKLSAgICAgICAg
Ly8gUmV0dXJuIHRoZSBRdW90YSBlcnJvciAtIHRoZSBkZWxlZ2F0ZSB3aWxsIGJlIGFza2VkIGZv
ciBtb3JlIHNwYWNlIGFuZCB0aGlzIHN0YXRlbWVudCBtaWdodCBiZSByZS1ydW4KLSAgICAgICAg
c2V0RmFpbHVyZUR1ZVRvUXVvdGEoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAv
LyBRdW90YSBlcnJvciwgdGhlIGRlbGVnYXRlIHdpbGwgYmUgYXNrZWQgZm9yIG1vcmUgc3BhY2Ug
YW5kIHRoaXMgc3RhdGVtZW50IG1pZ2h0IGJlIHJlLXJ1bi4KKyAgICAgICAgZWMgPSBTUUxFeGNl
cHRpb246OlFVT1RBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgZGF0
YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBl
YyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOworICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKLSAgICAvLyBGSVhNRTogSWYgdGhlIHNwZWMgYWxsb3dzIHRyaWdnZXJzLCBhbmQgd2Ugd2Fu
dCB0byBiZSAiYWNjdXJhdGUiIGluIGEgZGlmZmVyZW50IHdheSwgd2UnZCB1c2UKLSAgICAvLyBz
cWxpdGUzX3RvdGFsX2NoYW5nZXMoKSBoZXJlIGluc3RlYWQgb2Ygc3FsaXRlM19jaGFuZ2VkLCBi
ZWNhdXNlIHRoYXQgaW5jbHVkZXMgcm93cyBtb2RpZmllZCBmcm9tIHdpdGhpbiBhIHRyaWdnZXIK
LSAgICAvLyBGb3Igbm93LCB0aGlzIHNlZW1zIHN1ZmZpY2llbnQKICAgICByZXN1bHRTZXQtPnNl
dFJvd3NBZmZlY3RlZChkYXRhYmFzZS0+bGFzdENoYW5nZXMoKSk7Ci0KLSAgICBtX3Jlc3VsdFNl
dCA9IHJlc3VsdFNldDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTUUxTdGF0ZW1lbnQ6
OnNldERhdGFiYXNlRGVsZXRlZEVycm9yKCkKLXsKLSAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1f
cmVzdWx0U2V0KTsKLSAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5L
Tk9XTl9FUlIsICJ1bmFibGUgdG8gZXhlY3V0ZSBzdGF0ZW1lbnQsIGJlY2F1c2UgdGhlIHVzZXIg
ZGVsZXRlZCB0aGUgZGF0YWJhc2UiKTsKLX0KLQotdm9pZCBTUUxTdGF0ZW1lbnQ6OnNldFZlcnNp
b25NaXNtYXRjaGVkRXJyb3IoKQotewotICAgIEFTU0VSVCghbV9lcnJvciAmJiAhbV9yZXN1bHRT
ZXQpOwotICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpWRVJTSU9OX0VS
UiwgImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBhcmd1
bWVudCBkbyBub3QgbWF0Y2giKTsKLX0KLQotYm9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxs
YmFjayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKHRyYW5zYWN0
aW9uKTsKLQotICAgIGJvb2wgY2FsbGJhY2tFcnJvciA9IGZhbHNlOwotCi0gICAgLy8gQ2FsbCB0
aGUgYXBwcm9wcmlhdGUgc3RhdGVtZW50IGNhbGxiYWNrIGFuZCB0cmFjayBpZiBpdCByZXN1bHRl
ZCBpbiBhbiBlcnJvciwKLSAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVlZCB0byBqdW1wIHRvIHRo
ZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjay4KLSAgICBpZiAobV9lcnJvcikgewotICAgICAg
ICBBU1NFUlQobV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2tFcnJv
ciA9IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rpb24sIG1fZXJyb3Iu
Z2V0KCkpOwotICAgIH0gZWxzZSBpZiAobV9zdGF0ZW1lbnRDYWxsYmFjaykKLSAgICAgICAgY2Fs
bGJhY2tFcnJvciA9ICFtX3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbiwgbV9y
ZXN1bHRTZXQuZ2V0KCkpOwotCi0gICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNrcywgdG8g
YnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBtX3N0YXRlbWVudENhbGxiYWNrID0gMDsKLSAg
ICBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2sgPSAwOwotCi0gICAgcmV0dXJuIGNhbGxiYWNrRXJy
b3I7Ci19Ci0KLXZvaWQgU1FMU3RhdGVtZW50OjpzZXRGYWlsdXJlRHVlVG9RdW90YSgpCi17Ci0g
ICAgQVNTRVJUKCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7Ci0gICAgbV9lcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OlFVT1RBX0VSUiwgInRoZXJlIHdhcyBub3QgZW5vdWdoIHJl
bWFpbmluZyBzdG9yYWdlIHNwYWNlLCBvciB0aGUgc3RvcmFnZSBxdW90YSB3YXMgcmVhY2hlZCBh
bmQgdGhlIHVzZXIgZGVjbGluZWQgdG8gYWxsb3cgbW9yZSBzcGFjZSIpOwotfQotCi12b2lkIFNR
TFN0YXRlbWVudDo6Y2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpCi17Ci0gICAgaWYgKGxhc3RFeGVj
dXRpb25GYWlsZWREdWVUb1F1b3RhKCkpCi0gICAgICAgIG1fZXJyb3IgPSAwOwotfQotCi1ib29s
IFNRTFN0YXRlbWVudDo6bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2Vycm9yICYmIG1fZXJyb3ItPmNvZGUoKSA9PSBTUUxFcnJvcjo6UVVPVEFf
RVJSOworICAgIHJldHVybiByZXN1bHRTZXQucmVsZWFzZSgpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBTUUxTdGF0ZW1lbnRTeW5jX2gKKyNkZWZpbmUgU1FMU3RhdGVt
ZW50U3luY19oCisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxWYWx1ZS5o
IgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFiYXNlU3luYzsKK2NsYXNzIFNRTFJlc3Vs
dFNldDsKKworY2xhc3MgU1FMU3RhdGVtZW50U3luYyB7CitwdWJsaWM6CisgICAgU1FMU3RhdGVt
ZW50U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYg
YXJndW1lbnRzLCBib29sIHJlYWRPbmx5KTsKKworICAgIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0
PiBleGVjdXRlKERhdGFiYXNlU3luYyosIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKwor
ICAgIFN0cmluZyBtX3N0YXRlbWVudDsKKyAgICBWZWN0b3I8U1FMVmFsdWU+IG1fYXJndW1lbnRz
OworICAgIGJvb2wgbV9yZWFkT25seTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKKworI2VuZGlmIC8vIFNRTFN0YXRlbWVudFN5bmNf
aApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiA2MjQ0MykKKysr
IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDYgQEAKIAogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VU
aHJlYWQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgpAQCAtMzcwLDcgKzM2OSw3IEBAIGJvb2wgU1FMVHJhbnNhY3Rpb246OnJ1bkN1
cnJlbnRTdGF0ZW1lbnQKICAgICAgICAgICAgIC8vIEZsYWcgdGhpcyB0cmFuc2FjdGlvbiBhcyBo
YXZpbmcgY2hhbmdlZCB0aGUgZGF0YWJhc2UgZm9yIGxhdGVyIGRlbGVnYXRlIG5vdGlmaWNhdGlv
bgogICAgICAgICAgICAgbV9tb2RpZmllZERhdGFiYXNlID0gdHJ1ZTsKICAgICAgICAgICAgIC8v
IEFsc28gZGlydHkgdGhlIHNpemUgb2YgdGhpcyBkYXRhYmFzZSBmaWxlIGZvciBjYWxjdWxhdGlu
ZyBxdW90YSB1c2FnZQotICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQo
KS0+ZGlkRXhlY3V0ZVN0YXRlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uQ2xpZW50KCktPmRpZEV4ZWN1dGVTdGF0ZW1lbnQoZGF0YWJhc2UoKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50LT5oYXNTdGF0ZW1lbnRDYWxs
YmFjaygpKSB7CkBAIC00MzIsNyArNDMxLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clF1b3RhSW5jcmVhcwogICAgIEFTU0VSVChtX2N1cnJlbnRTdGF0ZW1lbnQpOwogICAgIEFTU0VS
VCghbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQpOwogCi0gICAgbV9zaG91bGRSZXRyeUN1
cnJlbnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGNl
ZWRRdW90YSh0aGlzKTsKKyAgICBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudCA9IG1fZGF0
YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZEV4Y2VlZFF1b3RhKGRhdGFiYXNlKCkpOwog
CiAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVtZW50czsKICAgICBM
T0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgcnVuU3RhdGVtZW50cyBmb3IgdHJhbnNhY3Rpb24g
JXBcbiIsIHRoaXMpOwpAQCAtNDcyLDcgKzQ3MSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBv
c3RmbGlnaHRBbmRDb21taXQKIAogICAgIC8vIFRoZSBjb21taXQgd2FzIHN1Y2Nlc3NmdWwuIElm
IHRoZSB0cmFuc2FjdGlvbiBtb2RpZmllZCB0aGlzIGRhdGFiYXNlLCBub3RpZnkgdGhlIGRlbGVn
YXRlcy4KICAgICBpZiAobV9tb2RpZmllZERhdGFiYXNlKQotICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRDb21taXRUcmFuc2FjdGlvbih0aGlzKTsKKyAgICAgICAg
bV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlv
bihkYXRhYmFzZSgpKTsKIAogICAgIC8vIE5vdyByZWxlYXNlIG91ciB1bm5lZWRlZCBjYWxsYmFj
a3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCiAgICAgbV9jYWxsYmFjayA9IDA7CkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkocmV2aXNpb24gNjI0NDMpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTcgKzMwLDE1IEBA
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0K
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCiAj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCiBjbGFzcyBE
YXRhYmFzZTsKIGNsYXNzIFNRTEVycm9yOwogY2xhc3MgU1FMaXRlVHJhbnNhY3Rpb247CkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDYyNDQz
KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25DbGllbnQuY3BwCShyZXZpc2lvbiA2MjQ0MykKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDM2ICszMywyNyBAQAogCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hy
b21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJEYXRhYmFzZVRo
cmVhZC5oIgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFz
ZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENvbW1pdFRyYW5zYWN0aW9uKFNRTFRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3ZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENv
bW1pdFdyaXRlVHJhbnNhY3Rpb24oQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7Ci0gICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKLSAg
ICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBEYXRh
YmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zY2hlZHVsZU5vdGlmeURhdGFiYXNlQ2hhbmdlZCgKICAg
ICAgICAgZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlm
aWVyKCkpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3RhdGVt
ZW50KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3ZvaWQgU1FMVHJhbnNhY3Rpb25DbGll
bnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7Ci0g
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsK
LSAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kYXRhYmFzZUNoYW5nZWQodHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkpOworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmRhdGFiYXNl
Q2hhbmdlZChkYXRhYmFzZSk7CiB9CiAKLWJvb2wgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4
Y2VlZFF1b3RhKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK2Jvb2wgU1FMVHJhbnNhY3Rp
b25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewot
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCk7Ci0KKyAgICBBU1NFUlQoZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBj
dXJyZW50UXVvdGEgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5xdW90YUZvck9yaWdpbihk
YXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGRhdGFiYXNlLT5zdHJpbmdJZGVudGlm
aWVyKCkpOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSA9IERhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlcigpLnF1b3RhRm9yT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpKTsK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oCShyZXZpc2lvbiA2MjQ0
MykKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNywxNiArMzcsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xh
c3MgU1FMVHJhbnNhY3Rpb247CitjbGFzcyBBYnN0cmFjdERhdGFiYXNlOworCisvLyBBIGNsaWVu
dCB0byB0aGUgU1FMVHJhbnNhY3Rpb24gY2xhc3MuIEFsbG93cyBTUUxUcmFuc2FjdGlvbiB0byBu
b3RpZnkgaW50ZXJlc3RlZAorLy8gcGFydGllcyB0aGF0IGNlcnRhaW4gdGhpbmdzIGhhdmUgaGFw
cGVuZWQgaW4gYSB0cmFuc2FjdGlvbi4KK2NsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50IDogcHVi
bGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICB2b2lkIGRpZENvbW1pdFdyaXRlVHJhbnNh
Y3Rpb24oQWJzdHJhY3REYXRhYmFzZSopOworICAgIHZvaWQgZGlkRXhlY3V0ZVN0YXRlbWVudChB
YnN0cmFjdERhdGFiYXNlKik7CisgICAgYm9vbCBkaWRFeGNlZWRRdW90YShBYnN0cmFjdERhdGFi
YXNlKik7Cit9OwogCi0gICAgLy8gQSBjbGllbnQgdG8gdGhlIFNRTFRyYW5zYWN0aW9uIGNsYXNz
LiBBbGxvd3MgU1FMVHJhbnNhY3Rpb24gdG8gbm90aWZ5IGludGVyZXN0ZWQKLSAgICAvLyBwYXJ0
aWVzIHRoYXQgY2VydGFpbiB0aGluZ3MgaGF2ZSBoYXBwZW5lZCBpbiBhIHRyYW5zYWN0aW9uLgot
ICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50IDogcHVibGljIE5vbmNvcHlhYmxlIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgZGlkQ29tbWl0VHJhbnNhY3Rpb24oU1FMVHJhbnNhY3Rp
b24qKTsKLSAgICAgICAgdm9pZCBkaWRFeGVjdXRlU3RhdGVtZW50KFNRTFRyYW5zYWN0aW9uKik7
Ci0gICAgICAgIGJvb2wgZGlkRXhjZWVkUXVvdGEoU1FMVHJhbnNhY3Rpb24qKTsKLSAgICB9Owog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NR
TFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAkocmV2aXNpb24gNjI0NDMpCisrKyBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDcgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5
bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMu
Y3BwCShyZXZpc2lvbiA2MjQ0MykKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5
bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw0MCArMzIsMjAwIEBACiAjaWYgRU5BQkxFKERB
VEFCQVNFKQogCiAjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FMRXhjZXB0
aW9uLmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rp
b25DbGllbnQuaCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnRTeW5jLmgiCiAjaW5jbHVkZSAiU1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgorI2luY2x1
ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5j
PiBTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZShEYXRhYmFzZVN5bmMqIGRiLCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjaywgYm9vbCByZWFkT25seSkKK3N0
YXRpYyBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQoKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU1FMVHJhbnNhY3Rpb25TeW5jKGRiLCBjYWxsYmFjaywgcmVhZE9u
bHkpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNRTFRyYW5zYWN0aW9uQ2xpZW50LCB0cmFu
c2FjdGlvbkNsaWVudCwgKCkpOworICAgIHJldHVybiAmdHJhbnNhY3Rpb25DbGllbnQ7CiB9CiAK
LVNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jKERhdGFiYXNlU3luYyogZGIs
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJl
YWRPbmx5KQorUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IFNRTFRyYW5zYWN0aW9uU3lu
Yzo6Y3JlYXRlKERhdGFiYXNlU3luYyogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25TeW5jT3B0aW9uYWxTdGVwPiBwcmVmbGlnaHRTdGVwLCBQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uU3luY09wdGlvbmFsU3RlcD4gcG9zdGZsaWdodFN0ZXApCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvblN5bmMoZGIsIGNhbGxiYWNrLCByZWFkT25seSwgcHJl
ZmxpZ2h0U3RlcCwgcG9zdGZsaWdodFN0ZXApKTsKK30KKworU1FMVHJhbnNhY3Rpb25TeW5jOjpT
UUxUcmFuc2FjdGlvblN5bmMoRGF0YWJhc2VTeW5jKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2ssIGJvb2wgcmVhZE9ubHksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY09w
dGlvbmFsU3RlcD4gcHJlZmxpZ2h0U3RlcCwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNP
cHRpb25hbFN0ZXA+IHBvc3RmbGlnaHRTdGVwKQogICAgIDogbV9kYXRhYmFzZShkYikKICAgICAs
IG1fY2FsbGJhY2soY2FsbGJhY2spCiAgICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5KQorICAgICwg
bV9wcmVmbGlnaHRTdGVwKHByZWZsaWdodFN0ZXApCisgICAgLCBtX3Bvc3RmbGlnaHRTdGVwKHBv
c3RmbGlnaHRTdGVwKQorICAgICwgbV9tb2RpZmllZERhdGFiYXNlKGZhbHNlKQogewogICAgIEFT
U0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVh
ZCgpKTsKLSAgICBBU1NFUlQoY2FsbGJhY2spOwogfQogCiBTUUxUcmFuc2FjdGlvblN5bmM6On5T
UUxUcmFuc2FjdGlvblN5bmMoKQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAobV9zcWxpdGVUcmFu
c2FjdGlvbiAmJiBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCisgICAgICAgIHJv
bGxiYWNrKCk7Cit9CisKK1Bhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBTUUxUcmFuc2FjdGlvblN5
bmM6OmV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxT
UUxWYWx1ZT4mIGFyZ3VtZW50cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKG1f
ZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwor
ICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRp
b246OlVOS05PV05fRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIW1f
ZGF0YWJhc2UtPnZlcnNpb25NYXRjaGVzRXhwZWN0ZWQoKSkgeworICAgICAgICBlYyA9IFNRTEV4
Y2VwdGlvbjo6VkVSU0lPTl9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlm
IChzcWxTdGF0ZW1lbnQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGJvb2wg
cmVhZE9ubHlNb2RlID0gbV9yZWFkT25seSB8fCBtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmlzRGF0YWJhc2VSZWFkT25seSgpOworICAgIFNRTFN0YXRlbWVudFN5bmMgc3Rh
dGVtZW50KHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCByZWFkT25seU1vZGUpOworCisgICAgbV9k
YXRhYmFzZS0+cmVzZXRBdXRob3JpemVyKCk7CisgICAgYm9vbCByZXRyeVN0YXRlbWVudCA9IHRy
dWU7CisgICAgUmVmUHRyPFNRTFJlc3VsdFNldD4gcmVzdWx0U2V0OworICAgIHdoaWxlIChyZXRy
eVN0YXRlbWVudCkgeworICAgICAgICByZXRyeVN0YXRlbWVudCA9IGZhbHNlOworICAgICAgICBy
ZXN1bHRTZXQgPSBzdGF0ZW1lbnQuZXhlY3V0ZShtX2RhdGFiYXNlLmdldCgpLCBlYyk7CisgICAg
ICAgIGlmICghcmVzdWx0U2V0KSB7CisgICAgICAgICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlv
bi0+d2FzUm9sbGVkQmFja0J5U3FsaXRlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisK
KyAgICAgICAgICAgIGlmIChlYyA9PSBTUUxFeGNlcHRpb246OlFVT1RBX0VSUikgeworICAgICAg
ICAgICAgICAgIGlmICh0cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGNlZWRRdW90YShkYXRhYmFz
ZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBlYyA9IDA7CisgICAgICAgICAgICAgICAgICAg
IHJldHJ5U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAobV9kYXRhYmFzZS0+bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpKSB7CisgICAg
ICAgIG1fbW9kaWZpZWREYXRhYmFzZSA9IHRydWU7CisgICAgICAgIHRyYW5zYWN0aW9uQ2xpZW50
KCktPmRpZEV4ZWN1dGVTdGF0ZW1lbnQoZGF0YWJhc2UoKSk7CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdFNldC5yZWxlYXNlKCk7Cit9CisKK2Jvb2wgU1FMVHJhbnNhY3Rpb25TeW5jOjpiZWdp
bihFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgaWYgKCFtX2RhdGFiYXNl
LT5vcGVuZWQoKSkgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNx
bGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworCisgICAgLy8gU2V0IHRo
ZSBtYXhpbXVtIHVzYWdlIGZvciB0aGlzIHRyYW5zYWN0aW9uIGlmIHRoaXMgdHJhbnNhY3Rpb25z
IGlzIG5vdCByZWFkLW9ubHkuCisgICAgaWYgKCFtX3JlYWRPbmx5KQorICAgICAgICBtX2RhdGFi
YXNlLT5zcWxpdGVEYXRhYmFzZSgpLnNldE1heGltdW1TaXplKG1fZGF0YWJhc2UtPm1heGltdW1T
aXplKCkpOworCisgICAgaWYgKG1fcHJlZmxpZ2h0U3RlcCkgeworICAgICAgICBib29sIHByZWZs
aWdodFN1Y2Nlc3MgPSBtX3ByZWZsaWdodFN0ZXAtPnBlcmZvcm1TdGVwKHRoaXMsIGVjKTsKKyAg
ICAgICAgbV9wcmVmbGlnaHRTdGVwID0gMDsKKyAgICAgICAgaWYgKCFwcmVmbGlnaHRTdWNjZXNz
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFTU0VSVCghbV9zcWxp
dGVUcmFuc2FjdGlvbik7CisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5zZXQobmV3IFNRTGl0ZVRy
YW5zYWN0aW9uKG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCksIG1fcmVhZE9ubHkpKTsKKwor
ICAgIG1fZGF0YWJhc2UtPnJlc2V0RGVsZXRlcygpOworICAgIG1fZGF0YWJhc2UtPmRpc2FibGVB
dXRob3JpemVyKCk7CisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICBtX2Rh
dGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICAvLyBDaGVjayBpZiBiZWdpbigpIHN1
Y2NlZWRlZC4KKyAgICBpZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgewor
ICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25J
blByb2dyZXNzKCkpOworICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAg
ICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTUUxUcmFuc2FjdGlvblN5
bmM6OmV4ZWN1dGUoRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2Ut
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmICgh
bV9kYXRhYmFzZS0+b3BlbmVkKCkgfHwgIW1fY2FsbGJhY2sgfHwgIW1fY2FsbGJhY2stPmhhbmRs
ZUV2ZW50KG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhpcykpIHsKKyAg
ICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOworICAgICAgICBtX2NhbGxiYWNr
ID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1fY2FsbGJhY2sgPSAw
OworICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gU1FMVHJh
bnNhY3Rpb25TeW5jOjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTUUxW
YWx1ZT4mLCBFeGNlcHRpb25Db2RlJikKK2Jvb2wgU1FMVHJhbnNhY3Rpb25TeW5jOjpjb21taXQo
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIHJldHVybiAwOworICAgIGlm
ICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlVO
S05PV05fRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKG1f
c3FsaXRlVHJhbnNhY3Rpb24pOworCisgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIo
KTsKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBtX2RhdGFiYXNlLT5l
bmFibGVBdXRob3JpemVyKCk7CisKKyAgICAvLyBJZiB0aGUgY29tbWl0IGZhaWxlZCwgdGhlIHRy
YW5zYWN0aW9uIHdpbGwgc3RpbGwgYmUgbWFya2VkIGFzICJpbiBwcm9ncmVzcyIKKyAgICBpZiAo
bV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7CisgICAgICAgIGVjID0gU1FMRXhj
ZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisKKyAgICAvLyBWYWN1dW0gdGhlIGRhdGFi
YXNlIGlmIGFueXRoaW5nIHdhcyBkZWxldGVkLgorICAgIGlmIChtX2RhdGFiYXNlLT5oYWREZWxl
dGVzKCkpCisgICAgICAgIG1fZGF0YWJhc2UtPmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsK
KworICAgIC8vIFRoZSBjb21taXQgd2FzIHN1Y2Nlc3NmdWwuIElmIHRoZSB0cmFuc2FjdGlvbiBt
b2RpZmllZCB0aGlzIGRhdGFiYXNlLCBub3RpZnkgdGhlIGRlbGVnYXRlcy4KKyAgICBpZiAobV9t
b2RpZmllZERhdGFiYXNlKQorICAgICAgICB0cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRDb21taXRX
cml0ZVRyYW5zYWN0aW9uKGRhdGFiYXNlKCkpOworCisgICAgYm9vbCBwb3N0ZmxpZ2h0U3VjY2Vz
cyA9IHRydWU7CisgICAgaWYgKG1fcG9zdGZsaWdodFN0ZXApCisgICAgICAgIHBvc3RmbGlnaHRT
dWNjZXNzID0gbV9wb3N0ZmxpZ2h0U3RlcC0+cGVyZm9ybVN0ZXAodGhpcywgZWMpOworCisgICAg
bV9wb3N0ZmxpZ2h0U3RlcCA9IDA7CisgICAgcmV0dXJuIHBvc3RmbGlnaHRTdWNjZXNzOworfQor
Cit2b2lkIFNRTFRyYW5zYWN0aW9uU3luYzo6cm9sbGJhY2soKQoreworICAgIEFTU0VSVChtX2Rh
dGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAg
ICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOworICAgIGlmIChtX3NxbGl0ZVRyYW5z
YWN0aW9uKSB7CisgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAg
ICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICB9CisgICAgbV9kYXRhYmFzZS0+
ZW5hYmxlQXV0aG9yaXplcigpOworCisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRh
YmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaAkocmV2aXNpb24gNjI0
NDMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDI0ICszMCwzMiBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQogY2xhc3MgRGF0YWJhc2VT
eW5jOwogY2xhc3MgU1FMUmVzdWx0U2V0OwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2s7CiBjbGFzcyBTUUxWYWx1ZTsKK2NsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uOwogY2xhc3MgU3Ry
aW5nOwogCiAvLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQg
dXNlZCBvbmx5IG9uIHRoZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KIGNsYXNzIFNRTFRyYW5z
YWN0aW9uU3luYyA6IHB1YmxpYyBSZWZDb3VudGVkPFNRTFRyYW5zYWN0aW9uU3luYz4gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luYz4gY3JlYXRlKERh
dGFiYXNlU3luYyosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29s
IHJlYWRPbmx5ID0gZmFsc2UpOworCisgICAgY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9u
YWxTdGVwIDogcHVibGljIFJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVw
PiB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvblN5bmNPcHRp
b25hbFN0ZXAoKSB7IH0KKyAgICAgICAgdmlydHVhbCBib29sIHBlcmZvcm1TdGVwKFNRTFRyYW5z
YWN0aW9uU3luYyosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luYz4gY3JlYXRlKERhdGFiYXNlU3luYyosIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5ID0gZmFsc2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXA+IHByZWZsaWdodFN0ZXAgPSAwLCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3RlcD4gcG9zdGZsaWdodFN0ZXAg
PSAwKTsKIAogICAgIH5TUUxUcmFuc2FjdGlvblN5bmMoKTsKIApAQCAtNTYsMTIgKzY0LDIzIEBA
IHB1YmxpYzoKICAgICBEYXRhYmFzZVN5bmMqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFz
ZS5nZXQoKTsgfQogICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZE9u
bHk7IH0KIAorICAgIGJvb2wgYmVnaW4oRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIGJvb2wgZXhl
Y3V0ZShFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgYm9vbCBjb21taXQoRXhjZXB0aW9uQ29kZSYg
ZWMpOworICAgIHZvaWQgcm9sbGJhY2soKTsKKwogcHJpdmF0ZToKLSAgICBTUUxUcmFuc2FjdGlv
blN5bmMoRGF0YWJhc2VTeW5jKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFj
az4sIGJvb2wgcmVhZE9ubHkpOworICAgIFNRTFRyYW5zYWN0aW9uU3luYyhEYXRhYmFzZVN5bmMq
LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSwK
KyAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNPcHRp
b25hbFN0ZXA+IHByZWZsaWdodFN0ZXAsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jT3B0
aW9uYWxTdGVwPiBwb3N0ZmxpZ2h0U3RlcCk7CiAKICAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBt
X2RhdGFiYXNlOwogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gbV9jYWxs
YmFjazsKICAgICBib29sIG1fcmVhZE9ubHk7CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3lu
Y09wdGlvbmFsU3RlcD4gbV9wcmVmbGlnaHRTdGVwOworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlv
blN5bmNPcHRpb25hbFN0ZXA+IG1fcG9zdGZsaWdodFN0ZXA7CisKKyAgICBib29sIG1fbW9kaWZp
ZWREYXRhYmFzZTsKKyAgICBPd25QdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNh
Y3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAkocmV2aXNpb24gNjI0NDMpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNiBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlv
bkNsaWVudENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvY2hyb21p
dW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDYyNDQzKQorKysg
V2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOCArMzEsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNsaWVudC5oIgogCi0jaW5jbHVkZSAiRGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VPYnNl
cnZlci5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2sgOiBwdWJsaWMgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
Tm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzaz4gY3JlYXRlKERhdGFiYXNlICpkYXRhYmFzZSkKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrPiBjcmVhdGUoQWJz
dHJhY3REYXRhYmFzZSAqZGF0YWJhc2UpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IE5vdGlm
eURhdGFiYXNlQ2hhbmdlZFRhc2soZGF0YWJhc2UpOwogICAgIH0KQEAgLTUzLDM0ICs1MCwzNSBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRh
c2soUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UpCisgICAgTm90aWZ5RGF0YWJhc2VDaGFu
Z2VkVGFzayhQYXNzUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IGRhdGFiYXNlKQogICAgICAgICA6
IG1fZGF0YWJhc2UoZGF0YWJhc2UpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxEYXRhYmFz
ZT4gbV9kYXRhYmFzZTsKKyAgICBSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gbV9kYXRhYmFzZTsK
IH07CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENvbW1pdFRyYW5zYWN0aW9uKFNR
TFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3ZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRp
ZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7Ci0g
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsK
LSAgICBpZiAoIXRyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soTm90aWZ5
RGF0YWJhc2VDaGFuZ2VkVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKSk7Cisg
ICAgaWYgKCFkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJl
YWQoKSkgeworICAgICAgICBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0
VGFzayhOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrOjpjcmVhdGUoZGF0YWJhc2UpKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KKworICAgIFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFi
YXNlTW9kaWZpZWQoZGF0YWJhc2UpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50Ojpk
aWRFeGVjdXRlU3RhdGVtZW50KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3ZvaWQgU1FM
VHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQoQWJzdHJhY3REYXRhYmFzZSog
ZGF0YWJhc2UpCiB7CiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGFmdGVyIGV4ZWN1dGlu
ZyBldmVyeSBzdGF0ZW1lbnQgdGhhdCBjaGFuZ2VzIHRoZSBEQi4KICAgICAvLyBDaHJvbWl1bSBk
b2Vzbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgdGhhdCBwb2ludC4KLSAgICBBU1NFUlQoY3Vy
cmVudFRocmVhZCgpID09IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwogfQogCi1ib29sIFNR
TFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YShTUUxUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pCitib29sIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YShBYnN0cmFj
dERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICAvLyBDaHJvbWl1bSBkb2VzIG5vdCBhbGxvdyB1
c2VycyB0byBtYW51YWxseSBjaGFuZ2UgdGhlIHF1b3RhIGZvciBhbiBvcmlnaW4gKGZvciBub3cs
IGF0IGxlYXN0KS4KICAgICAvLyBEb24ndCBkbyBhbnl0aGluZy4KLSAgICBBU1NFUlQodHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhy
ZWFkKCkpOworICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5p
c0NvbnRleHRUaHJlYWQoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2MjQ0MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDk0IEBACisyMDEwLTA3LTAzICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UG9ydGluZyBhcyBtYW55IGFzeW5jIERCIHRlc3RzIGFzIHBvc3NpYmxlIHRvIHN5bmMgREJzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA2MDcKKwor
ICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVz
ZS1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5
bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3Rh
dGVtZW50LXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMv
c3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1h
Y2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0
YXRlbWVudC1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdl
L211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvbXVsdGlwbGUtdHJh
bnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1z
eW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5j
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Bl
bi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy1leHBlY3RlZC50eHQ6
IENvcGllZCBmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJh
c2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbDogQ29waWVkIGZyb20gTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sLgor
ICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZl
cnNpb24tc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9z
dG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRz
LWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9v
cGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC93
b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVz
cy1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3Jh
Z2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2Ut
dmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5qczogQWRkZWQuCisgICAgICAgIChjYXRjaCk6Cisg
ICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5
bmMtMS5qczogQWRkZWQuCisgICAgICAgICgpOgorICAgICAgICAodHJ5KToKKyAgICAgICAgKiBm
YXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0yLmpzOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZW1wdHktc3Rh
dGVtZW50LXN5bmMuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jl
c291cmNlcy9leGVjdXRlLXNxbC1hcmdzLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAodGhyb3dP
blRvU3RyaW5nT2JqZWN0LnRvU3RyaW5nKToKKyAgICAgICAgKHZhcik6CisgICAgICAgICgpOgor
ICAgICAgICAocnVuVHJhbnNhY3Rpb25UZXN0KToKKyAgICAgICAgKHJ1blRyYW5zYWN0aW9uVGVz
dHMpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9leGVjdXRlc3Fs
LWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuanM6IEFkZGVkLgorICAgICAgICAoZXhl
Y3V0ZVN0YXRlbWVudCk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2Vz
L211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmpzOiBBZGRl
ZC4KKyAgICAgICAgKHJ1blRyYW5zYWN0aW9uKToKKyAgICAgICAgKHZhcik6CisgICAgICAgICog
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1zeW5j
LmpzOiBBZGRlZC4KKyAgICAgICAgKGNoZWNrQ29tcGxldGlvbik6CisgICAgICAgIChydW5UZXN0
LmRiKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMuanM6IEFkZGVk
LgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNl
LWVtcHR5LXZlcnNpb24tc3luYy5qczogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0
b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuanM6IENvcGllZCBmcm9t
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNl
LXN5bmMtaW5wdXRzLmpzLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuanM6IEFkZGVkLgorICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5w
dXRzLmpzOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMuanM6IEFk
ZGVkLgorICAgICAgICAob3BlblRlc3REYXRhYmFzZSk6CisgICAgICAgICogZmFzdC93b3JrZXJz
L3N0b3JhZ2UvcmVzb3VyY2VzL3NxbC1kYXRhLXR5cGVzLXN5bmMuanM6IEFkZGVkLgorICAgICAg
ICAoKToKKyAgICAgICAgKHRlc3REQlZhbHVlcyk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0
b3JhZ2UvcmVzb3VyY2VzL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5qczogQWRkZWQuCisgICAg
ICAgICh0ZXN0VHJhbnNhY3Rpb24pOgorICAgICAgICAoKToKKyAgICAgICAgKHRlc3RJbnZhbGlk
U3RhdGVtZW50KToKKyAgICAgICAgKHRlc3RJbmNvcnJlY3ROdW1iZXJPZkJpbmRQYXJhbWV0ZXJz
KToKKyAgICAgICAgKHRlc3RCaW5kUGFyYW1ldGVyT2ZXcm9uZ1R5cGUuYmFkU3RyaW5nLnRvU3Ry
aW5nKToKKyAgICAgICAgKHRlc3RCaW5kUGFyYW1ldGVyT2ZXcm9uZ1R5cGUpOgorICAgICAgICAo
dGVzdFZlcnNpb25NaXNtYXRjaC50ZXN0VHJhbnNhY3Rpb24pOgorICAgICAgICAodGVzdFZlcnNp
b25NaXNtYXRjaCk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3Rl
c3QtYXV0aG9yaXplci1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKGNsZWFudXApOgorICAgICAg
ICAoZXhlY3V0ZVN0YXRlbWVudCk6CisgICAgICAgIChjcmVhdGVUYWJsZUNhbGxiYWNrKToKKyAg
ICAgICAgKGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayk6CisgICAgICAgIChvdGhlclN0YXRlbWVu
dHNDYWxsYmFjayk6CisgICAgICAgIChkcm9wU3RhdGVtZW50c0NhbGxiYWNrKToKKyAgICAgICAg
KHRlc3RSZWFkV3JpdGVNb2RlKToKKyAgICAgICAgKHRlc3RSZWFkT25seU1vZGUpOgorICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90cmFuc2FjdGlvbi1pbi10cmFuc2Fj
dGlvbi1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwt
ZGF0YS10eXBlcy1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3Jr
ZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlwZXMtc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNv
ZGVzLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVz
dC1hdXRob3JpemVyLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dv
cmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvc3RvcmFnZS90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvdHJhbnNh
Y3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5odG1sOiBBZGRlZC4KKwogMjAxMC0wNy0wMyAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZl
cnNpb24taGFuZGxlLXJldXNlLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1z
eW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACitUZXN0IHRoYXQgdGhlIGRhdGFiYXNlIGNhbiBi
ZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4KK1BBU1M6IGNoYW5nZVZlcnNp
b24oKSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3YXMgY2FsbGVkLgorUEFTUzogTm8gZXhjZXB0aW9u
IHRocm93biB3aGlsZSBleGVjdXRpbmcgc3RhdGVtZW50cy4KK1BBU1M6IE5vIGV4Y2VwdGlvbiB0
aHJvd24gd2hpbGUgcnVubmluZyBhIHRyYW5zYWN0aW9uLgorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12
ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5k
bGUtcmV1c2Utc3luYy5qcycpIj4KK1Rlc3QgdGhhdCB0aGUgZGF0YWJhc2UgY2FuIGJlIGFjY2Vz
c2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3By
ZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hh
bmdlLXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBA
QAorVGVzdCB0aGF0IHZlcnNpb24gdXBkYXRlcyBpbiBzeW5jIGRhdGFiYXNlcyB3b3JrIGNvcnJl
Y3RseS4KK1BBU1M6IGRiLnZlcnNpb24gaXMgMyBhcyBleHBlY3RlZC4KKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9u
LXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCArPSBtZXNzYWdl
ICsgIjxicj4iOworfQorCitmdW5jdGlvbiBmaW5pc2hUZXN0KCkKK3sKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cisg
ICAgfQorCisgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj8yIikgeworICAgICAg
ICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMt
Mi5qcyIpOworICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgICAgICAgIGlmIChldmVudC5kYXRhID09ICJkb25lIikKKyAgICAgICAgICAgICAgICBmaW5p
c2hUZXN0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9nKGV2ZW50LmRh
dGEpOworICAgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICAgIHZhciB3b3JrZXIgPSBuZXcg
V29ya2VyKCJyZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0xLmpzIik7CisgICAgICAgIHdv
cmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50
LmRhdGEgPT0gImRvbmUiKQorICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0g
d2luZG93LmxvY2F0aW9uICsgIj8yIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEg
PT0gImZhaWwiKQorICAgICAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBsb2coZXZlbnQuZGF0YSk7CisgICAgICAgIH07CisgICAgfQor
fQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CitUZXN0IHRo
YXQgdmVyc2lvbiB1cGRhdGVzIGluIHN5bmMgZGF0YWJhc2VzIHdvcmsgY29ycmVjdGx5LgorPHBy
ZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2VtcHR5LXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1z
dGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorVGhpcyB0ZXN0IHRyaWVzIHRvIGV4ZWN1dGUgYW4g
ZW1wdHkgc3RhdGVtZW50LgorUEFTUzogcmVzdWx0IGlzIG51bGwKK1BBU1MKKwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0
ZW1lbnQtc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1
dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0
KCdyZXNvdXJjZXMvZW1wdHktc3RhdGVtZW50LXN5bmMuanMnKSI+CitUaGlzIHRlc3QgdHJpZXMg
dG8gZXhlY3V0ZSBhbiBlbXB0eSBzdGF0ZW1lbnQuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJl
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
ZXhlY3V0ZS1zcWwtYXJncy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMCBAQAorVGVzdCB2YXJpb3VzIGlucHV0cyB0byBleGVjdXRlU3FsKCkuCitQQVNTOiBleGVj
dXRlU3FsKCIiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwo
IiIsIG51bGwpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhlY3V0ZVNxbCgi
IiwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVT
cWwoIiIsIFtdKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwo
IiIsIFsgImFyZzAiIF0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhlY3V0
ZVNxbCgiIiwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVT
cWwoIiIsIHsgbGVuZ3RoOiAwIH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzog
ZXhlY3V0ZVNxbCgiIiwgeyBsZW5ndGg6IDEsIDA6ICJhcmcwIiB9KSBkaWQgbm90IHRocm93IGFu
IGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhw
ZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKG51bGwpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBl
Y3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwodW5kZWZpbmVkKSB0aHJldyBhbiBleGNlcHRpb24gYXMg
ZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBl
Y3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwodGhyb3dPblRvU3RyaW5nT2JqZWN0KSB0aHJldyBhbiBl
eGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKCIiLCB0aHJvd09uR2V0TGVu
Z3RoT2JqZWN0KSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRl
U3FsKCIiLCB0aHJvd09uR2V0WmVyb09iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVj
dGVkLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgWyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXSkgdGhy
ZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgMCkgdGhy
ZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgIiIpIHRo
cmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVj
dXRlLXNxbC1hcmdzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMv
ZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmpzJykiPgorVGVzdCB2YXJpb3VzIGlucHV0cyB0byBleGVj
dXRlU3FsKCkuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRz
LW9ubHktb25lLXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUt
c3RhdGVtZW50LXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVu
dC1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCB0
aGF0IGV4ZWN1dGVTcWwoKSBhY2NlcHRzIG9ubHkgb25lIHN0YXRlbWVudC4KK1BBU1M6IElOU0VS
VCBJTlRPIFRlc3QgVkFMVUVTICgxKQorUEFTUzogSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDIp
OworUEFTUzogICAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDMpICAgIAorUEFTUzogICAgSU5T
RVJUIElOVE8gVGVzdCBWQUxVRVMgKDQpOyAgIAorUEFTUzogSU5TRVJUIElOVE8gVGVzdCBWQUxV
RVMgKDUpICAgOworUEFTUzogSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDYpOyBnYXJiYWdlCitQ
QVNTOiBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoNyk7IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVT
ICg4KQorUEFTUzogICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoOSk7ICAgSU5TRVJUIElOVE8g
VGVzdCBWQUxVRVMgKDEwKTsgICAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1h
Y2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUt
c3RhdGVtZW50LXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvZXhl
Y3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmpzJykiPgorVGVzdCB0aGF0
IGV4ZWN1dGVTcWwoKSBhY2NlcHRzIG9ubHkgb25lIHN0YXRlbWVudC4KKzxwcmUgaWQ9ImNvbnNv
bGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMt
c3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhhdCBleGVjdXRp
bmcgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1l
IGRhdGFiYXNlIGRvZXNuJ3QgY2F1c2UgZGVhZGxvY2tzLgorUEFTUworCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVy
ZW50LWhhbmRsZXMtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1z
eW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24t
ZGlmZmVyZW50LWhhbmRsZXMtc3luYy5qcycpIj4KK1Rlc3QgdGhhdCBleGVjdXRpbmcgbXVsdGlw
bGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNl
IGRvZXNuJ3QgY2F1c2UgZGVhZGxvY2tzLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVh
dGlvbi1jYWxsYmFjay1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2st
c3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorVGhpcyB0ZXN0
IHRlc3RzIG9wZW5EYXRhYmFzZVN5bmMoKSdzIGNyZWF0aW9uIGNhbGxiYWNrLgorUEFTUzogQ3Jl
YXRpb24gY2FsbGJhY2sgd2FzIGNhbGxlZC4KK1BBU1M6IFZlcnNpb24gc2V0IHRvIGVtcHR5IHN0
cmluZyBhcyBleHBlY3RlZC4KK1BBU1M6IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGFuZCBkYjFG
YWlsIGlzIG51bGwgYXMgZXhwZWN0ZWQuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
Y3JlYXRpb24tY2FsbGJhY2stc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5j
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtY3Jl
YXRpb24tY2FsbGJhY2stc3luYy5qcycpIj4KK1RoaXMgdGVzdCB0ZXN0cyBvcGVuRGF0YWJhc2VT
eW5jKCkncyBjcmVhdGlvbiBjYWxsYmFjay4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9v
cGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12
ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhhdCBubyBleGNlcHRp
b24gaXMgdGhyb3duIHdoZW4gdGhlIGRhdGFiYXNlIGlzIG9wZW5lZCB3aXRoIGFuIGVtcHR5IHZl
cnNpb24uCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5
bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3Qt
aW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVu
VGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmpzJykiPgor
VGVzdCB0aGF0IG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiB0aGUgZGF0YWJhc2UgaXMgb3Bl
bmVkIHdpdGggYW4gZW1wdHkgdmVyc2lvbi4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9v
cGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gNjIyMzApCShmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0OjYyMjMwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMt
c3luYy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMSBAQAorVGhpcyB0
ZXN0IG1ha2VzIHN1cmUgdGhhdCBvcGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlk
IHBhcmFtZXRlcnMuCitQQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCitQQVNTOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCitQQVNTOiB1bmRlZmluZWQKK1BBU1M6IHVuZGVm
aW5lZAorUEFTUzogdW5kZWZpbmVkCitQQVNTOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxNworUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4KK1BBU1M6IG9wZW5E
YXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuCitQQVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMo
KSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sgc3VjY2VlZGVkLgorCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFz
ZS1pbnB1dHMtc3luYy5odG1sCShyZXZpc2lvbiA2MjIzMCkJKGZyb20gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sOjYyMjMwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMt
c3luYy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhZG9jdHlwZSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29t
bW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNv
dXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcycpIj4KK1RoaXMgdGVzdCBtYWtlcyBz
dXJlIHRoYXQgb3BlbkRhdGFiYXNlU3luYygpIGFjY2VwdHMgb25seSB2YWxpZCBwYXJhbWV0ZXJz
LgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVu
LWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0bWwJKHJldmlzaW9uIDYyMjMwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQAogPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0
LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgogPC9oZWFkPgogCi08Ym9keSBvbmxvYWQ9InJ1
blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzJykiPgorPGJvZHkg
b25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5qcycp
Ij4KIFRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgb3BlbkRhdGFiYXNlU3luYygpIGFjY2VwdHMg
b25seSB2YWxpZCBwYXJhbWV0ZXJzLgogPHByZSBpZD0iY29uc29sZSI+CiA8L3ByZT4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5
LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGhpcyB0ZXN0cyB0aGF0IGNhbGxpbmcgb3BlbkRh
dGFiYXNlIHdpdGggYW4gZW1wdHkgdmVyc2lvbiBzdHJpbmcgc2V0cyB0aGUgY3VycmVudCB2ZXJz
aW9uIG9mIHRoYXQgZGF0YWJhc2UgdG8gdGhlIGVtcHR5IHN0cmluZyBhbmQgc3Vic2VxdWVudCBh
dHRlbXB0cyB0byBvcGVuIHRoZSBkYXRhYmFzZSB3aXRoIGEgZGlmZmVyZW50IGV4cGVjdGVkIHZl
cnNpb24gdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRh
dGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNp
b24tc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFi
YXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuanMnKSI+CitUaGlzIHRlc3RzIHRoYXQgY2FsbGlu
ZyBvcGVuRGF0YWJhc2Ugd2l0aCBhbiBlbXB0eSB2ZXJzaW9uIHN0cmluZyBzZXRzIHRoZSBjdXJy
ZW50IHZlcnNpb24gb2YgdGhhdCBkYXRhYmFzZSB0byB0aGUgZW1wdHkgc3RyaW5nIGFuZCBzdWJz
ZXF1ZW50IGF0dGVtcHRzIHRvIG9wZW4gdGhlIGRhdGFiYXNlIHdpdGggYSBkaWZmZXJlbnQgZXhw
ZWN0ZWQgdmVyc2lvbiB0aHJvdyBhbiBleGNlcHRpb24uCis8cHJlIGlkPSJjb25zb2xlIj4KKzwv
cHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlu
cHV0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYyNDQzKQorKysgTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTEgKzAsMCBAQAotVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBv
cGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlkIHBhcmFtZXRlcnMuCi1QQVNTOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCi1QQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0
aW9uIDEyCi1QQVNTOiB1bmRlZmluZWQKLVBBU1M6IHVuZGVmaW5lZAotUEFTUzogdW5kZWZpbmVk
Ci1QQVNTOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNwotUEFTUzogb3BlbkRh
dGFiYXNlU3luYygpIHN1Y2NlZWRlZC4KLVBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVk
ZWQuCi1QQVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2Fs
bGJhY2sgc3VjY2VlZGVkLgotCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sCShy
ZXZpc2lvbiA2MjQ0MykKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4t
ZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMCwwIEBA
Ci08IWRvY3R5cGUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IG9ubG9h
ZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanMnKSI+Ci1U
aGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IG9wZW5EYXRhYmFzZVN5bmMoKSBhY2NlcHRzIG9ubHkg
dmFsaWQgcGFyYW1ldGVycy4KLTxwcmUgaWQ9ImNvbnNvbGUiPgotPC9wcmU+Ci08L2JvZHk+Ci08
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFi
YXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
d2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdo
aWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhhdCBhIHNlY29uZCBoYW5kbGUgdG8gdGhlIHNhbWUg
ZGF0YWJhc2UgY2FuIGJlIG9wZW5lZCBpbnNpZGUgYSB0cmFuc2FjdGlvbiBydW5uaW5nIG9uIHRo
ZSBmaXJzdCBoYW5kbGUuCitQQVNTOiBzZWNvbmQgaGFuZGxlIG9wZW5lZCBzdWNjZXNzZnVsbHku
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
d2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNh
Y3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1w
cm9ncmVzcy1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4t
ZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5qcycpIj4KK1Rlc3Qg
dGhhdCBhIHNlY29uZCBoYW5kbGUgdG8gdGhlIHNhbWUgZGF0YWJhc2UgY2FuIGJlIG9wZW5lZCBp
bnNpZGUgYSB0cmFuc2FjdGlvbiBydW5uaW5nIG9uIHRoZSBmaXJzdCBoYW5kbGUuCis8cHJlIGlk
PSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlwZXMtc3luYy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlw
ZXMtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3IEBACitUZXN0IHRoYXQgdGhlIHZhbHVlcyByZXR1cm5lZCBieSBEQiBx
dWVyaWVzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSB2YWx1ZXMgaW5zZXJ0ZWQgaW4gdGhl
IGRhdGFiYXNlLgorUEFTUzogcHJvcGVydHkgJ3RpbWVzdGFtcCcgT0ssIHR5cGUgd2FzIG51bWJl
cgorUEFTUzogcHJvcGVydHkgJ2lkJyBPSywgdHlwZSB3YXMgbnVtYmVyCitQQVNTOiBwcm9wZXJ0
eSAncmVhbCcgT0ssIHR5cGUgd2FzIG51bWJlcgorUEFTUzogcHJvcGVydHkgJ3RleHQnIE9LLCB0
eXBlIHdhcyBzdHJpbmcKK1BBU1M6IHByb3BlcnR5ICdibG9iJyBPSywgdHlwZSB3YXMgc3RyaW5n
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVz
LXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9zcWwtZGF0YS10eXBlcy1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9h
ZD0icnVuVGVzdCgncmVzb3VyY2VzL3NxbC1kYXRhLXR5cGVzLXN5bmMuanMnKSI+CitUZXN0IHRo
YXQgdGhlIHZhbHVlcyByZXR1cm5lZCBieSBEQiBxdWVyaWVzIGFyZSBvZiB0aGUgc2FtZSB0eXBl
IGFzIHRoZSB2YWx1ZXMgaW5zZXJ0ZWQgaW4gdGhlIGRhdGFiYXNlLgorPHByZSBpZD0iY29uc29s
ZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1j
b2Rlcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorVGVzdCB0aGF0IHRoZSBjb3JyZWN0IGV4Y2VwdGlv
bnMgYXJlIHRocm93biBpbiBleGNlcHRpb25hbCBzaXR1YXRpb25zLgorUEFTUzogZXhwZWN0ZWQg
YW5kIGdvdCBlcnJvciBjb2RlIFVOS05PV05fRVJSCitQQVNTOiBleHBlY3RlZCBhbmQgZ290IGVy
cm9yIGNvZGUgU1lOVEFYX0VSUgorUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFNZ
TlRBWF9FUlIKK1BBU1M6IGV4cGVjdGVkIGFuZCBnb3QgZXJyb3IgY29kZSBVTktOT1dOX0VSUgor
UEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFFVT1RBX0VSUgorUEFTUzogVHJhbnNh
Y3Rpb24gd2FzIHJvbGxlZCBiYWNrIGJ5IFNRTGl0ZSBhcyBleHBlY3RlZC4KK1BBU1M6IGV4cGVj
dGVkIGFuZCBnb3QgZXJyb3IgY29kZSBWRVJTSU9OX0VSUgorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNv
ZGVzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlu
cHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRl
c3QoJ3Jlc291cmNlcy9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMuanMnKSI+CitUZXN0IHRoYXQg
dGhlIGNvcnJlY3QgZXhjZXB0aW9ucyBhcmUgdGhyb3duIGluIGV4Y2VwdGlvbmFsIHNpdHVhdGlv
bnMuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorVGVzdCB0aGUgZGF0YWJhc2UgYXV0
aG9yaXplci4KK0JlZ2lubmluZyB3cml0ZSB0cmFuc2FjdGlvbjoKK1NRTElURV9DUkVBVEVfVEFC
TEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfSU5ERVggc3RhdGVtZW50IHN1
Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgor
U1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9D
UkVBVEVfVEVNUF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RSSUdH
RVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVklFVyBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorU1FMSVRFX0NSRUFURV9WVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBT
UUxFeGNlcHRpb25dICg1KQorU1FMSVRFX1JFQUQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElU
RV9TRUxFQ1Qgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9ERUxFVEUgc3RhdGVtZW50IHN1
Y2NlZWRlZC4KK1NRTElURV9JTlNFUlQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9VUERB
VEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9QUkFHTUEgc3RhdGVtZW50IGZhaWxlZDog
W29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBz
dWNjZWVkZWQuCitTUUxJVEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElU
RV9UUkFOU0FDVElPTiBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUp
CitTUUxJVEVfQVRUQUNIIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAo
NSkKK1NRTElURV9ERVRBQ0ggc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25d
ICg1KQorU1FMSVRFX1JFSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9BTkFMWVpF
IHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9Q
X0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9URU1QX1RBQkxFIHN0YXRl
bWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2Nl
ZWRlZC4KK1NRTElURV9EUk9QX1RFTVBfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRF
X0RST1BfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVklFVyBzdGF0
ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4K
K1dyaXRlIHRyYW5zYWN0aW9uIHN1Y2NlZWRlZC4KKworQmVnaW5uaW5nIHJlYWQgdHJhbnNhY3Rp
b25zOgorU1FMSVRFX0NSRUFURV9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4
Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitT
UUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9u
XSAoNSkKK1NRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0
IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQg
ZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklF
VyBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JF
QVRFX1RSSUdHRVIgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQor
U1FMSVRFX0NSRUFURV9WSUVXIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9u
XSAoNSkKK1NRTElURV9DUkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FM
RXhjZXB0aW9uXSAoNSkKK1NRTElURV9DUkVBVEVfSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4K
K1NRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NS
RUFURV9URU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVN
UF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RSSUdHRVIgc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgor
U1FMSVRFX0NSRUFURV9WVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRp
b25dICg1KQorU1FMSVRFX1JFQUQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9TRUxFQ1Qg
c3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9ERUxFVEUgc3RhdGVtZW50IGZhaWxlZDogW29i
amVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0lOU0VSVCBzdGF0ZW1lbnQgZmFpbGVkOiBb
b2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfVVBEQVRFIHN0YXRlbWVudCBmYWlsZWQ6
IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9QUkFHTUEgc3RhdGVtZW50IGZhaWxl
ZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVu
dCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9BTFRFUl9UQUJMRSBz
dGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfVFJBTlNB
Q1RJT04gc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRF
X0FUVEFDSCBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJ
VEVfREVUQUNIIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NR
TElURV9SRUlOREVYIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkK
K1NRTElURV9BTkFMWVpFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAo
NSkKK1NRTElURV9EUk9QX0lOREVYIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0
aW9uXSAoNSkKK1NRTElURV9EUk9QX1RFTVBfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVj
dCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBm
YWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9QX1RFTVBfVklFVyBz
dGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9U
UklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElU
RV9EUk9QX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQor
U1FMSVRFX0RST1BfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25d
ICg1KQorUmVhZCB0cmFuc2FjdGlvbnMgc3VjY2VlZGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5j
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90
ZXN0LWF1dGhvcml6ZXItc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24u
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNl
cy90ZXN0LWF1dGhvcml6ZXItc3luYy5qcycpIj4KK1Rlc3QgdGhlIGRhdGFiYXNlIGF1dGhvcml6
ZXIuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rp
b24tc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90cmFuc2Fj
dGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzIEBACitUZXN0IHRoYXQgdHJ5aW5nIHRvIHJ1biBhIHRyYW5zYWN0aW9uIGluc2lkZSBh
bm90aGVyIHRyYW5zYWN0aW9uIHRocm93cyBhbiBleGNlcHRpb24uCitQQVNTOiBFeGNlcHRpb24g
dGhyb3duIHdoaWxlIHRyeWluZyB0byBydW4gYSBuZXN0ZWQgdHJhbnNhY3Rpb24uCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3RyYW5zYWN0aW9uLWluLXRyYW5zYWN0
aW9uLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90cmFuc2FjdGlvbi1pbi10cmFuc2Fj
dGlvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL3RyYW5zYWN0
aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuanMnKSI+CitUZXN0IHRoYXQgdHJ5aW5nIHRvIHJ1biBh
IHRyYW5zYWN0aW9uIGluc2lkZSBhbm90aGVyIHRyYW5zYWN0aW9uIHRocm93cyBhbiBleGNlcHRp
b24uCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9u
LWhhbmRsZS1yZXVzZS1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5qcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyOSBAQAordmFyIGRiID0gbnVsbDsKK3RyeSB7CisgICAgdmFyIGRiTmFtZSA9ICJD
aGFuZ2VWZXJzaW9uSGFuZGxlUmV1c2VUZXN0IiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7Cisg
ICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKGRiTmFtZSwgIiIsICJUZXN0IHRoYXQgdGhlIERCIGhh
bmRsZSBpcyB2YWxpZCBhZnRlciBjaGFuZ2luZyB0aGUgdmVyc2lvbi4iLCAxKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRiLnZlcnNpb247CisgICAgdmFyIG5ld1ZlcnNpb24gPSB2ZXJzaW9uID8gKHBh
cnNlSW50KHZlcnNpb24pICsgMSkudG9TdHJpbmcoKSA6ICIxIjsKKyAgICBkYi5jaGFuZ2VWZXJz
aW9uKHZlcnNpb24sIG5ld1ZlcnNpb24sIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgIHBvc3RNZXNz
YWdlKCJQQVNTOiBjaGFuZ2VWZXJzaW9uKCkgdHJhbnNhY3Rpb24gY2FsbGJhY2sgd2FzIGNhbGxl
ZC4iKTsKKyAgICB9KTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBj
aGFuZ2VWZXJzaW9uKCkgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgZXJyKTsKK30KKwordHJ5IHsK
KyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9v
IElOVCkiKTsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCAqIGZyb20gVGVzdCIp
OworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IE5vIGV4Y2VwdGlvbiB0aHJvd24gd2hp
bGUgZXhlY3V0aW5nIHN0YXRlbWVudHMuIik7CisgICAgICAgIH0gY2F0Y2ggKGVycikgeworICAg
ICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIHdoaWxl
IGV4ZWN1dGluZyBzdGF0ZW1lbnRzOiAiICsgZXJyKTsKKyAgICAgICAgfQorICAgIH0pOworICAg
IHBvc3RNZXNzYWdlKCJQQVNTOiBObyBleGNlcHRpb24gdGhyb3duIHdoaWxlIHJ1bm5pbmcgYSB0
cmFuc2FjdGlvbi4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBB
biBleGNlcHRpb24gd2FzIHRocm93biB3aGlsZSBydW5uaW5nIGEgdHJhbnNhY3Rpb246ICIgKyBl
cnIpOworfQorCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdl
LXZlcnNpb24tc3luYy0xLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMS5qcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1MCBAQAordmFyIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfSElYSUVfVEVT
VCA9ICIyIjsKK3ZhciBFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX1JFTE9BRCA9ICIzIjsKKworZnVu
Y3Rpb24gZW1wdHlGdW5jdGlvbigpIHsgfQorCit2YXIgZGIxID0gb3BlbkRhdGFiYXNlU3luYygi
Q2hhbmdlVmVyc2lvblRlc3QiLCAiMSIsICJUZXN0IGZvciB0aGUgZGF0YWJhc2UuY2hhbmdlVmVy
c2lvbigpIGZ1bmN0aW9uIiwgMSk7Cit2YXIgZGIyID0gb3BlbkRhdGFiYXNlU3luYygiQ2hhbmdl
VmVyc2lvblRlc3QiLCAiMSIsICJUZXN0IGZvciB0aGUgZGF0YWJhc2UuY2hhbmdlVmVyc2lvbigp
IGZ1bmN0aW9uIiwgMSk7CisKKy8vIEZpcnN0IHJ1biBIaXhpZSdzIHRlc3QgdG8gZW5zdXJlIGJh
c2ljIGNoYW5nZVZlcnNpb24oKSBmdW5jdGlvbmFsaXR5IHdvcmtzIChzZWUgYnVnIDI4NDE4KS4K
K2RiMS5jaGFuZ2VWZXJzaW9uKCIxIiwgRVhQRUNURURfVkVSU0lPTl9BRlRFUl9ISVhJRV9URVNU
LCBlbXB0eUZ1bmN0aW9uKTsKK2lmIChkYjIudmVyc2lvbiAhPSBkYjEudmVyc2lvbikgeworICAg
IHBvc3RNZXNzYWdlKCJGQUlMOiBjaGFuZ2luZyBkYjEncyB2ZXJzaW9uICgiICsgZGIxLnZlcnNp
b24gKyAiKSBkaWQgbm90IGNoYW5nZSBkYjIncyB2ZXJzaW9uICgiICsgZGIyLnZlcnNpb24gKyAi
KSBhcyBleHBlY3RlZC4iKTsKKyAgICBwb3N0TWVzc2FnZSgiZmFpbCIpOworfSBlbHNlCisgICAg
cG9zdE1lc3NhZ2UoIlBBU1M6IGNoYW5naW5nIGRiMSdzIHZlcnNpb24gKCIgKyBkYjEudmVyc2lv
biArICIpIGNoYW5nZWQgZGIyJ3MgdmVyc2lvbiB0b28uIik7CisKK2RiMi50cmFuc2FjdGlvbihm
dW5jdGlvbih0eCkgeworICAgIHRyeSB7CisgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBU
QUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBJTlQpIik7CisgICAgICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiBUaGUgREIgdmVyc2lvbiBjaGFuZ2VkLCBleGVjdXRpbmcgYW55IHN0YXRlbWVudCBv
biBkYjIgc2hvdWxkIGZhaWwuIik7CisgICAgICAgIHBvc3RNZXNzYWdlKCJmYWlsIik7CisgICAg
fSBjYXRjaChlcnIpIHsKKyAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBFeGVjdXRpbmcgYSBzdGF0
ZW1lbnQgb24gZGIyIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4iKTsKKyAgICB9Cit9
KTsKKworLy8gTWFrZSBzdXJlIGFueSBuZXcgaGFuZGxlIHRvIHRoZSBzYW1lIERCIHNlZXMgdGhl
IG5ldyB2ZXJzaW9uCit0cnkgeworICAgIHZhciBkYjMgPSBvcGVuRGF0YWJhc2VTeW5jKCJDaGFu
Z2VWZXJzaW9uVGVzdCIsIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfSElYSUVfVEVTVCwgIiIsIDEp
OworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBTdWNjZXNzZnVsbHkgb3BlbmVkIGEgbmV3IERCIGhh
bmRsZS4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBVbmV4cGVj
dGVkIGV4Y2VwdGlvbiB0aHJvd24gd2hpbGUgdHJ5aW5nIHRvIG9wZW4gYSBuZXcgREIgaGFuZGxl
OiAiICsgZXJyKTsKKyAgICBwb3N0TWVzc2FnZSgiZmFpbCIpOworfQorCitpZiAoZGIxLnZlcnNp
b24gIT0gZGIzLnZlcnNpb24pIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogZGIxLnZlcnNpb24g
KCIgKyBkYjEudmVyc2lvbiArICIpIGRvZXMgbm90IG1hdGNoIGRiMy52ZXJzaW9uKCIgKyBkYjMu
dmVyc2lvbiArIikiKTsKKyAgICBwb3N0TWVzc2FnZSgiZmFpbCIpOworfSBlbHNlCisgICAgcG9z
dE1lc3NhZ2UoIlBBU1M6IGRiMS52ZXJzaW9uICgiICsgZGIxLnZlcnNpb24gKyAiKSBtYXRjaGVz
IGRiMy52ZXJzaW9uLiIpOworCisvLyBOb3cgdHJ5IGEgdGVzdCB0byBlbnN1cmUgdGhlIHZlcnNp
b24gcGVyc2lzdHMgYWZ0ZXIgcmVsb2FkaW5nIChzZWUgYnVnIDI3ODM2KQorZGIxLmNoYW5nZVZl
cnNpb24oRVhQRUNURURfVkVSU0lPTl9BRlRFUl9ISVhJRV9URVNULCBFWFBFQ1RFRF9WRVJTSU9O
X0FGVEVSX1JFTE9BRCwKKyAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBUQUJMRSBJRiBFWElTVFMgSW5mbyIp
OworICAgICAgICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBO
T1QgRVhJU1RTIEluZm8gKFZlcnNpb24gSU5URUdFUikiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBJbmZvIFZBTFVFUyAoPykiLCBbRVhQRUNURURf
VkVSU0lPTl9BRlRFUl9SRUxPQURdKTsKKyAgICAgICAgICAgICAgICAgIH0pOworCitwb3N0TWVz
c2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVz
b3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0yLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMi5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBA
QAordmFyIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FEID0gJzMnOworCit2YXIgZGIgPSBv
cGVuRGF0YWJhc2VTeW5jKCJDaGFuZ2VWZXJzaW9uVGVzdCIsICIiLCAiVGVzdCB0aGUgY2hhbmdl
VmVyc2lvbigpIGZ1bmN0aW9uLiIsIDEpOworaWYgKGRiLnZlcnNpb24gPT0gRVhQRUNURURfVkVS
U0lPTl9BRlRFUl9SRUxPQUQpCisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGRiLnZlcnNpb24gaXMg
IiArIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FEICsgIiBhcyBleHBlY3RlZC4iKTsKK2Vs
c2UKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogZGIudmVyc2lvbiBpcyAiICsgZGIudmVyc2lvbiAr
ICI7IGV4cGVjdGVkICIgKyBFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX1JFTE9BRCk7CisKKy8vIFJl
c2V0IHRoZSB2ZXJzaW9uOyBvdGhlcndpc2UgdGhpcyB0ZXN0IHdpbGwgZmFpbCB0aGUgbmV4dCB0
aW1lIGl0J3MgcnVuCitkYi5jaGFuZ2VWZXJzaW9uKGRiLnZlcnNpb24sICIxIiwgZnVuY3Rpb24o
dHgpIHsgfSk7CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZW1wdHktc3RhdGVtZW50LXN5bmMuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2VtcHR5
LXN0YXRlbWVudC1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2VtcHR5LXN0YXRlbWVudC1zeW5jLmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEyIEBACit0cnkgeworICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMo
IkVtcHR5U3RhdGVtZW50U3luYyIsICIxLjAiLCAiVGVzdCBhbiBlbXB0eSBzdGF0ZW1lbnQuIiwg
MSk7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IHR4LmV4ZWN1dGVTcWwoIiIpOworICAgICAgICBwb3N0TWVzc2FnZShyZXN1bHQgPyAiRkFJ
TDogcmVzdWx0IGlzIG5vdCBudWxsIiA6ICJQQVNTOiByZXN1bHQgaXMgbnVsbCIpOworICAgIH0p
OworICAgIHBvc3RNZXNzYWdlKCJQQVNTIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVz
c2FnZSgiRkFJTCIpOworfQorCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJj
ZXMvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBAQAordmFyIHRocm93T25Ub1N0cmluZ09iamVjdCA9
IHsgfTsKK3Rocm93T25Ub1N0cmluZ09iamVjdC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsgdGhy
b3cgIkNhbm5vdCBjYWxsIHRvU3RyaW5nIG9uIHRoaXMgb2JqZWN0LiIgfTsKKwordmFyIHRocm93
T25HZXRMZW5ndGhPYmplY3QgPSB7IH07Cit0aHJvd09uR2V0TGVuZ3RoT2JqZWN0Ll9fZGVmaW5l
R2V0dGVyX18oImxlbmd0aCIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBnZXQgbGVuZ3Ro
IG9mIHRoaXMgb2JqZWN0LiI7IH0pOworCit2YXIgdGhyb3dPbkdldFplcm9PYmplY3QgPSB7IGxl
bmd0aDogMSB9OwordGhyb3dPbkdldFplcm9PYmplY3QuX19kZWZpbmVHZXR0ZXJfXygiMCIsIGZ1
bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBnZXQgMCBwcm9wZXJ0eSBvZiB0aGlzIG9iamVjdC4i
OyB9KTsKKwordmFyIGV4cGVjdE5vRXhjZXB0aW9uID0gWworICAgICciIicsCisgICAgJyIiLCBu
dWxsJywKKyAgICAnIiIsIHVuZGVmaW5lZCcsCisgICAgJyIiLCBbXScsCisgICAgJyIiLCBbICJh
cmcwIiBdJywKKyAgICAnIiIsIHsgfScsCisgICAgJyIiLCB7IGxlbmd0aDogMCB9JywKKyAgICAn
IiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIgfScsCitdOworCit2YXIgZXhwZWN0RXhjZXB0aW9u
ID0gWworICAgICcnLAorICAgICdudWxsJywKKyAgICAndW5kZWZpbmVkJywKKyAgICAnMCcsCisg
ICAgJ3Rocm93T25Ub1N0cmluZ09iamVjdCcsCisgICAgJyIiLCB0aHJvd09uR2V0TGVuZ3RoT2Jq
ZWN0JywKKyAgICAnIiIsIHRocm93T25HZXRaZXJvT2JqZWN0JywKKyAgICAnIiIsIFsgdGhyb3dP
blRvU3RyaW5nT2JqZWN0IF0nLAorICAgICciIiwgMCcsCisgICAgJyIiLCAiIicsCitdOworCitm
dW5jdGlvbiB0cnlFeGVjdXRlU3FsKHRyYW5zYWN0aW9uLCBwYXJhbWV0ZXJMaXN0KQoreworICAg
IHRyeSB7CisgICAgICAgIGV2YWwoJ3RyYW5zYWN0aW9uLmV4ZWN1dGVTcWwoJyArIHBhcmFtZXRl
ckxpc3QgKyAnKScpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9IGNhdGNoIChleGNlcHRp
b24pIHsKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1
blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCwgZXhwZWN0RXhjZXB0
aW9uKQoreworICAgIHZhciBleGNlcHRpb24gPSB0cnlFeGVjdXRlU3FsKHRyYW5zYWN0aW9uLCBw
YXJhbWV0ZXJMaXN0KTsKKyAgICBpZiAoZXhwZWN0RXhjZXB0aW9uKSB7CisgICAgICAgIGlmIChl
eGNlcHRpb24pCisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogZXhlY3V0ZVNxbCgiICsg
cGFyYW1ldGVyTGlzdCArICIpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4iKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGV4ZWN1dGVTcWwoIiAr
IHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgcG9zdE1lc3NhZ2Uo
IkZBSUw6IGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSB0aHJldyBhbiBleGNlcHRp
b246ICIgKyBleGNlcHRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3N0TWVzc2Fn
ZSgiUEFTUzogZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIGRpZCBub3QgdGhyb3cg
YW4gZXhjZXB0aW9uLiIpOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0
cyh0cmFuc2FjdGlvbikKK3sKKyAgICBmb3IgKGkgaW4gZXhwZWN0Tm9FeGNlcHRpb24pCisgICAg
ICAgIHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgZXhwZWN0Tm9FeGNlcHRpb25baV0s
IGZhbHNlKTsKKyAgICBmb3IgKGkgaW4gZXhwZWN0RXhjZXB0aW9uKQorICAgICAgICBydW5UcmFu
c2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIGV4cGVjdEV4Y2VwdGlvbltpXSwgdHJ1ZSk7Cit9CisK
K3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkV4ZWN1dGVTUUxBcmdzVGVzdCIsICIxLjAiLCAi
VGVzdCBvZiBoYW5kbGluZyBvZiB0aGUgYXJndW1lbnRzIHRvIFNRTFRyYW5zYWN0aW9uU3luYy5l
eGVjdXRlU3FsIiwgMSk7CitkYi50cmFuc2FjdGlvbihydW5UcmFuc2FjdGlvblRlc3RzKTsKK3Bv
c3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9yZXNvdXJjZXMvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0
ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIzIEBACitmdW5jdGlvbiBleGVjdXRlU3RhdGVtZW50KHR4LCBleHBlY3RlZFRvUGFz
cywgc3RhdGVtZW50KQoreworICAgIHRyeSB7CisgICAgICAgIHR4LmV4ZWN1dGVTcWwoc3RhdGVt
ZW50KTsKKyAgICAgICAgcG9zdE1lc3NhZ2UoZXhwZWN0ZWRUb1Bhc3MgPyAiUEFTUzogIiArIHN0
YXRlbWVudCA6ICJGQUlMOiAiICsgc3RhdGVtZW50KTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAg
ICAgICAgcG9zdE1lc3NhZ2UoIWV4cGVjdGVkVG9QYXNzID8gIlBBU1M6ICIgKyBzdGF0ZW1lbnQg
OiAiRkFJTDogIiArIHN0YXRlbWVudCk7CisgICAgfQorfQorCit2YXIgZGIgPSBvcGVuRGF0YWJh
c2VTeW5jKCJFeGVjdXRlU1FMQWNjZXB0c09ubHlPbmVTdGF0ZW1lbnRUZXN0IiwgIjEuMCIsICIi
LCAxKTsKK2RiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgdHguZXhlY3V0ZVNxbCgi
Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCkiKTsKKyAgICBleGVjdXRl
U3RhdGVtZW50KHR4LCB0cnVlLCAiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDEpIik7CisgICAg
ZXhlY3V0ZVN0YXRlbWVudCh0eCwgdHJ1ZSwgIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgyKTsi
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCB0cnVlLCAiICAgSU5TRVJUIElOVE8gVGVzdCBW
QUxVRVMgKDMpICAgICIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIHRydWUsICIgICBJTlNF
UlQgSU5UTyBUZXN0IFZBTFVFUyAoNCk7ICAgIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwg
dHJ1ZSwgIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg1KSAgIDsiKTsKKyAgICBleGVjdXRlU3Rh
dGVtZW50KHR4LCBmYWxzZSwgIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg2KTsgZ2FyYmFnZSIp
OworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIGZhbHNlLCAiSU5TRVJUIElOVE8gVGVzdCBWQUxV
RVMgKDcpOyBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoOCkiKTsKKyAgICBleGVjdXRlU3RhdGVt
ZW50KHR4LCBmYWxzZSwgIiAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDkpOyAgIElOU0VSVCBJ
TlRPIFRlc3QgVkFMVUVTICgxMCk7ICAgIik7Cit9KTsKK3Bvc3RNZXNzYWdlKCJkb25lIik7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvbXVsdGlwbGUt
dHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5z
YWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0
aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMyIEBACitmdW5jdGlvbiBydW5UcmFuc2FjdGlvbihkYikKK3sKKyAgICBkYi50cmFuc2FjdGlv
bihmdW5jdGlvbih0eCkgeworICAgICAgIC8vIEV4ZWN1dGUgYSByZWFkLW9ubHkgc3RhdGVtZW50
CisgICAgICAgdHguZXhlY3V0ZVNxbCgiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsiKTsKKwor
ICAgICAgIC8vIEV4ZWN1dGUgYSB3cml0ZSBzdGF0ZW1lbnQgdG8gbWFrZSBzdXJlIFNRTGl0ZSB0
cmllcyB0byBhY3F1aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBEQiBmaWxlCisgICAgICAg
dHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKD8pOyIsIFsxXSk7CisgICAg
fSk7Cit9CisKK3ZhciBkYjEgPSBvcGVuRGF0YWJhc2VTeW5jKCJNdWx0aXBsZVRyYW5zYWN0aW9u
c09uRGlmZmVyZW50SGFuZGxlc1Rlc3QiLCAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJUZXN0IHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBE
Qi4iLCAxKTsKK2RiMS50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgIHR4LmV4ZWN1dGVT
cWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIpOworfSk7CisK
K3ZhciBkYjIgPSBvcGVuRGF0YWJhc2VTeW5jKCJNdWx0aXBsZVRyYW5zYWN0aW9uc09uRGlmZmVy
ZW50SGFuZGxlc1Rlc3QiLCAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0
IHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBEQi4iLCAxKTsK
K2lmIChkYjEgPT0gZGIyKQorICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBkYjEgPT0gZGIyIik7Citl
bHNlIHsKKyAgICB0cnkgeworICAgICAgICBydW5UcmFuc2FjdGlvbihkYjEpOworICAgICAgICBy
dW5UcmFuc2FjdGlvbihkYjIpOworICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUyIpOworICAgIH0g
Y2F0Y2ggKGVycikgeworICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVycik7CisgICAg
fQorfQorCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1zeW5jLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0
aXBsZS10cmFuc2FjdGlvbnMtc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtc3luYy5q
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAordmFyIGNvbXBsZXRlID0gMDsKKworZnVu
Y3Rpb24gY2hlY2tDb21wbGV0aW9uKCkKK3sKKyAgICBpZiAoKytjb21wbGV0ZSA9PSAyICYmIHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICB2YXIgZGIgPSBv
cGVuRGF0YWJhc2VXaXRoU3VmZml4KCJNdWx0aXBsZVRyYW5zYWN0aW9uc1Rlc3QiLCAiMS4wIiwg
IlRlc3QgdG8gbWFrZSBzdXJlIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBjYW4gYmUgcXVldWVkIGF0
IG9uY2UgZm9yIGFuIEhUTUw1IGRhdGFiYXNlIiwgMzI3NjgpOworCisgICAgZGIudHJhbnNhY3Rp
b24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiAxIFN0YXJ0ZWQiKTsK
KyAgICB9LCBmdW5jdGlvbihlcnIpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiAxIEVycm9y
ZWQgLSAiICsgZXJyKTsKKyAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgfSwgZnVuY3Rp
b24oKSB7CisgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gMSBTdWNjZWVkZWQiKTsKKyAgICAgICAg
Y2hlY2tDb21wbGV0aW9uKCk7CisgICAgfSk7CisKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlv
bih0eCkgeworICAgICAgICBsb2coIlRyYW5zYWN0aW9uIDIgU3RhcnRlZCIpOworICAgIH0sIGZ1
bmN0aW9uKGVycikgeworICAgICAgICBsb2coIlRyYW5zYWN0aW9uIDIgRXJyb3JlZCAtICIgKyBl
cnIpOworICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgbG9nKCJUcmFuc2FjdGlvbiAyIFN1Y2NlZWRlZCIpOworICAgICAgICBjaGVja0NvbXBs
ZXRpb24oKTsKKyAgICB9KTsKK30KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29w
ZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWNy
ZWF0aW9uLWNhbGxiYWNrLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK3Zh
ciBjcmVhdGlvbkNhbGxiYWNrQ2FsbGVkMSA9IGZhbHNlOwordmFyIGRiMU5hbWUgPSAiT3BlbkRh
dGFiYXNlQ3JlYXRpb25DYWxsYmFjazEiICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKK3ZhciBk
YjJOYW1lID0gIk9wZW5EYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2syIiArIChuZXcgRGF0ZSgpKS5n
ZXRUaW1lKCk7Cit2YXIgZGIxID0gb3BlbkRhdGFiYXNlU3luYyhkYjFOYW1lLCAiMS4wIiwgIiIs
IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihkYikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBDcmVhdGlvbiBjYWxsYmFj
ayB3YXMgY2FsbGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYi52
ZXJzaW9uICE9ICIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVz
c2FnZSgiRkFJTDogV3JvbmcgdmVyc2lvbiAiICsgZGIudmVyc2lvbiArICI7IGVtcHR5IHN0cmlu
ZyBleHBlY3RlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBWZXJzaW9u
IHNldCB0byBlbXB0eSBzdHJpbmcgYXMgZXhwZWN0ZWQuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKKwordmFyIGRiMUZhaWwgPSBudWxsOwordHJ5IHsKKyAgICBkYjFGYWlsID0g
b3BlbkRhdGFiYXNlU3luYyhkYjFOYW1lLCAiMS4wIiwgIiIsIDEpOworICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiBBbiBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRpb24gc2hvdWxkJ3ZlIGJlZW4gdGhy
b3duLiIpOworfSBjYXRjaChlcnIpIHsKKyAgICBpZiAoZGIxRmFpbCkKKyAgICAgICAgcG9zdE1l
c3NhZ2UoIkZBSUw6IGRiMUZhaWwgc2hvdWxkIGhhdmUgYmVlbiBudWxsLiIpOworICAgIGVsc2UK
KyAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGFuZCBk
YjFGYWlsIGlzIG51bGwgYXMgZXhwZWN0ZWQuIik7Cit9CisKKy8vIE9wZW4gYSBoYW5kbGUgdG8g
YW5vdGhlciBkYXRhYmFzZSwgZmlyc3Qgd2l0aG91dCBhIGNyZWF0aW9uIGNhbGxiYWNrLCB0aGVu
IHdpdGggb25lLgorLy8gTWFrZSBzdXJlIHRoZSBjcmVhdGlvbiBjYWxsYmFjayBpcyBub3QgY2Fs
bGVkLgordmFyIGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoZGIyTmFtZSwgIjEuMCIsICIiLCAxKTsK
K2RiMiA9IG9wZW5EYXRhYmFzZVN5bmMoZGIyTmFtZSwgIjEuMCIsICIiLCAxLCBmdW5jdGlvbihk
YikgeyBwb3N0TWVzc2FnZSgiRkFJTDogQ3JlYXRpb24gY2FsbGJhY2sgc2hvdWxkIG5vdCBoYXZl
IGJlZW4gY2FsbGVkLiIpOyB9KTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWVtcHR5
LXZlcnNpb24tc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
b3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNyBAQAordHJ5IHsKKyAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJPcGVuRGF0YWJh
c2VFbXB0eVZlcnNpb25UZXN0IiwgIiIsICJUZXN0IHRoYXQgd2UgY2FuIG9wZW4gZGF0YWJhc2Vz
IHdpdGggYW4gZW1wdHkgdmVyc2lvbi4iLCAxKTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUyIpOwor
fSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIpOworfQorcG9z
dE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWlu
cHV0cy1zeW5jLmpzCShyZXZpc2lvbiA2MjIzMCkJKGZyb20gTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanM6NjIyMzAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS1pbnB1dHMtc3luYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACit2YXIg
ZGI7CisKK3ZhciBub3RBU3RyaW5nID0geworICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsgdGhy
b3cgImZvbyI7IH0KK307CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCk7Cisg
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGhvdXQg
YW55IGFyZ3VtZW50IHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIik7Cit9IGNhdGNoIChlcnIp
IHsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsK
KyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iKTsKKyAgICBw
b3N0TWVzc2FnZSgiRkFJTDogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBmZXdlciB0
aGFuIGZvdXIgYXJndW1lbnRzIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIik7Cit9IGNhdGNo
IChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwor
dHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMobm90QVN0cmluZywgIkRCVmVyc2lvbiIs
ICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBmaXJz
dCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKK30g
Y2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwor
fQorCit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgbm90QVN0cmlu
ZywgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIHNl
Y29uZCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsK
K30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2Up
OworfQorCit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVy
c2lvbiIsIG5vdEFTdHJpbmcsIDEwMjQpOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgdGhp
cmQgYXJndW1lbnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11c3QgYmUgYSBzdHJpbmcuIik7Cit9
IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsK
K30KKwordHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNp
b24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQsIDApOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0
aGUgZmlmdGggYXJndW1lbnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11c3QgYmUgYW4gb2JqZWN0
LCBpZiBwcmVzZW50LiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6
ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5j
KCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0
TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4iKTsKK30gY2F0Y2gg
KGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCisv
LyBSdW4gdGhpcyB0ZXN0IGNhc2Ugb25lIG1vcmUgdGltZSwgdG8gdGVzdCB0aGUgY29kZSB3aXRo
IGFuIGV4aXN0aW5nIGRhdGFiYXNlLgordHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMo
IkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOworICAgIHBvc3RN
ZXNzYWdlKCJQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLiIpOworfSBjYXRjaCAo
ZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3Ry
eSB7CisgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgZGF0YWJhc2UsIG90aGVyd2lzZSB0aGUg
Y3JlYXRpb24gY2FsbGJhY2sgd29uJ3QgYmUgaW52b2tlZC4KKyAgICBkYiA9IG9wZW5EYXRhYmFz
ZVN5bmMoIkRCTmFtZUNyZWF0aW9uQ2FsbGJhY2siICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwg
IkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24oZGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RN
ZXNzYWdlKCJQQVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24g
Y2FsbGJhY2sgc3VjY2VlZGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKK30g
Y2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOwor
fQorCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJj
ZXMvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJh
c2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBA
Cit2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJPcGVuRGF0YWJhc2VTZXRFbXB0eVZlcnNpb25U
ZXN0IiwgIiIsICJUZXN0IHRoYXQgdGhlIERCIHZlcnNpb24gaXMgc2V0IHRvIHRoZSBlbXB0eSBz
dHJpbmcuIiwgMSk7CisKK3RyeSB7CisgICAgdmFyIGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoIk9w
ZW5EYXRhYmFzZVNldEVtcHR5VmVyc2lvblRlc3QiLCAidGVzdCIsICJUZXN0IHRoYXQgdGhlIERC
IHZlcnNpb24gaXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcuIiwgMSk7CisgICAgcG9zdE1lc3Nh
Z2UoIkZBSUw6IEFuIGV4Y2VwdGlvbiBzaG91bGQndmUgYmVlbiB0aHJvd24uIik7Cit9IGNhdGNo
IChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUyIpOworfQorcG9zdE1lc3NhZ2UoImRvbmUi
KTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVu
LWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCShy
ZXZpc2lvbiA2MjQ0MykKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc0
ICswLDAgQEAKLXZhciBkYjsKLQotdmFyIG5vdEFTdHJpbmcgPSB7Ci0gICAgdG9TdHJpbmc6IGZ1
bmN0aW9uKCkgeyB0aHJvdyAiZm9vIjsgfQotfTsKLQotdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRh
YmFzZVN5bmMoKTsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogY2FsbGluZyBvcGVuRGF0YWJhc2VT
eW5jKCkgd2l0aG91dCBhbnkgYXJndW1lbnQgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsK
LX0gY2F0Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2Up
OwotfQotCi10cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVy
c2lvbiIpOwotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMo
KSB3aXRoIGZld2VyIHRoYW4gZm91ciBhcmd1bWVudHMgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlv
bi4iKTsKLX0gY2F0Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1l
c3NhZ2UpOwotfQotCi10cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYyhub3RBU3RyaW5n
LCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKLSAgICBwb3N0TWVzc2FnZSgi
RkFJTDogdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEg
c3RyaW5nLiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBl
cnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5h
bWUiLCBub3RBU3RyaW5nLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwotICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJl
IGEgc3RyaW5nLiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIg
KyBlcnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJE
Qk5hbWUiLCAiREJWZXJzaW9uIiwgbm90QVN0cmluZywgMTAyNCk7Ci0gICAgcG9zdE1lc3NhZ2Uo
IkZBSUw6IHRoZSB0aGlyZCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBh
IHN0cmluZy4iKTsKLX0gY2F0Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsg
ZXJyLm1lc3NhZ2UpOwotfQotCi10cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJO
YW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwgMCk7Ci0gICAgcG9zdE1l
c3NhZ2UoIkZBSUw6IHRoZSBmaWZ0aCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVz
dCBiZSBhbiBvYmplY3QsIGlmIHByZXNlbnQuIik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0
TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5IHsKLSAgICBkYiA9IG9w
ZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEw
MjQpOwotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVk
LiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVz
c2FnZSk7Ci19Ci0KLS8vIFJ1biB0aGlzIHRlc3QgY2FzZSBvbmUgbW9yZSB0aW1lLCB0byB0ZXN0
IHRoZSBjb2RlIHdpdGggYW4gZXhpc3RpbmcgZGF0YWJhc2UuCi10cnkgewotICAgIGRiID0gb3Bl
bkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAy
NCk7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQu
Iik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNz
YWdlKTsKLX0KLQotdHJ5IHsKLSAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhYmFzZSwg
b3RoZXJ3aXNlIHRoZSBjcmVhdGlvbiBjYWxsYmFjayB3b24ndCBiZSBpbnZva2VkLgotICAgIGRi
ID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lQ3JlYXRpb25DYWxsYmFjayIgKyAobmV3IERhdGUo
KSkuZ2V0VGltZSgpLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihkYikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdp
dGggYSBjcmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBl
cnIubWVzc2FnZSk7Ci19Ci0KLXBvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFu
c2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0
aW9uLWluLXByb2dyZXNzLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlv
bi1pbi1wcm9ncmVzcy1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACitmdW5j
dGlvbiBvcGVuVGVzdERhdGFiYXNlKCkKK3sKKyAgICByZXR1cm4gb3BlbkRhdGFiYXNlU3luYygi
T3BlbkRhdGFiYXNlV2hpbGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NUZXN0IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVz
dCB0byBtYWtlIHN1cmUgdGhhdCBjYWxsaW5nIG9wZW5EYXRhYmFzZSgpIHdoaWxlIGEgdHJhbnNh
Y3Rpb24gaXMgaW4gcHJvZ3Jlc3Mgb24gYSBkaWZmZXJlbnQgaGFuZGxlIHRvIHRoZSBzYW1lIGRh
dGFiYXNlIGRvZXMgbm90IHJlc3VsdCBpbiBhIGRlYWRsb2NrLiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMjEwMDAwMCk7IC8vIDJNQiArIGVwc2lsb24KK30KKworLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIwNworLy8gSW4gb3JkZXIgdG8g
dHJpZ2dlciB0aGlzIGJ1ZywgdGhlIHRyYW5zYWN0aW9uIG11c3QgYWNxdWlyZSBhbiBleGNsdXNp
dmUKKy8vIGxvY2sgb24gdGhlIERCIGZpbGUgYmVmb3JlIHRyeWluZyB0byBvYnRhaW4gYSBzZWNv
bmQgaGFuZGxlIHRvIHRoZSBzYW1lIERCLgorLy8gVGhlIG9ubHkgd2F5IHRvIGZvcmNlIFNRTGl0
ZSB0byBvYnRhaW4gYW4gZXhjbHVzaXZlIGxvY2sgaXMgdG8gY2hhbmdlIG1vcmUKKy8vIHRoYW4g
Y2FjaGVfc2l6ZSAqIHBhZ2Vfc2l6ZSBieXRlcyBpbiB0aGUgZGF0YWJhc2UuIFRoZSBkZWZhdWx0
IHZhbHVlIGZvcgorLy8gY2FjaGVfc2l6ZSBpcyAyMDAwIHBhZ2VzLCBhbmQgdGhlIGRlZmF1bHQg
cGFnZV9zaXplIGlzIDEwMjQgYnl0ZXMuIFNvIHRoZQorLy8gc2l6ZSBvZiB0aGUgYmxvYiBtdXN0
IGJlIGF0IGxlYXN0IDJNQi4KK3ZhciBkYjEgPSBvcGVuVGVzdERhdGFiYXNlKCk7CitkYjEudHJh
bnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUg
SUYgTk9UIEVYSVNUUyBUZXN0IChGb28gQkxPQik7Iik7CisgICAgdHguZXhlY3V0ZVNxbCgiSU5T
RVJUIElOVE8gVGVzdCBWQUxVRVMgKFpFUk9CTE9CKDIwOTcxNTIpKTsiKTsKKyAgICB2YXIgZGIy
ID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBzZWNvbmQgaGFu
ZGxlIG9wZW5lZCBzdWNjZXNzZnVsbHkuIik7CisKKyAgICAvLyBDbGVhbiB1cCB0aGUgREIgdG8g
YWxsb3cgZm9yIHJlcGVhdGVkIHJ1bnMgb2YgdGhpcyB0ZXN0CisgICAgLy8gd2l0aG91dCBuZWVk
aW5nIHRvIGluY3JlYXNlIHRoZSBkZWZhdWx0IGFsbG93ZWQgcXVvdGEgKDVNQikKKyAgICB0eC5l
eGVjdXRlU3FsKCJERUxFVEUgRlJPTSBUZXN0OyIpOworfSk7CisKK3Bvc3RNZXNzYWdlKCJkb25l
Iik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvc3Fs
LWRhdGEtdHlwZXMtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvc3FsLWRhdGEtdHlwZXMtc3luYy5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9zcWwtZGF0YS10
eXBlcy1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACit2YXIgdGVzdFZhbHVl
cyA9IHsKKyAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCJXZWQgRmViIDA2IDIwMDggMTI6MTY6NTIg
R01UKzAyMDAgKEVFVCkiKS52YWx1ZU9mKCksCisgICAgaWQ6IDEwMDEsCisgICAgcmVhbDogMTAx
LjQ0NCwKKyAgICB0ZXh0OiAiV2ViS2l0IGRiIFRFWFQiLAorICAgIGJsb2I6ICJzdXBlcmNhbGlm
cmFnaWxpc3RpYyIKK307CisKK2Z1bmN0aW9uIHNob3VsZEJlU2FtZVR5cGVBbmRWYWx1ZShwcm9w
TmFtZSwgdGVzdFZhbHVlLCByZXN1bHQpIHsKKyAgICBpZiAodGVzdFZhbHVlID09IHJlc3VsdCAm
JiB0eXBlb2YgdGVzdFZhbHVlID09IHR5cGVvZiByZXN1bHQpCisgICAgICAgIHBvc3RNZXNzYWdl
KCJQQVNTOiBwcm9wZXJ0eSAnIiArIHByb3BOYW1lICsgIicgT0ssIHR5cGUgd2FzICIgKyB0eXBl
b2YgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBwcm9wZXJ0
eSAnIiArIHByb3BOYW1lICsgIicgZmFpbGVkOyAiICsKKyAgICAgICAgICAgICAgICAgICAgImV4
cGVjdGVkICIgKyB0eXBlb2YgdGVzdFZhbHVlICsgIjonIiArIHRlc3RWYWx1ZSArICInLCAiICsK
KyAgICAgICAgICAgICAgICAgICAgImdvdCAiICsgdHlwZW9mIHJlc3VsdCArICI6JyIgKyByZXN1
bHQgKyInIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REQlZhbHVlcyhyZXN1bHQpIHsKKyAgICB2YXIg
aSA9ICJ0aW1lc3RhbXAiOyBzaG91bGRCZVNhbWVUeXBlQW5kVmFsdWUoaSwgdGVzdFZhbHVlc1tp
XSwgcmVzdWx0W2ldKTsKKyAgICBpID0gImlkIjsgc2hvdWxkQmVTYW1lVHlwZUFuZFZhbHVlKGks
IHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7CisgICAgaSA9ICJyZWFsIjsgc2hvdWxkQmVTYW1l
VHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7CisgICAgaSA9ICJ0ZXh0
Ijsgc2hvdWxkQmVTYW1lVHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7
CisgICAgaSA9ICJibG9iIjsgc2hvdWxkQmVTYW1lVHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNb
aV0sIHJlc3VsdFtpXSk7Cit9CisKK3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIlNRTERhdGFU
eXBlc1Rlc3QiLCAiMS4wIiwgIkRhdGFiYXNlIGZvciBTUUwgZGF0YSB0eXBlIHRlc3QiLCAxKTsK
K2RiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRF
IFRBQkxFIElGIE5PVCBFWElTVFMgRGF0YVR5cGVUZXN0VGFibGUgKGlkIElOVEVHRVIgVU5JUVVF
LCByZWFsIFJFQUwsIHRpbWVzdGFtcCBJTlRFR0VSLCB0ZXh0IFRFWFQsIGJsb2IgQkxPQikiKTsK
KyAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBEYXRhVHlwZVRlc3RUYWJsZSAoaWQsIHJl
YWwsIHRpbWVzdGFtcCwgdGV4dCwgYmxvYikgVkFMVUVTICg/LD8sPyw/LD8pIiwKKyAgICAgICAg
ICAgICAgICAgIFt0ZXN0VmFsdWVzLmlkLCB0ZXN0VmFsdWVzLnJlYWwsIHRlc3RWYWx1ZXMudGlt
ZXN0YW1wLCB0ZXN0VmFsdWVzLnRleHQsIHRlc3RWYWx1ZXMuYmxvYl0pOworICAgIHZhciByZXN1
bHQgPSB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgKiBGUk9NIERhdGFUeXBlVGVzdFRhYmxlIik7Cisg
ICAgdGVzdERCVmFsdWVzKHJlc3VsdC5yb3dzLml0ZW0oMCkpOworICAgIHR4LmV4ZWN1dGVTcWwo
IkRST1AgVEFCTEUgRGF0YVR5cGVUZXN0VGFibGUiKTsKK30pOworCitwb3N0TWVzc2FnZSgiZG9u
ZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3Nx
bC1leGNlcHRpb24tY29kZXMtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmpzCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2Vz
L3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NiBA
QAordmFyIGRiTmFtZSA9ICJTUUxFeGNlcHRpb25Db2Rlc1Rlc3QiICsgKG5ldyBEYXRlKCkpLmdl
dFRpbWUoKTsKKworZnVuY3Rpb24gdGVzdFRyYW5zYWN0aW9uKGRiLCBleGVjdXRlU3RhdGVtZW50
c0NhbGxiYWNrLCBleHBlY3RlZEVycm9yQ29kZU5hbWUpCit7CisgICAgZGIudHJhbnNhY3Rpb24o
ZnVuY3Rpb24odHgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGV4ZWN1dGVTdGF0ZW1l
bnRzQ2FsbGJhY2sodHgpOworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGFuIGV4Y2Vw
dGlvbiAoIiArIGV4cGVjdGVkRXJyb3JDb2RlTmFtZSArICIpIHNob3VsZCd2ZSBiZWVuIHRocm93
bi4iKTsKKyAgICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgICAgICBpZiAoZXJyLmNvZGUg
PT0gZXJyW2V4cGVjdGVkRXJyb3JDb2RlTmFtZV0pCisgICAgICAgICAgICAgICAgcG9zdE1lc3Nh
Z2UoIlBBU1M6IGV4cGVjdGVkIGFuZCBnb3QgZXJyb3IgY29kZSAiICsgZXhwZWN0ZWRFcnJvckNv
ZGVOYW1lKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgi
RkFJTDogZXhwZWN0ZWQgZXJyb3IgY29kZSAiICsgZXhwZWN0ZWRFcnJvckNvZGVOYW1lICsgIiAo
IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyW2V4cGVjdGVkRXJyb3JDb2RlTmFt
ZV0gKyAiKSwgZ290ICIgKyBlcnIuY29kZSk7CisgICAgICAgIH0KKyAgICAgIH0pOworfQorCitm
dW5jdGlvbiB0ZXN0VHJhbnNhY3Rpb25UaHJvd3NFeGNlcHRpb24oZGIpCit7CisgICAgdGVzdFRy
YW5zYWN0aW9uKGRiLCBmdW5jdGlvbih0eCkgeyB0aHJvdyAiRXhjZXB0aW9uIHRocm93biBpbiB0
cmFuc2FjdGlvbiBjYWxsYmFjay4iOyB9LCAiVU5LTk9XTl9FUlIiKTsKK30KKworZnVuY3Rpb24g
dGVzdEludmFsaWRTdGF0ZW1lbnQoZGIpCit7CisgICAgdGVzdFRyYW5zYWN0aW9uKGRiLCBmdW5j
dGlvbih0eCkgeyB0eC5leGVjdXRlU3FsKCJCQUQgU1RBVEVNRU5UIik7IH0sICJTWU5UQVhfRVJS
Iik7Cit9CisKK2Z1bmN0aW9uIHRlc3RJbmNvcnJlY3ROdW1iZXJPZkJpbmRQYXJhbWV0ZXJzKGRi
KQoreworICAgIHRlc3RUcmFuc2FjdGlvbihkYiwKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24odHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBU
QUJMRSBJRiBOT1QgRVhJU1RTIEJhZEJpbmROdW1iZXJUZXN0IChGb28gSU5ULCBCYXIgSU5UKSIp
OworICAgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8gQmFk
QmluZE51bWJlclRlc3QgVkFMVUVTICg/LCA/KSIsIFsxXSk7CisgICAgICAgICAgICAgICAgICAg
IH0sICJTWU5UQVhfRVJSIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RCaW5kUGFyYW1ldGVyT2ZXcm9u
Z1R5cGUoZGIpCit7CisgICAgdmFyIGJhZFN0cmluZyA9IHsgfTsKKyAgICBiYWRTdHJpbmcudG9T
dHJpbmcgPSBmdW5jdGlvbigpIHsgdGhyb3cgIkNhbm5vdCBjYWxsIHRvU3RyaW5nKCkgb24gdGhp
cyBvYmplY3QuIiB9OworCisgICAgdGVzdFRyYW5zYWN0aW9uKGRiLCBmdW5jdGlvbih0eCkgewor
ICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBCYWRCaW5k
VHlwZVRlc3QgKEZvbyBURVhUKSIpOworICAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5U
TyBCYWRCaW5kVHlwZVRlc3QgVkFMVUVTICg/KSIsIFtiYWRTdHJpbmddKTsKKyAgICB9LCAiVU5L
Tk9XTl9FUlIiKTsKK30KKworZnVuY3Rpb24gdGVzdFF1b3RhRXhjZWVkZWQoZGIpCit7CisgICAg
Ly8gU29tZXRpbWVzLCBTUUxpdGUgYXV0b21hdGljYWxseSByb2xscyBiYWNrIGEgdHJhbnNhY3Rp
b24gaWYgZXhlY3V0aW5nIGEgc3RhdGVtZW50IGZhaWxzLgorICAgIC8vIFRoaXMgc2VlbXMgdG8g
YmUgb25lIG9mIHRob3NlIGNhc2VzLgorICAgIHRyeSB7CisgICAgICAgIHRlc3RUcmFuc2FjdGlv
bihkYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElT
VFMgUXVvdGFUZXN0IChGb28gQkxPQikiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBRdW90YVRlc3QgVkFMVUVTIChaRVJPQkxPQigxMCAq
IDEwMjQgKiAxMDI0KSkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sICJRVU9UQV9FUlIi
KTsKKyAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IFRyYW5zYWN0aW9uIHNob3VsZCd2ZSBiZWVu
IHJvbGxlZCBiYWNrIGJ5IFNRTGl0ZS4iKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAg
aWYgKGVyci5jb2RlID09IGVyclsiREFUQUJBU0VfRVJSIl0pCisgICAgICAgICAgICBwb3N0TWVz
c2FnZSgiUEFTUzogVHJhbnNhY3Rpb24gd2FzIHJvbGxlZCBiYWNrIGJ5IFNRTGl0ZSBhcyBleHBl
Y3RlZC4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IEFu
IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdhcyB0aHJvd246ICIgKyBlcnIpOworICAgIH0KK30KKwor
ZnVuY3Rpb24gdGVzdFZlcnNpb25NaXNtYXRjaChkYikKK3sKKyAgICB2YXIgZGIyID0gb3BlbkRh
dGFiYXNlU3luYyhkYk5hbWUsICIxLjAiLCAiVGVzdHMgdGhlIGVycm9yIGNvZGVzLiIsIDEpOwor
ICAgIGRiMi5jaGFuZ2VWZXJzaW9uKCIxLjAiLCAiMi4wIiwgZnVuY3Rpb24odHgpIHsgfSk7Cisg
ICAgdGVzdFRyYW5zYWN0aW9uKGRiLAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiVEhJUyBTVEFURU1FTlQg
U0hPVUxEIE5FVkVSIEdFVCBFWEVDVVRFRCIpOworICAgICAgICAgICAgICAgICAgICB9LCAiVkVS
U0lPTl9FUlIiKTsKK30KKwordmFyIGRiID0gb3BlbkRhdGFiYXNlU3luYyhkYk5hbWUsICIxLjAi
LCAiVGVzdHMgdGhlIGV4Y2VwdGlvbiBjb2Rlcy4iLCAxKTsKK3Rlc3RUcmFuc2FjdGlvblRocm93
c0V4Y2VwdGlvbihkYik7Cit0ZXN0SW52YWxpZFN0YXRlbWVudChkYik7Cit0ZXN0SW5jb3JyZWN0
TnVtYmVyT2ZCaW5kUGFyYW1ldGVycyhkYik7Cit0ZXN0QmluZFBhcmFtZXRlck9mV3JvbmdUeXBl
KGRiKTsKK3Rlc3RRdW90YUV4Y2VlZGVkKGRiKTsKK3Rlc3RWZXJzaW9uTWlzbWF0Y2goZGIpOwor
Citwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvcmVzb3VyY2VzL3Rlc3QtYXV0aG9yaXplci1zeW5jLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90ZXN0LWF1dGhvcml6ZXIt
c3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy90ZXN0LWF1dGhvcml6ZXItc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMjYgQEAKK2Z1bmN0aW9uIGNsZWFudXAoZGIpCit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVu
Y3Rpb24odHgpIHsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgVEFCTEUgSUYgRVhJ
U1RTIFRlc3QiKTsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgSU5ERVggSUYgRVhJ
U1RTIFRlc3RJbmRleCIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBWSUVXIElG
IEVYSVNUUyBUZXN0VmlldyIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBUUklH
R0VSIElGIEVYSVNUUyBUZXN0VHJpZ2dlciIpOworICAgIH0pOworfQorCitmdW5jdGlvbiBleGVj
dXRlU3RhdGVtZW50KHR4LCBzdGF0ZW1lbnQsIG9wZXJhdGlvbikKK3sKKyAgICB0cnkgeworICAg
ICAgICB0eC5leGVjdXRlU3FsKHN0YXRlbWVudCk7CisgICAgICAgIHBvc3RNZXNzYWdlKG9wZXJh
dGlvbiArICIgc3RhdGVtZW50IHN1Y2NlZWRlZC4iKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAg
ICAgICAgcG9zdE1lc3NhZ2Uob3BlcmF0aW9uICsgIiBzdGF0ZW1lbnQgZmFpbGVkOiAiICsgZXJy
ICsgIiAoIiArIGVyci5jb2RlICsgIikiKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRh
YmxlQ2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBUQUJM
RSBUZXN0IChGb28gaW50KSIsICJTUUxJVEVfQ1JFQVRFX1RBQkxFIik7Cit9CisKK2Z1bmN0aW9u
IGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiQ1JFQVRFIElOREVYIFRlc3RJbmRleCBPTiBUZXN0IChGb28pIiwgIlNRTElURV9DUkVBVEVf
SU5ERVgiKTsKKworICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBmb2xsb3dpbmcgcXVlcnkgc2hvdWxk
IHRyaWdnZXIgYSBTUUxJVEVfQ1JFQVRFX1RFTVBfSU5ERVggb3BlcmF0aW9uCisgICAgLy8gKGFj
Y29yZGluZyB0byBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvdGVtcGZpbGVzLmh0bWwpLCBpdCBkb2Vz
bid0LCBhbmQgSSdtIG5vdCBhd2FyZQorICAgIC8vIG9mIGFueSBvdGhlciB3YXkgdG8gdHJpZ2dl
ciB0aGlzIG9wZXJhdGlvbi4gU28gd2UnbGwgc2tpcCBpdCBmb3Igbm93LgorICAgIC8vZXhlY3V0
ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCAqIEZST00gVGVzdCBXSEVSRSBGb28gSU4gKDEsIDIsIDMp
IiwgIlNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCIpOworCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0
eCwgIkNSRUFURSBURU1QIFRBQkxFIFRlc3RUZW1wVGFibGUgKEZvbyBpbnQpIiwgIlNRTElURV9D
UkVBVEVfVEVNUF9UQUJMRSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVN
UCBUUklHR0VSIFRlc3RUZW1wVHJpZ2dlciBJTlNFUlQgT04gVGVzdCBCRUdJTiBTRUxFQ1QgQ09V
TlQoKikgRlJPTSBUZXN0OyBFTkQiLCAiU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIiKTsKKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRFTVAgVklFVyBUZXN0VGVtcFZpZXcgQVMg
U0VMRUNUIENPVU5UKCopIEZST00gVGVzdCIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyIpOwor
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVFJJR0dFUiBUZXN0VHJpZ2dlciBJTlNF
UlQgT04gVGVzdCBCRUdJTiBTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyBFTkQiLCAiU1FMSVRF
X0NSRUFURV9UUklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBWSUVX
IFRlc3RWaWV3IEFTIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3QiLCAiU1FMSVRFX0NSRUFURV9W
SUVXIik7CisKKyAgICAvLyBXZSBzaG91bGQgdHJ5IHRvIGNyZWF0ZSBhIHZpcnR1YWwgdGFibGUg
dXNpbmcgZnRzMywgd2hlbiBXZWJLaXQncyBzcWxpdGUgbGlicmFyeSBzdXBwb3J0cyBpdC4KKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFZJUlRVQUwgVEFCTEUgVGVzdFZpcnR1YWxU
YWJsZSBVU0lORyBVbnN1cHBvcnRlZE1vZHVsZSIsICJTUUxJVEVfQ1JFQVRFX1ZUQUJMRSIpOwor
fQorCitmdW5jdGlvbiBvdGhlclN0YXRlbWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRl
U3RhdGVtZW50KHR4LCAiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdCIsICJTUUxJVEVfUkVBRCIp
OworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0Iiwg
IlNRTElURV9TRUxFQ1QiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiREVMRVRFIEZST00g
VGVzdCIsICJTUUxJVEVfREVMRVRFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIklOU0VS
VCBJTlRPIFRlc3QgVkFMVUVTICgxKSIsICJTUUxJVEVfSU5TRVJUIik7CisgICAgZXhlY3V0ZVN0
YXRlbWVudCh0eCwgIlVQREFURSBUZXN0IFNFVCBGb28gPSAyIFdIRVJFIEZvbyA9IDEiLCAiU1FM
SVRFX1VQREFURSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJQUkFHTUEgY2FjaGVfc2l6
ZSIsICJTUUxJVEVfUFJBR01BIik7CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQUxURVIg
VEFCTEUgVGVzdCBSRU5BTUUgVE8gVGVzdFRhYmxlIiwgIlNRTElURV9BTFRFUl9UQUJMRSIpOwor
ICAgIC8vIFJlbmFtZSB0aGUgdGFibGUgYmFjayB0byBpdHMgb3JpZ2luYWwgbmFtZQorICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsICJBTFRFUiBUQUJMRSBUZXN0VGFibGUgUkVOQU1FIFRvIFRlc3Qi
LCAiU1FMSVRFX0FMVEVSX1RBQkxFIik7CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQkVH
SU4gVFJBTlNBQ1RJT04iLCAiU1FMSVRFX1RSQU5TQUNUSU9OIik7CisgICAgZXhlY3V0ZVN0YXRl
bWVudCh0eCwgIkFUVEFDSCBtYWluIEFTIFRlc3RNYWluIiwgIlNRTElURV9BVFRBQ0giKTsKKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiREVUQUNIIFRlc3RNYWluIiwgIlNRTElURV9ERVRBQ0gi
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiUkVJTkRFWCIsICJTUUxJVEVfUkVJTkRFWCIp
OworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJBTkFMWVpFIiwgIlNRTElURV9BTkFMWVpFIik7
CisKKyAgICAvLyBTUUxJVEVfRlVOQ1RJT046IGFsbG93ZWQgaW4gd3JpdGUgbW9kZQorICAgIC8v
IFRoZXJlIGlzIG5vIFNRTC9KYXZhc2NyaXB0IEFQSSB0byBhZGQgdXNlci1kZWZpbmVkIGZ1bmN0
aW9ucyB0byBTUUxpdGUsCisgICAgLy8gc28gd2UgY2Fubm90IHRlc3QgdGhpcyBvcGVyYXRpb24K
K30KKworZnVuY3Rpb24gZHJvcFN0YXRlbWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRl
U3RhdGVtZW50KHR4LCAiRFJPUCBJTkRFWCBUZXN0SW5kZXgiLCAiU1FMSVRFX0RST1BfSU5ERVgi
KTsKKworICAgIC8vIFNRTElURV9EUk9QX1RFTVBfSU5ERVg6IGFsbG93ZWQgaW4gd3JpdGUgbW9k
ZQorICAgIC8vIE5vdCBzdXJlIGhvdyB0byB0ZXN0IHRoaXM6IHRlbXAgaW5kZXhlcyBhcmUgYXV0
b21hdGljYWxseSBkcm9wcGVkIHdoZW4KKyAgICAvLyB0aGUgZGF0YWJhc2UgaXMgY2xvc2VkLCBi
dXQgSFRNTDUgZG9lc24ndCBzcGVjaWZ5IGEgY2xvc2VEYXRhYmFzZSgpIGNhbGwuCisKKyAgICBl
eGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUQUJMRSBUZXN0VGVtcFRhYmxlIiwgIlNRTElURV9E
Uk9QX1RFTVBfVEFCTEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUUklHR0VS
IFRlc3RUZW1wVHJpZ2dlciIsICJTUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIiKTsKKyAgICBleGVj
dXRlU3RhdGVtZW50KHR4LCAiRFJPUCBWSUVXIFRlc3RUZW1wVmlldyIsICJTUUxJVEVfRFJPUF9U
RU1QX1ZJRVciKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUUklHR0VSIFRlc3RU
cmlnZ2VyIiwgIlNRTElURV9EUk9QX1RSSUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiRFJPUCBWSUVXIFRlc3RWaWV3IiwgIlNRTElURV9EUk9QX1ZJRVciKTsKKworICAgIC8vIFNR
TElURV9EUk9QX1ZUQUJMRTogYWxsb3dlZCBpbiB3cml0ZSBtb2RlCisgICAgLy8gTm90IHN1cmUg
aG93IHRvIHRlc3QgdGhpczogd2UgY2Fubm90IGNyZWF0ZSBhIHZpcnR1YWwgdGFibGUgYmVjYXVz
ZSB3ZSBkbyBub3QKKyAgICAvLyBoYXZlIFNRTC9KYXZhc2NyaXB0IEFQSXMgdG8gcmVnaXN0ZXIg
YSBtb2R1bGUgdGhhdCBpbXBsZW1lbnRzIGEgdmlydHVhbCB0YWJsZS4KKyAgICAvLyBUaGVyZWZv
cmUsIHRyeWluZyB0byBkcm9wIGEgdmlydHVhbCB0YWJsZSB3aWxsIGFsd2F5cyBmYWlsIChubyBz
dWNoIHRhYmxlKQorICAgIC8vIGJlZm9yZSBldmVuIGdldHRpbmcgdG8gdGhlIGF1dGhvcml6ZXIu
CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUQUJMRSBUZXN0IiwgIlNRTElURV9E
Uk9QX1RBQkxFIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkV3JpdGVNb2RlKGRiKQoreworICAg
IGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJCZWdp
bm5pbmcgd3JpdGUgdHJhbnNhY3Rpb246Iik7CisgICAgICAgIGNyZWF0ZVRhYmxlQ2FsbGJhY2so
dHgpOworICAgICAgICBjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpOworICAgICAgICBvdGhl
clN0YXRlbWVudHNDYWxsYmFjayh0eCk7CisgICAgICAgIGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2so
dHgpOworICAgICAgICBwb3N0TWVzc2FnZSgiV3JpdGUgdHJhbnNhY3Rpb24gc3VjY2VlZGVkLlxu
Iik7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkT25seU1vZGUoZGIpCit7CisgICAg
cG9zdE1lc3NhZ2UoIkJlZ2lubmluZyByZWFkIHRyYW5zYWN0aW9uczoiKTsKKyAgICAvLyBUZXN0
IHRoZSAnQ1JFQVRFIFRBQkxFJyBvcGVyYXRpb247IGl0IHNob3VsZCBiZSBkaXNhbGxvd2VkCisg
ICAgZGIucmVhZFRyYW5zYWN0aW9uKGNyZWF0ZVRhYmxlQ2FsbGJhY2spOworCisgICAgLy8gSW4g
b3JkZXIgdG8gdGVzdCBhbGwgb3RoZXIgJ0NSRUFURScgb3BlcmF0aW9ucywgd2UgbXVzdCBjcmVh
dGUgdGhlIHRhYmxlIGZpcnN0CisgICAgZGIudHJhbnNhY3Rpb24oY3JlYXRlVGFibGVDYWxsYmFj
ayk7CisgICAgZGIucmVhZFRyYW5zYWN0aW9uKGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayk7CisK
KyAgICAvLyBJbiBvcmRlciB0byB0ZXN0IHRoZSAnRFJPUCcgYW5kICdvdGhlcicgb3BlcmF0aW9u
cywgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgdGhlIHJlc3BlY3RpdmUgZW50aXRpZXMKKyAgICBk
Yi50cmFuc2FjdGlvbihjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2spOworICAgIGRiLnJlYWRUcmFu
c2FjdGlvbihvdGhlclN0YXRlbWVudHNDYWxsYmFjayk7CisgICAgZGIucmVhZFRyYW5zYWN0aW9u
KGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2spOworICAgIHBvc3RNZXNzYWdlKCJSZWFkIHRyYW5zYWN0
aW9ucyBzdWNjZWVkZWQuIik7Cit9CisKK3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIlRlc3RB
dXRob3JpemVyVGVzdCIsICIxLjAiLCAiVGVzdCB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci4iLCAx
KTsKK2NsZWFudXAoZGIpOwordGVzdFJlYWRXcml0ZU1vZGUoZGIpOwordGVzdFJlYWRPbmx5TW9k
ZShkYik7CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJj
ZXMvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90cmFuc2FjdGlvbi1pbi10
cmFuc2FjdGlvbi1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACit2YXIgZGIg
PSBvcGVuRGF0YWJhc2VTeW5jKCJUcmFuc2FjdGlvbkluVHJhbnNhY3Rpb25UZXN0IiwgIjEuMCIs
ICJUZXN0IHRoYXQgdHJ5aW5nIHRvIHJ1biBhIG5lc3RlZCB0cmFuc2FjdGlvbiBmYWlscy4iLCAx
KTsKK2RiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgdHJ5IHsKKyAgICAgICAgZGIu
dHJhbnNhY3Rpb24oZnVuY3Rpb24obmVzdGVkVHgpIHsgfSk7CisgICAgICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiBUcnlpbmcgdG8gcnVuIGEgbmVzdGVkIHRyYW5zYWN0aW9uIHNob3VsZCB0aHJvdyBh
biBleGNlcHRpb24uIik7CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIHBvc3RNZXNzYWdl
KCJQQVNTOiBFeGNlcHRpb24gdGhyb3duIHdoaWxlIHRyeWluZyB0byBydW4gYSBuZXN0ZWQgdHJh
bnNhY3Rpb24uIik7CisgICAgfQorfSk7CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7Cg==
</data>
<flag name="review"
          id="47946"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="47947"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60812</attachid>
            <date>2010-07-07 17:34:59 -0700</date>
            <delta_ts>2010-07-07 18:03:18 -0700</delta_ts>
            <desc>patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>157399</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTkgQEAKKzIwMTAtMDctMDMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbigpIGFuZCBEYXRhYmFzZVN5
bmM6OmNoYW5nZVZlcnNpb24oKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNjA3CisKKyAgICAgICAgVGVzdHM6IGZhc3Qvd29ya2Vycy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1v
bmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMv
c3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5o
dG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNy
ZWF0aW9uLWNhbGxiYWNrLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0
eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRt
bAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rl
cy1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0
aG9yaXplci1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Ry
YW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWJzdHJhY3REYXRhYmFzZTo6bWF4aW11bVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCk6CisgICAgICAgICogc3Rv
cmFnZS9BYnN0cmFjdERhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3Jh
cHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9y
bVByZWZsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVy
Zm9ybVBvc3RmbGlnaHQpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKToKKyAgICAgICAgKiBz
dG9yYWdlL0RhdGFiYXNlLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVlRhYmxlKToKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0
U3RlcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5nZVZlcnNpb25QcmVmbGlnaHRT
dGVwOjpwZXJmb3JtU3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uUHJlZmxp
Z2h0U3RlcDo6Q2hhbmdlVmVyc2lvblByZWZsaWdodFN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpwZXJmb3JtU3RlcCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXA6OkNoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0
U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVN5bmM6OnJ1blRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBzdG9yYWdl
L0RhdGFiYXNlU3luYy5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNl
KToKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxS
ZXN1bHRTZXQuY3BwOgorICAgICAgICAqIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Lmg6CisgICAgICAg
ICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50
U3luYy5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVtZW50U3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnRTeW5jOjpleGVjdXRlKToKKyAgICAgICAgKiBz
dG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6cnVuQ3Vy
cmVudFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clF1b3RhSW5jcmVhc2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bjo6cG9zdGZsaWdodEFuZENvbW1pdCk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bi5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOgorICAgICAg
ICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKToK
KyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50Lmg6CisgICAgICAgICogc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2FjdGlvbkNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRyYW5zYWN0aW9uU3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6On5TUUxUcmFuc2FjdGlvblN5bmMp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU1FMKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFRyYW5zYWN0aW9uU3luYzo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uU3luYzo6cm9sbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRyYW5zYWN0aW9u
U3luY09wdGlvbmFsU3RlcDo6flNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3RlcCk6CisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oOgorICAgICAgICAqIHN0
b3JhZ2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0
YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhj
ZWVkUXVvdGEpOgorCiAyMDEwLTA3LTA3ICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6
IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gNjI3MzQpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xNDIxLDYgKzE0MjEsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgc3Rv
cmFnZS9TUUxSZXN1bHRTZXQuY3BwCiAgICAgc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNw
cAogICAgIHN0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAorICAgIHN0b3JhZ2UvU1FMU3RhdGVtZW50
U3luYy5jcHAKICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAogICAgIHN0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25DbGllbnQuY3BwCiAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvR05VbWFrZWZp
bGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI1MTYsNiArMjUxNiw4IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2suaCBcCisJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3Bw
IFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
aCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBcCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
cmV2aXNpb24gNjI3MzQpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtMzQ5Miw2ICszNDkyLDggQEAKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFN0YXRlbWVudC5o
JywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmgnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oJywKKyAgICAgICAgICAg
ICdzdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL1NR
TFN0YXRlbWVudFN5bmMuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5j
cHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaCcsCiAgICAgICAgICAg
ICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgnLApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2Mjcz
NCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTIzNzksNiArMjM3
OSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9EQVRBQkFTRT0xKSB7CiAgICAgICAgIHN0
b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93
TGlzdC5jcHAgXAogICAgICAgICBzdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAgXAorICAgICAgICBz
dG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbi5jcHAgXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCBcCiAg
ICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgXApAQCAtMjQ1Miw2
ICsyNDUzLDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RPTV9TVE9SQUdFPTEpIAogICAg
ICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldC5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxSZXN1bHRT
ZXRSb3dMaXN0LmggXAogICAgICAgICBzdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKKyAgICAgICAg
c3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmggXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0
aW9uLmggXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmggXAogICAgICAg
ICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk4MTMsNiArNDk4
MTMsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3RvcmFnZVxTUUxTdGF0ZW1lbnRTeW5jLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMU3RhdGVtZW50U3lu
Yy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxTUUxUcmFuc2FjdGlvbi5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDYy
NzM0KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTQyOTEsNiArNDI5MSw4IEBACiAJCUI1MjNDRjBCMTE4MjY3NTQwMEVCQjI5
QyAvKiBEYXRhYmFzZVN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEI1MjNDRjA0MTE4MjY3NTQwMEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuaCAqLzsg
fTsKIAkJQjUyNUE5NjUxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTI1QTk2MzExQ0EyMzQw
MDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24uaCAqLzsgfTsKIAkJQjUyNUE5NjYxMUNBMjM0MDAw
M0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjVBOTY0MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2Vw
dGlvbi5jcHAgKi87IH07CisJCUI1NTBCNTI1MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1l
bnRTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI1NTBCNTIxMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmNwcCAqLzsgfTsK
KwkJQjU1MEI1MjYxMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NTBCNTIyMTFEQzY4QTgw
MDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggKi87IH07CiAJCUI1NUQ1QUE0MTE5MTMxRkMw
MEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVENUFBMjExOTEzMUZDMDBCQ0MzMTUg
LyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oICovOyB9OwogCQlCNTVENUFBNTExOTEz
MUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVENUFBMzExOTEzMUZDMDBC
Q0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHAgKi87IH07CiAJCUI1NUQ1
QUE4MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVENUFBNjExOTEzMjUwMDBC
Q0MzMTUgLyogSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwICovOyB9OwpAQCAtOTg2MCw2ICs5ODYy
LDggQEAKIAkJQjUyM0NGMDQxMTgyNjc1NDAwRUJCMjlDIC8qIERhdGFiYXNlU3luYy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZVN5bmMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMRXhjZXB0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1MjVBOTY0MTFDQTIzNDAwMDNBMjNBOCAv
KiBKU1NRTEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1NRTEV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI1NTBC
NTIxMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFN0YXRlbWVudFN5bmMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCNTUwQjUyMjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVt
ZW50U3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxTdGF0ZW1lbnRT
eW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUEyMTE5MTMxRkMwMEJD
QzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUI1NUQ1QUE2MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFiYXNl
U3luY0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTMwNSw2ICsx
MTMwOSw4IEBACiAJCQkJQjU5REQ2OEUxMTkwMjk4RTAwN0U5Njg0IC8qIFNRTFN0YXRlbWVudENh
bGxiYWNrLmlkbCAqLywKIAkJCQkxQTdDQ0IxNjBDRDk0NjlBMDBCN0I2NEUgLyogU1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjay5oICovLAogCQkJCUI1OURENjhGMTE5MDI5OEUwMDdFOTY4NCAvKiBT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbCAqLywKKwkJCQlCNTUwQjUyMTExREM2OEE4MDA5
MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgKi8sCisJCQkJQjU1MEI1MjIxMURDNjhBODAw
OTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCAqLywKIAkJCQkxQUJGRTc1MjBDRDk2OEQwMDBG
RTQ4MzQgLyogU1FMVHJhbnNhY3Rpb24uY3BwICovLAogCQkJCTFBN0NDQjIyMENEOTQ2RkQwMEI3
QjY0RSAvKiBTUUxUcmFuc2FjdGlvbi5oICovLAogCQkJCTFBN0NDQjIzMENEOTQ2RkQwMEI3QjY0
RSAvKiBTUUxUcmFuc2FjdGlvbi5pZGwgKi8sCkBAIC0xOTI2Niw2ICsxOTI3Miw3IEBACiAJCQkJ
NTE1QjAzOTkwQ0QxNjQyQTAwQjdFQTlDIC8qIFNRTFN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUE3Q0NCMTkwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0YXRlbWVudENhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTdDQ0IxQTBDRDk0NjlBMDBCN0I2NEUgLyogU1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU1MEI1MjYxMURDNjhBODAw
OTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBN0NDQjI0
MENEOTQ2RkQwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE3Q0NCMUIwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUI1MUJGNkYxMTAyQzlFNTkwMDAyQzE1QSAvKiBTUUxUcmFuc2FjdGlv
bkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTcwOSw2ICsyMTcxNiw3IEBACiAJCQkJNTE5
NjExNzMwQ0FDNTY1NzAwMTBBODBDIC8qIFNRTFJlc3VsdFNldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQUZFMTE3RDBDQkZGQjM2MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTVCMDM5QTBDRDE2NDJBMDBCN0VBOUMgLyogU1FMU3RhdGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1NTBCNTI1MTFEQzY4QTgwMDkyMzg4NSAvKiBT
UUxTdGF0ZW1lbnRTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQkZFNzUzMENEOTY4RDAw
MEZFNDgzNCAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTFCRjZG
MDEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjVDMTEyM0IxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3RE
YXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJh
c2UuY3BwCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFi
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2lmIEVOQUJMRShEQVRB
QkFTRSkKICNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKICNpbmNsdWRlICJEYXRhYmFz
ZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKQEAgLTQ2Miw2ICs0NjEsMTkgQEAgdm9pZCBBYnN0cmFjdERhdGFiYXNl
OjpyZXNldEF1dGhvcml6ZXIoKQogICAgICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQo
KTsKIH0KIAordW5zaWduZWQgbG9uZyBsb25nIEFic3RyYWN0RGF0YWJhc2U6Om1heGltdW1TaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZ2V0TWF4
U2l6ZUZvckRhdGFiYXNlKHRoaXMpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmluY3Jl
bWVudGFsVmFjdXVtSWZOZWVkZWQoKQoreworICAgIGludDY0X3QgZnJlZVNwYWNlU2l6ZSA9IG1f
c3FsaXRlRGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOworICAgIGludDY0X3QgdG90YWxTaXplID0g
bV9zcWxpdGVEYXRhYmFzZS50b3RhbFNpemUoKTsKKyAgICBpZiAodG90YWxTaXplIDw9IDEwICog
ZnJlZVNwYWNlU2l6ZSkKKyAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5ydW5JbmNyZW1lbnRhbFZh
Y3V1bUNvbW1hbmQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCShyZXZp
c2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTQ1
LDggKzQ2LDYgQEAgY2xhc3MgRGF0YWJhc2VBdXRob3JpemVyOwogY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCi10eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOwotCiBjbGFzcyBBYnN0cmFjdERhdGFiYXNlIDogcHVibGljIFRocmVhZFNhZmVTaGFy
ZWQ8QWJzdHJhY3REYXRhYmFzZT4gewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzQXZhaWxh
YmxlKCk7CkBAIC02NSw2ICs2NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZGlz
cGxheU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7CisgICAgU1FM
aXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9zcWxpdGVEYXRhYmFzZTsg
fQorCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplKCkgY29uc3Q7CisgICAgdm9p
ZCBpbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7CiAKICAgICAvLyBGSVhNRTogbW92ZSBhbGwg
dmVyc2lvbi1yZWxhdGVkIG1ldGhvZHMgdG8gYSBEYXRhYmFzZVZlcnNpb25UcmFja2VyIGNsYXNz
CiAgICAgYm9vbCB2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3Q7CkBAIC0xMDMsOCArMTA2
LDYgQEAgcHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOwogICAg
IFN0cmluZyBtX2ZpbGVuYW1lOwogCi0gICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFz
ZTsKLQogI2lmbmRlZiBOREVCVUcKICAgICBTdHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSArICI6
OiIgKyBtX25hbWU7IH0KICNlbmRpZgpAQCAtMTE2LDYgKzExNyw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX29wZW5lZDsKICAgICBib29sIG1fbmV3OwogCisgICAgU1FMaXRlRGF0YWJhc2UgbV9z
cWxpdGVEYXRhYmFzZTsKKwogICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IG1fZGF0YWJh
c2VBdXRob3JpemVyOwogfTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25X
cmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldy
YXBwZXIuY3BwCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9DaGFuZ2VWZXJz
aW9uV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQCBib29sIENo
YW5nZVZlcnNpb25XcmFwcGVyOjpwZXJmb3JtUHJlZmxpCiAKICAgICBpZiAoIXRyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLT5nZXRWZXJzaW9uRnJvbURhdGFiYXNlKGFjdHVhbFZlcnNpb24pKSB7CiAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJldHJpZXZlIGFjdHVhbCBjdXJyZW50IHZlcnNp
b24gZnJvbSBkYXRhYmFzZSIpOwotICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJyb3I6OmNyZWF0
ZSgwLCAidW5hYmxlIHRvIHZlcmlmeSBjdXJyZW50IHZlcnNpb24gb2YgZGF0YWJhc2UiKTsKKyAg
ICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJS
LCAidW5hYmxlIHRvIHZlcmlmeSBjdXJyZW50IHZlcnNpb24gb2YgZGF0YWJhc2UiKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmIChhY3R1YWxWZXJzaW9uICE9IG1fb2xk
VmVyc2lvbikgewogICAgICAgICBMT0dfRVJST1IoIk9sZCB2ZXJzaW9uIGRvZXNuJ3QgbWF0Y2gg
YWN0dWFsIHZlcnNpb24iKTsKLSAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
MiwgImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBhcmd1
bWVudCBkbyBub3QgbWF0Y2giKTsKKyAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVh
dGUoU1FMRXJyb3I6OlZFUlNJT05fRVJSLCAiY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFz
ZSBhbmQgYG9sZFZlcnNpb25gIGFyZ3VtZW50IGRvIG5vdCBtYXRjaCIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgQ2hhbmdlVmVyc2lvbldy
YXBwZXI6OnBlcmZvcm1Qb3N0ZmwKIAogICAgIGlmICghdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkt
PnNldFZlcnNpb25JbkRhdGFiYXNlKG1fbmV3VmVyc2lvbikpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gc2V0IG5ldyB2ZXJzaW9uIGluIGRhdGFiYXNlIik7Ci0gICAgICAgIG1fc3Fs
RXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKDAsICJ1bmFibGUgdG8gc2V0IG5ldyB2ZXJzaW9uIGlu
IGRhdGFiYXNlIik7CisgICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVy
cm9yOjpVTktOT1dOX0VSUiwgInVuYWJsZSB0byBzZXQgbmV3IHZlcnNpb24gaW4gZGF0YWJhc2Ui
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3Bw
CShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgog
I2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTMz
Niw3ICszMzUsNyBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlCiB7
CiAgICAgZGlzYWJsZUF1dGhvcml6ZXIoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9zcWxpdGVEYXRhYmFzZSwgIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVS
RSB0eXBlPSd0YWJsZSc7Iik7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChzcWxpdGVE
YXRhYmFzZSgpLCAiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3Rh
YmxlJzsiKTsKICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewog
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZXRyaWV2ZSBsaXN0IG9mIHRhYmxlcyBmb3Ig
ZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAg
ICAgZW5hYmxlQXV0aG9yaXplcigpOwpAQCAtMzk3LDE0ICszOTYsNiBAQCBTZWN1cml0eU9yaWdp
biogRGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRGF0
YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKQotewotICAgIGludDY0X3QgZnJlZVNw
YWNlU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOwotICAgIGludDY0X3Qg
dG90YWxTaXplID0gbV9zcWxpdGVEYXRhYmFzZS50b3RhbFNpemUoKTsKLSAgICBpZiAodG90YWxT
aXplIDw9IDEwICogZnJlZVNwYWNlU2l6ZSkKLSAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5ydW5J
bmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9u
IDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICNpbmNsdWRlICJBYnN0cmFj
dERhdGFiYXNlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKIApAQCAtNjYsNyArNjcs
NiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVOYW1lcygpOwogCiAgICAgdmly
dHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLSAgICBTUUxpdGVE
YXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSB7IHJldHVybiBtX3NxbGl0ZURhdGFiYXNlOyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAgICAgYm9vbCBkZWxl
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CkBAIC04Myw4ICs4Myw2IEBAIHB1Ymxp
YzoKICAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQoKSBjb25zdDsK
ICAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkg
Y29uc3Q7CiAKLSAgICB2b2lkIGluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKLQogcHJpdmF0
ZToKICAgICBjbGFzcyBEYXRhYmFzZU9wZW5UYXNrOwogICAgIGNsYXNzIERhdGFiYXNlQ2xvc2VU
YXNrOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHJldmlzaW9u
IDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5MCw3ICsyOTAsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVh
dGVWVGFibGUoY29uCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIC8vIEFsbG93
IG9ubHkgdGhlIEZUUzMgZXh0ZW5zaW9uCi0gICAgaWYgKG1vZHVsZU5hbWUgIT0gImZ0czMiKQor
ICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobW9kdWxlTmFtZSwgImZ0czMiKSkKICAgICAgICAg
cmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0g
dHJ1ZTsKQEAgLTMwMyw3ICszMDMsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVlRh
YmxlKGNvbnN0CiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIC8vIEFsbG93IG9u
bHkgdGhlIEZUUzMgZXh0ZW5zaW9uCi0gICAgaWYgKG1vZHVsZU5hbWUgIT0gImZ0czMiKQorICAg
IGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobW9kdWxlTmFtZSwgImZ0czMiKSkKICAgICAgICAgcmV0
dXJuIFNRTEF1dGhEZW55OwogCiAgICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVO
YW1lKHRhYmxlTmFtZSk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmgJKHJldmlz
aW9uIDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
U3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJ
KHJldmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIsMjggKzIsMzAgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgogICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCkBAIC0zMiw4ICszNCw5IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogI2luY2x1
ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
IlNRTEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luYy5oIgogI2luY2x1
ZGUgIlNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC04NywxNCArOTAs
NzUgQEAgRGF0YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5jKCkKICAgICB9CiB9CiAKLXZvaWQgRGF0
YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJikKK2Ns
YXNzIENoYW5nZVZlcnNpb25QcmVmbGlnaHRTdGVwIDogcHVibGljIFNRTFRyYW5zYWN0aW9uU3lu
Yzo6U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0U3RlcD4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
aGFuZ2VWZXJzaW9uUHJlZmxpZ2h0U3RlcChleHBlY3RlZFZlcnNpb24pKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIEV4Y2VwdGlvbkNvZGUgcGVyZm9ybVN0ZXAoU1FMVHJhbnNhY3Rpb25TeW5jKiB0
cmFuc2FjdGlvbikKKyAgICB7CisgICAgICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOworICAgICAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5nZXRWZXJzaW9uRnJvbURhdGFiYXNlKGFj
dHVhbFZlcnNpb24pKQorICAgICAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9F
UlI7CisKKyAgICAgICAgaWYgKGFjdHVhbFZlcnNpb24gIT0gbV9leHBlY3RlZFZlcnNpb24pCisg
ICAgICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpWRVJTSU9OX0VSUjsKKworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ2hhbmdlVmVyc2lvblBy
ZWZsaWdodFN0ZXAoY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24pCisgICAgICAgIDogbV9l
eHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uKSB7IH0KKyAgICBTdHJpbmcgbV9leHBlY3Rl
ZFZlcnNpb247Cit9OworCitjbGFzcyBDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXAgOiBwdWJs
aWMgU1FMVHJhbnNhY3Rpb25TeW5jOjpTUUxUcmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXAgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3Rl
cD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbikKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwKG5ld1ZlcnNpb24pKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIEV4Y2VwdGlvbkNvZGUgcGVyZm9ybVN0ZXAoU1FMVHJhbnNh
Y3Rpb25TeW5jKiB0cmFuc2FjdGlvbikKKyAgICB7CisgICAgICAgIGlmICghdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCktPnNldFZlcnNpb25JbkRhdGFiYXNlKG1fbmV3VmVyc2lvbikpCisgICAgICAg
ICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKworICAgICAgICB0cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS0+c2V0RXhwZWN0ZWRWZXJzaW9uKG1fbmV3VmVyc2lvbik7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDaGFuZ2VWZXJz
aW9uUG9zdGZsaWdodFN0ZXAoY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uKQorICAgICAgICA6IG1f
bmV3VmVyc2lvbihuZXdWZXJzaW9uKSB7IH0KKyAgICBTdHJpbmcgbV9uZXdWZXJzaW9uOworfTsK
Kwordm9pZCBEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJz
aW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2s+IGNoYW5nZVZlcnNpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkp
OworICAgIHJ1blRyYW5zYWN0aW9uKFNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRlKHRoaXMsIGNo
YW5nZVZlcnNpb25DYWxsYmFjaywgZmFsc2UsIENoYW5nZVZlcnNpb25QcmVmbGlnaHRTdGVwOjpj
cmVhdGUob2xkVmVyc2lvbiksIENoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3RlcDo6Y3JlYXRlKG5l
d1ZlcnNpb24pKSwgZWMpOwogfQogCi12b2lkIERhdGFiYXNlU3luYzo6dHJhbnNhY3Rpb24oUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wsIEV4Y2VwdGlvbkNvZGUm
KQordm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJl
YWQoKSk7CisgICAgcnVuVHJhbnNhY3Rpb24oU1FMVHJhbnNhY3Rpb25TeW5jOjpjcmVhdGUodGhp
cywgY2FsbGJhY2ssIHJlYWRPbmx5KSwgZWMpOworfQorCit2b2lkIERhdGFiYXNlU3luYzo6cnVu
VHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IHRyYW5zYWN0aW9uUHJQ
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoc3FsaXRlRGF0YWJhc2UoKS50cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoKSkgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0Vf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9u
U3luYz4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblByUDsKKyAgICBpZiAoKGVjID0gdHJhbnNh
Y3Rpb24tPmJlZ2luKCkpIHx8IChlYyA9IHRyYW5zYWN0aW9uLT5leGVjdXRlKCkpIHx8IChlYyA9
IHRyYW5zYWN0aW9uLT5jb21taXQoKSkpCisgICAgICAgIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygp
OwogfQogCiB2b2lkIERhdGFiYXNlU3luYzo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkKSW5kZXg6
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VTeW5jLmgJKHJldmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDI4ICsyLDMwIEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2lmbmRlZiBEYXRhYmFzZVN5bmNfaApAQCAtMzEsNiArMzMsNyBAQAogCiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2lmbmRlZiBOREVCVUcKQEAgLTQwLDYgKzQzLDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKK2NsYXNzIFNRTFRyYW5z
YWN0aW9uU3luYzsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwogY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwpAQCAtNjAsNiArNjQs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIERhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwKICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplKTsKKyAgICB2b2lkIHJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25TeW5jPiwgRXhjZXB0aW9uQ29kZSYpOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwJKHJldmlzaW9uIDYyNzM0
KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTIsMjggKzIsMzAgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiBtb2R1bGUgc3RvcmFnZSB7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gNjI3MzQpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIy
MSw2IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvckRhdGFiYXMKIAogdW5zaWdu
ZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0
IEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewotICAgIEFTU0VSVChjdXJyZW50VGhyZWFk
KCkgPT0gZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQo
KS0+Z2V0VGhyZWFkSUQoKSk7CiAgICAgLy8gVGhlIG1heGltdW0gc2l6ZSBmb3IgYSBkYXRhYmFz
ZSBpcyB0aGUgZnVsbCBxdW90YSBmb3IgaXRzIG9yaWdpbiwgbWludXMgdGhlIGN1cnJlbnQgdXNh
Z2Ugd2l0aGluIHRoZSBvcmlnaW4sCiAgICAgLy8gcGx1cyB0aGUgY3VycmVudCB1c2FnZSBvZiB0
aGUgZ2l2ZW4gZGF0YWJhc2UKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFz
ZUd1YXJkKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5oCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUv
c3RvcmFnZS9TUUxFcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcAkocmV2
aXNpb24gNjI3MzQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsOSArMzEsNiBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIlNRTFZhbHVlLmgiCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIHVuc2lnbmVkIGNvbnN0IE1heEVycm9yQ29kZSA9IDI7Cklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5oCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TUUxSZXN1bHRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDEyIEBACiAK
ICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiU1FMUmVzdWx0U2V0Um93TGlzdC5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KIGNsYXNzIFNRTFJlc3VsdFNldCA6IHB1
YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFJlc3VsdFNldD4gewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IFNRTFJlc3VsdFNldCk7IH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFj
ay5oCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxs
YmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCiAKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDYyNzM0KQorKysg
V2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5
bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNw
cAkocmV2aXNpb24gNjI0MjQpCShmcm9tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3Bw
OjYyNDI0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNR
TFN0YXRlbWVudC5oIgorCisjaWYgRU5BQkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMRXJyb3IuaCIKKyNpbmNs
dWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2lu
Y2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU1FM
VmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dD4gU1FMU3RhdGVtZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZl
Y3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFj
az4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjaywgYm9vbCByZWFkT25seSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFN0
YXRlbWVudChzdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHJl
YWRPbmx5KSk7Cit9CisKK1NRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KGNvbnN0IFN0cmluZyYg
c3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8
U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpCisgICAgOiBtX3N0YXRl
bWVudChzdGF0ZW1lbnQuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fYXJndW1lbnRzKGFy
Z3VtZW50cykKKyAgICAsIG1fc3RhdGVtZW50Q2FsbGJhY2soY2FsbGJhY2spCisgICAgLCBtX3N0
YXRlbWVudEVycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKKyAgICAsIG1fcmVhZE9ubHkocmVh
ZE9ubHkpCit7Cit9CisKK2Jvb2wgU1FMU3RhdGVtZW50OjpleGVjdXRlKERhdGFiYXNlKiBkYikK
K3sKKyAgICBBU1NFUlQoIW1fcmVzdWx0U2V0KTsKKworICAgIC8vIElmIHdlJ3JlIHJlLXJ1bm5p
bmcgdGhpcyBzdGF0ZW1lbnQgYWZ0ZXIgYSBxdW90YSB2aW9sYXRpb24sIHdlIG5lZWQgdG8gY2xl
YXIgdGhhdCBlcnJvciBub3cKKyAgICBjbGVhckZhaWx1cmVEdWVUb1F1b3RhKCk7CisKKyAgICAv
LyBUaGlzIHRyYW5zYWN0aW9uIG1pZ2h0IGhhdmUgYmVlbiBtYXJrZWQgYmFkIHdoaWxlIGl0IHdh
cyBiZWluZyBzZXQgdXAgb24gdGhlIG1haW4gdGhyZWFkLAorICAgIC8vIHNvIGlmIHRoZXJlIGlz
IHN0aWxsIGFuIGVycm9yLCByZXR1cm4gZmFsc2UuCisgICAgaWYgKG1fZXJyb3IpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3JlYWRPbmx5KQorICAgICAgICBkYi0+c2V0QXV0
aG9yaXplclJlYWRPbmx5KCk7CisKKyAgICBTUUxpdGVEYXRhYmFzZSogZGF0YWJhc2UgPSAmZGIt
PnNxbGl0ZURhdGFiYXNlKCk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCpkYXRh
YmFzZSwgbV9zdGF0ZW1lbnQpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgp
OworCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0coU3RvcmFn
ZUFQSSwgIlVuYWJsZSB0byB2ZXJpZnkgY29ycmVjdG5lc3Mgb2Ygc3RhdGVtZW50ICVzIC0gZXJy
b3IgJWkgKCVzKSIsIG1fc3RhdGVtZW50LmFzY2lpKCkuZGF0YSgpLCByZXN1bHQsIGRhdGFiYXNl
LT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNR
TEVycm9yOjpTWU5UQVhfRVJSLCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRklYTUU6ICBJZiB0aGUgc3RhdGVtZW50IHVz
ZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRlZCBieSBzcWxpdGUsIHRoZSBiaW5kIHBhcmFtZXRl
ciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYgZnJvbSB0aGUgbnVtYmVyIG9mIHF1ZXN0aW9uIG1h
cmtzLgorICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXkgbWlnaHQgYmUgdHJ5aW5nIHRv
IGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxpY2lvdXMKKyAgICBpZiAoc3RhdGVtZW50LmJpbmRQ
YXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRzLnNpemUoKSkgeworICAgICAgICBMT0coU3Rv
cmFnZUFQSSwgIkJpbmQgcGFyYW1ldGVyIGNvdW50IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1
ZXN0aW9uIG1hcmtzIik7CisgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVy
cm9yOjpTWU5UQVhfRVJSLCAibnVtYmVyIG9mICc/J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2Vz
IG5vdCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1l
bnRzW2ldKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRGdWxsKSB7CisgICAgICAg
ICAgICBzZXRGYWlsdXJlRHVlVG9RdW90YSgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAg
ICAgICAgTE9HKFN0b3JhZ2VBUEksICJGYWlsZWQgdG8gYmluZCB2YWx1ZSBpbmRleCAlaSB0byBz
dGF0ZW1lbnQgZm9yIHF1ZXJ5ICclcyciLCBpICsgMSwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRB
VEFCQVNFX0VSUiwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IHJl
c3VsdFNldCA9IFNRTFJlc3VsdFNldDo6Y3JlYXRlKCk7CisKKyAgICAvLyBTdGVwIHNvIHdlIGNh
biBmZXRjaCB0aGUgY29sdW1uIG5hbWVzLgorICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7
CisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgaW50IGNvbHVtbkNv
dW50ID0gc3RhdGVtZW50LmNvbHVtbkNvdW50KCk7CisgICAgICAgIFNRTFJlc3VsdFNldFJvd0xp
c3QqIHJvd3MgPSByZXN1bHRTZXQtPnJvd3MoKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvbHVtbkNvdW50OyBpKyspCisgICAgICAgICAgICByb3dzLT5hZGRDb2x1bW4oc3RhdGVt
ZW50LmdldENvbHVtbk5hbWUoaSkpOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICByb3dzLT5h
ZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZhbHVlKGkpKTsKKworICAgICAgICAgICAgcmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgfSB3aGlsZSAocmVzdWx0ID09IFNRTFJl
c3VsdFJvdyk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7CisgICAg
ICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJS
LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgeworICAg
ICAgICAvLyBEaWRuJ3QgZmluZCBhbnl0aGluZywgb3Igd2FzIGFuIGluc2VydAorICAgICAgICBp
ZiAoZGItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKSkKKyAgICAgICAgICAgIHJlc3VsdFNldC0+c2V0
SW5zZXJ0SWQoZGF0YWJhc2UtPmxhc3RJbnNlcnRSb3dJRCgpKTsKKyAgICB9IGVsc2UgaWYgKHJl
c3VsdCA9PSBTUUxSZXN1bHRGdWxsKSB7CisgICAgICAgIC8vIFJldHVybiB0aGUgUXVvdGEgZXJy
b3IgLSB0aGUgZGVsZWdhdGUgd2lsbCBiZSBhc2tlZCBmb3IgbW9yZSBzcGFjZSBhbmQgdGhpcyBz
dGF0ZW1lbnQgbWlnaHQgYmUgcmUtcnVuCisgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1b3RhKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2Vycm9yID0g
U1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBkYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRklYTUU6
IElmIHRoZSBzcGVjIGFsbG93cyB0cmlnZ2VycywgYW5kIHdlIHdhbnQgdG8gYmUgImFjY3VyYXRl
IiBpbiBhIGRpZmZlcmVudCB3YXksIHdlJ2QgdXNlCisgICAgLy8gc3FsaXRlM190b3RhbF9jaGFu
Z2VzKCkgaGVyZSBpbnN0ZWFkIG9mIHNxbGl0ZTNfY2hhbmdlZCwgYmVjYXVzZSB0aGF0IGluY2x1
ZGVzIHJvd3MgbW9kaWZpZWQgZnJvbSB3aXRoaW4gYSB0cmlnZ2VyCisgICAgLy8gRm9yIG5vdywg
dGhpcyBzZWVtcyBzdWZmaWNpZW50CisgICAgcmVzdWx0U2V0LT5zZXRSb3dzQWZmZWN0ZWQoZGF0
YWJhc2UtPmxhc3RDaGFuZ2VzKCkpOworCisgICAgbV9yZXN1bHRTZXQgPSByZXN1bHRTZXQ7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1FMU3RhdGVtZW50OjpzZXREYXRhYmFzZURlbGV0
ZWRFcnJvcigpCit7CisgICAgQVNTRVJUKCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7CisgICAg
bV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidW5hYmxl
IHRvIGV4ZWN1dGUgc3RhdGVtZW50LCBiZWNhdXNlIHRoZSB1c2VyIGRlbGV0ZWQgdGhlIGRhdGFi
YXNlIik7Cit9CisKK3ZvaWQgU1FMU3RhdGVtZW50OjpzZXRWZXJzaW9uTWlzbWF0Y2hlZEVycm9y
KCkKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1fcmVzdWx0U2V0KTsKKyAgICBtX2Vycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VkVSU0lPTl9FUlIsICJjdXJyZW50IHZlcnNp
b24gb2YgdGhlIGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lvbmAgYXJndW1lbnQgZG8gbm90IG1hdGNo
Iik7Cit9CisKK2Jvb2wgU1FMU3RhdGVtZW50OjpwZXJmb3JtQ2FsbGJhY2soU1FMVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uKQoreworICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7CisKKyAgICBib29s
IGNhbGxiYWNrRXJyb3IgPSBmYWxzZTsKKworICAgIC8vIENhbGwgdGhlIGFwcHJvcHJpYXRlIHN0
YXRlbWVudCBjYWxsYmFjayBhbmQgdHJhY2sgaWYgaXQgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsCisg
ICAgLy8gYmVjYXVzZSB0aGVuIHdlIG5lZWQgdG8ganVtcCB0byB0aGUgdHJhbnNhY3Rpb24gZXJy
b3IgY2FsbGJhY2suCisgICAgaWYgKG1fZXJyb3IpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGVt
ZW50RXJyb3JDYWxsYmFjayk7CisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSBtX3N0YXRlbWVudEVy
cm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uLCBtX2Vycm9yLmdldCgpKTsKKyAgICB9IGVs
c2UgaWYgKG1fc3RhdGVtZW50Q2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSAhbV9z
dGF0ZW1lbnRDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rpb24sIG1fcmVzdWx0U2V0LmdldCgpKTsK
KworICAgIC8vIE5vdyByZWxlYXNlIG91ciBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBj
eWNsZXMuCisgICAgbV9zdGF0ZW1lbnRDYWxsYmFjayA9IDA7CisgICAgbV9zdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrID0gMDsKKworICAgIHJldHVybiBjYWxsYmFja0Vycm9yOworfQorCit2b2lkIFNR
TFN0YXRlbWVudDo6c2V0RmFpbHVyZUR1ZVRvUXVvdGEoKQoreworICAgIEFTU0VSVCghbV9lcnJv
ciAmJiAhbV9yZXN1bHRTZXQpOworICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVy
cm9yOjpRVU9UQV9FUlIsICJ0aGVyZSB3YXMgbm90IGVub3VnaCByZW1haW5pbmcgc3RvcmFnZSBz
cGFjZSwgb3IgdGhlIHN0b3JhZ2UgcXVvdGEgd2FzIHJlYWNoZWQgYW5kIHRoZSB1c2VyIGRlY2xp
bmVkIHRvIGFsbG93IG1vcmUgc3BhY2UiKTsKK30KKwordm9pZCBTUUxTdGF0ZW1lbnQ6OmNsZWFy
RmFpbHVyZUR1ZVRvUXVvdGEoKQoreworICAgIGlmIChsYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9R
dW90YSgpKQorICAgICAgICBtX2Vycm9yID0gMDsKK30KKworYm9vbCBTUUxTdGF0ZW1lbnQ6Omxh
c3RFeGVjdXRpb25GYWlsZWREdWVUb1F1b3RhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lcnJv
ciAmJiBtX2Vycm9yLT5jb2RlKCkgPT0gU1FMRXJyb3I6OlFVT1RBX0VSUjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAkocmV2aXNpb24gNjI0MjQpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw0OSArMjYsMzMgQEAK
ICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50U3lu
Yy5oIgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU1FMRXJyb3IuaCIKKyNpbmNsdWRlICJEYXRh
YmFzZVN5bmMuaCIKKyNpbmNsdWRlICJTUUxFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJTUUxSZXN1
bHRTZXQuaCIKKyNpbmNsdWRlICJTUUxWYWx1ZS5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNl
LmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50
Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCi0jaW5j
bHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTUUxWYWx1ZS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1lbnQ6OmNyZWF0
ZShjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1l
bnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0
cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBib29sIHJlYWRPbmx5
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMU3RhdGVtZW50KHN0YXRlbWVudCwgYXJn
dW1lbnRzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgcmVhZE9ubHkpKTsKLX0KLQotU1FMU3Rh
dGVtZW50OjpTUUxTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3Rv
cjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4g
Y2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaywgYm9vbCByZWFkT25seSkKLSAgICA6IG1fc3RhdGVtZW50KHN0YXRlbWVudC5jcm9zc1Ro
cmVhZFN0cmluZygpKQorU1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVtZW50U3luYyhjb25zdCBT
dHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBib29s
IHJlYWRPbmx5KQorICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQogICAgICwgbV9hcmd1bWVu
dHMoYXJndW1lbnRzKQotICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFjayhjYWxsYmFjaykKLSAgICAs
IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQogICAgICwgbV9yZWFkT25s
eShyZWFkT25seSkKIHsKKyAgICBBU1NFUlQoIW1fc3RhdGVtZW50LmlzRW1wdHkoKSk7CiB9CiAK
LWJvb2wgU1FMU3RhdGVtZW50OjpleGVjdXRlKERhdGFiYXNlKiBkYikKK1Bhc3NSZWZQdHI8U1FM
UmVzdWx0U2V0PiBTUUxTdGF0ZW1lbnRTeW5jOjpleGVjdXRlKERhdGFiYXNlU3luYyogZGIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVCghbV9yZXN1bHRTZXQpOwotCi0gICAgLy8g
SWYgd2UncmUgcmUtcnVubmluZyB0aGlzIHN0YXRlbWVudCBhZnRlciBhIHF1b3RhIHZpb2xhdGlv
biwgd2UgbmVlZCB0byBjbGVhciB0aGF0IGVycm9yIG5vdwotICAgIGNsZWFyRmFpbHVyZUR1ZVRv
UXVvdGEoKTsKLQotICAgIC8vIFRoaXMgdHJhbnNhY3Rpb24gbWlnaHQgaGF2ZSBiZWVuIG1hcmtl
ZCBiYWQgd2hpbGUgaXQgd2FzIGJlaW5nIHNldCB1cCBvbiB0aGUgbWFpbiB0aHJlYWQsCi0gICAg
Ly8gc28gaWYgdGhlcmUgaXMgc3RpbGwgYW4gZXJyb3IsIHJldHVybiBmYWxzZS4KLSAgICBpZiAo
bV9lcnJvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaWYgKG1fcmVhZE9ubHkpCiAg
ICAgICAgIGRiLT5zZXRBdXRob3JpemVyUmVhZE9ubHkoKTsKIApAQCAtNzUsMzIgKzYwLDI2IEBA
IGJvb2wgU1FMU3RhdGVtZW50OjpleGVjdXRlKERhdGFiYXNlKiBkYikKIAogICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQoKmRhdGFiYXNlLCBtX3N0YXRlbWVudCk7CiAgICAgaW50IHJlc3Vs
dCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0KICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9r
KSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBjb3JyZWN0bmVz
cyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5k
YXRhKCksIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgbV9lcnJv
ciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsIGRhdGFiYXNlLT5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWMgPSBTUUxFeGNl
cHRpb246OlNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIC8vIEZJ
WE1FOiAgSWYgdGhlIHN0YXRlbWVudCB1c2VzIHRoZSA/IyMjIHN5bnRheCBzdXBwb3J0ZWQgYnkg
c3FsaXRlLCB0aGUgYmluZCBwYXJhbWV0ZXIgY291bnQgaXMgdmVyeSBsaWtlbHkgb2ZmIGZyb20g
dGhlIG51bWJlciBvZiBxdWVzdGlvbiBtYXJrcy4KLSAgICAvLyBJZiB0aGlzIGlzIHRoZSBjYXNl
LCB0aGV5IG1pZ2h0IGJlIHRyeWluZyB0byBkbyBzb21ldGhpbmcgZmlzaHkgb3IgbWFsaWNpb3Vz
CiAgICAgaWYgKHN0YXRlbWVudC5iaW5kUGFyYW1ldGVyQ291bnQoKSAhPSBtX2FyZ3VtZW50cy5z
aXplKCkpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJCaW5kIHBhcmFtZXRlciBjb3VudCBk
b2Vzbid0IG1hdGNoIG51bWJlciBvZiBxdWVzdGlvbiBtYXJrcyIpOwotICAgICAgICBtX2Vycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6U1lOVEFYX0VSUiwgIm51bWJlciBvZiAnPydz
IGluIHN0YXRlbWVudCBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggYXJndW1lbnQgY291bnQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6U1lOVEFYX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKICAgICAgICAgaWYgKHJlc3VsdCA9
PSBTUUxSZXN1bHRGdWxsKSB7Ci0gICAgICAgICAgICBzZXRGYWlsdXJlRHVlVG9RdW90YSgpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246
OlFVT1RBX0VSUjsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEks
ICJGYWlsZWQgdG8gYmluZCB2YWx1ZSBpbmRleCAlaSB0byBzdGF0ZW1lbnQgZm9yIHF1ZXJ5ICcl
cyciLCBpICsgMSwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgbV9l
cnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgZGF0YWJhc2Ut
Pmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMTIzLDc5ICsxMDIsMjQgQEAgYm9vbCBTUUxTdGF0ZW1l
bnQ6OmV4ZWN1dGUoRGF0YWJhc2UqIGRiKQogICAgICAgICB9IHdoaWxlIChyZXN1bHQgPT0gU1FM
UmVzdWx0Um93KTsKIAogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAg
ICAgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9F
UlIsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOworICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1
bHREb25lKSB7Ci0gICAgICAgIC8vIERpZG4ndCBmaW5kIGFueXRoaW5nLCBvciB3YXMgYW4gaW5z
ZXJ0CisgICAgICAgIC8vIERpZG4ndCBmaW5kIGFueXRoaW5nLCBvciB3YXMgYW4gaW5zZXJ0Lgog
ICAgICAgICBpZiAoZGItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKSkKICAgICAgICAgICAgIHJlc3Vs
dFNldC0+c2V0SW5zZXJ0SWQoZGF0YWJhc2UtPmxhc3RJbnNlcnRSb3dJRCgpKTsKICAgICB9IGVs
c2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRGdWxsKSB7Ci0gICAgICAgIC8vIFJldHVybiB0aGUg
UXVvdGEgZXJyb3IgLSB0aGUgZGVsZWdhdGUgd2lsbCBiZSBhc2tlZCBmb3IgbW9yZSBzcGFjZSBh
bmQgdGhpcyBzdGF0ZW1lbnQgbWlnaHQgYmUgcmUtcnVuCi0gICAgICAgIHNldEZhaWx1cmVEdWVU
b1F1b3RhKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gUXVvdGEgZXJyb3Is
IHRoZSBkZWxlZ2F0ZSB3aWxsIGJlIGFza2VkIGZvciBtb3JlIHNwYWNlIGFuZCB0aGlzIHN0YXRl
bWVudCBtaWdodCBiZSByZS1ydW4uCisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpRVU9UQV9F
UlI7CisgICAgICAgIHJldHVybiAwOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZXJyb3IgPSBT
UUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIGRhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRp
b246OkRBVEFCQVNFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLy8gRklY
TUU6IElmIHRoZSBzcGVjIGFsbG93cyB0cmlnZ2VycywgYW5kIHdlIHdhbnQgdG8gYmUgImFjY3Vy
YXRlIiBpbiBhIGRpZmZlcmVudCB3YXksIHdlJ2QgdXNlCi0gICAgLy8gc3FsaXRlM190b3RhbF9j
aGFuZ2VzKCkgaGVyZSBpbnN0ZWFkIG9mIHNxbGl0ZTNfY2hhbmdlZCwgYmVjYXVzZSB0aGF0IGlu
Y2x1ZGVzIHJvd3MgbW9kaWZpZWQgZnJvbSB3aXRoaW4gYSB0cmlnZ2VyCi0gICAgLy8gRm9yIG5v
dywgdGhpcyBzZWVtcyBzdWZmaWNpZW50CiAgICAgcmVzdWx0U2V0LT5zZXRSb3dzQWZmZWN0ZWQo
ZGF0YWJhc2UtPmxhc3RDaGFuZ2VzKCkpOwotCi0gICAgbV9yZXN1bHRTZXQgPSByZXN1bHRTZXQ7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1FMU3RhdGVtZW50OjpzZXREYXRhYmFzZURl
bGV0ZWRFcnJvcigpCi17Ci0gICAgQVNTRVJUKCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7Ci0g
ICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidW5h
YmxlIHRvIGV4ZWN1dGUgc3RhdGVtZW50LCBiZWNhdXNlIHRoZSB1c2VyIGRlbGV0ZWQgdGhlIGRh
dGFiYXNlIik7Ci19Ci0KLXZvaWQgU1FMU3RhdGVtZW50OjpzZXRWZXJzaW9uTWlzbWF0Y2hlZEVy
cm9yKCkKLXsKLSAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1fcmVzdWx0U2V0KTsKLSAgICBtX2Vy
cm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VkVSU0lPTl9FUlIsICJjdXJyZW50IHZl
cnNpb24gb2YgdGhlIGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lvbmAgYXJndW1lbnQgZG8gbm90IG1h
dGNoIik7Ci19Ci0KLWJvb2wgU1FMU3RhdGVtZW50OjpwZXJmb3JtQ2FsbGJhY2soU1FMVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7Ci0KLSAgICBi
b29sIGNhbGxiYWNrRXJyb3IgPSBmYWxzZTsKLQotICAgIC8vIENhbGwgdGhlIGFwcHJvcHJpYXRl
IHN0YXRlbWVudCBjYWxsYmFjayBhbmQgdHJhY2sgaWYgaXQgcmVzdWx0ZWQgaW4gYW4gZXJyb3Is
Ci0gICAgLy8gYmVjYXVzZSB0aGVuIHdlIG5lZWQgdG8ganVtcCB0byB0aGUgdHJhbnNhY3Rpb24g
ZXJyb3IgY2FsbGJhY2suCi0gICAgaWYgKG1fZXJyb3IpIHsKLSAgICAgICAgQVNTRVJUKG1fc3Rh
dGVtZW50RXJyb3JDYWxsYmFjayk7Ci0gICAgICAgIGNhbGxiYWNrRXJyb3IgPSBtX3N0YXRlbWVu
dEVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uLCBtX2Vycm9yLmdldCgpKTsKLSAgICB9
IGVsc2UgaWYgKG1fc3RhdGVtZW50Q2FsbGJhY2spCi0gICAgICAgIGNhbGxiYWNrRXJyb3IgPSAh
bV9zdGF0ZW1lbnRDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rpb24sIG1fcmVzdWx0U2V0LmdldCgp
KTsKLQotICAgIC8vIE5vdyByZWxlYXNlIG91ciBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5j
ZSBjeWNsZXMuCi0gICAgbV9zdGF0ZW1lbnRDYWxsYmFjayA9IDA7Ci0gICAgbV9zdGF0ZW1lbnRF
cnJvckNhbGxiYWNrID0gMDsKLQotICAgIHJldHVybiBjYWxsYmFja0Vycm9yOwotfQotCi12b2lk
IFNRTFN0YXRlbWVudDo6c2V0RmFpbHVyZUR1ZVRvUXVvdGEoKQotewotICAgIEFTU0VSVCghbV9l
cnJvciAmJiAhbV9yZXN1bHRTZXQpOwotICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNR
TEVycm9yOjpRVU9UQV9FUlIsICJ0aGVyZSB3YXMgbm90IGVub3VnaCByZW1haW5pbmcgc3RvcmFn
ZSBzcGFjZSwgb3IgdGhlIHN0b3JhZ2UgcXVvdGEgd2FzIHJlYWNoZWQgYW5kIHRoZSB1c2VyIGRl
Y2xpbmVkIHRvIGFsbG93IG1vcmUgc3BhY2UiKTsKLX0KLQotdm9pZCBTUUxTdGF0ZW1lbnQ6OmNs
ZWFyRmFpbHVyZUR1ZVRvUXVvdGEoKQotewotICAgIGlmIChsYXN0RXhlY3V0aW9uRmFpbGVkRHVl
VG9RdW90YSgpKQotICAgICAgICBtX2Vycm9yID0gMDsKLX0KLQotYm9vbCBTUUxTdGF0ZW1lbnQ6
Omxhc3RFeGVjdXRpb25GYWlsZWREdWVUb1F1b3RhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9l
cnJvciAmJiBtX2Vycm9yLT5jb2RlKCkgPT0gU1FMRXJyb3I6OlFVT1RBX0VSUjsKKyAgICByZXR1
cm4gcmVzdWx0U2V0LnJlbGVhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9z
dG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU1FMU3RhdGVtZW50U3luY19oCisjZGVmaW5lIFNRTFN0YXRlbWVudFN5bmNfaAorCisj
aWYgRU5BQkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBEYXRhYmFzZVN5bmM7CitjbGFzcyBTUUxSZXN1bHRTZXQ7CisKK2NsYXNz
IFNRTFN0YXRlbWVudFN5bmMgeworcHVibGljOgorICAgIFNRTFN0YXRlbWVudFN5bmMoY29uc3Qg
U3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgYm9v
bCByZWFkT25seSk7CisKKyAgICBQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gZXhlY3V0ZShEYXRh
YmFzZVN5bmMqLCBFeGNlcHRpb25Db2RlJik7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fc3Rh
dGVtZW50OworICAgIFZlY3RvcjxTUUxWYWx1ZT4gbV9hcmd1bWVudHM7CisgICAgYm9vbCBtX3Jl
YWRPbmx5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KERBVEFCQVNFKQorCisjZW5kaWYgLy8gU1FMU3RhdGVtZW50U3luY19oCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogCiAj
aW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC0z
NzAsNyArMzY5LDcgQEAgYm9vbCBTUUxUcmFuc2FjdGlvbjo6cnVuQ3VycmVudFN0YXRlbWVudAog
ICAgICAgICAgICAgLy8gRmxhZyB0aGlzIHRyYW5zYWN0aW9uIGFzIGhhdmluZyBjaGFuZ2VkIHRo
ZSBkYXRhYmFzZSBmb3IgbGF0ZXIgZGVsZWdhdGUgbm90aWZpY2F0aW9uCiAgICAgICAgICAgICBt
X21vZGlmaWVkRGF0YWJhc2UgPSB0cnVlOwogICAgICAgICAgICAgLy8gQWxzbyBkaXJ0eSB0aGUg
c2l6ZSBvZiB0aGlzIGRhdGFiYXNlIGZpbGUgZm9yIGNhbGN1bGF0aW5nIHF1b3RhIHVzYWdlCi0g
ICAgICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGVjdXRlU3Rh
dGVtZW50KHRoaXMpOworICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQo
KS0+ZGlkRXhlY3V0ZVN0YXRlbWVudChkYXRhYmFzZSgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQtPmhhc1N0YXRlbWVudENhbGxiYWNrKCkpIHsKQEAgLTQz
Miw3ICs0MzEsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyUXVvdGFJbmNyZWFzCiAg
ICAgQVNTRVJUKG1fY3VycmVudFN0YXRlbWVudCk7CiAgICAgQVNTRVJUKCFtX3Nob3VsZFJldHJ5
Q3VycmVudFN0YXRlbWVudCk7CiAKLSAgICBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudCA9
IG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZEV4Y2VlZFF1b3RhKHRoaXMpOwor
ICAgIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+dHJhbnNhY3Rp
b25DbGllbnQoKS0+ZGlkRXhjZWVkUXVvdGEoZGF0YWJhc2UoKSk7CiAKICAgICBtX25leHRTdGVw
ID0gJlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzOwogICAgIExPRyhTdG9yYWdlQVBJLCAi
U2NoZWR1bGluZyBydW5TdGF0ZW1lbnRzIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CkBA
IC00NzIsNyArNDcxLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1p
dAogCiAgICAgLy8gVGhlIGNvbW1pdCB3YXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIHRyYW5zYWN0aW9u
IG1vZGlmaWVkIHRoaXMgZGF0YWJhc2UsIG5vdGlmeSB0aGUgZGVsZWdhdGVzLgogICAgIGlmICht
X21vZGlmaWVkRGF0YWJhc2UpCi0gICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50
KCktPmRpZENvbW1pdFRyYW5zYWN0aW9uKHRoaXMpOworICAgICAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNsaWVudCgpLT5kaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKGRhdGFiYXNlKCkpOwog
CiAgICAgLy8gTm93IHJlbGVhc2Ugb3VyIHVubmVlZGVkIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVm
ZXJlbmNlIGN5Y2xlcy4KICAgICBtX2NhbGxiYWNrID0gMDsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5oCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNyArMzAsMTUgQEAKIAogI2lmIEVOQUJMRShE
QVRBQkFTRSkKIAotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJTUUxTdGF0ZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
U2hhcmVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KIGNsYXNzIERhdGFiYXNlOwogY2xhc3Mg
U1FMRXJyb3I7CiBjbGFzcyBTUUxpdGVUcmFuc2FjdGlvbjsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gNjI3MzQpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAJKHJl
dmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzYgKzMzLDI3IEBACiAKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiAKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNp
bmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjaW5jbHVk
ZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNRTFRyYW5z
YWN0aW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBTUUxUcmFu
c2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0VHJhbnNhY3Rpb24oU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQordm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2Fj
dGlvbihBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKLSAgICBBU1NFUlQoY3VycmVudFRo
cmVhZCgpID09IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwotICAgIERhdGFiYXNlKiBkYXRh
YmFzZSA9IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJh
Y2tlcigpLnNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKAogICAgICAgICBkYXRhYmFzZS0+
c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7CiB9CiAKLXZv
aWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQoU1FMVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uKQordm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0
YXRlbWVudChBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKLSAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwotICAgIERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLmRhdGFiYXNlQ2hhbmdlZCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSk7
CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGF0YWJhc2VDaGFuZ2VkKGRhdGFiYXNl
KTsKIH0KIAotYm9vbCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhjZWVkUXVvdGEoU1FMVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorYm9vbCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhj
ZWVkUXVvdGEoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7Ci0gICAgQVNTRVJUKHRyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRo
cmVhZCgpKTsKLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KTsKLQorICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0Nv
bnRleHRUaHJlYWQoKSk7CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRRdW90YSA9IERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnF1b3RhRm9yT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0
eU9yaWdpbigpKTsKICAgICBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRh
YmFzZUV4Y2VlZGVkUXVvdGEoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7CiAgICAgdW5z
aWduZWQgbG9uZyBsb25nIG5ld1F1b3RhID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucXVv
dGFGb3JPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmgJKHJldmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE2ICsz
NywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTUUxUcmFuc2FjdGlv
bjsKK2NsYXNzIEFic3RyYWN0RGF0YWJhc2U7CisKKy8vIEEgY2xpZW50IHRvIHRoZSBTUUxUcmFu
c2FjdGlvbiBjbGFzcy4gQWxsb3dzIFNRTFRyYW5zYWN0aW9uIHRvIG5vdGlmeSBpbnRlcmVzdGVk
CisvLyBwYXJ0aWVzIHRoYXQgY2VydGFpbiB0aGluZ3MgaGF2ZSBoYXBwZW5lZCBpbiBhIHRyYW5z
YWN0aW9uLgorY2xhc3MgU1FMVHJhbnNhY3Rpb25DbGllbnQgOiBwdWJsaWMgTm9uY29weWFibGUg
eworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKEFi
c3RyYWN0RGF0YWJhc2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRXhlY3V0ZVN0YXRlbWVudChB
YnN0cmFjdERhdGFiYXNlKik7CisgICAgdmlydHVhbCBib29sIGRpZEV4Y2VlZFF1b3RhKEFic3Ry
YWN0RGF0YWJhc2UqKTsKK307CiAKLSAgICAvLyBBIGNsaWVudCB0byB0aGUgU1FMVHJhbnNhY3Rp
b24gY2xhc3MuIEFsbG93cyBTUUxUcmFuc2FjdGlvbiB0byBub3RpZnkgaW50ZXJlc3RlZAotICAg
IC8vIHBhcnRpZXMgdGhhdCBjZXJ0YWluIHRoaW5ncyBoYXZlIGhhcHBlbmVkIGluIGEgdHJhbnNh
Y3Rpb24uCi0gICAgY2xhc3MgU1FMVHJhbnNhY3Rpb25DbGllbnQgOiBwdWJsaWMgTm9uY29weWFi
bGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgdm9pZCBkaWRDb21taXRUcmFuc2FjdGlvbihTUUxU
cmFuc2FjdGlvbiopOwotICAgICAgICB2b2lkIGRpZEV4ZWN1dGVTdGF0ZW1lbnQoU1FMVHJhbnNh
Y3Rpb24qKTsKLSAgICAgICAgYm9vbCBkaWRFeGNlZWRRdW90YShTUUxUcmFuc2FjdGlvbiopOwot
ICAgIH07CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiA2MjczNCkK
KysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uU3luYy5jcHAJKHJldmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsMjggKzIsMzAgQEAKICAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0zMiw0MiArMzQsMTkzIEBACiAjaWYgRU5B
QkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FM
RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCisjaW5jbHVkZSAiU1FMU3Rh
dGVtZW50U3luYy5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgor
I2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jPiBTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZShEYXRhYmFzZVN5bmMqIGRiLCBQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjaywgYm9vbCByZWFkT25s
eSkKK3N0YXRpYyBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQoKQogewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMVHJhbnNhY3Rpb25TeW5jKGRiLCBjYWxsYmFjaywg
cmVhZE9ubHkpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNRTFRyYW5zYWN0aW9uQ2xpZW50
LCB0cmFuc2FjdGlvbkNsaWVudCwgKCkpOworICAgIHJldHVybiAmdHJhbnNhY3Rpb25DbGllbnQ7
CiB9CiAKLVNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5jKERhdGFiYXNlU3lu
YyogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBi
b29sIHJlYWRPbmx5KQorUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IFNRTFRyYW5zYWN0
aW9uU3luYzo6Y3JlYXRlKERhdGFiYXNlU3luYyogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwPiBwcmVmbGlnaHRTdGVwLCBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3RlcD4gcG9zdGZsaWdodFN0ZXApCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvblN5bmMoZGIsIGNhbGxiYWNrLCByZWFkT25s
eSwgcHJlZmxpZ2h0U3RlcCwgcG9zdGZsaWdodFN0ZXApKTsKK30KKworU1FMVHJhbnNhY3Rpb25T
eW5jOjpTUUxUcmFuc2FjdGlvblN5bmMoRGF0YWJhc2VTeW5jKiBkYiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2ssIGJvb2wgcmVhZE9ubHksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
U3luY09wdGlvbmFsU3RlcD4gcHJlZmxpZ2h0U3RlcCwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
blN5bmNPcHRpb25hbFN0ZXA+IHBvc3RmbGlnaHRTdGVwKQogICAgIDogbV9kYXRhYmFzZShkYikK
ICAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCiAgICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5KQor
ICAgICwgbV9wcmVmbGlnaHRTdGVwKHByZWZsaWdodFN0ZXApCisgICAgLCBtX3Bvc3RmbGlnaHRT
dGVwKHBvc3RmbGlnaHRTdGVwKQorICAgICwgbV9tb2RpZmllZERhdGFiYXNlKGZhbHNlKQogewog
ICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4
dFRocmVhZCgpKTsKLSAgICBBU1NFUlQoY2FsbGJhY2spOwogfQogCiBTUUxUcmFuc2FjdGlvblN5
bmM6On5TUUxUcmFuc2FjdGlvblN5bmMoKQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAobV9zcWxp
dGVUcmFuc2FjdGlvbiAmJiBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCisgICAg
ICAgIHJvbGxiYWNrKCk7Cit9CisKK1Bhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBTUUxUcmFuc2Fj
dGlvblN5bmM6OmV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZl
Y3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNT
RVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFk
KCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKKyAgICAgICAgZWMgPSBTUUxF
eGNlcHRpb246OlVOS05PV05fRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBp
ZiAoIW1fZGF0YWJhc2UtPnZlcnNpb25NYXRjaGVzRXhwZWN0ZWQoKSkgeworICAgICAgICBlYyA9
IFNRTEV4Y2VwdGlvbjo6VkVSU0lPTl9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIGlmIChzcWxTdGF0ZW1lbnQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGJvb2wgcmVhZE9ubHlNb2RlID0gbV9yZWFkT25seSB8fCBtX2RhdGFiYXNlLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzRGF0YWJhc2VSZWFkT25seSgpOworICAgIFNRTFN0YXRlbWVudFN5
bmMgc3RhdGVtZW50KHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCByZWFkT25seU1vZGUpOworCisg
ICAgbV9kYXRhYmFzZS0+cmVzZXRBdXRob3JpemVyKCk7CisgICAgYm9vbCByZXRyeVN0YXRlbWVu
dCA9IHRydWU7CisgICAgUmVmUHRyPFNRTFJlc3VsdFNldD4gcmVzdWx0U2V0OworICAgIHdoaWxl
IChyZXRyeVN0YXRlbWVudCkgeworICAgICAgICByZXRyeVN0YXRlbWVudCA9IGZhbHNlOworICAg
ICAgICByZXN1bHRTZXQgPSBzdGF0ZW1lbnQuZXhlY3V0ZShtX2RhdGFiYXNlLmdldCgpLCBlYyk7
CisgICAgICAgIGlmICghcmVzdWx0U2V0KSB7CisgICAgICAgICAgICBpZiAobV9zcWxpdGVUcmFu
c2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5U3FsaXRlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAgICAgICAgIGlmIChlYyA9PSBTUUxFeGNlcHRpb246OlFVT1RBX0VSUikgewor
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGNlZWRRdW90YShk
YXRhYmFzZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBlYyA9IDA7CisgICAgICAgICAgICAg
ICAgICAgIHJldHJ5U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAobV9kYXRhYmFzZS0+bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpKSB7
CisgICAgICAgIG1fbW9kaWZpZWREYXRhYmFzZSA9IHRydWU7CisgICAgICAgIHRyYW5zYWN0aW9u
Q2xpZW50KCktPmRpZEV4ZWN1dGVTdGF0ZW1lbnQoZGF0YWJhc2UoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdFNldC5yZWxlYXNlKCk7Cit9CisKK0V4Y2VwdGlvbkNvZGUgU1FMVHJhbnNh
Y3Rpb25TeW5jOjpiZWdpbigpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+
b3BlbmVkKCkpCisgICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOworCisg
ICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9n
cmVzcygpKTsKKworICAgIC8vIFNldCB0aGUgbWF4aW11bSB1c2FnZSBmb3IgdGhpcyB0cmFuc2Fj
dGlvbiBpZiB0aGlzIHRyYW5zYWN0aW9ucyBpcyBub3QgcmVhZC1vbmx5LgorICAgIGlmICghbV9y
ZWFkT25seSkKKyAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5zZXRNYXhpbXVt
U2l6ZShtX2RhdGFiYXNlLT5tYXhpbXVtU2l6ZSgpKTsKKworICAgIGlmIChtX3ByZWZsaWdodFN0
ZXApIHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBwcmVmbGlnaHRFeGNlcHRpb25Db2RlID0gbV9w
cmVmbGlnaHRTdGVwLT5wZXJmb3JtU3RlcCh0aGlzKTsKKyAgICAgICAgbV9wcmVmbGlnaHRTdGVw
ID0gMDsKKyAgICAgICAgaWYgKHByZWZsaWdodEV4Y2VwdGlvbkNvZGUpCisgICAgICAgICAgICBy
ZXR1cm4gcHJlZmxpZ2h0RXhjZXB0aW9uQ29kZTsKKyAgICB9CisKKyAgICBBU1NFUlQoIW1fc3Fs
aXRlVHJhbnNhY3Rpb24pOworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uc2V0KG5ldyBTUUxpdGVU
cmFuc2FjdGlvbihtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCBtX3JlYWRPbmx5KSk7CisK
KyAgICBtX2RhdGFiYXNlLT5yZXNldERlbGV0ZXMoKTsKKyAgICBtX2RhdGFiYXNlLT5kaXNhYmxl
QXV0aG9yaXplcigpOworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmJlZ2luKCk7CisgICAgbV9k
YXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOworCisgICAgLy8gQ2hlY2sgaWYgYmVnaW4oKSBz
dWNjZWVkZWQuCisgICAgaWYgKCFtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsK
KyAgICAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9u
SW5Qcm9ncmVzcygpKTsKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOworICAg
ICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgfQorCisgICAgcmV0
dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBTUUxUcmFuc2FjdGlvblN5bmM6
OmV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYsIEV4Y2Vw
dGlvbkNvZGUmKQorRXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGUoKQog
ewogICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29u
dGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpIHx8ICFtX2NhbGxi
YWNrIHx8ICFtX2NhbGxiYWNrLT5oYW5kbGVFdmVudChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIHRoaXMpKSB7CisgICAgICAgIG1fY2FsbGJhY2sgPSAwOworICAgICAgICBy
ZXR1cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAgICB9CisKKyAgICBtX2NhbGxiYWNr
ID0gMDsKICAgICByZXR1cm4gMDsKIH0KIAorRXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlvblN5
bmM6OmNvbW1pdCgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVk
KCkpCisgICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOworCisgICAgQVNT
RVJUKG1fc3FsaXRlVHJhbnNhY3Rpb24pOworCisgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhv
cml6ZXIoKTsKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBtX2RhdGFi
YXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICAvLyBJZiB0aGUgY29tbWl0IGZhaWxlZCwg
dGhlIHRyYW5zYWN0aW9uIHdpbGwgc3RpbGwgYmUgbWFya2VkIGFzICJpbiBwcm9ncmVzcyIKKyAg
ICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQorICAgICAgICByZXR1cm4g
U1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNs
ZWFyKCk7CisKKyAgICAvLyBWYWN1dW0gdGhlIGRhdGFiYXNlIGlmIGFueXRoaW5nIHdhcyBkZWxl
dGVkLgorICAgIGlmIChtX2RhdGFiYXNlLT5oYWREZWxldGVzKCkpCisgICAgICAgIG1fZGF0YWJh
c2UtPmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKKworICAgIC8vIFRoZSBjb21taXQgd2Fz
IHN1Y2Nlc3NmdWwuIElmIHRoZSB0cmFuc2FjdGlvbiBtb2RpZmllZCB0aGlzIGRhdGFiYXNlLCBu
b3RpZnkgdGhlIGRlbGVnYXRlcy4KKyAgICBpZiAobV9tb2RpZmllZERhdGFiYXNlKQorICAgICAg
ICB0cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKGRhdGFiYXNl
KCkpOworCisgICAgRXhjZXB0aW9uQ29kZSBwb3N0ZmxpZ2h0RXhjZXB0aW9uQ29kZSA9IDA7Cisg
ICAgaWYgKG1fcG9zdGZsaWdodFN0ZXApCisgICAgICAgIHBvc3RmbGlnaHRFeGNlcHRpb25Db2Rl
ID0gbV9wb3N0ZmxpZ2h0U3RlcC0+cGVyZm9ybVN0ZXAodGhpcyk7CisgICAgbV9wb3N0ZmxpZ2h0
U3RlcCA9IDA7CisgICAgcmV0dXJuIHBvc3RmbGlnaHRFeGNlcHRpb25Db2RlOworfQorCit2b2lk
IFNRTFRyYW5zYWN0aW9uU3luYzo6cm9sbGJhY2soKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNl
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBtX2Rh
dGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOworICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9u
KSB7CisgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAgICAgIG1f
c3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKyAgICB9CisgICAgbV9kYXRhYmFzZS0+ZW5hYmxl
QXV0aG9yaXplcigpOworCisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgp
LnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvblN5bmMuaAkocmV2aXNpb24gNjI3MzQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25TeW5jLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNTIgKzIsNjMgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LworCiAjaWZuZGVmIFNRTFRyYW5zYWN0aW9uU3luY19oCiAjZGVmaW5lIFNRTFRyYW5zYWN0aW9u
U3luY19oCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOwotCiBjbGFzcyBEYXRhYmFzZVN5bmM7CiBjbGFzcyBTUUxS
ZXN1bHRTZXQ7CiBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjazsKIGNsYXNzIFNRTFZh
bHVlOworY2xhc3MgU1FMaXRlVHJhbnNhY3Rpb247CiBjbGFzcyBTdHJpbmc7CiAKIC8vIEluc3Rh
bmNlcyBvZiB0aGlzIGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkIGFuZCB1c2VkIG9ubHkgb24gdGhl
IHdvcmtlcidzIGNvbnRleHQgdGhyZWFkLgogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jIDogcHVi
bGljIFJlZkNvdW50ZWQ8U1FMVHJhbnNhY3Rpb25TeW5jPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jPiBjcmVhdGUoRGF0YWJhc2VTeW5jKiwgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wgcmVhZE9ubHkgPSBmYWxz
ZSk7CisKKyAgICBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXAgOiBwdWJsaWMg
UmVmQ291bnRlZDxTUUxUcmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXA+IHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3RlcCgpIHsgfQor
ICAgICAgICB2aXJ0dWFsIEV4Y2VwdGlvbkNvZGUgcGVyZm9ybVN0ZXAoU1FMVHJhbnNhY3Rpb25T
eW5jKikgPSAwOworICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
blN5bmM+IGNyZWF0ZShEYXRhYmFzZVN5bmMqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3lu
Y0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSA9IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5j
T3B0aW9uYWxTdGVwPiBwcmVmbGlnaHRTdGVwID0gMCwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
blN5bmNPcHRpb25hbFN0ZXA+IHBvc3RmbGlnaHRTdGVwID0gMCk7CiAKICAgICB+U1FMVHJhbnNh
Y3Rpb25TeW5jKCk7CiAKQEAgLTU2LDEyICs2NywyMyBAQCBwdWJsaWM6CiAgICAgRGF0YWJhc2VT
eW5jKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KICAgICBib29sIGlz
UmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5OyB9CiAKKyAgICBFeGNlcHRpb25D
b2RlIGJlZ2luKCk7CisgICAgRXhjZXB0aW9uQ29kZSBleGVjdXRlKCk7CisgICAgRXhjZXB0aW9u
Q29kZSBjb21taXQoKTsKKyAgICB2b2lkIHJvbGxiYWNrKCk7CisKIHByaXZhdGU6Ci0gICAgU1FM
VHJhbnNhY3Rpb25TeW5jKERhdGFiYXNlU3luYyosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5KTsKKyAgICBTUUxUcmFuc2FjdGlvblN5bmMoRGF0
YWJhc2VTeW5jKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wg
cmVhZE9ubHksCisgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jT3B0aW9uYWxTdGVwPiBwcmVmbGlnaHRTdGVwLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luY09wdGlvbmFsU3RlcD4gcG9zdGZsaWdodFN0ZXApOwogCiAgICAgUmVmUHRyPERhdGFi
YXNlU3luYz4gbV9kYXRhYmFzZTsKICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2s+IG1fY2FsbGJhY2s7CiAgICAgYm9vbCBtX3JlYWRPbmx5OworICAgIFJlZlB0cjxTUUxUcmFu
c2FjdGlvblN5bmNPcHRpb25hbFN0ZXA+IG1fcHJlZmxpZ2h0U3RlcDsKKyAgICBSZWZQdHI8U1FM
VHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwPiBtX3Bvc3RmbGlnaHRTdGVwOworCisgICAgYm9v
bCBtX21vZGlmaWVkRGF0YWJhc2U7CisgICAgT3duUHRyPFNRTGl0ZVRyYW5zYWN0aW9uPiBtX3Nx
bGl0ZVRyYW5zYWN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5pZGwJKHJldmlzaW9uIDYyNzM0KQorKysgV2Vi
Q29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIs
MjggKzIsMzAgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiBtb2R1bGUgc3RvcmFnZSB7CkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAkocmV2aXNpb24gNjI3
MzQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMiwyOCArMiwzMCBAQAogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKlRyYW5zYWN0aW9uCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKICNpZm5kZWYgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2tfaApAQCAtMzIsNyArMzQsNiBA
QAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6
IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbAkocmV2
aXNpb24gNjI3MzQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2suaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yLDI4ICsyLDMwIEBACiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAog
bW9kdWxlIHN0b3JhZ2UgewpJbmRleDogV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1NRTFRyYW5z
YWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9j
aHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcAkocmV2aXNpb24gNjI3MzQp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE4ICszMSwxNSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xpZW50LmgiCiAKLSNpbmNsdWRlICJEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFz
ZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgTm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzayA6IHB1YmxpYyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrPiBjcmVhdGUoRGF0YWJhc2UgKmRhdGFiYXNl
KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2s+IGNyZWF0
ZShBYnN0cmFjdERhdGFiYXNlICpkYXRhYmFzZSkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcg
Tm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzayhkYXRhYmFzZSk7CiAgICAgfQpAQCAtNTMsMzQgKzUw
LDM1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTm90aWZ5RGF0YWJhc2VDaGFu
Z2VkVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSkKKyAgICBOb3RpZnlEYXRhYmFz
ZUNoYW5nZWRUYXNrKFBhc3NSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gZGF0YWJhc2UpCiAgICAg
ICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPERh
dGFiYXNlPiBtX2RhdGFiYXNlOworICAgIFJlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBtX2RhdGFi
YXNlOwogfTsKIAotdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0VHJhbnNhY3Rp
b24oU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQordm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVu
dDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlvbihBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkK
IHsKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElE
KCkpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICB0cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhO
b3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrOjpjcmVhdGUodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkp
KTsKKyAgICBpZiAoIWRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4
dFRocmVhZCgpKSB7CisgICAgICAgIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PnBvc3RUYXNrKE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2s6OmNyZWF0ZShkYXRhYmFzZSkpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgV2ViQ29yZTo6RGF0YWJhc2VPYnNlcnZlcjo6
ZGF0YWJhc2VNb2RpZmllZChkYXRhYmFzZSk7CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25DbGll
bnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQordm9p
ZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0YXRlbWVudChBYnN0cmFjdERhdGFi
YXNlKiBkYXRhYmFzZSkKIHsKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgZXhl
Y3V0aW5nIGV2ZXJ5IHN0YXRlbWVudCB0aGF0IGNoYW5nZXMgdGhlIERCLgogICAgIC8vIENocm9t
aXVtIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBhdCB0aGF0IHBvaW50LgotICAgIEFTU0VS
VChjdXJyZW50VGhyZWFkKCkgPT0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CiB9CiAKLWJv
b2wgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKFNRTFRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbikKK2Jvb2wgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKEFi
c3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIC8vIENocm9taXVtIGRvZXMgbm90IGFs
bG93IHVzZXJzIHRvIG1hbnVhbGx5IGNoYW5nZSB0aGUgcXVvdGEgZm9yIGFuIG9yaWdpbiAoZm9y
IG5vdywgYXQgbGVhc3QpLgogICAgIC8vIERvbid0IGRvIGFueXRoaW5nLgotICAgIEFTU0VSVCh0
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRl
eHRUaHJlYWQoKSk7CisgICAgQVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDYyNzM0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsOTQgQEAKKzIwMTAtMDctMDMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBQb3J0aW5nIGFzIG1hbnkgYXN5bmMgREIgdGVzdHMgYXMgcG9zc2libGUgdG8gc3luYyBE
QnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDYw
NworCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxl
LXJldXNlLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMv
c3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5jLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNp
b24tc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0
eS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29y
a2Vycy9zdG9yYWdlL2VtcHR5LXN0YXRlbWVudC1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mt
c3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRl
c3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1v
bmUtc3RhdGVtZW50LXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0
b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBs
ZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxi
YWNrLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3Rv
cmFnZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9u
LXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFn
ZS9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLWV4cGVjdGVk
LnR4dDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1k
YXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQuCisgICAgICAgICogZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sOiBDb3BpZWQgZnJvbSBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmh0
bWwuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zZXQtZW1w
dHktdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3Jr
ZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1p
bnB1dHMtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBm
YXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXBy
b2dyZXNzLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMv
c3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2No
YW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKGNhdGNo
KToKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNp
b24tc3luYy0xLmpzOiBBZGRlZC4KKyAgICAgICAgKCk6CisgICAgICAgICh0cnkpOgorICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1zeW5jLTIu
anM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9lbXB0
eS1zdGF0ZW1lbnQtc3luYy5qczogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvcmVzb3VyY2VzL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5qczogQWRkZWQuCisgICAgICAgICh0
aHJvd09uVG9TdHJpbmdPYmplY3QudG9TdHJpbmcpOgorICAgICAgICAodmFyKToKKyAgICAgICAg
KCk6CisgICAgICAgIChydW5UcmFuc2FjdGlvblRlc3QpOgorICAgICAgICAocnVuVHJhbnNhY3Rp
b25UZXN0cyk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1
dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5qczogQWRkZWQuCisgICAgICAg
IChleGVjdXRlU3RhdGVtZW50KToKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNv
dXJjZXMvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuanM6
IEFkZGVkLgorICAgICAgICAocnVuVHJhbnNhY3Rpb24pOgorICAgICAgICAodmFyKToKKyAgICAg
ICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvbXVsdGlwbGUtdHJhbnNhY3Rpb25z
LXN5bmMuanM6IEFkZGVkLgorICAgICAgICAoY2hlY2tDb21wbGV0aW9uKToKKyAgICAgICAgKHJ1
blRlc3QuZGIpOgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0
b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5qczog
QWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0
YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5qczogQ29waWVk
IGZyb20gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0
YWJhc2Utc3luYy1pbnB1dHMuanMuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVz
b3VyY2VzL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5qczogQWRkZWQuCisg
ICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3lu
Yy1pbnB1dHMuanM6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVz
b3VyY2VzL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5q
czogQWRkZWQuCisgICAgICAgIChvcGVuVGVzdERhdGFiYXNlKToKKyAgICAgICAgKiBmYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvc3FsLWRhdGEtdHlwZXMtc3luYy5qczogQWRkZWQuCisg
ICAgICAgICgpOgorICAgICAgICAodGVzdERCVmFsdWVzKToKKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmpzOiBBZGRlZC4K
KyAgICAgICAgKHRlc3RUcmFuc2FjdGlvbik6CisgICAgICAgICgpOgorICAgICAgICAodGVzdElu
dmFsaWRTdGF0ZW1lbnQpOgorICAgICAgICAodGVzdEluY29ycmVjdE51bWJlck9mQmluZFBhcmFt
ZXRlcnMpOgorICAgICAgICAodGVzdEJpbmRQYXJhbWV0ZXJPZldyb25nVHlwZS5iYWRTdHJpbmcu
dG9TdHJpbmcpOgorICAgICAgICAodGVzdEJpbmRQYXJhbWV0ZXJPZldyb25nVHlwZSk6CisgICAg
ICAgICh0ZXN0VmVyc2lvbk1pc21hdGNoLnRlc3RUcmFuc2FjdGlvbik6CisgICAgICAgICh0ZXN0
VmVyc2lvbk1pc21hdGNoKToKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJj
ZXMvdGVzdC1hdXRob3JpemVyLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAoY2xlYW51cCk6Cisg
ICAgICAgIChleGVjdXRlU3RhdGVtZW50KToKKyAgICAgICAgKGNyZWF0ZVRhYmxlQ2FsbGJhY2sp
OgorICAgICAgICAoY3JlYXRlU3RhdGVtZW50c0NhbGxiYWNrKToKKyAgICAgICAgKG90aGVyU3Rh
dGVtZW50c0NhbGxiYWNrKToKKyAgICAgICAgKGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2spOgorICAg
ICAgICAodGVzdFJlYWRXcml0ZU1vZGUpOgorICAgICAgICAodGVzdFJlYWRPbmx5TW9kZSk6Cisg
ICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3RyYW5zYWN0aW9uLWluLXRy
YW5zYWN0aW9uLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdl
L3NxbC1kYXRhLXR5cGVzLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRp
b24tY29kZXMtc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFn
ZS90ZXN0LWF1dGhvcml6ZXItc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3RyYW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5
bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS90
cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA3LTA3
ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgTm8gcmV2
aWV3LiBGaXhpbmcgc2tpcHBlZCBsYXlvdXQgdGVzdCBuYW1lLgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhh
bmRsZS1yZXVzZS1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBA
CitUZXN0IHRoYXQgdGhlIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBp
dHMgdmVyc2lvbi4KK1BBU1M6IGNoYW5nZVZlcnNpb24oKSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3
YXMgY2FsbGVkLgorUEFTUzogTm8gZXhjZXB0aW9uIHRocm93biB3aGlsZSBleGVjdXRpbmcgc3Rh
dGVtZW50cy4KK1BBU1M6IE5vIGV4Y2VwdGlvbiB0aHJvd24gd2hpbGUgcnVubmluZyBhIHRyYW5z
YWN0aW9uLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2Ut
dmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFu
Z2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0
cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3Qo
J3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5qcycpIj4KK1Rlc3Qg
dGhhdCB0aGUgZGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJz
aW9uLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCB0aGF0IHZlcnNpb24gdXBkYXRl
cyBpbiBzeW5jIGRhdGFiYXNlcyB3b3JrIGNvcnJlY3RseS4KK1BBU1M6IGRiLnZlcnNpb24gaXMg
MyBhcyBleHBlY3RlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
Y2hhbmdlLXZlcnNpb24tc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+
CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y29uc29sZSIpLmlubmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOworfQorCitmdW5jdGlvbiBm
aW5pc2hUZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHJ1
blRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5sb2Nh
dGlvbi5zZWFyY2ggPT0gIj8yIikgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigi
cmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMi5qcyIpOworICAgICAgICB3b3JrZXIub25t
ZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC5kYXRhID09
ICJkb25lIikKKyAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbG9nKGV2ZW50LmRhdGEpOworICAgICAgICB9OworICAgIH0gZWxz
ZSB7CisgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCJyZXNvdXJjZXMvY2hhbmdlLXZl
cnNpb24tc3luYy0xLmpzIik7CisgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT0gImRvbmUiKQorICAgICAgICAg
ICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gd2luZG93LmxvY2F0aW9uICsgIj8yIjsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT0gImZhaWwiKQorICAgICAgICAgICAgICAg
IGZpbmlzaFRlc3QoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2coZXZl
bnQuZGF0YSk7CisgICAgICAgIH07CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eSBvbmxvYWQ9InJ1blRlc3QoKSI+CitUZXN0IHRoYXQgdmVyc2lvbiB1cGRhdGVzIGluIHN5bmMg
ZGF0YWJhc2VzIHdvcmsgY29ycmVjdGx5LgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2Vt
cHR5LXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1z
dGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAor
VGhpcyB0ZXN0IHRyaWVzIHRvIGV4ZWN1dGUgYW4gZW1wdHkgc3RhdGVtZW50LgorUEFTUzogcmVz
dWx0IGlzIG51bGwKK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5
bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvZW1wdHktc3RhdGVtZW50
LXN5bmMuanMnKSI+CitUaGlzIHRlc3QgdHJpZXMgdG8gZXhlY3V0ZSBhbiBlbXB0eSBzdGF0ZW1l
bnQuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAorVGVzdCB2YXJpb3VzIGlucHV0
cyB0byBleGVjdXRlU3FsKCkuCitQQVNTOiBleGVjdXRlU3FsKCIiKSBkaWQgbm90IHRocm93IGFu
IGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIG51bGwpIGRpZCBub3QgdGhyb3cgYW4g
ZXhjZXB0aW9uLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93
IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIFtdKSBkaWQgbm90IHRocm93IGFu
IGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIFsgImFyZzAiIF0pIGRpZCBub3QgdGhy
b3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgeyB9KSBkaWQgbm90IHRocm93
IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIHsgbGVuZ3RoOiAwIH0pIGRpZCBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgeyBsZW5ndGg6IDEs
IDA6ICJhcmcwIiB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVT
cWwoKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKG51
bGwpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwodW5k
ZWZpbmVkKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3Fs
KDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwodGhy
b3dPblRvU3RyaW5nT2JqZWN0KSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNT
OiBleGVjdXRlU3FsKCIiLCB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0KSB0aHJldyBhbiBleGNlcHRp
b24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKCIiLCB0aHJvd09uR2V0WmVyb09iamVj
dCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwg
WyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXSkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVk
LgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgMCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVk
LgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgIiIpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3Rl
ZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwt
YXJncy1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmpzJyki
PgorVGVzdCB2YXJpb3VzIGlucHV0cyB0byBleGVjdXRlU3FsKCkuCis8cHJlIGlkPSJjb25zb2xl
Ij4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0
ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCB0aGF0IGV4ZWN1dGVTcWwoKSBhY2NlcHRzIG9u
bHkgb25lIHN0YXRlbWVudC4KK1BBU1M6IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgxKQorUEFT
UzogSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDIpOworUEFTUzogICAgSU5TRVJUIElOVE8gVGVz
dCBWQUxVRVMgKDMpICAgIAorUEFTUzogICAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDQpOyAg
IAorUEFTUzogSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDUpICAgOworUEFTUzogSU5TRVJUIElO
VE8gVGVzdCBWQUxVRVMgKDYpOyBnYXJiYWdlCitQQVNTOiBJTlNFUlQgSU5UTyBUZXN0IFZBTFVF
UyAoNyk7IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg4KQorUEFTUzogICBJTlNFUlQgSU5UTyBU
ZXN0IFZBTFVFUyAoOSk7ICAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDEwKTsgICAKKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9u
bHktb25lLXN0YXRlbWVudC1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1z
eW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkg
b25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0
YXRlbWVudC1zeW5jLmpzJykiPgorVGVzdCB0aGF0IGV4ZWN1dGVTcWwoKSBhY2NlcHRzIG9ubHkg
b25lIHN0YXRlbWVudC4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10cmFu
c2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rp
b25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25z
LW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDMgQEAKK1Rlc3QgdGhhdCBleGVjdXRpbmcgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIG9u
IGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIGRvZXNuJ3QgY2F1c2UgZGVh
ZGxvY2tzLgorUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9t
dWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5z
YWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24t
ZGlmZmVyZW50LWhhbmRsZXMtc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBA
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21t
b24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291
cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5qcycp
Ij4KK1Rlc3QgdGhhdCBleGVjdXRpbmcgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVu
dCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIGRvZXNuJ3QgY2F1c2UgZGVhZGxvY2tzLgor
PHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJh
Y2stc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNSBAQAorVGhpcyB0ZXN0IHRlc3RzIG9wZW5EYXRhYmFzZVN5bmMoKSdz
IGNyZWF0aW9uIGNhbGxiYWNrLgorUEFTUzogQ3JlYXRpb24gY2FsbGJhY2sgd2FzIGNhbGxlZC4K
K1BBU1M6IFZlcnNpb24gc2V0IHRvIGVtcHR5IHN0cmluZyBhcyBleHBlY3RlZC4KK1BBU1M6IEFu
IGV4Y2VwdGlvbiB3YXMgdGhyb3duIGFuZCBkYjFGYWlsIGlzIG51bGwgYXMgZXhwZWN0ZWQuCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3Jl
YXRpb24tY2FsbGJhY2stc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1k
YXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5w
dXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVz
dCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5qcycpIj4K
K1RoaXMgdGVzdCB0ZXN0cyBvcGVuRGF0YWJhc2VTeW5jKCkncyBjcmVhdGlvbiBjYWxsYmFjay4K
KzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24t
c3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRh
YmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMgQEAKK1Rlc3QgdGhhdCBubyBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gdGhlIGRhdGFi
YXNlIGlzIG9wZW5lZCB3aXRoIGFuIGVtcHR5IHZlcnNpb24uCitQQVNTCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1z
eW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lv
bi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJh
c2UtZW1wdHktdmVyc2lvbi1zeW5jLmpzJykiPgorVGVzdCB0aGF0IG5vIGV4Y2VwdGlvbiBpcyB0
aHJvd24gd2hlbiB0aGUgZGF0YWJhc2UgaXMgb3BlbmVkIHdpdGggYW4gZW1wdHkgdmVyc2lvbi4K
KzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjIyMzAp
CShmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3lu
Yy1pbnB1dHMtZXhwZWN0ZWQudHh0OjYyMjMwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMSBAQAorVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBvcGVuRGF0
YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlkIHBhcmFtZXRlcnMuCitQQVNTOiBTWU5UQVhf
RVJSOiBET00gRXhjZXB0aW9uIDEyCitQQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEy
CitQQVNTOiB1bmRlZmluZWQKK1BBU1M6IHVuZGVmaW5lZAorUEFTUzogdW5kZWZpbmVkCitQQVNT
OiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNworUEFTUzogb3BlbkRhdGFiYXNl
U3luYygpIHN1Y2NlZWRlZC4KK1BBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuCitQ
QVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sg
c3VjY2VlZGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVu
LWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCShyZXZpc2lv
biA2MjIzMCkJKGZyb20gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRh
YmFzZS1zeW5jLWlucHV0cy5odG1sOjYyMjMwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
KworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlu
cHV0cy5qcycpIj4KK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgb3BlbkRhdGFiYXNlU3luYygp
IGFjY2VwdHMgb25seSB2YWxpZCBwYXJhbWV0ZXJzLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3By
ZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0bWwJ
KHJldmlzaW9uIDYyMjMwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Bl
bi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBA
QAogPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0
PgogPC9oZWFkPgogCi08Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFi
YXNlLXN5bmMtaW5wdXRzLmpzJykiPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMv
b3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5qcycpIj4KIFRoaXMgdGVzdCBtYWtlcyBzdXJlIHRo
YXQgb3BlbkRhdGFiYXNlU3luYygpIGFjY2VwdHMgb25seSB2YWxpZCBwYXJhbWV0ZXJzLgogPHBy
ZSBpZD0iY29uc29sZSI+CiA8L3ByZT4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRh
YmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5
LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAor
VGhpcyB0ZXN0cyB0aGF0IGNhbGxpbmcgb3BlbkRhdGFiYXNlIHdpdGggYW4gZW1wdHkgdmVyc2lv
biBzdHJpbmcgc2V0cyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoYXQgZGF0YWJhc2UgdG8gdGhl
IGVtcHR5IHN0cmluZyBhbmQgc3Vic2VxdWVudCBhdHRlbXB0cyB0byBvcGVuIHRoZSBkYXRhYmFz
ZSB3aXRoIGEgZGlmZmVyZW50IGV4cGVjdGVkIHZlcnNpb24gdGhyb3cgYW4gZXhjZXB0aW9uLgor
UEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFi
YXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5
bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90
ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9
InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMu
anMnKSI+CitUaGlzIHRlc3RzIHRoYXQgY2FsbGluZyBvcGVuRGF0YWJhc2Ugd2l0aCBhbiBlbXB0
eSB2ZXJzaW9uIHN0cmluZyBzZXRzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhhdCBkYXRhYmFz
ZSB0byB0aGUgZW1wdHkgc3RyaW5nIGFuZCBzdWJzZXF1ZW50IGF0dGVtcHRzIHRvIG9wZW4gdGhl
IGRhdGFiYXNlIHdpdGggYSBkaWZmZXJlbnQgZXhwZWN0ZWQgdmVyc2lvbiB0aHJvdyBhbiBleGNl
cHRpb24uCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlu
cHV0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDYyNzM0KQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFz
ZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzAsMCBA
QAotVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBvcGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBv
bmx5IHZhbGlkIHBhcmFtZXRlcnMuCi1QQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEy
Ci1QQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCi1QQVNTOiB1bmRlZmluZWQKLVBB
U1M6IHVuZGVmaW5lZAotUEFTUzogdW5kZWZpbmVkCi1QQVNTOiBUWVBFX01JU01BVENIX0VSUjog
RE9NIEV4Y2VwdGlvbiAxNwotUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4KLVBB
U1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuCi1QQVNTOiBjYWxsaW5nIG9wZW5EYXRh
YmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sgc3VjY2VlZGVkLgotCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRz
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Bl
bi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sCShyZXZpc2lvbiA2MjczNCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMiArMCwwIEBACi08IWRvY3R5cGUgaHRtbD4KLTxodG1sPgot
PGhlYWQ+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9z
Y3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4t
ZGF0YWJhc2Utc3luYy1pbnB1dHMuanMnKSI+Ci1UaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IG9w
ZW5EYXRhYmFzZVN5bmMoKSBhY2NlcHRzIG9ubHkgdmFsaWQgcGFyYW1ldGVycy4KLTxwcmUgaWQ9
ImNvbnNvbGUiPgotPC9wcmU+Ci08L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXBy
b2dyZXNzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jl
c3Mtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNz
LXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhh
dCBhIHNlY29uZCBoYW5kbGUgdG8gdGhlIHNhbWUgZGF0YWJhc2UgY2FuIGJlIG9wZW5lZCBpbnNp
ZGUgYSB0cmFuc2FjdGlvbiBydW5uaW5nIG9uIHRoZSBmaXJzdCBoYW5kbGUuCitQQVNTOiBzZWNv
bmQgaGFuZGxlIG9wZW5lZCBzdWNjZXNzZnVsbHkuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jl
c3Mtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1k
YXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9u
bG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24t
aW4tcHJvZ3Jlc3Mtc3luYy5qcycpIj4KK1Rlc3QgdGhhdCBhIHNlY29uZCBoYW5kbGUgdG8gdGhl
IHNhbWUgZGF0YWJhc2UgY2FuIGJlIG9wZW5lZCBpbnNpZGUgYSB0cmFuc2FjdGlvbiBydW5uaW5n
IG9uIHRoZSBmaXJzdCBoYW5kbGUuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRh
dGEtdHlwZXMtc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlwZXMtc3luYy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0YS10eXBl
cy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitUZXN0IHRo
YXQgdGhlIHZhbHVlcyByZXR1cm5lZCBieSBEQiBxdWVyaWVzIGFyZSBvZiB0aGUgc2FtZSB0eXBl
IGFzIHRoZSB2YWx1ZXMgaW5zZXJ0ZWQgaW4gdGhlIGRhdGFiYXNlLgorUEFTUzogcHJvcGVydHkg
J3RpbWVzdGFtcCcgT0ssIHR5cGUgd2FzIG51bWJlcgorUEFTUzogcHJvcGVydHkgJ2lkJyBPSywg
dHlwZSB3YXMgbnVtYmVyCitQQVNTOiBwcm9wZXJ0eSAncmVhbCcgT0ssIHR5cGUgd2FzIG51bWJl
cgorUEFTUzogcHJvcGVydHkgJ3RleHQnIE9LLCB0eXBlIHdhcyBzdHJpbmcKK1BBU1M6IHByb3Bl
cnR5ICdibG9iJyBPSywgdHlwZSB3YXMgc3RyaW5nCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0
YS10eXBlcy1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL3NxbC1k
YXRhLXR5cGVzLXN5bmMuanMnKSI+CitUZXN0IHRoYXQgdGhlIHZhbHVlcyByZXR1cm5lZCBieSBE
QiBxdWVyaWVzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSB2YWx1ZXMgaW5zZXJ0ZWQgaW4g
dGhlIGRhdGFiYXNlLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24t
Y29kZXMtc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRp
b24tY29kZXMtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAor
VGVzdCB0aGF0IHRoZSBjb3JyZWN0IGV4Y2VwdGlvbnMgYXJlIHRocm93biBpbiBleGNlcHRpb25h
bCBzaXR1YXRpb25zLgorUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFVOS05PV05f
RVJSCitQQVNTOiBleHBlY3RlZCBhbmQgZ290IGVycm9yIGNvZGUgU1lOVEFYX0VSUgorUEFTUzog
ZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFNZTlRBWF9FUlIKK1BBU1M6IGV4cGVjdGVkIGFu
ZCBnb3QgZXJyb3IgY29kZSBVTktOT1dOX0VSUgorUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJv
ciBjb2RlIFFVT1RBX0VSUgorUEFTUzogVHJhbnNhY3Rpb24gd2FzIHJvbGxlZCBiYWNrIGJ5IFNR
TGl0ZSBhcyBleHBlY3RlZC4KK1BBU1M6IGV4cGVjdGVkIGFuZCBnb3QgZXJyb3IgY29kZSBWRVJT
SU9OX0VSUgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhj
ZXB0aW9uLWNvZGVzLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMt
c3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9zcWwtZXhjZXB0aW9u
LWNvZGVzLXN5bmMuanMnKSI+CitUZXN0IHRoYXQgdGhlIGNvcnJlY3QgZXhjZXB0aW9ucyBhcmUg
dGhyb3duIGluIGV4Y2VwdGlvbmFsIHNpdHVhdGlvbnMuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwv
cHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3MSBAQAorVGVzdCB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci4KK0JlZ2lubmluZyB3cml0ZSB0
cmFuc2FjdGlvbjoKK1NRTElURV9DUkVBVEVfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NR
TElURV9DUkVBVEVfSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVN
UF9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIg
c3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9WSUVXIHN0YXRlbWVudCBz
dWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NR
TElURV9DUkVBVEVfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9WVEFC
TEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX1JF
QUQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9TRUxFQ1Qgc3RhdGVtZW50IHN1Y2NlZWRl
ZC4KK1NRTElURV9ERUxFVEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9JTlNFUlQgc3Rh
dGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9VUERBVEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NR
TElURV9QUkFHTUEgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQor
U1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQUxURVJfVEFC
TEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9UUkFOU0FDVElPTiBzdGF0ZW1lbnQgZmFp
bGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQVRUQUNIIHN0YXRlbWVudCBm
YWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9ERVRBQ0ggc3RhdGVtZW50
IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX1JFSU5ERVggc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9BTkFMWVpFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3Qg
U1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9QX0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQu
CitTUUxJVEVfRFJPUF9URU1QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJP
UF9URU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RFTVBfVklF
VyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVFJJR0dFUiBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorU1FMSVRFX0RST1BfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RS
T1BfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1dyaXRlIHRyYW5zYWN0aW9uIHN1Y2NlZWRl
ZC4KKworQmVnaW5uaW5nIHJlYWQgdHJhbnNhY3Rpb25zOgorU1FMSVRFX0NSRUFURV9UQUJMRSBz
dGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRF
X1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVu
dCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9DUkVBVEVfVEVNUF9U
QUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVf
Q1JFQVRFX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlv
bl0gKDUpCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0
IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1RSSUdHRVIgc3RhdGVtZW50IGZhaWxl
ZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0NSRUFURV9WSUVXIHN0YXRlbWVu
dCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9DUkVBVEVfVlRBQkxF
IHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9DUkVB
VEVfSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBz
dGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgc3RhdGVtZW50
IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQu
CitTUUxJVEVfQ1JFQVRFX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVB
VEVfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9WVEFCTEUgc3RhdGVt
ZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX1JFQUQgc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9TRUxFQ1Qgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElU
RV9ERUxFVEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FM
SVRFX0lOU0VSVCBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitT
UUxJVEVfVVBEQVRFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkK
K1NRTElURV9QUkFHTUEgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1
KQorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0
aW9uXSAoNSkKK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNR
TEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfVFJBTlNBQ1RJT04gc3RhdGVtZW50IGZhaWxlZDogW29i
amVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0FUVEFDSCBzdGF0ZW1lbnQgZmFpbGVkOiBb
b2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfREVUQUNIIHN0YXRlbWVudCBmYWlsZWQ6
IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9SRUlOREVYIHN0YXRlbWVudCBmYWls
ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9BTkFMWVpFIHN0YXRlbWVudCBm
YWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9QX0lOREVYIHN0YXRl
bWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9QX1RFTVBf
VEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRF
X0RST1BfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9u
XSAoNSkKK1NRTElURV9EUk9QX1RFTVBfVklFVyBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNR
TEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IFtv
YmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9QX1ZJRVcgc3RhdGVtZW50IGZhaWxl
ZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RST1BfVEFCTEUgc3RhdGVtZW50
IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorUmVhZCB0cmFuc2FjdGlvbnMgc3Vj
Y2VlZGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1
dGhvcml6ZXItc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy90ZXN0LWF1dGhvcml6ZXItc3luYy5qcycp
Ij4KK1Rlc3QgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwv
cHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdHJhbnNhY3Rpb24taW4t
dHJhbnNhY3Rpb24tc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0IHRoYXQgdHJ5aW5n
IHRvIHJ1biBhIHRyYW5zYWN0aW9uIGluc2lkZSBhbm90aGVyIHRyYW5zYWN0aW9uIHRocm93cyBh
biBleGNlcHRpb24uCitQQVNTOiBFeGNlcHRpb24gdGhyb3duIHdoaWxlIHRyeWluZyB0byBydW4g
YSBuZXN0ZWQgdHJhbnNhY3Rpb24uCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL3RyYW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90cmFuc2FjdGlvbi1pbi10cmFuc2Fj
dGlvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9h
ZD0icnVuVGVzdCgncmVzb3VyY2VzL3RyYW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuanMn
KSI+CitUZXN0IHRoYXQgdHJ5aW5nIHRvIHJ1biBhIHRyYW5zYWN0aW9uIGluc2lkZSBhbm90aGVy
IHRyYW5zYWN0aW9uIHRocm93cyBhbiBleGNlcHRpb24uCis8cHJlIGlkPSJjb25zb2xlIj4KKzwv
cHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFu
Z2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUt
cmV1c2Utc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAordmFyIGRiID0gbnVs
bDsKK3RyeSB7CisgICAgdmFyIGRiTmFtZSA9ICJDaGFuZ2VWZXJzaW9uSGFuZGxlUmV1c2VUZXN0
IiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKGRi
TmFtZSwgIiIsICJUZXN0IHRoYXQgdGhlIERCIGhhbmRsZSBpcyB2YWxpZCBhZnRlciBjaGFuZ2lu
ZyB0aGUgdmVyc2lvbi4iLCAxKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRiLnZlcnNpb247CisgICAg
dmFyIG5ld1ZlcnNpb24gPSB2ZXJzaW9uID8gKHBhcnNlSW50KHZlcnNpb24pICsgMSkudG9TdHJp
bmcoKSA6ICIxIjsKKyAgICBkYi5jaGFuZ2VWZXJzaW9uKHZlcnNpb24sIG5ld1ZlcnNpb24sIGZ1
bmN0aW9uKHR4KSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBjaGFuZ2VWZXJzaW9uKCkg
dHJhbnNhY3Rpb24gY2FsbGJhY2sgd2FzIGNhbGxlZC4iKTsKKyAgICB9KTsKK30gY2F0Y2ggKGVy
cikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBjaGFuZ2VWZXJzaW9uKCkgdGhyZXcgYW4gZXhj
ZXB0aW9uOiAiICsgZXJyKTsKK30KKwordHJ5IHsKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlv
bih0eCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRF
IFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCkiKTsKKyAgICAgICAgICAgIHR4LmV4
ZWN1dGVTcWwoIlNFTEVDVCAqIGZyb20gVGVzdCIpOworICAgICAgICAgICAgcG9zdE1lc3NhZ2Uo
IlBBU1M6IE5vIGV4Y2VwdGlvbiB0aHJvd24gd2hpbGUgZXhlY3V0aW5nIHN0YXRlbWVudHMuIik7
CisgICAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6
IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIHdoaWxlIGV4ZWN1dGluZyBzdGF0ZW1lbnRzOiAiICsg
ZXJyKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBObyBleGNl
cHRpb24gdGhyb3duIHdoaWxlIHJ1bm5pbmcgYSB0cmFuc2FjdGlvbi4iKTsKK30gY2F0Y2ggKGVy
cikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBBbiBleGNlcHRpb24gd2FzIHRocm93biB3aGls
ZSBydW5uaW5nIGEgdHJhbnNhY3Rpb246ICIgKyBlcnIpOworfQorCitwb3N0TWVzc2FnZSgiZG9u
ZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2No
YW5nZS12ZXJzaW9uLXN5bmMtMS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0xLmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5n
ZS12ZXJzaW9uLXN5bmMtMS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAordmFyIEVY
UEVDVEVEX1ZFUlNJT05fQUZURVJfSElYSUVfVEVTVCA9ICIyIjsKK3ZhciBFWFBFQ1RFRF9WRVJT
SU9OX0FGVEVSX1JFTE9BRCA9ICIzIjsKKworZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHsgfQor
Cit2YXIgZGIxID0gb3BlbkRhdGFiYXNlU3luYygiQ2hhbmdlVmVyc2lvblRlc3QiLCAiMSIsICJU
ZXN0IGZvciB0aGUgZGF0YWJhc2UuY2hhbmdlVmVyc2lvbigpIGZ1bmN0aW9uIiwgMSk7Cit2YXIg
ZGIyID0gb3BlbkRhdGFiYXNlU3luYygiQ2hhbmdlVmVyc2lvblRlc3QiLCAiMSIsICJUZXN0IGZv
ciB0aGUgZGF0YWJhc2UuY2hhbmdlVmVyc2lvbigpIGZ1bmN0aW9uIiwgMSk7CisKKy8vIEZpcnN0
IHJ1biBIaXhpZSdzIHRlc3QgdG8gZW5zdXJlIGJhc2ljIGNoYW5nZVZlcnNpb24oKSBmdW5jdGlv
bmFsaXR5IHdvcmtzIChzZWUgYnVnIDI4NDE4KS4KK2RiMS5jaGFuZ2VWZXJzaW9uKCIxIiwgRVhQ
RUNURURfVkVSU0lPTl9BRlRFUl9ISVhJRV9URVNULCBlbXB0eUZ1bmN0aW9uKTsKK2lmIChkYjIu
dmVyc2lvbiAhPSBkYjEudmVyc2lvbikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBjaGFuZ2lu
ZyBkYjEncyB2ZXJzaW9uICgiICsgZGIxLnZlcnNpb24gKyAiKSBkaWQgbm90IGNoYW5nZSBkYjIn
cyB2ZXJzaW9uICgiICsgZGIyLnZlcnNpb24gKyAiKSBhcyBleHBlY3RlZC4iKTsKKyAgICBwb3N0
TWVzc2FnZSgiZmFpbCIpOworfSBlbHNlCisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNoYW5naW5n
IGRiMSdzIHZlcnNpb24gKCIgKyBkYjEudmVyc2lvbiArICIpIGNoYW5nZWQgZGIyJ3MgdmVyc2lv
biB0b28uIik7CisKK2RiMi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgIHRyeSB7Cisg
ICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZv
byBJTlQpIik7CisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBUaGUgREIgdmVyc2lvbiBjaGFu
Z2VkLCBleGVjdXRpbmcgYW55IHN0YXRlbWVudCBvbiBkYjIgc2hvdWxkIGZhaWwuIik7CisgICAg
ICAgIHBvc3RNZXNzYWdlKCJmYWlsIik7CisgICAgfSBjYXRjaChlcnIpIHsKKyAgICAgIHBvc3RN
ZXNzYWdlKCJQQVNTOiBFeGVjdXRpbmcgYSBzdGF0ZW1lbnQgb24gZGIyIHRocmV3IGFuIGV4Y2Vw
dGlvbiBhcyBleHBlY3RlZC4iKTsKKyAgICB9Cit9KTsKKworLy8gTWFrZSBzdXJlIGFueSBuZXcg
aGFuZGxlIHRvIHRoZSBzYW1lIERCIHNlZXMgdGhlIG5ldyB2ZXJzaW9uCit0cnkgeworICAgIHZh
ciBkYjMgPSBvcGVuRGF0YWJhc2VTeW5jKCJDaGFuZ2VWZXJzaW9uVGVzdCIsIEVYUEVDVEVEX1ZF
UlNJT05fQUZURVJfSElYSUVfVEVTVCwgIiIsIDEpOworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBT
dWNjZXNzZnVsbHkgb3BlbmVkIGEgbmV3IERCIGhhbmRsZS4iKTsKK30gY2F0Y2ggKGVycikgewor
ICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbiB0aHJvd24gd2hpbGUg
dHJ5aW5nIHRvIG9wZW4gYSBuZXcgREIgaGFuZGxlOiAiICsgZXJyKTsKKyAgICBwb3N0TWVzc2Fn
ZSgiZmFpbCIpOworfQorCitpZiAoZGIxLnZlcnNpb24gIT0gZGIzLnZlcnNpb24pIHsKKyAgICBw
b3N0TWVzc2FnZSgiRkFJTDogZGIxLnZlcnNpb24gKCIgKyBkYjEudmVyc2lvbiArICIpIGRvZXMg
bm90IG1hdGNoIGRiMy52ZXJzaW9uKCIgKyBkYjMudmVyc2lvbiArIikiKTsKKyAgICBwb3N0TWVz
c2FnZSgiZmFpbCIpOworfSBlbHNlCisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGRiMS52ZXJzaW9u
ICgiICsgZGIxLnZlcnNpb24gKyAiKSBtYXRjaGVzIGRiMy52ZXJzaW9uLiIpOworCisvLyBOb3cg
dHJ5IGEgdGVzdCB0byBlbnN1cmUgdGhlIHZlcnNpb24gcGVyc2lzdHMgYWZ0ZXIgcmVsb2FkaW5n
IChzZWUgYnVnIDI3ODM2KQorZGIxLmNoYW5nZVZlcnNpb24oRVhQRUNURURfVkVSU0lPTl9BRlRF
Ul9ISVhJRV9URVNULCBFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX1JFTE9BRCwKKyAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNx
bCgiRFJPUCBUQUJMRSBJRiBFWElTVFMgSW5mbyIpOworICAgICAgICAgICAgICAgICAgICAgIHR4
LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEluZm8gKFZlcnNpb24gSU5U
RUdFUikiKTsKKyAgICAgICAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5U
TyBJbmZvIFZBTFVFUyAoPykiLCBbRVhQRUNURURfVkVSU0lPTl9BRlRFUl9SRUxPQURdKTsKKyAg
ICAgICAgICAgICAgICAgIH0pOworCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMt
Mi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNv
dXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0yLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMi5q
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAordmFyIEVYUEVDVEVEX1ZFUlNJT05fQUZU
RVJfUkVMT0FEID0gJzMnOworCit2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJDaGFuZ2VWZXJz
aW9uVGVzdCIsICIiLCAiVGVzdCB0aGUgY2hhbmdlVmVyc2lvbigpIGZ1bmN0aW9uLiIsIDEpOwor
aWYgKGRiLnZlcnNpb24gPT0gRVhQRUNURURfVkVSU0lPTl9BRlRFUl9SRUxPQUQpCisgICAgcG9z
dE1lc3NhZ2UoIlBBU1M6IGRiLnZlcnNpb24gaXMgIiArIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJf
UkVMT0FEICsgIiBhcyBleHBlY3RlZC4iKTsKK2Vsc2UKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDog
ZGIudmVyc2lvbiBpcyAiICsgZGIudmVyc2lvbiArICI7IGV4cGVjdGVkICIgKyBFWFBFQ1RFRF9W
RVJTSU9OX0FGVEVSX1JFTE9BRCk7CisKKy8vIFJlc2V0IHRoZSB2ZXJzaW9uOyBvdGhlcndpc2Ug
dGhpcyB0ZXN0IHdpbGwgZmFpbCB0aGUgbmV4dCB0aW1lIGl0J3MgcnVuCitkYi5jaGFuZ2VWZXJz
aW9uKGRiLnZlcnNpb24sICIxIiwgZnVuY3Rpb24odHgpIHsgfSk7CisKK3Bvc3RNZXNzYWdlKCJk
b25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
ZW1wdHktc3RhdGVtZW50LXN5bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2VtcHR5LXN0YXRlbWVudC1zeW5jLmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2VtcHR5
LXN0YXRlbWVudC1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACit0cnkgewor
ICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkVtcHR5U3RhdGVtZW50U3luYyIsICIxLjAi
LCAiVGVzdCBhbiBlbXB0eSBzdGF0ZW1lbnQuIiwgMSk7CisgICAgZGIudHJhbnNhY3Rpb24oZnVu
Y3Rpb24odHgpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IHR4LmV4ZWN1dGVTcWwoIiIpOworICAg
ICAgICBwb3N0TWVzc2FnZShyZXN1bHQgPyAiRkFJTDogcmVzdWx0IGlzIG5vdCBudWxsIiA6ICJQ
QVNTOiByZXN1bHQgaXMgbnVsbCIpOworICAgIH0pOworICAgIHBvc3RNZXNzYWdlKCJQQVNTIik7
Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTCIpOworfQorCitwb3N0TWVz
c2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVz
b3VyY2VzL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBA
QAordmFyIHRocm93T25Ub1N0cmluZ09iamVjdCA9IHsgfTsKK3Rocm93T25Ub1N0cmluZ09iamVj
dC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBjYWxsIHRvU3RyaW5nIG9u
IHRoaXMgb2JqZWN0LiIgfTsKKwordmFyIHRocm93T25HZXRMZW5ndGhPYmplY3QgPSB7IH07Cit0
aHJvd09uR2V0TGVuZ3RoT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18oImxlbmd0aCIsIGZ1bmN0aW9u
ICgpIHsgdGhyb3cgIkNhbm5vdCBnZXQgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LiI7IH0pOworCit2
YXIgdGhyb3dPbkdldFplcm9PYmplY3QgPSB7IGxlbmd0aDogMSB9OwordGhyb3dPbkdldFplcm9P
YmplY3QuX19kZWZpbmVHZXR0ZXJfXygiMCIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBn
ZXQgMCBwcm9wZXJ0eSBvZiB0aGlzIG9iamVjdC4iOyB9KTsKKwordmFyIGV4cGVjdE5vRXhjZXB0
aW9uID0gWworICAgICciIicsCisgICAgJyIiLCBudWxsJywKKyAgICAnIiIsIHVuZGVmaW5lZCcs
CisgICAgJyIiLCBbXScsCisgICAgJyIiLCBbICJhcmcwIiBdJywKKyAgICAnIiIsIHsgfScsCisg
ICAgJyIiLCB7IGxlbmd0aDogMCB9JywKKyAgICAnIiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIg
fScsCitdOworCit2YXIgZXhwZWN0RXhjZXB0aW9uID0gWworICAgICcnLAorICAgICdudWxsJywK
KyAgICAndW5kZWZpbmVkJywKKyAgICAnMCcsCisgICAgJ3Rocm93T25Ub1N0cmluZ09iamVjdCcs
CisgICAgJyIiLCB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0JywKKyAgICAnIiIsIHRocm93T25HZXRa
ZXJvT2JqZWN0JywKKyAgICAnIiIsIFsgdGhyb3dPblRvU3RyaW5nT2JqZWN0IF0nLAorICAgICci
IiwgMCcsCisgICAgJyIiLCAiIicsCitdOworCitmdW5jdGlvbiB0cnlFeGVjdXRlU3FsKHRyYW5z
YWN0aW9uLCBwYXJhbWV0ZXJMaXN0KQoreworICAgIHRyeSB7CisgICAgICAgIGV2YWwoJ3RyYW5z
YWN0aW9uLmV4ZWN1dGVTcWwoJyArIHBhcmFtZXRlckxpc3QgKyAnKScpOworICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbjsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlv
biwgcGFyYW1ldGVyTGlzdCwgZXhwZWN0RXhjZXB0aW9uKQoreworICAgIHZhciBleGNlcHRpb24g
PSB0cnlFeGVjdXRlU3FsKHRyYW5zYWN0aW9uLCBwYXJhbWV0ZXJMaXN0KTsKKyAgICBpZiAoZXhw
ZWN0RXhjZXB0aW9uKSB7CisgICAgICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICAgICBwb3N0
TWVzc2FnZSgiUEFTUzogZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIHRocmV3IGFu
IGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9z
dE1lc3NhZ2UoIkZBSUw6IGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90
IHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoZXhjZXB0
aW9uKQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGV4ZWN1dGVTcWwoIiArIHBhcmFt
ZXRlckxpc3QgKyAiKSB0aHJldyBhbiBleGNlcHRpb246ICIgKyBleGNlcHRpb24pOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogZXhlY3V0ZVNxbCgiICsgcGFy
YW1ldGVyTGlzdCArICIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLiIpOworICAgIH0KK30K
KworZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0cyh0cmFuc2FjdGlvbikKK3sKKyAgICBmb3Ig
KGkgaW4gZXhwZWN0Tm9FeGNlcHRpb24pCisgICAgICAgIHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFu
c2FjdGlvbiwgZXhwZWN0Tm9FeGNlcHRpb25baV0sIGZhbHNlKTsKKyAgICBmb3IgKGkgaW4gZXhw
ZWN0RXhjZXB0aW9uKQorICAgICAgICBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIGV4
cGVjdEV4Y2VwdGlvbltpXSwgdHJ1ZSk7Cit9CisKK3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMo
IkV4ZWN1dGVTUUxBcmdzVGVzdCIsICIxLjAiLCAiVGVzdCBvZiBoYW5kbGluZyBvZiB0aGUgYXJn
dW1lbnRzIHRvIFNRTFRyYW5zYWN0aW9uU3luYy5leGVjdXRlU3FsIiwgMSk7CitkYi50cmFuc2Fj
dGlvbihydW5UcmFuc2FjdGlvblRlc3RzKTsKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZXNxbC1hY2Nl
cHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1v
bmUtc3RhdGVtZW50LXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRl
bWVudC1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACitmdW5jdGlvbiBleGVj
dXRlU3RhdGVtZW50KHR4LCBleHBlY3RlZFRvUGFzcywgc3RhdGVtZW50KQoreworICAgIHRyeSB7
CisgICAgICAgIHR4LmV4ZWN1dGVTcWwoc3RhdGVtZW50KTsKKyAgICAgICAgcG9zdE1lc3NhZ2Uo
ZXhwZWN0ZWRUb1Bhc3MgPyAiUEFTUzogIiArIHN0YXRlbWVudCA6ICJGQUlMOiAiICsgc3RhdGVt
ZW50KTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgcG9zdE1lc3NhZ2UoIWV4cGVjdGVk
VG9QYXNzID8gIlBBU1M6ICIgKyBzdGF0ZW1lbnQgOiAiRkFJTDogIiArIHN0YXRlbWVudCk7Cisg
ICAgfQorfQorCit2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJFeGVjdXRlU1FMQWNjZXB0c09u
bHlPbmVTdGF0ZW1lbnRUZXN0IiwgIjEuMCIsICIiLCAxKTsKK2RiLnRyYW5zYWN0aW9uKGZ1bmN0
aW9uKHR4KSB7CisgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg
VGVzdCAoRm9vIElOVCkiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCB0cnVlLCAiSU5TRVJU
IElOVE8gVGVzdCBWQUxVRVMgKDEpIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgdHJ1ZSwg
IklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgyKTsiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCB0cnVlLCAiICAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDMpICAgICIpOworICAgIGV4ZWN1
dGVTdGF0ZW1lbnQodHgsIHRydWUsICIgICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoNCk7ICAg
Iik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgdHJ1ZSwgIklOU0VSVCBJTlRPIFRlc3QgVkFM
VUVTICg1KSAgIDsiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCBmYWxzZSwgIklOU0VSVCBJ
TlRPIFRlc3QgVkFMVUVTICg2KTsgZ2FyYmFnZSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
IGZhbHNlLCAiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDcpOyBJTlNFUlQgSU5UTyBUZXN0IFZB
TFVFUyAoOCkiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCBmYWxzZSwgIiAgSU5TRVJUIElO
VE8gVGVzdCBWQUxVRVMgKDkpOyAgIElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgxMCk7ICAgIik7
Cit9KTsKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1o
YW5kbGVzLXN5bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxl
cy1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1z
eW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACitmdW5jdGlvbiBydW5UcmFuc2Fj
dGlvbihkYikKK3sKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgIC8v
IEV4ZWN1dGUgYSByZWFkLW9ubHkgc3RhdGVtZW50CisgICAgICAgdHguZXhlY3V0ZVNxbCgiU0VM
RUNUIENPVU5UKCopIEZST00gVGVzdDsiKTsKKworICAgICAgIC8vIEV4ZWN1dGUgYSB3cml0ZSBz
dGF0ZW1lbnQgdG8gbWFrZSBzdXJlIFNRTGl0ZSB0cmllcyB0byBhY3F1aXJlIGFuIGV4Y2x1c2l2
ZSBsb2NrIG9uIHRoZSBEQiBmaWxlCisgICAgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8g
VGVzdCBWQUxVRVMgKD8pOyIsIFsxXSk7CisgICAgfSk7Cit9CisKK3ZhciBkYjEgPSBvcGVuRGF0
YWJhc2VTeW5jKCJNdWx0aXBsZVRyYW5zYWN0aW9uc09uRGlmZmVyZW50SGFuZGxlc1Rlc3QiLCAi
MS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0IHRyYW5zYWN0aW9ucyBvbiBk
aWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBEQi4iLCAxKTsKK2RiMS50cmFuc2FjdGlvbihm
dW5jdGlvbih0eCkgeworICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJ
U1RTIFRlc3QgKEZvbyBpbnQpOyIpOworfSk7CisKK3ZhciBkYjIgPSBvcGVuRGF0YWJhc2VTeW5j
KCJNdWx0aXBsZVRyYW5zYWN0aW9uc09uRGlmZmVyZW50SGFuZGxlc1Rlc3QiLCAiMS4wIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0IHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQg
aGFuZGxlcyB0byB0aGUgc2FtZSBEQi4iLCAxKTsKK2lmIChkYjEgPT0gZGIyKQorICAgIHBvc3RN
ZXNzYWdlKCJGQUlMOiBkYjEgPT0gZGIyIik7CitlbHNlIHsKKyAgICB0cnkgeworICAgICAgICBy
dW5UcmFuc2FjdGlvbihkYjEpOworICAgICAgICBydW5UcmFuc2FjdGlvbihkYjIpOworICAgICAg
ICBwb3N0TWVzc2FnZSgiUEFTUyIpOworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICBwb3N0
TWVzc2FnZSgiRkFJTDogIiArIGVycik7CisgICAgfQorfQorCitwb3N0TWVzc2FnZSgiZG9uZSIp
OwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRp
cGxlLXRyYW5zYWN0aW9ucy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtc3luYy5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
MiBAQAordmFyIGNvbXBsZXRlID0gMDsKKworZnVuY3Rpb24gY2hlY2tDb21wbGV0aW9uKCkKK3sK
KyAgICBpZiAoKytjb21wbGV0ZSA9PSAyICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlv
biBydW5UZXN0KCkKK3sKKyAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2VXaXRoU3VmZml4KCJNdWx0
aXBsZVRyYW5zYWN0aW9uc1Rlc3QiLCAiMS4wIiwgIlRlc3QgdG8gbWFrZSBzdXJlIG11bHRpcGxl
IHRyYW5zYWN0aW9ucyBjYW4gYmUgcXVldWVkIGF0IG9uY2UgZm9yIGFuIEhUTUw1IGRhdGFiYXNl
IiwgMzI3NjgpOworCisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAg
bG9nKCJUcmFuc2FjdGlvbiAxIFN0YXJ0ZWQiKTsKKyAgICB9LCBmdW5jdGlvbihlcnIpIHsKKyAg
ICAgICAgbG9nKCJUcmFuc2FjdGlvbiAxIEVycm9yZWQgLSAiICsgZXJyKTsKKyAgICAgICAgY2hl
Y2tDb21wbGV0aW9uKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygiVHJhbnNh
Y3Rpb24gMSBTdWNjZWVkZWQiKTsKKyAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgfSk7
CisKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICBsb2coIlRyYW5z
YWN0aW9uIDIgU3RhcnRlZCIpOworICAgIH0sIGZ1bmN0aW9uKGVycikgeworICAgICAgICBsb2co
IlRyYW5zYWN0aW9uIDIgRXJyb3JlZCAtICIgKyBlcnIpOworICAgICAgICBjaGVja0NvbXBsZXRp
b24oKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiAyIFN1
Y2NlZWRlZCIpOworICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsKKyAgICB9KTsKK30KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNl
LWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJh
Y2stc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMuanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK3ZhciBjcmVhdGlvbkNhbGxiYWNrQ2FsbGVkMSA9
IGZhbHNlOwordmFyIGRiMU5hbWUgPSAiT3BlbkRhdGFiYXNlQ3JlYXRpb25DYWxsYmFjazEiICsg
KG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKK3ZhciBkYjJOYW1lID0gIk9wZW5EYXRhYmFzZUNyZWF0
aW9uQ2FsbGJhY2syIiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7Cit2YXIgZGIxID0gb3BlbkRh
dGFiYXNlU3luYyhkYjFOYW1lLCAiMS4wIiwgIiIsIDEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbihkYikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RN
ZXNzYWdlKCJQQVNTOiBDcmVhdGlvbiBjYWxsYmFjayB3YXMgY2FsbGVkLiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChkYi52ZXJzaW9uICE9ICIiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogV3JvbmcgdmVyc2lvbiAi
ICsgZGIudmVyc2lvbiArICI7IGVtcHR5IHN0cmluZyBleHBlY3RlZC4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBWZXJzaW9uIHNldCB0byBlbXB0eSBzdHJpbmcgYXMgZXhw
ZWN0ZWQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKwordmFyIGRiMUZhaWwg
PSBudWxsOwordHJ5IHsKKyAgICBkYjFGYWlsID0gb3BlbkRhdGFiYXNlU3luYyhkYjFOYW1lLCAi
MS4wIiwgIiIsIDEpOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBBbiBJTlZBTElEX1NUQVRFX0VS
UiBleGNlcHRpb24gc2hvdWxkJ3ZlIGJlZW4gdGhyb3duLiIpOworfSBjYXRjaChlcnIpIHsKKyAg
ICBpZiAoZGIxRmFpbCkKKyAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGRiMUZhaWwgc2hvdWxk
IGhhdmUgYmVlbiBudWxsLiIpOworICAgIGVsc2UKKyAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6
IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGFuZCBkYjFGYWlsIGlzIG51bGwgYXMgZXhwZWN0ZWQu
Iik7Cit9CisKKy8vIE9wZW4gYSBoYW5kbGUgdG8gYW5vdGhlciBkYXRhYmFzZSwgZmlyc3Qgd2l0
aG91dCBhIGNyZWF0aW9uIGNhbGxiYWNrLCB0aGVuIHdpdGggb25lLgorLy8gTWFrZSBzdXJlIHRo
ZSBjcmVhdGlvbiBjYWxsYmFjayBpcyBub3QgY2FsbGVkLgordmFyIGRiMiA9IG9wZW5EYXRhYmFz
ZVN5bmMoZGIyTmFtZSwgIjEuMCIsICIiLCAxKTsKK2RiMiA9IG9wZW5EYXRhYmFzZVN5bmMoZGIy
TmFtZSwgIjEuMCIsICIiLCAxLCBmdW5jdGlvbihkYikgeyBwb3N0TWVzc2FnZSgiRkFJTDogQ3Jl
YXRpb24gY2FsbGJhY2sgc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2FsbGVkLiIpOyB9KTsKKworcG9z
dE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9u
LXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAordHJ5IHsKKyAgICB2YXIgZGIg
PSBvcGVuRGF0YWJhc2VTeW5jKCJPcGVuRGF0YWJhc2VFbXB0eVZlcnNpb25UZXN0IiwgIiIsICJU
ZXN0IHRoYXQgd2UgY2FuIG9wZW4gZGF0YWJhc2VzIHdpdGggYW4gZW1wdHkgdmVyc2lvbi4iLCAx
KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUyIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1l
c3NhZ2UoIkZBSUw6ICIgKyBlcnIpOworfQorcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWlu
cHV0cy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmpzCShyZXZpc2lvbiA2MjIz
MCkJKGZyb20gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4t
ZGF0YWJhc2Utc3luYy1pbnB1dHMuanM6NjIyMzApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACit2YXIgZGI7CisKK3ZhciBub3RBU3RyaW5nID0gewor
ICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsgdGhyb3cgImZvbyI7IH0KK307CisKK3RyeSB7Cisg
ICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCk7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNhbGxp
bmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGhvdXQgYW55IGFyZ3VtZW50IHNob3VsZCB0aHJvdyBh
biBleGNlcHRpb24uIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzog
IiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMo
IkRCTmFtZSIsICJEQlZlcnNpb24iKTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogY2FsbGluZyBv
cGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBmZXdlciB0aGFuIGZvdXIgYXJndW1lbnRzIHNob3VsZCB0
aHJvdyBhbiBleGNlcHRpb24uIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgi
UEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFz
ZVN5bmMobm90QVN0cmluZywgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7Cisg
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBmaXJzdCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VT
eW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNz
YWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCit0cnkgeworICAgIGRiID0gb3BlbkRh
dGFiYXNlU3luYygiREJOYW1lIiwgbm90QVN0cmluZywgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsK
KyAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIHNlY29uZCBhcmd1bWVudCB0byBvcGVuRGF0YWJh
c2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RN
ZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCit0cnkgeworICAgIGRiID0gb3Bl
bkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsIG5vdEFTdHJpbmcsIDEwMjQpOwor
ICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgdGhpcmQgYXJndW1lbnQgdG8gb3BlbkRhdGFiYXNl
U3luYygpIG11c3QgYmUgYSBzdHJpbmcuIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVz
c2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsKKyAgICBkYiA9IG9wZW5E
YXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQs
IDApOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgZmlmdGggYXJndW1lbnQgdG8gb3BlbkRh
dGFiYXNlU3luYygpIG11c3QgYmUgYW4gb2JqZWN0LCBpZiBwcmVzZW50LiIpOworfSBjYXRjaCAo
ZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3Ry
eSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRC
RGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNl
U3luYygpIHN1Y2NlZWRlZC4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJG
QUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCisvLyBSdW4gdGhpcyB0ZXN0IGNhc2Ugb25lIG1v
cmUgdGltZSwgdG8gdGVzdCB0aGUgY29kZSB3aXRoIGFuIGV4aXN0aW5nIGRhdGFiYXNlLgordHJ5
IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJE
ZXNjcmlwdGlvbiIsIDEwMjQpOworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBvcGVuRGF0YWJhc2VT
eW5jKCkgc3VjY2VlZGVkLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZB
SUw6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgLy8gTmVlZCB0byBjcmVhdGUg
YSBuZXcgZGF0YWJhc2UsIG90aGVyd2lzZSB0aGUgY3JlYXRpb24gY2FsbGJhY2sgd29uJ3QgYmUg
aW52b2tlZC4KKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZUNyZWF0aW9uQ2FsbGJh
Y2siICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9u
IiwgMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZGIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBjYWxsaW5nIG9wZW5E
YXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sgc3VjY2VlZGVkLiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNz
YWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0
YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHkt
dmVyc2lvbi1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5q
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACit2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5j
KCJPcGVuRGF0YWJhc2VTZXRFbXB0eVZlcnNpb25UZXN0IiwgIiIsICJUZXN0IHRoYXQgdGhlIERC
IHZlcnNpb24gaXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcuIiwgMSk7CisKK3RyeSB7CisgICAg
dmFyIGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoIk9wZW5EYXRhYmFzZVNldEVtcHR5VmVyc2lvblRl
c3QiLCAidGVzdCIsICJUZXN0IHRoYXQgdGhlIERCIHZlcnNpb24gaXMgc2V0IHRvIHRoZSBlbXB0
eSBzdHJpbmcuIiwgMSk7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IEFuIGV4Y2VwdGlvbiBzaG91
bGQndmUgYmVlbiB0aHJvd24uIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgi
UEFTUyIpOworfQorcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9v
cGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCShyZXZpc2lvbiA2MjczNCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5w
dXRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLXZhciBkYjsKLQotdmFyIG5v
dEFTdHJpbmcgPSB7Ci0gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgeyB0aHJvdyAiZm9vIjsgfQot
fTsKLQotdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoKTsKLSAgICBwb3N0TWVzc2Fn
ZSgiRkFJTDogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aG91dCBhbnkgYXJndW1lbnQg
c2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKLX0gY2F0Y2ggKGVycikgewotICAgIHBvc3RN
ZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi10cnkgewotICAgIGRiID0gb3Bl
bkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIpOwotICAgIHBvc3RNZXNzYWdlKCJG
QUlMOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGZld2VyIHRoYW4gZm91ciBhcmd1
bWVudHMgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKLX0gY2F0Y2ggKGVycikgewotICAg
IHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi10cnkgewotICAgIGRi
ID0gb3BlbkRhdGFiYXNlU3luYyhub3RBU3RyaW5nLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRp
b24iLCAxMDI0KTsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIGZpcnN0IGFyZ3VtZW50IHRv
IG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEgc3RyaW5nLiIpOwotfSBjYXRjaCAoZXJyKSB7
Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0g
ICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCBub3RBU3RyaW5nLCAiREJEZXNjcmlw
dGlvbiIsIDEwMjQpOwotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgc2Vjb25kIGFyZ3VtZW50
IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEgc3RyaW5nLiIpOwotfSBjYXRjaCAoZXJy
KSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7
Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgbm90QVN0
cmluZywgMTAyNCk7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSB0aGlyZCBhcmd1bWVudCB0
byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKLX0gY2F0Y2ggKGVycikg
ewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi10cnkgewot
ICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2Ny
aXB0aW9uIiwgMTAyNCwgMCk7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBmaWZ0aCBhcmd1
bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhbiBvYmplY3QsIGlmIHByZXNlbnQu
Iik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNz
YWdlKTsKLX0KLQotdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJE
QlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwotICAgIHBvc3RNZXNzYWdlKCJQQVNT
OiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAg
cG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Ci19Ci0KLS8vIFJ1biB0aGlzIHRl
c3QgY2FzZSBvbmUgbW9yZSB0aW1lLCB0byB0ZXN0IHRoZSBjb2RlIHdpdGggYW4gZXhpc3Rpbmcg
ZGF0YWJhc2UuCi10cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRC
VmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6
IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuIik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBw
b3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5IHsKLSAgICAvLyBO
ZWVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhYmFzZSwgb3RoZXJ3aXNlIHRoZSBjcmVhdGlvbiBjYWxs
YmFjayB3b24ndCBiZSBpbnZva2VkLgotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1l
Q3JlYXRpb25DYWxsYmFjayIgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpLCAiREJWZXJzaW9uIiwg
IkRCRGVzY3JpcHRpb24iLCAxMDI0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlv
bihkYikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6
IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGggYSBjcmVhdGlvbiBjYWxsYmFjayBzdWNj
ZWVkZWQuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotfSBjYXRjaCAoZXJyKSB7
Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Ci19Ci0KLXBvc3RNZXNz
YWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNv
dXJjZXMvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMuanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmpzCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiBvcGVuVGVzdERhdGFiYXNlKCkKK3sK
KyAgICByZXR1cm4gb3BlbkRhdGFiYXNlU3luYygiT3BlbkRhdGFiYXNlV2hpbGVUcmFuc2FjdGlv
bkluUHJvZ3Jlc3NUZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMS4wIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdCB0byBtYWtlIHN1cmUgdGhhdCBjYWxsaW5n
IG9wZW5EYXRhYmFzZSgpIHdoaWxlIGEgdHJhbnNhY3Rpb24gaXMgaW4gcHJvZ3Jlc3Mgb24gYSBk
aWZmZXJlbnQgaGFuZGxlIHRvIHRoZSBzYW1lIGRhdGFiYXNlIGRvZXMgbm90IHJlc3VsdCBpbiBh
IGRlYWRsb2NrLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEwMDAwMCk7IC8vIDJN
QiArIGVwc2lsb24KK30KKworLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yODIwNworLy8gSW4gb3JkZXIgdG8gdHJpZ2dlciB0aGlzIGJ1ZywgdGhlIHRyYW5z
YWN0aW9uIG11c3QgYWNxdWlyZSBhbiBleGNsdXNpdmUKKy8vIGxvY2sgb24gdGhlIERCIGZpbGUg
YmVmb3JlIHRyeWluZyB0byBvYnRhaW4gYSBzZWNvbmQgaGFuZGxlIHRvIHRoZSBzYW1lIERCLgor
Ly8gVGhlIG9ubHkgd2F5IHRvIGZvcmNlIFNRTGl0ZSB0byBvYnRhaW4gYW4gZXhjbHVzaXZlIGxv
Y2sgaXMgdG8gY2hhbmdlIG1vcmUKKy8vIHRoYW4gY2FjaGVfc2l6ZSAqIHBhZ2Vfc2l6ZSBieXRl
cyBpbiB0aGUgZGF0YWJhc2UuIFRoZSBkZWZhdWx0IHZhbHVlIGZvcgorLy8gY2FjaGVfc2l6ZSBp
cyAyMDAwIHBhZ2VzLCBhbmQgdGhlIGRlZmF1bHQgcGFnZV9zaXplIGlzIDEwMjQgYnl0ZXMuIFNv
IHRoZQorLy8gc2l6ZSBvZiB0aGUgYmxvYiBtdXN0IGJlIGF0IGxlYXN0IDJNQi4KK3ZhciBkYjEg
PSBvcGVuVGVzdERhdGFiYXNlKCk7CitkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAg
ICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBUZXN0IChGb28gQkxP
Qik7Iik7CisgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKFpFUk9C
TE9CKDIwOTcxNTIpKTsiKTsKKyAgICB2YXIgZGIyID0gb3BlblRlc3REYXRhYmFzZSgpOworICAg
IHBvc3RNZXNzYWdlKCJQQVNTOiBzZWNvbmQgaGFuZGxlIG9wZW5lZCBzdWNjZXNzZnVsbHkuIik7
CisKKyAgICAvLyBDbGVhbiB1cCB0aGUgREIgdG8gYWxsb3cgZm9yIHJlcGVhdGVkIHJ1bnMgb2Yg
dGhpcyB0ZXN0CisgICAgLy8gd2l0aG91dCBuZWVkaW5nIHRvIGluY3JlYXNlIHRoZSBkZWZhdWx0
IGFsbG93ZWQgcXVvdGEgKDVNQikKKyAgICB0eC5leGVjdXRlU3FsKCJERUxFVEUgRlJPTSBUZXN0
OyIpOworfSk7CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvc3FsLWRhdGEtdHlwZXMtc3luYy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvc3FsLWRh
dGEtdHlwZXMtc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL3Jlc291cmNlcy9zcWwtZGF0YS10eXBlcy1zeW5jLmpzCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM2IEBACit2YXIgdGVzdFZhbHVlcyA9IHsKKyAgICB0aW1lc3RhbXA6IG5ldyBE
YXRlKCJXZWQgRmViIDA2IDIwMDggMTI6MTY6NTIgR01UKzAyMDAgKEVFVCkiKS52YWx1ZU9mKCks
CisgICAgaWQ6IDEwMDEsCisgICAgcmVhbDogMTAxLjQ0NCwKKyAgICB0ZXh0OiAiV2ViS2l0IGRi
IFRFWFQiLAorICAgIGJsb2I6ICJzdXBlcmNhbGlmcmFnaWxpc3RpYyIKK307CisKK2Z1bmN0aW9u
IHNob3VsZEJlU2FtZVR5cGVBbmRWYWx1ZShwcm9wTmFtZSwgdGVzdFZhbHVlLCByZXN1bHQpIHsK
KyAgICBpZiAodGVzdFZhbHVlID09IHJlc3VsdCAmJiB0eXBlb2YgdGVzdFZhbHVlID09IHR5cGVv
ZiByZXN1bHQpCisgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBwcm9wZXJ0eSAnIiArIHByb3BO
YW1lICsgIicgT0ssIHR5cGUgd2FzICIgKyB0eXBlb2YgcmVzdWx0KTsKKyAgICBlbHNlCisgICAg
ICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBwcm9wZXJ0eSAnIiArIHByb3BOYW1lICsgIicgZmFpbGVk
OyAiICsKKyAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICIgKyB0eXBlb2YgdGVzdFZhbHVl
ICsgIjonIiArIHRlc3RWYWx1ZSArICInLCAiICsKKyAgICAgICAgICAgICAgICAgICAgImdvdCAi
ICsgdHlwZW9mIHJlc3VsdCArICI6JyIgKyByZXN1bHQgKyInIik7Cit9CisKK2Z1bmN0aW9uIHRl
c3REQlZhbHVlcyhyZXN1bHQpIHsKKyAgICB2YXIgaSA9ICJ0aW1lc3RhbXAiOyBzaG91bGRCZVNh
bWVUeXBlQW5kVmFsdWUoaSwgdGVzdFZhbHVlc1tpXSwgcmVzdWx0W2ldKTsKKyAgICBpID0gImlk
Ijsgc2hvdWxkQmVTYW1lVHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7
CisgICAgaSA9ICJyZWFsIjsgc2hvdWxkQmVTYW1lVHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNb
aV0sIHJlc3VsdFtpXSk7CisgICAgaSA9ICJ0ZXh0Ijsgc2hvdWxkQmVTYW1lVHlwZUFuZFZhbHVl
KGksIHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7CisgICAgaSA9ICJibG9iIjsgc2hvdWxkQmVT
YW1lVHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7Cit9CisKK3ZhciBk
YiA9IG9wZW5EYXRhYmFzZVN5bmMoIlNRTERhdGFUeXBlc1Rlc3QiLCAiMS4wIiwgIkRhdGFiYXNl
IGZvciBTUUwgZGF0YSB0eXBlIHRlc3QiLCAxKTsKK2RiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4
KSB7CisgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgRGF0YVR5
cGVUZXN0VGFibGUgKGlkIElOVEVHRVIgVU5JUVVFLCByZWFsIFJFQUwsIHRpbWVzdGFtcCBJTlRF
R0VSLCB0ZXh0IFRFWFQsIGJsb2IgQkxPQikiKTsKKyAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQg
SU5UTyBEYXRhVHlwZVRlc3RUYWJsZSAoaWQsIHJlYWwsIHRpbWVzdGFtcCwgdGV4dCwgYmxvYikg
VkFMVUVTICg/LD8sPyw/LD8pIiwKKyAgICAgICAgICAgICAgICAgIFt0ZXN0VmFsdWVzLmlkLCB0
ZXN0VmFsdWVzLnJlYWwsIHRlc3RWYWx1ZXMudGltZXN0YW1wLCB0ZXN0VmFsdWVzLnRleHQsIHRl
c3RWYWx1ZXMuYmxvYl0pOworICAgIHZhciByZXN1bHQgPSB0eC5leGVjdXRlU3FsKCJTRUxFQ1Qg
KiBGUk9NIERhdGFUeXBlVGVzdFRhYmxlIik7CisgICAgdGVzdERCVmFsdWVzKHJlc3VsdC5yb3dz
Lml0ZW0oMCkpOworICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgVEFCTEUgRGF0YVR5cGVUZXN0VGFi
bGUiKTsKK30pOworCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
c3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5q
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NiBAQAordmFyIGRiTmFtZSA9ICJTUUxFeGNlcHRp
b25Db2Rlc1Rlc3QiICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKKworZnVuY3Rpb24gdGVzdFRy
YW5zYWN0aW9uKGRiLCBleGVjdXRlU3RhdGVtZW50c0NhbGxiYWNrLCBleHBlY3RlZEVycm9yQ29k
ZU5hbWUpCit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgIGV4ZWN1dGVTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpOworICAgICAgICAg
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGFuIGV4Y2VwdGlvbiAoIiArIGV4cGVjdGVkRXJyb3JDb2Rl
TmFtZSArICIpIHNob3VsZCd2ZSBiZWVuIHRocm93bi4iKTsKKyAgICAgICAgfSBjYXRjaCAoZXJy
KSB7CisgICAgICAgICAgICBpZiAoZXJyLmNvZGUgPT0gZXJyW2V4cGVjdGVkRXJyb3JDb2RlTmFt
ZV0pCisgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGV4cGVjdGVkIGFuZCBnb3Qg
ZXJyb3IgY29kZSAiICsgZXhwZWN0ZWRFcnJvckNvZGVOYW1lKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogZXhwZWN0ZWQgZXJyb3IgY29kZSAi
ICsgZXhwZWN0ZWRFcnJvckNvZGVOYW1lICsgIiAoIiArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyW2V4cGVjdGVkRXJyb3JDb2RlTmFtZV0gKyAiKSwgZ290ICIgKyBlcnIuY29kZSk7
CisgICAgICAgIH0KKyAgICAgIH0pOworfQorCitmdW5jdGlvbiB0ZXN0VHJhbnNhY3Rpb25UaHJv
d3NFeGNlcHRpb24oZGIpCit7CisgICAgdGVzdFRyYW5zYWN0aW9uKGRiLCBmdW5jdGlvbih0eCkg
eyB0aHJvdyAiRXhjZXB0aW9uIHRocm93biBpbiB0cmFuc2FjdGlvbiBjYWxsYmFjay4iOyB9LCAi
VU5LTk9XTl9FUlIiKTsKK30KKworZnVuY3Rpb24gdGVzdEludmFsaWRTdGF0ZW1lbnQoZGIpCit7
CisgICAgdGVzdFRyYW5zYWN0aW9uKGRiLCBmdW5jdGlvbih0eCkgeyB0eC5leGVjdXRlU3FsKCJC
QUQgU1RBVEVNRU5UIik7IH0sICJTWU5UQVhfRVJSIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RJbmNv
cnJlY3ROdW1iZXJPZkJpbmRQYXJhbWV0ZXJzKGRiKQoreworICAgIHRlc3RUcmFuc2FjdGlvbihk
YiwKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEJhZEJpbmRO
dW1iZXJUZXN0IChGb28gSU5ULCBCYXIgSU5UKSIpOworICAgICAgICAgICAgICAgICAgICAgICAg
dHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8gQmFkQmluZE51bWJlclRlc3QgVkFMVUVTICg/LCA/
KSIsIFsxXSk7CisgICAgICAgICAgICAgICAgICAgIH0sICJTWU5UQVhfRVJSIik7Cit9CisKK2Z1
bmN0aW9uIHRlc3RCaW5kUGFyYW1ldGVyT2ZXcm9uZ1R5cGUoZGIpCit7CisgICAgdmFyIGJhZFN0
cmluZyA9IHsgfTsKKyAgICBiYWRTdHJpbmcudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgdGhyb3cg
IkNhbm5vdCBjYWxsIHRvU3RyaW5nKCkgb24gdGhpcyBvYmplY3QuIiB9OworCisgICAgdGVzdFRy
YW5zYWN0aW9uKGRiLCBmdW5jdGlvbih0eCkgeworICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVB
VEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBCYWRCaW5kVHlwZVRlc3QgKEZvbyBURVhUKSIpOworICAg
ICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBCYWRCaW5kVHlwZVRlc3QgVkFMVUVTICg/
KSIsIFtiYWRTdHJpbmddKTsKKyAgICB9LCAiVU5LTk9XTl9FUlIiKTsKK30KKworZnVuY3Rpb24g
dGVzdFF1b3RhRXhjZWVkZWQoZGIpCit7CisgICAgLy8gU29tZXRpbWVzLCBTUUxpdGUgYXV0b21h
dGljYWxseSByb2xscyBiYWNrIGEgdHJhbnNhY3Rpb24gaWYgZXhlY3V0aW5nIGEgc3RhdGVtZW50
IGZhaWxzLgorICAgIC8vIFRoaXMgc2VlbXMgdG8gYmUgb25lIG9mIHRob3NlIGNhc2VzLgorICAg
IHRyeSB7CisgICAgICAgIHRlc3RUcmFuc2FjdGlvbihkYiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0
ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgUXVvdGFUZXN0IChGb28gQkxPQikiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBR
dW90YVRlc3QgVkFMVUVTIChaRVJPQkxPQigxMCAqIDEwMjQgKiAxMDI0KSkiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0sICJRVU9UQV9FUlIiKTsKKyAgICAgICAgcG9zdE1lc3NhZ2UoIkZB
SUw6IFRyYW5zYWN0aW9uIHNob3VsZCd2ZSBiZWVuIHJvbGxlZCBiYWNrIGJ5IFNRTGl0ZS4iKTsK
KyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgaWYgKGVyci5jb2RlID09IGVyclsiREFUQUJB
U0VfRVJSIl0pCisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogVHJhbnNhY3Rpb24gd2Fz
IHJvbGxlZCBiYWNrIGJ5IFNRTGl0ZSBhcyBleHBlY3RlZC4iKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IEFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdhcyB0
aHJvd246ICIgKyBlcnIpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdFZlcnNpb25NaXNtYXRj
aChkYikKK3sKKyAgICB2YXIgZGIyID0gb3BlbkRhdGFiYXNlU3luYyhkYk5hbWUsICIxLjAiLCAi
VGVzdHMgdGhlIGVycm9yIGNvZGVzLiIsIDEpOworICAgIGRiMi5jaGFuZ2VWZXJzaW9uKCIxLjAi
LCAiMi4wIiwgZnVuY3Rpb24odHgpIHsgfSk7CisgICAgdGVzdFRyYW5zYWN0aW9uKGRiLAorICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dHguZXhlY3V0ZVNxbCgiVEhJUyBTVEFURU1FTlQgU0hPVUxEIE5FVkVSIEdFVCBFWEVDVVRFRCIp
OworICAgICAgICAgICAgICAgICAgICB9LCAiVkVSU0lPTl9FUlIiKTsKK30KKwordmFyIGRiID0g
b3BlbkRhdGFiYXNlU3luYyhkYk5hbWUsICIxLjAiLCAiVGVzdHMgdGhlIGV4Y2VwdGlvbiBjb2Rl
cy4iLCAxKTsKK3Rlc3RUcmFuc2FjdGlvblRocm93c0V4Y2VwdGlvbihkYik7Cit0ZXN0SW52YWxp
ZFN0YXRlbWVudChkYik7Cit0ZXN0SW5jb3JyZWN0TnVtYmVyT2ZCaW5kUGFyYW1ldGVycyhkYik7
Cit0ZXN0QmluZFBhcmFtZXRlck9mV3JvbmdUeXBlKGRiKTsKK3Rlc3RRdW90YUV4Y2VlZGVkKGRi
KTsKK3Rlc3RWZXJzaW9uTWlzbWF0Y2goZGIpOworCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3Rlc3QtYXV0aG9y
aXplci1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL3Jlc291cmNlcy90ZXN0LWF1dGhvcml6ZXItc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90ZXN0LWF1dGhvcml6ZXIt
c3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjYgQEAKK2Z1bmN0aW9uIGNsZWFudXAo
ZGIpCit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIHR4
LmV4ZWN1dGVTcWwoIkRST1AgVEFCTEUgSUYgRVhJU1RTIFRlc3QiKTsKKyAgICAgICAgICAgIHR4
LmV4ZWN1dGVTcWwoIkRST1AgSU5ERVggSUYgRVhJU1RTIFRlc3RJbmRleCIpOworICAgICAgICAg
ICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBWSUVXIElGIEVYSVNUUyBUZXN0VmlldyIpOworICAgICAg
ICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBUUklHR0VSIElGIEVYSVNUUyBUZXN0VHJpZ2dlciIp
OworICAgIH0pOworfQorCitmdW5jdGlvbiBleGVjdXRlU3RhdGVtZW50KHR4LCBzdGF0ZW1lbnQs
IG9wZXJhdGlvbikKK3sKKyAgICB0cnkgeworICAgICAgICB0eC5leGVjdXRlU3FsKHN0YXRlbWVu
dCk7CisgICAgICAgIHBvc3RNZXNzYWdlKG9wZXJhdGlvbiArICIgc3RhdGVtZW50IHN1Y2NlZWRl
ZC4iKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgcG9zdE1lc3NhZ2Uob3BlcmF0aW9u
ICsgIiBzdGF0ZW1lbnQgZmFpbGVkOiAiICsgZXJyICsgIiAoIiArIGVyci5jb2RlICsgIikiKTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRhYmxlQ2FsbGJhY2sodHgpCit7CisgICAgZXhl
Y3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBUQUJMRSBUZXN0IChGb28gaW50KSIsICJTUUxJVEVf
Q1JFQVRFX1RBQkxFIik7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayh0
eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIElOREVYIFRlc3RJbmRleCBP
TiBUZXN0IChGb28pIiwgIlNRTElURV9DUkVBVEVfSU5ERVgiKTsKKworICAgIC8vIEV2ZW4gdGhv
dWdoIHRoZSBmb2xsb3dpbmcgcXVlcnkgc2hvdWxkIHRyaWdnZXIgYSBTUUxJVEVfQ1JFQVRFX1RF
TVBfSU5ERVggb3BlcmF0aW9uCisgICAgLy8gKGFjY29yZGluZyB0byBodHRwOi8vd3d3LnNxbGl0
ZS5vcmcvdGVtcGZpbGVzLmh0bWwpLCBpdCBkb2Vzbid0LCBhbmQgSSdtIG5vdCBhd2FyZQorICAg
IC8vIG9mIGFueSBvdGhlciB3YXkgdG8gdHJpZ2dlciB0aGlzIG9wZXJhdGlvbi4gU28gd2UnbGwg
c2tpcCBpdCBmb3Igbm93LgorICAgIC8vZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCAqIEZS
T00gVGVzdCBXSEVSRSBGb28gSU4gKDEsIDIsIDMpIiwgIlNRTElURV9DUkVBVEVfVEVNUF9JTkRF
WCIpOworCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBURU1QIFRBQkxFIFRlc3RU
ZW1wVGFibGUgKEZvbyBpbnQpIiwgIlNRTElURV9DUkVBVEVfVEVNUF9UQUJMRSIpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBUUklHR0VSIFRlc3RUZW1wVHJpZ2dlciBJ
TlNFUlQgT04gVGVzdCBCRUdJTiBTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyBFTkQiLCAiU1FM
SVRFX0NSRUFURV9URU1QX1RSSUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JF
QVRFIFRFTVAgVklFVyBUZXN0VGVtcFZpZXcgQVMgU0VMRUNUIENPVU5UKCopIEZST00gVGVzdCIs
ICJTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJD
UkVBVEUgVFJJR0dFUiBUZXN0VHJpZ2dlciBJTlNFUlQgT04gVGVzdCBCRUdJTiBTRUxFQ1QgQ09V
TlQoKikgRlJPTSBUZXN0OyBFTkQiLCAiU1FMSVRFX0NSRUFURV9UUklHR0VSIik7CisgICAgZXhl
Y3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBWSUVXIFRlc3RWaWV3IEFTIFNFTEVDVCBDT1VOVCgq
KSBGUk9NIFRlc3QiLCAiU1FMSVRFX0NSRUFURV9WSUVXIik7CisKKyAgICAvLyBXZSBzaG91bGQg
dHJ5IHRvIGNyZWF0ZSBhIHZpcnR1YWwgdGFibGUgdXNpbmcgZnRzMywgd2hlbiBXZWJLaXQncyBz
cWxpdGUgbGlicmFyeSBzdXBwb3J0cyBpdC4KKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JF
QVRFIFZJUlRVQUwgVEFCTEUgVGVzdFZpcnR1YWxUYWJsZSBVU0lORyBVbnN1cHBvcnRlZE1vZHVs
ZSIsICJTUUxJVEVfQ1JFQVRFX1ZUQUJMRSIpOworfQorCitmdW5jdGlvbiBvdGhlclN0YXRlbWVu
dHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiU0VMRUNUIENPVU5U
KCopIEZST00gVGVzdCIsICJTUUxJVEVfUkVBRCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0IiwgIlNRTElURV9TRUxFQ1QiKTsKKyAgICBleGVj
dXRlU3RhdGVtZW50KHR4LCAiREVMRVRFIEZST00gVGVzdCIsICJTUUxJVEVfREVMRVRFIik7Cisg
ICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgxKSIsICJT
UUxJVEVfSU5TRVJUIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlVQREFURSBUZXN0IFNF
VCBGb28gPSAyIFdIRVJFIEZvbyA9IDEiLCAiU1FMSVRFX1VQREFURSIpOworICAgIGV4ZWN1dGVT
dGF0ZW1lbnQodHgsICJQUkFHTUEgY2FjaGVfc2l6ZSIsICJTUUxJVEVfUFJBR01BIik7CisKKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQUxURVIgVEFCTEUgVGVzdCBSRU5BTUUgVE8gVGVzdFRh
YmxlIiwgIlNRTElURV9BTFRFUl9UQUJMRSIpOworICAgIC8vIFJlbmFtZSB0aGUgdGFibGUgYmFj
ayB0byBpdHMgb3JpZ2luYWwgbmFtZQorICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJBTFRFUiBU
QUJMRSBUZXN0VGFibGUgUkVOQU1FIFRvIFRlc3QiLCAiU1FMSVRFX0FMVEVSX1RBQkxFIik7CisK
KyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQkVHSU4gVFJBTlNBQ1RJT04iLCAiU1FMSVRFX1RS
QU5TQUNUSU9OIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFUVEFDSCBtYWluIEFTIFRl
c3RNYWluIiwgIlNRTElURV9BVFRBQ0giKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiREVU
QUNIIFRlc3RNYWluIiwgIlNRTElURV9ERVRBQ0giKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiUkVJTkRFWCIsICJTUUxJVEVfUkVJTkRFWCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJBTkFMWVpFIiwgIlNRTElURV9BTkFMWVpFIik7CisKKyAgICAvLyBTUUxJVEVfRlVOQ1RJT046
IGFsbG93ZWQgaW4gd3JpdGUgbW9kZQorICAgIC8vIFRoZXJlIGlzIG5vIFNRTC9KYXZhc2NyaXB0
IEFQSSB0byBhZGQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyB0byBTUUxpdGUsCisgICAgLy8gc28g
d2UgY2Fubm90IHRlc3QgdGhpcyBvcGVyYXRpb24KK30KKworZnVuY3Rpb24gZHJvcFN0YXRlbWVu
dHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBJTkRFWCBU
ZXN0SW5kZXgiLCAiU1FMSVRFX0RST1BfSU5ERVgiKTsKKworICAgIC8vIFNRTElURV9EUk9QX1RF
TVBfSU5ERVg6IGFsbG93ZWQgaW4gd3JpdGUgbW9kZQorICAgIC8vIE5vdCBzdXJlIGhvdyB0byB0
ZXN0IHRoaXM6IHRlbXAgaW5kZXhlcyBhcmUgYXV0b21hdGljYWxseSBkcm9wcGVkIHdoZW4KKyAg
ICAvLyB0aGUgZGF0YWJhc2UgaXMgY2xvc2VkLCBidXQgSFRNTDUgZG9lc24ndCBzcGVjaWZ5IGEg
Y2xvc2VEYXRhYmFzZSgpIGNhbGwuCisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBU
QUJMRSBUZXN0VGVtcFRhYmxlIiwgIlNRTElURV9EUk9QX1RFTVBfVEFCTEUiKTsKKyAgICBleGVj
dXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUUklHR0VSIFRlc3RUZW1wVHJpZ2dlciIsICJTUUxJVEVf
RFJPUF9URU1QX1RSSUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBWSUVX
IFRlc3RUZW1wVmlldyIsICJTUUxJVEVfRFJPUF9URU1QX1ZJRVciKTsKKyAgICBleGVjdXRlU3Rh
dGVtZW50KHR4LCAiRFJPUCBUUklHR0VSIFRlc3RUcmlnZ2VyIiwgIlNRTElURV9EUk9QX1RSSUdH
RVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBWSUVXIFRlc3RWaWV3IiwgIlNR
TElURV9EUk9QX1ZJRVciKTsKKworICAgIC8vIFNRTElURV9EUk9QX1ZUQUJMRTogYWxsb3dlZCBp
biB3cml0ZSBtb2RlCisgICAgLy8gTm90IHN1cmUgaG93IHRvIHRlc3QgdGhpczogd2UgY2Fubm90
IGNyZWF0ZSBhIHZpcnR1YWwgdGFibGUgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAvLyBoYXZlIFNR
TC9KYXZhc2NyaXB0IEFQSXMgdG8gcmVnaXN0ZXIgYSBtb2R1bGUgdGhhdCBpbXBsZW1lbnRzIGEg
dmlydHVhbCB0YWJsZS4KKyAgICAvLyBUaGVyZWZvcmUsIHRyeWluZyB0byBkcm9wIGEgdmlydHVh
bCB0YWJsZSB3aWxsIGFsd2F5cyBmYWlsIChubyBzdWNoIHRhYmxlKQorICAgIC8vIGJlZm9yZSBl
dmVuIGdldHRpbmcgdG8gdGhlIGF1dGhvcml6ZXIuCisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiRFJPUCBUQUJMRSBUZXN0IiwgIlNRTElURV9EUk9QX1RBQkxFIik7Cit9CisKK2Z1bmN0aW9u
IHRlc3RSZWFkV3JpdGVNb2RlKGRiKQoreworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4
KSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJCZWdpbm5pbmcgd3JpdGUgdHJhbnNhY3Rpb246Iik7
CisgICAgICAgIGNyZWF0ZVRhYmxlQ2FsbGJhY2sodHgpOworICAgICAgICBjcmVhdGVTdGF0ZW1l
bnRzQ2FsbGJhY2sodHgpOworICAgICAgICBvdGhlclN0YXRlbWVudHNDYWxsYmFjayh0eCk7Cisg
ICAgICAgIGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpOworICAgICAgICBwb3N0TWVzc2FnZSgi
V3JpdGUgdHJhbnNhY3Rpb24gc3VjY2VlZGVkLlxuIik7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9u
IHRlc3RSZWFkT25seU1vZGUoZGIpCit7CisgICAgcG9zdE1lc3NhZ2UoIkJlZ2lubmluZyByZWFk
IHRyYW5zYWN0aW9uczoiKTsKKyAgICAvLyBUZXN0IHRoZSAnQ1JFQVRFIFRBQkxFJyBvcGVyYXRp
b247IGl0IHNob3VsZCBiZSBkaXNhbGxvd2VkCisgICAgZGIucmVhZFRyYW5zYWN0aW9uKGNyZWF0
ZVRhYmxlQ2FsbGJhY2spOworCisgICAgLy8gSW4gb3JkZXIgdG8gdGVzdCBhbGwgb3RoZXIgJ0NS
RUFURScgb3BlcmF0aW9ucywgd2UgbXVzdCBjcmVhdGUgdGhlIHRhYmxlIGZpcnN0CisgICAgZGIu
dHJhbnNhY3Rpb24oY3JlYXRlVGFibGVDYWxsYmFjayk7CisgICAgZGIucmVhZFRyYW5zYWN0aW9u
KGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayk7CisKKyAgICAvLyBJbiBvcmRlciB0byB0ZXN0IHRo
ZSAnRFJPUCcgYW5kICdvdGhlcicgb3BlcmF0aW9ucywgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUg
dGhlIHJlc3BlY3RpdmUgZW50aXRpZXMKKyAgICBkYi50cmFuc2FjdGlvbihjcmVhdGVTdGF0ZW1l
bnRzQ2FsbGJhY2spOworICAgIGRiLnJlYWRUcmFuc2FjdGlvbihvdGhlclN0YXRlbWVudHNDYWxs
YmFjayk7CisgICAgZGIucmVhZFRyYW5zYWN0aW9uKGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2spOwor
ICAgIHBvc3RNZXNzYWdlKCJSZWFkIHRyYW5zYWN0aW9ucyBzdWNjZWVkZWQuIik7Cit9CisKK3Zh
ciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIlRlc3RBdXRob3JpemVyVGVzdCIsICIxLjAiLCAiVGVz
dCB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci4iLCAxKTsKK2NsZWFudXAoZGIpOwordGVzdFJlYWRX
cml0ZU1vZGUoZGIpOwordGVzdFJlYWRPbmx5TW9kZShkYik7CisKK3Bvc3RNZXNzYWdlKCJkb25l
Iik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvdHJh
bnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rp
b24tc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL3Jlc291cmNlcy90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExIEBACit2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJUcmFuc2Fj
dGlvbkluVHJhbnNhY3Rpb25UZXN0IiwgIjEuMCIsICJUZXN0IHRoYXQgdHJ5aW5nIHRvIHJ1biBh
IG5lc3RlZCB0cmFuc2FjdGlvbiBmYWlscy4iLCAxKTsKK2RiLnRyYW5zYWN0aW9uKGZ1bmN0aW9u
KHR4KSB7CisgICAgdHJ5IHsKKyAgICAgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24obmVzdGVk
VHgpIHsgfSk7CisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBUcnlpbmcgdG8gcnVuIGEgbmVz
dGVkIHRyYW5zYWN0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIik7CisgICAgfSBjYXRj
aCAoZXJyKSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBFeGNlcHRpb24gdGhyb3duIHdo
aWxlIHRyeWluZyB0byBydW4gYSBuZXN0ZWQgdHJhbnNhY3Rpb24uIik7CisgICAgfQorfSk7CisK
K3Bvc3RNZXNzYWdlKCJkb25lIik7Cg==
</data>
<flag name="commit-queue"
          id="48590"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60817</attachid>
            <date>2010-07-07 18:03:18 -0700</date>
            <delta_ts>2010-07-09 01:34:58 -0700</delta_ts>
            <desc>patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>157440</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTkgQEAKKzIwMTAtMDctMDMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbigpIGFuZCBEYXRhYmFzZVN5
bmM6OmNoYW5nZVZlcnNpb24oKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNjA3CisKKyAgICAgICAgVGVzdHM6IGZhc3Qvd29ya2Vycy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1v
bmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMv
c3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5o
dG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNy
ZWF0aW9uLWNhbGxiYWNrLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0
eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRt
bAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rl
cy1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0
aG9yaXplci1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Ry
YW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWJzdHJhY3REYXRhYmFzZTo6bWF4aW11bVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCk6CisgICAgICAgICogc3Rv
cmFnZS9BYnN0cmFjdERhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3Jh
cHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9y
bVByZWZsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVy
Zm9ybVBvc3RmbGlnaHQpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKToKKyAgICAgICAgKiBz
dG9yYWdlL0RhdGFiYXNlLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVlRhYmxlKToKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0
U3RlcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5nZVZlcnNpb25QcmVmbGlnaHRT
dGVwOjpwZXJmb3JtU3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uUHJlZmxp
Z2h0U3RlcDo6Q2hhbmdlVmVyc2lvblByZWZsaWdodFN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpwZXJmb3JtU3RlcCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXA6OkNoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0
U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVN5bmM6OnJ1blRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBzdG9yYWdl
L0RhdGFiYXNlU3luYy5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNl
KToKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxS
ZXN1bHRTZXQuY3BwOgorICAgICAgICAqIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Lmg6CisgICAgICAg
ICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50
U3luYy5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVtZW50U3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnRTeW5jOjpleGVjdXRlKToKKyAgICAgICAgKiBz
dG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6cnVuQ3Vy
cmVudFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clF1b3RhSW5jcmVhc2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bjo6cG9zdGZsaWdodEFuZENvbW1pdCk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bi5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOgorICAgICAg
ICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKToK
KyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50Lmg6CisgICAgICAgICogc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2FjdGlvbkNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRyYW5zYWN0aW9uU3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6On5TUUxUcmFuc2FjdGlvblN5bmMp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU1FMKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFRyYW5zYWN0aW9uU3luYzo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uU3luYzo6cm9sbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRyYW5zYWN0aW9u
U3luY09wdGlvbmFsU3RlcDo6flNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3RlcCk6CisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oOgorICAgICAgICAqIHN0
b3JhZ2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0
YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhj
ZWVkUXVvdGEpOgorCiAyMDEwLTA3LTA3ICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6
IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gNjI3MzQpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xNDIxLDYgKzE0MjEsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgc3Rv
cmFnZS9TUUxSZXN1bHRTZXQuY3BwCiAgICAgc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNw
cAogICAgIHN0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAorICAgIHN0b3JhZ2UvU1FMU3RhdGVtZW50
U3luYy5jcHAKICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAogICAgIHN0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25DbGllbnQuY3BwCiAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvR05VbWFrZWZp
bGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI1MTYsNiArMjUxNiw4IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2suaCBcCisJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3Bw
IFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
aCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBcCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
cmV2aXNpb24gNjI3MzQpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtMzQ5Miw2ICszNDkyLDggQEAKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFN0YXRlbWVudC5o
JywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmgnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oJywKKyAgICAgICAgICAg
ICdzdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL1NR
TFN0YXRlbWVudFN5bmMuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5j
cHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaCcsCiAgICAgICAgICAg
ICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgnLApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2Mjcz
NCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTIzNzksNiArMjM3
OSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9EQVRBQkFTRT0xKSB7CiAgICAgICAgIHN0
b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93
TGlzdC5jcHAgXAogICAgICAgICBzdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAgXAorICAgICAgICBz
dG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbi5jcHAgXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCBcCiAg
ICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgXApAQCAtMjQ1Miw2
ICsyNDUzLDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RPTV9TVE9SQUdFPTEpIAogICAg
ICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldC5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxSZXN1bHRT
ZXRSb3dMaXN0LmggXAogICAgICAgICBzdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKKyAgICAgICAg
c3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmggXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0
aW9uLmggXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmggXAogICAgICAg
ICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk4MTMsNiArNDk4
MTMsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cc3RvcmFnZVxTUUxTdGF0ZW1lbnRTeW5jLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMU3RhdGVtZW50U3lu
Yy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxTUUxUcmFuc2FjdGlvbi5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDYy
NzM0KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTQyOTEsNiArNDI5MSw4IEBACiAJCUI1MjNDRjBCMTE4MjY3NTQwMEVCQjI5
QyAvKiBEYXRhYmFzZVN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEI1MjNDRjA0MTE4MjY3NTQwMEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuaCAqLzsg
fTsKIAkJQjUyNUE5NjUxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTI1QTk2MzExQ0EyMzQw
MDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24uaCAqLzsgfTsKIAkJQjUyNUE5NjYxMUNBMjM0MDAw
M0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEI1MjVBOTY0MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2Vw
dGlvbi5jcHAgKi87IH07CisJCUI1NTBCNTI1MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1l
bnRTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI1NTBCNTIxMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmNwcCAqLzsgfTsK
KwkJQjU1MEI1MjYxMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NTBCNTIyMTFEQzY4QTgw
MDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggKi87IH07CiAJCUI1NUQ1QUE0MTE5MTMxRkMw
MEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVENUFBMjExOTEzMUZDMDBCQ0MzMTUg
LyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oICovOyB9OwogCQlCNTVENUFBNTExOTEz
MUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVENUFBMzExOTEzMUZDMDBC
Q0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHAgKi87IH07CiAJCUI1NUQ1
QUE4MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVENUFBNjExOTEzMjUwMDBC
Q0MzMTUgLyogSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwICovOyB9OwpAQCAtOTg2MCw2ICs5ODYy
LDggQEAKIAkJQjUyM0NGMDQxMTgyNjc1NDAwRUJCMjlDIC8qIERhdGFiYXNlU3luYy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZVN5bmMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMRXhjZXB0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1MjVBOTY0MTFDQTIzNDAwMDNBMjNBOCAv
KiBKU1NRTEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1NRTEV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI1NTBC
NTIxMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFN0YXRlbWVudFN5bmMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCNTUwQjUyMjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVt
ZW50U3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxTdGF0ZW1lbnRT
eW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUEyMTE5MTMxRkMwMEJD
QzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUI1NUQ1QUE2MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFiYXNl
U3luY0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTMwNSw2ICsx
MTMwOSw4IEBACiAJCQkJQjU5REQ2OEUxMTkwMjk4RTAwN0U5Njg0IC8qIFNRTFN0YXRlbWVudENh
bGxiYWNrLmlkbCAqLywKIAkJCQkxQTdDQ0IxNjBDRDk0NjlBMDBCN0I2NEUgLyogU1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjay5oICovLAogCQkJCUI1OURENjhGMTE5MDI5OEUwMDdFOTY4NCAvKiBT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbCAqLywKKwkJCQlCNTUwQjUyMTExREM2OEE4MDA5
MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgKi8sCisJCQkJQjU1MEI1MjIxMURDNjhBODAw
OTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCAqLywKIAkJCQkxQUJGRTc1MjBDRDk2OEQwMDBG
RTQ4MzQgLyogU1FMVHJhbnNhY3Rpb24uY3BwICovLAogCQkJCTFBN0NDQjIyMENEOTQ2RkQwMEI3
QjY0RSAvKiBTUUxUcmFuc2FjdGlvbi5oICovLAogCQkJCTFBN0NDQjIzMENEOTQ2RkQwMEI3QjY0
RSAvKiBTUUxUcmFuc2FjdGlvbi5pZGwgKi8sCkBAIC0xOTI2Niw2ICsxOTI3Miw3IEBACiAJCQkJ
NTE1QjAzOTkwQ0QxNjQyQTAwQjdFQTlDIC8qIFNRTFN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUE3Q0NCMTkwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0YXRlbWVudENhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTdDQ0IxQTBDRDk0NjlBMDBCN0I2NEUgLyogU1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU1MEI1MjYxMURDNjhBODAw
OTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBN0NDQjI0
MENEOTQ2RkQwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE3Q0NCMUIwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUI1MUJGNkYxMTAyQzlFNTkwMDAyQzE1QSAvKiBTUUxUcmFuc2FjdGlv
bkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTcwOSw2ICsyMTcxNiw3IEBACiAJCQkJNTE5
NjExNzMwQ0FDNTY1NzAwMTBBODBDIC8qIFNRTFJlc3VsdFNldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQUZFMTE3RDBDQkZGQjM2MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTVCMDM5QTBDRDE2NDJBMDBCN0VBOUMgLyogU1FMU3RhdGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1NTBCNTI1MTFEQzY4QTgwMDkyMzg4NSAvKiBT
UUxTdGF0ZW1lbnRTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQkZFNzUzMENEOTY4RDAw
MEZFNDgzNCAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTFCRjZG
MDEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjVDMTEyM0IxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3RE
YXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJh
c2UuY3BwCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFi
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2lmIEVOQUJMRShEQVRB
QkFTRSkKICNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKICNpbmNsdWRlICJEYXRhYmFz
ZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKQEAgLTQ2Miw2ICs0NjEsMTkgQEAgdm9pZCBBYnN0cmFjdERhdGFiYXNl
OjpyZXNldEF1dGhvcml6ZXIoKQogICAgICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQo
KTsKIH0KIAordW5zaWduZWQgbG9uZyBsb25nIEFic3RyYWN0RGF0YWJhc2U6Om1heGltdW1TaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZ2V0TWF4
U2l6ZUZvckRhdGFiYXNlKHRoaXMpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmluY3Jl
bWVudGFsVmFjdXVtSWZOZWVkZWQoKQoreworICAgIGludDY0X3QgZnJlZVNwYWNlU2l6ZSA9IG1f
c3FsaXRlRGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOworICAgIGludDY0X3QgdG90YWxTaXplID0g
bV9zcWxpdGVEYXRhYmFzZS50b3RhbFNpemUoKTsKKyAgICBpZiAodG90YWxTaXplIDw9IDEwICog
ZnJlZVNwYWNlU2l6ZSkKKyAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5ydW5JbmNyZW1lbnRhbFZh
Y3V1bUNvbW1hbmQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCShyZXZp
c2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTQ1
LDggKzQ2LDYgQEAgY2xhc3MgRGF0YWJhc2VBdXRob3JpemVyOwogY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCi10eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOwotCiBjbGFzcyBBYnN0cmFjdERhdGFiYXNlIDogcHVibGljIFRocmVhZFNhZmVTaGFy
ZWQ8QWJzdHJhY3REYXRhYmFzZT4gewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzQXZhaWxh
YmxlKCk7CkBAIC02NSw2ICs2NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZGlz
cGxheU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7CisgICAgU1FM
aXRlRGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9zcWxpdGVEYXRhYmFzZTsg
fQorCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplKCkgY29uc3Q7CisgICAgdm9p
ZCBpbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7CiAKICAgICAvLyBGSVhNRTogbW92ZSBhbGwg
dmVyc2lvbi1yZWxhdGVkIG1ldGhvZHMgdG8gYSBEYXRhYmFzZVZlcnNpb25UcmFja2VyIGNsYXNz
CiAgICAgYm9vbCB2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3Q7CkBAIC0xMDMsOCArMTA2
LDYgQEAgcHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOwogICAg
IFN0cmluZyBtX2ZpbGVuYW1lOwogCi0gICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFz
ZTsKLQogI2lmbmRlZiBOREVCVUcKICAgICBTdHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSArICI6
OiIgKyBtX25hbWU7IH0KICNlbmRpZgpAQCAtMTE2LDYgKzExNyw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX29wZW5lZDsKICAgICBib29sIG1fbmV3OwogCisgICAgU1FMaXRlRGF0YWJhc2UgbV9z
cWxpdGVEYXRhYmFzZTsKKwogICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IG1fZGF0YWJh
c2VBdXRob3JpemVyOwogfTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25X
cmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldy
YXBwZXIuY3BwCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9DaGFuZ2VWZXJz
aW9uV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQCBib29sIENo
YW5nZVZlcnNpb25XcmFwcGVyOjpwZXJmb3JtUHJlZmxpCiAKICAgICBpZiAoIXRyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLT5nZXRWZXJzaW9uRnJvbURhdGFiYXNlKGFjdHVhbFZlcnNpb24pKSB7CiAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJldHJpZXZlIGFjdHVhbCBjdXJyZW50IHZlcnNp
b24gZnJvbSBkYXRhYmFzZSIpOwotICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJyb3I6OmNyZWF0
ZSgwLCAidW5hYmxlIHRvIHZlcmlmeSBjdXJyZW50IHZlcnNpb24gb2YgZGF0YWJhc2UiKTsKKyAg
ICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJS
LCAidW5hYmxlIHRvIHZlcmlmeSBjdXJyZW50IHZlcnNpb24gb2YgZGF0YWJhc2UiKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmIChhY3R1YWxWZXJzaW9uICE9IG1fb2xk
VmVyc2lvbikgewogICAgICAgICBMT0dfRVJST1IoIk9sZCB2ZXJzaW9uIGRvZXNuJ3QgbWF0Y2gg
YWN0dWFsIHZlcnNpb24iKTsKLSAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
MiwgImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBhcmd1
bWVudCBkbyBub3QgbWF0Y2giKTsKKyAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVh
dGUoU1FMRXJyb3I6OlZFUlNJT05fRVJSLCAiY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFz
ZSBhbmQgYG9sZFZlcnNpb25gIGFyZ3VtZW50IGRvIG5vdCBtYXRjaCIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgQ2hhbmdlVmVyc2lvbldy
YXBwZXI6OnBlcmZvcm1Qb3N0ZmwKIAogICAgIGlmICghdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkt
PnNldFZlcnNpb25JbkRhdGFiYXNlKG1fbmV3VmVyc2lvbikpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gc2V0IG5ldyB2ZXJzaW9uIGluIGRhdGFiYXNlIik7Ci0gICAgICAgIG1fc3Fs
RXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKDAsICJ1bmFibGUgdG8gc2V0IG5ldyB2ZXJzaW9uIGlu
IGRhdGFiYXNlIik7CisgICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVy
cm9yOjpVTktOT1dOX0VSUiwgInVuYWJsZSB0byBzZXQgbmV3IHZlcnNpb24gaW4gZGF0YWJhc2Ui
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3Bw
CShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgog
I2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTMz
Niw3ICszMzUsNyBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlCiB7
CiAgICAgZGlzYWJsZUF1dGhvcml6ZXIoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9zcWxpdGVEYXRhYmFzZSwgIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVS
RSB0eXBlPSd0YWJsZSc7Iik7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChzcWxpdGVE
YXRhYmFzZSgpLCAiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3Rh
YmxlJzsiKTsKICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewog
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZXRyaWV2ZSBsaXN0IG9mIHRhYmxlcyBmb3Ig
ZGF0YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAg
ICAgZW5hYmxlQXV0aG9yaXplcigpOwpAQCAtMzk3LDE0ICszOTYsNiBAQCBTZWN1cml0eU9yaWdp
biogRGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRGF0
YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKQotewotICAgIGludDY0X3QgZnJlZVNw
YWNlU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOwotICAgIGludDY0X3Qg
dG90YWxTaXplID0gbV9zcWxpdGVEYXRhYmFzZS50b3RhbFNpemUoKTsKLSAgICBpZiAodG90YWxT
aXplIDw9IDEwICogZnJlZVNwYWNlU2l6ZSkKLSAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5ydW5J
bmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9u
IDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICNpbmNsdWRlICJBYnN0cmFj
dERhdGFiYXNlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKIApAQCAtNjYsNyArNjcs
NiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4gdGFibGVOYW1lcygpOwogCiAgICAgdmly
dHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLSAgICBTUUxpdGVE
YXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSB7IHJldHVybiBtX3NxbGl0ZURhdGFiYXNlOyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAgICAgYm9vbCBkZWxl
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CkBAIC04Myw4ICs4Myw2IEBAIHB1Ymxp
YzoKICAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQoKSBjb25zdDsK
ICAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkg
Y29uc3Q7CiAKLSAgICB2b2lkIGluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKLQogcHJpdmF0
ZToKICAgICBjbGFzcyBEYXRhYmFzZU9wZW5UYXNrOwogICAgIGNsYXNzIERhdGFiYXNlQ2xvc2VU
YXNrOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHJldmlzaW9u
IDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5MCw3ICsyOTAsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVh
dGVWVGFibGUoY29uCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIC8vIEFsbG93
IG9ubHkgdGhlIEZUUzMgZXh0ZW5zaW9uCi0gICAgaWYgKG1vZHVsZU5hbWUgIT0gImZ0czMiKQor
ICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobW9kdWxlTmFtZSwgImZ0czMiKSkKICAgICAgICAg
cmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0g
dHJ1ZTsKQEAgLTMwMyw3ICszMDMsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVlRh
YmxlKGNvbnN0CiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIC8vIEFsbG93IG9u
bHkgdGhlIEZUUzMgZXh0ZW5zaW9uCi0gICAgaWYgKG1vZHVsZU5hbWUgIT0gImZ0czMiKQorICAg
IGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobW9kdWxlTmFtZSwgImZ0czMiKSkKICAgICAgICAgcmV0
dXJuIFNRTEF1dGhEZW55OwogCiAgICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVO
YW1lKHRhYmxlTmFtZSk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmgJKHJldmlz
aW9uIDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
U3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJ
KHJldmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIsMjggKzIsMzAgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgogICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCkBAIC0zMiw4ICszNCw5IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogI2luY2x1
ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
IlNRTEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luYy5oIgogI2luY2x1
ZGUgIlNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC04NywxNCArOTAs
NzUgQEAgRGF0YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5jKCkKICAgICB9CiB9CiAKLXZvaWQgRGF0
YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJikKK2Ns
YXNzIENoYW5nZVZlcnNpb25QcmVmbGlnaHRTdGVwIDogcHVibGljIFNRTFRyYW5zYWN0aW9uU3lu
Yzo6U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0U3RlcD4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgZXhwZWN0ZWRWZXJzaW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
aGFuZ2VWZXJzaW9uUHJlZmxpZ2h0U3RlcChleHBlY3RlZFZlcnNpb24pKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIEV4Y2VwdGlvbkNvZGUgcGVyZm9ybVN0ZXAoU1FMVHJhbnNhY3Rpb25TeW5jKiB0
cmFuc2FjdGlvbikKKyAgICB7CisgICAgICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOworICAgICAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5nZXRWZXJzaW9uRnJvbURhdGFiYXNlKGFj
dHVhbFZlcnNpb24pKQorICAgICAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9F
UlI7CisKKyAgICAgICAgaWYgKGFjdHVhbFZlcnNpb24gIT0gbV9leHBlY3RlZFZlcnNpb24pCisg
ICAgICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpWRVJTSU9OX0VSUjsKKworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ2hhbmdlVmVyc2lvblBy
ZWZsaWdodFN0ZXAoY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24pCisgICAgICAgIDogbV9l
eHBlY3RlZFZlcnNpb24oZXhwZWN0ZWRWZXJzaW9uKSB7IH0KKyAgICBTdHJpbmcgbV9leHBlY3Rl
ZFZlcnNpb247Cit9OworCitjbGFzcyBDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXAgOiBwdWJs
aWMgU1FMVHJhbnNhY3Rpb25TeW5jOjpTUUxUcmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXAgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3Rl
cD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmV3VmVyc2lvbikKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwKG5ld1ZlcnNpb24pKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIEV4Y2VwdGlvbkNvZGUgcGVyZm9ybVN0ZXAoU1FMVHJhbnNh
Y3Rpb25TeW5jKiB0cmFuc2FjdGlvbikKKyAgICB7CisgICAgICAgIGlmICghdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCktPnNldFZlcnNpb25JbkRhdGFiYXNlKG1fbmV3VmVyc2lvbikpCisgICAgICAg
ICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKworICAgICAgICB0cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS0+c2V0RXhwZWN0ZWRWZXJzaW9uKG1fbmV3VmVyc2lvbik7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDaGFuZ2VWZXJz
aW9uUG9zdGZsaWdodFN0ZXAoY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uKQorICAgICAgICA6IG1f
bmV3VmVyc2lvbihuZXdWZXJzaW9uKSB7IH0KKyAgICBTdHJpbmcgbV9uZXdWZXJzaW9uOworfTsK
Kwordm9pZCBEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJz
aW9uLCBjb25zdCBTdHJpbmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2s+IGNoYW5nZVZlcnNpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkp
OworICAgIHJ1blRyYW5zYWN0aW9uKFNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRlKHRoaXMsIGNo
YW5nZVZlcnNpb25DYWxsYmFjaywgZmFsc2UsIENoYW5nZVZlcnNpb25QcmVmbGlnaHRTdGVwOjpj
cmVhdGUob2xkVmVyc2lvbiksIENoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3RlcDo6Y3JlYXRlKG5l
d1ZlcnNpb24pKSwgZWMpOwogfQogCi12b2lkIERhdGFiYXNlU3luYzo6dHJhbnNhY3Rpb24oUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2wsIEV4Y2VwdGlvbkNvZGUm
KQordm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJl
YWQoKSk7CisgICAgcnVuVHJhbnNhY3Rpb24oU1FMVHJhbnNhY3Rpb25TeW5jOjpjcmVhdGUodGhp
cywgY2FsbGJhY2ssIHJlYWRPbmx5KSwgZWMpOworfQorCit2b2lkIERhdGFiYXNlU3luYzo6cnVu
VHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IHRyYW5zYWN0aW9uUHJQ
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoc3FsaXRlRGF0YWJhc2UoKS50cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoKSkgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0Vf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9u
U3luYz4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblByUDsKKyAgICBpZiAoKGVjID0gdHJhbnNh
Y3Rpb24tPmJlZ2luKCkpIHx8IChlYyA9IHRyYW5zYWN0aW9uLT5leGVjdXRlKCkpIHx8IChlYyA9
IHRyYW5zYWN0aW9uLT5jb21taXQoKSkpCisgICAgICAgIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygp
OwogfQogCiB2b2lkIERhdGFiYXNlU3luYzo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkKSW5kZXg6
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VTeW5jLmgJKHJldmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDI4ICsyLDMwIEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2lmbmRlZiBEYXRhYmFzZVN5bmNfaApAQCAtMzEsNiArMzMsNyBAQAogCiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2lmbmRlZiBOREVCVUcKQEAgLTQwLDYgKzQzLDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2VDYWxsYmFjazsKK2NsYXNzIFNRTFRyYW5z
YWN0aW9uU3luYzsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwogY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwpAQCAtNjAsNiArNjQs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIERhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwKICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplKTsKKyAgICB2b2lkIHJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25TeW5jPiwgRXhjZXB0aW9uQ29kZSYpOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwJKHJldmlzaW9uIDYyNzM0
KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTIsMjggKzIsMzAgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiBtb2R1bGUgc3RvcmFnZSB7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gNjI3MzQpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIy
MSw2IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpoYXNFbnRyeUZvckRhdGFiYXMKIAogdW5zaWdu
ZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0
IEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewotICAgIEFTU0VSVChjdXJyZW50VGhyZWFk
KCkgPT0gZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQo
KS0+Z2V0VGhyZWFkSUQoKSk7CiAgICAgLy8gVGhlIG1heGltdW0gc2l6ZSBmb3IgYSBkYXRhYmFz
ZSBpcyB0aGUgZnVsbCBxdW90YSBmb3IgaXRzIG9yaWdpbiwgbWludXMgdGhlIGN1cnJlbnQgdXNh
Z2Ugd2l0aGluIHRoZSBvcmlnaW4sCiAgICAgLy8gcGx1cyB0aGUgY3VycmVudCB1c2FnZSBvZiB0
aGUgZ2l2ZW4gZGF0YWJhc2UKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFz
ZUd1YXJkKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5oCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUv
c3RvcmFnZS9TUUxFcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcAkocmV2
aXNpb24gNjI3MzQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsOSArMzEsNiBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIlNRTFZhbHVlLmgiCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIHVuc2lnbmVkIGNvbnN0IE1heEVycm9yQ29kZSA9IDI7Cklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5oCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TUUxSZXN1bHRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDEyIEBACiAK
ICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiU1FMUmVzdWx0U2V0Um93TGlzdC5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KIGNsYXNzIFNRTFJlc3VsdFNldCA6IHB1
YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFJlc3VsdFNldD4gewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IFNRTFJlc3VsdFNldCk7IH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFj
ay5oCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxs
YmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCiAKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDYyNzM0KQorKysg
V2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5
bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNw
cAkocmV2aXNpb24gNjI0MjQpCShmcm9tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3Bw
OjYyNDI0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNR
TFN0YXRlbWVudC5oIgorCisjaWYgRU5BQkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMRXJyb3IuaCIKKyNpbmNs
dWRlICJTUUxpdGVEYXRhYmFzZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgorI2lu
Y2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU1FM
VmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dD4gU1FMU3RhdGVtZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZl
Y3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFj
az4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjaywgYm9vbCByZWFkT25seSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFN0
YXRlbWVudChzdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHJl
YWRPbmx5KSk7Cit9CisKK1NRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KGNvbnN0IFN0cmluZyYg
c3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8
U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpCisgICAgOiBtX3N0YXRl
bWVudChzdGF0ZW1lbnQuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKKyAgICAsIG1fYXJndW1lbnRzKGFy
Z3VtZW50cykKKyAgICAsIG1fc3RhdGVtZW50Q2FsbGJhY2soY2FsbGJhY2spCisgICAgLCBtX3N0
YXRlbWVudEVycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKKyAgICAsIG1fcmVhZE9ubHkocmVh
ZE9ubHkpCit7Cit9CisKK2Jvb2wgU1FMU3RhdGVtZW50OjpleGVjdXRlKERhdGFiYXNlKiBkYikK
K3sKKyAgICBBU1NFUlQoIW1fcmVzdWx0U2V0KTsKKworICAgIC8vIElmIHdlJ3JlIHJlLXJ1bm5p
bmcgdGhpcyBzdGF0ZW1lbnQgYWZ0ZXIgYSBxdW90YSB2aW9sYXRpb24sIHdlIG5lZWQgdG8gY2xl
YXIgdGhhdCBlcnJvciBub3cKKyAgICBjbGVhckZhaWx1cmVEdWVUb1F1b3RhKCk7CisKKyAgICAv
LyBUaGlzIHRyYW5zYWN0aW9uIG1pZ2h0IGhhdmUgYmVlbiBtYXJrZWQgYmFkIHdoaWxlIGl0IHdh
cyBiZWluZyBzZXQgdXAgb24gdGhlIG1haW4gdGhyZWFkLAorICAgIC8vIHNvIGlmIHRoZXJlIGlz
IHN0aWxsIGFuIGVycm9yLCByZXR1cm4gZmFsc2UuCisgICAgaWYgKG1fZXJyb3IpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3JlYWRPbmx5KQorICAgICAgICBkYi0+c2V0QXV0
aG9yaXplclJlYWRPbmx5KCk7CisKKyAgICBTUUxpdGVEYXRhYmFzZSogZGF0YWJhc2UgPSAmZGIt
PnNxbGl0ZURhdGFiYXNlKCk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCpkYXRh
YmFzZSwgbV9zdGF0ZW1lbnQpOworICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFyZSgp
OworCisgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAgICBMT0coU3RvcmFn
ZUFQSSwgIlVuYWJsZSB0byB2ZXJpZnkgY29ycmVjdG5lc3Mgb2Ygc3RhdGVtZW50ICVzIC0gZXJy
b3IgJWkgKCVzKSIsIG1fc3RhdGVtZW50LmFzY2lpKCkuZGF0YSgpLCByZXN1bHQsIGRhdGFiYXNl
LT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNR
TEVycm9yOjpTWU5UQVhfRVJSLCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRklYTUU6ICBJZiB0aGUgc3RhdGVtZW50IHVz
ZXMgdGhlID8jIyMgc3ludGF4IHN1cHBvcnRlZCBieSBzcWxpdGUsIHRoZSBiaW5kIHBhcmFtZXRl
ciBjb3VudCBpcyB2ZXJ5IGxpa2VseSBvZmYgZnJvbSB0aGUgbnVtYmVyIG9mIHF1ZXN0aW9uIG1h
cmtzLgorICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXkgbWlnaHQgYmUgdHJ5aW5nIHRv
IGRvIHNvbWV0aGluZyBmaXNoeSBvciBtYWxpY2lvdXMKKyAgICBpZiAoc3RhdGVtZW50LmJpbmRQ
YXJhbWV0ZXJDb3VudCgpICE9IG1fYXJndW1lbnRzLnNpemUoKSkgeworICAgICAgICBMT0coU3Rv
cmFnZUFQSSwgIkJpbmQgcGFyYW1ldGVyIGNvdW50IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1
ZXN0aW9uIG1hcmtzIik7CisgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVy
cm9yOjpTWU5UQVhfRVJSLCAibnVtYmVyIG9mICc/J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2Vz
IG5vdCBtYXRjaCBhcmd1bWVudCBjb3VudCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1l
bnRzW2ldKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRGdWxsKSB7CisgICAgICAg
ICAgICBzZXRGYWlsdXJlRHVlVG9RdW90YSgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgeworICAgICAg
ICAgICAgTE9HKFN0b3JhZ2VBUEksICJGYWlsZWQgdG8gYmluZCB2YWx1ZSBpbmRleCAlaSB0byBz
dGF0ZW1lbnQgZm9yIHF1ZXJ5ICclcyciLCBpICsgMSwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRh
KCkpOworICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRB
VEFCQVNFX0VSUiwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IHJl
c3VsdFNldCA9IFNRTFJlc3VsdFNldDo6Y3JlYXRlKCk7CisKKyAgICAvLyBTdGVwIHNvIHdlIGNh
biBmZXRjaCB0aGUgY29sdW1uIG5hbWVzLgorICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7
CisgICAgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgaW50IGNvbHVtbkNv
dW50ID0gc3RhdGVtZW50LmNvbHVtbkNvdW50KCk7CisgICAgICAgIFNRTFJlc3VsdFNldFJvd0xp
c3QqIHJvd3MgPSByZXN1bHRTZXQtPnJvd3MoKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvbHVtbkNvdW50OyBpKyspCisgICAgICAgICAgICByb3dzLT5hZGRDb2x1bW4oc3RhdGVt
ZW50LmdldENvbHVtbk5hbWUoaSkpOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICByb3dzLT5h
ZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZhbHVlKGkpKTsKKworICAgICAgICAgICAgcmVz
dWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICAgICAgfSB3aGlsZSAocmVzdWx0ID09IFNRTFJl
c3VsdFJvdyk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7CisgICAg
ICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJS
LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgeworICAg
ICAgICAvLyBEaWRuJ3QgZmluZCBhbnl0aGluZywgb3Igd2FzIGFuIGluc2VydAorICAgICAgICBp
ZiAoZGItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKSkKKyAgICAgICAgICAgIHJlc3VsdFNldC0+c2V0
SW5zZXJ0SWQoZGF0YWJhc2UtPmxhc3RJbnNlcnRSb3dJRCgpKTsKKyAgICB9IGVsc2UgaWYgKHJl
c3VsdCA9PSBTUUxSZXN1bHRGdWxsKSB7CisgICAgICAgIC8vIFJldHVybiB0aGUgUXVvdGEgZXJy
b3IgLSB0aGUgZGVsZWdhdGUgd2lsbCBiZSBhc2tlZCBmb3IgbW9yZSBzcGFjZSBhbmQgdGhpcyBz
dGF0ZW1lbnQgbWlnaHQgYmUgcmUtcnVuCisgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1b3RhKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2Vycm9yID0g
U1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBkYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRklYTUU6
IElmIHRoZSBzcGVjIGFsbG93cyB0cmlnZ2VycywgYW5kIHdlIHdhbnQgdG8gYmUgImFjY3VyYXRl
IiBpbiBhIGRpZmZlcmVudCB3YXksIHdlJ2QgdXNlCisgICAgLy8gc3FsaXRlM190b3RhbF9jaGFu
Z2VzKCkgaGVyZSBpbnN0ZWFkIG9mIHNxbGl0ZTNfY2hhbmdlZCwgYmVjYXVzZSB0aGF0IGluY2x1
ZGVzIHJvd3MgbW9kaWZpZWQgZnJvbSB3aXRoaW4gYSB0cmlnZ2VyCisgICAgLy8gRm9yIG5vdywg
dGhpcyBzZWVtcyBzdWZmaWNpZW50CisgICAgcmVzdWx0U2V0LT5zZXRSb3dzQWZmZWN0ZWQoZGF0
YWJhc2UtPmxhc3RDaGFuZ2VzKCkpOworCisgICAgbV9yZXN1bHRTZXQgPSByZXN1bHRTZXQ7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU1FMU3RhdGVtZW50OjpzZXREYXRhYmFzZURlbGV0
ZWRFcnJvcigpCit7CisgICAgQVNTRVJUKCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7CisgICAg
bV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidW5hYmxl
IHRvIGV4ZWN1dGUgc3RhdGVtZW50LCBiZWNhdXNlIHRoZSB1c2VyIGRlbGV0ZWQgdGhlIGRhdGFi
YXNlIik7Cit9CisKK3ZvaWQgU1FMU3RhdGVtZW50OjpzZXRWZXJzaW9uTWlzbWF0Y2hlZEVycm9y
KCkKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1fcmVzdWx0U2V0KTsKKyAgICBtX2Vycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VkVSU0lPTl9FUlIsICJjdXJyZW50IHZlcnNp
b24gb2YgdGhlIGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lvbmAgYXJndW1lbnQgZG8gbm90IG1hdGNo
Iik7Cit9CisKK2Jvb2wgU1FMU3RhdGVtZW50OjpwZXJmb3JtQ2FsbGJhY2soU1FMVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uKQoreworICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7CisKKyAgICBib29s
IGNhbGxiYWNrRXJyb3IgPSBmYWxzZTsKKworICAgIC8vIENhbGwgdGhlIGFwcHJvcHJpYXRlIHN0
YXRlbWVudCBjYWxsYmFjayBhbmQgdHJhY2sgaWYgaXQgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsCisg
ICAgLy8gYmVjYXVzZSB0aGVuIHdlIG5lZWQgdG8ganVtcCB0byB0aGUgdHJhbnNhY3Rpb24gZXJy
b3IgY2FsbGJhY2suCisgICAgaWYgKG1fZXJyb3IpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGVt
ZW50RXJyb3JDYWxsYmFjayk7CisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSBtX3N0YXRlbWVudEVy
cm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uLCBtX2Vycm9yLmdldCgpKTsKKyAgICB9IGVs
c2UgaWYgKG1fc3RhdGVtZW50Q2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSAhbV9z
dGF0ZW1lbnRDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rpb24sIG1fcmVzdWx0U2V0LmdldCgpKTsK
KworICAgIC8vIE5vdyByZWxlYXNlIG91ciBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBj
eWNsZXMuCisgICAgbV9zdGF0ZW1lbnRDYWxsYmFjayA9IDA7CisgICAgbV9zdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrID0gMDsKKworICAgIHJldHVybiBjYWxsYmFja0Vycm9yOworfQorCit2b2lkIFNR
TFN0YXRlbWVudDo6c2V0RmFpbHVyZUR1ZVRvUXVvdGEoKQoreworICAgIEFTU0VSVCghbV9lcnJv
ciAmJiAhbV9yZXN1bHRTZXQpOworICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVy
cm9yOjpRVU9UQV9FUlIsICJ0aGVyZSB3YXMgbm90IGVub3VnaCByZW1haW5pbmcgc3RvcmFnZSBz
cGFjZSwgb3IgdGhlIHN0b3JhZ2UgcXVvdGEgd2FzIHJlYWNoZWQgYW5kIHRoZSB1c2VyIGRlY2xp
bmVkIHRvIGFsbG93IG1vcmUgc3BhY2UiKTsKK30KKwordm9pZCBTUUxTdGF0ZW1lbnQ6OmNsZWFy
RmFpbHVyZUR1ZVRvUXVvdGEoKQoreworICAgIGlmIChsYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9R
dW90YSgpKQorICAgICAgICBtX2Vycm9yID0gMDsKK30KKworYm9vbCBTUUxTdGF0ZW1lbnQ6Omxh
c3RFeGVjdXRpb25GYWlsZWREdWVUb1F1b3RhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lcnJv
ciAmJiBtX2Vycm9yLT5jb2RlKCkgPT0gU1FMRXJyb3I6OlFVT1RBX0VSUjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAkocmV2aXNpb24gNjI0MjQpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw0OSArMjYsMzMgQEAK
ICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLworCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50U3lu
Yy5oIgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU1FMRXJyb3IuaCIKKyNpbmNsdWRlICJEYXRh
YmFzZVN5bmMuaCIKKyNpbmNsdWRlICJTUUxFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJTUUxSZXN1
bHRTZXQuaCIKKyNpbmNsdWRlICJTUUxWYWx1ZS5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNl
LmgiCiAjaW5jbHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiU1FMU3RhdGVtZW50
Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCi0jaW5j
bHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTUUxWYWx1ZS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1lbnQ6OmNyZWF0
ZShjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1l
bnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0
cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBib29sIHJlYWRPbmx5
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMU3RhdGVtZW50KHN0YXRlbWVudCwgYXJn
dW1lbnRzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgcmVhZE9ubHkpKTsKLX0KLQotU1FMU3Rh
dGVtZW50OjpTUUxTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3Rv
cjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4g
Y2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaywgYm9vbCByZWFkT25seSkKLSAgICA6IG1fc3RhdGVtZW50KHN0YXRlbWVudC5jcm9zc1Ro
cmVhZFN0cmluZygpKQorU1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVtZW50U3luYyhjb25zdCBT
dHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBib29s
IHJlYWRPbmx5KQorICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50KQogICAgICwgbV9hcmd1bWVu
dHMoYXJndW1lbnRzKQotICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFjayhjYWxsYmFjaykKLSAgICAs
IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQogICAgICwgbV9yZWFkT25s
eShyZWFkT25seSkKIHsKKyAgICBBU1NFUlQoIW1fc3RhdGVtZW50LmlzRW1wdHkoKSk7CiB9CiAK
LWJvb2wgU1FMU3RhdGVtZW50OjpleGVjdXRlKERhdGFiYXNlKiBkYikKK1Bhc3NSZWZQdHI8U1FM
UmVzdWx0U2V0PiBTUUxTdGF0ZW1lbnRTeW5jOjpleGVjdXRlKERhdGFiYXNlU3luYyogZGIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVCghbV9yZXN1bHRTZXQpOwotCi0gICAgLy8g
SWYgd2UncmUgcmUtcnVubmluZyB0aGlzIHN0YXRlbWVudCBhZnRlciBhIHF1b3RhIHZpb2xhdGlv
biwgd2UgbmVlZCB0byBjbGVhciB0aGF0IGVycm9yIG5vdwotICAgIGNsZWFyRmFpbHVyZUR1ZVRv
UXVvdGEoKTsKLQotICAgIC8vIFRoaXMgdHJhbnNhY3Rpb24gbWlnaHQgaGF2ZSBiZWVuIG1hcmtl
ZCBiYWQgd2hpbGUgaXQgd2FzIGJlaW5nIHNldCB1cCBvbiB0aGUgbWFpbiB0aHJlYWQsCi0gICAg
Ly8gc28gaWYgdGhlcmUgaXMgc3RpbGwgYW4gZXJyb3IsIHJldHVybiBmYWxzZS4KLSAgICBpZiAo
bV9lcnJvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaWYgKG1fcmVhZE9ubHkpCiAg
ICAgICAgIGRiLT5zZXRBdXRob3JpemVyUmVhZE9ubHkoKTsKIApAQCAtNzUsMzIgKzYwLDI2IEBA
IGJvb2wgU1FMU3RhdGVtZW50OjpleGVjdXRlKERhdGFiYXNlKiBkYikKIAogICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQoKmRhdGFiYXNlLCBtX3N0YXRlbWVudCk7CiAgICAgaW50IHJlc3Vs
dCA9IHN0YXRlbWVudC5wcmVwYXJlKCk7Ci0KICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9r
KSB7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBjb3JyZWN0bmVz
cyBvZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5k
YXRhKCksIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgbV9lcnJv
ciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsIGRhdGFiYXNlLT5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWMgPSBTUUxFeGNl
cHRpb246OlNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIC8vIEZJ
WE1FOiAgSWYgdGhlIHN0YXRlbWVudCB1c2VzIHRoZSA/IyMjIHN5bnRheCBzdXBwb3J0ZWQgYnkg
c3FsaXRlLCB0aGUgYmluZCBwYXJhbWV0ZXIgY291bnQgaXMgdmVyeSBsaWtlbHkgb2ZmIGZyb20g
dGhlIG51bWJlciBvZiBxdWVzdGlvbiBtYXJrcy4KLSAgICAvLyBJZiB0aGlzIGlzIHRoZSBjYXNl
LCB0aGV5IG1pZ2h0IGJlIHRyeWluZyB0byBkbyBzb21ldGhpbmcgZmlzaHkgb3IgbWFsaWNpb3Vz
CiAgICAgaWYgKHN0YXRlbWVudC5iaW5kUGFyYW1ldGVyQ291bnQoKSAhPSBtX2FyZ3VtZW50cy5z
aXplKCkpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJCaW5kIHBhcmFtZXRlciBjb3VudCBk
b2Vzbid0IG1hdGNoIG51bWJlciBvZiBxdWVzdGlvbiBtYXJrcyIpOwotICAgICAgICBtX2Vycm9y
ID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6U1lOVEFYX0VSUiwgIm51bWJlciBvZiAnPydz
IGluIHN0YXRlbWVudCBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggYXJndW1lbnQgY291bnQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6U1lOVEFYX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVu
dC5iaW5kVmFsdWUoaSArIDEsIG1fYXJndW1lbnRzW2ldKTsKICAgICAgICAgaWYgKHJlc3VsdCA9
PSBTUUxSZXN1bHRGdWxsKSB7Ci0gICAgICAgICAgICBzZXRGYWlsdXJlRHVlVG9RdW90YSgpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246
OlFVT1RBX0VSUjsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICAgICAgTE9HKFN0b3JhZ2VBUEks
ICJGYWlsZWQgdG8gYmluZCB2YWx1ZSBpbmRleCAlaSB0byBzdGF0ZW1lbnQgZm9yIHF1ZXJ5ICcl
cyciLCBpICsgMSwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICAgICAgbV9l
cnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgZGF0YWJhc2Ut
Pmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMTIzLDc5ICsxMDIsMjQgQEAgYm9vbCBTUUxTdGF0ZW1l
bnQ6OmV4ZWN1dGUoRGF0YWJhc2UqIGRiKQogICAgICAgICB9IHdoaWxlIChyZXN1bHQgPT0gU1FM
UmVzdWx0Um93KTsKIAogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAg
ICAgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9F
UlIsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOworICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1
bHREb25lKSB7Ci0gICAgICAgIC8vIERpZG4ndCBmaW5kIGFueXRoaW5nLCBvciB3YXMgYW4gaW5z
ZXJ0CisgICAgICAgIC8vIERpZG4ndCBmaW5kIGFueXRoaW5nLCBvciB3YXMgYW4gaW5zZXJ0Lgog
ICAgICAgICBpZiAoZGItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKSkKICAgICAgICAgICAgIHJlc3Vs
dFNldC0+c2V0SW5zZXJ0SWQoZGF0YWJhc2UtPmxhc3RJbnNlcnRSb3dJRCgpKTsKICAgICB9IGVs
c2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1bHRGdWxsKSB7Ci0gICAgICAgIC8vIFJldHVybiB0aGUg
UXVvdGEgZXJyb3IgLSB0aGUgZGVsZWdhdGUgd2lsbCBiZSBhc2tlZCBmb3IgbW9yZSBzcGFjZSBh
bmQgdGhpcyBzdGF0ZW1lbnQgbWlnaHQgYmUgcmUtcnVuCi0gICAgICAgIHNldEZhaWx1cmVEdWVU
b1F1b3RhKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gUXVvdGEgZXJyb3Is
IHRoZSBkZWxlZ2F0ZSB3aWxsIGJlIGFza2VkIGZvciBtb3JlIHNwYWNlIGFuZCB0aGlzIHN0YXRl
bWVudCBtaWdodCBiZSByZS1ydW4uCisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpRVU9UQV9F
UlI7CisgICAgICAgIHJldHVybiAwOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZXJyb3IgPSBT
UUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIGRhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRp
b246OkRBVEFCQVNFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLy8gRklY
TUU6IElmIHRoZSBzcGVjIGFsbG93cyB0cmlnZ2VycywgYW5kIHdlIHdhbnQgdG8gYmUgImFjY3Vy
YXRlIiBpbiBhIGRpZmZlcmVudCB3YXksIHdlJ2QgdXNlCi0gICAgLy8gc3FsaXRlM190b3RhbF9j
aGFuZ2VzKCkgaGVyZSBpbnN0ZWFkIG9mIHNxbGl0ZTNfY2hhbmdlZCwgYmVjYXVzZSB0aGF0IGlu
Y2x1ZGVzIHJvd3MgbW9kaWZpZWQgZnJvbSB3aXRoaW4gYSB0cmlnZ2VyCi0gICAgLy8gRm9yIG5v
dywgdGhpcyBzZWVtcyBzdWZmaWNpZW50CiAgICAgcmVzdWx0U2V0LT5zZXRSb3dzQWZmZWN0ZWQo
ZGF0YWJhc2UtPmxhc3RDaGFuZ2VzKCkpOwotCi0gICAgbV9yZXN1bHRTZXQgPSByZXN1bHRTZXQ7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU1FMU3RhdGVtZW50OjpzZXREYXRhYmFzZURl
bGV0ZWRFcnJvcigpCi17Ci0gICAgQVNTRVJUKCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7Ci0g
ICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidW5h
YmxlIHRvIGV4ZWN1dGUgc3RhdGVtZW50LCBiZWNhdXNlIHRoZSB1c2VyIGRlbGV0ZWQgdGhlIGRh
dGFiYXNlIik7Ci19Ci0KLXZvaWQgU1FMU3RhdGVtZW50OjpzZXRWZXJzaW9uTWlzbWF0Y2hlZEVy
cm9yKCkKLXsKLSAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1fcmVzdWx0U2V0KTsKLSAgICBtX2Vy
cm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VkVSU0lPTl9FUlIsICJjdXJyZW50IHZl
cnNpb24gb2YgdGhlIGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lvbmAgYXJndW1lbnQgZG8gbm90IG1h
dGNoIik7Ci19Ci0KLWJvb2wgU1FMU3RhdGVtZW50OjpwZXJmb3JtQ2FsbGJhY2soU1FMVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7Ci0KLSAgICBi
b29sIGNhbGxiYWNrRXJyb3IgPSBmYWxzZTsKLQotICAgIC8vIENhbGwgdGhlIGFwcHJvcHJpYXRl
IHN0YXRlbWVudCBjYWxsYmFjayBhbmQgdHJhY2sgaWYgaXQgcmVzdWx0ZWQgaW4gYW4gZXJyb3Is
Ci0gICAgLy8gYmVjYXVzZSB0aGVuIHdlIG5lZWQgdG8ganVtcCB0byB0aGUgdHJhbnNhY3Rpb24g
ZXJyb3IgY2FsbGJhY2suCi0gICAgaWYgKG1fZXJyb3IpIHsKLSAgICAgICAgQVNTRVJUKG1fc3Rh
dGVtZW50RXJyb3JDYWxsYmFjayk7Ci0gICAgICAgIGNhbGxiYWNrRXJyb3IgPSBtX3N0YXRlbWVu
dEVycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCksIHRyYW5zYWN0aW9uLCBtX2Vycm9yLmdldCgpKTsKLSAgICB9
IGVsc2UgaWYgKG1fc3RhdGVtZW50Q2FsbGJhY2spCi0gICAgICAgIGNhbGxiYWNrRXJyb3IgPSAh
bV9zdGF0ZW1lbnRDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rpb24sIG1fcmVzdWx0U2V0LmdldCgp
KTsKLQotICAgIC8vIE5vdyByZWxlYXNlIG91ciBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5j
ZSBjeWNsZXMuCi0gICAgbV9zdGF0ZW1lbnRDYWxsYmFjayA9IDA7Ci0gICAgbV9zdGF0ZW1lbnRF
cnJvckNhbGxiYWNrID0gMDsKLQotICAgIHJldHVybiBjYWxsYmFja0Vycm9yOwotfQotCi12b2lk
IFNRTFN0YXRlbWVudDo6c2V0RmFpbHVyZUR1ZVRvUXVvdGEoKQotewotICAgIEFTU0VSVCghbV9l
cnJvciAmJiAhbV9yZXN1bHRTZXQpOwotICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNR
TEVycm9yOjpRVU9UQV9FUlIsICJ0aGVyZSB3YXMgbm90IGVub3VnaCByZW1haW5pbmcgc3RvcmFn
ZSBzcGFjZSwgb3IgdGhlIHN0b3JhZ2UgcXVvdGEgd2FzIHJlYWNoZWQgYW5kIHRoZSB1c2VyIGRl
Y2xpbmVkIHRvIGFsbG93IG1vcmUgc3BhY2UiKTsKLX0KLQotdm9pZCBTUUxTdGF0ZW1lbnQ6OmNs
ZWFyRmFpbHVyZUR1ZVRvUXVvdGEoKQotewotICAgIGlmIChsYXN0RXhlY3V0aW9uRmFpbGVkRHVl
VG9RdW90YSgpKQotICAgICAgICBtX2Vycm9yID0gMDsKLX0KLQotYm9vbCBTUUxTdGF0ZW1lbnQ6
Omxhc3RFeGVjdXRpb25GYWlsZWREdWVUb1F1b3RhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9l
cnJvciAmJiBtX2Vycm9yLT5jb2RlKCkgPT0gU1FMRXJyb3I6OlFVT1RBX0VSUjsKKyAgICByZXR1
cm4gcmVzdWx0U2V0LnJlbGVhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9z
dG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU1FMU3RhdGVtZW50U3luY19oCisjZGVmaW5lIFNRTFN0YXRlbWVudFN5bmNfaAorCisj
aWYgRU5BQkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBEYXRhYmFzZVN5bmM7CitjbGFzcyBTUUxSZXN1bHRTZXQ7CisKK2NsYXNz
IFNRTFN0YXRlbWVudFN5bmMgeworcHVibGljOgorICAgIFNRTFN0YXRlbWVudFN5bmMoY29uc3Qg
U3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgYm9v
bCByZWFkT25seSk7CisKKyAgICBQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gZXhlY3V0ZShEYXRh
YmFzZVN5bmMqLCBFeGNlcHRpb25Db2RlJik7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fc3Rh
dGVtZW50OworICAgIFZlY3RvcjxTUUxWYWx1ZT4gbV9hcmd1bWVudHM7CisgICAgYm9vbCBtX3Jl
YWRPbmx5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KERBVEFCQVNFKQorCisjZW5kaWYgLy8gU1FMU3RhdGVtZW50U3luY19oCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogCiAj
aW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC0z
NzAsNyArMzY5LDcgQEAgYm9vbCBTUUxUcmFuc2FjdGlvbjo6cnVuQ3VycmVudFN0YXRlbWVudAog
ICAgICAgICAgICAgLy8gRmxhZyB0aGlzIHRyYW5zYWN0aW9uIGFzIGhhdmluZyBjaGFuZ2VkIHRo
ZSBkYXRhYmFzZSBmb3IgbGF0ZXIgZGVsZWdhdGUgbm90aWZpY2F0aW9uCiAgICAgICAgICAgICBt
X21vZGlmaWVkRGF0YWJhc2UgPSB0cnVlOwogICAgICAgICAgICAgLy8gQWxzbyBkaXJ0eSB0aGUg
c2l6ZSBvZiB0aGlzIGRhdGFiYXNlIGZpbGUgZm9yIGNhbGN1bGF0aW5nIHF1b3RhIHVzYWdlCi0g
ICAgICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGVjdXRlU3Rh
dGVtZW50KHRoaXMpOworICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQo
KS0+ZGlkRXhlY3V0ZVN0YXRlbWVudChkYXRhYmFzZSgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQtPmhhc1N0YXRlbWVudENhbGxiYWNrKCkpIHsKQEAgLTQz
Miw3ICs0MzEsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyUXVvdGFJbmNyZWFzCiAg
ICAgQVNTRVJUKG1fY3VycmVudFN0YXRlbWVudCk7CiAgICAgQVNTRVJUKCFtX3Nob3VsZFJldHJ5
Q3VycmVudFN0YXRlbWVudCk7CiAKLSAgICBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudCA9
IG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZEV4Y2VlZFF1b3RhKHRoaXMpOwor
ICAgIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+dHJhbnNhY3Rp
b25DbGllbnQoKS0+ZGlkRXhjZWVkUXVvdGEoZGF0YWJhc2UoKSk7CiAKICAgICBtX25leHRTdGVw
ID0gJlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzOwogICAgIExPRyhTdG9yYWdlQVBJLCAi
U2NoZWR1bGluZyBydW5TdGF0ZW1lbnRzIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CkBA
IC00NzIsNyArNDcxLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1p
dAogCiAgICAgLy8gVGhlIGNvbW1pdCB3YXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIHRyYW5zYWN0aW9u
IG1vZGlmaWVkIHRoaXMgZGF0YWJhc2UsIG5vdGlmeSB0aGUgZGVsZWdhdGVzLgogICAgIGlmICht
X21vZGlmaWVkRGF0YWJhc2UpCi0gICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50
KCktPmRpZENvbW1pdFRyYW5zYWN0aW9uKHRoaXMpOworICAgICAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNsaWVudCgpLT5kaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKGRhdGFiYXNlKCkpOwog
CiAgICAgLy8gTm93IHJlbGVhc2Ugb3VyIHVubmVlZGVkIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVm
ZXJlbmNlIGN5Y2xlcy4KICAgICBtX2NhbGxiYWNrID0gMDsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5oCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNyArMzAsMTUgQEAKIAogI2lmIEVOQUJMRShE
QVRBQkFTRSkKIAotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJTUUxTdGF0ZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
U2hhcmVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KIGNsYXNzIERhdGFiYXNlOwogY2xhc3Mg
U1FMRXJyb3I7CiBjbGFzcyBTUUxpdGVUcmFuc2FjdGlvbjsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gNjI3MzQpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAJKHJl
dmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzYgKzMzLDI3IEBACiAKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiAKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNp
bmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCisjaW5jbHVk
ZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNRTFRyYW5z
YWN0aW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBTUUxUcmFu
c2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0VHJhbnNhY3Rpb24oU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQordm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2Fj
dGlvbihBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKLSAgICBBU1NFUlQoY3VycmVudFRo
cmVhZCgpID09IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwotICAgIERhdGFiYXNlKiBkYXRh
YmFzZSA9IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJh
Y2tlcigpLnNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFuZ2VkKAogICAgICAgICBkYXRhYmFzZS0+
c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7CiB9CiAKLXZv
aWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQoU1FMVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uKQordm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0
YXRlbWVudChBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKLSAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwotICAgIERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLmRhdGFiYXNlQ2hhbmdlZCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSk7
CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGF0YWJhc2VDaGFuZ2VkKGRhdGFiYXNl
KTsKIH0KIAotYm9vbCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhjZWVkUXVvdGEoU1FMVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorYm9vbCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhj
ZWVkUXVvdGEoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7Ci0gICAgQVNTRVJUKHRyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRo
cmVhZCgpKTsKLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KTsKLQorICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0Nv
bnRleHRUaHJlYWQoKSk7CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnRRdW90YSA9IERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnF1b3RhRm9yT3JpZ2luKGRhdGFiYXNlLT5zZWN1cml0
eU9yaWdpbigpKTsKICAgICBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRh
YmFzZUV4Y2VlZGVkUXVvdGEoZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSk7CiAgICAgdW5z
aWduZWQgbG9uZyBsb25nIG5ld1F1b3RhID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucXVv
dGFGb3JPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmgJKHJldmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE2ICsz
NywxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTUUxUcmFuc2FjdGlv
bjsKK2NsYXNzIEFic3RyYWN0RGF0YWJhc2U7CisKKy8vIEEgY2xpZW50IHRvIHRoZSBTUUxUcmFu
c2FjdGlvbiBjbGFzcy4gQWxsb3dzIFNRTFRyYW5zYWN0aW9uIHRvIG5vdGlmeSBpbnRlcmVzdGVk
CisvLyBwYXJ0aWVzIHRoYXQgY2VydGFpbiB0aGluZ3MgaGF2ZSBoYXBwZW5lZCBpbiBhIHRyYW5z
YWN0aW9uLgorY2xhc3MgU1FMVHJhbnNhY3Rpb25DbGllbnQgOiBwdWJsaWMgTm9uY29weWFibGUg
eworcHVibGljOgorICAgIHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uQ2xpZW50KCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oQWJzdHJhY3REYXRhYmFzZSop
OworICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlU3RhdGVtZW50KEFic3RyYWN0RGF0YWJhc2Uq
KTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlkRXhjZWVkUXVvdGEoQWJzdHJhY3REYXRhYmFzZSopOwor
fTsKIAotICAgIC8vIEEgY2xpZW50IHRvIHRoZSBTUUxUcmFuc2FjdGlvbiBjbGFzcy4gQWxsb3dz
IFNRTFRyYW5zYWN0aW9uIHRvIG5vdGlmeSBpbnRlcmVzdGVkCi0gICAgLy8gcGFydGllcyB0aGF0
IGNlcnRhaW4gdGhpbmdzIGhhdmUgaGFwcGVuZWQgaW4gYSB0cmFuc2FjdGlvbi4KLSAgICBjbGFz
cyBTUUxUcmFuc2FjdGlvbkNsaWVudCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAgcHVibGlj
OgotICAgICAgICB2b2lkIGRpZENvbW1pdFRyYW5zYWN0aW9uKFNRTFRyYW5zYWN0aW9uKik7Ci0g
ICAgICAgIHZvaWQgZGlkRXhlY3V0ZVN0YXRlbWVudChTUUxUcmFuc2FjdGlvbiopOwotICAgICAg
ICBib29sIGRpZEV4Y2VlZFF1b3RhKFNRTFRyYW5zYWN0aW9uKik7Ci0gICAgfTsKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDYyNzM0KQorKysgV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcAkocmV2
aXNpb24gNjI3MzQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMiwyOCArMiwzMCBAQAogICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKQEAgLTMyLDQyICszNCwxOTMgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAK
ICNpbmNsdWRlICJEYXRhYmFzZVN5bmMuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnRTeW5jLmgiCisj
aW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKICNpbmNsdWRlICJTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSAiU1FMaXRl
VHJhbnNhY3Rpb24uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IFNRTFRyYW5z
YWN0aW9uU3luYzo6Y3JlYXRlKERhdGFiYXNlU3luYyogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQorc3RhdGljIFNRTFRy
YW5zYWN0aW9uQ2xpZW50KiB0cmFuc2FjdGlvbkNsaWVudCgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTUUxUcmFuc2FjdGlvblN5bmMoZGIsIGNhbGxiYWNrLCByZWFkT25seSkpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoU1FMVHJhbnNhY3Rpb25DbGllbnQsIHRyYW5zYWN0aW9uQ2xp
ZW50LCAoKSk7CisgICAgcmV0dXJuICZ0cmFuc2FjdGlvbkNsaWVudDsKIH0KIAotU1FMVHJhbnNh
Y3Rpb25TeW5jOjpTUUxUcmFuc2FjdGlvblN5bmMoRGF0YWJhc2VTeW5jKiBkYiwgUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpCitQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luYz4gU1FMVHJhbnNhY3Rpb25TeW5jOjpjcmVhdGUo
RGF0YWJhc2VTeW5jKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4g
Y2FsbGJhY2ssIGJvb2wgcmVhZE9ubHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNP
cHRpb25hbFN0ZXA+IHByZWZsaWdodFN0ZXAsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5j
T3B0aW9uYWxTdGVwPiBwb3N0ZmxpZ2h0U3RlcCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNRTFRyYW5zYWN0aW9uU3luYyhkYiwgY2FsbGJhY2ssIHJlYWRPbmx5LCBwcmVmbGlnaHRTdGVw
LCBwb3N0ZmxpZ2h0U3RlcCkpOworfQorCitTUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRyYW5zYWN0
aW9uU3luYyhEYXRhYmFzZVN5bmMqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrPiBjYWxsYmFjaywgYm9vbCByZWFkT25seSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVw
PiBwcmVmbGlnaHRTdGVwLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3Rl
cD4gcG9zdGZsaWdodFN0ZXApCiAgICAgOiBtX2RhdGFiYXNlKGRiKQogICAgICwgbV9jYWxsYmFj
ayhjYWxsYmFjaykKICAgICAsIG1fcmVhZE9ubHkocmVhZE9ubHkpCisgICAgLCBtX3ByZWZsaWdo
dFN0ZXAocHJlZmxpZ2h0U3RlcCkKKyAgICAsIG1fcG9zdGZsaWdodFN0ZXAocG9zdGZsaWdodFN0
ZXApCisgICAgLCBtX21vZGlmaWVkRGF0YWJhc2UoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fZGF0
YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAg
IEFTU0VSVChjYWxsYmFjayk7CiB9CiAKIFNRTFRyYW5zYWN0aW9uU3luYzo6flNRTFRyYW5zYWN0
aW9uU3luYygpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uICYm
IG1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgcm9sbGJhY2soKTsK
K30KKworUGFzc1JlZlB0cjxTUUxSZXN1bHRTZXQ+IFNRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0
ZVNRTChjb25zdCBTdHJpbmcmIHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYg
YXJndW1lbnRzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgaWYgKCFt
X2RhdGFiYXNlLT5vcGVuZWQoKSkgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6VU5LTk9X
Tl9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS0+
dmVyc2lvbk1hdGNoZXNFeHBlY3RlZCgpKSB7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpW
RVJTSU9OX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHNxbFN0YXRl
bWVudC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgYm9vbCByZWFkT25seU1v
ZGUgPSBtX3JlYWRPbmx5IHx8IG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNEYXRhYmFzZVJlYWRPbmx5KCk7CisgICAgU1FMU3RhdGVtZW50U3luYyBzdGF0ZW1lbnQoc3Fs
U3RhdGVtZW50LCBhcmd1bWVudHMsIHJlYWRPbmx5TW9kZSk7CisKKyAgICBtX2RhdGFiYXNlLT5y
ZXNldEF1dGhvcml6ZXIoKTsKKyAgICBib29sIHJldHJ5U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICBS
ZWZQdHI8U1FMUmVzdWx0U2V0PiByZXN1bHRTZXQ7CisgICAgd2hpbGUgKHJldHJ5U3RhdGVtZW50
KSB7CisgICAgICAgIHJldHJ5U3RhdGVtZW50ID0gZmFsc2U7CisgICAgICAgIHJlc3VsdFNldCA9
IHN0YXRlbWVudC5leGVjdXRlKG1fZGF0YWJhc2UuZ2V0KCksIGVjKTsKKyAgICAgICAgaWYgKCFy
ZXN1bHRTZXQpIHsKKyAgICAgICAgICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uLT53YXNSb2xs
ZWRCYWNrQnlTcWxpdGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAg
ICAgaWYgKGVjID09IFNRTEV4Y2VwdGlvbjo6UVVPVEFfRVJSKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZEV4Y2VlZFF1b3RhKGRhdGFiYXNlKCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGVjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0cnlTdGF0
ZW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICht
X2RhdGFiYXNlLT5sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkpIHsKKyAgICAgICAgbV9tb2Rp
ZmllZERhdGFiYXNlID0gdHJ1ZTsKKyAgICAgICAgdHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhl
Y3V0ZVN0YXRlbWVudChkYXRhYmFzZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0U2V0
LnJlbGVhc2UoKTsKK30KKworRXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlvblN5bmM6OmJlZ2lu
KCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5p
c0NvbnRleHRUaHJlYWQoKSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSkKKyAgICAg
ICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7CisKKyAgICBBU1NFUlQoIW1fZGF0
YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworCisgICAg
Ly8gU2V0IHRoZSBtYXhpbXVtIHVzYWdlIGZvciB0aGlzIHRyYW5zYWN0aW9uIGlmIHRoaXMgdHJh
bnNhY3Rpb25zIGlzIG5vdCByZWFkLW9ubHkuCisgICAgaWYgKCFtX3JlYWRPbmx5KQorICAgICAg
ICBtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnNldE1heGltdW1TaXplKG1fZGF0YWJhc2Ut
Pm1heGltdW1TaXplKCkpOworCisgICAgaWYgKG1fcHJlZmxpZ2h0U3RlcCkgeworICAgICAgICBF
eGNlcHRpb25Db2RlIHByZWZsaWdodEV4Y2VwdGlvbkNvZGUgPSBtX3ByZWZsaWdodFN0ZXAtPnBl
cmZvcm1TdGVwKHRoaXMpOworICAgICAgICBtX3ByZWZsaWdodFN0ZXAgPSAwOworICAgICAgICBp
ZiAocHJlZmxpZ2h0RXhjZXB0aW9uQ29kZSkKKyAgICAgICAgICAgIHJldHVybiBwcmVmbGlnaHRF
eGNlcHRpb25Db2RlOworICAgIH0KKworICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlvbik7
CisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5zZXQobmV3IFNRTGl0ZVRyYW5zYWN0aW9uKG1fZGF0
YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCksIG1fcmVhZE9ubHkpKTsKKworICAgIG1fZGF0YWJhc2Ut
PnJlc2V0RGVsZXRlcygpOworICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7Cisg
ICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICBtX2RhdGFiYXNlLT5lbmFibGVB
dXRob3JpemVyKCk7CisKKyAgICAvLyBDaGVjayBpZiBiZWdpbigpIHN1Y2NlZWRlZC4KKyAgICBp
ZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgeworICAgICAgICBBU1NFUlQo
IW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwor
ICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBTUUxF
eGNlcHRpb246OkRBVEFCQVNFX0VSUjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKIH0KIAotUGFz
c1JlZlB0cjxTUUxSZXN1bHRTZXQ+IFNRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZVNRTChjb25z
dCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiwgRXhjZXB0aW9uQ29kZSYpCitFeGNl
cHRpb25Db2RlIFNRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZSgpCiB7CiAgICAgQVNTRVJUKG1f
ZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwor
ICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkgfHwgIW1fY2FsbGJhY2sgfHwgIW1fY2FsbGJh
Y2stPmhhbmRsZUV2ZW50KG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhp
cykpIHsKKyAgICAgICAgbV9jYWxsYmFjayA9IDA7CisgICAgICAgIHJldHVybiBTUUxFeGNlcHRp
b246OlVOS05PV05fRVJSOworICAgIH0KKworICAgIG1fY2FsbGJhY2sgPSAwOwogICAgIHJldHVy
biAwOwogfQogCitFeGNlcHRpb25Db2RlIFNRTFRyYW5zYWN0aW9uU3luYzo6Y29tbWl0KCkKK3sK
KyAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRl
eHRUaHJlYWQoKSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSkKKyAgICAgICAgcmV0
dXJuIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7CisKKyAgICBBU1NFUlQobV9zcWxpdGVUcmFu
c2FjdGlvbik7CisKKyAgICBtX2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOworICAgIG1f
c3FsaXRlVHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhv
cml6ZXIoKTsKKworICAgIC8vIElmIHRoZSBjb21taXQgZmFpbGVkLCB0aGUgdHJhbnNhY3Rpb24g
d2lsbCBzdGlsbCBiZSBtYXJrZWQgYXMgImluIHByb2dyZXNzIgorICAgIGlmIChtX3NxbGl0ZVRy
YW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCisgICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OkRB
VEFCQVNFX0VSUjsKKworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKworICAgIC8v
IFZhY3V1bSB0aGUgZGF0YWJhc2UgaWYgYW55dGhpbmcgd2FzIGRlbGV0ZWQuCisgICAgaWYgKG1f
ZGF0YWJhc2UtPmhhZERlbGV0ZXMoKSkKKyAgICAgICAgbV9kYXRhYmFzZS0+aW5jcmVtZW50YWxW
YWN1dW1JZk5lZWRlZCgpOworCisgICAgLy8gVGhlIGNvbW1pdCB3YXMgc3VjY2Vzc2Z1bC4gSWYg
dGhlIHRyYW5zYWN0aW9uIG1vZGlmaWVkIHRoaXMgZGF0YWJhc2UsIG5vdGlmeSB0aGUgZGVsZWdh
dGVzLgorICAgIGlmIChtX21vZGlmaWVkRGF0YWJhc2UpCisgICAgICAgIHRyYW5zYWN0aW9uQ2xp
ZW50KCktPmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oZGF0YWJhc2UoKSk7CisKKyAgICBFeGNl
cHRpb25Db2RlIHBvc3RmbGlnaHRFeGNlcHRpb25Db2RlID0gMDsKKyAgICBpZiAobV9wb3N0Zmxp
Z2h0U3RlcCkKKyAgICAgICAgcG9zdGZsaWdodEV4Y2VwdGlvbkNvZGUgPSBtX3Bvc3RmbGlnaHRT
dGVwLT5wZXJmb3JtU3RlcCh0aGlzKTsKKyAgICBtX3Bvc3RmbGlnaHRTdGVwID0gMDsKKyAgICBy
ZXR1cm4gcG9zdGZsaWdodEV4Y2VwdGlvbkNvZGU7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25T
eW5jOjpyb2xsYmFjaygpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1fZGF0YWJhc2UtPmRpc2FibGVB
dXRob3JpemVyKCk7CisgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgbV9z
cWxpdGVUcmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlv
bi5jbGVhcigpOworICAgIH0KKyAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisK
KyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblBy
b2dyZXNzKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5oCShyZXZp
c2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaAkod29y
a2luZyBjb3B5KQpAQCAtMiw1MiArMiw2MyBAQAogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgU1FM
VHJhbnNhY3Rpb25TeW5jX2gKICNkZWZpbmUgU1FMVHJhbnNhY3Rpb25TeW5jX2gKIAogI2lmIEVO
QUJMRShEQVRBQkFTRSkKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7Ci0KIGNsYXNzIERhdGFiYXNlU3luYzsKIGNsYXNzIFNRTFJlc3VsdFNldDsKIGNsYXNz
IFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwogY2xhc3MgU1FMVmFsdWU7CitjbGFzcyBTUUxp
dGVUcmFuc2FjdGlvbjsKIGNsYXNzIFN0cmluZzsKIAogLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xh
c3Mgc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4
dCB0aHJlYWQuCiBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxT
UUxUcmFuc2FjdGlvblN5bmM+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvblN5bmM+IGNyZWF0ZShEYXRhYmFzZVN5bmMqLCBQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSA9IGZhbHNlKTsKKworICAgIGNsYXNz
IFNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3RlcCA6IHB1YmxpYyBSZWZDb3VudGVkPFNRTFRy
YW5zYWN0aW9uU3luY09wdGlvbmFsU3RlcD4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVh
bCB+U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwKCkgeyB9CisgICAgICAgIHZpcnR1YWwg
RXhjZXB0aW9uQ29kZSBwZXJmb3JtU3RlcChTUUxUcmFuc2FjdGlvblN5bmMqKSA9IDA7CisgICAg
fTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luYz4gY3JlYXRlKERh
dGFiYXNlU3luYyosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29s
IHJlYWRPbmx5ID0gZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNPcHRpb25hbFN0ZXA+IHBy
ZWZsaWdodFN0ZXAgPSAwLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3Rl
cD4gcG9zdGZsaWdodFN0ZXAgPSAwKTsKIAogICAgIH5TUUxUcmFuc2FjdGlvblN5bmMoKTsKIApA
QCAtNTYsMTIgKzY3LDIzIEBAIHB1YmxpYzoKICAgICBEYXRhYmFzZVN5bmMqIGRhdGFiYXNlKCkg
eyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQogICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVhZE9ubHk7IH0KIAorICAgIEV4Y2VwdGlvbkNvZGUgYmVnaW4oKTsKKyAg
ICBFeGNlcHRpb25Db2RlIGV4ZWN1dGUoKTsKKyAgICBFeGNlcHRpb25Db2RlIGNvbW1pdCgpOwor
ICAgIHZvaWQgcm9sbGJhY2soKTsKKwogcHJpdmF0ZToKLSAgICBTUUxUcmFuc2FjdGlvblN5bmMo
RGF0YWJhc2VTeW5jKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJv
b2wgcmVhZE9ubHkpOworICAgIFNRTFRyYW5zYWN0aW9uU3luYyhEYXRhYmFzZVN5bmMqLCBQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiwgYm9vbCByZWFkT25seSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNPcHRpb25hbFN0
ZXA+IHByZWZsaWdodFN0ZXAsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxT
dGVwPiBwb3N0ZmxpZ2h0U3RlcCk7CiAKICAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBtX2RhdGFi
YXNlOwogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gbV9jYWxsYmFjazsK
ICAgICBib29sIG1fcmVhZE9ubHk7CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY09wdGlv
bmFsU3RlcD4gbV9wcmVmbGlnaHRTdGVwOworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNP
cHRpb25hbFN0ZXA+IG1fcG9zdGZsaWdodFN0ZXA7CisKKyAgICBib29sIG1fbW9kaWZpZWREYXRh
YmFzZTsKKyAgICBPd25QdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25TeW5jLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25TeW5jLmlkbAkocmV2aXNpb24gNjI3MzQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25TeW5jLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMiwyOCArMiwzMCBAQAogICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKIG1vZHVsZSBzdG9yYWdlIHsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDI4ICsyLDMwIEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqVHJhbnNhY3Rpb24KLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBTUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFja19oCkBAIC0zMiw3ICszNCw2IEBACiAjaWYgRU5BQkxFKERB
VEFCQVNFKQogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsCShyZXZpc2lvbiA2MjczNCkKKysr
IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTIsMjggKzIsMzAgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgogICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiBtb2R1bGUgc3RvcmFnZSB7
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJv
bWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1NRTFRyYW5z
YWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA2MjczNCkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsMTggKzMxLDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKIAotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIKLSNp
bmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiU1FMVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vdGlmeURhdGFi
YXNlQ2hhbmdlZFRhc2s+IGNyZWF0ZShEYXRhYmFzZSAqZGF0YWJhc2UpCisgICAgc3RhdGljIFBh
c3NPd25QdHI8Tm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzaz4gY3JlYXRlKEFic3RyYWN0RGF0YWJh
c2UgKmRhdGFiYXNlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBOb3RpZnlEYXRhYmFzZUNo
YW5nZWRUYXNrKGRhdGFiYXNlKTsKICAgICB9CkBAIC01MywzNCArNTAsMzUgQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrKFBhc3NSZWZQ
dHI8RGF0YWJhc2U+IGRhdGFiYXNlKQorICAgIE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2soUGFz
c1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBkYXRhYmFzZSkKICAgICAgICAgOiBtX2RhdGFiYXNl
KGRhdGFiYXNlKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJh
c2U7CisgICAgUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IG1fZGF0YWJhc2U7CiB9OwogCi12b2lk
IFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRUcmFuc2FjdGlvbihTUUxUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24pCit2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRXcml0
ZVRyYW5zYWN0aW9uKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewotICAgIEFTU0VSVChj
dXJyZW50VGhyZWFkKCkgPT0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7Ci0gICAgaWYgKCF0
cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5kYXRhYmFz
ZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKE5vdGlmeURhdGFiYXNlQ2hh
bmdlZFRhc2s6OmNyZWF0ZSh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSkpOworICAgIGlmICghZGF0
YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpIHsKKyAg
ICAgICAgZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soTm90aWZ5
RGF0YWJhc2VDaGFuZ2VkVGFzazo6Y3JlYXRlKGRhdGFiYXNlKSk7CisgICAgICAgIHJldHVybjsK
ICAgICB9CisKKyAgICBXZWJDb3JlOjpEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZU1vZGlmaWVk
KGRhdGFiYXNlKTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0
YXRlbWVudChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit2b2lkIFNRTFRyYW5zYWN0aW9u
Q2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQog
ewogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciBleGVjdXRpbmcgZXZlcnkgc3Rh
dGVtZW50IHRoYXQgY2hhbmdlcyB0aGUgREIuCiAgICAgLy8gQ2hyb21pdW0gZG9lc24ndCBuZWVk
IHRvIGRvIGFueXRoaW5nIGF0IHRoYXQgcG9pbnQuCi0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQo
KSA9PSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5k
YXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKIH0KIAotYm9vbCBTUUxUcmFuc2FjdGlv
bkNsaWVudDo6ZGlkRXhjZWVkUXVvdGEoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorYm9v
bCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhjZWVkUXVvdGEoQWJzdHJhY3REYXRhYmFzZSog
ZGF0YWJhc2UpCiB7CiAgICAgLy8gQ2hyb21pdW0gZG9lcyBub3QgYWxsb3cgdXNlcnMgdG8gbWFu
dWFsbHkgY2hhbmdlIHRoZSBxdW90YSBmb3IgYW4gb3JpZ2luIChmb3Igbm93LCBhdCBsZWFzdCku
CiAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcuCi0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAg
ICBBU1NFUlQoZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhy
ZWFkKCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjI3MzQp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5NCBA
QAorMjAxMC0wNy0wMyAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBvcnRpbmcgYXMg
bWFueSBhc3luYyBEQiB0ZXN0cyBhcyBwb3NzaWJsZSB0byBzeW5jIERCcy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNjA3CisKKyAgICAgICAgKiBm
YXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12
ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29y
a2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5jLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2VtcHR5LXN0YXRlbWVudC1zeW5j
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1w
dHktc3RhdGVtZW50LXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0
b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5
LW9uZS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
d29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3lu
Yy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10
cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1v
bi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29y
a2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJh
c2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dv
cmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
ZW1wdHktdmVyc2lvbi1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9z
dG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMtZXhwZWN0ZWQudHh0OiBDb3BpZWQgZnJv
bSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5w
dXRzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRh
dGFiYXNlLWlucHV0cy1zeW5jLmh0bWw6IENvcGllZCBmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbC4KKyAgICAgICAgKiBm
YXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVu
LWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50
eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFz
ZS1zeW5jLWlucHV0cy5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0
YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24taGFu
ZGxlLXJldXNlLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAoY2F0Y2gpOgorICAgICAgICAqIGZh
c3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1zeW5jLTEuanM6IEFk
ZGVkLgorICAgICAgICAoKToKKyAgICAgICAgKHRyeSk6CisgICAgICAgICogZmFzdC93b3JrZXJz
L3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMi5qczogQWRkZWQuCisgICAg
ICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2VtcHR5LXN0YXRlbWVudC1zeW5j
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhl
Y3V0ZS1zcWwtYXJncy1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKHRocm93T25Ub1N0cmluZ09i
amVjdC50b1N0cmluZyk6CisgICAgICAgICh2YXIpOgorICAgICAgICAoKToKKyAgICAgICAgKHJ1
blRyYW5zYWN0aW9uVGVzdCk6CisgICAgICAgIChydW5UcmFuc2FjdGlvblRlc3RzKToKKyAgICAg
ICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZXNxbC1hY2NlcHRzLW9u
bHktb25lLXN0YXRlbWVudC1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKGV4ZWN1dGVTdGF0ZW1l
bnQpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10
cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5qczogQWRkZWQuCisgICAgICAg
IChydW5UcmFuc2FjdGlvbik6CisgICAgICAgICh2YXIpOgorICAgICAgICAqIGZhc3Qvd29ya2Vy
cy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtc3luYy5qczogQWRkZWQu
CisgICAgICAgIChjaGVja0NvbXBsZXRpb24pOgorICAgICAgICAocnVuVGVzdC5kYik6CisgICAg
ICAgIChydW5UZXN0KToKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
b3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJz
aW9uLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmpzOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0
cy5qcy4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qczogUmVt
b3ZlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmpzOiBBZGRlZC4KKyAgICAg
ICAgKG9wZW5UZXN0RGF0YWJhc2UpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jl
c291cmNlcy9zcWwtZGF0YS10eXBlcy1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKCk6CisgICAg
ICAgICh0ZXN0REJWYWx1ZXMpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAodGVzdFRy
YW5zYWN0aW9uKToKKyAgICAgICAgKCk6CisgICAgICAgICh0ZXN0SW52YWxpZFN0YXRlbWVudCk6
CisgICAgICAgICh0ZXN0SW5jb3JyZWN0TnVtYmVyT2ZCaW5kUGFyYW1ldGVycyk6CisgICAgICAg
ICh0ZXN0QmluZFBhcmFtZXRlck9mV3JvbmdUeXBlLmJhZFN0cmluZy50b1N0cmluZyk6CisgICAg
ICAgICh0ZXN0QmluZFBhcmFtZXRlck9mV3JvbmdUeXBlKToKKyAgICAgICAgKHRlc3RWZXJzaW9u
TWlzbWF0Y2gudGVzdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKHRlc3RWZXJzaW9uTWlzbWF0Y2gp
OgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90ZXN0LWF1dGhvcml6
ZXItc3luYy5qczogQWRkZWQuCisgICAgICAgIChjbGVhbnVwKToKKyAgICAgICAgKGV4ZWN1dGVT
dGF0ZW1lbnQpOgorICAgICAgICAoY3JlYXRlVGFibGVDYWxsYmFjayk6CisgICAgICAgIChjcmVh
dGVTdGF0ZW1lbnRzQ2FsbGJhY2spOgorICAgICAgICAob3RoZXJTdGF0ZW1lbnRzQ2FsbGJhY2sp
OgorICAgICAgICAoZHJvcFN0YXRlbWVudHNDYWxsYmFjayk6CisgICAgICAgICh0ZXN0UmVhZFdy
aXRlTW9kZSk6CisgICAgICAgICh0ZXN0UmVhZE9ubHlNb2RlKToKKyAgICAgICAgKiBmYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5q
czogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlwZXMt
c3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdl
L3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXpl
ci1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvdGVzdC1hdXRob3JpemVyLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3RyYW5zYWN0aW9uLWluLXRy
YW5zYWN0aW9uLXN5bmMuaHRtbDogQWRkZWQuCisKIDIwMTAtMDctMDcgIENocmlzIEZsZWl6YWNo
ICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBObyByZXZpZXcuIEZpeGluZyBza2lw
cGVkIGxheW91dCB0ZXN0IG5hbWUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24t
aGFuZGxlLXJldXNlLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKK1Rlc3QgdGhhdCB0aGUg
ZGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLgorUEFT
UzogY2hhbmdlVmVyc2lvbigpIHRyYW5zYWN0aW9uIGNhbGxiYWNrIHdhcyBjYWxsZWQuCitQQVNT
OiBObyBleGNlcHRpb24gdGhyb3duIHdoaWxlIGV4ZWN1dGluZyBzdGF0ZW1lbnRzLgorUEFTUzog
Tm8gZXhjZXB0aW9uIHRocm93biB3aGlsZSBydW5uaW5nIGEgdHJhbnNhY3Rpb24uCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1y
ZXVzZS1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRs
ZS1yZXVzZS1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL2NoYW5n
ZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmpzJykiPgorVGVzdCB0aGF0IHRoZSBkYXRhYmFz
ZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcgaXRzIHZlcnNpb24uCis8cHJlIGlkPSJj
b25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24t
c3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzIEBACitUZXN0IHRoYXQgdmVyc2lvbiB1cGRhdGVzIGluIHN5bmMgZGF0YWJh
c2VzIHdvcmsgY29ycmVjdGx5LgorUEFTUzogZGIudmVyc2lvbiBpcyAzIGFzIGV4cGVjdGVkLgor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1z
eW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
Y2hhbmdlLXZlcnNpb24tc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ5IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyht
ZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJI
VE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKQorewor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LmxvY2F0aW9uLnNlYXJjaCA9PSAi
PzIiKSB7CisgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCJyZXNvdXJjZXMvY2hhbmdl
LXZlcnNpb24tc3luYy0yLmpzIik7CisgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlv
bihldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT0gImRvbmUiKQorICAgICAg
ICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBsb2coZXZlbnQuZGF0YSk7CisgICAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFy
IHdvcmtlciA9IG5ldyBXb3JrZXIoInJlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1zeW5jLTEuanMi
KTsKKyAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAg
ICAgICBpZiAoZXZlbnQuZGF0YSA9PSAiZG9uZSIpCisgICAgICAgICAgICAgICAgd2luZG93Lmxv
Y2F0aW9uLmhyZWYgPSB3aW5kb3cubG9jYXRpb24gKyAiPzIiOworICAgICAgICAgICAgZWxzZSBp
ZiAoZXZlbnQuZGF0YSA9PSAiZmFpbCIpCisgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvZyhldmVudC5kYXRhKTsKKyAgICAg
ICAgfTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVz
dCgpIj4KK1Rlc3QgdGhhdCB2ZXJzaW9uIHVwZGF0ZXMgaW4gc3luYyBkYXRhYmFzZXMgd29yayBj
b3JyZWN0bHkuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5
bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL2VtcHR5LXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2VtcHR5LXN0YXRlbWVudC1zeW5jLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitUaGlzIHRlc3QgdHJpZXMg
dG8gZXhlY3V0ZSBhbiBlbXB0eSBzdGF0ZW1lbnQuCitQQVNTOiByZXN1bHQgaXMgbnVsbAorUEFT
UworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1l
bnQtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL2VtcHR5LXN0YXRlbWVudC1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBv
bmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9lbXB0eS1zdGF0ZW1lbnQtc3luYy5qcycpIj4KK1Ro
aXMgdGVzdCB0cmllcyB0byBleGVjdXRlIGFuIGVtcHR5IHN0YXRlbWVudC4KKzxwcmUgaWQ9ImNv
bnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFy
Z3Mtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIwIEBACitUZXN0IHZhcmlvdXMgaW5wdXRzIHRvIGV4ZWN1dGVTcWwo
KS4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFT
UzogZXhlY3V0ZVNxbCgiIiwgbnVsbCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uCitQQVNT
OiBleGVjdXRlU3FsKCIiLCB1bmRlZmluZWQpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgor
UEFTUzogZXhlY3V0ZVNxbCgiIiwgW10pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFT
UzogZXhlY3V0ZVNxbCgiIiwgWyAiYXJnMCIgXSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24u
CitQQVNTOiBleGVjdXRlU3FsKCIiLCB7IH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgor
UEFTUzogZXhlY3V0ZVNxbCgiIiwgeyBsZW5ndGg6IDAgfSkgZGlkIG5vdCB0aHJvdyBhbiBleGNl
cHRpb24uCitQQVNTOiBleGVjdXRlU3FsKCIiLCB7IGxlbmd0aDogMSwgMDogImFyZzAiIH0pIGRp
ZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhlY3V0ZVNxbCgpIHRocmV3IGFuIGV4
Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwobnVsbCkgdGhyZXcgYW4gZXhj
ZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCh1bmRlZmluZWQpIHRocmV3IGFu
IGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwoMCkgdGhyZXcgYW4gZXhj
ZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCh0aHJvd09uVG9TdHJpbmdPYmpl
Y3QpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIs
IHRocm93T25HZXRMZW5ndGhPYmplY3QpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4K
K1BBU1M6IGV4ZWN1dGVTcWwoIiIsIHRocm93T25HZXRaZXJvT2JqZWN0KSB0aHJldyBhbiBleGNl
cHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKCIiLCBbIHRocm93T25Ub1N0cmlu
Z09iamVjdCBdKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRl
U3FsKCIiLCAwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRl
U3FsKCIiLCAiIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNx
bC1hcmdzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlu
cHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRl
c3QoJ3Jlc291cmNlcy9leGVjdXRlLXNxbC1hcmdzLXN5bmMuanMnKSI+CitUZXN0IHZhcmlvdXMg
aW5wdXRzIHRvIGV4ZWN1dGVTcWwoKS4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVj
dXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNj
ZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlc3FsLWFjY2VwdHMtb25s
eS1vbmUtc3RhdGVtZW50LXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwIEBACitUZXN0IHRoYXQgZXhlY3V0ZVNxbCgpIGFjY2VwdHMgb25seSBvbmUgc3RhdGVtZW50
LgorUEFTUzogSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDEpCitQQVNTOiBJTlNFUlQgSU5UTyBU
ZXN0IFZBTFVFUyAoMik7CitQQVNTOiAgICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMykgICAg
CitQQVNTOiAgICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoNCk7ICAgCitQQVNTOiBJTlNFUlQg
SU5UTyBUZXN0IFZBTFVFUyAoNSkgICA7CitQQVNTOiBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAo
Nik7IGdhcmJhZ2UKK1BBU1M6IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg3KTsgSU5TRVJUIElO
VE8gVGVzdCBWQUxVRVMgKDgpCitQQVNTOiAgIElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg5KTsg
ICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMTApOyAgIAorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50
LXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNj
ZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0
cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3Qo
J3Jlc291cmNlcy9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuanMn
KSI+CitUZXN0IHRoYXQgZXhlY3V0ZVNxbCgpIGFjY2VwdHMgb25seSBvbmUgc3RhdGVtZW50Lgor
PHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZm
ZXJlbnQtaGFuZGxlcy1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50
LWhhbmRsZXMtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhh
bmRsZXMtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVz
dCB0aGF0IGV4ZWN1dGluZyBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRs
ZXMgdG8gdGhlIHNhbWUgZGF0YWJhc2UgZG9lc24ndCBjYXVzZSBkZWFkbG9ja3MuCitQQVNTCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0
aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZl
cmVudC1oYW5kbGVzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxl
cy1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL211bHRpcGxlLXRy
YW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmpzJykiPgorVGVzdCB0aGF0IGV4
ZWN1dGluZyBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhl
IHNhbWUgZGF0YWJhc2UgZG9lc24ndCBjYXVzZSBkZWFkbG9ja3MuCis8cHJlIGlkPSJjb25zb2xl
Ij4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVu
LWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVh
dGlvbi1jYWxsYmFjay1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
IEBACitUaGlzIHRlc3QgdGVzdHMgb3BlbkRhdGFiYXNlU3luYygpJ3MgY3JlYXRpb24gY2FsbGJh
Y2suCitQQVNTOiBDcmVhdGlvbiBjYWxsYmFjayB3YXMgY2FsbGVkLgorUEFTUzogVmVyc2lvbiBz
ZXQgdG8gZW1wdHkgc3RyaW5nIGFzIGV4cGVjdGVkLgorUEFTUzogQW4gZXhjZXB0aW9uIHdhcyB0
aHJvd24gYW5kIGRiMUZhaWwgaXMgbnVsbCBhcyBleHBlY3RlZC4KKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1z
eW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9u
LWNhbGxiYWNrLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Bl
bi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmpzJykiPgorVGhpcyB0ZXN0IHRlc3Rz
IG9wZW5EYXRhYmFzZVN5bmMoKSdzIGNyZWF0aW9uIGNhbGxiYWNrLgorPHByZSBpZD0iY29uc29s
ZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRh
dGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNp
b24tc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCB0
aGF0IG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiB0aGUgZGF0YWJhc2UgaXMgb3BlbmVkIHdp
dGggYW4gZW1wdHkgdmVyc2lvbi4KK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWVt
cHR5LXZlcnNpb24tc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9u
LXN5bmMuanMnKSI+CitUZXN0IHRoYXQgbm8gZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIHRoZSBk
YXRhYmFzZSBpcyBvcGVuZWQgd2l0aCBhbiBlbXB0eSB2ZXJzaW9uLgorPHByZSBpZD0iY29uc29s
ZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
aW5wdXRzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MjIzMCkJKGZyb20gTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3Rl
ZC50eHQ6NjIyMzApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRh
dGFiYXNlLWlucHV0cy1zeW5jLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExIEBACitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IG9wZW5EYXRhYmFzZVN5bmMoKSBhY2Nl
cHRzIG9ubHkgdmFsaWQgcGFyYW1ldGVycy4KK1BBU1M6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRp
b24gMTIKK1BBU1M6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIKK1BBU1M6IHVuZGVmaW5l
ZAorUEFTUzogdW5kZWZpbmVkCitQQVNTOiB1bmRlZmluZWQKK1BBU1M6IFRZUEVfTUlTTUFUQ0hf
RVJSOiBET00gRXhjZXB0aW9uIDE3CitQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVk
LgorUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4KK1BBU1M6IGNhbGxpbmcgb3Bl
bkRhdGFiYXNlU3luYygpIHdpdGggYSBjcmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuCisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRz
LXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0bWwJKHJldmlzaW9uIDYyMjMwKQkoZnJvbSBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRz
Lmh0bWw6NjIyMzApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRh
dGFiYXNlLWlucHV0cy1zeW5jLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAor
PCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90
ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9
InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzJykiPgorVGhp
cyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBvcGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZh
bGlkIHBhcmFtZXRlcnMuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFz
ZS1pbnB1dHMtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbAkocmV2aXNpb24gNjIyMzAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0
cy1zeW5jLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBACiA8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiAKLTxi
b2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMu
anMnKSI+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWlu
cHV0cy1zeW5jLmpzJykiPgogVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBvcGVuRGF0YWJhc2VT
eW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlkIHBhcmFtZXRlcnMuCiA8cHJlIGlkPSJjb25zb2xlIj4K
IDwvcHJlPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRh
YmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12
ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUaGlzIHRlc3RzIHRoYXQg
Y2FsbGluZyBvcGVuRGF0YWJhc2Ugd2l0aCBhbiBlbXB0eSB2ZXJzaW9uIHN0cmluZyBzZXRzIHRo
ZSBjdXJyZW50IHZlcnNpb24gb2YgdGhhdCBkYXRhYmFzZSB0byB0aGUgZW1wdHkgc3RyaW5nIGFu
ZCBzdWJzZXF1ZW50IGF0dGVtcHRzIHRvIG9wZW4gdGhlIGRhdGFiYXNlIHdpdGggYSBkaWZmZXJl
bnQgZXhwZWN0ZWQgdmVyc2lvbiB0aHJvdyBhbiBleGNlcHRpb24uCitQQVNTCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZl
cnNpb24tc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1z
ZXQtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAK
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1v
bi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3Vy
Y2VzL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5qcycpIj4KK1RoaXMgdGVz
dHMgdGhhdCBjYWxsaW5nIG9wZW5EYXRhYmFzZSB3aXRoIGFuIGVtcHR5IHZlcnNpb24gc3RyaW5n
IHNldHMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGF0IGRhdGFiYXNlIHRvIHRoZSBlbXB0eSBz
dHJpbmcgYW5kIHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8gb3BlbiB0aGUgZGF0YWJhc2Ugd2l0aCBh
IGRpZmZlcmVudCBleHBlY3RlZCB2ZXJzaW9uIHRocm93IGFuIGV4Y2VwdGlvbi4KKzxwcmUgaWQ9
ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRh
dGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjI3MzQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxMSArMCwwIEBACi1UaGlzIHRlc3QgbWFr
ZXMgc3VyZSB0aGF0IG9wZW5EYXRhYmFzZVN5bmMoKSBhY2NlcHRzIG9ubHkgdmFsaWQgcGFyYW1l
dGVycy4KLVBBU1M6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIKLVBBU1M6IFNZTlRBWF9F
UlI6IERPTSBFeGNlcHRpb24gMTIKLVBBU1M6IHVuZGVmaW5lZAotUEFTUzogdW5kZWZpbmVkCi1Q
QVNTOiB1bmRlZmluZWQKLVBBU1M6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3
Ci1QQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLgotUEFTUzogb3BlbkRhdGFiYXNl
U3luYygpIHN1Y2NlZWRlZC4KLVBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGgg
YSBjcmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuCi0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMt
aW5wdXRzLmh0bWwJKHJldmlzaW9uIDYyNzM0KQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEyICswLDAgQEAKLTwhZG9jdHlwZSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4K
LQotPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlu
cHV0cy5qcycpIj4KLVRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgb3BlbkRhdGFiYXNlU3luYygp
IGFjY2VwdHMgb25seSB2YWxpZCBwYXJhbWV0ZXJzLgotPHByZSBpZD0iY29uc29sZSI+Ci08L3By
ZT4KLTwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCB0aGF0IGEgc2Vjb25kIGhhbmRs
ZSB0byB0aGUgc2FtZSBkYXRhYmFzZSBjYW4gYmUgb3BlbmVkIGluc2lkZSBhIHRyYW5zYWN0aW9u
IHJ1bm5pbmcgb24gdGhlIGZpcnN0IGhhbmRsZS4KK1BBU1M6IHNlY29uZCBoYW5kbGUgb3BlbmVk
IHN1Y2Nlc3NmdWxseS4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFz
ZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRy
YW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMt
Y29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdy
ZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5j
LmpzJykiPgorVGVzdCB0aGF0IGEgc2Vjb25kIGhhbmRsZSB0byB0aGUgc2FtZSBkYXRhYmFzZSBj
YW4gYmUgb3BlbmVkIGluc2lkZSBhIHRyYW5zYWN0aW9uIHJ1bm5pbmcgb24gdGhlIGZpcnN0IGhh
bmRsZS4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9zcWwtZGF0YS10eXBlcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK1Rlc3QgdGhhdCB0aGUgdmFsdWVzIHJl
dHVybmVkIGJ5IERCIHF1ZXJpZXMgYXJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHZhbHVlcyBp
bnNlcnRlZCBpbiB0aGUgZGF0YWJhc2UuCitQQVNTOiBwcm9wZXJ0eSAndGltZXN0YW1wJyBPSywg
dHlwZSB3YXMgbnVtYmVyCitQQVNTOiBwcm9wZXJ0eSAnaWQnIE9LLCB0eXBlIHdhcyBudW1iZXIK
K1BBU1M6IHByb3BlcnR5ICdyZWFsJyBPSywgdHlwZSB3YXMgbnVtYmVyCitQQVNTOiBwcm9wZXJ0
eSAndGV4dCcgT0ssIHR5cGUgd2FzIHN0cmluZworUEFTUzogcHJvcGVydHkgJ2Jsb2InIE9LLCB0
eXBlIHdhcyBzdHJpbmcKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
c3FsLWRhdGEtdHlwZXMtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
KworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvc3FsLWRhdGEtdHlwZXMtc3luYy5q
cycpIj4KK1Rlc3QgdGhhdCB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IERCIHF1ZXJpZXMgYXJlIG9m
IHRoZSBzYW1lIHR5cGUgYXMgdGhlIHZhbHVlcyBpbnNlcnRlZCBpbiB0aGUgZGF0YWJhc2UuCis8
cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9z
cWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACitUZXN0IHRoYXQgdGhlIGNv
cnJlY3QgZXhjZXB0aW9ucyBhcmUgdGhyb3duIGluIGV4Y2VwdGlvbmFsIHNpdHVhdGlvbnMuCitQ
QVNTOiBleHBlY3RlZCBhbmQgZ290IGVycm9yIGNvZGUgVU5LTk9XTl9FUlIKK1BBU1M6IGV4cGVj
dGVkIGFuZCBnb3QgZXJyb3IgY29kZSBTWU5UQVhfRVJSCitQQVNTOiBleHBlY3RlZCBhbmQgZ290
IGVycm9yIGNvZGUgU1lOVEFYX0VSUgorUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2Rl
IFVOS05PV05fRVJSCitQQVNTOiBleHBlY3RlZCBhbmQgZ290IGVycm9yIGNvZGUgUVVPVEFfRVJS
CitQQVNTOiBUcmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2sgYnkgU1FMaXRlIGFzIGV4cGVjdGVk
LgorUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFZFUlNJT05fRVJSCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3lu
Yy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Nx
bC1leGNlcHRpb24tY29kZXMtc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5
IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5qcycp
Ij4KK1Rlc3QgdGhhdCB0aGUgY29ycmVjdCBleGNlcHRpb25zIGFyZSB0aHJvd24gaW4gZXhjZXB0
aW9uYWwgc2l0dWF0aW9ucy4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhv
cml6ZXItc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVy
LXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACitUZXN0IHRo
ZSBkYXRhYmFzZSBhdXRob3JpemVyLgorQmVnaW5uaW5nIHdyaXRlIHRyYW5zYWN0aW9uOgorU1FM
SVRFX0NSRUFURV9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9JTkRF
WCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHN0YXRlbWVu
dCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2Vl
ZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElU
RV9DUkVBVEVfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9WSUVX
IHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZUQUJMRSBzdGF0ZW1lbnQgZmFp
bGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfUkVBRCBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorU1FMSVRFX1NFTEVDVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RFTEVU
RSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0lOU0VSVCBzdGF0ZW1lbnQgc3VjY2VlZGVk
LgorU1FMSVRFX1VQREFURSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1BSQUdNQSBzdGF0
ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQUxURVJfVEFC
TEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorU1FMSVRFX1RSQU5TQUNUSU9OIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FM
RXhjZXB0aW9uXSAoNSkKK1NRTElURV9BVFRBQ0ggc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBT
UUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RFVEFDSCBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0
IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfUkVJTkRFWCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgor
U1FMSVRFX0FOQUxZWkUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1
KQorU1FMSVRFX0RST1BfSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RF
TVBfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RFTVBfVFJJR0dFUiBz
dGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEVNUF9WSUVXIHN0YXRlbWVudCBzdWNj
ZWVkZWQuCitTUUxJVEVfRFJPUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVf
RFJPUF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9UQUJMRSBzdGF0ZW1l
bnQgc3VjY2VlZGVkLgorV3JpdGUgdHJhbnNhY3Rpb24gc3VjY2VlZGVkLgorCitCZWdpbm5pbmcg
cmVhZCB0cmFuc2FjdGlvbnM6CitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6
IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9DUkVBVEVfVEFCTEUgc3RhdGVtZW50
IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfSU5ERVggc3RhdGVtZW50IGZhaWxlZDogW29iamVj
dCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHN0YXRlbWVudCBm
YWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9DUkVBVEVfVEVNUF9UUklH
R0VSIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9D
UkVBVEVfVEVNUF9WSUVXIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAo
NSkKK1NRTElURV9DUkVBVEVfVFJJR0dFUiBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4
Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogW29iamVj
dCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0NSRUFURV9WVEFCTEUgc3RhdGVtZW50IGZhaWxl
ZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0NSRUFURV9JTkRFWCBzdGF0ZW1l
bnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVk
ZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FM
SVRFX0NSRUFURV9URU1QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVf
VFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9WSUVXIHN0YXRlbWVu
dCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZUQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2Jq
ZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfUkVBRCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgor
U1FMSVRFX1NFTEVDVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RFTEVURSBzdGF0ZW1l
bnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfSU5TRVJUIHN0YXRl
bWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9VUERBVEUgc3Rh
dGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX1BSQUdNQSBz
dGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQUxURVJf
VEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRF
X0FMVEVSX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkK
K1NRTElURV9UUkFOU0FDVElPTiBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlv
bl0gKDUpCitTUUxJVEVfQVRUQUNIIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0
aW9uXSAoNSkKK1NRTElURV9ERVRBQ0ggc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNl
cHRpb25dICg1KQorU1FMSVRFX1JFSU5ERVggc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxF
eGNlcHRpb25dICg1KQorU1FMSVRFX0FOQUxZWkUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBT
UUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RST1BfSU5ERVggc3RhdGVtZW50IGZhaWxlZDogW29i
amVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBzdGF0ZW1lbnQg
ZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9URU1QX1RSSUdH
RVIgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RS
T1BfVEVNUF9WSUVXIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkK
K1NRTElURV9EUk9QX1RSSUdHRVIgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRp
b25dICg1KQorU1FMSVRFX0RST1BfVklFVyBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4
Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0
IFNRTEV4Y2VwdGlvbl0gKDUpCitSZWFkIHRyYW5zYWN0aW9ucyBzdWNjZWVkZWQuCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1h
dXRob3JpemVyLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3Qt
aW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVu
VGVzdCgncmVzb3VyY2VzL3Rlc3QtYXV0aG9yaXplci1zeW5jLmpzJykiPgorVGVzdCB0aGUgZGF0
YWJhc2UgYXV0aG9yaXplci4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90cmFuc2FjdGlv
bi1pbi10cmFuc2FjdGlvbi1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5j
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL3RyYW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhhdCB0cnlpbmcgdG8gcnVuIGEgdHJhbnNh
Y3Rpb24gaW5zaWRlIGFub3RoZXIgdHJhbnNhY3Rpb24gdGhyb3dzIGFuIGV4Y2VwdGlvbi4KK1BB
U1M6IEV4Y2VwdGlvbiB0aHJvd24gd2hpbGUgdHJ5aW5nIHRvIHJ1biBhIG5lc3RlZCB0cmFuc2Fj
dGlvbi4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdHJhbnNhY3Rp
b24taW4tdHJhbnNhY3Rpb24tc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL3RyYW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3RyYW5zYWN0
aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29t
bW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNv
dXJjZXMvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5qcycpIj4KK1Rlc3QgdGhhdCB0
cnlpbmcgdG8gcnVuIGEgdHJhbnNhY3Rpb24gaW5zaWRlIGFub3RoZXIgdHJhbnNhY3Rpb24gdGhy
b3dzIGFuIGV4Y2VwdGlvbi4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
Y2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLWhhbmRs
ZS1yZXVzZS1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmpzCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACit2YXIgZGIgPSBudWxsOwordHJ5IHsKKyAgICB2
YXIgZGJOYW1lID0gIkNoYW5nZVZlcnNpb25IYW5kbGVSZXVzZVRlc3QiICsgKG5ldyBEYXRlKCkp
LmdldFRpbWUoKTsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoZGJOYW1lLCAiIiwgIlRlc3Qg
dGhhdCB0aGUgREIgaGFuZGxlIGlzIHZhbGlkIGFmdGVyIGNoYW5naW5nIHRoZSB2ZXJzaW9uLiIs
IDEpOworICAgIHZhciB2ZXJzaW9uID0gZGIudmVyc2lvbjsKKyAgICB2YXIgbmV3VmVyc2lvbiA9
IHZlcnNpb24gPyAocGFyc2VJbnQodmVyc2lvbikgKyAxKS50b1N0cmluZygpIDogIjEiOworICAg
IGRiLmNoYW5nZVZlcnNpb24odmVyc2lvbiwgbmV3VmVyc2lvbiwgZnVuY3Rpb24odHgpIHsKKyAg
ICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNoYW5nZVZlcnNpb24oKSB0cmFuc2FjdGlvbiBjYWxs
YmFjayB3YXMgY2FsbGVkLiIpOworICAgIH0pOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1l
c3NhZ2UoIkZBSUw6IGNoYW5nZVZlcnNpb24oKSB0aHJldyBhbiBleGNlcHRpb246ICIgKyBlcnIp
OworfQorCit0cnkgeworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAg
IHRyeSB7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVY
SVNUUyBUZXN0IChGb28gSU5UKSIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiU0VMRUNU
ICogZnJvbSBUZXN0Iik7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogTm8gZXhjZXB0
aW9uIHRocm93biB3aGlsZSBleGVjdXRpbmcgc3RhdGVtZW50cy4iKTsKKyAgICAgICAgfSBjYXRj
aCAoZXJyKSB7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogQW4gZXhjZXB0aW9uIHdh
cyB0aHJvd24gd2hpbGUgZXhlY3V0aW5nIHN0YXRlbWVudHM6ICIgKyBlcnIpOworICAgICAgICB9
CisgICAgfSk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IE5vIGV4Y2VwdGlvbiB0aHJvd24gd2hp
bGUgcnVubmluZyBhIHRyYW5zYWN0aW9uLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1l
c3NhZ2UoIkZBSUw6IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIHdoaWxlIHJ1bm5pbmcgYSB0cmFu
c2FjdGlvbjogIiArIGVycik7Cit9CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3lu
Yy0xLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jl
c291cmNlcy9jaGFuZ2UtdmVyc2lvbi1zeW5jLTEuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0x
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACit2YXIgRVhQRUNURURfVkVSU0lPTl9B
RlRFUl9ISVhJRV9URVNUID0gIjIiOwordmFyIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FE
ID0gIjMiOworCitmdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkgeyB9CisKK3ZhciBkYjEgPSBvcGVu
RGF0YWJhc2VTeW5jKCJDaGFuZ2VWZXJzaW9uVGVzdCIsICIxIiwgIlRlc3QgZm9yIHRoZSBkYXRh
YmFzZS5jaGFuZ2VWZXJzaW9uKCkgZnVuY3Rpb24iLCAxKTsKK3ZhciBkYjIgPSBvcGVuRGF0YWJh
c2VTeW5jKCJDaGFuZ2VWZXJzaW9uVGVzdCIsICIxIiwgIlRlc3QgZm9yIHRoZSBkYXRhYmFzZS5j
aGFuZ2VWZXJzaW9uKCkgZnVuY3Rpb24iLCAxKTsKKworLy8gRmlyc3QgcnVuIEhpeGllJ3MgdGVz
dCB0byBlbnN1cmUgYmFzaWMgY2hhbmdlVmVyc2lvbigpIGZ1bmN0aW9uYWxpdHkgd29ya3MgKHNl
ZSBidWcgMjg0MTgpLgorZGIxLmNoYW5nZVZlcnNpb24oIjEiLCBFWFBFQ1RFRF9WRVJTSU9OX0FG
VEVSX0hJWElFX1RFU1QsIGVtcHR5RnVuY3Rpb24pOworaWYgKGRiMi52ZXJzaW9uICE9IGRiMS52
ZXJzaW9uKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNoYW5naW5nIGRiMSdzIHZlcnNpb24g
KCIgKyBkYjEudmVyc2lvbiArICIpIGRpZCBub3QgY2hhbmdlIGRiMidzIHZlcnNpb24gKCIgKyBk
YjIudmVyc2lvbiArICIpIGFzIGV4cGVjdGVkLiIpOworICAgIHBvc3RNZXNzYWdlKCJmYWlsIik7
Cit9IGVsc2UKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2hhbmdpbmcgZGIxJ3MgdmVyc2lvbiAo
IiArIGRiMS52ZXJzaW9uICsgIikgY2hhbmdlZCBkYjIncyB2ZXJzaW9uIHRvby4iKTsKKworZGIy
LnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgdHJ5IHsKKyAgICAgICAgdHguZXhlY3V0
ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCkiKTsKKyAgICAg
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6IFRoZSBEQiB2ZXJzaW9uIGNoYW5nZWQsIGV4ZWN1dGluZyBh
bnkgc3RhdGVtZW50IG9uIGRiMiBzaG91bGQgZmFpbC4iKTsKKyAgICAgICAgcG9zdE1lc3NhZ2Uo
ImZhaWwiKTsKKyAgICB9IGNhdGNoKGVycikgeworICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IEV4
ZWN1dGluZyBhIHN0YXRlbWVudCBvbiBkYjIgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVk
LiIpOworICAgIH0KK30pOworCisvLyBNYWtlIHN1cmUgYW55IG5ldyBoYW5kbGUgdG8gdGhlIHNh
bWUgREIgc2VlcyB0aGUgbmV3IHZlcnNpb24KK3RyeSB7CisgICAgdmFyIGRiMyA9IG9wZW5EYXRh
YmFzZVN5bmMoIkNoYW5nZVZlcnNpb25UZXN0IiwgRVhQRUNURURfVkVSU0lPTl9BRlRFUl9ISVhJ
RV9URVNULCAiIiwgMSk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IFN1Y2Nlc3NmdWxseSBvcGVu
ZWQgYSBuZXcgREIgaGFuZGxlLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2Uo
IkZBSUw6IFVuZXhwZWN0ZWQgZXhjZXB0aW9uIHRocm93biB3aGlsZSB0cnlpbmcgdG8gb3BlbiBh
IG5ldyBEQiBoYW5kbGU6ICIgKyBlcnIpOworICAgIHBvc3RNZXNzYWdlKCJmYWlsIik7Cit9CisK
K2lmIChkYjEudmVyc2lvbiAhPSBkYjMudmVyc2lvbikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlM
OiBkYjEudmVyc2lvbiAoIiArIGRiMS52ZXJzaW9uICsgIikgZG9lcyBub3QgbWF0Y2ggZGIzLnZl
cnNpb24oIiArIGRiMy52ZXJzaW9uICsiKSIpOworICAgIHBvc3RNZXNzYWdlKCJmYWlsIik7Cit9
IGVsc2UKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogZGIxLnZlcnNpb24gKCIgKyBkYjEudmVyc2lv
biArICIpIG1hdGNoZXMgZGIzLnZlcnNpb24uIik7CisKKy8vIE5vdyB0cnkgYSB0ZXN0IHRvIGVu
c3VyZSB0aGUgdmVyc2lvbiBwZXJzaXN0cyBhZnRlciByZWxvYWRpbmcgKHNlZSBidWcgMjc4MzYp
CitkYjEuY2hhbmdlVmVyc2lvbihFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX0hJWElFX1RFU1QsIEVY
UEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FELAorICAgICAgICAgICAgICAgICAgZnVuY3Rpb24o
dHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJEUk9QIFRBQkxFIElG
IEVYSVNUUyBJbmZvIik7CisgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiQ1JF
QVRFIFRBQkxFIElGIE5PVCBFWElTVFMgSW5mbyAoVmVyc2lvbiBJTlRFR0VSKSIpOworICAgICAg
ICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJTlRPIEluZm8gVkFMVUVTICg/
KSIsIFtFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX1JFTE9BRF0pOworICAgICAgICAgICAgICAgICAg
fSk7CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0yLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVy
c2lvbi1zeW5jLTIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0yLmpzCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyIEBACit2YXIgRVhQRUNURURfVkVSU0lPTl9BRlRFUl9SRUxPQUQgPSAnMyc7
CisKK3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkNoYW5nZVZlcnNpb25UZXN0IiwgIiIsICJU
ZXN0IHRoZSBjaGFuZ2VWZXJzaW9uKCkgZnVuY3Rpb24uIiwgMSk7CitpZiAoZGIudmVyc2lvbiA9
PSBFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX1JFTE9BRCkKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzog
ZGIudmVyc2lvbiBpcyAiICsgRVhQRUNURURfVkVSU0lPTl9BRlRFUl9SRUxPQUQgKyAiIGFzIGV4
cGVjdGVkLiIpOworZWxzZQorICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBkYi52ZXJzaW9uIGlzICIg
KyBkYi52ZXJzaW9uICsgIjsgZXhwZWN0ZWQgIiArIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfUkVM
T0FEKTsKKworLy8gUmVzZXQgdGhlIHZlcnNpb247IG90aGVyd2lzZSB0aGlzIHRlc3Qgd2lsbCBm
YWlsIHRoZSBuZXh0IHRpbWUgaXQncyBydW4KK2RiLmNoYW5nZVZlcnNpb24oZGIudmVyc2lvbiwg
IjEiLCBmdW5jdGlvbih0eCkgeyB9KTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9lbXB0eS1zdGF0ZW1lbnQt
c3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9y
ZXNvdXJjZXMvZW1wdHktc3RhdGVtZW50LXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZW1wdHktc3RhdGVtZW50LXN5bmMu
anMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK3RyeSB7CisgICAgdmFyIGRiID0gb3Bl
bkRhdGFiYXNlU3luYygiRW1wdHlTdGF0ZW1lbnRTeW5jIiwgIjEuMCIsICJUZXN0IGFuIGVtcHR5
IHN0YXRlbWVudC4iLCAxKTsKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAg
ICAgICB2YXIgcmVzdWx0ID0gdHguZXhlY3V0ZVNxbCgiIik7CisgICAgICAgIHBvc3RNZXNzYWdl
KHJlc3VsdCA/ICJGQUlMOiByZXN1bHQgaXMgbm90IG51bGwiIDogIlBBU1M6IHJlc3VsdCBpcyBu
dWxsIik7CisgICAgfSk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1MiKTsKK30gY2F0Y2ggKGVycikg
eworICAgIHBvc3RNZXNzYWdlKCJGQUlMIik7Cit9CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZS1z
cWwtYXJncy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL3Jlc291cmNlcy9leGVjdXRlLXNxbC1hcmdzLXN5bmMuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZS1zcWwt
YXJncy1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBACit2YXIgdGhyb3dPblRv
U3RyaW5nT2JqZWN0ID0geyB9OwordGhyb3dPblRvU3RyaW5nT2JqZWN0LnRvU3RyaW5nID0gZnVu
Y3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGNhbGwgdG9TdHJpbmcgb24gdGhpcyBvYmplY3QuIiB9
OworCit2YXIgdGhyb3dPbkdldExlbmd0aE9iamVjdCA9IHsgfTsKK3Rocm93T25HZXRMZW5ndGhP
YmplY3QuX19kZWZpbmVHZXR0ZXJfXygibGVuZ3RoIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fu
bm90IGdldCBsZW5ndGggb2YgdGhpcyBvYmplY3QuIjsgfSk7CisKK3ZhciB0aHJvd09uR2V0WmVy
b09iamVjdCA9IHsgbGVuZ3RoOiAxIH07Cit0aHJvd09uR2V0WmVyb09iamVjdC5fX2RlZmluZUdl
dHRlcl9fKCIwIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCAwIHByb3BlcnR5IG9m
IHRoaXMgb2JqZWN0LiI7IH0pOworCit2YXIgZXhwZWN0Tm9FeGNlcHRpb24gPSBbCisgICAgJyIi
JywKKyAgICAnIiIsIG51bGwnLAorICAgICciIiwgdW5kZWZpbmVkJywKKyAgICAnIiIsIFtdJywK
KyAgICAnIiIsIFsgImFyZzAiIF0nLAorICAgICciIiwgeyB9JywKKyAgICAnIiIsIHsgbGVuZ3Ro
OiAwIH0nLAorICAgICciIiwgeyBsZW5ndGg6IDEsIDA6ICJhcmcwIiB9JywKK107CisKK3ZhciBl
eHBlY3RFeGNlcHRpb24gPSBbCisgICAgJycsCisgICAgJ251bGwnLAorICAgICd1bmRlZmluZWQn
LAorICAgICcwJywKKyAgICAndGhyb3dPblRvU3RyaW5nT2JqZWN0JywKKyAgICAnIiIsIHRocm93
T25HZXRMZW5ndGhPYmplY3QnLAorICAgICciIiwgdGhyb3dPbkdldFplcm9PYmplY3QnLAorICAg
ICciIiwgWyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXScsCisgICAgJyIiLCAwJywKKyAgICAnIiIs
ICIiJywKK107CisKK2Z1bmN0aW9uIHRyeUV4ZWN1dGVTcWwodHJhbnNhY3Rpb24sIHBhcmFtZXRl
ckxpc3QpCit7CisgICAgdHJ5IHsKKyAgICAgICAgZXZhbCgndHJhbnNhY3Rpb24uZXhlY3V0ZVNx
bCgnICsgcGFyYW1ldGVyTGlzdCArICcpJyk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0g
Y2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgIH0KK30K
KworZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBwYXJhbWV0ZXJMaXN0
LCBleHBlY3RFeGNlcHRpb24pCit7CisgICAgdmFyIGV4Y2VwdGlvbiA9IHRyeUV4ZWN1dGVTcWwo
dHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QpOworICAgIGlmIChleHBlY3RFeGNlcHRpb24pIHsK
KyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBl
eGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4
cGVjdGVkLiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDog
ZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0
aW9uLiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICAg
ICBwb3N0TWVzc2FnZSgiRkFJTDogZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIHRo
cmV3IGFuIGV4Y2VwdGlvbjogIiArIGV4Y2VwdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikg
ZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uIik7CisgICAgfQorfQorCitmdW5jdGlvbiBydW5U
cmFuc2FjdGlvblRlc3RzKHRyYW5zYWN0aW9uKQoreworICAgIGZvciAoaSBpbiBleHBlY3ROb0V4
Y2VwdGlvbikKKyAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBleHBlY3RO
b0V4Y2VwdGlvbltpXSwgZmFsc2UpOworICAgIGZvciAoaSBpbiBleHBlY3RFeGNlcHRpb24pCisg
ICAgICAgIHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgZXhwZWN0RXhjZXB0aW9uW2ld
LCB0cnVlKTsKK30KKwordmFyIGRiID0gb3BlbkRhdGFiYXNlU3luYygiRXhlY3V0ZVNRTEFyZ3NU
ZXN0IiwgIjEuMCIsICJUZXN0IG9mIGhhbmRsaW5nIG9mIHRoZSBhcmd1bWVudHMgdG8gU1FMVHJh
bnNhY3Rpb25TeW5jLmV4ZWN1dGVTcWwiLCAxKTsKK2RiLnRyYW5zYWN0aW9uKHJ1blRyYW5zYWN0
aW9uVGVzdHMpOworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3Rh
dGVtZW50LXN5bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3lu
Yy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jl
c291cmNlcy9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKK2Z1bmN0aW9uIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
IGV4cGVjdGVkVG9QYXNzLCBzdGF0ZW1lbnQpCit7CisgICAgdHJ5IHsKKyAgICAgICAgdHguZXhl
Y3V0ZVNxbChzdGF0ZW1lbnQpOworICAgICAgICBwb3N0TWVzc2FnZShleHBlY3RlZFRvUGFzcyA/
ICJQQVNTOiAiICsgc3RhdGVtZW50IDogIkZBSUw6ICIgKyBzdGF0ZW1lbnQpOworICAgIH0gY2F0
Y2ggKGVycikgeworICAgICAgICBwb3N0TWVzc2FnZSghZXhwZWN0ZWRUb1Bhc3MgPyAiUEFTUzog
IiArIHN0YXRlbWVudCA6ICJGQUlMOiAiICsgc3RhdGVtZW50KTsKKyAgICB9Cit9CisKK3ZhciBk
YiA9IG9wZW5EYXRhYmFzZVN5bmMoIkV4ZWN1dGVTUUxBY2NlcHRzT25seU9uZVN0YXRlbWVudFRl
c3QiLCAiMS4wIiwgIiIsIDEpOworZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICB0
eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBUZXN0IChGb28gSU5UKSIp
OworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIHRydWUsICJJTlNFUlQgSU5UTyBUZXN0IFZBTFVF
UyAoMSkiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCB0cnVlLCAiSU5TRVJUIElOVE8gVGVz
dCBWQUxVRVMgKDIpOyIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIHRydWUsICIgICBJTlNF
UlQgSU5UTyBUZXN0IFZBTFVFUyAoMykgICAgIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwg
dHJ1ZSwgIiAgIElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg0KTsgICAiKTsKKyAgICBleGVjdXRl
U3RhdGVtZW50KHR4LCB0cnVlLCAiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDUpICAgOyIpOwor
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIGZhbHNlLCAiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMg
KDYpOyBnYXJiYWdlIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgZmFsc2UsICJJTlNFUlQg
SU5UTyBUZXN0IFZBTFVFUyAoNyk7IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg4KSIpOworICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodHgsIGZhbHNlLCAiICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAo
OSk7ICAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDEwKTsgICAiKTsKK30pOworcG9zdE1lc3Nh
Z2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
bXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvbXVs
dGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuanMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzIgQEAKK2Z1bmN0aW9uIHJ1blRyYW5zYWN0aW9uKGRiKQoreworICAg
IGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgLy8gRXhlY3V0ZSBhIHJlYWQt
b25seSBzdGF0ZW1lbnQKKyAgICAgICB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgQ09VTlQoKikgRlJP
TSBUZXN0OyIpOworCisgICAgICAgLy8gRXhlY3V0ZSBhIHdyaXRlIHN0YXRlbWVudCB0byBtYWtl
IHN1cmUgU1FMaXRlIHRyaWVzIHRvIGFjcXVpcmUgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIERC
IGZpbGUKKyAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoPyk7
IiwgWzFdKTsKKyAgICB9KTsKK30KKwordmFyIGRiMSA9IG9wZW5EYXRhYmFzZVN5bmMoIk11bHRp
cGxlVHJhbnNhY3Rpb25zT25EaWZmZXJlbnRIYW5kbGVzVGVzdCIsICIxLjAiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIlRlc3QgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVz
IHRvIHRoZSBzYW1lIERCLiIsIDEpOworZGIxLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7Cisg
ICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIGlu
dCk7Iik7Cit9KTsKKwordmFyIGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoIk11bHRpcGxlVHJhbnNh
Y3Rpb25zT25EaWZmZXJlbnRIYW5kbGVzVGVzdCIsICIxLjAiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIlRlc3QgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBz
YW1lIERCLiIsIDEpOworaWYgKGRiMSA9PSBkYjIpCisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGRi
MSA9PSBkYjIiKTsKK2Vsc2UgeworICAgIHRyeSB7CisgICAgICAgIHJ1blRyYW5zYWN0aW9uKGRi
MSk7CisgICAgICAgIHJ1blRyYW5zYWN0aW9uKGRiMik7CisgICAgICAgIHBvc3RNZXNzYWdlKCJQ
QVNTIik7CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAi
ICsgZXJyKTsKKyAgICB9Cit9CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvbXVsdGlwbGUtdHJhbnNhY3Rpb25z
LXN5bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
cmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5z
YWN0aW9ucy1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACit2YXIgY29tcGxl
dGUgPSAwOworCitmdW5jdGlvbiBjaGVja0NvbXBsZXRpb24oKQoreworICAgIGlmICgrK2NvbXBs
ZXRlID09IDIgJiYgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQorewor
ICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZVdpdGhTdWZmaXgoIk11bHRpcGxlVHJhbnNhY3Rpb25z
VGVzdCIsICIxLjAiLCAiVGVzdCB0byBtYWtlIHN1cmUgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIGNh
biBiZSBxdWV1ZWQgYXQgb25jZSBmb3IgYW4gSFRNTDUgZGF0YWJhc2UiLCAzMjc2OCk7CisKKyAg
ICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICBsb2coIlRyYW5zYWN0aW9u
IDEgU3RhcnRlZCIpOworICAgIH0sIGZ1bmN0aW9uKGVycikgeworICAgICAgICBsb2coIlRyYW5z
YWN0aW9uIDEgRXJyb3JlZCAtICIgKyBlcnIpOworICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsK
KyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiAxIFN1Y2NlZWRl
ZCIpOworICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsKKyAgICB9KTsKKworICAgIGRiLnRyYW5z
YWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gMiBTdGFydGVk
Iik7CisgICAgfSwgZnVuY3Rpb24oZXJyKSB7CisgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gMiBF
cnJvcmVkIC0gIiArIGVycik7CisgICAgICAgIGNoZWNrQ29tcGxldGlvbigpOworICAgIH0sIGZ1
bmN0aW9uKCkgeworICAgICAgICBsb2coIlRyYW5zYWN0aW9uIDIgU3VjY2VlZGVkIik7CisgICAg
ICAgIGNoZWNrQ29tcGxldGlvbigpOworICAgIH0pOworfQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJh
Y2stc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29w
ZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyOSBAQAordmFyIGNyZWF0aW9uQ2FsbGJhY2tDYWxsZWQxID0gZmFsc2U7Cit2YXIgZGIx
TmFtZSA9ICJPcGVuRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrMSIgKyAobmV3IERhdGUoKSkuZ2V0
VGltZSgpOwordmFyIGRiMk5hbWUgPSAiT3BlbkRhdGFiYXNlQ3JlYXRpb25DYWxsYmFjazIiICsg
KG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKK3ZhciBkYjEgPSBvcGVuRGF0YWJhc2VTeW5jKGRiMU5h
bWUsICIxLjAiLCAiIiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGRi
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IENy
ZWF0aW9uIGNhbGxiYWNrIHdhcyBjYWxsZWQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGRiLnZlcnNpb24gIT0gIiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBXcm9uZyB2ZXJzaW9uICIgKyBkYi52ZXJzaW9uICsg
IjsgZW1wdHkgc3RyaW5nIGV4cGVjdGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uo
IlBBU1M6IFZlcnNpb24gc2V0IHRvIGVtcHR5IHN0cmluZyBhcyBleHBlY3RlZC4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOworCit2YXIgZGIxRmFpbCA9IG51bGw7Cit0cnkgewor
ICAgIGRiMUZhaWwgPSBvcGVuRGF0YWJhc2VTeW5jKGRiMU5hbWUsICIxLjAiLCAiIiwgMSk7Cisg
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6IEFuIElOVkFMSURfU1RBVEVfRVJSIGV4Y2VwdGlvbiBzaG91
bGQndmUgYmVlbiB0aHJvd24uIik7Cit9IGNhdGNoKGVycikgeworICAgIGlmIChkYjFGYWlsKQor
ICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogZGIxRmFpbCBzaG91bGQgaGF2ZSBiZWVuIG51bGwu
Iik7CisgICAgZWxzZQorICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogQW4gZXhjZXB0aW9uIHdh
cyB0aHJvd24gYW5kIGRiMUZhaWwgaXMgbnVsbCBhcyBleHBlY3RlZC4iKTsKK30KKworLy8gT3Bl
biBhIGhhbmRsZSB0byBhbm90aGVyIGRhdGFiYXNlLCBmaXJzdCB3aXRob3V0IGEgY3JlYXRpb24g
Y2FsbGJhY2ssIHRoZW4gd2l0aCBvbmUuCisvLyBNYWtlIHN1cmUgdGhlIGNyZWF0aW9uIGNhbGxi
YWNrIGlzIG5vdCBjYWxsZWQuCit2YXIgZGIyID0gb3BlbkRhdGFiYXNlU3luYyhkYjJOYW1lLCAi
MS4wIiwgIiIsIDEpOworZGIyID0gb3BlbkRhdGFiYXNlU3luYyhkYjJOYW1lLCAiMS4wIiwgIiIs
IDEsIGZ1bmN0aW9uKGRiKSB7IHBvc3RNZXNzYWdlKCJGQUlMOiBDcmVhdGlvbiBjYWxsYmFjayBz
aG91bGQgbm90IGhhdmUgYmVlbiBjYWxsZWQuIik7IH0pOworCitwb3N0TWVzc2FnZSgiZG9uZSIp
OwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4t
ZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNp
b24tc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy5qcwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3IEBACit0cnkgeworICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZVN5
bmMoIk9wZW5EYXRhYmFzZUVtcHR5VmVyc2lvblRlc3QiLCAiIiwgIlRlc3QgdGhhdCB3ZSBjYW4g
b3BlbiBkYXRhYmFzZXMgd2l0aCBhbiBlbXB0eSB2ZXJzaW9uLiIsIDEpOworICAgIHBvc3RNZXNz
YWdlKCJQQVNTIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiAr
IGVycik7Cit9Citwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29w
ZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuanMJKHJldmlzaW9uIDYyMjMwKQkoZnJvbSBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlu
cHV0cy5qczo2MjIzMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzQgQEAKK3ZhciBkYjsKKwordmFyIG5vdEFTdHJpbmcgPSB7CisgICAgdG9TdHJpbmc6IGZ1
bmN0aW9uKCkgeyB0aHJvdyAiZm9vIjsgfQorfTsKKwordHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRh
YmFzZVN5bmMoKTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogY2FsbGluZyBvcGVuRGF0YWJhc2VT
eW5jKCkgd2l0aG91dCBhbnkgYXJndW1lbnQgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsK
K30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2Up
OworfQorCit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVy
c2lvbiIpOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMo
KSB3aXRoIGZld2VyIHRoYW4gZm91ciBhcmd1bWVudHMgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlv
bi4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1l
c3NhZ2UpOworfQorCit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYyhub3RBU3RyaW5n
LCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgi
RkFJTDogdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEg
c3RyaW5nLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBl
cnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5h
bWUiLCBub3RBU3RyaW5nLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOworICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJl
IGEgc3RyaW5nLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIg
KyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJE
Qk5hbWUiLCAiREJWZXJzaW9uIiwgbm90QVN0cmluZywgMTAyNCk7CisgICAgcG9zdE1lc3NhZ2Uo
IkZBSUw6IHRoZSB0aGlyZCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBh
IHN0cmluZy4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsg
ZXJyLm1lc3NhZ2UpOworfQorCit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJO
YW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwgMCk7CisgICAgcG9zdE1l
c3NhZ2UoIkZBSUw6IHRoZSBmaWZ0aCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVz
dCBiZSBhbiBvYmplY3QsIGlmIHByZXNlbnQuIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0
TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsKKyAgICBkYiA9IG9w
ZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEw
MjQpOworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVk
LiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVz
c2FnZSk7Cit9CisKKy8vIFJ1biB0aGlzIHRlc3QgY2FzZSBvbmUgbW9yZSB0aW1lLCB0byB0ZXN0
IHRoZSBjb2RlIHdpdGggYW4gZXhpc3RpbmcgZGF0YWJhc2UuCit0cnkgeworICAgIGRiID0gb3Bl
bkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAy
NCk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQu
Iik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNz
YWdlKTsKK30KKwordHJ5IHsKKyAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhYmFzZSwg
b3RoZXJ3aXNlIHRoZSBjcmVhdGlvbiBjYWxsYmFjayB3b24ndCBiZSBpbnZva2VkLgorICAgIGRi
ID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lQ3JlYXRpb25DYWxsYmFjayIgKyAobmV3IERhdGUo
KSkuZ2V0VGltZSgpLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihkYikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdp
dGggYSBjcmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBl
cnIubWVzc2FnZSk7Cit9CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHkt
dmVyc2lvbi1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJj
ZXMvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLmpzCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDkgQEAKK3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIk9wZW5EYXRhYmFzZVNl
dEVtcHR5VmVyc2lvblRlc3QiLCAiIiwgIlRlc3QgdGhhdCB0aGUgREIgdmVyc2lvbiBpcyBzZXQg
dG8gdGhlIGVtcHR5IHN0cmluZy4iLCAxKTsKKwordHJ5IHsKKyAgICB2YXIgZGIyID0gb3BlbkRh
dGFiYXNlU3luYygiT3BlbkRhdGFiYXNlU2V0RW1wdHlWZXJzaW9uVGVzdCIsICJ0ZXN0IiwgIlRl
c3QgdGhhdCB0aGUgREIgdmVyc2lvbiBpcyBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZy4iLCAxKTsK
KyAgICBwb3N0TWVzc2FnZSgiRkFJTDogQW4gZXhjZXB0aW9uIHNob3VsZCd2ZSBiZWVuIHRocm93
bi4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTIik7Cit9Citwb3N0
TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
cmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3lu
Yy1pbnB1dHMuanMJKHJldmlzaW9uIDYyNzM0KQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNzQgKzAsMCBAQAotdmFyIGRiOwotCi12YXIgbm90QVN0cmluZyA9IHsKLSAg
ICB0b1N0cmluZzogZnVuY3Rpb24oKSB7IHRocm93ICJmb28iOyB9Ci19OwotCi10cnkgewotICAg
IGRiID0gb3BlbkRhdGFiYXNlU3luYygpOwotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBjYWxsaW5n
IG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRob3V0IGFueSBhcmd1bWVudCBzaG91bGQgdGhyb3cgYW4g
ZXhjZXB0aW9uLiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIg
KyBlcnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJE
Qk5hbWUiLCAiREJWZXJzaW9uIik7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNhbGxpbmcgb3Bl
bkRhdGFiYXNlU3luYygpIHdpdGggZmV3ZXIgdGhhbiBmb3VyIGFyZ3VtZW50cyBzaG91bGQgdGhy
b3cgYW4gZXhjZXB0aW9uLiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBB
U1M6ICIgKyBlcnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VT
eW5jKG5vdEFTdHJpbmcsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwotICAg
IHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gb3BlbkRhdGFiYXNlU3lu
YygpIG11c3QgYmUgYSBzdHJpbmcuIik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2Fn
ZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRh
YmFzZVN5bmMoIkRCTmFtZSIsIG5vdEFTdHJpbmcsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7Ci0g
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gb3BlbkRhdGFiYXNl
U3luYygpIG11c3QgYmUgYSBzdHJpbmcuIik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVz
c2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5IHsKLSAgICBkYiA9IG9wZW5E
YXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCBub3RBU3RyaW5nLCAxMDI0KTsKLSAg
ICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIHRoaXJkIGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5
bmMoKSBtdXN0IGJlIGEgc3RyaW5nLiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3Nh
Z2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0
YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0LCAw
KTsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIGZpZnRoIGFyZ3VtZW50IHRvIG9wZW5EYXRh
YmFzZVN5bmMoKSBtdXN0IGJlIGFuIG9iamVjdCwgaWYgcHJlc2VudC4iKTsKLX0gY2F0Y2ggKGVy
cikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi10cnkg
ewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRl
c2NyaXB0aW9uIiwgMTAyNCk7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5
bmMoKSBzdWNjZWVkZWQuIik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgiRkFJ
TDogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotLy8gUnVuIHRoaXMgdGVzdCBjYXNlIG9uZSBtb3Jl
IHRpbWUsIHRvIHRlc3QgdGhlIGNvZGUgd2l0aCBhbiBleGlzdGluZyBkYXRhYmFzZS4KLXRyeSB7
Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVz
Y3JpcHRpb24iLCAxMDI0KTsKLSAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNlU3lu
YygpIHN1Y2NlZWRlZC4iKTsKLX0gY2F0Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJGQUlM
OiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi10cnkgewotICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEg
bmV3IGRhdGFiYXNlLCBvdGhlcndpc2UgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIHdvbid0IGJlIGlu
dm9rZWQuCi0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWVDcmVhdGlvbkNhbGxiYWNr
IiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIs
IDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGRiKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2FsbGluZyBvcGVuRGF0
YWJhc2VTeW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2Fn
ZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFi
YXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Ut
d2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXdo
aWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjggQEAKK2Z1bmN0aW9uIG9wZW5UZXN0RGF0YWJhc2UoKQoreworICAgIHJldHVybiBvcGVu
RGF0YWJhc2VTeW5jKCJPcGVuRGF0YWJhc2VXaGlsZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc1Rlc3Qi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJUZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGxpbmcgb3BlbkRhdGFiYXNlKCkg
d2hpbGUgYSB0cmFuc2FjdGlvbiBpcyBpbiBwcm9ncmVzcyBvbiBhIGRpZmZlcmVudCBoYW5kbGUg
dG8gdGhlIHNhbWUgZGF0YWJhc2UgZG9lcyBub3QgcmVzdWx0IGluIGEgZGVhZGxvY2suIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAyMTAwMDAwKTsgLy8gMk1CICsgZXBzaWxvbgorfQor
CisvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjA3Cisv
LyBJbiBvcmRlciB0byB0cmlnZ2VyIHRoaXMgYnVnLCB0aGUgdHJhbnNhY3Rpb24gbXVzdCBhY3F1
aXJlIGFuIGV4Y2x1c2l2ZQorLy8gbG9jayBvbiB0aGUgREIgZmlsZSBiZWZvcmUgdHJ5aW5nIHRv
IG9idGFpbiBhIHNlY29uZCBoYW5kbGUgdG8gdGhlIHNhbWUgREIuCisvLyBUaGUgb25seSB3YXkg
dG8gZm9yY2UgU1FMaXRlIHRvIG9idGFpbiBhbiBleGNsdXNpdmUgbG9jayBpcyB0byBjaGFuZ2Ug
bW9yZQorLy8gdGhhbiBjYWNoZV9zaXplICogcGFnZV9zaXplIGJ5dGVzIGluIHRoZSBkYXRhYmFz
ZS4gVGhlIGRlZmF1bHQgdmFsdWUgZm9yCisvLyBjYWNoZV9zaXplIGlzIDIwMDAgcGFnZXMsIGFu
ZCB0aGUgZGVmYXVsdCBwYWdlX3NpemUgaXMgMTAyNCBieXRlcy4gU28gdGhlCisvLyBzaXplIG9m
IHRoZSBibG9iIG11c3QgYmUgYXQgbGVhc3QgMk1CLgordmFyIGRiMSA9IG9wZW5UZXN0RGF0YWJh
c2UoKTsKK2RiMS50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgIHR4LmV4ZWN1dGVTcWwo
IkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBCTE9CKTsiKTsKKyAgICB0eC5l
eGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoWkVST0JMT0IoMjA5NzE1MikpOyIp
OworICAgIHZhciBkYjIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgcG9zdE1lc3NhZ2UoIlBB
U1M6IHNlY29uZCBoYW5kbGUgb3BlbmVkIHN1Y2Nlc3NmdWxseS4iKTsKKworICAgIC8vIENsZWFu
IHVwIHRoZSBEQiB0byBhbGxvdyBmb3IgcmVwZWF0ZWQgcnVucyBvZiB0aGlzIHRlc3QKKyAgICAv
LyB3aXRob3V0IG5lZWRpbmcgdG8gaW5jcmVhc2UgdGhlIGRlZmF1bHQgYWxsb3dlZCBxdW90YSAo
NU1CKQorICAgIHR4LmV4ZWN1dGVTcWwoIkRFTEVURSBGUk9NIFRlc3Q7Iik7Cit9KTsKKworcG9z
dE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy9zcWwtZGF0YS10eXBlcy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9zcWwtZGF0YS10eXBlcy1zeW5jLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL3NxbC1kYXRhLXR5cGVzLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAK
K3ZhciB0ZXN0VmFsdWVzID0geworICAgIHRpbWVzdGFtcDogbmV3IERhdGUoIldlZCBGZWIgMDYg
MjAwOCAxMjoxNjo1MiBHTVQrMDIwMCAoRUVUKSIpLnZhbHVlT2YoKSwKKyAgICBpZDogMTAwMSwK
KyAgICByZWFsOiAxMDEuNDQ0LAorICAgIHRleHQ6ICJXZWJLaXQgZGIgVEVYVCIsCisgICAgYmxv
YjogInN1cGVyY2FsaWZyYWdpbGlzdGljIgorfTsKKworZnVuY3Rpb24gc2hvdWxkQmVTYW1lVHlw
ZUFuZFZhbHVlKHByb3BOYW1lLCB0ZXN0VmFsdWUsIHJlc3VsdCkgeworICAgIGlmICh0ZXN0VmFs
dWUgPT0gcmVzdWx0ICYmIHR5cGVvZiB0ZXN0VmFsdWUgPT0gdHlwZW9mIHJlc3VsdCkKKyAgICAg
ICAgcG9zdE1lc3NhZ2UoIlBBU1M6IHByb3BlcnR5ICciICsgcHJvcE5hbWUgKyAiJyBPSywgdHlw
ZSB3YXMgIiArIHR5cGVvZiByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgcG9zdE1lc3NhZ2Uo
IkZBSUw6IHByb3BlcnR5ICciICsgcHJvcE5hbWUgKyAiJyBmYWlsZWQ7ICIgKworICAgICAgICAg
ICAgICAgICAgICAiZXhwZWN0ZWQgIiArIHR5cGVvZiB0ZXN0VmFsdWUgKyAiOiciICsgdGVzdFZh
bHVlICsgIicsICIgKworICAgICAgICAgICAgICAgICAgICAiZ290ICIgKyB0eXBlb2YgcmVzdWx0
ICsgIjonIiArIHJlc3VsdCArIiciKTsKK30KKworZnVuY3Rpb24gdGVzdERCVmFsdWVzKHJlc3Vs
dCkgeworICAgIHZhciBpID0gInRpbWVzdGFtcCI7IHNob3VsZEJlU2FtZVR5cGVBbmRWYWx1ZShp
LCB0ZXN0VmFsdWVzW2ldLCByZXN1bHRbaV0pOworICAgIGkgPSAiaWQiOyBzaG91bGRCZVNhbWVU
eXBlQW5kVmFsdWUoaSwgdGVzdFZhbHVlc1tpXSwgcmVzdWx0W2ldKTsKKyAgICBpID0gInJlYWwi
OyBzaG91bGRCZVNhbWVUeXBlQW5kVmFsdWUoaSwgdGVzdFZhbHVlc1tpXSwgcmVzdWx0W2ldKTsK
KyAgICBpID0gInRleHQiOyBzaG91bGRCZVNhbWVUeXBlQW5kVmFsdWUoaSwgdGVzdFZhbHVlc1tp
XSwgcmVzdWx0W2ldKTsKKyAgICBpID0gImJsb2IiOyBzaG91bGRCZVNhbWVUeXBlQW5kVmFsdWUo
aSwgdGVzdFZhbHVlc1tpXSwgcmVzdWx0W2ldKTsKK30KKwordmFyIGRiID0gb3BlbkRhdGFiYXNl
U3luYygiU1FMRGF0YVR5cGVzVGVzdCIsICIxLjAiLCAiRGF0YWJhc2UgZm9yIFNRTCBkYXRhIHR5
cGUgdGVzdCIsIDEpOworZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICB0eC5leGVj
dXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBEYXRhVHlwZVRlc3RUYWJsZSAoaWQg
SU5URUdFUiBVTklRVUUsIHJlYWwgUkVBTCwgdGltZXN0YW1wIElOVEVHRVIsIHRleHQgVEVYVCwg
YmxvYiBCTE9CKSIpOworICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJTlRPIERhdGFUeXBlVGVz
dFRhYmxlIChpZCwgcmVhbCwgdGltZXN0YW1wLCB0ZXh0LCBibG9iKSBWQUxVRVMgKD8sPyw/LD8s
PykiLAorICAgICAgICAgICAgICAgICAgW3Rlc3RWYWx1ZXMuaWQsIHRlc3RWYWx1ZXMucmVhbCwg
dGVzdFZhbHVlcy50aW1lc3RhbXAsIHRlc3RWYWx1ZXMudGV4dCwgdGVzdFZhbHVlcy5ibG9iXSk7
CisgICAgdmFyIHJlc3VsdCA9IHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCAqIEZST00gRGF0YVR5cGVU
ZXN0VGFibGUiKTsKKyAgICB0ZXN0REJWYWx1ZXMocmVzdWx0LnJvd3MuaXRlbSgwKSk7CisgICAg
dHguZXhlY3V0ZVNxbCgiRFJPUCBUQUJMRSBEYXRhVHlwZVRlc3RUYWJsZSIpOworfSk7CisKK3Bv
c3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9yZXNvdXJjZXMvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9zcWwtZXhjZXB0aW9uLWNv
ZGVzLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9yZXNvdXJjZXMvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmpzCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDg2IEBACit2YXIgZGJOYW1lID0gIlNRTEV4Y2VwdGlvbkNvZGVzVGVzdCIgKyAo
bmV3IERhdGUoKSkuZ2V0VGltZSgpOworCitmdW5jdGlvbiB0ZXN0VHJhbnNhY3Rpb24oZGIsIGV4
ZWN1dGVTdGF0ZW1lbnRzQ2FsbGJhY2ssIGV4cGVjdGVkRXJyb3JDb2RlTmFtZSkKK3sKKyAgICBk
Yi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAg
ZXhlY3V0ZVN0YXRlbWVudHNDYWxsYmFjayh0eCk7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgi
RkFJTDogYW4gZXhjZXB0aW9uICgiICsgZXhwZWN0ZWRFcnJvckNvZGVOYW1lICsgIikgc2hvdWxk
J3ZlIGJlZW4gdGhyb3duLiIpOworICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAg
IGlmIChlcnIuY29kZSA9PSBlcnJbZXhwZWN0ZWRFcnJvckNvZGVOYW1lXSkKKyAgICAgICAgICAg
ICAgICBwb3N0TWVzc2FnZSgiUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlICIgKyBl
eHBlY3RlZEVycm9yQ29kZU5hbWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHBvc3RNZXNzYWdlKCJGQUlMOiBleHBlY3RlZCBlcnJvciBjb2RlICIgKyBleHBlY3RlZEVycm9y
Q29kZU5hbWUgKyAiICgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJbZXhwZWN0
ZWRFcnJvckNvZGVOYW1lXSArICIpLCBnb3QgIiArIGVyci5jb2RlKTsKKyAgICAgICAgfQorICAg
ICAgfSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RUcmFuc2FjdGlvblRocm93c0V4Y2VwdGlvbihkYikK
K3sKKyAgICB0ZXN0VHJhbnNhY3Rpb24oZGIsIGZ1bmN0aW9uKHR4KSB7IHRocm93ICJFeGNlcHRp
b24gdGhyb3duIGluIHRyYW5zYWN0aW9uIGNhbGxiYWNrLiI7IH0sICJVTktOT1dOX0VSUiIpOwor
fQorCitmdW5jdGlvbiB0ZXN0SW52YWxpZFN0YXRlbWVudChkYikKK3sKKyAgICB0ZXN0VHJhbnNh
Y3Rpb24oZGIsIGZ1bmN0aW9uKHR4KSB7IHR4LmV4ZWN1dGVTcWwoIkJBRCBTVEFURU1FTlQiKTsg
fSwgIlNZTlRBWF9FUlIiKTsKK30KKworZnVuY3Rpb24gdGVzdEluY29ycmVjdE51bWJlck9mQmlu
ZFBhcmFtZXRlcnMoZGIpCit7CisgICAgdGVzdFRyYW5zYWN0aW9uKGRiLAorICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0
ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQmFkQmluZE51bWJlclRlc3QgKEZvbyBJ
TlQsIEJhciBJTlQpIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJJ
TlNFUlQgSU5UTyBCYWRCaW5kTnVtYmVyVGVzdCBWQUxVRVMgKD8sID8pIiwgWzFdKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSwgIlNZTlRBWF9FUlIiKTsKK30KKworZnVuY3Rpb24gdGVzdEJpbmRQ
YXJhbWV0ZXJPZldyb25nVHlwZShkYikKK3sKKyAgICB2YXIgYmFkU3RyaW5nID0geyB9OworICAg
IGJhZFN0cmluZy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyB0aHJvdyAiQ2Fubm90IGNhbGwgdG9T
dHJpbmcoKSBvbiB0aGlzIG9iamVjdC4iIH07CisKKyAgICB0ZXN0VHJhbnNhY3Rpb24oZGIsIGZ1
bmN0aW9uKHR4KSB7CisgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIEJhZEJpbmRUeXBlVGVzdCAoRm9vIFRFWFQpIik7CisgICAgICAgIHR4LmV4ZWN1dGVT
cWwoIklOU0VSVCBJTlRPIEJhZEJpbmRUeXBlVGVzdCBWQUxVRVMgKD8pIiwgW2JhZFN0cmluZ10p
OworICAgIH0sICJVTktOT1dOX0VSUiIpOworfQorCitmdW5jdGlvbiB0ZXN0UXVvdGFFeGNlZWRl
ZChkYikKK3sKKyAgICAvLyBTb21ldGltZXMsIFNRTGl0ZSBhdXRvbWF0aWNhbGx5IHJvbGxzIGJh
Y2sgYSB0cmFuc2FjdGlvbiBpZiBleGVjdXRpbmcgYSBzdGF0ZW1lbnQgZmFpbHMuCisgICAgLy8g
VGhpcyBzZWVtcyB0byBiZSBvbmUgb2YgdGhvc2UgY2FzZXMuCisgICAgdHJ5IHsKKyAgICAgICAg
dGVzdFRyYW5zYWN0aW9uKGRiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFC
TEUgSUYgTk9UIEVYSVNUUyBRdW90YVRlc3QgKEZvbyBCTE9CKSIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJTlRPIFF1b3RhVGVzdCBWQUxVRVMg
KFpFUk9CTE9CKDEwICogMTAyNCAqIDEwMjQpKSIpOworICAgICAgICAgICAgICAgICAgICAgICAg
fSwgIlFVT1RBX0VSUiIpOworICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogVHJhbnNhY3Rpb24g
c2hvdWxkJ3ZlIGJlZW4gcm9sbGVkIGJhY2sgYnkgU1FMaXRlLiIpOworICAgIH0gY2F0Y2ggKGVy
cikgeworICAgICAgICBpZiAoZXJyLmNvZGUgPT0gZXJyWyJEQVRBQkFTRV9FUlIiXSkKKyAgICAg
ICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBUcmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2sgYnkg
U1FMaXRlIGFzIGV4cGVjdGVkLiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3N0TWVz
c2FnZSgiRkFJTDogQW4gdW5leHBlY3RlZCBleGNlcHRpb24gd2FzIHRocm93bjogIiArIGVycik7
CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0VmVyc2lvbk1pc21hdGNoKGRiKQoreworICAgIHZh
ciBkYjIgPSBvcGVuRGF0YWJhc2VTeW5jKGRiTmFtZSwgIjEuMCIsICJUZXN0cyB0aGUgZXJyb3Ig
Y29kZXMuIiwgMSk7CisgICAgZGIyLmNoYW5nZVZlcnNpb24oIjEuMCIsICIyLjAiLCBmdW5jdGlv
bih0eCkgeyB9KTsKKyAgICB0ZXN0VHJhbnNhY3Rpb24oZGIsCisgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJU
SElTIFNUQVRFTUVOVCBTSE9VTEQgTkVWRVIgR0VUIEVYRUNVVEVEIik7CisgICAgICAgICAgICAg
ICAgICAgIH0sICJWRVJTSU9OX0VSUiIpOworfQorCit2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5j
KGRiTmFtZSwgIjEuMCIsICJUZXN0cyB0aGUgZXhjZXB0aW9uIGNvZGVzLiIsIDEpOwordGVzdFRy
YW5zYWN0aW9uVGhyb3dzRXhjZXB0aW9uKGRiKTsKK3Rlc3RJbnZhbGlkU3RhdGVtZW50KGRiKTsK
K3Rlc3RJbmNvcnJlY3ROdW1iZXJPZkJpbmRQYXJhbWV0ZXJzKGRiKTsKK3Rlc3RCaW5kUGFyYW1l
dGVyT2ZXcm9uZ1R5cGUoZGIpOwordGVzdFF1b3RhRXhjZWVkZWQoZGIpOwordGVzdFZlcnNpb25N
aXNtYXRjaChkYik7CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvdGVzdC1hdXRob3JpemVyLXN5bmMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3Rl
c3QtYXV0aG9yaXplci1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3Rlc3QtYXV0aG9yaXplci1zeW5jLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyNiBAQAorZnVuY3Rpb24gY2xlYW51cChkYikKK3sKKyAgICBkYi50
cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJP
UCBUQUJMRSBJRiBFWElTVFMgVGVzdCIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJP
UCBJTkRFWCBJRiBFWElTVFMgVGVzdEluZGV4Iik7CisgICAgICAgICAgICB0eC5leGVjdXRlU3Fs
KCJEUk9QIFZJRVcgSUYgRVhJU1RTIFRlc3RWaWV3Iik7CisgICAgICAgICAgICB0eC5leGVjdXRl
U3FsKCJEUk9QIFRSSUdHRVIgSUYgRVhJU1RTIFRlc3RUcmlnZ2VyIik7CisgICAgfSk7Cit9CisK
K2Z1bmN0aW9uIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIHN0YXRlbWVudCwgb3BlcmF0aW9uKQorewor
ICAgIHRyeSB7CisgICAgICAgIHR4LmV4ZWN1dGVTcWwoc3RhdGVtZW50KTsKKyAgICAgICAgcG9z
dE1lc3NhZ2Uob3BlcmF0aW9uICsgIiBzdGF0ZW1lbnQgc3VjY2VlZGVkLiIpOworICAgIH0gY2F0
Y2ggKGVycikgeworICAgICAgICBwb3N0TWVzc2FnZShvcGVyYXRpb24gKyAiIHN0YXRlbWVudCBm
YWlsZWQ6ICIgKyBlcnIgKyAiICgiICsgZXJyLmNvZGUgKyAiKSIpOworICAgIH0KK30KKworZnVu
Y3Rpb24gY3JlYXRlVGFibGVDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiQ1JFQVRFIFRBQkxFIFRlc3QgKEZvbyBpbnQpIiwgIlNRTElURV9DUkVBVEVfVEFCTEUiKTsK
K30KKworZnVuY3Rpb24gY3JlYXRlU3RhdGVtZW50c0NhbGxiYWNrKHR4KQoreworICAgIGV4ZWN1
dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgSU5ERVggVGVzdEluZGV4IE9OIFRlc3QgKEZvbykiLCAi
U1FMSVRFX0NSRUFURV9JTkRFWCIpOworCisgICAgLy8gRXZlbiB0aG91Z2ggdGhlIGZvbGxvd2lu
ZyBxdWVyeSBzaG91bGQgdHJpZ2dlciBhIFNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCBvcGVyYXRp
b24KKyAgICAvLyAoYWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cuc3FsaXRlLm9yZy90ZW1wZmlsZXMu
aHRtbCksIGl0IGRvZXNuJ3QsIGFuZCBJJ20gbm90IGF3YXJlCisgICAgLy8gb2YgYW55IG90aGVy
IHdheSB0byB0cmlnZ2VyIHRoaXMgb3BlcmF0aW9uLiBTbyB3ZSdsbCBza2lwIGl0IGZvciBub3cu
CisgICAgLy9leGVjdXRlU3RhdGVtZW50KHR4LCAiU0VMRUNUICogRlJPTSBUZXN0IFdIRVJFIEZv
byBJTiAoMSwgMiwgMykiLCAiU1FMSVRFX0NSRUFURV9URU1QX0lOREVYIik7CisKKyAgICBleGVj
dXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRFTVAgVEFCTEUgVGVzdFRlbXBUYWJsZSAoRm9vIGlu
dCkiLCAiU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0
eCwgIkNSRUFURSBURU1QIFRSSUdHRVIgVGVzdFRlbXBUcmlnZ2VyIElOU0VSVCBPTiBUZXN0IEJF
R0lOIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7IEVORCIsICJTUUxJVEVfQ1JFQVRFX1RFTVBf
VFJJR0dFUiIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBWSUVXIFRl
c3RUZW1wVmlldyBBUyBTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0IiwgIlNRTElURV9DUkVBVEVf
VEVNUF9WSUVXIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBUUklHR0VSIFRl
c3RUcmlnZ2VyIElOU0VSVCBPTiBUZXN0IEJFR0lOIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7
IEVORCIsICJTUUxJVEVfQ1JFQVRFX1RSSUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiQ1JFQVRFIFZJRVcgVGVzdFZpZXcgQVMgU0VMRUNUIENPVU5UKCopIEZST00gVGVzdCIsICJT
UUxJVEVfQ1JFQVRFX1ZJRVciKTsKKworICAgIC8vIFdlIHNob3VsZCB0cnkgdG8gY3JlYXRlIGEg
dmlydHVhbCB0YWJsZSB1c2luZyBmdHMzLCB3aGVuIFdlYktpdCdzIHNxbGl0ZSBsaWJyYXJ5IHN1
cHBvcnRzIGl0LgorICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVklSVFVBTCBUQUJM
RSBUZXN0VmlydHVhbFRhYmxlIFVTSU5HIFVuc3VwcG9ydGVkTW9kdWxlIiwgIlNRTElURV9DUkVB
VEVfVlRBQkxFIik7Cit9CisKK2Z1bmN0aW9uIG90aGVyU3RhdGVtZW50c0NhbGxiYWNrKHR4KQor
eworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0Iiwg
IlNRTElURV9SRUFEIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCBDT1VOVCgq
KSBGUk9NIFRlc3QiLCAiU1FMSVRFX1NFTEVDVCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJERUxFVEUgRlJPTSBUZXN0IiwgIlNRTElURV9ERUxFVEUiKTsKKyAgICBleGVjdXRlU3RhdGVt
ZW50KHR4LCAiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDEpIiwgIlNRTElURV9JTlNFUlQiKTsK
KyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiVVBEQVRFIFRlc3QgU0VUIEZvbyA9IDIgV0hFUkUg
Rm9vID0gMSIsICJTUUxJVEVfVVBEQVRFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlBS
QUdNQSBjYWNoZV9zaXplIiwgIlNRTElURV9QUkFHTUEiKTsKKworICAgIGV4ZWN1dGVTdGF0ZW1l
bnQodHgsICJBTFRFUiBUQUJMRSBUZXN0IFJFTkFNRSBUTyBUZXN0VGFibGUiLCAiU1FMSVRFX0FM
VEVSX1RBQkxFIik7CisgICAgLy8gUmVuYW1lIHRoZSB0YWJsZSBiYWNrIHRvIGl0cyBvcmlnaW5h
bCBuYW1lCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFMVEVSIFRBQkxFIFRlc3RUYWJsZSBS
RU5BTUUgVG8gVGVzdCIsICJTUUxJVEVfQUxURVJfVEFCTEUiKTsKKworICAgIGV4ZWN1dGVTdGF0
ZW1lbnQodHgsICJCRUdJTiBUUkFOU0FDVElPTiIsICJTUUxJVEVfVFJBTlNBQ1RJT04iKTsKKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQVRUQUNIIG1haW4gQVMgVGVzdE1haW4iLCAiU1FMSVRF
X0FUVEFDSCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJERVRBQ0ggVGVzdE1haW4iLCAi
U1FMSVRFX0RFVEFDSCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJSRUlOREVYIiwgIlNR
TElURV9SRUlOREVYIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFOQUxZWkUiLCAiU1FM
SVRFX0FOQUxZWkUiKTsKKworICAgIC8vIFNRTElURV9GVU5DVElPTjogYWxsb3dlZCBpbiB3cml0
ZSBtb2RlCisgICAgLy8gVGhlcmUgaXMgbm8gU1FML0phdmFzY3JpcHQgQVBJIHRvIGFkZCB1c2Vy
LWRlZmluZWQgZnVuY3Rpb25zIHRvIFNRTGl0ZSwKKyAgICAvLyBzbyB3ZSBjYW5ub3QgdGVzdCB0
aGlzIG9wZXJhdGlvbgorfQorCitmdW5jdGlvbiBkcm9wU3RhdGVtZW50c0NhbGxiYWNrKHR4KQor
eworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIElOREVYIFRlc3RJbmRleCIsICJTUUxJ
VEVfRFJPUF9JTkRFWCIpOworCisgICAgLy8gU1FMSVRFX0RST1BfVEVNUF9JTkRFWDogYWxsb3dl
ZCBpbiB3cml0ZSBtb2RlCisgICAgLy8gTm90IHN1cmUgaG93IHRvIHRlc3QgdGhpczogdGVtcCBp
bmRleGVzIGFyZSBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgd2hlbgorICAgIC8vIHRoZSBkYXRhYmFz
ZSBpcyBjbG9zZWQsIGJ1dCBIVE1MNSBkb2Vzbid0IHNwZWNpZnkgYSBjbG9zZURhdGFiYXNlKCkg
Y2FsbC4KKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFRBQkxFIFRlc3RUZW1wVGFi
bGUiLCAiU1FMSVRFX0RST1BfVEVNUF9UQUJMRSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJEUk9QIFRSSUdHRVIgVGVzdFRlbXBUcmlnZ2VyIiwgIlNRTElURV9EUk9QX1RFTVBfVFJJR0dF
UiIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFZJRVcgVGVzdFRlbXBWaWV3Iiwg
IlNRTElURV9EUk9QX1RFTVBfVklFVyIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9Q
IFRSSUdHRVIgVGVzdFRyaWdnZXIiLCAiU1FMSVRFX0RST1BfVFJJR0dFUiIpOworICAgIGV4ZWN1
dGVTdGF0ZW1lbnQodHgsICJEUk9QIFZJRVcgVGVzdFZpZXciLCAiU1FMSVRFX0RST1BfVklFVyIp
OworCisgICAgLy8gU1FMSVRFX0RST1BfVlRBQkxFOiBhbGxvd2VkIGluIHdyaXRlIG1vZGUKKyAg
ICAvLyBOb3Qgc3VyZSBob3cgdG8gdGVzdCB0aGlzOiB3ZSBjYW5ub3QgY3JlYXRlIGEgdmlydHVh
bCB0YWJsZSBiZWNhdXNlIHdlIGRvIG5vdAorICAgIC8vIGhhdmUgU1FML0phdmFzY3JpcHQgQVBJ
cyB0byByZWdpc3RlciBhIG1vZHVsZSB0aGF0IGltcGxlbWVudHMgYSB2aXJ0dWFsIHRhYmxlLgor
ICAgIC8vIFRoZXJlZm9yZSwgdHJ5aW5nIHRvIGRyb3AgYSB2aXJ0dWFsIHRhYmxlIHdpbGwgYWx3
YXlzIGZhaWwgKG5vIHN1Y2ggdGFibGUpCisgICAgLy8gYmVmb3JlIGV2ZW4gZ2V0dGluZyB0byB0
aGUgYXV0aG9yaXplci4KKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFRBQkxFIFRl
c3QiLCAiU1FMSVRFX0RST1BfVEFCTEUiKTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRXcml0ZU1v
ZGUoZGIpCit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgcG9z
dE1lc3NhZ2UoIkJlZ2lubmluZyB3cml0ZSB0cmFuc2FjdGlvbjoiKTsKKyAgICAgICAgY3JlYXRl
VGFibGVDYWxsYmFjayh0eCk7CisgICAgICAgIGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayh0eCk7
CisgICAgICAgIG90aGVyU3RhdGVtZW50c0NhbGxiYWNrKHR4KTsKKyAgICAgICAgZHJvcFN0YXRl
bWVudHNDYWxsYmFjayh0eCk7CisgICAgICAgIHBvc3RNZXNzYWdlKCJXcml0ZSB0cmFuc2FjdGlv
biBzdWNjZWVkZWQuXG4iKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRPbmx5TW9k
ZShkYikKK3sKKyAgICBwb3N0TWVzc2FnZSgiQmVnaW5uaW5nIHJlYWQgdHJhbnNhY3Rpb25zOiIp
OworICAgIC8vIFRlc3QgdGhlICdDUkVBVEUgVEFCTEUnIG9wZXJhdGlvbjsgaXQgc2hvdWxkIGJl
IGRpc2FsbG93ZWQKKyAgICBkYi5yZWFkVHJhbnNhY3Rpb24oY3JlYXRlVGFibGVDYWxsYmFjayk7
CisKKyAgICAvLyBJbiBvcmRlciB0byB0ZXN0IGFsbCBvdGhlciAnQ1JFQVRFJyBvcGVyYXRpb25z
LCB3ZSBtdXN0IGNyZWF0ZSB0aGUgdGFibGUgZmlyc3QKKyAgICBkYi50cmFuc2FjdGlvbihjcmVh
dGVUYWJsZUNhbGxiYWNrKTsKKyAgICBkYi5yZWFkVHJhbnNhY3Rpb24oY3JlYXRlU3RhdGVtZW50
c0NhbGxiYWNrKTsKKworICAgIC8vIEluIG9yZGVyIHRvIHRlc3QgdGhlICdEUk9QJyBhbmQgJ290
aGVyJyBvcGVyYXRpb25zLCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSB0aGUgcmVzcGVjdGl2ZSBl
bnRpdGllcworICAgIGRiLnRyYW5zYWN0aW9uKGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayk7Cisg
ICAgZGIucmVhZFRyYW5zYWN0aW9uKG90aGVyU3RhdGVtZW50c0NhbGxiYWNrKTsKKyAgICBkYi5y
ZWFkVHJhbnNhY3Rpb24oZHJvcFN0YXRlbWVudHNDYWxsYmFjayk7CisgICAgcG9zdE1lc3NhZ2Uo
IlJlYWQgdHJhbnNhY3Rpb25zIHN1Y2NlZWRlZC4iKTsKK30KKwordmFyIGRiID0gb3BlbkRhdGFi
YXNlU3luYygiVGVzdEF1dGhvcml6ZXJUZXN0IiwgIjEuMCIsICJUZXN0IHRoZSBkYXRhYmFzZSBh
dXRob3JpemVyLiIsIDEpOworY2xlYW51cChkYik7Cit0ZXN0UmVhZFdyaXRlTW9kZShkYik7Cit0
ZXN0UmVhZE9ubHlNb2RlKGRiKTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90cmFuc2FjdGlvbi1pbi10cmFu
c2FjdGlvbi1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL3Jlc291cmNlcy90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3Ry
YW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTEgQEAKK3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIlRyYW5zYWN0aW9uSW5UcmFuc2FjdGlv
blRlc3QiLCAiMS4wIiwgIlRlc3QgdGhhdCB0cnlpbmcgdG8gcnVuIGEgbmVzdGVkIHRyYW5zYWN0
aW9uIGZhaWxzLiIsIDEpOworZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICB0cnkg
eworICAgICAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbihuZXN0ZWRUeCkgeyB9KTsKKyAgICAg
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6IFRyeWluZyB0byBydW4gYSBuZXN0ZWQgdHJhbnNhY3Rpb24g
c2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAg
ICAgcG9zdE1lc3NhZ2UoIlBBU1M6IEV4Y2VwdGlvbiB0aHJvd24gd2hpbGUgdHJ5aW5nIHRvIHJ1
biBhIG5lc3RlZCB0cmFuc2FjdGlvbi4iKTsKKyAgICB9Cit9KTsKKworcG9zdE1lc3NhZ2UoImRv
bmUiKTsK
</data>
<flag name="commit-queue"
          id="48599"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61015</attachid>
            <date>2010-07-09 01:34:58 -0700</date>
            <delta_ts>2010-07-09 02:56:44 -0700</delta_ts>
            <desc>patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>153587</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjkxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTkgQEAKKzIwMTAtMDctMDkgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbigpIGFuZCBEYXRhYmFzZVN5
bmM6OmNoYW5nZVZlcnNpb24oKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNjA3CisKKyAgICAgICAgVGVzdHM6IGZhc3Qvd29ya2Vycy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1v
bmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMv
c3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5o
dG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNy
ZWF0aW9uLWNhbGxiYWNrLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0
eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRt
bAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rl
cy1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0
aG9yaXplci1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Ry
YW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWJzdHJhY3REYXRhYmFzZTo6bWF4aW11bVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCk6CisgICAgICAgICogc3Rv
cmFnZS9BYnN0cmFjdERhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3Jh
cHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9y
bVByZWZsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVy
Zm9ybVBvc3RmbGlnaHQpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKToKKyAgICAgICAgKiBz
dG9yYWdlL0RhdGFiYXNlLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVlRhYmxlKToKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0
U3RlcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5nZVZlcnNpb25QcmVmbGlnaHRT
dGVwOjpwZXJmb3JtU3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uUHJlZmxp
Z2h0U3RlcDo6Q2hhbmdlVmVyc2lvblByZWZsaWdodFN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpwZXJmb3JtU3RlcCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXA6OkNoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0
U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVN5bmM6OnJ1blRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBzdG9yYWdl
L0RhdGFiYXNlU3luYy5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNl
KToKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxS
ZXN1bHRTZXQuY3BwOgorICAgICAgICAqIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Lmg6CisgICAgICAg
ICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50
U3luYy5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVtZW50U3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnRTeW5jOjpleGVjdXRlKToKKyAgICAgICAgKiBz
dG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6cnVuQ3Vy
cmVudFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clF1b3RhSW5jcmVhc2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bjo6cG9zdGZsaWdodEFuZENvbW1pdCk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bi5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOgorICAgICAg
ICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKToK
KyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50Lmg6CisgICAgICAgICogc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2FjdGlvbkNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRyYW5zYWN0aW9uU3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6On5TUUxUcmFuc2FjdGlvblN5bmMp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU1FMKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFRyYW5zYWN0aW9uU3luYzo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uU3luYzo6cm9sbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRyYW5zYWN0aW9u
U3luY09wdGlvbmFsU3RlcDo6flNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3RlcCk6CisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oOgorICAgICAgICAqIHN0
b3JhZ2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0
YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhj
ZWVkUXVvdGEpOgorCiAyMDEwLTA3LTA5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDYyOTE1KQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQy
MSw2ICsxNDIxLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHN0b3JhZ2UvU1FMUmVzdWx0
U2V0LmNwcAogICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAKICAgICBzdG9yYWdl
L1NRTFN0YXRlbWVudC5jcHAKKyAgICBzdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCiAgICAg
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xp
ZW50LmNwcAogICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKSW5kZXg6
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gNjI5MTUpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTE4LDYgKzI1MTgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dENhbGxiYWNrLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
LmggXAorCVdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcCBcCisJV2ViQ29yZS9z
dG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uLmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmggXAogCVdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDYyOTE1
KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM0OTQsNiArMzQ5
NCw4IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaCcsCiAgICAgICAgICAg
ICAnc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oJywKICAgICAgICAgICAgICdzdG9yYWdl
L1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxT
dGF0ZW1lbnRTeW5jLmNwcCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5j
LmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwJywKICAgICAgICAg
ICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25DYWxsYmFjay5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjI5MTUpCisrKyBXZWJDb3Jl
L1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgwLDYgKzIzODAsNyBAQCBjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfREFUQUJBU0U9MSkgewogICAgICAgICBzdG9yYWdlL1NRTFJlc3Vs
dFNldC5jcHAgXAogICAgICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwIFwKICAg
ICAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwIFwKKyAgICAgICAgc3RvcmFnZS9TUUxTdGF0
ZW1lbnRTeW5jLmNwcCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwIFwKICAg
ICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgXAogICAgICAgICBzdG9yYWdl
L1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIFwKQEAgLTI0NTMsNiArMjQ1NCw3IEBAIGNv
bnRhaW5zKERFRklORVMsIEVOQUJMRV9ET01fU1RPUkFHRT0xKSAKICAgICAgICAgc3RvcmFnZS9T
UUxSZXN1bHRTZXQuaCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5oIFwK
ICAgICAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaCBcCisgICAgICAgIHN0b3JhZ2UvU1FMU3Rh
dGVtZW50U3luYy5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKICAgICAg
ICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCShyZXZpc2lvbiA2MjkxNSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5ODE3LDYgKzQ5ODE3LDE0IEBACiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2Vc
U1FMU3RhdGVtZW50U3luYy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFN0YXRlbWVudFN5bmMuaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FM
VHJhbnNhY3Rpb24uY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2MjkxNSkKKysrIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00
MjkxLDYgKzQyOTEsOCBAQAogCQlCNTIzQ0YwQjExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VT
eW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTIz
Q0YwNDExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmggKi87IH07CiAJCUI1MjVBOTY1
MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4IC8qIEpT
U1FMRXhjZXB0aW9uLmggKi87IH07CiAJCUI1MjVBOTY2MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NR
TEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNTI1QTk2NDExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24uY3BwICovOyB9
OworCQlCNTUwQjUyNTExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTUwQjUyMTExREM2
OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgKi87IH07CisJCUI1NTBCNTI2MTFE
QzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTUwQjUyMjExREM2OEE4MDA5MjM4ODUgLyogU1FM
U3RhdGVtZW50U3luYy5oICovOyB9OwogCQlCNTVENUFBNDExOTEzMUZDMDBCQ0MzMTUgLyogSlNT
UUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjU1RDVBQTIxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2suaCAqLzsgfTsKIAkJQjU1RDVBQTUxMTkxMzFGQzAwQkNDMzE1IC8q
IEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwICovOyB9OwogCQlCNTVENUFBODExOTEzMjUwMDBC
Q0MzMTUgLyogSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU1RDVBQTYxMTkxMzI1MDAwQkNDMzE1IC8qIEpTRGF0
YWJhc2VTeW5jQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTk4NjIsNiArOTg2NCw4IEBACiAJCUI1MjND
RjA0MTE4MjY3NTQwMEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUI1MjVBOTYzMTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTEV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCNTI1QTk2NDExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTUUxFeGNlcHRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNTUwQjUyMTExREM2OEE4MDA5
MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTUUxTdGF0ZW1lbnRTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQjU1MEI1MjIxMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMU3RhdGVtZW50U3luYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFBMjExOTEzMUZDMDBCQ0MzMTUgLyogSlNTUUxU
cmFuc2FjdGlvblN5bmNDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUI1NUQ1QUEzMTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
NTVENUFBNjExOTEzMjUwMDBCQ0MzMTUgLyogSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhYmFzZVN5bmNDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzMDksNiArMTEzMTMsOCBAQAogCQkJ
CUI1OURENjhFMTE5MDI5OEUwMDdFOTY4NCAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwgKi8s
CiAJCQkJMUE3Q0NCMTYwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suaCAqLywKIAkJCQlCNTlERDY4RjExOTAyOThFMDA3RTk2ODQgLyogU1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjay5pZGwgKi8sCisJCQkJQjU1MEI1MjExMURDNjhBODAwOTIzODg1IC8qIFNRTFN0
YXRlbWVudFN5bmMuY3BwICovLAorCQkJCUI1NTBCNTIyMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxT
dGF0ZW1lbnRTeW5jLmggKi8sCiAJCQkJMUFCRkU3NTIwQ0Q5NjhEMDAwRkU0ODM0IC8qIFNRTFRy
YW5zYWN0aW9uLmNwcCAqLywKIAkJCQkxQTdDQ0IyMjBDRDk0NkZEMDBCN0I2NEUgLyogU1FMVHJh
bnNhY3Rpb24uaCAqLywKIAkJCQkxQTdDQ0IyMzBDRDk0NkZEMDBCN0I2NEUgLyogU1FMVHJhbnNh
Y3Rpb24uaWRsICovLApAQCAtMTkyNzIsNiArMTkyNzgsNyBAQAogCQkJCTUxNUIwMzk5MENEMTY0
MkEwMEI3RUE5QyAvKiBTUUxTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBN0NDQjE5
MENEOTQ2OUEwMEI3QjY0RSAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUE3Q0NCMUEwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAorCQkJCUI1NTBCNTI2MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxT
dGF0ZW1lbnRTeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTdDQ0IyNDBDRDk0NkZEMDBCN0I2
NEUgLyogU1FMVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBN0NDQjFCMENEOTQ2
OUEwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCNTFCRjZGMTEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjE3MTYsNiArMjE3MjMsNyBAQAogCQkJCTUxOTYxMTczMENBQzU2NTcw
MDEwQTgwQyAvKiBTUUxSZXN1bHRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGRTExN0Qw
Q0JGRkIzNjAwMzAxN0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTE1QjAzOUEwQ0QxNjQyQTAwQjdFQTlDIC8qIFNRTFN0YXRlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlCNTUwQjUyNTExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3lu
Yy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUJGRTc1MzBDRDk2OEQwMDBGRTQ4MzQgLyogU1FM
VHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjUxQkY2RjAxMDJDOUU1OTAwMDJD
MTVBIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1QzEx
MjNCMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkocmV2aXNp
b24gNjI5MTUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVk
ZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CkBAIC00NjIsNiArNDYxLDE5IEBAIHZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVzZXRBdXRob3Jp
emVyKCkKICAgICAgICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7CiB9CiAKK3Vuc2ln
bmVkIGxvbmcgbG9uZyBBYnN0cmFjdERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmdldE1heFNpemVGb3JEYXRhYmFz
ZSh0aGlzKTsKK30KKwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjppbmNyZW1lbnRhbFZhY3V1bUlm
TmVlZGVkKCkKK3sKKyAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURhdGFiYXNl
LmZyZWVTcGFjZVNpemUoKTsKKyAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRlRGF0YWJh
c2UudG90YWxTaXplKCk7CisgICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZyZWVTcGFjZVNpemUp
CisgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFT
RSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAkocmV2aXNpb24gNjI5MTUpCisr
KyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTUUxpdGVE
YXRhYmFzZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC00NSw4ICs0Niw2IEBAIGNs
YXNzIERhdGFiYXNlQXV0aG9yaXplcjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBj
bGFzcyBTZWN1cml0eU9yaWdpbjsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQogY2xh
c3MgQWJzdHJhY3REYXRhYmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPEFic3RyYWN0RGF0
YWJhc2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwpAQCAtNjUs
NiArNjQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0OworICAgIFNRTGl0ZURhdGFiYXNlJiBz
cWxpdGVEYXRhYmFzZSgpIHsgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2U7IH0KKworICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgaW5jcmVtZW50YWxW
YWN1dW1JZk5lZWRlZCgpOwogCiAgICAgLy8gRklYTUU6IG1vdmUgYWxsIHZlcnNpb24tcmVsYXRl
ZCBtZXRob2RzIHRvIGEgRGF0YWJhc2VWZXJzaW9uVHJhY2tlciBjbGFzcwogICAgIGJvb2wgdmVy
c2lvbk1hdGNoZXNFeHBlY3RlZCgpIGNvbnN0OwpAQCAtMTAzLDggKzEwNiw2IEBAIHByb3RlY3Rl
ZDoKICAgICB1bnNpZ25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKICAgICBTdHJpbmcgbV9maWxl
bmFtZTsKIAotICAgIFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7Ci0KICNpZm5kZWYg
TkRFQlVHCiAgICAgU3RyaW5nIGRhdGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0VGhyZWFkU2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9
CiAjZW5kaWYKQEAgLTExNiw2ICsxMTcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9vcGVuZWQ7
CiAgICAgYm9vbCBtX25ldzsKIAorICAgIFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7
CisKICAgICBSZWZQdHI8RGF0YWJhc2VBdXRob3JpemVyPiBtX2RhdGFiYXNlQXV0aG9yaXplcjsK
IH07CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcAkocmV2
aXNpb24gNjI5MTUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMyArNTAsMTMgQEAgYm9vbCBDaGFuZ2VWZXJzaW9uV3Jh
cHBlcjo6cGVyZm9ybVByZWZsaQogCiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+
Z2V0VmVyc2lvbkZyb21EYXRhYmFzZShhY3R1YWxWZXJzaW9uKSkgewogICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byByZXRyaWV2ZSBhY3R1YWwgY3VycmVudCB2ZXJzaW9uIGZyb20gZGF0YWJh
c2UiKTsKLSAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoMCwgInVuYWJsZSB0
byB2ZXJpZnkgY3VycmVudCB2ZXJzaW9uIG9mIGRhdGFiYXNlIik7CisgICAgICAgIG1fc3FsRXJy
b3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVuYWJsZSB0byB2
ZXJpZnkgY3VycmVudCB2ZXJzaW9uIG9mIGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICBpZiAoYWN0dWFsVmVyc2lvbiAhPSBtX29sZFZlcnNpb24pIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJPbGQgdmVyc2lvbiBkb2Vzbid0IG1hdGNoIGFjdHVhbCB2ZXJzaW9u
Iik7Ci0gICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKDIsICJjdXJyZW50IHZl
cnNpb24gb2YgdGhlIGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lvbmAgYXJndW1lbnQgZG8gbm90IG1h
dGNoIik7CisgICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpW
RVJTSU9OX0VSUiwgImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJz
aW9uYCBhcmd1bWVudCBkbyBub3QgbWF0Y2giKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApAQCAtNjksNyArNjksNyBAQCBib29sIENoYW5nZVZlcnNpb25XcmFwcGVyOjpwZXJmb3Jt
UG9zdGZsCiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zZXRWZXJzaW9uSW5E
YXRhYmFzZShtX25ld1ZlcnNpb24pKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNl
dCBuZXcgdmVyc2lvbiBpbiBkYXRhYmFzZSIpOwotICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJy
b3I6OmNyZWF0ZSgwLCAidW5hYmxlIHRvIHNldCBuZXcgdmVyc2lvbiBpbiBkYXRhYmFzZSIpOwor
ICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9F
UlIsICJ1bmFibGUgdG8gc2V0IG5ldyB2ZXJzaW9uIGluIGRhdGFiYXNlIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gNjI5
MTUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw2IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJEYXRh
YmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC0zMzYsNyArMzM1LDcgQEAg
VmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZQogewogICAgIGRpc2FibGVB
dXRob3JpemVyKCk7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fc3FsaXRlRGF0
YWJhc2UsICJTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
OyIpOworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoc3FsaXRlRGF0YWJhc2UoKSwgIlNF
TEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7Iik7CiAgICAg
aWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gcmV0cmlldmUgbGlzdCBvZiB0YWJsZXMgZm9yIGRhdGFiYXNlICVzIiwg
ZGF0YWJhc2VEZWJ1Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIGVuYWJsZUF1dGhv
cml6ZXIoKTsKQEAgLTM5NywxNCArMzk2LDYgQEAgU2VjdXJpdHlPcmlnaW4qIERhdGFiYXNlOjpz
ZWN1cml0eU9yaWdpbgogICAgIHJldHVybiAwOwogfQogCi12b2lkIERhdGFiYXNlOjppbmNyZW1l
bnRhbFZhY3V1bUlmTmVlZGVkKCkKLXsKLSAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3Nx
bGl0ZURhdGFiYXNlLmZyZWVTcGFjZVNpemUoKTsKLSAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1f
c3FsaXRlRGF0YWJhc2UudG90YWxTaXplKCk7Ci0gICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZy
ZWVTcGFjZVNpemUpCi0gICAgICAgIG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1
dW1Db21tYW5kKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCShyZXZpc2lvbiA2MjkxNSkKKysrIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBA
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgot
I2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNjYsNyArNjYsNiBAQCBwdWJsaWM6CiAgICAgVmVj
dG9yPFN0cmluZz4gdGFibGVOYW1lcygpOwogCiAgICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLSAgICBTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJh
c2UoKSB7IHJldHVybiBtX3NxbGl0ZURhdGFiYXNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFy
a0FzRGVsZXRlZEFuZENsb3NlKCk7CiAgICAgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4g
bV9kZWxldGVkOyB9CkBAIC04Myw4ICs4Miw2IEBAIHB1YmxpYzoKICAgICBTUUxUcmFuc2FjdGlv
bkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQoKSBjb25zdDsKICAgICBTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3Q7CiAKLSAgICB2b2lkIGlu
Y3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKLQogcHJpdmF0ZToKICAgICBjbGFzcyBEYXRhYmFz
ZU9wZW5UYXNrOwogICAgIGNsYXNzIERhdGFiYXNlQ2xvc2VUYXNrOwpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHJldmlzaW9uIDYyOTE1KQorKysgV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw3ICsy
OTAsNyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUoY29uCiAgICAgICAg
IHJldHVybiBTUUxBdXRoRGVueTsKIAogICAgIC8vIEFsbG93IG9ubHkgdGhlIEZUUzMgZXh0ZW5z
aW9uCi0gICAgaWYgKG1vZHVsZU5hbWUgIT0gImZ0czMiKQorICAgIGlmICghZXF1YWxJZ25vcmlu
Z0Nhc2UobW9kdWxlTmFtZSwgImZ0czMiKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55Owog
CiAgICAgbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKQEAgLTMwMyw3ICszMDMs
NyBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVlRhYmxlKGNvbnN0CiAgICAgICAgIHJl
dHVybiBTUUxBdXRoRGVueTsKIAogICAgIC8vIEFsbG93IG9ubHkgdGhlIEZUUzMgZXh0ZW5zaW9u
Ci0gICAgaWYgKG1vZHVsZU5hbWUgIT0gImZ0czMiKQorICAgIGlmICghZXF1YWxJZ25vcmluZ0Nh
c2UobW9kdWxlTmFtZSwgImZ0czMiKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAg
ICAgcmV0dXJuIHVwZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmgJKHJldmlzaW9uIDYyOTE1KQorKysgV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHJldmlzaW9uIDYyOTE1KQorKysg
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsMjgg
KzIsMzAgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0zMiw4ICsz
NCw5IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2su
aCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgorI2lu
Y2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luYy5oIgogI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3lu
Y0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC04NywxNCArOTAsNTYgQEAgRGF0YWJhc2VTeW5jOjp+
RGF0YWJhc2VTeW5jKCkKICAgICB9CiB9CiAKLXZvaWQgRGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJz
aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25TeW5jQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgRGF0YWJhc2VTeW5jOjpjaGFu
Z2VWZXJzaW9uKGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJz
aW9uLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjaGFuZ2VWZXJzaW9u
Q2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKworICAgIGlmIChzcWxpdGVEYXRhYmFz
ZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9u
OjpEQVRBQkFTRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8U1FM
VHJhbnNhY3Rpb25TeW5jPiB0cmFuc2FjdGlvbiA9IFNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRl
KHRoaXMsIGNoYW5nZVZlcnNpb25DYWxsYmFjaywgZmFsc2UpOworICAgIGlmIChlYyA9IHRyYW5z
YWN0aW9uLT5iZWdpbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgYWN0dWFsVmVy
c2lvbjsKKyAgICBpZiAoIWdldFZlcnNpb25Gcm9tRGF0YWJhc2UoYWN0dWFsVmVyc2lvbikpIHsK
KyAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGFjdHVhbFZlcnNpb24gIT0gb2xkVmVyc2lvbikgeworICAgICAg
ICBlYyA9IFNRTEV4Y2VwdGlvbjo6VkVSU0lPTl9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoZWMgPSB0cmFuc2FjdGlvbi0+ZXhlY3V0ZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIXNldFZlcnNpb25JbkRhdGFiYXNlKG5ld1ZlcnNpb24pKSB7CisgICAgICAg
IGVjID0gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChlYyA9IHRyYW5zYWN0aW9uLT5jb21taXQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc2V0RXhwZWN0ZWRWZXJzaW9uKG5ld1ZlcnNpb24pOwogfQogCi12b2lkIERhdGFiYXNl
U3luYzo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4s
IGJvb2wsIEV4Y2VwdGlvbkNvZGUmKQordm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRP
bmx5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisKKyAgICBpZiAoc3FsaXRlRGF0YWJhc2UoKS50
cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFU
QUJBU0VfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPFNRTFRyYW5z
YWN0aW9uU3luYz4gdHJhbnNhY3Rpb24gPSBTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZSh0aGlz
LCBjYWxsYmFjaywgcmVhZE9ubHkpOworICAgIGlmICgoZWMgPSB0cmFuc2FjdGlvbi0+YmVnaW4o
KSkgfHwgKGVjID0gdHJhbnNhY3Rpb24tPmV4ZWN1dGUoKSkgfHwgKGVjID0gdHJhbnNhY3Rpb24t
PmNvbW1pdCgpKSkKKyAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CiB9CiAKIHZvaWQg
RGF0YWJhc2VTeW5jOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKQpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZVN5bmMuaAkocmV2aXNpb24gNjI5MTUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5j
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsMjggKzIsMzAgQEAKICAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgogICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZu
ZGVmIERhdGFiYXNlU3luY19oCkBAIC0zMSw2ICszMyw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaWZuZGVmIE5ERUJVRwpAQCAtNDAsNiArNDMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBEYXRhYmFzZUNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jOwog
Y2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VTeW5jLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5j
LmlkbAkocmV2aXNpb24gNjI5MTUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMiwyOCArMiwzMCBAQAogICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKIG1vZHVs
ZSBzdG9yYWdlIHsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lv
biA2MjkxNSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjEsNyArMjIxLDYgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5
Rm9yRGF0YWJhcwogCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNYXhT
aXplRm9yRGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7Ci0gICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKICAgICAvLyBUaGUgbWF4aW11
bSBzaXplIGZvciBhIGRhdGFiYXNlIGlzIHRoZSBmdWxsIHF1b3RhIGZvciBpdHMgb3JpZ2luLCBt
aW51cyB0aGUgY3VycmVudCB1c2FnZSB3aXRoaW4gdGhlIG9yaWdpbiwKICAgICAvLyBwbHVzIHRo
ZSBjdXJyZW50IHVzYWdlIG9mIHRoZSBnaXZlbiBkYXRhYmFzZQogICAgIE11dGV4TG9ja2VyIGxv
Y2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTEVy
cm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmgJKHJldmlzaW9u
IDYyOTE1KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVNoYXJlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9T
UUxSZXN1bHRTZXQuY3BwCShyZXZpc2lvbiA2MjkxNSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxS
ZXN1bHRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw2IEBACiAKICNpZiBFTkFC
TEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiU1FM
VmFsdWUuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgdW5zaWduZWQgY29uc3Qg
TWF4RXJyb3JDb2RlID0gMjsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmgJKHJldmlzaW9uIDYy
OTE1KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxMyArMzEsMTIgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAorI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJTUUxSZXN1bHRTZXRSb3dMaXN0LmgiCi0jaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQogY2xh
c3MgU1FMUmVzdWx0U2V0IDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMUmVzdWx0U2V0PiB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgU1FMUmVzdWx0U2V0KTsgfQpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L1NRTFN0YXRlbWVudENhbGxiYWNrLmgJKHJldmlzaW9uIDYyOTE1KQorKysgV2ViQ29yZS9zdG9y
YWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAko
cmV2aXNpb24gNjI5MTUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCiAKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L1NRTFN0YXRlbWVudFN5bmMuY3BwCShyZXZpc2lvbiA2MjQyNCkJKGZyb20gV2ViQ29yZS9zdG9y
YWdlL1NRTFN0YXRlbWVudC5jcHA6NjI0MjQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVt
ZW50U3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCisKKyNpZiBFTkFCTEUoREFUQUJBU0Up
CisKKyNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJTUUxFcnJvci5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSAiU1FM
aXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIKKyNpbmNs
dWRlICJTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rp
b24uaCIKKyNpbmNsdWRlICJTUUxWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcm
IHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1FMU3RhdGVtZW50KHN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFj
aywgZXJyb3JDYWxsYmFjaywgcmVhZE9ubHkpKTsKK30KKworU1FMU3RhdGVtZW50OjpTUUxTdGF0
ZW1lbnQoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFy
Z3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NS
ZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgYm9vbCByZWFk
T25seSkKKyAgICA6IG1fc3RhdGVtZW50KHN0YXRlbWVudC5jcm9zc1RocmVhZFN0cmluZygpKQor
ICAgICwgbV9hcmd1bWVudHMoYXJndW1lbnRzKQorICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFjayhj
YWxsYmFjaykKKyAgICAsIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQor
ICAgICwgbV9yZWFkT25seShyZWFkT25seSkKK3sKK30KKworYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4
ZWN1dGUoRGF0YWJhc2UqIGRiKQoreworICAgIEFTU0VSVCghbV9yZXN1bHRTZXQpOworCisgICAg
Ly8gSWYgd2UncmUgcmUtcnVubmluZyB0aGlzIHN0YXRlbWVudCBhZnRlciBhIHF1b3RhIHZpb2xh
dGlvbiwgd2UgbmVlZCB0byBjbGVhciB0aGF0IGVycm9yIG5vdworICAgIGNsZWFyRmFpbHVyZUR1
ZVRvUXVvdGEoKTsKKworICAgIC8vIFRoaXMgdHJhbnNhY3Rpb24gbWlnaHQgaGF2ZSBiZWVuIG1h
cmtlZCBiYWQgd2hpbGUgaXQgd2FzIGJlaW5nIHNldCB1cCBvbiB0aGUgbWFpbiB0aHJlYWQsCisg
ICAgLy8gc28gaWYgdGhlcmUgaXMgc3RpbGwgYW4gZXJyb3IsIHJldHVybiBmYWxzZS4KKyAgICBp
ZiAobV9lcnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcmVhZE9ubHkp
CisgICAgICAgIGRiLT5zZXRBdXRob3JpemVyUmVhZE9ubHkoKTsKKworICAgIFNRTGl0ZURhdGFi
YXNlKiBkYXRhYmFzZSA9ICZkYi0+c3FsaXRlRGF0YWJhc2UoKTsKKworICAgIFNRTGl0ZVN0YXRl
bWVudCBzdGF0ZW1lbnQoKmRhdGFiYXNlLCBtX3N0YXRlbWVudCk7CisgICAgaW50IHJlc3VsdCA9
IHN0YXRlbWVudC5wcmVwYXJlKCk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7
CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBv
ZiBzdGF0ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRh
KCksIHJlc3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgbV9lcnJvciA9
IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsIGRhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTog
IElmIHRoZSBzdGF0ZW1lbnQgdXNlcyB0aGUgPyMjIyBzeW50YXggc3VwcG9ydGVkIGJ5IHNxbGl0
ZSwgdGhlIGJpbmQgcGFyYW1ldGVyIGNvdW50IGlzIHZlcnkgbGlrZWx5IG9mZiBmcm9tIHRoZSBu
dW1iZXIgb2YgcXVlc3Rpb24gbWFya3MuCisgICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhl
eSBtaWdodCBiZSB0cnlpbmcgdG8gZG8gc29tZXRoaW5nIGZpc2h5IG9yIG1hbGljaW91cworICAg
IGlmIChzdGF0ZW1lbnQuYmluZFBhcmFtZXRlckNvdW50KCkgIT0gbV9hcmd1bWVudHMuc2l6ZSgp
KSB7CisgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQmluZCBwYXJhbWV0ZXIgY291bnQgZG9lc24n
dCBtYXRjaCBudW1iZXIgb2YgcXVlc3Rpb24gbWFya3MiKTsKKyAgICAgICAgbV9lcnJvciA9IFNR
TEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJudW1iZXIgb2YgJz8ncyBpbiBz
dGF0ZW1lbnQgc3RyaW5nIGRvZXMgbm90IG1hdGNoIGFyZ3VtZW50IGNvdW50Iik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9h
cmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LmJpbmRW
YWx1ZShpICsgMSwgbV9hcmd1bWVudHNbaV0pOworICAgICAgICBpZiAocmVzdWx0ID09IFNRTFJl
c3VsdEZ1bGwpIHsKKyAgICAgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1b3RhKCk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ICE9IFNR
TFJlc3VsdE9rKSB7CisgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkZhaWxlZCB0byBiaW5k
IHZhbHVlIGluZGV4ICVpIHRvIHN0YXRlbWVudCBmb3IgcXVlcnkgJyVzJyIsIGkgKyAxLCBtX3N0
YXRlbWVudC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6
OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgUmVm
UHRyPFNRTFJlc3VsdFNldD4gcmVzdWx0U2V0ID0gU1FMUmVzdWx0U2V0OjpjcmVhdGUoKTsKKwor
ICAgIC8vIFN0ZXAgc28gd2UgY2FuIGZldGNoIHRoZSBjb2x1bW4gbmFtZXMuCisgICAgcmVzdWx0
ID0gc3RhdGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgewor
ICAgICAgICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1lbnQuY29sdW1uQ291bnQoKTsKKyAgICAg
ICAgU1FMUmVzdWx0U2V0Um93TGlzdCogcm93cyA9IHJlc3VsdFNldC0+cm93cygpOworCisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykKKyAgICAgICAgICAgIHJv
d3MtPmFkZENvbHVtbihzdGF0ZW1lbnQuZ2V0Q29sdW1uTmFtZShpKSk7CisKKyAgICAgICAgZG8g
eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQorICAg
ICAgICAgICAgICAgIHJvd3MtPmFkZFJlc3VsdChzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFsdWUoaSkp
OworCisgICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICB9IHdo
aWxlIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KTsKKworICAgICAgICBpZiAocmVzdWx0ICE9IFNR
TFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNR
TEVycm9yOjpEQVRBQkFTRV9FUlIsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBT
UUxSZXN1bHREb25lKSB7CisgICAgICAgIC8vIERpZG4ndCBmaW5kIGFueXRoaW5nLCBvciB3YXMg
YW4gaW5zZXJ0CisgICAgICAgIGlmIChkYi0+bGFzdEFjdGlvbldhc0luc2VydCgpKQorICAgICAg
ICAgICAgcmVzdWx0U2V0LT5zZXRJbnNlcnRJZChkYXRhYmFzZS0+bGFzdEluc2VydFJvd0lEKCkp
OworICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKKyAgICAgICAgLy8g
UmV0dXJuIHRoZSBRdW90YSBlcnJvciAtIHRoZSBkZWxlZ2F0ZSB3aWxsIGJlIGFza2VkIGZvciBt
b3JlIHNwYWNlIGFuZCB0aGlzIHN0YXRlbWVudCBtaWdodCBiZSByZS1ydW4KKyAgICAgICAgc2V0
RmFpbHVyZUR1ZVRvUXVvdGEoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7
CisgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9F
UlIsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIHNwZWMgYWxsb3dzIHRyaWdnZXJzLCBhbmQgd2Ug
d2FudCB0byBiZSAiYWNjdXJhdGUiIGluIGEgZGlmZmVyZW50IHdheSwgd2UnZCB1c2UKKyAgICAv
LyBzcWxpdGUzX3RvdGFsX2NoYW5nZXMoKSBoZXJlIGluc3RlYWQgb2Ygc3FsaXRlM19jaGFuZ2Vk
LCBiZWNhdXNlIHRoYXQgaW5jbHVkZXMgcm93cyBtb2RpZmllZCBmcm9tIHdpdGhpbiBhIHRyaWdn
ZXIKKyAgICAvLyBGb3Igbm93LCB0aGlzIHNlZW1zIHN1ZmZpY2llbnQKKyAgICByZXN1bHRTZXQt
PnNldFJvd3NBZmZlY3RlZChkYXRhYmFzZS0+bGFzdENoYW5nZXMoKSk7CisKKyAgICBtX3Jlc3Vs
dFNldCA9IHJlc3VsdFNldDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTUUxTdGF0ZW1l
bnQ6OnNldERhdGFiYXNlRGVsZXRlZEVycm9yKCkKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3IgJiYg
IW1fcmVzdWx0U2V0KTsKKyAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6
VU5LTk9XTl9FUlIsICJ1bmFibGUgdG8gZXhlY3V0ZSBzdGF0ZW1lbnQsIGJlY2F1c2UgdGhlIHVz
ZXIgZGVsZXRlZCB0aGUgZGF0YWJhc2UiKTsKK30KKwordm9pZCBTUUxTdGF0ZW1lbnQ6OnNldFZl
cnNpb25NaXNtYXRjaGVkRXJyb3IoKQoreworICAgIEFTU0VSVCghbV9lcnJvciAmJiAhbV9yZXN1
bHRTZXQpOworICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpWRVJTSU9O
X0VSUiwgImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBh
cmd1bWVudCBkbyBub3QgbWF0Y2giKTsKK30KKworYm9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1D
YWxsYmFjayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKHRyYW5z
YWN0aW9uKTsKKworICAgIGJvb2wgY2FsbGJhY2tFcnJvciA9IGZhbHNlOworCisgICAgLy8gQ2Fs
bCB0aGUgYXBwcm9wcmlhdGUgc3RhdGVtZW50IGNhbGxiYWNrIGFuZCB0cmFjayBpZiBpdCByZXN1
bHRlZCBpbiBhbiBlcnJvciwKKyAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVlZCB0byBqdW1wIHRv
IHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjay4KKyAgICBpZiAobV9lcnJvcikgeworICAg
ICAgICBBU1NFUlQobV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKTsKKyAgICAgICAgY2FsbGJhY2tF
cnJvciA9IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rpb24sIG1fZXJy
b3IuZ2V0KCkpOworICAgIH0gZWxzZSBpZiAobV9zdGF0ZW1lbnRDYWxsYmFjaykKKyAgICAgICAg
Y2FsbGJhY2tFcnJvciA9ICFtX3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbiwg
bV9yZXN1bHRTZXQuZ2V0KCkpOworCisgICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNrcywg
dG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICBtX3N0YXRlbWVudENhbGxiYWNrID0gMDsK
KyAgICBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2sgPSAwOworCisgICAgcmV0dXJuIGNhbGxiYWNr
RXJyb3I7Cit9CisKK3ZvaWQgU1FMU3RhdGVtZW50OjpzZXRGYWlsdXJlRHVlVG9RdW90YSgpCit7
CisgICAgQVNTRVJUKCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7CisgICAgbV9lcnJvciA9IFNR
TEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlFVT1RBX0VSUiwgInRoZXJlIHdhcyBub3QgZW5vdWdo
IHJlbWFpbmluZyBzdG9yYWdlIHNwYWNlLCBvciB0aGUgc3RvcmFnZSBxdW90YSB3YXMgcmVhY2hl
ZCBhbmQgdGhlIHVzZXIgZGVjbGluZWQgdG8gYWxsb3cgbW9yZSBzcGFjZSIpOworfQorCit2b2lk
IFNRTFN0YXRlbWVudDo6Y2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpCit7CisgICAgaWYgKGxhc3RF
eGVjdXRpb25GYWlsZWREdWVUb1F1b3RhKCkpCisgICAgICAgIG1fZXJyb3IgPSAwOworfQorCiti
b29sIFNRTFN0YXRlbWVudDo6bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSBjb25zdAor
eworICAgIHJldHVybiBtX2Vycm9yICYmIG1fZXJyb3ItPmNvZGUoKSA9PSBTUUxFcnJvcjo6UVVP
VEFfRVJSOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
REFUQUJBU0UpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCShyZXZpc2lv
biA2MjQyNCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI1LDQ5ICsyNiwzMyBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CisKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnQuaCIKKyNpbmNs
dWRlICJTUUxTdGF0ZW1lbnRTeW5jLmgiCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNs
dWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTUUxFcnJv
ci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgorI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5o
IgorI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAjaW5j
bHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKLSNp
bmNsdWRlICJTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNR
TFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+
IFNRTFN0YXRlbWVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0
b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+
IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2Fs
bGJhY2ssIGJvb2wgcmVhZE9ubHkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0
ZW1lbnQoc3RhdGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCByZWFk
T25seSkpOwotfQotCi1TUUxTdGF0ZW1lbnQ6OlNRTFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0
YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNR
TFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQotICAgIDogbV9zdGF0ZW1l
bnQoc3RhdGVtZW50LmNyb3NzVGhyZWFkU3RyaW5nKCkpCitTUUxTdGF0ZW1lbnRTeW5jOjpTUUxT
dGF0ZW1lbnRTeW5jKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFs
dWU+JiBhcmd1bWVudHMsIGJvb2wgcmVhZE9ubHkpCisgICAgOiBtX3N0YXRlbWVudChzdGF0ZW1l
bnQpCiAgICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBtX3N0YXRlbWVudENhbGxi
YWNrKGNhbGxiYWNrKQotICAgICwgbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJh
Y2spCiAgICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5KQogeworICAgIEFTU0VSVCghbV9zdGF0ZW1l
bnQuaXNFbXB0eSgpKTsKIH0KIAotYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2Uq
IGRiKQorUGFzc1JlZlB0cjxTUUxSZXN1bHRTZXQ+IFNRTFN0YXRlbWVudFN5bmM6OmV4ZWN1dGUo
RGF0YWJhc2VTeW5jKiBkYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKCFtX3Jl
c3VsdFNldCk7Ci0KLSAgICAvLyBJZiB3ZSdyZSByZS1ydW5uaW5nIHRoaXMgc3RhdGVtZW50IGFm
dGVyIGEgcXVvdGEgdmlvbGF0aW9uLCB3ZSBuZWVkIHRvIGNsZWFyIHRoYXQgZXJyb3Igbm93Ci0g
ICAgY2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpOwotCi0gICAgLy8gVGhpcyB0cmFuc2FjdGlvbiBt
aWdodCBoYXZlIGJlZW4gbWFya2VkIGJhZCB3aGlsZSBpdCB3YXMgYmVpbmcgc2V0IHVwIG9uIHRo
ZSBtYWluIHRocmVhZCwKLSAgICAvLyBzbyBpZiB0aGVyZSBpcyBzdGlsbCBhbiBlcnJvciwgcmV0
dXJuIGZhbHNlLgotICAgIGlmIChtX2Vycm9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAg
ICBpZiAobV9yZWFkT25seSkKICAgICAgICAgZGItPnNldEF1dGhvcml6ZXJSZWFkT25seSgpOwog
CkBAIC03NSwzMiArNjAsMjYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2Uq
IGRiKQogCiAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqZGF0YWJhc2UsIG1fc3RhdGVt
ZW50KTsKICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQogICAgIGlmIChy
ZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJVbmFibGUg
dG8gdmVyaWZ5IGNvcnJlY3RuZXNzIG9mIHN0YXRlbWVudCAlcyAtIGVycm9yICVpICglcykiLCBt
X3N0YXRlbWVudC5hc2NpaSgpLmRhdGEoKSwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNn
KCkpOwotICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6U1lOVEFY
X0VSUiwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6U1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCi0gICAgLy8gRklYTUU6ICBJZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMg
c3ludGF4IHN1cHBvcnRlZCBieSBzcWxpdGUsIHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2
ZXJ5IGxpa2VseSBvZmYgZnJvbSB0aGUgbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgotICAgIC8v
IElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZXkgbWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGlu
ZyBmaXNoeSBvciBtYWxpY2lvdXMKICAgICBpZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3Vu
dCgpICE9IG1fYXJndW1lbnRzLnNpemUoKSkgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJp
bmQgcGFyYW1ldGVyIGNvdW50IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtz
Iik7Ci0gICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhf
RVJSLCAibnVtYmVyIG9mICc/J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBh
cmd1bWVudCBjb3VudCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVjID0gU1FM
RXhjZXB0aW9uOjpTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgcmVzdWx0ID0gc3RhdGVtZW50LmJpbmRWYWx1ZShpICsgMSwgbV9hcmd1bWVudHNbaV0pOwog
ICAgICAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKLSAgICAgICAgICAgIHNldEZh
aWx1cmVEdWVUb1F1b3RhKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBlYyA9IFNRTEV4Y2VwdGlvbjo6UVVPVEFfRVJSOworICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAg
ICAgICBMT0coU3RvcmFnZUFQSSwgIkZhaWxlZCB0byBiaW5kIHZhbHVlIGluZGV4ICVpIHRvIHN0
YXRlbWVudCBmb3IgcXVlcnkgJyVzJyIsIGkgKyAxLCBtX3N0YXRlbWVudC5hc2NpaSgpLmRhdGEo
KSk7Ci0gICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFU
QUJBU0VfRVJSLCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsKKyAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjMsNzkgKzEwMiwy
NCBAQCBib29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSogZGIpCiAgICAgICAgIH0g
d2hpbGUgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpOwogCiAgICAgICAgIGlmIChyZXN1bHQgIT0g
U1FMUmVzdWx0RG9uZSkgewotICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
U1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRB
QkFTRV9FUlI7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0gZWxzZSBp
ZiAocmVzdWx0ID09IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55
dGhpbmcsIG9yIHdhcyBhbiBpbnNlcnQKKyAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55dGhpbmcs
IG9yIHdhcyBhbiBpbnNlcnQuCiAgICAgICAgIGlmIChkYi0+bGFzdEFjdGlvbldhc0luc2VydCgp
KQogICAgICAgICAgICAgcmVzdWx0U2V0LT5zZXRJbnNlcnRJZChkYXRhYmFzZS0+bGFzdEluc2Vy
dFJvd0lEKCkpOwogICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKLSAg
ICAgICAgLy8gUmV0dXJuIHRoZSBRdW90YSBlcnJvciAtIHRoZSBkZWxlZ2F0ZSB3aWxsIGJlIGFz
a2VkIGZvciBtb3JlIHNwYWNlIGFuZCB0aGlzIHN0YXRlbWVudCBtaWdodCBiZSByZS1ydW4KLSAg
ICAgICAgc2V0RmFpbHVyZUR1ZVRvUXVvdGEoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAvLyBRdW90YSBlcnJvciwgdGhlIGRlbGVnYXRlIHdpbGwgYmUgYXNrZWQgZm9yIG1vcmUg
c3BhY2UgYW5kIHRoaXMgc3RhdGVtZW50IG1pZ2h0IGJlIHJlLXJ1bi4KKyAgICAgICAgZWMgPSBT
UUxFeGNlcHRpb246OlFVT1RBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VS
UiwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOworICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICAvLyBGSVhNRTogSWYgdGhlIHNwZWMgYWxsb3dzIHRyaWdnZXJzLCBhbmQg
d2Ugd2FudCB0byBiZSAiYWNjdXJhdGUiIGluIGEgZGlmZmVyZW50IHdheSwgd2UnZCB1c2UKLSAg
ICAvLyBzcWxpdGUzX3RvdGFsX2NoYW5nZXMoKSBoZXJlIGluc3RlYWQgb2Ygc3FsaXRlM19jaGFu
Z2VkLCBiZWNhdXNlIHRoYXQgaW5jbHVkZXMgcm93cyBtb2RpZmllZCBmcm9tIHdpdGhpbiBhIHRy
aWdnZXIKLSAgICAvLyBGb3Igbm93LCB0aGlzIHNlZW1zIHN1ZmZpY2llbnQKICAgICByZXN1bHRT
ZXQtPnNldFJvd3NBZmZlY3RlZChkYXRhYmFzZS0+bGFzdENoYW5nZXMoKSk7Ci0KLSAgICBtX3Jl
c3VsdFNldCA9IHJlc3VsdFNldDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTUUxTdGF0
ZW1lbnQ6OnNldERhdGFiYXNlRGVsZXRlZEVycm9yKCkKLXsKLSAgICBBU1NFUlQoIW1fZXJyb3Ig
JiYgIW1fcmVzdWx0U2V0KTsKLSAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJv
cjo6VU5LTk9XTl9FUlIsICJ1bmFibGUgdG8gZXhlY3V0ZSBzdGF0ZW1lbnQsIGJlY2F1c2UgdGhl
IHVzZXIgZGVsZXRlZCB0aGUgZGF0YWJhc2UiKTsKLX0KLQotdm9pZCBTUUxTdGF0ZW1lbnQ6OnNl
dFZlcnNpb25NaXNtYXRjaGVkRXJyb3IoKQotewotICAgIEFTU0VSVCghbV9lcnJvciAmJiAhbV9y
ZXN1bHRTZXQpOwotICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpWRVJT
SU9OX0VSUiwgImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9u
YCBhcmd1bWVudCBkbyBub3QgbWF0Y2giKTsKLX0KLQotYm9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZv
cm1DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKHRy
YW5zYWN0aW9uKTsKLQotICAgIGJvb2wgY2FsbGJhY2tFcnJvciA9IGZhbHNlOwotCi0gICAgLy8g
Q2FsbCB0aGUgYXBwcm9wcmlhdGUgc3RhdGVtZW50IGNhbGxiYWNrIGFuZCB0cmFjayBpZiBpdCBy
ZXN1bHRlZCBpbiBhbiBlcnJvciwKLSAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVlZCB0byBqdW1w
IHRvIHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjay4KLSAgICBpZiAobV9lcnJvcikgewot
ICAgICAgICBBU1NFUlQobV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJh
Y2tFcnJvciA9IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rpb24sIG1f
ZXJyb3IuZ2V0KCkpOwotICAgIH0gZWxzZSBpZiAobV9zdGF0ZW1lbnRDYWxsYmFjaykKLSAgICAg
ICAgY2FsbGJhY2tFcnJvciA9ICFtX3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlv
biwgbV9yZXN1bHRTZXQuZ2V0KCkpOwotCi0gICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNr
cywgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBtX3N0YXRlbWVudENhbGxiYWNrID0g
MDsKLSAgICBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2sgPSAwOwotCi0gICAgcmV0dXJuIGNhbGxi
YWNrRXJyb3I7Ci19Ci0KLXZvaWQgU1FMU3RhdGVtZW50OjpzZXRGYWlsdXJlRHVlVG9RdW90YSgp
Ci17Ci0gICAgQVNTRVJUKCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7Ci0gICAgbV9lcnJvciA9
IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlFVT1RBX0VSUiwgInRoZXJlIHdhcyBub3QgZW5v
dWdoIHJlbWFpbmluZyBzdG9yYWdlIHNwYWNlLCBvciB0aGUgc3RvcmFnZSBxdW90YSB3YXMgcmVh
Y2hlZCBhbmQgdGhlIHVzZXIgZGVjbGluZWQgdG8gYWxsb3cgbW9yZSBzcGFjZSIpOwotfQotCi12
b2lkIFNRTFN0YXRlbWVudDo6Y2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpCi17Ci0gICAgaWYgKGxh
c3RFeGVjdXRpb25GYWlsZWREdWVUb1F1b3RhKCkpCi0gICAgICAgIG1fZXJyb3IgPSAwOwotfQot
Ci1ib29sIFNRTFN0YXRlbWVudDo6bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSBjb25z
dAotewotICAgIHJldHVybiBtX2Vycm9yICYmIG1fZXJyb3ItPmNvZGUoKSA9PSBTUUxFcnJvcjo6
UVVPVEFfRVJSOworICAgIHJldHVybiByZXN1bHRTZXQucmVsZWFzZSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTUUxTdGF0ZW1lbnRTeW5jX2gKKyNkZWZpbmUgU1FM
U3RhdGVtZW50U3luY19oCisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisKKyNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxW
YWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFiYXNlU3luYzsKK2NsYXNzIFNR
TFJlc3VsdFNldDsKKworY2xhc3MgU1FMU3RhdGVtZW50U3luYyB7CitwdWJsaWM6CisgICAgU1FM
U3RhdGVtZW50U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZh
bHVlPiYgYXJndW1lbnRzLCBib29sIHJlYWRPbmx5KTsKKworICAgIFBhc3NSZWZQdHI8U1FMUmVz
dWx0U2V0PiBleGVjdXRlKERhdGFiYXNlU3luYyosIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0
ZToKKyAgICBTdHJpbmcgbV9zdGF0ZW1lbnQ7CisgICAgVmVjdG9yPFNRTFZhbHVlPiBtX2FyZ3Vt
ZW50czsKKyAgICBib29sIG1fcmVhZE9ubHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCisKKyNlbmRpZiAvLyBTUUxTdGF0ZW1lbnRT
eW5jX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gNjI5MTUp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw2IEBACiAKICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlVGhyZWFkLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKQEAgLTM3MCw3ICszNjksNyBAQCBib29sIFNRTFRyYW5zYWN0aW9uOjpy
dW5DdXJyZW50U3RhdGVtZW50CiAgICAgICAgICAgICAvLyBGbGFnIHRoaXMgdHJhbnNhY3Rpb24g
YXMgaGF2aW5nIGNoYW5nZWQgdGhlIGRhdGFiYXNlIGZvciBsYXRlciBkZWxlZ2F0ZSBub3RpZmlj
YXRpb24KICAgICAgICAgICAgIG1fbW9kaWZpZWREYXRhYmFzZSA9IHRydWU7CiAgICAgICAgICAg
ICAvLyBBbHNvIGRpcnR5IHRoZSBzaXplIG9mIHRoaXMgZGF0YWJhc2UgZmlsZSBmb3IgY2FsY3Vs
YXRpbmcgcXVvdGEgdXNhZ2UKLSAgICAgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xp
ZW50KCktPmRpZEV4ZWN1dGVTdGF0ZW1lbnQodGhpcyk7CisgICAgICAgICAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGVjdXRlU3RhdGVtZW50KGRhdGFiYXNlKCkpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlbWVudC0+aGFzU3RhdGVtZW50
Q2FsbGJhY2soKSkgewpAQCAtNDMyLDcgKzQzMSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRl
bGl2ZXJRdW90YUluY3JlYXMKICAgICBBU1NFUlQobV9jdXJyZW50U3RhdGVtZW50KTsKICAgICBB
U1NFUlQoIW1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KTsKIAotICAgIG1fc2hvdWxkUmV0
cnlDdXJyZW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlk
RXhjZWVkUXVvdGEodGhpcyk7CisgICAgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGNlZWRRdW90YShkYXRhYmFzZSgp
KTsKIAogICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHM7CiAg
ICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIHJ1blN0YXRlbWVudHMgZm9yIHRyYW5zYWN0
aW9uICVwXG4iLCB0aGlzKTsKQEAgLTQ3Miw3ICs0NzEsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9u
Ojpwb3N0ZmxpZ2h0QW5kQ29tbWl0CiAKICAgICAvLyBUaGUgY29tbWl0IHdhcyBzdWNjZXNzZnVs
LiBJZiB0aGUgdHJhbnNhY3Rpb24gbW9kaWZpZWQgdGhpcyBkYXRhYmFzZSwgbm90aWZ5IHRoZSBk
ZWxlZ2F0ZXMuCiAgICAgaWYgKG1fbW9kaWZpZWREYXRhYmFzZSkKLSAgICAgICAgbV9kYXRhYmFz
ZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkQ29tbWl0VHJhbnNhY3Rpb24odGhpcyk7CisgICAg
ICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZENvbW1pdFdyaXRlVHJhbnNh
Y3Rpb24oZGF0YWJhc2UoKSk7CiAKICAgICAvLyBOb3cgcmVsZWFzZSBvdXIgdW5uZWVkZWQgY2Fs
bGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgogICAgIG1fY2FsbGJhY2sgPSAwOwpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDYyOTE1KQorKysgV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE3ICszMCwx
NSBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgotCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlNRTFN0YXRlbWVudC5o
IgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQogY2xh
c3MgRGF0YWJhc2U7CiBjbGFzcyBTUUxFcnJvcjsKIGNsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uOwpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCShyZXZpc2lvbiA2
MjkxNSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uQ2xpZW50LmNwcAkocmV2aXNpb24gNjI5MTUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25DbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywzNiArMzMsMjcgQEAK
IAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUg
IkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRGF0YWJh
c2VUaHJlYWQuaCIKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0
YWJhc2VUcmFja2VyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgi
Ci0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRUcmFuc2FjdGlvbihT
UUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50Ojpk
aWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewot
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7
Ci0gICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAg
RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQo
CiAgICAgICAgIGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRl
bnRpZmllcigpKTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0
YXRlbWVudChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit2b2lkIFNRTFRyYW5zYWN0aW9u
Q2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQog
ewotICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQo
KSk7Ci0gICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGF0YWJhc2VDaGFuZ2VkKHRyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpKTsKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kYXRh
YmFzZUNoYW5nZWQoZGF0YWJhc2UpOwogfQogCi1ib29sIFNRTFRyYW5zYWN0aW9uQ2xpZW50Ojpk
aWRFeGNlZWRRdW90YShTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCitib29sIFNRTFRyYW5z
YWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkK
IHsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IHRy
YW5zYWN0aW9uLT5kYXRhYmFzZSgpOwotCisgICAgQVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICB1bnNpZ25lZCBsb25nIGxv
bmcgY3VycmVudFF1b3RhID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucXVvdGFGb3JPcmln
aW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwogICAgIGRhdGFiYXNlLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmRhdGFiYXNlRXhjZWVkZWRRdW90YShkYXRhYmFzZS0+c3RyaW5nSWRl
bnRpZmllcigpKTsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbmV3UXVvdGEgPSBEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5xdW90YUZvck9yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4o
KSk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaAkocmV2aXNpb24g
NjI5MTUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTYgKzM3LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAg
IGNsYXNzIFNRTFRyYW5zYWN0aW9uOworY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKKworLy8gQSBj
bGllbnQgdG8gdGhlIFNRTFRyYW5zYWN0aW9uIGNsYXNzLiBBbGxvd3MgU1FMVHJhbnNhY3Rpb24g
dG8gbm90aWZ5IGludGVyZXN0ZWQKKy8vIHBhcnRpZXMgdGhhdCBjZXJ0YWluIHRoaW5ncyBoYXZl
IGhhcHBlbmVkIGluIGEgdHJhbnNhY3Rpb24uCitjbGFzcyBTUUxUcmFuc2FjdGlvbkNsaWVudCA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgdm9pZCBkaWRDb21taXRXcml0ZVRy
YW5zYWN0aW9uKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVTdGF0ZW1l
bnQoQWJzdHJhY3REYXRhYmFzZSopOworICAgIGJvb2wgZGlkRXhjZWVkUXVvdGEoQWJzdHJhY3RE
YXRhYmFzZSopOworfTsKIAotICAgIC8vIEEgY2xpZW50IHRvIHRoZSBTUUxUcmFuc2FjdGlvbiBj
bGFzcy4gQWxsb3dzIFNRTFRyYW5zYWN0aW9uIHRvIG5vdGlmeSBpbnRlcmVzdGVkCi0gICAgLy8g
cGFydGllcyB0aGF0IGNlcnRhaW4gdGhpbmdzIGhhdmUgaGFwcGVuZWQgaW4gYSB0cmFuc2FjdGlv
bi4KLSAgICBjbGFzcyBTUUxUcmFuc2FjdGlvbkNsaWVudCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
Ci0gICAgcHVibGljOgotICAgICAgICB2b2lkIGRpZENvbW1pdFRyYW5zYWN0aW9uKFNRTFRyYW5z
YWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZGlkRXhlY3V0ZVN0YXRlbWVudChTUUxUcmFuc2FjdGlv
biopOwotICAgICAgICBib29sIGRpZEV4Y2VlZFF1b3RhKFNRTFRyYW5zYWN0aW9uKik7Ci0gICAg
fTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDYyOTE1KQorKysg
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25TeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25T
eW5jLmNwcAkocmV2aXNpb24gNjI5MTUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25TeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiwyOCArMiwzMCBAQAogICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTMyLDE3ICszNCwyNiBAQAogI2lmIEVOQUJMRShE
QVRBQkFTRSkKIAogI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTEV4Y2Vw
dGlvbi5oIgogI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVu
dFN5bmMuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIlNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNs
dWRlICJTUUxpdGVUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgU1FMVHJhbnNhY3Rpb25DbGllbnQq
IHRyYW5zYWN0aW9uQ2xpZW50KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFNRTFRyYW5z
YWN0aW9uQ2xpZW50LCB0cmFuc2FjdGlvbkNsaWVudCwgKCkpOworICAgIHJldHVybiAmdHJhbnNh
Y3Rpb25DbGllbnQ7Cit9CisKIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jPiBTUUxUcmFu
c2FjdGlvblN5bmM6OmNyZWF0ZShEYXRhYmFzZVN5bmMqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrPiBjYWxsYmFjaywgYm9vbCByZWFkT25seSkKIHsKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNRTFRyYW5zYWN0aW9uU3luYyhkYiwgY2FsbGJhY2ssIHJlYWRPbmx5
KSk7CkBAIC01MiwyMiArNjMsMTQ5IEBAIFNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rp
b25TeW5jKEQKICAgICA6IG1fZGF0YWJhc2UoZGIpCiAgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNr
KQogICAgICwgbV9yZWFkT25seShyZWFkT25seSkKKyAgICAsIG1fbW9kaWZpZWREYXRhYmFzZShm
YWxzZSkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgQVNTRVJUKGNhbGxiYWNrKTsKIH0KIAogU1FMVHJh
bnNhY3Rpb25TeW5jOjp+U1FMVHJhbnNhY3Rpb25TeW5jKCkKIHsKICAgICBBU1NFUlQobV9kYXRh
YmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
aWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24gJiYgbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVz
cygpKQorICAgICAgICByb2xsYmFjaygpOworfQorCitQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4g
U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50
LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29u
dGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpKSB7CisgICAgICAg
IGVjID0gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgaWYgKCFtX2RhdGFiYXNlLT52ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkpIHsKKyAg
ICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlZFUlNJT05fRVJSOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBpZiAoc3FsU3RhdGVtZW50LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBib29sIHJlYWRPbmx5TW9kZSA9IG1fcmVhZE9ubHkgfHwgbV9kYXRhYmFzZS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RhdGFiYXNlUmVhZE9ubHkoKTsKKyAgICBTUUxT
dGF0ZW1lbnRTeW5jIHN0YXRlbWVudChzcWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywgcmVhZE9ubHlN
b2RlKTsKKworICAgIG1fZGF0YWJhc2UtPnJlc2V0QXV0aG9yaXplcigpOworICAgIGJvb2wgcmV0
cnlTdGF0ZW1lbnQgPSB0cnVlOworICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IHJlc3VsdFNldDsK
KyAgICB3aGlsZSAocmV0cnlTdGF0ZW1lbnQpIHsKKyAgICAgICAgcmV0cnlTdGF0ZW1lbnQgPSBm
YWxzZTsKKyAgICAgICAgcmVzdWx0U2V0ID0gc3RhdGVtZW50LmV4ZWN1dGUobV9kYXRhYmFzZS5n
ZXQoKSwgZWMpOworICAgICAgICBpZiAoIXJlc3VsdFNldCkgeworICAgICAgICAgICAgaWYgKG1f
c3FsaXRlVHJhbnNhY3Rpb24tPndhc1JvbGxlZEJhY2tCeVNxbGl0ZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworCisgICAgICAgICAgICBpZiAoZWMgPT0gU1FMRXhjZXB0aW9uOjpRVU9U
QV9FUlIpIHsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhj
ZWVkUXVvdGEoZGF0YWJhc2UoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZWMgPSAwOworICAg
ICAgICAgICAgICAgICAgICByZXRyeVN0YXRlbWVudCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKG1fZGF0YWJhc2UtPmxhc3RBY3Rpb25DaGFuZ2VkRGF0
YWJhc2UoKSkgeworICAgICAgICBtX21vZGlmaWVkRGF0YWJhc2UgPSB0cnVlOworICAgICAgICB0
cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGVjdXRlU3RhdGVtZW50KGRhdGFiYXNlKCkpOworICAg
IH0KKworICAgIHJldHVybiByZXN1bHRTZXQucmVsZWFzZSgpOworfQorCitFeGNlcHRpb25Db2Rl
IFNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4oKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIW1f
ZGF0YWJhc2UtPm9wZW5lZCgpKQorICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dO
X0VSUjsKKworICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoKSk7CisKKyAgICAvLyBTZXQgdGhlIG1heGltdW0gdXNhZ2UgZm9yIHRo
aXMgdHJhbnNhY3Rpb24gaWYgdGhpcyB0cmFuc2FjdGlvbnMgaXMgbm90IHJlYWQtb25seS4KKyAg
ICBpZiAoIW1fcmVhZE9ubHkpCisgICAgICAgIG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCku
c2V0TWF4aW11bVNpemUobV9kYXRhYmFzZS0+bWF4aW11bVNpemUoKSk7CisKKyAgICBBU1NFUlQo
IW1fc3FsaXRlVHJhbnNhY3Rpb24pOworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uc2V0KG5ldyBT
UUxpdGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCBtX3JlYWRPbmx5
KSk7CisKKyAgICBtX2RhdGFiYXNlLT5yZXNldERlbGV0ZXMoKTsKKyAgICBtX2RhdGFiYXNlLT5k
aXNhYmxlQXV0aG9yaXplcigpOworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmJlZ2luKCk7Cisg
ICAgbV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOworCisgICAgLy8gQ2hlY2sgaWYgYmVn
aW4oKSBzdWNjZWVkZWQuCisgICAgaWYgKCFtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNz
KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5z
YWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigp
OworICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgfQorCisg
ICAgcmV0dXJuIDA7Cit9CisKK0V4Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVj
dXRlKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSB8fCAh
bV9jYWxsYmFjayB8fCAhbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQobV9kYXRhYmFzZS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzKSkgeworICAgICAgICBtX2NhbGxiYWNrID0gMDsKKyAg
ICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7CisgICAgfQorCisgICAgbV9j
YWxsYmFjayA9IDA7CisgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0
PiBTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVj
dG9yPFNRTFZhbHVlPiYsIEV4Y2VwdGlvbkNvZGUmKQorRXhjZXB0aW9uQ29kZSBTUUxUcmFuc2Fj
dGlvblN5bmM6OmNvbW1pdCgpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+
b3BlbmVkKCkpCisgICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOworCisg
ICAgQVNTRVJUKG1fc3FsaXRlVHJhbnNhY3Rpb24pOworCisgICAgbV9kYXRhYmFzZS0+ZGlzYWJs
ZUF1dGhvcml6ZXIoKTsKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBt
X2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICAvLyBJZiB0aGUgY29tbWl0IGZh
aWxlZCwgdGhlIHRyYW5zYWN0aW9uIHdpbGwgc3RpbGwgYmUgbWFya2VkIGFzICJpbiBwcm9ncmVz
cyIKKyAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQorICAgICAgICBy
ZXR1cm4gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisKKyAgICBtX3NxbGl0ZVRyYW5zYWN0
aW9uLmNsZWFyKCk7CisKKyAgICAvLyBWYWN1dW0gdGhlIGRhdGFiYXNlIGlmIGFueXRoaW5nIHdh
cyBkZWxldGVkLgorICAgIGlmIChtX2RhdGFiYXNlLT5oYWREZWxldGVzKCkpCisgICAgICAgIG1f
ZGF0YWJhc2UtPmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKKworICAgIC8vIFRoZSBjb21t
aXQgd2FzIHN1Y2Nlc3NmdWwuIElmIHRoZSB0cmFuc2FjdGlvbiBtb2RpZmllZCB0aGlzIGRhdGFi
YXNlLCBub3RpZnkgdGhlIGRlbGVnYXRlcy4KKyAgICBpZiAobV9tb2RpZmllZERhdGFiYXNlKQor
ICAgICAgICB0cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKGRh
dGFiYXNlKCkpOworCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgU1FMVHJhbnNhY3Rpb25TeW5j
Ojpyb2xsYmFjaygpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRo
b3JpemVyKCk7CisgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgbV9zcWxp
dGVUcmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5j
bGVhcigpOworICAgIH0KKyAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAg
ICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dy
ZXNzKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
REFUQUJBU0UpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5oCShyZXZpc2lv
biA2MjkxNSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMiw0NiArMiw0OSBAQAogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAg
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgU1FMVHJh
bnNhY3Rpb25TeW5jX2gKICNkZWZpbmUgU1FMVHJhbnNhY3Rpb25TeW5jX2gKIAogI2lmIEVOQUJM
RShEQVRBQkFTRSkKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNv
ZGU7Ci0KIGNsYXNzIERhdGFiYXNlU3luYzsKIGNsYXNzIFNRTFJlc3VsdFNldDsKIGNsYXNzIFNR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrOwogY2xhc3MgU1FMVmFsdWU7CitjbGFzcyBTUUxpdGVU
cmFuc2FjdGlvbjsKIGNsYXNzIFN0cmluZzsKIAogLy8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3Mg
c2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHVzZWQgb25seSBvbiB0aGUgd29ya2VyJ3MgY29udGV4dCB0
aHJlYWQuCkBAIC01NiwxMiArNTksMjAgQEAgcHVibGljOgogICAgIERhdGFiYXNlU3luYyogZGF0
YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CiAgICAgYm9vbCBpc1JlYWRPbmx5
KCkgY29uc3QgeyByZXR1cm4gbV9yZWFkT25seTsgfQogCisgICAgRXhjZXB0aW9uQ29kZSBiZWdp
bigpOworICAgIEV4Y2VwdGlvbkNvZGUgZXhlY3V0ZSgpOworICAgIEV4Y2VwdGlvbkNvZGUgY29t
bWl0KCk7CisgICAgdm9pZCByb2xsYmFjaygpOworCiBwcml2YXRlOgogICAgIFNRTFRyYW5zYWN0
aW9uU3luYyhEYXRhYmFzZVN5bmMqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrPiwgYm9vbCByZWFkT25seSk7CiAKICAgICBSZWZQdHI8RGF0YWJhc2VTeW5jPiBtX2RhdGFi
YXNlOwogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gbV9jYWxsYmFjazsK
ICAgICBib29sIG1fcmVhZE9ubHk7CisKKyAgICBib29sIG1fbW9kaWZpZWREYXRhYmFzZTsKKyAg
ICBPd25QdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25TeW5jLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25T
eW5jLmlkbAkocmV2aXNpb24gNjI5MTUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25TeW5jLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMiwyOCArMiwzMCBAQAogICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKIG1vZHVsZSBzdG9yYWdlIHsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvblN5bmNDYWxsYmFjay5oCShyZXZpc2lvbiA2MjkxNSkKKysrIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDI4ICsyLDMw
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqVHJhbnNh
Y3Rpb24KLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgogICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFja19oCkBAIC0zMiw3ICszNCw2IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQog
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsCShyZXZpc2lvbiA2MjkxNSkKKysrIFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTIsMjggKzIsMzAgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiBtb2R1bGUgc3RvcmFnZSB7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xp
ZW50Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA2MjkxNSkKKysrIFdlYkNvcmUvc3RvcmFnZS9jaHJv
bWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTggKzMxLDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNh
Y3Rpb25DbGllbnQuaCIKIAotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiQWJzdHJh
Y3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJE
YXRhYmFzZVRocmVhZC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiU1FMVHJh
bnNhY3Rpb24uaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBOb3Rp
ZnlEYXRhYmFzZUNoYW5nZWRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vdGlmeURhdGFiYXNlQ2hhbmdl
ZFRhc2s+IGNyZWF0ZShEYXRhYmFzZSAqZGF0YWJhc2UpCisgICAgc3RhdGljIFBhc3NPd25QdHI8
Tm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzaz4gY3JlYXRlKEFic3RyYWN0RGF0YWJhc2UgKmRhdGFi
YXNlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNr
KGRhdGFiYXNlKTsKICAgICB9CkBAIC01MywzNCArNTAsMzUgQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrKFBhc3NSZWZQdHI8RGF0YWJh
c2U+IGRhdGFiYXNlKQorICAgIE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2soUGFzc1JlZlB0cjxB
YnN0cmFjdERhdGFiYXNlPiBkYXRhYmFzZSkKICAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNl
KQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7CisgICAg
UmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IG1fZGF0YWJhc2U7CiB9OwogCi12b2lkIFNRTFRyYW5z
YWN0aW9uQ2xpZW50OjpkaWRDb21taXRUcmFuc2FjdGlvbihTUUxUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pCit2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRXcml0ZVRyYW5zYWN0
aW9uKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewotICAgIEFTU0VSVChjdXJyZW50VGhy
ZWFkKCkgPT0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7Ci0gICAgaWYgKCF0cmFuc2FjdGlv
bi0+aXNSZWFkT25seSgpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2s6
OmNyZWF0ZSh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSkpOworICAgIGlmICghZGF0YWJhc2UtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpIHsKKyAgICAgICAgZGF0
YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soTm90aWZ5RGF0YWJhc2VD
aGFuZ2VkVGFzazo6Y3JlYXRlKGRhdGFiYXNlKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisK
KyAgICBXZWJDb3JlOjpEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFzZU1vZGlmaWVkKGRhdGFiYXNl
KTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0YXRlbWVudChT
UUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50Ojpk
aWRFeGVjdXRlU3RhdGVtZW50KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewogICAgIC8v
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciBleGVjdXRpbmcgZXZlcnkgc3RhdGVtZW50IHRo
YXQgY2hhbmdlcyB0aGUgREIuCiAgICAgLy8gQ2hyb21pdW0gZG9lc24ndCBuZWVkIHRvIGRvIGFu
eXRoaW5nIGF0IHRoYXQgcG9pbnQuCi0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSB0cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRo
cmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKIH0KIAotYm9vbCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6
ZGlkRXhjZWVkUXVvdGEoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorYm9vbCBTUUxUcmFu
c2FjdGlvbkNsaWVudDo6ZGlkRXhjZWVkUXVvdGEoQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2Up
CiB7CiAgICAgLy8gQ2hyb21pdW0gZG9lcyBub3QgYWxsb3cgdXNlcnMgdG8gbWFudWFsbHkgY2hh
bmdlIHRoZSBxdW90YSBmb3IgYW4gb3JpZ2luIChmb3Igbm93LCBhdCBsZWFzdCkuCiAgICAgLy8g
RG9uJ3QgZG8gYW55dGhpbmcuCi0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NFUlQo
ZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjI5MTUpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5NCBAQAorMjAxMC0w
Ny0wOSAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBvcnRpbmcgYXMgbWFueSBhc3lu
YyBEQiB0ZXN0cyBhcyBwb3NzaWJsZSB0byBzeW5jIERCcy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNjA3CisKKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhh
bmRsZS1yZXVzZS1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9y
YWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5jLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2VtcHR5LXN0YXRlbWVudC1zeW5jLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVt
ZW50LXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhl
Y3V0ZS1zcWwtYXJncy1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93
b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0
ZW1lbnQtc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9z
dG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlv
bnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJl
bnQtaGFuZGxlcy1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRp
b24tY2FsbGJhY2stc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3Rv
cmFnZS9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtZW1wdHktdmVy
c2lvbi1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMtZXhwZWN0ZWQudHh0OiBDb3BpZWQgZnJvbSBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVj
dGVkLnR4dC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlu
cHV0cy1zeW5jLmh0bWw6IENvcGllZCBmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbC4KKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNl
LXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3Jr
ZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQ6IFJlbW92
ZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlu
cHV0cy5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4t
ZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hp
bGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNl
LXN5bmMuanM6IEFkZGVkLgorICAgICAgICAoY2F0Y2gpOgorICAgICAgICAqIGZhc3Qvd29ya2Vy
cy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1zeW5jLTEuanM6IEFkZGVkLgorICAg
ICAgICAoKToKKyAgICAgICAgKHRyeSk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
cmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMi5qczogQWRkZWQuCisgICAgICAgICogZmFz
dC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2VtcHR5LXN0YXRlbWVudC1zeW5jLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZS1zcWwt
YXJncy1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKHRocm93T25Ub1N0cmluZ09iamVjdC50b1N0
cmluZyk6CisgICAgICAgICh2YXIpOgorICAgICAgICAoKToKKyAgICAgICAgKHJ1blRyYW5zYWN0
aW9uVGVzdCk6CisgICAgICAgIChydW5UcmFuc2FjdGlvblRlc3RzKToKKyAgICAgICAgKiBmYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0
YXRlbWVudC1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKGV4ZWN1dGVTdGF0ZW1lbnQpOgorICAg
ICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlv
bnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5qczogQWRkZWQuCisgICAgICAgIChydW5UcmFu
c2FjdGlvbik6CisgICAgICAgICh2YXIpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtc3luYy5qczogQWRkZWQuCisgICAgICAg
IChjaGVja0NvbXBsZXRpb24pOgorICAgICAgICAocnVuVGVzdC5kYik6CisgICAgICAgIChydW5U
ZXN0KToKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMu
anM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVu
LWRhdGFiYXNlLWlucHV0cy1zeW5jLmpzOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcy4KKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zZXQt
ZW1wdHktdmVyc2lvbi1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3Rv
cmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qczogUmVtb3ZlZC4KKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS13aGls
ZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKG9wZW5U
ZXN0RGF0YWJhc2UpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9z
cWwtZGF0YS10eXBlcy1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKCk6CisgICAgICAgICh0ZXN0
REJWYWx1ZXMpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9zcWwt
ZXhjZXB0aW9uLWNvZGVzLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAodGVzdFRyYW5zYWN0aW9u
KToKKyAgICAgICAgKCk6CisgICAgICAgICh0ZXN0SW52YWxpZFN0YXRlbWVudCk6CisgICAgICAg
ICh0ZXN0SW5jb3JyZWN0TnVtYmVyT2ZCaW5kUGFyYW1ldGVycyk6CisgICAgICAgICh0ZXN0Qmlu
ZFBhcmFtZXRlck9mV3JvbmdUeXBlLmJhZFN0cmluZy50b1N0cmluZyk6CisgICAgICAgICh0ZXN0
QmluZFBhcmFtZXRlck9mV3JvbmdUeXBlKToKKyAgICAgICAgKHRlc3RWZXJzaW9uTWlzbWF0Y2gu
dGVzdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKHRlc3RWZXJzaW9uTWlzbWF0Y2gpOgorICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90ZXN0LWF1dGhvcml6ZXItc3luYy5q
czogQWRkZWQuCisgICAgICAgIChjbGVhbnVwKToKKyAgICAgICAgKGV4ZWN1dGVTdGF0ZW1lbnQp
OgorICAgICAgICAoY3JlYXRlVGFibGVDYWxsYmFjayk6CisgICAgICAgIChjcmVhdGVTdGF0ZW1l
bnRzQ2FsbGJhY2spOgorICAgICAgICAob3RoZXJTdGF0ZW1lbnRzQ2FsbGJhY2spOgorICAgICAg
ICAoZHJvcFN0YXRlbWVudHNDYWxsYmFjayk6CisgICAgICAgICh0ZXN0UmVhZFdyaXRlTW9kZSk6
CisgICAgICAgICh0ZXN0UmVhZE9ubHlNb2RlKToKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3Rv
cmFnZS9yZXNvdXJjZXMvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5qczogQWRkZWQu
CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlwZXMtc3luYy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRh
LXR5cGVzLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
c3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1h
dXRob3JpemVyLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3RyYW5zYWN0aW9uLWluLXRyYW5zYWN0aW9u
LXN5bmMuaHRtbDogQWRkZWQuCisKIDIwMTAtMDctMDkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1z
eW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVy
c2lvbi1oYW5kbGUtcmV1c2Utc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNSBAQAorVGVzdCB0aGF0IHRoZSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hh
bmdpbmcgaXRzIHZlcnNpb24uCitQQVNTOiBjaGFuZ2VWZXJzaW9uKCkgdHJhbnNhY3Rpb24gY2Fs
bGJhY2sgd2FzIGNhbGxlZC4KK1BBU1M6IE5vIGV4Y2VwdGlvbiB0aHJvd24gd2hpbGUgZXhlY3V0
aW5nIHN0YXRlbWVudHMuCitQQVNTOiBObyBleGNlcHRpb24gdGhyb3duIHdoaWxlIHJ1bm5pbmcg
YSB0cmFuc2FjdGlvbi4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
Y2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Ut
c3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVz
dC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCdyZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuanMnKSI+
CitUZXN0IHRoYXQgdGhlIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBp
dHMgdmVyc2lvbi4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1z
eW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhhdCB2ZXJzaW9u
IHVwZGF0ZXMgaW4gc3luYyBkYXRhYmFzZXMgd29yayBjb3JyZWN0bHkuCitQQVNTOiBkYi52ZXJz
aW9uIGlzIDMgYXMgZXhwZWN0ZWQuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5jLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1z
eW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNvbnNvbGUiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworZnVu
Y3Rpb24gZmluaXNoVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5j
dGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGlmICh3aW5k
b3cubG9jYXRpb24uc2VhcmNoID09ICI/MiIpIHsKKyAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBX
b3JrZXIoInJlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1zeW5jLTIuanMiKTsKKyAgICAgICAgd29y
a2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICBpZiAoZXZlbnQu
ZGF0YSA9PSAiZG9uZSIpCisgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGxvZyhldmVudC5kYXRhKTsKKyAgICAgICAgfTsKKyAg
ICB9IGVsc2UgeworICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3VyY2VzL2No
YW5nZS12ZXJzaW9uLXN5bmMtMS5qcyIpOworICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC5kYXRhID09ICJkb25lIikKKyAg
ICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHdpbmRvdy5sb2NhdGlvbiArICI/
MiI7CisgICAgICAgICAgICBlbHNlIGlmIChldmVudC5kYXRhID09ICJmYWlsIikKKyAgICAgICAg
ICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bG9nKGV2ZW50LmRhdGEpOworICAgICAgICB9OworICAgIH0KK30KKzwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorVGVzdCB0aGF0IHZlcnNpb24gdXBkYXRlcyBp
biBzeW5jIGRhdGFiYXNlcyB3b3JrIGNvcnJlY3RseS4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9w
cmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
ZW1wdHktc3RhdGVtZW50LXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQgQEAKK1RoaXMgdGVzdCB0cmllcyB0byBleGVjdXRlIGFuIGVtcHR5IHN0YXRlbWVudC4KK1BB
U1M6IHJlc3VsdCBpcyBudWxsCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL2VtcHR5LXN0YXRlbWVudC1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2VtcHR5LXN0YXRl
bWVudC1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL2VtcHR5LXN0
YXRlbWVudC1zeW5jLmpzJykiPgorVGhpcyB0ZXN0IHRyaWVzIHRvIGV4ZWN1dGUgYW4gZW1wdHkg
c3RhdGVtZW50LgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mt
c3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtc3lu
Yy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKK1Rlc3QgdmFyaW91
cyBpbnB1dHMgdG8gZXhlY3V0ZVNxbCgpLgorUEFTUzogZXhlY3V0ZVNxbCgiIikgZGlkIG5vdCB0
aHJvdyBhbiBleGNlcHRpb24uCitQQVNTOiBleGVjdXRlU3FsKCIiLCBudWxsKSBkaWQgbm90IHRo
cm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIHVuZGVmaW5lZCkgZGlkIG5v
dCB0aHJvdyBhbiBleGNlcHRpb24uCitQQVNTOiBleGVjdXRlU3FsKCIiLCBbXSkgZGlkIG5vdCB0
aHJvdyBhbiBleGNlcHRpb24uCitQQVNTOiBleGVjdXRlU3FsKCIiLCBbICJhcmcwIiBdKSBkaWQg
bm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIHsgfSkgZGlkIG5v
dCB0aHJvdyBhbiBleGNlcHRpb24uCitQQVNTOiBleGVjdXRlU3FsKCIiLCB7IGxlbmd0aDogMCB9
KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIHsgbGVu
Z3RoOiAxLCAwOiAiYXJnMCIgfSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uCitQQVNTOiBl
eGVjdXRlU3FsKCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0
ZVNxbChudWxsKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRl
U3FsKHVuZGVmaW5lZCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhl
Y3V0ZVNxbCgwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRl
U3FsKHRocm93T25Ub1N0cmluZ09iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVk
LgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgdGhyb3dPbkdldExlbmd0aE9iamVjdCkgdGhyZXcgYW4g
ZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgdGhyb3dPbkdldFpl
cm9PYmplY3QpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1M6IGV4ZWN1dGVT
cWwoIiIsIFsgdGhyb3dPblRvU3RyaW5nT2JqZWN0IF0pIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBl
eHBlY3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBl
eHBlY3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsICIiKSB0aHJldyBhbiBleGNlcHRpb24gYXMg
ZXhwZWN0ZWQuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1
dGUtc3FsLWFyZ3Mtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL2V4ZWN1dGUtc3FsLWFyZ3Mtc3lu
Yy5qcycpIj4KK1Rlc3QgdmFyaW91cyBpbnB1dHMgdG8gZXhlY3V0ZVNxbCgpLgorPHByZSBpZD0i
Y29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQt
c3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK1Rlc3QgdGhhdCBleGVjdXRlU3FsKCkgYWNj
ZXB0cyBvbmx5IG9uZSBzdGF0ZW1lbnQuCitQQVNTOiBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAo
MSkKK1BBU1M6IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgyKTsKK1BBU1M6ICAgIElOU0VSVCBJ
TlRPIFRlc3QgVkFMVUVTICgzKSAgICAKK1BBU1M6ICAgIElOU0VSVCBJTlRPIFRlc3QgVkFMVUVT
ICg0KTsgICAKK1BBU1M6IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg1KSAgIDsKK1BBU1M6IElO
U0VSVCBJTlRPIFRlc3QgVkFMVUVTICg2KTsgZ2FyYmFnZQorUEFTUzogSU5TRVJUIElOVE8gVGVz
dCBWQUxVRVMgKDcpOyBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoOCkKK1BBU1M6ICAgSU5TRVJU
IElOVE8gVGVzdCBWQUxVRVMgKDkpOyAgIElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgxMCk7ICAg
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNj
ZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0
ZW1lbnQtc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisK
Kzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5
LW9uZS1zdGF0ZW1lbnQtc3luYy5qcycpIj4KK1Rlc3QgdGhhdCBleGVjdXRlU3FsKCkgYWNjZXB0
cyBvbmx5IG9uZSBzdGF0ZW1lbnQuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvbXVsdGlw
bGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRy
YW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5z
YWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzIEBACitUZXN0IHRoYXQgZXhlY3V0aW5nIG11bHRpcGxlIHRyYW5zYWN0
aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBkYXRhYmFzZSBkb2Vzbid0IGNh
dXNlIGRlYWRsb2Nrcy4KK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBs
ZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rp
b25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1
dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0
KCdyZXNvdXJjZXMvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5
bmMuanMnKSI+CitUZXN0IHRoYXQgZXhlY3V0aW5nIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBk
aWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBkYXRhYmFzZSBkb2Vzbid0IGNhdXNlIGRlYWRs
b2Nrcy4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9u
LWNhbGxiYWNrLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKK1RoaXMgdGVzdCB0ZXN0cyBvcGVuRGF0YWJhc2VT
eW5jKCkncyBjcmVhdGlvbiBjYWxsYmFjay4KK1BBU1M6IENyZWF0aW9uIGNhbGxiYWNrIHdhcyBj
YWxsZWQuCitQQVNTOiBWZXJzaW9uIHNldCB0byBlbXB0eSBzdHJpbmcgYXMgZXhwZWN0ZWQuCitQ
QVNTOiBBbiBleGNlcHRpb24gd2FzIHRocm93biBhbmQgZGIxRmFpbCBpcyBudWxsIGFzIGV4cGVj
dGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFi
YXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5
bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90
ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9
InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMu
anMnKSI+CitUaGlzIHRlc3QgdGVzdHMgb3BlbkRhdGFiYXNlU3luYygpJ3MgY3JlYXRpb24gY2Fs
bGJhY2suCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12
ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzIEBACitUZXN0IHRoYXQgbm8gZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIHRo
ZSBkYXRhYmFzZSBpcyBvcGVuZWQgd2l0aCBhbiBlbXB0eSB2ZXJzaW9uLgorUEFTUworCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWVtcHR5LXZl
cnNpb24tc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWVtcHR5
LXZlcnNpb24tc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVu
LWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy5qcycpIj4KK1Rlc3QgdGhhdCBubyBleGNlcHRp
b24gaXMgdGhyb3duIHdoZW4gdGhlIGRhdGFiYXNlIGlzIG9wZW5lZCB3aXRoIGFuIGVtcHR5IHZl
cnNpb24uCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMt
c3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDYyMjMwKQkoZnJvbSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFi
YXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dDo2MjIzMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEgQEAKK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQg
b3BlbkRhdGFiYXNlU3luYygpIGFjY2VwdHMgb25seSB2YWxpZCBwYXJhbWV0ZXJzLgorUEFTUzog
U1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMgorUEFTUzogU1lOVEFYX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMgorUEFTUzogdW5kZWZpbmVkCitQQVNTOiB1bmRlZmluZWQKK1BBU1M6IHVuZGVmaW5l
ZAorUEFTUzogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcKK1BBU1M6IG9wZW5E
YXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuCitQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2Vl
ZGVkLgorUEFTUzogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNh
bGxiYWNrIHN1Y2NlZWRlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbAko
cmV2aXNpb24gNjIyMzApCShmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbDo2MjIzMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyIEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2Ut
c3luYy1pbnB1dHMuanMnKSI+CitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IG9wZW5EYXRhYmFz
ZVN5bmMoKSBhY2NlcHRzIG9ubHkgdmFsaWQgcGFyYW1ldGVycy4KKzxwcmUgaWQ9ImNvbnNvbGUi
PgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3lu
Yy5odG1sCShyZXZpc2lvbiA2MjIzMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNCw3
ICs0LDcgQEAKIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48
L3NjcmlwdD4KIDwvaGVhZD4KIAotPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Bl
bi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcycpIj4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVz
b3VyY2VzL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuanMnKSI+CiBUaGlzIHRlc3QgbWFrZXMg
c3VyZSB0aGF0IG9wZW5EYXRhYmFzZVN5bmMoKSBhY2NlcHRzIG9ubHkgdmFsaWQgcGFyYW1ldGVy
cy4KIDxwcmUgaWQ9ImNvbnNvbGUiPgogPC9wcmU+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNl
dC1lbXB0eS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMgQEAKK1RoaXMgdGVzdHMgdGhhdCBjYWxsaW5nIG9wZW5EYXRhYmFzZSB3aXRoIGFuIGVtcHR5
IHZlcnNpb24gc3RyaW5nIHNldHMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGF0IGRhdGFiYXNl
IHRvIHRoZSBlbXB0eSBzdHJpbmcgYW5kIHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8gb3BlbiB0aGUg
ZGF0YWJhc2Ugd2l0aCBhIGRpZmZlcmVudCBleHBlY3RlZCB2ZXJzaW9uIHRocm93IGFuIGV4Y2Vw
dGlvbi4KK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Bl
bi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVy
c2lvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkg
b25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lv
bi1zeW5jLmpzJykiPgorVGhpcyB0ZXN0cyB0aGF0IGNhbGxpbmcgb3BlbkRhdGFiYXNlIHdpdGgg
YW4gZW1wdHkgdmVyc2lvbiBzdHJpbmcgc2V0cyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoYXQg
ZGF0YWJhc2UgdG8gdGhlIGVtcHR5IHN0cmluZyBhbmQgc3Vic2VxdWVudCBhdHRlbXB0cyB0byBv
cGVuIHRoZSBkYXRhYmFzZSB3aXRoIGEgZGlmZmVyZW50IGV4cGVjdGVkIHZlcnNpb24gdGhyb3cg
YW4gZXhjZXB0aW9uLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
c3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA2MjkxNSkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4t
ZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEx
ICswLDAgQEAKLVRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgb3BlbkRhdGFiYXNlU3luYygpIGFj
Y2VwdHMgb25seSB2YWxpZCBwYXJhbWV0ZXJzLgotUEFTUzogU1lOVEFYX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMgotUEFTUzogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMgotUEFTUzogdW5kZWZp
bmVkCi1QQVNTOiB1bmRlZmluZWQKLVBBU1M6IHVuZGVmaW5lZAotUEFTUzogVFlQRV9NSVNNQVRD
SF9FUlI6IERPTSBFeGNlcHRpb24gMTcKLVBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVk
ZWQuCi1QQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLgotUEFTUzogY2FsbGluZyBv
cGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4KLQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5j
LWlucHV0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbAkocmV2aXNpb24gNjI5MTUpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRz
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIgKzAsMCBAQAotPCFkb2N0eXBlIGh0bWw+Ci08
aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24u
anMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNl
cy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzJykiPgotVGhpcyB0ZXN0IG1ha2VzIHN1cmUg
dGhhdCBvcGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlkIHBhcmFtZXRlcnMuCi08
cHJlIGlkPSJjb25zb2xlIj4KLTwvcHJlPgotPC9ib2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlv
bi1pbi1wcm9ncmVzcy1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWlu
LXByb2dyZXNzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1w
cm9ncmVzcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitU
ZXN0IHRoYXQgYSBzZWNvbmQgaGFuZGxlIHRvIHRoZSBzYW1lIGRhdGFiYXNlIGNhbiBiZSBvcGVu
ZWQgaW5zaWRlIGEgdHJhbnNhY3Rpb24gcnVubmluZyBvbiB0aGUgZmlyc3QgaGFuZGxlLgorUEFT
Uzogc2Vjb25kIGhhbmRsZSBvcGVuZWQgc3VjY2Vzc2Z1bGx5LgorCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWlu
LXByb2dyZXNzLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5
bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5z
YWN0aW9uLWluLXByb2dyZXNzLXN5bmMuanMnKSI+CitUZXN0IHRoYXQgYSBzZWNvbmQgaGFuZGxl
IHRvIHRoZSBzYW1lIGRhdGFiYXNlIGNhbiBiZSBvcGVuZWQgaW5zaWRlIGEgdHJhbnNhY3Rpb24g
cnVubmluZyBvbiB0aGUgZmlyc3QgaGFuZGxlLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3NxbC1kYXRhLXR5cGVzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRh
dGEtdHlwZXMtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAor
VGVzdCB0aGF0IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgREIgcXVlcmllcyBhcmUgb2YgdGhlIHNh
bWUgdHlwZSBhcyB0aGUgdmFsdWVzIGluc2VydGVkIGluIHRoZSBkYXRhYmFzZS4KK1BBU1M6IHBy
b3BlcnR5ICd0aW1lc3RhbXAnIE9LLCB0eXBlIHdhcyBudW1iZXIKK1BBU1M6IHByb3BlcnR5ICdp
ZCcgT0ssIHR5cGUgd2FzIG51bWJlcgorUEFTUzogcHJvcGVydHkgJ3JlYWwnIE9LLCB0eXBlIHdh
cyBudW1iZXIKK1BBU1M6IHByb3BlcnR5ICd0ZXh0JyBPSywgdHlwZSB3YXMgc3RyaW5nCitQQVNT
OiBwcm9wZXJ0eSAnYmxvYicgT0ssIHR5cGUgd2FzIHN0cmluZworCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlwZXMtc3lu
Yy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
c3FsLWRhdGEtdHlwZXMtc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24u
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNl
cy9zcWwtZGF0YS10eXBlcy1zeW5jLmpzJykiPgorVGVzdCB0aGF0IHRoZSB2YWx1ZXMgcmV0dXJu
ZWQgYnkgREIgcXVlcmllcyBhcmUgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgdmFsdWVzIGluc2Vy
dGVkIGluIHRoZSBkYXRhYmFzZS4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhj
ZXB0aW9uLWNvZGVzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwt
ZXhjZXB0aW9uLWNvZGVzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDkgQEAKK1Rlc3QgdGhhdCB0aGUgY29ycmVjdCBleGNlcHRpb25zIGFyZSB0aHJvd24gaW4gZXhj
ZXB0aW9uYWwgc2l0dWF0aW9ucy4KK1BBU1M6IGV4cGVjdGVkIGFuZCBnb3QgZXJyb3IgY29kZSBV
TktOT1dOX0VSUgorUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFNZTlRBWF9FUlIK
K1BBU1M6IGV4cGVjdGVkIGFuZCBnb3QgZXJyb3IgY29kZSBTWU5UQVhfRVJSCitQQVNTOiBleHBl
Y3RlZCBhbmQgZ290IGVycm9yIGNvZGUgVU5LTk9XTl9FUlIKK1BBU1M6IGV4cGVjdGVkIGFuZCBn
b3QgZXJyb3IgY29kZSBRVU9UQV9FUlIKK1BBU1M6IFRyYW5zYWN0aW9uIHdhcyByb2xsZWQgYmFj
ayBieSBTUUxpdGUgYXMgZXhwZWN0ZWQuCitQQVNTOiBleHBlY3RlZCBhbmQgZ290IGVycm9yIGNv
ZGUgVkVSU0lPTl9FUlIKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
c3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9u
LWNvZGVzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvc3FsLWV4
Y2VwdGlvbi1jb2Rlcy1zeW5jLmpzJykiPgorVGVzdCB0aGF0IHRoZSBjb3JyZWN0IGV4Y2VwdGlv
bnMgYXJlIHRocm93biBpbiBleGNlcHRpb25hbCBzaXR1YXRpb25zLgorPHByZSBpZD0iY29uc29s
ZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3lu
Yy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzEgQEAKK1Rlc3QgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuCitCZWdpbm5pbmcg
d3JpdGUgdHJhbnNhY3Rpb246CitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVk
ZWQuCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JF
QVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9U
UklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0
ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVk
ZWQuCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVB
VEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NR
TElURV9SRUFEIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfU0VMRUNUIHN0YXRlbWVudCBz
dWNjZWVkZWQuCitTUUxJVEVfREVMRVRFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfSU5T
RVJUIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfVVBEQVRFIHN0YXRlbWVudCBzdWNjZWVk
ZWQuCitTUUxJVEVfUFJBR01BIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9u
XSAoNSkKK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0FM
VEVSX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfVFJBTlNBQ1RJT04gc3RhdGVt
ZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0FUVEFDSCBzdGF0
ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfREVUQUNIIHN0
YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9SRUlOREVY
IHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQU5BTFlaRSBzdGF0ZW1lbnQgZmFpbGVkOiBb
b2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9JTkRFWCBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FM
SVRFX0RST1BfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9U
RU1QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RSSUdHRVIgc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NR
TElURV9EUk9QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitXcml0ZSB0cmFuc2FjdGlvbiBz
dWNjZWVkZWQuCisKK0JlZ2lubmluZyByZWFkIHRyYW5zYWN0aW9uczoKK1NRTElURV9DUkVBVEVf
VEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRF
X0NSRUFURV9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9JTkRFWCBz
dGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRF
X1RFTVBfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQor
U1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxF
eGNlcHRpb25dICg1KQorU1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDog
W29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVu
dCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9DUkVBVEVfVklFVyBz
dGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRF
X1ZUQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJ
VEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBf
VEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHN0
YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJ
VEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVlRBQkxF
IHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9SRUFE
IHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfU0VMRUNUIHN0YXRlbWVudCBzdWNjZWVkZWQu
CitTUUxJVEVfREVMRVRFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAo
NSkKK1NRTElURV9JTlNFUlQgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25d
ICg1KQorU1FMSVRFX1VQREFURSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlv
bl0gKDUpCitTUUxJVEVfUFJBR01BIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0
aW9uXSAoNSkKK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNR
TEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29i
amVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX1RSQU5TQUNUSU9OIHN0YXRlbWVudCBmYWls
ZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9BVFRBQ0ggc3RhdGVtZW50IGZh
aWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RFVEFDSCBzdGF0ZW1lbnQg
ZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfUkVJTkRFWCBzdGF0ZW1l
bnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQU5BTFlaRSBzdGF0
ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9JTkRF
WCBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJP
UF9URU1QX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkK
K1NRTElURV9EUk9QX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4
Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9URU1QX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogW29i
amVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RST1BfVFJJR0dFUiBzdGF0ZW1lbnQgZmFp
bGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9WSUVXIHN0YXRlbWVu
dCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9QX1RBQkxFIHN0
YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1JlYWQgdHJhbnNhY3Rp
b25zIHN1Y2NlZWRlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
dGVzdC1hdXRob3JpemVyLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvdGVzdC1hdXRob3JpemVyLXN5
bmMuanMnKSI+CitUZXN0IHRoZSBkYXRhYmFzZSBhdXRob3JpemVyLgorPHByZSBpZD0iY29uc29s
ZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3RyYW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3RyYW5zYWN0
aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24t
c3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCB0aGF0
IHRyeWluZyB0byBydW4gYSB0cmFuc2FjdGlvbiBpbnNpZGUgYW5vdGhlciB0cmFuc2FjdGlvbiB0
aHJvd3MgYW4gZXhjZXB0aW9uLgorUEFTUzogRXhjZXB0aW9uIHRocm93biB3aGlsZSB0cnlpbmcg
dG8gcnVuIGEgbmVzdGVkIHRyYW5zYWN0aW9uLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdHJhbnNhY3Rpb24taW4t
dHJhbnNhY3Rpb24tc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9k
eSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1z
eW5jLmpzJykiPgorVGVzdCB0aGF0IHRyeWluZyB0byBydW4gYSB0cmFuc2FjdGlvbiBpbnNpZGUg
YW5vdGhlciB0cmFuc2FjdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uLgorPHByZSBpZD0iY29uc29s
ZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJj
ZXMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24t
aGFuZGxlLXJldXNlLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK3ZhciBk
YiA9IG51bGw7Cit0cnkgeworICAgIHZhciBkYk5hbWUgPSAiQ2hhbmdlVmVyc2lvbkhhbmRsZVJl
dXNlVGVzdCIgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgIGRiID0gb3BlbkRhdGFiYXNl
U3luYyhkYk5hbWUsICIiLCAiVGVzdCB0aGF0IHRoZSBEQiBoYW5kbGUgaXMgdmFsaWQgYWZ0ZXIg
Y2hhbmdpbmcgdGhlIHZlcnNpb24uIiwgMSk7CisgICAgdmFyIHZlcnNpb24gPSBkYi52ZXJzaW9u
OworICAgIHZhciBuZXdWZXJzaW9uID0gdmVyc2lvbiA/IChwYXJzZUludCh2ZXJzaW9uKSArIDEp
LnRvU3RyaW5nKCkgOiAiMSI7CisgICAgZGIuY2hhbmdlVmVyc2lvbih2ZXJzaW9uLCBuZXdWZXJz
aW9uLCBmdW5jdGlvbih0eCkgeworICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2hhbmdlVmVy
c2lvbigpIHRyYW5zYWN0aW9uIGNhbGxiYWNrIHdhcyBjYWxsZWQuIik7CisgICAgfSk7Cit9IGNh
dGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogY2hhbmdlVmVyc2lvbigpIHRocmV3
IGFuIGV4Y2VwdGlvbjogIiArIGVycik7Cit9CisKK3RyeSB7CisgICAgZGIudHJhbnNhY3Rpb24o
ZnVuY3Rpb24odHgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwo
IkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBJTlQpIik7CisgICAgICAgICAg
ICB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgKiBmcm9tIFRlc3QiKTsKKyAgICAgICAgICAgIHBvc3RN
ZXNzYWdlKCJQQVNTOiBObyBleGNlcHRpb24gdGhyb3duIHdoaWxlIGV4ZWN1dGluZyBzdGF0ZW1l
bnRzLiIpOworICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiBBbiBleGNlcHRpb24gd2FzIHRocm93biB3aGlsZSBleGVjdXRpbmcgc3RhdGVtZW50
czogIiArIGVycik7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzog
Tm8gZXhjZXB0aW9uIHRocm93biB3aGlsZSBydW5uaW5nIGEgdHJhbnNhY3Rpb24uIik7Cit9IGNh
dGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogQW4gZXhjZXB0aW9uIHdhcyB0aHJv
d24gd2hpbGUgcnVubmluZyBhIHRyYW5zYWN0aW9uOiAiICsgZXJyKTsKK30KKworcG9zdE1lc3Nh
Z2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9jaGFuZ2UtdmVyc2lvbi1zeW5jLTEuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMS5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9jaGFuZ2UtdmVyc2lvbi1zeW5jLTEuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAK
K3ZhciBFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX0hJWElFX1RFU1QgPSAiMiI7Cit2YXIgRVhQRUNU
RURfVkVSU0lPTl9BRlRFUl9SRUxPQUQgPSAiMyI7CisKK2Z1bmN0aW9uIGVtcHR5RnVuY3Rpb24o
KSB7IH0KKwordmFyIGRiMSA9IG9wZW5EYXRhYmFzZVN5bmMoIkNoYW5nZVZlcnNpb25UZXN0Iiwg
IjEiLCAiVGVzdCBmb3IgdGhlIGRhdGFiYXNlLmNoYW5nZVZlcnNpb24oKSBmdW5jdGlvbiIsIDEp
OwordmFyIGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoIkNoYW5nZVZlcnNpb25UZXN0IiwgIjEiLCAi
VGVzdCBmb3IgdGhlIGRhdGFiYXNlLmNoYW5nZVZlcnNpb24oKSBmdW5jdGlvbiIsIDEpOworCisv
LyBGaXJzdCBydW4gSGl4aWUncyB0ZXN0IHRvIGVuc3VyZSBiYXNpYyBjaGFuZ2VWZXJzaW9uKCkg
ZnVuY3Rpb25hbGl0eSB3b3JrcyAoc2VlIGJ1ZyAyODQxOCkuCitkYjEuY2hhbmdlVmVyc2lvbigi
MSIsIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfSElYSUVfVEVTVCwgZW1wdHlGdW5jdGlvbik7Citp
ZiAoZGIyLnZlcnNpb24gIT0gZGIxLnZlcnNpb24pIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDog
Y2hhbmdpbmcgZGIxJ3MgdmVyc2lvbiAoIiArIGRiMS52ZXJzaW9uICsgIikgZGlkIG5vdCBjaGFu
Z2UgZGIyJ3MgdmVyc2lvbiAoIiArIGRiMi52ZXJzaW9uICsgIikgYXMgZXhwZWN0ZWQuIik7Cisg
ICAgcG9zdE1lc3NhZ2UoImZhaWwiKTsKK30gZWxzZQorICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBj
aGFuZ2luZyBkYjEncyB2ZXJzaW9uICgiICsgZGIxLnZlcnNpb24gKyAiKSBjaGFuZ2VkIGRiMidz
IHZlcnNpb24gdG9vLiIpOworCitkYjIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICB0
cnkgeworICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBU
ZXN0IChGb28gSU5UKSIpOworICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogVGhlIERCIHZlcnNp
b24gY2hhbmdlZCwgZXhlY3V0aW5nIGFueSBzdGF0ZW1lbnQgb24gZGIyIHNob3VsZCBmYWlsLiIp
OworICAgICAgICBwb3N0TWVzc2FnZSgiZmFpbCIpOworICAgIH0gY2F0Y2goZXJyKSB7CisgICAg
ICBwb3N0TWVzc2FnZSgiUEFTUzogRXhlY3V0aW5nIGEgc3RhdGVtZW50IG9uIGRiMiB0aHJldyBh
biBleGNlcHRpb24gYXMgZXhwZWN0ZWQuIik7CisgICAgfQorfSk7CisKKy8vIE1ha2Ugc3VyZSBh
bnkgbmV3IGhhbmRsZSB0byB0aGUgc2FtZSBEQiBzZWVzIHRoZSBuZXcgdmVyc2lvbgordHJ5IHsK
KyAgICB2YXIgZGIzID0gb3BlbkRhdGFiYXNlU3luYygiQ2hhbmdlVmVyc2lvblRlc3QiLCBFWFBF
Q1RFRF9WRVJTSU9OX0FGVEVSX0hJWElFX1RFU1QsICIiLCAxKTsKKyAgICBwb3N0TWVzc2FnZSgi
UEFTUzogU3VjY2Vzc2Z1bGx5IG9wZW5lZCBhIG5ldyBEQiBoYW5kbGUuIik7Cit9IGNhdGNoIChl
cnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogVW5leHBlY3RlZCBleGNlcHRpb24gdGhyb3du
IHdoaWxlIHRyeWluZyB0byBvcGVuIGEgbmV3IERCIGhhbmRsZTogIiArIGVycik7CisgICAgcG9z
dE1lc3NhZ2UoImZhaWwiKTsKK30KKworaWYgKGRiMS52ZXJzaW9uICE9IGRiMy52ZXJzaW9uKSB7
CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGRiMS52ZXJzaW9uICgiICsgZGIxLnZlcnNpb24gKyAi
KSBkb2VzIG5vdCBtYXRjaCBkYjMudmVyc2lvbigiICsgZGIzLnZlcnNpb24gKyIpIik7CisgICAg
cG9zdE1lc3NhZ2UoImZhaWwiKTsKK30gZWxzZQorICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBkYjEu
dmVyc2lvbiAoIiArIGRiMS52ZXJzaW9uICsgIikgbWF0Y2hlcyBkYjMudmVyc2lvbi4iKTsKKwor
Ly8gTm93IHRyeSBhIHRlc3QgdG8gZW5zdXJlIHRoZSB2ZXJzaW9uIHBlcnNpc3RzIGFmdGVyIHJl
bG9hZGluZyAoc2VlIGJ1ZyAyNzgzNikKK2RiMS5jaGFuZ2VWZXJzaW9uKEVYUEVDVEVEX1ZFUlNJ
T05fQUZURVJfSElYSUVfVEVTVCwgRVhQRUNURURfVkVSU0lPTl9BRlRFUl9SRUxPQUQsCisgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgICAgICAgIHR4LmV4
ZWN1dGVTcWwoIkRST1AgVEFCTEUgSUYgRVhJU1RTIEluZm8iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJbmZvIChWZXJz
aW9uIElOVEVHRVIpIik7CisgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiSU5T
RVJUIElOVE8gSW5mbyBWQUxVRVMgKD8pIiwgW0VYUEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FE
XSk7CisgICAgICAgICAgICAgICAgICB9KTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lv
bi1zeW5jLTIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMi5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1z
eW5jLTIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK3ZhciBFWFBFQ1RFRF9WRVJT
SU9OX0FGVEVSX1JFTE9BRCA9ICczJzsKKwordmFyIGRiID0gb3BlbkRhdGFiYXNlU3luYygiQ2hh
bmdlVmVyc2lvblRlc3QiLCAiIiwgIlRlc3QgdGhlIGNoYW5nZVZlcnNpb24oKSBmdW5jdGlvbi4i
LCAxKTsKK2lmIChkYi52ZXJzaW9uID09IEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FEKQor
ICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBkYi52ZXJzaW9uIGlzICIgKyBFWFBFQ1RFRF9WRVJTSU9O
X0FGVEVSX1JFTE9BRCArICIgYXMgZXhwZWN0ZWQuIik7CitlbHNlCisgICAgcG9zdE1lc3NhZ2Uo
IkZBSUw6IGRiLnZlcnNpb24gaXMgIiArIGRiLnZlcnNpb24gKyAiOyBleHBlY3RlZCAiICsgRVhQ
RUNURURfVkVSU0lPTl9BRlRFUl9SRUxPQUQpOworCisvLyBSZXNldCB0aGUgdmVyc2lvbjsgb3Ro
ZXJ3aXNlIHRoaXMgdGVzdCB3aWxsIGZhaWwgdGhlIG5leHQgdGltZSBpdCdzIHJ1bgorZGIuY2hh
bmdlVmVyc2lvbihkYi52ZXJzaW9uLCAiMSIsIGZ1bmN0aW9uKHR4KSB7IH0pOworCitwb3N0TWVz
c2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVz
b3VyY2VzL2VtcHR5LXN0YXRlbWVudC1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9lbXB0eS1zdGF0ZW1lbnQtc3luYy5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9lbXB0eS1zdGF0ZW1lbnQtc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAor
dHJ5IHsKKyAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJFbXB0eVN0YXRlbWVudFN5bmMi
LCAiMS4wIiwgIlRlc3QgYW4gZW1wdHkgc3RhdGVtZW50LiIsIDEpOworICAgIGRiLnRyYW5zYWN0
aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgIHZhciByZXN1bHQgPSB0eC5leGVjdXRlU3FsKCIi
KTsKKyAgICAgICAgcG9zdE1lc3NhZ2UocmVzdWx0ID8gIkZBSUw6IHJlc3VsdCBpcyBub3QgbnVs
bCIgOiAiUEFTUzogcmVzdWx0IGlzIG51bGwiKTsKKyAgICB9KTsKKyAgICBwb3N0TWVzc2FnZSgi
UEFTUyIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUwiKTsKK30KKwor
cG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL3Jlc291cmNlcy9leGVjdXRlLXNxbC1hcmdzLXN5bmMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGUtc3FsLWFyZ3Mt
c3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy9leGVjdXRlLXNxbC1hcmdzLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzAgQEAKK3ZhciB0aHJvd09uVG9TdHJpbmdPYmplY3QgPSB7IH07Cit0aHJvd09uVG9TdHJp
bmdPYmplY3QudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgY2FsbCB0b1N0
cmluZyBvbiB0aGlzIG9iamVjdC4iIH07CisKK3ZhciB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0ID0g
eyB9OwordGhyb3dPbkdldExlbmd0aE9iamVjdC5fX2RlZmluZUdldHRlcl9fKCJsZW5ndGgiLCBm
dW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgZ2V0IGxlbmd0aCBvZiB0aGlzIG9iamVjdC4iOyB9
KTsKKwordmFyIHRocm93T25HZXRaZXJvT2JqZWN0ID0geyBsZW5ndGg6IDEgfTsKK3Rocm93T25H
ZXRaZXJvT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18oIjAiLCBmdW5jdGlvbiAoKSB7IHRocm93ICJD
YW5ub3QgZ2V0IDAgcHJvcGVydHkgb2YgdGhpcyBvYmplY3QuIjsgfSk7CisKK3ZhciBleHBlY3RO
b0V4Y2VwdGlvbiA9IFsKKyAgICAnIiInLAorICAgICciIiwgbnVsbCcsCisgICAgJyIiLCB1bmRl
ZmluZWQnLAorICAgICciIiwgW10nLAorICAgICciIiwgWyAiYXJnMCIgXScsCisgICAgJyIiLCB7
IH0nLAorICAgICciIiwgeyBsZW5ndGg6IDAgfScsCisgICAgJyIiLCB7IGxlbmd0aDogMSwgMDog
ImFyZzAiIH0nLAorXTsKKwordmFyIGV4cGVjdEV4Y2VwdGlvbiA9IFsKKyAgICAnJywKKyAgICAn
bnVsbCcsCisgICAgJ3VuZGVmaW5lZCcsCisgICAgJzAnLAorICAgICd0aHJvd09uVG9TdHJpbmdP
YmplY3QnLAorICAgICciIiwgdGhyb3dPbkdldExlbmd0aE9iamVjdCcsCisgICAgJyIiLCB0aHJv
d09uR2V0WmVyb09iamVjdCcsCisgICAgJyIiLCBbIHRocm93T25Ub1N0cmluZ09iamVjdCBdJywK
KyAgICAnIiIsIDAnLAorICAgICciIiwgIiInLAorXTsKKworZnVuY3Rpb24gdHJ5RXhlY3V0ZVNx
bCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCkKK3sKKyAgICB0cnkgeworICAgICAgICBldmFs
KCd0cmFuc2FjdGlvbi5leGVjdXRlU3FsKCcgKyBwYXJhbWV0ZXJMaXN0ICsgJyknKTsKKyAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgICAgIHJldHVy
biBleGNlcHRpb247CisgICAgfQorfQorCitmdW5jdGlvbiBydW5UcmFuc2FjdGlvblRlc3QodHJh
bnNhY3Rpb24sIHBhcmFtZXRlckxpc3QsIGV4cGVjdEV4Y2VwdGlvbikKK3sKKyAgICB2YXIgZXhj
ZXB0aW9uID0gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCk7CisgICAg
aWYgKGV4cGVjdEV4Y2VwdGlvbikgeworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAg
ICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSB0
aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuIik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikg
ZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KGV4Y2VwdGlvbikKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBleGVjdXRlU3FsKCIg
KyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgZXhjZXB0aW9uKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGV4ZWN1dGVTcWwo
IiArIHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIHJ1blRyYW5zYWN0aW9uVGVzdHModHJhbnNhY3Rpb24pCit7Cisg
ICAgZm9yIChpIGluIGV4cGVjdE5vRXhjZXB0aW9uKQorICAgICAgICBydW5UcmFuc2FjdGlvblRl
c3QodHJhbnNhY3Rpb24sIGV4cGVjdE5vRXhjZXB0aW9uW2ldLCBmYWxzZSk7CisgICAgZm9yIChp
IGluIGV4cGVjdEV4Y2VwdGlvbikKKyAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0
aW9uLCBleHBlY3RFeGNlcHRpb25baV0sIHRydWUpOworfQorCit2YXIgZGIgPSBvcGVuRGF0YWJh
c2VTeW5jKCJFeGVjdXRlU1FMQXJnc1Rlc3QiLCAiMS4wIiwgIlRlc3Qgb2YgaGFuZGxpbmcgb2Yg
dGhlIGFyZ3VtZW50cyB0byBTUUxUcmFuc2FjdGlvblN5bmMuZXhlY3V0ZVNxbCIsIDEpOworZGIu
dHJhbnNhY3Rpb24ocnVuVHJhbnNhY3Rpb25UZXN0cyk7Citwb3N0TWVzc2FnZSgiZG9uZSIpOwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGVz
cWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZXNxbC1hY2NlcHRz
LW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9u
ZS1zdGF0ZW1lbnQtc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorZnVuY3Rp
b24gZXhlY3V0ZVN0YXRlbWVudCh0eCwgZXhwZWN0ZWRUb1Bhc3MsIHN0YXRlbWVudCkKK3sKKyAg
ICB0cnkgeworICAgICAgICB0eC5leGVjdXRlU3FsKHN0YXRlbWVudCk7CisgICAgICAgIHBvc3RN
ZXNzYWdlKGV4cGVjdGVkVG9QYXNzID8gIlBBU1M6ICIgKyBzdGF0ZW1lbnQgOiAiRkFJTDogIiAr
IHN0YXRlbWVudCk7CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCFl
eHBlY3RlZFRvUGFzcyA/ICJQQVNTOiAiICsgc3RhdGVtZW50IDogIkZBSUw6ICIgKyBzdGF0ZW1l
bnQpOworICAgIH0KK30KKwordmFyIGRiID0gb3BlbkRhdGFiYXNlU3luYygiRXhlY3V0ZVNRTEFj
Y2VwdHNPbmx5T25lU3RhdGVtZW50VGVzdCIsICIxLjAiLCAiIiwgMSk7CitkYi50cmFuc2FjdGlv
bihmdW5jdGlvbih0eCkgeworICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIFRlc3QgKEZvbyBJTlQpIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgdHJ1ZSwg
IklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgxKSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
IHRydWUsICJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMik7Iik7CisgICAgZXhlY3V0ZVN0YXRl
bWVudCh0eCwgdHJ1ZSwgIiAgIElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgzKSAgICAiKTsKKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCB0cnVlLCAiICAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMg
KDQpOyAgICIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIHRydWUsICJJTlNFUlQgSU5UTyBU
ZXN0IFZBTFVFUyAoNSkgICA7Iik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgZmFsc2UsICJJ
TlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoNik7IGdhcmJhZ2UiKTsKKyAgICBleGVjdXRlU3RhdGVt
ZW50KHR4LCBmYWxzZSwgIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg3KTsgSU5TRVJUIElOVE8g
VGVzdCBWQUxVRVMgKDgpIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgZmFsc2UsICIgIElO
U0VSVCBJTlRPIFRlc3QgVkFMVUVTICg5KTsgICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMTAp
OyAgICIpOworfSk7Citwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZm
ZXJlbnQtaGFuZGxlcy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50
LWhhbmRsZXMtc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhh
bmRsZXMtc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorZnVuY3Rpb24gcnVu
VHJhbnNhY3Rpb24oZGIpCit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAg
ICAgICAvLyBFeGVjdXRlIGEgcmVhZC1vbmx5IHN0YXRlbWVudAorICAgICAgIHR4LmV4ZWN1dGVT
cWwoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7Iik7CisKKyAgICAgICAvLyBFeGVjdXRlIGEg
d3JpdGUgc3RhdGVtZW50IHRvIG1ha2Ugc3VyZSBTUUxpdGUgdHJpZXMgdG8gYWNxdWlyZSBhbiBl
eGNsdXNpdmUgbG9jayBvbiB0aGUgREIgZmlsZQorICAgICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VS
VCBJTlRPIFRlc3QgVkFMVUVTICg/KTsiLCBbMV0pOworICAgIH0pOworfQorCit2YXIgZGIxID0g
b3BlbkRhdGFiYXNlU3luYygiTXVsdGlwbGVUcmFuc2FjdGlvbnNPbkRpZmZlcmVudEhhbmRsZXNU
ZXN0IiwgIjEuMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdCB0cmFuc2FjdGlv
bnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhlIHNhbWUgREIuIiwgMSk7CitkYjEudHJhbnNh
Y3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYg
Tk9UIEVYSVNUUyBUZXN0IChGb28gaW50KTsiKTsKK30pOworCit2YXIgZGIyID0gb3BlbkRhdGFi
YXNlU3luYygiTXVsdGlwbGVUcmFuc2FjdGlvbnNPbkRpZmZlcmVudEhhbmRsZXNUZXN0IiwgIjEu
MCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdCB0cmFuc2FjdGlvbnMgb24gZGlm
ZmVyZW50IGhhbmRsZXMgdG8gdGhlIHNhbWUgREIuIiwgMSk7CitpZiAoZGIxID09IGRiMikKKyAg
ICBwb3N0TWVzc2FnZSgiRkFJTDogZGIxID09IGRiMiIpOworZWxzZSB7CisgICAgdHJ5IHsKKyAg
ICAgICAgcnVuVHJhbnNhY3Rpb24oZGIxKTsKKyAgICAgICAgcnVuVHJhbnNhY3Rpb24oZGIyKTsK
KyAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1MiKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAg
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIpOworICAgIH0KK30KKworcG9zdE1lc3NhZ2Uo
ImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLXN5
bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9y
ZXNvdXJjZXMvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzIgQEAKK3ZhciBjb21wbGV0ZSA9IDA7CisKK2Z1bmN0aW9uIGNoZWNrQ29tcGxldGlv
bigpCit7CisgICAgaWYgKCsrY29tcGxldGUgPT0gMiAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKwor
ZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgdmFyIGRiID0gb3BlbkRhdGFiYXNlV2l0aFN1ZmZp
eCgiTXVsdGlwbGVUcmFuc2FjdGlvbnNUZXN0IiwgIjEuMCIsICJUZXN0IHRvIG1ha2Ugc3VyZSBt
dWx0aXBsZSB0cmFuc2FjdGlvbnMgY2FuIGJlIHF1ZXVlZCBhdCBvbmNlIGZvciBhbiBIVE1MNSBk
YXRhYmFzZSIsIDMyNzY4KTsKKworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7Cisg
ICAgICAgIGxvZygiVHJhbnNhY3Rpb24gMSBTdGFydGVkIik7CisgICAgfSwgZnVuY3Rpb24oZXJy
KSB7CisgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gMSBFcnJvcmVkIC0gIiArIGVycik7CisgICAg
ICAgIGNoZWNrQ29tcGxldGlvbigpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBsb2co
IlRyYW5zYWN0aW9uIDEgU3VjY2VlZGVkIik7CisgICAgICAgIGNoZWNrQ29tcGxldGlvbigpOwor
ICAgIH0pOworCisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgbG9n
KCJUcmFuc2FjdGlvbiAyIFN0YXJ0ZWQiKTsKKyAgICB9LCBmdW5jdGlvbihlcnIpIHsKKyAgICAg
ICAgbG9nKCJUcmFuc2FjdGlvbiAyIEVycm9yZWQgLSAiICsgZXJyKTsKKyAgICAgICAgY2hlY2tD
b21wbGV0aW9uKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygiVHJhbnNhY3Rp
b24gMiBTdWNjZWVkZWQiKTsKKyAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgfSk7Cit9
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1k
YXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9u
LWNhbGxiYWNrLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5j
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACit2YXIgY3JlYXRpb25DYWxsYmFja0Nh
bGxlZDEgPSBmYWxzZTsKK3ZhciBkYjFOYW1lID0gIk9wZW5EYXRhYmFzZUNyZWF0aW9uQ2FsbGJh
Y2sxIiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7Cit2YXIgZGIyTmFtZSA9ICJPcGVuRGF0YWJh
c2VDcmVhdGlvbkNhbGxiYWNrMiIgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpOwordmFyIGRiMSA9
IG9wZW5EYXRhYmFzZVN5bmMoZGIxTmFtZSwgIjEuMCIsICIiLCAxLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24oZGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwb3N0TWVzc2FnZSgiUEFTUzogQ3JlYXRpb24gY2FsbGJhY2sgd2FzIGNhbGxlZC4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGIudmVyc2lvbiAhPSAiIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IFdyb25nIHZl
cnNpb24gIiArIGRiLnZlcnNpb24gKyAiOyBlbXB0eSBzdHJpbmcgZXhwZWN0ZWQuIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogVmVyc2lvbiBzZXQgdG8gZW1wdHkgc3RyaW5n
IGFzIGV4cGVjdGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisKK3ZhciBk
YjFGYWlsID0gbnVsbDsKK3RyeSB7CisgICAgZGIxRmFpbCA9IG9wZW5EYXRhYmFzZVN5bmMoZGIx
TmFtZSwgIjEuMCIsICIiLCAxKTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogQW4gSU5WQUxJRF9T
VEFURV9FUlIgZXhjZXB0aW9uIHNob3VsZCd2ZSBiZWVuIHRocm93bi4iKTsKK30gY2F0Y2goZXJy
KSB7CisgICAgaWYgKGRiMUZhaWwpCisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBkYjFGYWls
IHNob3VsZCBoYXZlIGJlZW4gbnVsbC4iKTsKKyAgICBlbHNlCisgICAgICAgIHBvc3RNZXNzYWdl
KCJQQVNTOiBBbiBleGNlcHRpb24gd2FzIHRocm93biBhbmQgZGIxRmFpbCBpcyBudWxsIGFzIGV4
cGVjdGVkLiIpOworfQorCisvLyBPcGVuIGEgaGFuZGxlIHRvIGFub3RoZXIgZGF0YWJhc2UsIGZp
cnN0IHdpdGhvdXQgYSBjcmVhdGlvbiBjYWxsYmFjaywgdGhlbiB3aXRoIG9uZS4KKy8vIE1ha2Ug
c3VyZSB0aGUgY3JlYXRpb24gY2FsbGJhY2sgaXMgbm90IGNhbGxlZC4KK3ZhciBkYjIgPSBvcGVu
RGF0YWJhc2VTeW5jKGRiMk5hbWUsICIxLjAiLCAiIiwgMSk7CitkYjIgPSBvcGVuRGF0YWJhc2VT
eW5jKGRiMk5hbWUsICIxLjAiLCAiIiwgMSwgZnVuY3Rpb24oZGIpIHsgcG9zdE1lc3NhZ2UoIkZB
SUw6IENyZWF0aW9uIGNhbGxiYWNrIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZC4iKTsgfSk7
CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29w
ZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtZW1wdHkt
dmVyc2lvbi1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK3RyeSB7CisgICAg
dmFyIGRiID0gb3BlbkRhdGFiYXNlU3luYygiT3BlbkRhdGFiYXNlRW1wdHlWZXJzaW9uVGVzdCIs
ICIiLCAiVGVzdCB0aGF0IHdlIGNhbiBvcGVuIGRhdGFiYXNlcyB3aXRoIGFuIGVtcHR5IHZlcnNp
b24uIiwgMSk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1MiKTsKK30gY2F0Y2ggKGVycikgeworICAg
IHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyKTsKK30KK3Bvc3RNZXNzYWdlKCJkb25lIik7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS1pbnB1dHMtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5qcwkocmV2aXNp
b24gNjIyMzApCShmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzOjYyMjMwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAordmFyIGRiOworCit2YXIgbm90QVN0cmlu
ZyA9IHsKKyAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7IHRocm93ICJmb28iOyB9Cit9OworCit0
cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygpOworICAgIHBvc3RNZXNzYWdlKCJGQUlM
OiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRob3V0IGFueSBhcmd1bWVudCBzaG91bGQg
dGhyb3cgYW4gZXhjZXB0aW9uLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2Uo
IlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJh
c2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIik7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNh
bGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGggZmV3ZXIgdGhhbiBmb3VyIGFyZ3VtZW50cyBz
aG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1l
c3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBvcGVu
RGF0YWJhc2VTeW5jKG5vdEFTdHJpbmcsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEw
MjQpOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gb3BlbkRh
dGFiYXNlU3luYygpIG11c3QgYmUgYSBzdHJpbmcuIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBw
b3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsKKyAgICBkYiA9
IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsIG5vdEFTdHJpbmcsICJEQkRlc2NyaXB0aW9uIiwg
MTAyNCk7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gb3Bl
bkRhdGFiYXNlU3luYygpIG11c3QgYmUgYSBzdHJpbmcuIik7Cit9IGNhdGNoIChlcnIpIHsKKyAg
ICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsKKyAgICBk
YiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCBub3RBU3RyaW5nLCAx
MDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIHRoaXJkIGFyZ3VtZW50IHRvIG9wZW5E
YXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEgc3RyaW5nLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAg
cG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIg
PSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24i
LCAxMDI0LCAwKTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIGZpZnRoIGFyZ3VtZW50IHRv
IG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGFuIG9iamVjdCwgaWYgcHJlc2VudC4iKTsKK30g
Y2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwor
fQorCit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lv
biIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5E
YXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVz
c2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKK30KKworLy8gUnVuIHRoaXMgdGVzdCBjYXNl
IG9uZSBtb3JlIHRpbWUsIHRvIHRlc3QgdGhlIGNvZGUgd2l0aCBhbiBleGlzdGluZyBkYXRhYmFz
ZS4KK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9u
IiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRh
dGFiYXNlU3luYygpIHN1Y2NlZWRlZC4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNz
YWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCit0cnkgeworICAgIC8vIE5lZWQgdG8g
Y3JlYXRlIGEgbmV3IGRhdGFiYXNlLCBvdGhlcndpc2UgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIHdv
bid0IGJlIGludm9rZWQuCisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWVDcmVhdGlv
bkNhbGxiYWNrIiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksICJEQlZlcnNpb24iLCAiREJEZXNj
cmlwdGlvbiIsIDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGRiKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2FsbGlu
ZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBw
b3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsKK30KKworcG9zdE1lc3NhZ2UoImRv
bmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9v
cGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc2V0
LWVtcHR5LXZlcnNpb24tc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9u
LXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAordmFyIGRiID0gb3BlbkRhdGFi
YXNlU3luYygiT3BlbkRhdGFiYXNlU2V0RW1wdHlWZXJzaW9uVGVzdCIsICIiLCAiVGVzdCB0aGF0
IHRoZSBEQiB2ZXJzaW9uIGlzIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nLiIsIDEpOworCit0cnkg
eworICAgIHZhciBkYjIgPSBvcGVuRGF0YWJhc2VTeW5jKCJPcGVuRGF0YWJhc2VTZXRFbXB0eVZl
cnNpb25UZXN0IiwgInRlc3QiLCAiVGVzdCB0aGF0IHRoZSBEQiB2ZXJzaW9uIGlzIHNldCB0byB0
aGUgZW1wdHkgc3RyaW5nLiIsIDEpOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBBbiBleGNlcHRp
b24gc2hvdWxkJ3ZlIGJlZW4gdGhyb3duLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1l
c3NhZ2UoIlBBU1MiKTsKK30KK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNv
dXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcwkocmV2aXNpb24gNjI5MTUpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1z
eW5jLWlucHV0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw3NCArMCwwIEBACi12YXIgZGI7Ci0K
LXZhciBub3RBU3RyaW5nID0gewotICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsgdGhyb3cgImZv
byI7IH0KLX07Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCk7Ci0gICAgcG9z
dE1lc3NhZ2UoIkZBSUw6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGhvdXQgYW55IGFy
Z3VtZW50IHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIik7Ci19IGNhdGNoIChlcnIpIHsKLSAg
ICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5IHsKLSAgICBk
YiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iKTsKLSAgICBwb3N0TWVz
c2FnZSgiRkFJTDogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBmZXdlciB0aGFuIGZv
dXIgYXJndW1lbnRzIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIik7Ci19IGNhdGNoIChlcnIp
IHsKLSAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5IHsK
LSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMobm90QVN0cmluZywgIkRCVmVyc2lvbiIsICJEQkRl
c2NyaXB0aW9uIiwgMTAyNCk7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBmaXJzdCBhcmd1
bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKLX0gY2F0Y2gg
KGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi10
cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgbm90QVN0cmluZywgIkRC
RGVzY3JpcHRpb24iLCAxMDI0KTsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIHNlY29uZCBh
cmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKLX0gY2F0
Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwotfQot
Ci10cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIs
IG5vdEFTdHJpbmcsIDEwMjQpOwotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgdGhpcmQgYXJn
dW1lbnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11c3QgYmUgYSBzdHJpbmcuIik7Ci19IGNhdGNo
IChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQot
dHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAi
REJEZXNjcmlwdGlvbiIsIDEwMjQsIDApOwotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgZmlm
dGggYXJndW1lbnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11c3QgYmUgYW4gb2JqZWN0LCBpZiBw
cmVzZW50LiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBl
cnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5h
bWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKLSAgICBwb3N0TWVzc2Fn
ZSgiUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4iKTsKLX0gY2F0Y2ggKGVycikg
ewotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi0vLyBSdW4g
dGhpcyB0ZXN0IGNhc2Ugb25lIG1vcmUgdGltZSwgdG8gdGVzdCB0aGUgY29kZSB3aXRoIGFuIGV4
aXN0aW5nIGRhdGFiYXNlLgotdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFt
ZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwotICAgIHBvc3RNZXNzYWdl
KCJQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLiIpOwotfSBjYXRjaCAoZXJyKSB7
Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0g
ICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgZGF0YWJhc2UsIG90aGVyd2lzZSB0aGUgY3JlYXRp
b24gY2FsbGJhY2sgd29uJ3QgYmUgaW52b2tlZC4KLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMo
IkRCTmFtZUNyZWF0aW9uQ2FsbGJhY2siICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwgIkRCVmVy
c2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24oZGIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdl
KCJQQVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2FsbGJh
Y2sgc3VjY2VlZGVkLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLX0gY2F0Y2gg
KGVycikgewotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi1w
b3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mt
c3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9y
ZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5j
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVz
b3VyY2VzL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5q
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorZnVuY3Rpb24gb3BlblRlc3REYXRhYmFz
ZSgpCit7CisgICAgcmV0dXJuIG9wZW5EYXRhYmFzZVN5bmMoIk9wZW5EYXRhYmFzZVdoaWxlVHJh
bnNhY3Rpb25JblByb2dyZXNzVGVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEu
MCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3QgdG8gbWFrZSBzdXJlIHRoYXQg
Y2FsbGluZyBvcGVuRGF0YWJhc2UoKSB3aGlsZSBhIHRyYW5zYWN0aW9uIGlzIGluIHByb2dyZXNz
IG9uIGEgZGlmZmVyZW50IGhhbmRsZSB0byB0aGUgc2FtZSBkYXRhYmFzZSBkb2VzIG5vdCByZXN1
bHQgaW4gYSBkZWFkbG9jay4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxMDAwMDAp
OyAvLyAyTUIgKyBlcHNpbG9uCit9CisKKy8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjgyMDcKKy8vIEluIG9yZGVyIHRvIHRyaWdnZXIgdGhpcyBidWcsIHRo
ZSB0cmFuc2FjdGlvbiBtdXN0IGFjcXVpcmUgYW4gZXhjbHVzaXZlCisvLyBsb2NrIG9uIHRoZSBE
QiBmaWxlIGJlZm9yZSB0cnlpbmcgdG8gb2J0YWluIGEgc2Vjb25kIGhhbmRsZSB0byB0aGUgc2Ft
ZSBEQi4KKy8vIFRoZSBvbmx5IHdheSB0byBmb3JjZSBTUUxpdGUgdG8gb2J0YWluIGFuIGV4Y2x1
c2l2ZSBsb2NrIGlzIHRvIGNoYW5nZSBtb3JlCisvLyB0aGFuIGNhY2hlX3NpemUgKiBwYWdlX3Np
emUgYnl0ZXMgaW4gdGhlIGRhdGFiYXNlLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IKKy8vIGNhY2hl
X3NpemUgaXMgMjAwMCBwYWdlcywgYW5kIHRoZSBkZWZhdWx0IHBhZ2Vfc2l6ZSBpcyAxMDI0IGJ5
dGVzLiBTbyB0aGUKKy8vIHNpemUgb2YgdGhlIGJsb2IgbXVzdCBiZSBhdCBsZWFzdCAyTUIuCit2
YXIgZGIxID0gb3BlblRlc3REYXRhYmFzZSgpOworZGIxLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4
KSB7CisgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAo
Rm9vIEJMT0IpOyIpOworICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVT
IChaRVJPQkxPQigyMDk3MTUyKSk7Iik7CisgICAgdmFyIGRiMiA9IG9wZW5UZXN0RGF0YWJhc2Uo
KTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogc2Vjb25kIGhhbmRsZSBvcGVuZWQgc3VjY2Vzc2Z1
bGx5LiIpOworCisgICAgLy8gQ2xlYW4gdXAgdGhlIERCIHRvIGFsbG93IGZvciByZXBlYXRlZCBy
dW5zIG9mIHRoaXMgdGVzdAorICAgIC8vIHdpdGhvdXQgbmVlZGluZyB0byBpbmNyZWFzZSB0aGUg
ZGVmYXVsdCBhbGxvd2VkIHF1b3RhICg1TUIpCisgICAgdHguZXhlY3V0ZVNxbCgiREVMRVRFIEZS
T00gVGVzdDsiKTsKK30pOworCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3NxbC1kYXRhLXR5cGVzLXN5bmMuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2Vz
L3NxbC1kYXRhLXR5cGVzLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvc3FsLWRhdGEtdHlwZXMtc3luYy5qcwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzNiBAQAordmFyIHRlc3RWYWx1ZXMgPSB7CisgICAgdGltZXN0YW1w
OiBuZXcgRGF0ZSgiV2VkIEZlYiAwNiAyMDA4IDEyOjE2OjUyIEdNVCswMjAwIChFRVQpIikudmFs
dWVPZigpLAorICAgIGlkOiAxMDAxLAorICAgIHJlYWw6IDEwMS40NDQsCisgICAgdGV4dDogIldl
YktpdCBkYiBURVhUIiwKKyAgICBibG9iOiAic3VwZXJjYWxpZnJhZ2lsaXN0aWMiCit9OworCitm
dW5jdGlvbiBzaG91bGRCZVNhbWVUeXBlQW5kVmFsdWUocHJvcE5hbWUsIHRlc3RWYWx1ZSwgcmVz
dWx0KSB7CisgICAgaWYgKHRlc3RWYWx1ZSA9PSByZXN1bHQgJiYgdHlwZW9mIHRlc3RWYWx1ZSA9
PSB0eXBlb2YgcmVzdWx0KQorICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogcHJvcGVydHkgJyIg
KyBwcm9wTmFtZSArICInIE9LLCB0eXBlIHdhcyAiICsgdHlwZW9mIHJlc3VsdCk7CisgICAgZWxz
ZQorICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogcHJvcGVydHkgJyIgKyBwcm9wTmFtZSArICIn
IGZhaWxlZDsgIiArCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAiICsgdHlwZW9mIHRl
c3RWYWx1ZSArICI6JyIgKyB0ZXN0VmFsdWUgKyAiJywgIiArCisgICAgICAgICAgICAgICAgICAg
ICJnb3QgIiArIHR5cGVvZiByZXN1bHQgKyAiOiciICsgcmVzdWx0ICsiJyIpOworfQorCitmdW5j
dGlvbiB0ZXN0REJWYWx1ZXMocmVzdWx0KSB7CisgICAgdmFyIGkgPSAidGltZXN0YW1wIjsgc2hv
dWxkQmVTYW1lVHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7CisgICAg
aSA9ICJpZCI7IHNob3VsZEJlU2FtZVR5cGVBbmRWYWx1ZShpLCB0ZXN0VmFsdWVzW2ldLCByZXN1
bHRbaV0pOworICAgIGkgPSAicmVhbCI7IHNob3VsZEJlU2FtZVR5cGVBbmRWYWx1ZShpLCB0ZXN0
VmFsdWVzW2ldLCByZXN1bHRbaV0pOworICAgIGkgPSAidGV4dCI7IHNob3VsZEJlU2FtZVR5cGVB
bmRWYWx1ZShpLCB0ZXN0VmFsdWVzW2ldLCByZXN1bHRbaV0pOworICAgIGkgPSAiYmxvYiI7IHNo
b3VsZEJlU2FtZVR5cGVBbmRWYWx1ZShpLCB0ZXN0VmFsdWVzW2ldLCByZXN1bHRbaV0pOworfQor
Cit2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJTUUxEYXRhVHlwZXNUZXN0IiwgIjEuMCIsICJE
YXRhYmFzZSBmb3IgU1FMIGRhdGEgdHlwZSB0ZXN0IiwgMSk7CitkYi50cmFuc2FjdGlvbihmdW5j
dGlvbih0eCkgeworICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT
IERhdGFUeXBlVGVzdFRhYmxlIChpZCBJTlRFR0VSIFVOSVFVRSwgcmVhbCBSRUFMLCB0aW1lc3Rh
bXAgSU5URUdFUiwgdGV4dCBURVhULCBibG9iIEJMT0IpIik7CisgICAgdHguZXhlY3V0ZVNxbCgi
SU5TRVJUIElOVE8gRGF0YVR5cGVUZXN0VGFibGUgKGlkLCByZWFsLCB0aW1lc3RhbXAsIHRleHQs
IGJsb2IpIFZBTFVFUyAoPyw/LD8sPyw/KSIsCisgICAgICAgICAgICAgICAgICBbdGVzdFZhbHVl
cy5pZCwgdGVzdFZhbHVlcy5yZWFsLCB0ZXN0VmFsdWVzLnRpbWVzdGFtcCwgdGVzdFZhbHVlcy50
ZXh0LCB0ZXN0VmFsdWVzLmJsb2JdKTsKKyAgICB2YXIgcmVzdWx0ID0gdHguZXhlY3V0ZVNxbCgi
U0VMRUNUICogRlJPTSBEYXRhVHlwZVRlc3RUYWJsZSIpOworICAgIHRlc3REQlZhbHVlcyhyZXN1
bHQucm93cy5pdGVtKDApKTsKKyAgICB0eC5leGVjdXRlU3FsKCJEUk9QIFRBQkxFIERhdGFUeXBl
VGVzdFRhYmxlIik7Cit9KTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5
bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVz
b3VyY2VzL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9zcWwtZXhjZXB0aW9uLWNvZGVz
LXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYgQEAKK3ZhciBkYk5hbWUgPSAiU1FM
RXhjZXB0aW9uQ29kZXNUZXN0IiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CisKK2Z1bmN0aW9u
IHRlc3RUcmFuc2FjdGlvbihkYiwgZXhlY3V0ZVN0YXRlbWVudHNDYWxsYmFjaywgZXhwZWN0ZWRF
cnJvckNvZGVOYW1lKQoreworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICBleGVjdXRlU3RhdGVtZW50c0NhbGxiYWNrKHR4KTsKKyAg
ICAgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBhbiBleGNlcHRpb24gKCIgKyBleHBlY3RlZEVy
cm9yQ29kZU5hbWUgKyAiKSBzaG91bGQndmUgYmVlbiB0aHJvd24uIik7CisgICAgICAgIH0gY2F0
Y2ggKGVycikgeworICAgICAgICAgICAgaWYgKGVyci5jb2RlID09IGVycltleHBlY3RlZEVycm9y
Q29kZU5hbWVdKQorICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBleHBlY3RlZCBh
bmQgZ290IGVycm9yIGNvZGUgIiArIGV4cGVjdGVkRXJyb3JDb2RlTmFtZSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGV4cGVjdGVkIGVycm9y
IGNvZGUgIiArIGV4cGVjdGVkRXJyb3JDb2RlTmFtZSArICIgKCIgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycltleHBlY3RlZEVycm9yQ29kZU5hbWVdICsgIiksIGdvdCAiICsgZXJy
LmNvZGUpOworICAgICAgICB9CisgICAgICB9KTsKK30KKworZnVuY3Rpb24gdGVzdFRyYW5zYWN0
aW9uVGhyb3dzRXhjZXB0aW9uKGRiKQoreworICAgIHRlc3RUcmFuc2FjdGlvbihkYiwgZnVuY3Rp
b24odHgpIHsgdGhyb3cgIkV4Y2VwdGlvbiB0aHJvd24gaW4gdHJhbnNhY3Rpb24gY2FsbGJhY2su
IjsgfSwgIlVOS05PV05fRVJSIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RJbnZhbGlkU3RhdGVtZW50
KGRiKQoreworICAgIHRlc3RUcmFuc2FjdGlvbihkYiwgZnVuY3Rpb24odHgpIHsgdHguZXhlY3V0
ZVNxbCgiQkFEIFNUQVRFTUVOVCIpOyB9LCAiU1lOVEFYX0VSUiIpOworfQorCitmdW5jdGlvbiB0
ZXN0SW5jb3JyZWN0TnVtYmVyT2ZCaW5kUGFyYW1ldGVycyhkYikKK3sKKyAgICB0ZXN0VHJhbnNh
Y3Rpb24oZGIsCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBC
YWRCaW5kTnVtYmVyVGVzdCAoRm9vIElOVCwgQmFyIElOVCkiKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJTlRPIEJhZEJpbmROdW1iZXJUZXN0IFZBTFVF
UyAoPywgPykiLCBbMV0pOworICAgICAgICAgICAgICAgICAgICB9LCAiU1lOVEFYX0VSUiIpOwor
fQorCitmdW5jdGlvbiB0ZXN0QmluZFBhcmFtZXRlck9mV3JvbmdUeXBlKGRiKQoreworICAgIHZh
ciBiYWRTdHJpbmcgPSB7IH07CisgICAgYmFkU3RyaW5nLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7
IHRocm93ICJDYW5ub3QgY2FsbCB0b1N0cmluZygpIG9uIHRoaXMgb2JqZWN0LiIgfTsKKworICAg
IHRlc3RUcmFuc2FjdGlvbihkYiwgZnVuY3Rpb24odHgpIHsKKyAgICAgICAgdHguZXhlY3V0ZVNx
bCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQmFkQmluZFR5cGVUZXN0IChGb28gVEVYVCki
KTsKKyAgICAgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8gQmFkQmluZFR5cGVUZXN0IFZB
TFVFUyAoPykiLCBbYmFkU3RyaW5nXSk7CisgICAgfSwgIlVOS05PV05fRVJSIik7Cit9CisKK2Z1
bmN0aW9uIHRlc3RRdW90YUV4Y2VlZGVkKGRiKQoreworICAgIC8vIFNvbWV0aW1lcywgU1FMaXRl
IGF1dG9tYXRpY2FsbHkgcm9sbHMgYmFjayBhIHRyYW5zYWN0aW9uIGlmIGV4ZWN1dGluZyBhIHN0
YXRlbWVudCBmYWlscy4KKyAgICAvLyBUaGlzIHNlZW1zIHRvIGJlIG9uZSBvZiB0aG9zZSBjYXNl
cy4KKyAgICB0cnkgeworICAgICAgICB0ZXN0VHJhbnNhY3Rpb24oZGIsCisgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4
LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFF1b3RhVGVzdCAoRm9vIEJM
T0IpIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJU
IElOVE8gUXVvdGFUZXN0IFZBTFVFUyAoWkVST0JMT0IoMTAgKiAxMDI0ICogMTAyNCkpIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9LCAiUVVPVEFfRVJSIik7CisgICAgICAgIHBvc3RNZXNz
YWdlKCJGQUlMOiBUcmFuc2FjdGlvbiBzaG91bGQndmUgYmVlbiByb2xsZWQgYmFjayBieSBTUUxp
dGUuIik7CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGlmIChlcnIuY29kZSA9PSBlcnJb
IkRBVEFCQVNFX0VSUiJdKQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IFRyYW5zYWN0
aW9uIHdhcyByb2xsZWQgYmFjayBieSBTUUxpdGUgYXMgZXhwZWN0ZWQuIik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBBbiB1bmV4cGVjdGVkIGV4Y2VwdGlv
biB3YXMgdGhyb3duOiAiICsgZXJyKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RWZXJzaW9u
TWlzbWF0Y2goZGIpCit7CisgICAgdmFyIGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoZGJOYW1lLCAi
MS4wIiwgIlRlc3RzIHRoZSBlcnJvciBjb2Rlcy4iLCAxKTsKKyAgICBkYjIuY2hhbmdlVmVyc2lv
bigiMS4wIiwgIjIuMCIsIGZ1bmN0aW9uKHR4KSB7IH0pOworICAgIHRlc3RUcmFuc2FjdGlvbihk
YiwKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR4LmV4ZWN1dGVTcWwoIlRISVMgU1RBVEVNRU5UIFNIT1VMRCBORVZFUiBHRVQgRVhF
Q1VURUQiKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgIlZFUlNJT05fRVJSIik7Cit9CisKK3Zh
ciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoZGJOYW1lLCAiMS4wIiwgIlRlc3RzIHRoZSBleGNlcHRp
b24gY29kZXMuIiwgMSk7Cit0ZXN0VHJhbnNhY3Rpb25UaHJvd3NFeGNlcHRpb24oZGIpOwordGVz
dEludmFsaWRTdGF0ZW1lbnQoZGIpOwordGVzdEluY29ycmVjdE51bWJlck9mQmluZFBhcmFtZXRl
cnMoZGIpOwordGVzdEJpbmRQYXJhbWV0ZXJPZldyb25nVHlwZShkYik7Cit0ZXN0UXVvdGFFeGNl
ZWRlZChkYik7Cit0ZXN0VmVyc2lvbk1pc21hdGNoKGRiKTsKKworcG9zdE1lc3NhZ2UoImRvbmUi
KTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90ZXN0
LWF1dGhvcml6ZXItc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvdGVzdC1hdXRob3JpemVyLXN5bmMuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvdGVzdC1hdXRo
b3JpemVyLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACitmdW5jdGlvbiBj
bGVhbnVwKGRiKQoreworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAg
ICAgICB0eC5leGVjdXRlU3FsKCJEUk9QIFRBQkxFIElGIEVYSVNUUyBUZXN0Iik7CisgICAgICAg
ICAgICB0eC5leGVjdXRlU3FsKCJEUk9QIElOREVYIElGIEVYSVNUUyBUZXN0SW5kZXgiKTsKKyAg
ICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgVklFVyBJRiBFWElTVFMgVGVzdFZpZXciKTsK
KyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgVFJJR0dFUiBJRiBFWElTVFMgVGVzdFRy
aWdnZXIiKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gZXhlY3V0ZVN0YXRlbWVudCh0eCwgc3Rh
dGVtZW50LCBvcGVyYXRpb24pCit7CisgICAgdHJ5IHsKKyAgICAgICAgdHguZXhlY3V0ZVNxbChz
dGF0ZW1lbnQpOworICAgICAgICBwb3N0TWVzc2FnZShvcGVyYXRpb24gKyAiIHN0YXRlbWVudCBz
dWNjZWVkZWQuIik7CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIHBvc3RNZXNzYWdlKG9w
ZXJhdGlvbiArICIgc3RhdGVtZW50IGZhaWxlZDogIiArIGVyciArICIgKCIgKyBlcnIuY29kZSAr
ICIpIik7CisgICAgfQorfQorCitmdW5jdGlvbiBjcmVhdGVUYWJsZUNhbGxiYWNrKHR4KQorewor
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEFCTEUgVGVzdCAoRm9vIGludCkiLCAi
U1FMSVRFX0NSRUFURV9UQUJMRSIpOworfQorCitmdW5jdGlvbiBjcmVhdGVTdGF0ZW1lbnRzQ2Fs
bGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBJTkRFWCBUZXN0
SW5kZXggT04gVGVzdCAoRm9vKSIsICJTUUxJVEVfQ1JFQVRFX0lOREVYIik7CisKKyAgICAvLyBF
dmVuIHRob3VnaCB0aGUgZm9sbG93aW5nIHF1ZXJ5IHNob3VsZCB0cmlnZ2VyIGEgU1FMSVRFX0NS
RUFURV9URU1QX0lOREVYIG9wZXJhdGlvbgorICAgIC8vIChhY2NvcmRpbmcgdG8gaHR0cDovL3d3
dy5zcWxpdGUub3JnL3RlbXBmaWxlcy5odG1sKSwgaXQgZG9lc24ndCwgYW5kIEknbSBub3QgYXdh
cmUKKyAgICAvLyBvZiBhbnkgb3RoZXIgd2F5IHRvIHRyaWdnZXIgdGhpcyBvcGVyYXRpb24uIFNv
IHdlJ2xsIHNraXAgaXQgZm9yIG5vdy4KKyAgICAvL2V4ZWN1dGVTdGF0ZW1lbnQodHgsICJTRUxF
Q1QgKiBGUk9NIFRlc3QgV0hFUkUgRm9vIElOICgxLCAyLCAzKSIsICJTUUxJVEVfQ1JFQVRFX1RF
TVBfSU5ERVgiKTsKKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBUQUJM
RSBUZXN0VGVtcFRhYmxlIChGb28gaW50KSIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUiKTsK
KyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRFTVAgVFJJR0dFUiBUZXN0VGVtcFRy
aWdnZXIgSU5TRVJUIE9OIFRlc3QgQkVHSU4gU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsgRU5E
IiwgIlNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0
eCwgIkNSRUFURSBURU1QIFZJRVcgVGVzdFRlbXBWaWV3IEFTIFNFTEVDVCBDT1VOVCgqKSBGUk9N
IFRlc3QiLCAiU1FMSVRFX0NSRUFURV9URU1QX1ZJRVciKTsKKyAgICBleGVjdXRlU3RhdGVtZW50
KHR4LCAiQ1JFQVRFIFRSSUdHRVIgVGVzdFRyaWdnZXIgSU5TRVJUIE9OIFRlc3QgQkVHSU4gU0VM
RUNUIENPVU5UKCopIEZST00gVGVzdDsgRU5EIiwgIlNRTElURV9DUkVBVEVfVFJJR0dFUiIpOwor
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVklFVyBUZXN0VmlldyBBUyBTRUxFQ1Qg
Q09VTlQoKikgRlJPTSBUZXN0IiwgIlNRTElURV9DUkVBVEVfVklFVyIpOworCisgICAgLy8gV2Ug
c2hvdWxkIHRyeSB0byBjcmVhdGUgYSB2aXJ0dWFsIHRhYmxlIHVzaW5nIGZ0czMsIHdoZW4gV2Vi
S2l0J3Mgc3FsaXRlIGxpYnJhcnkgc3VwcG9ydHMgaXQuCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0
eCwgIkNSRUFURSBWSVJUVUFMIFRBQkxFIFRlc3RWaXJ0dWFsVGFibGUgVVNJTkcgVW5zdXBwb3J0
ZWRNb2R1bGUiLCAiU1FMSVRFX0NSRUFURV9WVEFCTEUiKTsKK30KKworZnVuY3Rpb24gb3RoZXJT
dGF0ZW1lbnRzQ2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIFRlc3QiLCAiU1FMSVRFX1JFQUQiKTsKKyAgICBleGVjdXRlU3RhdGVt
ZW50KHR4LCAiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdCIsICJTUUxJVEVfU0VMRUNUIik7Cisg
ICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRFTEVURSBGUk9NIFRlc3QiLCAiU1FMSVRFX0RFTEVU
RSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAo
MSkiLCAiU1FMSVRFX0lOU0VSVCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJVUERBVEUg
VGVzdCBTRVQgRm9vID0gMiBXSEVSRSBGb28gPSAxIiwgIlNRTElURV9VUERBVEUiKTsKKyAgICBl
eGVjdXRlU3RhdGVtZW50KHR4LCAiUFJBR01BIGNhY2hlX3NpemUiLCAiU1FMSVRFX1BSQUdNQSIp
OworCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFMVEVSIFRBQkxFIFRlc3QgUkVOQU1FIFRP
IFRlc3RUYWJsZSIsICJTUUxJVEVfQUxURVJfVEFCTEUiKTsKKyAgICAvLyBSZW5hbWUgdGhlIHRh
YmxlIGJhY2sgdG8gaXRzIG9yaWdpbmFsIG5hbWUKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAi
QUxURVIgVEFCTEUgVGVzdFRhYmxlIFJFTkFNRSBUbyBUZXN0IiwgIlNRTElURV9BTFRFUl9UQUJM
RSIpOworCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkJFR0lOIFRSQU5TQUNUSU9OIiwgIlNR
TElURV9UUkFOU0FDVElPTiIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJBVFRBQ0ggbWFp
biBBUyBUZXN0TWFpbiIsICJTUUxJVEVfQVRUQUNIIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0
eCwgIkRFVEFDSCBUZXN0TWFpbiIsICJTUUxJVEVfREVUQUNIIik7CisgICAgZXhlY3V0ZVN0YXRl
bWVudCh0eCwgIlJFSU5ERVgiLCAiU1FMSVRFX1JFSU5ERVgiKTsKKyAgICBleGVjdXRlU3RhdGVt
ZW50KHR4LCAiQU5BTFlaRSIsICJTUUxJVEVfQU5BTFlaRSIpOworCisgICAgLy8gU1FMSVRFX0ZV
TkNUSU9OOiBhbGxvd2VkIGluIHdyaXRlIG1vZGUKKyAgICAvLyBUaGVyZSBpcyBubyBTUUwvSmF2
YXNjcmlwdCBBUEkgdG8gYWRkIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgdG8gU1FMaXRlLAorICAg
IC8vIHNvIHdlIGNhbm5vdCB0ZXN0IHRoaXMgb3BlcmF0aW9uCit9CisKK2Z1bmN0aW9uIGRyb3BT
dGF0ZW1lbnRzQ2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1Ag
SU5ERVggVGVzdEluZGV4IiwgIlNRTElURV9EUk9QX0lOREVYIik7CisKKyAgICAvLyBTUUxJVEVf
RFJPUF9URU1QX0lOREVYOiBhbGxvd2VkIGluIHdyaXRlIG1vZGUKKyAgICAvLyBOb3Qgc3VyZSBo
b3cgdG8gdGVzdCB0aGlzOiB0ZW1wIGluZGV4ZXMgYXJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCB3
aGVuCisgICAgLy8gdGhlIGRhdGFiYXNlIGlzIGNsb3NlZCwgYnV0IEhUTUw1IGRvZXNuJ3Qgc3Bl
Y2lmeSBhIGNsb3NlRGF0YWJhc2UoKSBjYWxsLgorCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwg
IkRST1AgVEFCTEUgVGVzdFRlbXBUYWJsZSIsICJTUUxJVEVfRFJPUF9URU1QX1RBQkxFIik7Cisg
ICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVFJJR0dFUiBUZXN0VGVtcFRyaWdnZXIiLCAi
U1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRS
T1AgVklFVyBUZXN0VGVtcFZpZXciLCAiU1FMSVRFX0RST1BfVEVNUF9WSUVXIik7CisgICAgZXhl
Y3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVFJJR0dFUiBUZXN0VHJpZ2dlciIsICJTUUxJVEVfRFJP
UF9UUklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVklFVyBUZXN0Vmll
dyIsICJTUUxJVEVfRFJPUF9WSUVXIik7CisKKyAgICAvLyBTUUxJVEVfRFJPUF9WVEFCTEU6IGFs
bG93ZWQgaW4gd3JpdGUgbW9kZQorICAgIC8vIE5vdCBzdXJlIGhvdyB0byB0ZXN0IHRoaXM6IHdl
IGNhbm5vdCBjcmVhdGUgYSB2aXJ0dWFsIHRhYmxlIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgLy8g
aGF2ZSBTUUwvSmF2YXNjcmlwdCBBUElzIHRvIHJlZ2lzdGVyIGEgbW9kdWxlIHRoYXQgaW1wbGVt
ZW50cyBhIHZpcnR1YWwgdGFibGUuCisgICAgLy8gVGhlcmVmb3JlLCB0cnlpbmcgdG8gZHJvcCBh
IHZpcnR1YWwgdGFibGUgd2lsbCBhbHdheXMgZmFpbCAobm8gc3VjaCB0YWJsZSkKKyAgICAvLyBi
ZWZvcmUgZXZlbiBnZXR0aW5nIHRvIHRoZSBhdXRob3JpemVyLgorCisgICAgZXhlY3V0ZVN0YXRl
bWVudCh0eCwgIkRST1AgVEFCTEUgVGVzdCIsICJTUUxJVEVfRFJPUF9UQUJMRSIpOworfQorCitm
dW5jdGlvbiB0ZXN0UmVhZFdyaXRlTW9kZShkYikKK3sKKyAgICBkYi50cmFuc2FjdGlvbihmdW5j
dGlvbih0eCkgeworICAgICAgICBwb3N0TWVzc2FnZSgiQmVnaW5uaW5nIHdyaXRlIHRyYW5zYWN0
aW9uOiIpOworICAgICAgICBjcmVhdGVUYWJsZUNhbGxiYWNrKHR4KTsKKyAgICAgICAgY3JlYXRl
U3RhdGVtZW50c0NhbGxiYWNrKHR4KTsKKyAgICAgICAgb3RoZXJTdGF0ZW1lbnRzQ2FsbGJhY2so
dHgpOworICAgICAgICBkcm9wU3RhdGVtZW50c0NhbGxiYWNrKHR4KTsKKyAgICAgICAgcG9zdE1l
c3NhZ2UoIldyaXRlIHRyYW5zYWN0aW9uIHN1Y2NlZWRlZC5cbiIpOworICAgIH0pOworfQorCitm
dW5jdGlvbiB0ZXN0UmVhZE9ubHlNb2RlKGRiKQoreworICAgIHBvc3RNZXNzYWdlKCJCZWdpbm5p
bmcgcmVhZCB0cmFuc2FjdGlvbnM6Iik7CisgICAgLy8gVGVzdCB0aGUgJ0NSRUFURSBUQUJMRScg
b3BlcmF0aW9uOyBpdCBzaG91bGQgYmUgZGlzYWxsb3dlZAorICAgIGRiLnJlYWRUcmFuc2FjdGlv
bihjcmVhdGVUYWJsZUNhbGxiYWNrKTsKKworICAgIC8vIEluIG9yZGVyIHRvIHRlc3QgYWxsIG90
aGVyICdDUkVBVEUnIG9wZXJhdGlvbnMsIHdlIG11c3QgY3JlYXRlIHRoZSB0YWJsZSBmaXJzdAor
ICAgIGRiLnRyYW5zYWN0aW9uKGNyZWF0ZVRhYmxlQ2FsbGJhY2spOworICAgIGRiLnJlYWRUcmFu
c2FjdGlvbihjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2spOworCisgICAgLy8gSW4gb3JkZXIgdG8g
dGVzdCB0aGUgJ0RST1AnIGFuZCAnb3RoZXInIG9wZXJhdGlvbnMsIHdlIG5lZWQgdG8gZmlyc3Qg
Y3JlYXRlIHRoZSByZXNwZWN0aXZlIGVudGl0aWVzCisgICAgZGIudHJhbnNhY3Rpb24oY3JlYXRl
U3RhdGVtZW50c0NhbGxiYWNrKTsKKyAgICBkYi5yZWFkVHJhbnNhY3Rpb24ob3RoZXJTdGF0ZW1l
bnRzQ2FsbGJhY2spOworICAgIGRiLnJlYWRUcmFuc2FjdGlvbihkcm9wU3RhdGVtZW50c0NhbGxi
YWNrKTsKKyAgICBwb3N0TWVzc2FnZSgiUmVhZCB0cmFuc2FjdGlvbnMgc3VjY2VlZGVkLiIpOwor
fQorCit2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJUZXN0QXV0aG9yaXplclRlc3QiLCAiMS4w
IiwgIlRlc3QgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuIiwgMSk7CitjbGVhbnVwKGRiKTsKK3Rl
c3RSZWFkV3JpdGVNb2RlKGRiKTsKK3Rlc3RSZWFkT25seU1vZGUoZGIpOworCitwb3N0TWVzc2Fn
ZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL3RyYW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3RyYW5zYWN0aW9uLWluLXRy
YW5zYWN0aW9uLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAordmFyIGRiID0gb3BlbkRhdGFiYXNlU3luYygi
VHJhbnNhY3Rpb25JblRyYW5zYWN0aW9uVGVzdCIsICIxLjAiLCAiVGVzdCB0aGF0IHRyeWluZyB0
byBydW4gYSBuZXN0ZWQgdHJhbnNhY3Rpb24gZmFpbHMuIiwgMSk7CitkYi50cmFuc2FjdGlvbihm
dW5jdGlvbih0eCkgeworICAgIHRyeSB7CisgICAgICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9u
KG5lc3RlZFR4KSB7IH0pOworICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogVHJ5aW5nIHRvIHJ1
biBhIG5lc3RlZCB0cmFuc2FjdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiIpOworICAg
IH0gY2F0Y2ggKGVycikgeworICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogRXhjZXB0aW9uIHRo
cm93biB3aGlsZSB0cnlpbmcgdG8gcnVuIGEgbmVzdGVkIHRyYW5zYWN0aW9uLiIpOworICAgIH0K
K30pOworCitwb3N0TWVzc2FnZSgiZG9uZSIpOwo=
</data>
<flag name="commit-queue"
          id="48939"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61025</attachid>
            <date>2010-07-09 02:56:44 -0700</date>
            <delta_ts>2010-07-09 18:21:50 -0700</delta_ts>
            <desc>patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>153615</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjkyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTkgQEAKKzIwMTAtMDctMDkgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbigpIGFuZCBEYXRhYmFzZVN5
bmM6OmNoYW5nZVZlcnNpb24oKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwNjA3CisKKyAgICAgICAgVGVzdHM6IGZhc3Qvd29ya2Vycy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1v
bmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMv
c3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5o
dG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNy
ZWF0aW9uLWNhbGxiYWNrLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0
eS12ZXJzaW9uLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRt
bAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rl
cy1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0
aG9yaXplci1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Ry
YW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWJzdHJhY3REYXRhYmFzZTo6bWF4aW11bVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QWJz
dHJhY3REYXRhYmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCk6CisgICAgICAgICogc3Rv
cmFnZS9BYnN0cmFjdERhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERhdGFi
YXNlOjpzcWxpdGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3Jh
cHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9y
bVByZWZsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVy
Zm9ybVBvc3RmbGlnaHQpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZU5hbWVzKToKKyAgICAgICAgKiBz
dG9yYWdlL0RhdGFiYXNlLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVlRhYmxlKToKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0
U3RlcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5nZVZlcnNpb25QcmVmbGlnaHRT
dGVwOjpwZXJmb3JtU3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFuZ2VWZXJzaW9uUHJlZmxp
Z2h0U3RlcDo6Q2hhbmdlVmVyc2lvblByZWZsaWdodFN0ZXApOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhbmdlVmVyc2lvblBvc3RmbGlnaHRTdGVwOjpwZXJmb3JtU3RlcCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXA6OkNoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0
U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OmNoYW5nZVZlcnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZVN5bmM6OnJ1blRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBzdG9yYWdl
L0RhdGFiYXNlU3luYy5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6ZUZvckRhdGFiYXNl
KToKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxS
ZXN1bHRTZXQuY3BwOgorICAgICAgICAqIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Lmg6CisgICAgICAg
ICogc3RvcmFnZS9TUUxTdGF0ZW1lbnRDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50
U3luYy5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50U3luYzo6U1FMU3RhdGVtZW50U3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnRTeW5jOjpleGVjdXRlKToKKyAgICAgICAgKiBz
dG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuaDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6cnVuQ3Vy
cmVudFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clF1b3RhSW5jcmVhc2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bjo6cG9zdGZsaWdodEFuZENvbW1pdCk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bi5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oOgorICAgICAg
ICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKToK
KyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50Lmg6CisgICAgICAgICogc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKiBzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2FjdGlvbkNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRyYW5zYWN0aW9uU3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6On5TUUxUcmFuc2FjdGlvblN5bmMp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU1FMKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFRyYW5zYWN0aW9uU3luYzo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uU3luYzo6cm9sbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OlNRTFRyYW5zYWN0aW9u
U3luY09wdGlvbmFsU3RlcDo6flNRTFRyYW5zYWN0aW9uU3luY09wdGlvbmFsU3RlcCk6CisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oOgorICAgICAgICAqIHN0
b3JhZ2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0
YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhj
ZWVkUXVvdGEpOgorCiAyMDEwLTA3LTA4ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFu
bkByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KSW5kZXg6IFdl
YkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkocmV2aXNpb24gNjI5MjMpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xNDIxLDYgKzE0MjEsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgc3RvcmFn
ZS9TUUxSZXN1bHRTZXQuY3BwCiAgICAgc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmNwcAog
ICAgIHN0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAorICAgIHN0b3JhZ2UvU1FMU3RhdGVtZW50U3lu
Yy5jcHAKICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAogICAgIHN0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25DbGllbnQuY3BwCiAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2MjkyMykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKHdvcmtpbmcgY29weSkKQEAgLTI1MTgsNiArMjUxOCw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2Uv
U1FMU3RhdGVtZW50Q2FsbGJhY2suaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suaCBcCisJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwIFwK
KwlXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oIFwKIAlXZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb24uY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaCBc
CiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBcCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2
aXNpb24gNjI5MjMpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MzQ5NCw2ICszNDk0LDggQEAKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFN0YXRlbWVudC5oJywK
ICAgICAgICAgICAgICdzdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmgnLAogICAgICAgICAg
ICAgJ3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oJywKKyAgICAgICAgICAgICdz
dG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL1NRTFN0
YXRlbWVudFN5bmMuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAn
LAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaCcsCiAgICAgICAgICAgICAn
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2MjkyMykK
KysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTIzODAsNiArMjM4MCw3
IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9EQVRBQkFTRT0xKSB7CiAgICAgICAgIHN0b3Jh
Z2UvU1FMUmVzdWx0U2V0LmNwcCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlz
dC5jcHAgXAogICAgICAgICBzdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAgXAorICAgICAgICBzdG9y
YWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bi5jcHAgXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCBcCiAgICAg
ICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgXApAQCAtMjQ1Myw2ICsy
NDU0LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RPTV9TVE9SQUdFPTEpIAogICAgICAg
ICBzdG9yYWdlL1NRTFJlc3VsdFNldC5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxSZXN1bHRTZXRS
b3dMaXN0LmggXAogICAgICAgICBzdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKKyAgICAgICAgc3Rv
cmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmggXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9u
LmggXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmggXAogICAgICAgICBz
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDYyOTIzKQorKysgV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk4MTcsNiArNDk4MTcs
MTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxTUUxTdGF0ZW1lbnRTeW5jLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMU3RhdGVtZW50U3luYy5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3RvcmFnZVxTUUxUcmFuc2FjdGlvbi5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDYyOTIz
KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTQyOTEsNiArNDI5MSw4IEBACiAJCUI1MjNDRjBCMTE4MjY3NTQwMEVCQjI5QyAv
KiBEYXRhYmFzZVN5bmMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI1MjNDRjA0MTE4MjY3NTQwMEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuaCAqLzsgfTsK
IAkJQjUyNUE5NjUxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTI1QTk2MzExQ0EyMzQwMDAz
QTIzQTggLyogSlNTUUxFeGNlcHRpb24uaCAqLzsgfTsKIAkJQjUyNUE5NjYxMUNBMjM0MDAwM0Ey
M0E4IC8qIEpTU1FMRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEI1MjVBOTY0MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlv
bi5jcHAgKi87IH07CisJCUI1NTBCNTI1MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRT
eW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1
NTBCNTIxMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmNwcCAqLzsgfTsKKwkJ
QjU1MEI1MjYxMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NTBCNTIyMTFEQzY4QTgwMDky
Mzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggKi87IH07CiAJCUI1NUQ1QUE0MTE5MTMxRkMwMEJD
QzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVENUFBMjExOTEzMUZDMDBCQ0MzMTUgLyog
SlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oICovOyB9OwogCQlCNTVENUFBNTExOTEzMUZD
MDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVENUFBMzExOTEzMUZDMDBCQ0Mz
MTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHAgKi87IH07CiAJCUI1NUQ1QUE4
MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTVENUFBNjExOTEzMjUwMDBCQ0Mz
MTUgLyogSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwICovOyB9OwpAQCAtOTg2Miw2ICs5ODY0LDgg
QEAKIAkJQjUyM0NGMDQxMTgyNjc1NDAwRUJCMjlDIC8qIERhdGFiYXNlU3luYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZVN5bmMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMRXhjZXB0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1MjVBOTY0MTFDQTIzNDAwMDNBMjNBOCAvKiBK
U1NRTEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1NRTEV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUI1NTBCNTIx
MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTFN0YXRlbWVudFN5bmMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCNTUwQjUyMjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50
U3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTUUxTdGF0ZW1lbnRTeW5j
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1QUEyMTE5MTMxRkMwMEJDQzMx
NSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUI1NUQ1QUE2MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFiYXNlU3lu
Y0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTMwOSw2ICsxMTMx
Myw4IEBACiAJCQkJQjU5REQ2OEUxMTkwMjk4RTAwN0U5Njg0IC8qIFNRTFN0YXRlbWVudENhbGxi
YWNrLmlkbCAqLywKIAkJCQkxQTdDQ0IxNjBDRDk0NjlBMDBCN0I2NEUgLyogU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5oICovLAogCQkJCUI1OURENjhGMTE5MDI5OEUwMDdFOTY4NCAvKiBTUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmlkbCAqLywKKwkJCQlCNTUwQjUyMTExREM2OEE4MDA5MjM4
ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgKi8sCisJCQkJQjU1MEI1MjIxMURDNjhBODAwOTIz
ODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCAqLywKIAkJCQkxQUJGRTc1MjBDRDk2OEQwMDBGRTQ4
MzQgLyogU1FMVHJhbnNhY3Rpb24uY3BwICovLAogCQkJCTFBN0NDQjIyMENEOTQ2RkQwMEI3QjY0
RSAvKiBTUUxUcmFuc2FjdGlvbi5oICovLAogCQkJCTFBN0NDQjIzMENEOTQ2RkQwMEI3QjY0RSAv
KiBTUUxUcmFuc2FjdGlvbi5pZGwgKi8sCkBAIC0xOTI3Miw2ICsxOTI3OCw3IEBACiAJCQkJNTE1
QjAzOTkwQ0QxNjQyQTAwQjdFQTlDIC8qIFNRTFN0YXRlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUE3Q0NCMTkwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0YXRlbWVudENhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTdDQ0IxQTBDRDk0NjlBMDBCN0I2NEUgLyogU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU1MEI1MjYxMURDNjhBODAwOTIz
ODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBN0NDQjI0MENE
OTQ2RkQwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3
Q0NCMUIwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCUI1MUJGNkYxMTAyQzlFNTkwMDAyQzE1QSAvKiBTUUxUcmFuc2FjdGlvbkNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTcxNiw2ICsyMTcyMyw3IEBACiAJCQkJNTE5NjEx
NzMwQ0FDNTY1NzAwMTBBODBDIC8qIFNRTFJlc3VsdFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQUZFMTE3RDBDQkZGQjM2MDAzMDE3RkEgLyogU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTVCMDM5QTBDRDE2NDJBMDBCN0VBOUMgLyogU1FMU3RhdGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1NTBCNTI1MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxT
dGF0ZW1lbnRTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQkZFNzUzMENEOTY4RDAwMEZF
NDgzNCAvKiBTUUxUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTFCRjZGMDEw
MkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjVDMTEyM0IxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRh
YmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2Uu
Y3BwCShyZXZpc2lvbiA2MjkyMykKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2lmIEVOQUJMRShEQVRBQkFT
RSkKICNpbmNsdWRlICJEYXRhYmFzZUF1dGhvcml6ZXIuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRy
YWNrZXIuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKQEAgLTQ2Miw2ICs0NjEsMTkgQEAgdm9pZCBBYnN0cmFjdERhdGFiYXNlOjpy
ZXNldEF1dGhvcml6ZXIoKQogICAgICAgICBtX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsK
IH0KIAordW5zaWduZWQgbG9uZyBsb25nIEFic3RyYWN0RGF0YWJhc2U6Om1heGltdW1TaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZ2V0TWF4U2l6
ZUZvckRhdGFiYXNlKHRoaXMpOworfQorCit2b2lkIEFic3RyYWN0RGF0YWJhc2U6OmluY3JlbWVu
dGFsVmFjdXVtSWZOZWVkZWQoKQoreworICAgIGludDY0X3QgZnJlZVNwYWNlU2l6ZSA9IG1fc3Fs
aXRlRGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOworICAgIGludDY0X3QgdG90YWxTaXplID0gbV9z
cWxpdGVEYXRhYmFzZS50b3RhbFNpemUoKTsKKyAgICBpZiAodG90YWxTaXplIDw9IDEwICogZnJl
ZVNwYWNlU2l6ZSkKKyAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5ydW5JbmNyZW1lbnRhbFZhY3V1
bUNvbW1hbmQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCShyZXZpc2lv
biA2MjkyMykKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAorI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTQ1LDgg
KzQ2LDYgQEAgY2xhc3MgRGF0YWJhc2VBdXRob3JpemVyOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogCi10eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOwotCiBjbGFzcyBBYnN0cmFjdERhdGFiYXNlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8
QWJzdHJhY3REYXRhYmFzZT4gewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxl
KCk7CkBAIC02NSw2ICs2NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzcGxh
eU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Q7CisgICAgU1FMaXRl
RGF0YWJhc2UmIHNxbGl0ZURhdGFiYXNlKCkgeyByZXR1cm4gbV9zcWxpdGVEYXRhYmFzZTsgfQor
CisgICAgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplKCkgY29uc3Q7CisgICAgdm9pZCBp
bmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7CiAKICAgICAvLyBGSVhNRTogbW92ZSBhbGwgdmVy
c2lvbi1yZWxhdGVkIG1ldGhvZHMgdG8gYSBEYXRhYmFzZVZlcnNpb25UcmFja2VyIGNsYXNzCiAg
ICAgYm9vbCB2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVkKCkgY29uc3Q7CkBAIC0xMDMsOCArMTA2LDYg
QEAgcHJvdGVjdGVkOgogICAgIHVuc2lnbmVkIGxvbmcgbV9lc3RpbWF0ZWRTaXplOwogICAgIFN0
cmluZyBtX2ZpbGVuYW1lOwogCi0gICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFzZTsK
LQogI2lmbmRlZiBOREVCVUcKICAgICBTdHJpbmcgZGF0YWJhc2VEZWJ1Z05hbWUoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRleHRUaHJlYWRTZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSArICI6OiIg
KyBtX25hbWU7IH0KICNlbmRpZgpAQCAtMTE2LDYgKzExNyw4IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX29wZW5lZDsKICAgICBib29sIG1fbmV3OwogCisgICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxp
dGVEYXRhYmFzZTsKKwogICAgIFJlZlB0cjxEYXRhYmFzZUF1dGhvcml6ZXI+IG1fZGF0YWJhc2VB
dXRob3JpemVyOwogfTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFw
cGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBw
ZXIuY3BwCShyZXZpc2lvbiA2MjkyMykKKysrIFdlYkNvcmUvc3RvcmFnZS9DaGFuZ2VWZXJzaW9u
V3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQCBib29sIENoYW5n
ZVZlcnNpb25XcmFwcGVyOjpwZXJmb3JtUHJlZmxpCiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLT5nZXRWZXJzaW9uRnJvbURhdGFiYXNlKGFjdHVhbFZlcnNpb24pKSB7CiAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJldHJpZXZlIGFjdHVhbCBjdXJyZW50IHZlcnNpb24g
ZnJvbSBkYXRhYmFzZSIpOwotICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZSgw
LCAidW5hYmxlIHRvIHZlcmlmeSBjdXJyZW50IHZlcnNpb24gb2YgZGF0YWJhc2UiKTsKKyAgICAg
ICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAi
dW5hYmxlIHRvIHZlcmlmeSBjdXJyZW50IHZlcnNpb24gb2YgZGF0YWJhc2UiKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmIChhY3R1YWxWZXJzaW9uICE9IG1fb2xkVmVy
c2lvbikgewogICAgICAgICBMT0dfRVJST1IoIk9sZCB2ZXJzaW9uIGRvZXNuJ3QgbWF0Y2ggYWN0
dWFsIHZlcnNpb24iKTsKLSAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoMiwg
ImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBhcmd1bWVu
dCBkbyBub3QgbWF0Y2giKTsKKyAgICAgICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
U1FMRXJyb3I6OlZFUlNJT05fRVJSLCAiY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSBh
bmQgYG9sZFZlcnNpb25gIGFyZ3VtZW50IGRvIG5vdCBtYXRjaCIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgQ2hhbmdlVmVyc2lvbldyYXBw
ZXI6OnBlcmZvcm1Qb3N0ZmwKIAogICAgIGlmICghdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNl
dFZlcnNpb25JbkRhdGFiYXNlKG1fbmV3VmVyc2lvbikpIHsKICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gc2V0IG5ldyB2ZXJzaW9uIGluIGRhdGFiYXNlIik7Ci0gICAgICAgIG1fc3FsRXJy
b3IgPSBTUUxFcnJvcjo6Y3JlYXRlKDAsICJ1bmFibGUgdG8gc2V0IG5ldyB2ZXJzaW9uIGluIGRh
dGFiYXNlIik7CisgICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9y
OjpVTktOT1dOX0VSUiwgInVuYWJsZSB0byBzZXQgbmV3IHZlcnNpb24gaW4gZGF0YWJhc2UiKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShy
ZXZpc2lvbiA2MjkyMykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogI2lu
Y2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTMzNiw3
ICszMzUsNyBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlCiB7CiAg
ICAgZGlzYWJsZUF1dGhvcml6ZXIoKTsKIAotICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQo
bV9zcWxpdGVEYXRhYmFzZSwgIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0
eXBlPSd0YWJsZSc7Iik7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChzcWxpdGVEYXRh
YmFzZSgpLCAiU0VMRUNUIG5hbWUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxl
JzsiKTsKICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewogICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZXRyaWV2ZSBsaXN0IG9mIHRhYmxlcyBmb3IgZGF0
YWJhc2UgJXMiLCBkYXRhYmFzZURlYnVnTmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAg
ZW5hYmxlQXV0aG9yaXplcigpOwpAQCAtMzk3LDE0ICszOTYsNiBAQCBTZWN1cml0eU9yaWdpbiog
RGF0YWJhc2U6OnNlY3VyaXR5T3JpZ2luCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRGF0YWJh
c2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKQotewotICAgIGludDY0X3QgZnJlZVNwYWNl
U2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2UuZnJlZVNwYWNlU2l6ZSgpOwotICAgIGludDY0X3QgdG90
YWxTaXplID0gbV9zcWxpdGVEYXRhYmFzZS50b3RhbFNpemUoKTsKLSAgICBpZiAodG90YWxTaXpl
IDw9IDEwICogZnJlZVNwYWNlU2l6ZSkKLSAgICAgICAgbV9zcWxpdGVEYXRhYmFzZS5ydW5JbmNy
ZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDYy
OTIzKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDggKzMxLDggQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCi0jaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKIAogI2luY2x1ZGUgPHd0Zi9E
ZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC02Niw3ICs2Niw2IEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8U3RyaW5nPiB0YWJsZU5hbWVzKCk7CiAKICAgICB2aXJ0dWFsIFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwotICAgIFNRTGl0ZURhdGFiYXNlJiBz
cWxpdGVEYXRhYmFzZSgpIHsgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2U7IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBtYXJrQXNEZWxldGVkQW5kQ2xvc2UoKTsKICAgICBib29sIGRlbGV0ZWQoKSBjb25z
dCB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KQEAgLTgzLDggKzgyLDYgQEAgcHVibGljOgogICAgIFNR
TFRyYW5zYWN0aW9uQ2xpZW50KiB0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0OwogICAgIFNRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdDsKIAot
ICAgIHZvaWQgaW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpOwotCiBwcml2YXRlOgogICAgIGNs
YXNzIERhdGFiYXNlT3BlblRhc2s7CiAgICAgY2xhc3MgRGF0YWJhc2VDbG9zZVRhc2s7CkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkocmV2aXNpb24gNjI5MjMpCisr
KyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjkwLDcgKzI5MCw3IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZUYWJsZShj
b24KICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAgLy8gQWxsb3cgb25seSB0aGUg
RlRTMyBleHRlbnNpb24KLSAgICBpZiAobW9kdWxlTmFtZSAhPSAiZnRzMyIpCisgICAgaWYgKCFl
cXVhbElnbm9yaW5nQ2FzZShtb2R1bGVOYW1lLCAiZnRzMyIpKQogICAgICAgICByZXR1cm4gU1FM
QXV0aERlbnk7CiAKICAgICBtX2xhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgPSB0cnVlOwpAQCAt
MzAzLDcgKzMwMyw3IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWVGFibGUoY29uc3QK
ICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAgLy8gQWxsb3cgb25seSB0aGUgRlRT
MyBleHRlbnNpb24KLSAgICBpZiAobW9kdWxlTmFtZSAhPSAiZnRzMyIpCisgICAgaWYgKCFlcXVh
bElnbm9yaW5nQ2FzZShtb2R1bGVOYW1lLCAiZnRzMyIpKQogICAgICAgICByZXR1cm4gU1FMQXV0
aERlbnk7CiAKICAgICByZXR1cm4gdXBkYXRlRGVsZXRlc0Jhc2VkT25UYWJsZU5hbWUodGFibGVO
YW1lKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUNhbGxiYWNrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQ2FsbGJhY2suaAkocmV2aXNpb24gNjI5MjMp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcAkocmV2aXNpb24g
NjI5MjMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMiwyOCArMiwzMCBAQAogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
QEAgLTMyLDggKzM0LDkgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiRGF0YWJh
c2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgotI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMRXhjZXB0
aW9uLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jLmgiCiAjaW5jbHVkZSAiU1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTg3LDE0ICs5MCw1NiBAQCBEYXRh
YmFzZVN5bmM6On5EYXRhYmFzZVN5bmMoKQogICAgIH0KIH0KIAotdm9pZCBEYXRhYmFzZVN5bmM6
OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxT
UUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIEV4Y2VwdGlvbkNvZGUmKQordm9pZCBEYXRhYmFz
ZVN5bmM6OmNoYW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJp
bmcmIG5ld1ZlcnNpb24sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNo
YW5nZVZlcnNpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworCisgICAgaWYgKHNx
bGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpIHsKKyAgICAgICAgZWMgPSBT
UUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFJlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmM+IHRyYW5zYWN0aW9uID0gU1FMVHJhbnNhY3Rpb25T
eW5jOjpjcmVhdGUodGhpcywgY2hhbmdlVmVyc2lvbkNhbGxiYWNrLCBmYWxzZSk7CisgICAgaWYg
KChlYyA9IHRyYW5zYWN0aW9uLT5iZWdpbigpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3Ry
aW5nIGFjdHVhbFZlcnNpb247CisgICAgaWYgKCFnZXRWZXJzaW9uRnJvbURhdGFiYXNlKGFjdHVh
bFZlcnNpb24pKSB7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhY3R1YWxWZXJzaW9uICE9IG9sZFZlcnNp
b24pIHsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlZFUlNJT05fRVJSOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKChlYyA9IHRyYW5zYWN0aW9uLT5leGVjdXRlKCkpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNldFZlcnNpb25JbkRhdGFiYXNlKG5ld1ZlcnNp
b24pKSB7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICgoZWMgPSB0cmFuc2FjdGlvbi0+Y29tbWl0KCkpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzZXRFeHBlY3RlZFZlcnNpb24obmV3VmVyc2lvbik7CiB9
CiAKLXZvaWQgRGF0YWJhc2VTeW5jOjp0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uU3luY0NhbGxiYWNrPiwgYm9vbCwgRXhjZXB0aW9uQ29kZSYpCit2b2lkIERhdGFiYXNlU3lu
Yzo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4gY2Fs
bGJhY2ssIGJvb2wgcmVhZE9ubHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVCht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKworICAgIGlmIChz
cWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7CisgICAgICAgIGVjID0g
U1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jPiB0cmFuc2FjdGlvbiA9IFNRTFRyYW5zYWN0aW9u
U3luYzo6Y3JlYXRlKHRoaXMsIGNhbGxiYWNrLCByZWFkT25seSk7CisgICAgaWYgKChlYyA9IHRy
YW5zYWN0aW9uLT5iZWdpbigpKSB8fCAoZWMgPSB0cmFuc2FjdGlvbi0+ZXhlY3V0ZSgpKSB8fCAo
ZWMgPSB0cmFuc2FjdGlvbi0+Y29tbWl0KCkpKQorICAgICAgICB0cmFuc2FjdGlvbi0+cm9sbGJh
Y2soKTsKIH0KIAogdm9pZCBEYXRhYmFzZVN5bmM6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5oCShyZXZpc2lvbiA2MjkyMykKKysrIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMiwyOCArMiwzMCBAQAogICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKICNpZm5kZWYgRGF0YWJhc2VTeW5jX2gKQEAgLTMxLDYgKzMzLDcgQEAKIAog
I2lmIEVOQUJMRShEQVRBQkFTRSkKICNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpZm5kZWYgTkRFQlVHCkBAIC00MCw2ICs0Myw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFiYXNlQ2FsbGJhY2s7CitjbGFzcyBTUUxU
cmFuc2FjdGlvblN5bmM7CiBjbGFzcyBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjazsKIGNsYXNz
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVN5bmMuaWRsCShyZXZpc2lvbiA2MjkyMykKKysrIFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yLDI4ICsyLDMwIEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
Ci0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAogbW9kdWxlIHN0b3JhZ2UgewpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlVHJhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJh
Y2tlci5jcHAJKHJldmlzaW9uIDYyOTIzKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVHJh
Y2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNiBAQCBib29sIERhdGFiYXNl
VHJhY2tlcjo6aGFzRW50cnlGb3JEYXRhYmFzCiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFz
ZVRyYWNrZXI6OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBBYnN0cmFjdERhdGFiYXNlKiBk
YXRhYmFzZSkKIHsKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNlLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwog
ICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgZm9yIGEgZGF0YWJhc2UgaXMgdGhlIGZ1bGwgcXVvdGEg
Zm9yIGl0cyBvcmlnaW4sIG1pbnVzIHRoZSBjdXJyZW50IHVzYWdlIHdpdGhpbiB0aGUgb3JpZ2lu
LAogICAgIC8vIHBsdXMgdGhlIGN1cnJlbnQgdXNhZ2Ugb2YgdGhlIGdpdmVuIGRhdGFiYXNlCiAg
ICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7CkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvU1FMRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FM
RXJyb3IuaAkocmV2aXNpb24gNjI5MjMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5jcHAJKHJldmlzaW9uIDYyOTIzKQorKysgV2Vi
Q29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMx
LDYgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKLSNpbmNsdWRlICJTUUxWYWx1ZS5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyB1bnNpZ25lZCBjb25zdCBNYXhFcnJvckNvZGUgPSAyOwpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L1NRTFJlc3VsdFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRT
ZXQuaAkocmV2aXNpb24gNjI5MjMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDEzICszMSwxMiBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNF
KQogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlNRTFJlc3VsdFNldFJv
d0xpc3QuaCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIGludCBFeGNl
cHRpb25Db2RlOwotCiBjbGFzcyBTUUxSZXN1bHRTZXQgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJl
ZDxTUUxSZXN1bHRTZXQ+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxSZXN1
bHRTZXQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxSZXN1bHRTZXQpOyB9Cklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaAkocmV2aXNpb24gNjI5MjMp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50Q2FsbGJhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiA2MjkyMykKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
IAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAJKHJldmlzaW9uIDYyNDI0KQko
ZnJvbSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcDo2MjQyNCkKKysrIFdlYkNvcmUv
c3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIw
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnQuaCIKKworI2lm
IEVOQUJMRShEQVRBQkFTRSkKKworI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgorI2luY2x1ZGUgIlNRTEVycm9yLmgiCisjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJTUUxTdGF0ZW1lbnRD
YWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCIKKyNpbmNs
dWRlICJTUUxUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IFNRTFN0YXRlbWVudDo6Y3Jl
YXRlKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1
bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVm
UHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGJvb2wgcmVhZE9u
bHkpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0ZW1lbnQoc3RhdGVtZW50LCBh
cmd1bWVudHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCByZWFkT25seSkpOworfQorCitTUUxT
dGF0ZW1lbnQ6OlNRTFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVj
dG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNr
PiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrLCBib29sIHJlYWRPbmx5KQorICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50LmNyb3Nz
VGhyZWFkU3RyaW5nKCkpCisgICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCisgICAgLCBtX3N0
YXRlbWVudENhbGxiYWNrKGNhbGxiYWNrKQorICAgICwgbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNr
KGVycm9yQ2FsbGJhY2spCisgICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5KQoreworfQorCitib29s
IFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSogZGIpCit7CisgICAgQVNTRVJUKCFtX3Jl
c3VsdFNldCk7CisKKyAgICAvLyBJZiB3ZSdyZSByZS1ydW5uaW5nIHRoaXMgc3RhdGVtZW50IGFm
dGVyIGEgcXVvdGEgdmlvbGF0aW9uLCB3ZSBuZWVkIHRvIGNsZWFyIHRoYXQgZXJyb3Igbm93Cisg
ICAgY2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpOworCisgICAgLy8gVGhpcyB0cmFuc2FjdGlvbiBt
aWdodCBoYXZlIGJlZW4gbWFya2VkIGJhZCB3aGlsZSBpdCB3YXMgYmVpbmcgc2V0IHVwIG9uIHRo
ZSBtYWluIHRocmVhZCwKKyAgICAvLyBzbyBpZiB0aGVyZSBpcyBzdGlsbCBhbiBlcnJvciwgcmV0
dXJuIGZhbHNlLgorICAgIGlmIChtX2Vycm9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAobV9yZWFkT25seSkKKyAgICAgICAgZGItPnNldEF1dGhvcml6ZXJSZWFkT25seSgpOwor
CisgICAgU1FMaXRlRGF0YWJhc2UqIGRhdGFiYXNlID0gJmRiLT5zcWxpdGVEYXRhYmFzZSgpOwor
CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsK
KyAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKKworICAgIGlmIChyZXN1bHQg
IT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJVbmFibGUgdG8gdmVy
aWZ5IGNvcnJlY3RuZXNzIG9mIHN0YXRlbWVudCAlcyAtIGVycm9yICVpICglcykiLCBtX3N0YXRl
bWVudC5hc2NpaSgpLmRhdGEoKSwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6U1lOVEFYX0VSUiwg
ZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIC8vIEZJWE1FOiAgSWYgdGhlIHN0YXRlbWVudCB1c2VzIHRoZSA/IyMjIHN5bnRheCBz
dXBwb3J0ZWQgYnkgc3FsaXRlLCB0aGUgYmluZCBwYXJhbWV0ZXIgY291bnQgaXMgdmVyeSBsaWtl
bHkgb2ZmIGZyb20gdGhlIG51bWJlciBvZiBxdWVzdGlvbiBtYXJrcy4KKyAgICAvLyBJZiB0aGlz
IGlzIHRoZSBjYXNlLCB0aGV5IG1pZ2h0IGJlIHRyeWluZyB0byBkbyBzb21ldGhpbmcgZmlzaHkg
b3IgbWFsaWNpb3VzCisgICAgaWYgKHN0YXRlbWVudC5iaW5kUGFyYW1ldGVyQ291bnQoKSAhPSBt
X2FyZ3VtZW50cy5zaXplKCkpIHsKKyAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJCaW5kIHBhcmFt
ZXRlciBjb3VudCBkb2Vzbid0IG1hdGNoIG51bWJlciBvZiBxdWVzdGlvbiBtYXJrcyIpOworICAg
ICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6U1lOVEFYX0VSUiwgIm51
bWJlciBvZiAnPydzIGluIHN0YXRlbWVudCBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggYXJndW1lbnQg
Y291bnQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICByZXN1bHQg
PSBzdGF0ZW1lbnQuYmluZFZhbHVlKGkgKyAxLCBtX2FyZ3VtZW50c1tpXSk7CisgICAgICAgIGlm
IChyZXN1bHQgPT0gU1FMUmVzdWx0RnVsbCkgeworICAgICAgICAgICAgc2V0RmFpbHVyZUR1ZVRv
UXVvdGEoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJ
LCAiRmFpbGVkIHRvIGJpbmQgdmFsdWUgaW5kZXggJWkgdG8gc3RhdGVtZW50IGZvciBxdWVyeSAn
JXMnIiwgaSArIDEsIG1fc3RhdGVtZW50LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1f
ZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIGRhdGFiYXNl
LT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBSZWZQdHI8U1FMUmVzdWx0U2V0PiByZXN1bHRTZXQgPSBTUUxSZXN1bHRT
ZXQ6OmNyZWF0ZSgpOworCisgICAgLy8gU3RlcCBzbyB3ZSBjYW4gZmV0Y2ggdGhlIGNvbHVtbiBu
YW1lcy4KKyAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgIGlmIChyZXN1bHQgPT0g
U1FMUmVzdWx0Um93KSB7CisgICAgICAgIGludCBjb2x1bW5Db3VudCA9IHN0YXRlbWVudC5jb2x1
bW5Db3VudCgpOworICAgICAgICBTUUxSZXN1bHRTZXRSb3dMaXN0KiByb3dzID0gcmVzdWx0U2V0
LT5yb3dzKCk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsr
KQorICAgICAgICAgICAgcm93cy0+YWRkQ29sdW1uKHN0YXRlbWVudC5nZXRDb2x1bW5OYW1lKGkp
KTsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVt
bkNvdW50OyBpKyspCisgICAgICAgICAgICAgICAgcm93cy0+YWRkUmVzdWx0KHN0YXRlbWVudC5n
ZXRDb2x1bW5WYWx1ZShpKSk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCk7CisgICAgICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpOworCisgICAgICAg
IGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAgICAgbV9lcnJvciA9IFNR
TEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgZGF0YWJhc2UtPmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAocmVzdWx0ID09IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgLy8gRGlkbid0IGZpbmQg
YW55dGhpbmcsIG9yIHdhcyBhbiBpbnNlcnQKKyAgICAgICAgaWYgKGRiLT5sYXN0QWN0aW9uV2Fz
SW5zZXJ0KCkpCisgICAgICAgICAgICByZXN1bHRTZXQtPnNldEluc2VydElkKGRhdGFiYXNlLT5s
YXN0SW5zZXJ0Um93SUQoKSk7CisgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RnVs
bCkgeworICAgICAgICAvLyBSZXR1cm4gdGhlIFF1b3RhIGVycm9yIC0gdGhlIGRlbGVnYXRlIHdp
bGwgYmUgYXNrZWQgZm9yIG1vcmUgc3BhY2UgYW5kIHRoaXMgc3RhdGVtZW50IG1pZ2h0IGJlIHJl
LXJ1bgorICAgICAgICBzZXRGYWlsdXJlRHVlVG9RdW90YSgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FM
RXJyb3I6OkRBVEFCQVNFX0VSUiwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEZJWE1FOiBJZiB0aGUgc3BlYyBhbGxvd3Mg
dHJpZ2dlcnMsIGFuZCB3ZSB3YW50IHRvIGJlICJhY2N1cmF0ZSIgaW4gYSBkaWZmZXJlbnQgd2F5
LCB3ZSdkIHVzZQorICAgIC8vIHNxbGl0ZTNfdG90YWxfY2hhbmdlcygpIGhlcmUgaW5zdGVhZCBv
ZiBzcWxpdGUzX2NoYW5nZWQsIGJlY2F1c2UgdGhhdCBpbmNsdWRlcyByb3dzIG1vZGlmaWVkIGZy
b20gd2l0aGluIGEgdHJpZ2dlcgorICAgIC8vIEZvciBub3csIHRoaXMgc2VlbXMgc3VmZmljaWVu
dAorICAgIHJlc3VsdFNldC0+c2V0Um93c0FmZmVjdGVkKGRhdGFiYXNlLT5sYXN0Q2hhbmdlcygp
KTsKKworICAgIG1fcmVzdWx0U2V0ID0gcmVzdWx0U2V0OworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFNRTFN0YXRlbWVudDo6c2V0RGF0YWJhc2VEZWxldGVkRXJyb3IoKQoreworICAgIEFT
U0VSVCghbV9lcnJvciAmJiAhbV9yZXN1bHRTZXQpOworICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6
Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVuYWJsZSB0byBleGVjdXRlIHN0YXRlbWVu
dCwgYmVjYXVzZSB0aGUgdXNlciBkZWxldGVkIHRoZSBkYXRhYmFzZSIpOworfQorCit2b2lkIFNR
TFN0YXRlbWVudDo6c2V0VmVyc2lvbk1pc21hdGNoZWRFcnJvcigpCit7CisgICAgQVNTRVJUKCFt
X2Vycm9yICYmICFtX3Jlc3VsdFNldCk7CisgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
U1FMRXJyb3I6OlZFUlNJT05fRVJSLCAiY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSBh
bmQgYG9sZFZlcnNpb25gIGFyZ3VtZW50IGRvIG5vdCBtYXRjaCIpOworfQorCitib29sIFNRTFN0
YXRlbWVudDo6cGVyZm9ybUNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sK
KyAgICBBU1NFUlQodHJhbnNhY3Rpb24pOworCisgICAgYm9vbCBjYWxsYmFja0Vycm9yID0gZmFs
c2U7CisKKyAgICAvLyBDYWxsIHRoZSBhcHByb3ByaWF0ZSBzdGF0ZW1lbnQgY2FsbGJhY2sgYW5k
IHRyYWNrIGlmIGl0IHJlc3VsdGVkIGluIGFuIGVycm9yLAorICAgIC8vIGJlY2F1c2UgdGhlbiB3
ZSBuZWVkIHRvIGp1bXAgdG8gdGhlIHRyYW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrLgorICAgIGlm
IChtX2Vycm9yKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2spOwor
ICAgICAgICBjYWxsYmFja0Vycm9yID0gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrLT5oYW5kbGVF
dmVudCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0
cmFuc2FjdGlvbiwgbV9lcnJvci5nZXQoKSk7CisgICAgfSBlbHNlIGlmIChtX3N0YXRlbWVudENh
bGxiYWNrKQorICAgICAgICBjYWxsYmFja0Vycm9yID0gIW1fc3RhdGVtZW50Q2FsbGJhY2stPmhh
bmRsZUV2ZW50KHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCksIHRyYW5zYWN0aW9uLCBtX3Jlc3VsdFNldC5nZXQoKSk7CisKKyAgICAvLyBOb3cgcmVsZWFz
ZSBvdXIgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIG1fc3RhdGVt
ZW50Q2FsbGJhY2sgPSAwOworICAgIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayA9IDA7CisKKyAg
ICByZXR1cm4gY2FsbGJhY2tFcnJvcjsKK30KKwordm9pZCBTUUxTdGF0ZW1lbnQ6OnNldEZhaWx1
cmVEdWVUb1F1b3RhKCkKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1fcmVzdWx0U2V0KTsK
KyAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6UVVPVEFfRVJSLCAidGhl
cmUgd2FzIG5vdCBlbm91Z2ggcmVtYWluaW5nIHN0b3JhZ2Ugc3BhY2UsIG9yIHRoZSBzdG9yYWdl
IHF1b3RhIHdhcyByZWFjaGVkIGFuZCB0aGUgdXNlciBkZWNsaW5lZCB0byBhbGxvdyBtb3JlIHNw
YWNlIik7Cit9CisKK3ZvaWQgU1FMU3RhdGVtZW50OjpjbGVhckZhaWx1cmVEdWVUb1F1b3RhKCkK
K3sKKyAgICBpZiAobGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSkKKyAgICAgICAgbV9l
cnJvciA9IDA7Cit9CisKK2Jvb2wgU1FMU3RhdGVtZW50OjpsYXN0RXhlY3V0aW9uRmFpbGVkRHVl
VG9RdW90YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZXJyb3IgJiYgbV9lcnJvci0+Y29kZSgp
ID09IFNRTEVycm9yOjpRVU9UQV9FUlI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0
ZW1lbnRTeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50
U3luYy5jcHAJKHJldmlzaW9uIDYyNDI0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dFN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNDkgKzI2LDMzIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
ICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNRTFN0
YXRlbWVudC5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudFN5bmMuaCIKIAogI2lmIEVOQUJMRShE
QVRBQkFTRSkKIAotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgot
I2luY2x1ZGUgIlNRTEVycm9yLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCisjaW5jbHVk
ZSAiU1FMRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCisjaW5jbHVkZSAi
U1FMVmFsdWUuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlNRTGl0
ZVN0YXRlbWVudC5oIgotI2luY2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiCi0jaW5jbHVk
ZSAiU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9u
LmgiCi0jaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVm
UHRyPFNRTFN0YXRlbWVudD4gU1FMU3RhdGVtZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBzdGF0
ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxT
dGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgYm9vbCByZWFkT25seSkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNRTFN0YXRlbWVudChzdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGVy
cm9yQ2FsbGJhY2ssIHJlYWRPbmx5KSk7Ci19Ci0KLVNRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50
KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVu
dHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkp
Ci0gICAgOiBtX3N0YXRlbWVudChzdGF0ZW1lbnQuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKK1NRTFN0
YXRlbWVudFN5bmM6OlNRTFN0YXRlbWVudFN5bmMoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNv
bnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgYm9vbCByZWFkT25seSkKKyAgICA6IG1f
c3RhdGVtZW50KHN0YXRlbWVudCkKICAgICAsIG1fYXJndW1lbnRzKGFyZ3VtZW50cykKLSAgICAs
IG1fc3RhdGVtZW50Q2FsbGJhY2soY2FsbGJhY2spCi0gICAgLCBtX3N0YXRlbWVudEVycm9yQ2Fs
bGJhY2soZXJyb3JDYWxsYmFjaykKICAgICAsIG1fcmVhZE9ubHkocmVhZE9ubHkpCiB7CisgICAg
QVNTRVJUKCFtX3N0YXRlbWVudC5pc0VtcHR5KCkpOwogfQogCi1ib29sIFNRTFN0YXRlbWVudDo6
ZXhlY3V0ZShEYXRhYmFzZSogZGIpCitQYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gU1FMU3RhdGVt
ZW50U3luYzo6ZXhlY3V0ZShEYXRhYmFzZVN5bmMqIGRiLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBBU1NFUlQoIW1fcmVzdWx0U2V0KTsKLQotICAgIC8vIElmIHdlJ3JlIHJlLXJ1bm5pbmcg
dGhpcyBzdGF0ZW1lbnQgYWZ0ZXIgYSBxdW90YSB2aW9sYXRpb24sIHdlIG5lZWQgdG8gY2xlYXIg
dGhhdCBlcnJvciBub3cKLSAgICBjbGVhckZhaWx1cmVEdWVUb1F1b3RhKCk7Ci0KLSAgICAvLyBU
aGlzIHRyYW5zYWN0aW9uIG1pZ2h0IGhhdmUgYmVlbiBtYXJrZWQgYmFkIHdoaWxlIGl0IHdhcyBi
ZWluZyBzZXQgdXAgb24gdGhlIG1haW4gdGhyZWFkLAotICAgIC8vIHNvIGlmIHRoZXJlIGlzIHN0
aWxsIGFuIGVycm9yLCByZXR1cm4gZmFsc2UuCi0gICAgaWYgKG1fZXJyb3IpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQogICAgIGlmIChtX3JlYWRPbmx5KQogICAgICAgICBkYi0+c2V0QXV0aG9y
aXplclJlYWRPbmx5KCk7CiAKQEAgLTc1LDMyICs2MCwyNiBAQCBib29sIFNRTFN0YXRlbWVudDo6
ZXhlY3V0ZShEYXRhYmFzZSogZGIpCiAKICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCpk
YXRhYmFzZSwgbV9zdGF0ZW1lbnQpOwogICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQucHJlcGFy
ZSgpOwotCiAgICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0coU3Rv
cmFnZUFQSSwgIlVuYWJsZSB0byB2ZXJpZnkgY29ycmVjdG5lc3Mgb2Ygc3RhdGVtZW50ICVzIC0g
ZXJyb3IgJWkgKCVzKSIsIG1fc3RhdGVtZW50LmFzY2lpKCkuZGF0YSgpLCByZXN1bHQsIGRhdGFi
YXNlLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRl
KFNRTEVycm9yOjpTWU5UQVhfRVJSLCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpTWU5UQVhfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogIElmIHRoZSBzdGF0ZW1l
bnQgdXNlcyB0aGUgPyMjIyBzeW50YXggc3VwcG9ydGVkIGJ5IHNxbGl0ZSwgdGhlIGJpbmQgcGFy
YW1ldGVyIGNvdW50IGlzIHZlcnkgbGlrZWx5IG9mZiBmcm9tIHRoZSBudW1iZXIgb2YgcXVlc3Rp
b24gbWFya3MuCi0gICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhleSBtaWdodCBiZSB0cnlp
bmcgdG8gZG8gc29tZXRoaW5nIGZpc2h5IG9yIG1hbGljaW91cwogICAgIGlmIChzdGF0ZW1lbnQu
YmluZFBhcmFtZXRlckNvdW50KCkgIT0gbV9hcmd1bWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgIExP
RyhTdG9yYWdlQVBJLCAiQmluZCBwYXJhbWV0ZXIgY291bnQgZG9lc24ndCBtYXRjaCBudW1iZXIg
b2YgcXVlc3Rpb24gbWFya3MiKTsKLSAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
U1FMRXJyb3I6OlNZTlRBWF9FUlIsICJudW1iZXIgb2YgJz8ncyBpbiBzdGF0ZW1lbnQgc3RyaW5n
IGRvZXMgbm90IG1hdGNoIGFyZ3VtZW50IGNvdW50Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXpl
KCk7ICsraSkgewogICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQuYmluZFZhbHVlKGkgKyAxLCBt
X2FyZ3VtZW50c1tpXSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RnVsbCkgewot
ICAgICAgICAgICAgc2V0RmFpbHVyZUR1ZVRvUXVvdGEoKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpRVU9UQV9FUlI7CisgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVz
dWx0T2spIHsKLSAgICAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRmFpbGVkIHRvIGJpbmQgdmFs
dWUgaW5kZXggJWkgdG8gc3RhdGVtZW50IGZvciBxdWVyeSAnJXMnIiwgaSArIDEsIG1fc3RhdGVt
ZW50LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3Jl
YXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6
REFUQUJBU0VfRVJSOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTEyMyw3OSArMTAyLDI0IEBAIGJvb2wgU1FMU3RhdGVtZW50OjpleGVjdXRlKERhdGFiYXNl
KiBkYikKICAgICAgICAgfSB3aGlsZSAocmVzdWx0ID09IFNRTFJlc3VsdFJvdyk7CiAKICAgICAg
ICAgaWYgKHJlc3VsdCAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgICAgICBtX2Vycm9yID0g
U1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBkYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZWMgPSBT
UUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICAv
LyBEaWRuJ3QgZmluZCBhbnl0aGluZywgb3Igd2FzIGFuIGluc2VydAorICAgICAgICAvLyBEaWRu
J3QgZmluZCBhbnl0aGluZywgb3Igd2FzIGFuIGluc2VydC4KICAgICAgICAgaWYgKGRiLT5sYXN0
QWN0aW9uV2FzSW5zZXJ0KCkpCiAgICAgICAgICAgICByZXN1bHRTZXQtPnNldEluc2VydElkKGRh
dGFiYXNlLT5sYXN0SW5zZXJ0Um93SUQoKSk7CiAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gU1FM
UmVzdWx0RnVsbCkgewotICAgICAgICAvLyBSZXR1cm4gdGhlIFF1b3RhIGVycm9yIC0gdGhlIGRl
bGVnYXRlIHdpbGwgYmUgYXNrZWQgZm9yIG1vcmUgc3BhY2UgYW5kIHRoaXMgc3RhdGVtZW50IG1p
Z2h0IGJlIHJlLXJ1bgotICAgICAgICBzZXRGYWlsdXJlRHVlVG9RdW90YSgpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFF1b3RhIGVycm9yLCB0aGUgZGVsZWdhdGUgd2lsbCBi
ZSBhc2tlZCBmb3IgbW9yZSBzcGFjZSBhbmQgdGhpcyBzdGF0ZW1lbnQgbWlnaHQgYmUgcmUtcnVu
LgorICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6UVVPVEFfRVJSOworICAgICAgICByZXR1cm4g
MDsKICAgICB9IGVsc2UgewotICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxF
cnJvcjo6REFUQUJBU0VfRVJSLCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7Cisg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBJZiB0aGUgc3BlYyBhbGxv
d3MgdHJpZ2dlcnMsIGFuZCB3ZSB3YW50IHRvIGJlICJhY2N1cmF0ZSIgaW4gYSBkaWZmZXJlbnQg
d2F5LCB3ZSdkIHVzZQotICAgIC8vIHNxbGl0ZTNfdG90YWxfY2hhbmdlcygpIGhlcmUgaW5zdGVh
ZCBvZiBzcWxpdGUzX2NoYW5nZWQsIGJlY2F1c2UgdGhhdCBpbmNsdWRlcyByb3dzIG1vZGlmaWVk
IGZyb20gd2l0aGluIGEgdHJpZ2dlcgotICAgIC8vIEZvciBub3csIHRoaXMgc2VlbXMgc3VmZmlj
aWVudAogICAgIHJlc3VsdFNldC0+c2V0Um93c0FmZmVjdGVkKGRhdGFiYXNlLT5sYXN0Q2hhbmdl
cygpKTsKLQotICAgIG1fcmVzdWx0U2V0ID0gcmVzdWx0U2V0OwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFNRTFN0YXRlbWVudDo6c2V0RGF0YWJhc2VEZWxldGVkRXJyb3IoKQotewotICAg
IEFTU0VSVCghbV9lcnJvciAmJiAhbV9yZXN1bHRTZXQpOwotICAgIG1fZXJyb3IgPSBTUUxFcnJv
cjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVuYWJsZSB0byBleGVjdXRlIHN0YXRl
bWVudCwgYmVjYXVzZSB0aGUgdXNlciBkZWxldGVkIHRoZSBkYXRhYmFzZSIpOwotfQotCi12b2lk
IFNRTFN0YXRlbWVudDo6c2V0VmVyc2lvbk1pc21hdGNoZWRFcnJvcigpCi17Ci0gICAgQVNTRVJU
KCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7Ci0gICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVh
dGUoU1FMRXJyb3I6OlZFUlNJT05fRVJSLCAiY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFz
ZSBhbmQgYG9sZFZlcnNpb25gIGFyZ3VtZW50IGRvIG5vdCBtYXRjaCIpOwotfQotCi1ib29sIFNR
TFN0YXRlbWVudDo6cGVyZm9ybUNhbGxiYWNrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikK
LXsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24pOwotCi0gICAgYm9vbCBjYWxsYmFja0Vycm9yID0g
ZmFsc2U7Ci0KLSAgICAvLyBDYWxsIHRoZSBhcHByb3ByaWF0ZSBzdGF0ZW1lbnQgY2FsbGJhY2sg
YW5kIHRyYWNrIGlmIGl0IHJlc3VsdGVkIGluIGFuIGVycm9yLAotICAgIC8vIGJlY2F1c2UgdGhl
biB3ZSBuZWVkIHRvIGp1bXAgdG8gdGhlIHRyYW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrLgotICAg
IGlmIChtX2Vycm9yKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2sp
OwotICAgICAgICBjYWxsYmFja0Vycm9yID0gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrLT5oYW5k
bGVFdmVudCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCB0cmFuc2FjdGlvbiwgbV9lcnJvci5nZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChtX3N0YXRlbWVu
dENhbGxiYWNrKQotICAgICAgICBjYWxsYmFja0Vycm9yID0gIW1fc3RhdGVtZW50Q2FsbGJhY2st
PmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCksIHRyYW5zYWN0aW9uLCBtX3Jlc3VsdFNldC5nZXQoKSk7Ci0KLSAgICAvLyBOb3cgcmVs
ZWFzZSBvdXIgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgotICAgIG1fc3Rh
dGVtZW50Q2FsbGJhY2sgPSAwOwotICAgIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayA9IDA7Ci0K
LSAgICByZXR1cm4gY2FsbGJhY2tFcnJvcjsKLX0KLQotdm9pZCBTUUxTdGF0ZW1lbnQ6OnNldEZh
aWx1cmVEdWVUb1F1b3RhKCkKLXsKLSAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1fcmVzdWx0U2V0
KTsKLSAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6UVVPVEFfRVJSLCAi
dGhlcmUgd2FzIG5vdCBlbm91Z2ggcmVtYWluaW5nIHN0b3JhZ2Ugc3BhY2UsIG9yIHRoZSBzdG9y
YWdlIHF1b3RhIHdhcyByZWFjaGVkIGFuZCB0aGUgdXNlciBkZWNsaW5lZCB0byBhbGxvdyBtb3Jl
IHNwYWNlIik7Ci19Ci0KLXZvaWQgU1FMU3RhdGVtZW50OjpjbGVhckZhaWx1cmVEdWVUb1F1b3Rh
KCkKLXsKLSAgICBpZiAobGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSkKLSAgICAgICAg
bV9lcnJvciA9IDA7Ci19Ci0KLWJvb2wgU1FMU3RhdGVtZW50OjpsYXN0RXhlY3V0aW9uRmFpbGVk
RHVlVG9RdW90YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZXJyb3IgJiYgbV9lcnJvci0+Y29k
ZSgpID09IFNRTEVycm9yOjpRVU9UQV9FUlI7CisgICAgcmV0dXJuIHJlc3VsdFNldC5yZWxlYXNl
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9T
UUxTdGF0ZW1lbnRTeW5jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRl
bWVudFN5bmMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRT
eW5jLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNRTFN0YXRlbWVudFN5
bmNfaAorI2RlZmluZSBTUUxTdGF0ZW1lbnRTeW5jX2gKKworI2lmIEVOQUJMRShEQVRBQkFTRSkK
KworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRGF0YWJh
c2VTeW5jOworY2xhc3MgU1FMUmVzdWx0U2V0OworCitjbGFzcyBTUUxTdGF0ZW1lbnRTeW5jIHsK
K3B1YmxpYzoKKyAgICBTUUxTdGF0ZW1lbnRTeW5jKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBj
b25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIGJvb2wgcmVhZE9ubHkpOworCisgICAg
UGFzc1JlZlB0cjxTUUxSZXN1bHRTZXQ+IGV4ZWN1dGUoRGF0YWJhc2VTeW5jKiwgRXhjZXB0aW9u
Q29kZSYpOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX3N0YXRlbWVudDsKKyAgICBWZWN0b3I8
U1FMVmFsdWU+IG1fYXJndW1lbnRzOworICAgIGJvb2wgbV9yZWFkT25seTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKKworI2VuZGlm
IC8vIFNRTFN0YXRlbWVudFN5bmNfaApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3Bw
CShyZXZpc2lvbiA2MjkyMykKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKIAogI2luY2x1ZGUgIkRhdGFiYXNlLmgi
CiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgpAQCAtMzcwLDcgKzM2OSw3IEBAIGJvb2wg
U1FMVHJhbnNhY3Rpb246OnJ1bkN1cnJlbnRTdGF0ZW1lbnQKICAgICAgICAgICAgIC8vIEZsYWcg
dGhpcyB0cmFuc2FjdGlvbiBhcyBoYXZpbmcgY2hhbmdlZCB0aGUgZGF0YWJhc2UgZm9yIGxhdGVy
IGRlbGVnYXRlIG5vdGlmaWNhdGlvbgogICAgICAgICAgICAgbV9tb2RpZmllZERhdGFiYXNlID0g
dHJ1ZTsKICAgICAgICAgICAgIC8vIEFsc28gZGlydHkgdGhlIHNpemUgb2YgdGhpcyBkYXRhYmFz
ZSBmaWxlIGZvciBjYWxjdWxhdGluZyBxdW90YSB1c2FnZQotICAgICAgICAgICAgbV9kYXRhYmFz
ZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhlY3V0ZVN0YXRlbWVudCh0aGlzKTsKKyAgICAg
ICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZEV4ZWN1dGVTdGF0ZW1l
bnQoZGF0YWJhc2UoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobV9jdXJyZW50U3RhdGVt
ZW50LT5oYXNTdGF0ZW1lbnRDYWxsYmFjaygpKSB7CkBAIC00MzIsNyArNDMxLDcgQEAgdm9pZCBT
UUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVhcwogICAgIEFTU0VSVChtX2N1cnJlbnRT
dGF0ZW1lbnQpOwogICAgIEFTU0VSVCghbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQpOwog
Ci0gICAgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLT50cmFuc2Fj
dGlvbkNsaWVudCgpLT5kaWRFeGNlZWRRdW90YSh0aGlzKTsKKyAgICBtX3Nob3VsZFJldHJ5Q3Vy
cmVudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZEV4Y2Vl
ZFF1b3RhKGRhdGFiYXNlKCkpOwogCiAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6
cnVuU3RhdGVtZW50czsKICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgcnVuU3RhdGVt
ZW50cyBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwpAQCAtNDcyLDcgKzQ3MSw3IEBAIHZv
aWQgU1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRDb21taXQKIAogICAgIC8vIFRoZSBjb21t
aXQgd2FzIHN1Y2Nlc3NmdWwuIElmIHRoZSB0cmFuc2FjdGlvbiBtb2RpZmllZCB0aGlzIGRhdGFi
YXNlLCBub3RpZnkgdGhlIGRlbGVnYXRlcy4KICAgICBpZiAobV9tb2RpZmllZERhdGFiYXNlKQot
ICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRDb21taXRUcmFuc2Fj
dGlvbih0aGlzKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlk
Q29tbWl0V3JpdGVUcmFuc2FjdGlvbihkYXRhYmFzZSgpKTsKIAogICAgIC8vIE5vdyByZWxlYXNl
IG91ciB1bm5lZWRlZCBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCiAgICAg
bV9jYWxsYmFjayA9IDA7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkocmV2aXNpb24g
NjI5MjMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTcgKzMwLDE1IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+Ci0KKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVk
ZSAiU1FMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIGludCBFeGNl
cHRpb25Db2RlOwotCiBjbGFzcyBEYXRhYmFzZTsKIGNsYXNzIFNRTEVycm9yOwogY2xhc3MgU1FM
aXRlVHJhbnNhY3Rpb247CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxi
YWNrLmgJKHJldmlzaW9uIDYyOTIzKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaWYgRU5BQkxF
KERBVEFCQVNFKQogCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlU2hhcmVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCShyZXZpc2lvbiA2MjkyMykKKysrIFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDM2ICszMywyNyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSAiQ2hy
b21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIK
LSNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgorI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENv
bW1pdFRyYW5zYWN0aW9uKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3ZvaWQgU1FMVHJh
bnNhY3Rpb25DbGllbnQ6OmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oQWJzdHJhY3REYXRhYmFz
ZSogZGF0YWJhc2UpCiB7Ci0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSB0cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgp
LT5nZXRUaHJlYWRJRCgpKTsKLSAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0cmFuc2FjdGlvbi0+
ZGF0YWJhc2UoKTsKICAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zY2hlZHVsZU5vdGlm
eURhdGFiYXNlQ2hhbmdlZCgKICAgICAgICAgZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCksIGRh
dGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uQ2xp
ZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3Zv
aWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQoQWJzdHJhY3REYXRh
YmFzZSogZGF0YWJhc2UpCiB7Ci0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSB0cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVh
ZCgpLT5nZXRUaHJlYWRJRCgpKTsKLSAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kYXRh
YmFzZUNoYW5nZWQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkpOworICAgIERhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlcigpLmRhdGFiYXNlQ2hhbmdlZChkYXRhYmFzZSk7CiB9CiAKLWJvb2wgU1FMVHJh
bnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bikKK2Jvb2wgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZEV4Y2VlZFF1b3RhKEFic3RyYWN0RGF0
YWJhc2UqIGRhdGFiYXNlKQogewotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgRGF0YWJh
c2UqIGRhdGFiYXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7Ci0KKyAgICBBU1NFUlQoZGF0
YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50UXVvdGEgPSBEYXRhYmFzZVRyYWNrZXI6OnRyYWNr
ZXIoKS5xdW90YUZvck9yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgZGF0
YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGRh
dGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdR
dW90YSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnF1b3RhRm9yT3JpZ2luKGRhdGFiYXNl
LT5zZWN1cml0eU9yaWdpbigpKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bkNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNs
aWVudC5oCShyZXZpc2lvbiA2MjkyMykKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bkNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNiArMzcsMTcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0gICAgY2xhc3MgU1FMVHJhbnNhY3Rpb247CitjbGFzcyBBYnN0cmFjdERh
dGFiYXNlOworCisvLyBBIGNsaWVudCB0byB0aGUgU1FMVHJhbnNhY3Rpb24gY2xhc3MuIEFsbG93
cyBTUUxUcmFuc2FjdGlvbiB0byBub3RpZnkgaW50ZXJlc3RlZAorLy8gcGFydGllcyB0aGF0IGNl
cnRhaW4gdGhpbmdzIGhhdmUgaGFwcGVuZWQgaW4gYSB0cmFuc2FjdGlvbi4KK2NsYXNzIFNRTFRy
YW5zYWN0aW9uQ2xpZW50IDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICB2b2lk
IGRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oQWJzdHJhY3REYXRhYmFzZSopOworICAgIHZvaWQg
ZGlkRXhlY3V0ZVN0YXRlbWVudChBYnN0cmFjdERhdGFiYXNlKik7CisgICAgYm9vbCBkaWRFeGNl
ZWRRdW90YShBYnN0cmFjdERhdGFiYXNlKik7Cit9OwogCi0gICAgLy8gQSBjbGllbnQgdG8gdGhl
IFNRTFRyYW5zYWN0aW9uIGNsYXNzLiBBbGxvd3MgU1FMVHJhbnNhY3Rpb24gdG8gbm90aWZ5IGlu
dGVyZXN0ZWQKLSAgICAvLyBwYXJ0aWVzIHRoYXQgY2VydGFpbiB0aGluZ3MgaGF2ZSBoYXBwZW5l
ZCBpbiBhIHRyYW5zYWN0aW9uLgotICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ2xpZW50IDogcHVi
bGljIE5vbmNvcHlhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgZGlkQ29tbWl0VHJh
bnNhY3Rpb24oU1FMVHJhbnNhY3Rpb24qKTsKLSAgICAgICAgdm9pZCBkaWRFeGVjdXRlU3RhdGVt
ZW50KFNRTFRyYW5zYWN0aW9uKik7Ci0gICAgICAgIGJvb2wgZGlkRXhjZWVkUXVvdGEoU1FMVHJh
bnNhY3Rpb24qKTsKLSAgICB9OwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAkocmV2
aXNpb24gNjI5MjMpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShEQVRB
QkFTRSkKIAotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVNoYXJlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwCShyZXZpc2lvbiA2MjkyMykKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDI4ICsyLDMw
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzIsMTcgKzM0LDI2
IEBACiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiU1FMRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCisjaW5j
bHVkZSAiU1FMU3RhdGVtZW50U3luYy5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ2xpZW50
LmgiCiAjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCIKICNpbmNsdWRlICJT
UUxWYWx1ZS5oIgorI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBTUUxU
cmFuc2FjdGlvbkNsaWVudCogdHJhbnNhY3Rpb25DbGllbnQoKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU1FMVHJhbnNhY3Rpb25DbGllbnQsIHRyYW5zYWN0aW9uQ2xpZW50LCAoKSk7Cisg
ICAgcmV0dXJuICZ0cmFuc2FjdGlvbkNsaWVudDsKK30KKwogUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvblN5bmM+IFNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRlKERhdGFiYXNlU3luYyogZGIsIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRP
bmx5KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMVHJhbnNhY3Rpb25TeW5jKGRiLCBj
YWxsYmFjaywgcmVhZE9ubHkpKTsKQEAgLTUyLDIyICs2MywxNDkgQEAgU1FMVHJhbnNhY3Rpb25T
eW5jOjpTUUxUcmFuc2FjdGlvblN5bmMoRAogICAgIDogbV9kYXRhYmFzZShkYikKICAgICAsIG1f
Y2FsbGJhY2soY2FsbGJhY2spCiAgICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5KQorICAgICwgbV9t
b2RpZmllZERhdGFiYXNlKGZhbHNlKQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBBU1NFUlQoY2FsbGJh
Y2spOwogfQogCiBTUUxUcmFuc2FjdGlvblN5bmM6On5TUUxUcmFuc2FjdGlvblN5bmMoKQogewog
ICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4
dFRocmVhZCgpKTsKKyAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbiAmJiBtX3NxbGl0ZVRyYW5z
YWN0aW9uLT5pblByb2dyZXNzKCkpCisgICAgICAgIHJvbGxiYWNrKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8U1FMUmVzdWx0U2V0PiBTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTUUwoY29uc3QgU3Ry
aW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3Bl
bmVkKCkpIHsKKyAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UtPnZlcnNpb25NYXRjaGVz
RXhwZWN0ZWQoKSkgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6VkVSU0lPTl9FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChzcWxTdGF0ZW1lbnQuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gbV9yZWFkT25s
eSB8fCBtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRGF0YWJhc2VSZWFk
T25seSgpOworICAgIFNRTFN0YXRlbWVudFN5bmMgc3RhdGVtZW50KHNxbFN0YXRlbWVudCwgYXJn
dW1lbnRzLCByZWFkT25seU1vZGUpOworCisgICAgbV9kYXRhYmFzZS0+cmVzZXRBdXRob3JpemVy
KCk7CisgICAgYm9vbCByZXRyeVN0YXRlbWVudCA9IHRydWU7CisgICAgUmVmUHRyPFNRTFJlc3Vs
dFNldD4gcmVzdWx0U2V0OworICAgIHdoaWxlIChyZXRyeVN0YXRlbWVudCkgeworICAgICAgICBy
ZXRyeVN0YXRlbWVudCA9IGZhbHNlOworICAgICAgICByZXN1bHRTZXQgPSBzdGF0ZW1lbnQuZXhl
Y3V0ZShtX2RhdGFiYXNlLmdldCgpLCBlYyk7CisgICAgICAgIGlmICghcmVzdWx0U2V0KSB7Cisg
ICAgICAgICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5U3FsaXRl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGlmIChlYyA9PSBT
UUxFeGNlcHRpb246OlFVT1RBX0VSUikgeworICAgICAgICAgICAgICAgIGlmICh0cmFuc2FjdGlv
bkNsaWVudCgpLT5kaWRFeGNlZWRRdW90YShkYXRhYmFzZSgpKSkgeworICAgICAgICAgICAgICAg
ICAgICBlYyA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldHJ5U3RhdGVtZW50ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9kYXRhYmFzZS0+bGFz
dEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpKSB7CisgICAgICAgIG1fbW9kaWZpZWREYXRhYmFzZSA9
IHRydWU7CisgICAgICAgIHRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZEV4ZWN1dGVTdGF0ZW1lbnQo
ZGF0YWJhc2UoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdFNldC5yZWxlYXNlKCk7Cit9
CisKK0V4Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpiZWdpbigpCit7CisgICAgQVNT
RVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFk
KCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpCisgICAgICAgIHJldHVybiBTUUxF
eGNlcHRpb246OlVOS05PV05fRVJSOworCisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVE
YXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKworICAgIC8vIFNldCB0aGUgbWF4
aW11bSB1c2FnZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiBpZiB0aGlzIHRyYW5zYWN0aW9ucyBpcyBu
b3QgcmVhZC1vbmx5LgorICAgIGlmICghbV9yZWFkT25seSkKKyAgICAgICAgbV9kYXRhYmFzZS0+
c3FsaXRlRGF0YWJhc2UoKS5zZXRNYXhpbXVtU2l6ZShtX2RhdGFiYXNlLT5tYXhpbXVtU2l6ZSgp
KTsKKworICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlvbik7CisgICAgbV9zcWxpdGVUcmFu
c2FjdGlvbi5zZXQobmV3IFNRTGl0ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFi
YXNlKCksIG1fcmVhZE9ubHkpKTsKKworICAgIG1fZGF0YWJhc2UtPnJlc2V0RGVsZXRlcygpOwor
ICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7CisgICAgbV9zcWxpdGVUcmFuc2Fj
dGlvbi0+YmVnaW4oKTsKKyAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAg
ICAvLyBDaGVjayBpZiBiZWdpbigpIHN1Y2NlZWRlZC4KKyAgICBpZiAoIW1fc3FsaXRlVHJhbnNh
Y3Rpb24tPmluUHJvZ3Jlc3MoKSkgeworICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0
ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgICAgICBtX3NxbGl0ZVRy
YW5zYWN0aW9uLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OkRBVEFCQVNF
X0VSUjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworRXhjZXB0aW9uQ29kZSBTUUxUcmFu
c2FjdGlvblN5bmM6OmV4ZWN1dGUoKQoreworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBpZiAoIW1fZGF0YWJh
c2UtPm9wZW5lZCgpIHx8ICFtX2NhbGxiYWNrIHx8ICFtX2NhbGxiYWNrLT5oYW5kbGVFdmVudCht
X2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMpKSB7CisgICAgICAgIG1f
Y2FsbGJhY2sgPSAwOworICAgICAgICByZXR1cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsK
KyAgICB9CisKKyAgICBtX2NhbGxiYWNrID0gMDsKKyAgICByZXR1cm4gMDsKIH0KIAotUGFzc1Jl
ZlB0cjxTUUxSZXN1bHRTZXQ+IFNRTFRyYW5zYWN0aW9uU3luYzo6ZXhlY3V0ZVNRTChjb25zdCBT
dHJpbmcmLCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiwgRXhjZXB0aW9uQ29kZSYpCitFeGNlcHRp
b25Db2RlIFNRTFRyYW5zYWN0aW9uU3luYzo6Y29tbWl0KCkKIHsKICAgICBBU1NFUlQobV9kYXRh
YmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAg
aWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSkKKyAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6
VU5LTk9XTl9FUlI7CisKKyAgICBBU1NFUlQobV9zcWxpdGVUcmFuc2FjdGlvbik7CisKKyAgICBt
X2RhdGFiYXNlLT5kaXNhYmxlQXV0aG9yaXplcigpOworICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24t
PmNvbW1pdCgpOworICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1dGhvcml6ZXIoKTsKKworICAgIC8v
IElmIHRoZSBjb21taXQgZmFpbGVkLCB0aGUgdHJhbnNhY3Rpb24gd2lsbCBzdGlsbCBiZSBtYXJr
ZWQgYXMgImluIHByb2dyZXNzIgorICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dy
ZXNzKCkpCisgICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsKKworICAg
IG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKKworICAgIC8vIFZhY3V1bSB0aGUgZGF0YWJh
c2UgaWYgYW55dGhpbmcgd2FzIGRlbGV0ZWQuCisgICAgaWYgKG1fZGF0YWJhc2UtPmhhZERlbGV0
ZXMoKSkKKyAgICAgICAgbV9kYXRhYmFzZS0+aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpOwor
CisgICAgLy8gVGhlIGNvbW1pdCB3YXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIHRyYW5zYWN0aW9uIG1v
ZGlmaWVkIHRoaXMgZGF0YWJhc2UsIG5vdGlmeSB0aGUgZGVsZWdhdGVzLgorICAgIGlmIChtX21v
ZGlmaWVkRGF0YWJhc2UpCisgICAgICAgIHRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZENvbW1pdFdy
aXRlVHJhbnNhY3Rpb24oZGF0YWJhc2UoKSk7CisKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBT
UUxUcmFuc2FjdGlvblN5bmM6OnJvbGxiYWNrKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFzZS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgbV9kYXRh
YmFzZS0+ZGlzYWJsZUF1dGhvcml6ZXIoKTsKKyAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbikg
eworICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOworICAgICAgICBtX3Nx
bGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgfQorICAgIG1fZGF0YWJhc2UtPmVuYWJsZUF1
dGhvcml6ZXIoKTsKKworICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS50
cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvblN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25TeW5jLmgJKHJldmlzaW9uIDYyOTIzKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uU3luYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDQ2ICsyLDQ5IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
ICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
KwogI2lmbmRlZiBTUUxUcmFuc2FjdGlvblN5bmNfaAogI2RlZmluZSBTUUxUcmFuc2FjdGlvblN5
bmNfaAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRl
ZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQogY2xhc3MgRGF0YWJhc2VTeW5jOwogY2xhc3MgU1FMUmVz
dWx0U2V0OwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7CiBjbGFzcyBTUUxWYWx1
ZTsKK2NsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uOwogY2xhc3MgU3RyaW5nOwogCiAvLyBJbnN0YW5j
ZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9uIHRoZSB3
b3JrZXIncyBjb250ZXh0IHRocmVhZC4KQEAgLTU2LDEyICs1OSwyMCBAQCBwdWJsaWM6CiAgICAg
RGF0YWJhc2VTeW5jKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KICAg
ICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5OyB9CiAKKyAgICBF
eGNlcHRpb25Db2RlIGJlZ2luKCk7CisgICAgRXhjZXB0aW9uQ29kZSBleGVjdXRlKCk7CisgICAg
RXhjZXB0aW9uQ29kZSBjb21taXQoKTsKKyAgICB2b2lkIHJvbGxiYWNrKCk7CisKIHByaXZhdGU6
CiAgICAgU1FMVHJhbnNhY3Rpb25TeW5jKERhdGFiYXNlU3luYyosIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5KTsKIAogICAgIFJlZlB0cjxEYXRh
YmFzZVN5bmM+IG1fZGF0YWJhc2U7CiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrPiBtX2NhbGxiYWNrOwogICAgIGJvb2wgbV9yZWFkT25seTsKKworICAgIGJvb2wgbV9tb2Rp
ZmllZERhdGFiYXNlOworICAgIE93blB0cjxTUUxpdGVUcmFuc2FjdGlvbj4gbV9zcWxpdGVUcmFu
c2FjdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsCShyZXZpc2lvbiA2MjkyMykKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yLDI4ICsyLDMw
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAogbW9kdWxlIHN0b3JhZ2UgewpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgJKHJldmlzaW9uIDYyOTIzKQorKysg
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIsMjggKzIsMzAgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICpUcmFuc2FjdGlvbgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZu
ZGVmIFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrX2gKQEAgLTMyLDcgKzM0LDYgQEAKICNpZiBF
TkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGwJKHJldmlzaW9uIDYy
OTIzKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMiwyOCArMiwzMCBAQAogICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKIG1vZHVsZSBz
dG9yYWdlIHsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNs
aWVudENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0v
U1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDYyOTIzKQorKysgV2Vi
Q29yZS9zdG9yYWdlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwxOCArMzEsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTUUxUcmFuc2FjdGlvbkNsaWVudC5oIgogCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VPYnNlcnZl
ci5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Tm90
aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzaz4gY3JlYXRlKERhdGFiYXNlICpkYXRhYmFzZSkKKyAgICBz
dGF0aWMgUGFzc093blB0cjxOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrPiBjcmVhdGUoQWJzdHJh
Y3REYXRhYmFzZSAqZGF0YWJhc2UpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IE5vdGlmeURh
dGFiYXNlQ2hhbmdlZFRhc2soZGF0YWJhc2UpOwogICAgIH0KQEAgLTUzLDM0ICs1MCwzNSBAQCBw
dWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIE5vdGlmeURhdGFiYXNlQ2hhbmdlZFRhc2so
UGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UpCisgICAgTm90aWZ5RGF0YWJhc2VDaGFuZ2Vk
VGFzayhQYXNzUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IGRhdGFiYXNlKQogICAgICAgICA6IG1f
ZGF0YWJhc2UoZGF0YWJhc2UpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxEYXRhYmFzZT4g
bV9kYXRhYmFzZTsKKyAgICBSZWZQdHI8QWJzdHJhY3REYXRhYmFzZT4gbV9kYXRhYmFzZTsKIH07
CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENvbW1pdFRyYW5zYWN0aW9uKFNRTFRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3ZvaWQgU1FMVHJhbnNhY3Rpb25DbGllbnQ6OmRpZENv
bW1pdFdyaXRlVHJhbnNhY3Rpb24oQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7Ci0gICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKLSAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soTm90aWZ5RGF0
YWJhc2VDaGFuZ2VkVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKSk7CisgICAg
aWYgKCFkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQo
KSkgeworICAgICAgICBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFz
ayhOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrOjpjcmVhdGUoZGF0YWJhc2UpKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KKworICAgIFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmRhdGFiYXNl
TW9kaWZpZWQoZGF0YWJhc2UpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRF
eGVjdXRlU3RhdGVtZW50KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3ZvaWQgU1FMVHJh
bnNhY3Rpb25DbGllbnQ6OmRpZEV4ZWN1dGVTdGF0ZW1lbnQoQWJzdHJhY3REYXRhYmFzZSogZGF0
YWJhc2UpCiB7CiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGFmdGVyIGV4ZWN1dGluZyBl
dmVyeSBzdGF0ZW1lbnQgdGhhdCBjaGFuZ2VzIHRoZSBEQi4KICAgICAvLyBDaHJvbWl1bSBkb2Vz
bid0IG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgdGhhdCBwb2ludC4KLSAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwogfQogCi1ib29sIFNRTFRy
YW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YShTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24pCitib29sIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YShBYnN0cmFjdERh
dGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICAvLyBDaHJvbWl1bSBkb2VzIG5vdCBhbGxvdyB1c2Vy
cyB0byBtYW51YWxseSBjaGFuZ2UgdGhlIHF1b3RhIGZvciBhbiBvcmlnaW4gKGZvciBub3csIGF0
IGxlYXN0KS4KICAgICAvLyBEb24ndCBkbyBhbnl0aGluZy4KLSAgICBBU1NFUlQodHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFk
KCkpOworICAgIEFTU0VSVChkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0Nv
bnRleHRUaHJlYWQoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biA2MjkyMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDk0IEBACisyMDEwLTA3LTA5ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUG9y
dGluZyBhcyBtYW55IGFzeW5jIERCIHRlc3RzIGFzIHBvc3NpYmxlIHRvIHN5bmMgREJzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA2MDcKKworICAg
ICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1z
eW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
Y2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVt
ZW50LXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3Rv
cmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dv
cmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2Nl
cHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRl
bWVudC1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL211
bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNh
Y3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5j
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Bl
bi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1k
YXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93
b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy1leHBlY3RlZC50eHQ6IENv
cGllZCBmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
c3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sLgorICAg
ICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNp
b24tc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4
cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVu
LWRhdGFiYXNlLXN5bmMtaW5wdXRzLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC93b3Jr
ZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1z
eW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVy
c2lvbi1oYW5kbGUtcmV1c2Utc3luYy5qczogQWRkZWQuCisgICAgICAgIChjYXRjaCk6CisgICAg
ICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMt
MS5qczogQWRkZWQuCisgICAgICAgICgpOgorICAgICAgICAodHJ5KToKKyAgICAgICAgKiBmYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0yLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZW1wdHktc3RhdGVt
ZW50LXN5bmMuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9leGVjdXRlLXNxbC1hcmdzLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAodGhyb3dPblRv
U3RyaW5nT2JqZWN0LnRvU3RyaW5nKToKKyAgICAgICAgKHZhcik6CisgICAgICAgICgpOgorICAg
ICAgICAocnVuVHJhbnNhY3Rpb25UZXN0KToKKyAgICAgICAgKHJ1blRyYW5zYWN0aW9uVGVzdHMp
OgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9leGVjdXRlc3FsLWFj
Y2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuanM6IEFkZGVkLgorICAgICAgICAoZXhlY3V0
ZVN0YXRlbWVudCk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211
bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmpzOiBBZGRlZC4K
KyAgICAgICAgKHJ1blRyYW5zYWN0aW9uKToKKyAgICAgICAgKHZhcik6CisgICAgICAgICogZmFz
dC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1zeW5jLmpz
OiBBZGRlZC4KKyAgICAgICAgKGNoZWNrQ29tcGxldGlvbik6CisgICAgICAgIChydW5UZXN0LmRi
KToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jl
c291cmNlcy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMuanM6IEFkZGVkLgor
ICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWVt
cHR5LXZlcnNpb24tc3luYy5qczogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuanM6IENvcGllZCBmcm9tIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5
bmMtaW5wdXRzLmpzLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9v
cGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAq
IGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRz
LmpzOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9v
cGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMuanM6IEFkZGVk
LgorICAgICAgICAob3BlblRlc3REYXRhYmFzZSk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0
b3JhZ2UvcmVzb3VyY2VzL3NxbC1kYXRhLXR5cGVzLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAo
KToKKyAgICAgICAgKHRlc3REQlZhbHVlcyk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvcmVzb3VyY2VzL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5qczogQWRkZWQuCisgICAgICAg
ICh0ZXN0VHJhbnNhY3Rpb24pOgorICAgICAgICAoKToKKyAgICAgICAgKHRlc3RJbnZhbGlkU3Rh
dGVtZW50KToKKyAgICAgICAgKHRlc3RJbmNvcnJlY3ROdW1iZXJPZkJpbmRQYXJhbWV0ZXJzKToK
KyAgICAgICAgKHRlc3RCaW5kUGFyYW1ldGVyT2ZXcm9uZ1R5cGUuYmFkU3RyaW5nLnRvU3RyaW5n
KToKKyAgICAgICAgKHRlc3RCaW5kUGFyYW1ldGVyT2ZXcm9uZ1R5cGUpOgorICAgICAgICAodGVz
dFZlcnNpb25NaXNtYXRjaC50ZXN0VHJhbnNhY3Rpb24pOgorICAgICAgICAodGVzdFZlcnNpb25N
aXNtYXRjaCk6CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3Rlc3Qt
YXV0aG9yaXplci1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKGNsZWFudXApOgorICAgICAgICAo
ZXhlY3V0ZVN0YXRlbWVudCk6CisgICAgICAgIChjcmVhdGVUYWJsZUNhbGxiYWNrKToKKyAgICAg
ICAgKGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayk6CisgICAgICAgIChvdGhlclN0YXRlbWVudHND
YWxsYmFjayk6CisgICAgICAgIChkcm9wU3RhdGVtZW50c0NhbGxiYWNrKToKKyAgICAgICAgKHRl
c3RSZWFkV3JpdGVNb2RlKToKKyAgICAgICAgKHRlc3RSZWFkT25seU1vZGUpOgorICAgICAgICAq
IGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlv
bi1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0
YS10eXBlcy1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvc3FsLWRhdGEtdHlwZXMtc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNvZGVz
LXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1h
dXRob3JpemVyLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L3dvcmtlcnMvc3RvcmFnZS90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvdHJhbnNhY3Rp
b24taW4tdHJhbnNhY3Rpb24tc3luYy5odG1sOiBBZGRlZC4KKwogMjAxMC0wNy0wOCAgTmlrb2xh
cyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEaXJrIFNjaHVsemUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9j
aGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxl
LXJldXNlLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKK1Rlc3QgdGhhdCB0aGUgZGF0YWJh
c2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLgorUEFTUzogY2hh
bmdlVmVyc2lvbigpIHRyYW5zYWN0aW9uIGNhbGxiYWNrIHdhcyBjYWxsZWQuCitQQVNTOiBObyBl
eGNlcHRpb24gdGhyb3duIHdoaWxlIGV4ZWN1dGluZyBzdGF0ZW1lbnRzLgorUEFTUzogTm8gZXhj
ZXB0aW9uIHRocm93biB3aGlsZSBydW5uaW5nIGEgdHJhbnNhY3Rpb24uCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1z
eW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
Y2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVz
ZS1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL2NoYW5nZS12ZXJz
aW9uLWhhbmRsZS1yZXVzZS1zeW5jLmpzJykiPgorVGVzdCB0aGF0IHRoZSBkYXRhYmFzZSBjYW4g
YmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcgaXRzIHZlcnNpb24uCis8cHJlIGlkPSJjb25zb2xl
Ij4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzIEBACitUZXN0IHRoYXQgdmVyc2lvbiB1cGRhdGVzIGluIHN5bmMgZGF0YWJhc2VzIHdv
cmsgY29ycmVjdGx5LgorUEFTUzogZGIudmVyc2lvbiBpcyAzIGFzIGV4cGVjdGVkLgorCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5jLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdl
LXZlcnNpb24tc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ5IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtZXNzYWdl
KQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJIVE1MICs9
IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKQoreworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LmxvY2F0aW9uLnNlYXJjaCA9PSAiPzIiKSB7
CisgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCJyZXNvdXJjZXMvY2hhbmdlLXZlcnNp
b24tc3luYy0yLmpzIik7CisgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT0gImRvbmUiKQorICAgICAgICAgICAg
ICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2co
ZXZlbnQuZGF0YSk7CisgICAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHdvcmtl
ciA9IG5ldyBXb3JrZXIoInJlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1zeW5jLTEuanMiKTsKKyAg
ICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICBp
ZiAoZXZlbnQuZGF0YSA9PSAiZG9uZSIpCisgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9u
LmhyZWYgPSB3aW5kb3cubG9jYXRpb24gKyAiPzIiOworICAgICAgICAgICAgZWxzZSBpZiAoZXZl
bnQuZGF0YSA9PSAiZmFpbCIpCisgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvZyhldmVudC5kYXRhKTsKKyAgICAgICAgfTsK
KyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4K
K1Rlc3QgdGhhdCB2ZXJzaW9uIHVwZGF0ZXMgaW4gc3luYyBkYXRhYmFzZXMgd29yayBjb3JyZWN0
bHkuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L2VtcHR5LXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2VtcHR5LXN0YXRlbWVudC1zeW5jLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitUaGlzIHRlc3QgdHJpZXMgdG8gZXhl
Y3V0ZSBhbiBlbXB0eSBzdGF0ZW1lbnQuCitQQVNTOiByZXN1bHQgaXMgbnVsbAorUEFTUworCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3lu
Yy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2Vt
cHR5LXN0YXRlbWVudC1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90
ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9
InJ1blRlc3QoJ3Jlc291cmNlcy9lbXB0eS1zdGF0ZW1lbnQtc3luYy5qcycpIj4KK1RoaXMgdGVz
dCB0cmllcyB0byBleGVjdXRlIGFuIGVtcHR5IHN0YXRlbWVudC4KKzxwcmUgaWQ9ImNvbnNvbGUi
PgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtc3lu
Yy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDIwIEBACitUZXN0IHZhcmlvdXMgaW5wdXRzIHRvIGV4ZWN1dGVTcWwoKS4KK1BB
U1M6IGV4ZWN1dGVTcWwoIiIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhl
Y3V0ZVNxbCgiIiwgbnVsbCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uCitQQVNTOiBleGVj
dXRlU3FsKCIiLCB1bmRlZmluZWQpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzog
ZXhlY3V0ZVNxbCgiIiwgW10pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhl
Y3V0ZVNxbCgiIiwgWyAiYXJnMCIgXSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uCitQQVNT
OiBleGVjdXRlU3FsKCIiLCB7IH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzog
ZXhlY3V0ZVNxbCgiIiwgeyBsZW5ndGg6IDAgfSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24u
CitQQVNTOiBleGVjdXRlU3FsKCIiLCB7IGxlbmd0aDogMSwgMDogImFyZzAiIH0pIGRpZCBub3Qg
dGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhlY3V0ZVNxbCgpIHRocmV3IGFuIGV4Y2VwdGlv
biBhcyBleHBlY3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwobnVsbCkgdGhyZXcgYW4gZXhjZXB0aW9u
IGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCh1bmRlZmluZWQpIHRocmV3IGFuIGV4Y2Vw
dGlvbiBhcyBleHBlY3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwoMCkgdGhyZXcgYW4gZXhjZXB0aW9u
IGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCh0aHJvd09uVG9TdHJpbmdPYmplY3QpIHRo
cmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwoIiIsIHRocm93
T25HZXRMZW5ndGhPYmplY3QpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1M6
IGV4ZWN1dGVTcWwoIiIsIHRocm93T25HZXRaZXJvT2JqZWN0KSB0aHJldyBhbiBleGNlcHRpb24g
YXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKCIiLCBbIHRocm93T25Ub1N0cmluZ09iamVj
dCBdKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKCIi
LCAwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKCIi
LCAiIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdz
LXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEx
IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1j
b21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jl
c291cmNlcy9leGVjdXRlLXNxbC1hcmdzLXN5bmMuanMnKSI+CitUZXN0IHZhcmlvdXMgaW5wdXRz
IHRvIGV4ZWN1dGVTcWwoKS4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlc3Fs
LWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1v
bmx5LW9uZS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUt
c3RhdGVtZW50LXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBA
CitUZXN0IHRoYXQgZXhlY3V0ZVNxbCgpIGFjY2VwdHMgb25seSBvbmUgc3RhdGVtZW50LgorUEFT
UzogSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDEpCitQQVNTOiBJTlNFUlQgSU5UTyBUZXN0IFZB
TFVFUyAoMik7CitQQVNTOiAgICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMykgICAgCitQQVNT
OiAgICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoNCk7ICAgCitQQVNTOiBJTlNFUlQgSU5UTyBU
ZXN0IFZBTFVFUyAoNSkgICA7CitQQVNTOiBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoNik7IGdh
cmJhZ2UKK1BBU1M6IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg3KTsgSU5TRVJUIElOVE8gVGVz
dCBWQUxVRVMgKDgpCitQQVNTOiAgIElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg5KTsgICBJTlNF
UlQgSU5UTyBUZXN0IFZBTFVFUyAoMTApOyAgIAorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVj
dXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1v
bmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBA
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21t
b24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291
cmNlcy9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuanMnKSI+CitU
ZXN0IHRoYXQgZXhlY3V0ZVNxbCgpIGFjY2VwdHMgb25seSBvbmUgc3RhdGVtZW50LgorPHByZSBp
ZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQt
aGFuZGxlcy1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRs
ZXMtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMt
c3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCB0aGF0
IGV4ZWN1dGluZyBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8g
dGhlIHNhbWUgZGF0YWJhc2UgZG9lc24ndCBjYXVzZSBkZWFkbG9ja3MuCitQQVNTCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1v
bi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1o
YW5kbGVzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5j
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0
aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmpzJykiPgorVGVzdCB0aGF0IGV4ZWN1dGlu
ZyBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhlIHNhbWUg
ZGF0YWJhc2UgZG9lc24ndCBjYXVzZSBkZWFkbG9ja3MuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwv
cHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFi
YXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1j
YWxsYmFjay1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACitU
aGlzIHRlc3QgdGVzdHMgb3BlbkRhdGFiYXNlU3luYygpJ3MgY3JlYXRpb24gY2FsbGJhY2suCitQ
QVNTOiBDcmVhdGlvbiBjYWxsYmFjayB3YXMgY2FsbGVkLgorUEFTUzogVmVyc2lvbiBzZXQgdG8g
ZW1wdHkgc3RyaW5nIGFzIGV4cGVjdGVkLgorUEFTUzogQW4gZXhjZXB0aW9uIHdhcyB0aHJvd24g
YW5kIGRiMUZhaWwgaXMgbnVsbCBhcyBleHBlY3RlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1k
YXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxi
YWNrLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmpzJykiPgorVGhpcyB0ZXN0IHRlc3RzIG9wZW5E
YXRhYmFzZVN5bmMoKSdzIGNyZWF0aW9uIGNhbGxiYWNrLgorPHByZSBpZD0iY29uc29sZSI+Cis8
L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNl
LWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3lu
Yy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCB0aGF0IG5v
IGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiB0aGUgZGF0YWJhc2UgaXMgb3BlbmVkIHdpdGggYW4g
ZW1wdHkgdmVyc2lvbi4KK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWVtcHR5LXZl
cnNpb24tc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25s
b2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMu
anMnKSI+CitUZXN0IHRoYXQgbm8gZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIHRoZSBkYXRhYmFz
ZSBpcyBvcGVuZWQgd2l0aCBhbiBlbXB0eSB2ZXJzaW9uLgorPHByZSBpZD0iY29uc29sZSI+Cis8
L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRz
LXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2MjIzMCkJKGZyb20gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQ6
NjIyMzApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNl
LWlucHV0cy1zeW5jLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExIEBA
CitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IG9wZW5EYXRhYmFzZVN5bmMoKSBhY2NlcHRzIG9u
bHkgdmFsaWQgcGFyYW1ldGVycy4KK1BBU1M6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIK
K1BBU1M6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIKK1BBU1M6IHVuZGVmaW5lZAorUEFT
UzogdW5kZWZpbmVkCitQQVNTOiB1bmRlZmluZWQKK1BBU1M6IFRZUEVfTUlTTUFUQ0hfRVJSOiBE
T00gRXhjZXB0aW9uIDE3CitQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLgorUEFT
Uzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4KK1BBU1M6IGNhbGxpbmcgb3BlbkRhdGFi
YXNlU3luYygpIHdpdGggYSBjcmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVu
LWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0bWwJKHJldmlzaW9uIDYyMjMwKQkoZnJvbSBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmh0bWw6
NjIyMzApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNl
LWlucHV0cy1zeW5jLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFkb2N0
eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlu
cHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRl
c3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzJykiPgorVGhpcyB0ZXN0
IG1ha2VzIHN1cmUgdGhhdCBvcGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlkIHBh
cmFtZXRlcnMuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1
dHMtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuaHRtbAkocmV2aXNpb24gNjIyMzApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5j
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBACiA8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiAKLTxib2R5IG9u
bG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanMnKSI+
Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWlucHV0cy1z
eW5jLmpzJykiPgogVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBvcGVuRGF0YWJhc2VTeW5jKCkg
YWNjZXB0cyBvbmx5IHZhbGlkIHBhcmFtZXRlcnMuCiA8cHJlIGlkPSJjb25zb2xlIj4KIDwvcHJl
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1z
ZXQtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9u
LXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUaGlzIHRlc3RzIHRoYXQgY2FsbGlu
ZyBvcGVuRGF0YWJhc2Ugd2l0aCBhbiBlbXB0eSB2ZXJzaW9uIHN0cmluZyBzZXRzIHRoZSBjdXJy
ZW50IHZlcnNpb24gb2YgdGhhdCBkYXRhYmFzZSB0byB0aGUgZW1wdHkgc3RyaW5nIGFuZCBzdWJz
ZXF1ZW50IGF0dGVtcHRzIHRvIG9wZW4gdGhlIGRhdGFiYXNlIHdpdGggYSBkaWZmZXJlbnQgZXhw
ZWN0ZWQgdmVyc2lvbiB0aHJvdyBhbiBleGNlcHRpb24uCitQQVNTCisKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24t
c3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zZXQtZW1w
dHktdmVyc2lvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29w
ZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5qcycpIj4KK1RoaXMgdGVzdHMgdGhh
dCBjYWxsaW5nIG9wZW5EYXRhYmFzZSB3aXRoIGFuIGVtcHR5IHZlcnNpb24gc3RyaW5nIHNldHMg
dGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGF0IGRhdGFiYXNlIHRvIHRoZSBlbXB0eSBzdHJpbmcg
YW5kIHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8gb3BlbiB0aGUgZGF0YWJhc2Ugd2l0aCBhIGRpZmZl
cmVudCBleHBlY3RlZCB2ZXJzaW9uIHRocm93IGFuIGV4Y2VwdGlvbi4KKzxwcmUgaWQ9ImNvbnNv
bGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNl
LXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjI5MjMpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxMSArMCwwIEBACi1UaGlzIHRlc3QgbWFrZXMgc3Vy
ZSB0aGF0IG9wZW5EYXRhYmFzZVN5bmMoKSBhY2NlcHRzIG9ubHkgdmFsaWQgcGFyYW1ldGVycy4K
LVBBU1M6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIKLVBBU1M6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTIKLVBBU1M6IHVuZGVmaW5lZAotUEFTUzogdW5kZWZpbmVkCi1QQVNTOiB1
bmRlZmluZWQKLVBBU1M6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3Ci1QQVNT
OiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLgotUEFTUzogb3BlbkRhdGFiYXNlU3luYygp
IHN1Y2NlZWRlZC4KLVBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGggYSBjcmVh
dGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuCi0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRz
Lmh0bWwJKHJldmlzaW9uIDYyOTIzKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEy
ICswLDAgQEAKLTwhZG9jdHlwZSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5q
cycpIj4KLVRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgb3BlbkRhdGFiYXNlU3luYygpIGFjY2Vw
dHMgb25seSB2YWxpZCBwYXJhbWV0ZXJzLgotPHByZSBpZD0iY29uc29sZSI+Ci08L3ByZT4KLTwv
Ym9keT4KLTwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1k
YXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0
YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGVzdCB0aGF0IGEgc2Vjb25kIGhhbmRsZSB0byB0
aGUgc2FtZSBkYXRhYmFzZSBjYW4gYmUgb3BlbmVkIGluc2lkZSBhIHRyYW5zYWN0aW9uIHJ1bm5p
bmcgb24gdGhlIGZpcnN0IGhhbmRsZS4KK1BBU1M6IHNlY29uZCBoYW5kbGUgb3BlbmVkIHN1Y2Nl
c3NmdWxseS4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1k
YXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGls
ZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0
aW9uLWluLXByb2dyZXNzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9u
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJj
ZXMvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmpzJyki
PgorVGVzdCB0aGF0IGEgc2Vjb25kIGhhbmRsZSB0byB0aGUgc2FtZSBkYXRhYmFzZSBjYW4gYmUg
b3BlbmVkIGluc2lkZSBhIHRyYW5zYWN0aW9uIHJ1bm5pbmcgb24gdGhlIGZpcnN0IGhhbmRsZS4K
KzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwt
ZGF0YS10eXBlcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK1Rlc3QgdGhhdCB0aGUgdmFsdWVzIHJldHVybmVk
IGJ5IERCIHF1ZXJpZXMgYXJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHZhbHVlcyBpbnNlcnRl
ZCBpbiB0aGUgZGF0YWJhc2UuCitQQVNTOiBwcm9wZXJ0eSAndGltZXN0YW1wJyBPSywgdHlwZSB3
YXMgbnVtYmVyCitQQVNTOiBwcm9wZXJ0eSAnaWQnIE9LLCB0eXBlIHdhcyBudW1iZXIKK1BBU1M6
IHByb3BlcnR5ICdyZWFsJyBPSywgdHlwZSB3YXMgbnVtYmVyCitQQVNTOiBwcm9wZXJ0eSAndGV4
dCcgT0ssIHR5cGUgd2FzIHN0cmluZworUEFTUzogcHJvcGVydHkgJ2Jsb2InIE9LLCB0eXBlIHdh
cyBzdHJpbmcKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRh
dGEtdHlwZXMtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvc3FsLWRhdGEtdHlwZXMtc3luYy5qcycpIj4K
K1Rlc3QgdGhhdCB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IERCIHF1ZXJpZXMgYXJlIG9mIHRoZSBz
YW1lIHR5cGUgYXMgdGhlIHZhbHVlcyBpbnNlcnRlZCBpbiB0aGUgZGF0YWJhc2UuCis8cHJlIGlk
PSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhj
ZXB0aW9uLWNvZGVzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACitUZXN0IHRoYXQgdGhlIGNvcnJlY3Qg
ZXhjZXB0aW9ucyBhcmUgdGhyb3duIGluIGV4Y2VwdGlvbmFsIHNpdHVhdGlvbnMuCitQQVNTOiBl
eHBlY3RlZCBhbmQgZ290IGVycm9yIGNvZGUgVU5LTk9XTl9FUlIKK1BBU1M6IGV4cGVjdGVkIGFu
ZCBnb3QgZXJyb3IgY29kZSBTWU5UQVhfRVJSCitQQVNTOiBleHBlY3RlZCBhbmQgZ290IGVycm9y
IGNvZGUgU1lOVEFYX0VSUgorUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFVOS05P
V05fRVJSCitQQVNTOiBleHBlY3RlZCBhbmQgZ290IGVycm9yIGNvZGUgUVVPVEFfRVJSCitQQVNT
OiBUcmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2sgYnkgU1FMaXRlIGFzIGV4cGVjdGVkLgorUEFT
UzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFZFUlNJT05fRVJSCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1leGNl
cHRpb24tY29kZXMtc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9h
ZD0icnVuVGVzdCgncmVzb3VyY2VzL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5qcycpIj4KK1Rl
c3QgdGhhdCB0aGUgY29ycmVjdCBleGNlcHRpb25zIGFyZSB0aHJvd24gaW4gZXhjZXB0aW9uYWwg
c2l0dWF0aW9ucy4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIt
c3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACitUZXN0IHRoZSBkYXRh
YmFzZSBhdXRob3JpemVyLgorQmVnaW5uaW5nIHdyaXRlIHRyYW5zYWN0aW9uOgorU1FMSVRFX0NS
RUFURV9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9JTkRFWCBzdGF0
ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHN0YXRlbWVudCBzdWNj
ZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgor
U1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVB
VEVfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9WSUVXIHN0YXRl
bWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZUQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBb
b2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfUkVBRCBzdGF0ZW1lbnQgc3VjY2VlZGVk
LgorU1FMSVRFX1NFTEVDVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RFTEVURSBzdGF0
ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0lOU0VSVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FM
SVRFX1VQREFURSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1BSQUdNQSBzdGF0ZW1lbnQg
ZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQUxURVJfVEFCTEUgc3Rh
dGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVk
LgorU1FMSVRFX1RSQU5TQUNUSU9OIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0
aW9uXSAoNSkKK1NRTElURV9BVFRBQ0ggc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNl
cHRpb25dICg1KQorU1FMSVRFX0RFVEFDSCBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4
Y2VwdGlvbl0gKDUpCitTUUxJVEVfUkVJTkRFWCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRF
X0FOQUxZWkUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FM
SVRFX0RST1BfSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RFTVBfVEFC
TEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RFTVBfVFJJR0dFUiBzdGF0ZW1l
bnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEVNUF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQu
CitTUUxJVEVfRFJPUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9W
SUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9UQUJMRSBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorV3JpdGUgdHJhbnNhY3Rpb24gc3VjY2VlZGVkLgorCitCZWdpbm5pbmcgcmVhZCB0
cmFuc2FjdGlvbnM6CitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmpl
Y3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9DUkVBVEVfVEFCTEUgc3RhdGVtZW50IHN1Y2Nl
ZWRlZC4KK1NRTElURV9DUkVBVEVfSU5ERVggc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxF
eGNlcHRpb25dICg1KQorU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6
IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHN0
YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9DUkVBVEVf
VEVNUF9WSUVXIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NR
TElURV9DUkVBVEVfVFJJR0dFUiBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlv
bl0gKDUpCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxF
eGNlcHRpb25dICg1KQorU1FMSVRFX0NSRUFURV9WVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29i
amVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0NSRUFURV9JTkRFWCBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitT
UUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NS
RUFURV9URU1QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVFJJR0dF
UiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9WSUVXIHN0YXRlbWVudCBzdWNj
ZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZUQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNR
TEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfUkVBRCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRF
X1NFTEVDVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RFTEVURSBzdGF0ZW1lbnQgZmFp
bGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfSU5TRVJUIHN0YXRlbWVudCBm
YWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9VUERBVEUgc3RhdGVtZW50
IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX1BSQUdNQSBzdGF0ZW1l
bnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQUxURVJfVEFCTEUg
c3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0FMVEVS
X1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElU
RV9UUkFOU0FDVElPTiBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUp
CitTUUxJVEVfQVRUQUNIIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAo
NSkKK1NRTElURV9ERVRBQ0ggc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25d
ICg1KQorU1FMSVRFX1JFSU5ERVggc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRp
b25dICg1KQorU1FMSVRFX0FOQUxZWkUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNl
cHRpb25dICg1KQorU1FMSVRFX0RST1BfSU5ERVggc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBT
UUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVk
OiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIgc3Rh
dGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RST1BfVEVN
UF9WSUVXIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElU
RV9EUk9QX1RSSUdHRVIgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1
KQorU1FMSVRFX0RST1BfVklFVyBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlv
bl0gKDUpCitTUUxJVEVfRFJPUF9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4
Y2VwdGlvbl0gKDUpCitSZWFkIHRyYW5zYWN0aW9ucyBzdWNjZWVkZWQuCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3Jp
emVyLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRz
LWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgn
cmVzb3VyY2VzL3Rlc3QtYXV0aG9yaXplci1zeW5jLmpzJykiPgorVGVzdCB0aGUgZGF0YWJhc2Ug
YXV0aG9yaXplci4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90cmFuc2FjdGlvbi1pbi10
cmFuc2FjdGlvbi1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3RyYW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhhdCB0cnlpbmcgdG8gcnVuIGEgdHJhbnNhY3Rpb24g
aW5zaWRlIGFub3RoZXIgdHJhbnNhY3Rpb24gdGhyb3dzIGFuIGV4Y2VwdGlvbi4KK1BBU1M6IEV4
Y2VwdGlvbiB0aHJvd24gd2hpbGUgdHJ5aW5nIHRvIHJ1biBhIG5lc3RlZCB0cmFuc2FjdGlvbi4K
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdHJhbnNhY3Rpb24taW4t
dHJhbnNhY3Rpb24tc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3RyYW5zYWN0aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3RyYW5zYWN0aW9uLWlu
LXRyYW5zYWN0aW9uLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMv
dHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5qcycpIj4KK1Rlc3QgdGhhdCB0cnlpbmcg
dG8gcnVuIGEgdHJhbnNhY3Rpb24gaW5zaWRlIGFub3RoZXIgdHJhbnNhY3Rpb24gdGhyb3dzIGFu
IGV4Y2VwdGlvbi4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdl
LXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVz
ZS1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDI5IEBACit2YXIgZGIgPSBudWxsOwordHJ5IHsKKyAgICB2YXIgZGJO
YW1lID0gIkNoYW5nZVZlcnNpb25IYW5kbGVSZXVzZVRlc3QiICsgKG5ldyBEYXRlKCkpLmdldFRp
bWUoKTsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoZGJOYW1lLCAiIiwgIlRlc3QgdGhhdCB0
aGUgREIgaGFuZGxlIGlzIHZhbGlkIGFmdGVyIGNoYW5naW5nIHRoZSB2ZXJzaW9uLiIsIDEpOwor
ICAgIHZhciB2ZXJzaW9uID0gZGIudmVyc2lvbjsKKyAgICB2YXIgbmV3VmVyc2lvbiA9IHZlcnNp
b24gPyAocGFyc2VJbnQodmVyc2lvbikgKyAxKS50b1N0cmluZygpIDogIjEiOworICAgIGRiLmNo
YW5nZVZlcnNpb24odmVyc2lvbiwgbmV3VmVyc2lvbiwgZnVuY3Rpb24odHgpIHsKKyAgICAgICAg
cG9zdE1lc3NhZ2UoIlBBU1M6IGNoYW5nZVZlcnNpb24oKSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3
YXMgY2FsbGVkLiIpOworICAgIH0pOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2Uo
IkZBSUw6IGNoYW5nZVZlcnNpb24oKSB0aHJldyBhbiBleGNlcHRpb246ICIgKyBlcnIpOworfQor
Cit0cnkgeworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgIHRyeSB7
CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBU
ZXN0IChGb28gSU5UKSIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiU0VMRUNUICogZnJv
bSBUZXN0Iik7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogTm8gZXhjZXB0aW9uIHRo
cm93biB3aGlsZSBleGVjdXRpbmcgc3RhdGVtZW50cy4iKTsKKyAgICAgICAgfSBjYXRjaCAoZXJy
KSB7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogQW4gZXhjZXB0aW9uIHdhcyB0aHJv
d24gd2hpbGUgZXhlY3V0aW5nIHN0YXRlbWVudHM6ICIgKyBlcnIpOworICAgICAgICB9CisgICAg
fSk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IE5vIGV4Y2VwdGlvbiB0aHJvd24gd2hpbGUgcnVu
bmluZyBhIHRyYW5zYWN0aW9uLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2Uo
IkZBSUw6IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIHdoaWxlIHJ1bm5pbmcgYSB0cmFuc2FjdGlv
bjogIiArIGVycik7Cit9CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0xLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9jaGFuZ2UtdmVyc2lvbi1zeW5jLTEuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0xLmpzCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACit2YXIgRVhQRUNURURfVkVSU0lPTl9BRlRFUl9I
SVhJRV9URVNUID0gIjIiOwordmFyIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FEID0gIjMi
OworCitmdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkgeyB9CisKK3ZhciBkYjEgPSBvcGVuRGF0YWJh
c2VTeW5jKCJDaGFuZ2VWZXJzaW9uVGVzdCIsICIxIiwgIlRlc3QgZm9yIHRoZSBkYXRhYmFzZS5j
aGFuZ2VWZXJzaW9uKCkgZnVuY3Rpb24iLCAxKTsKK3ZhciBkYjIgPSBvcGVuRGF0YWJhc2VTeW5j
KCJDaGFuZ2VWZXJzaW9uVGVzdCIsICIxIiwgIlRlc3QgZm9yIHRoZSBkYXRhYmFzZS5jaGFuZ2VW
ZXJzaW9uKCkgZnVuY3Rpb24iLCAxKTsKKworLy8gRmlyc3QgcnVuIEhpeGllJ3MgdGVzdCB0byBl
bnN1cmUgYmFzaWMgY2hhbmdlVmVyc2lvbigpIGZ1bmN0aW9uYWxpdHkgd29ya3MgKHNlZSBidWcg
Mjg0MTgpLgorZGIxLmNoYW5nZVZlcnNpb24oIjEiLCBFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX0hJ
WElFX1RFU1QsIGVtcHR5RnVuY3Rpb24pOworaWYgKGRiMi52ZXJzaW9uICE9IGRiMS52ZXJzaW9u
KSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNoYW5naW5nIGRiMSdzIHZlcnNpb24gKCIgKyBk
YjEudmVyc2lvbiArICIpIGRpZCBub3QgY2hhbmdlIGRiMidzIHZlcnNpb24gKCIgKyBkYjIudmVy
c2lvbiArICIpIGFzIGV4cGVjdGVkLiIpOworICAgIHBvc3RNZXNzYWdlKCJmYWlsIik7Cit9IGVs
c2UKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2hhbmdpbmcgZGIxJ3MgdmVyc2lvbiAoIiArIGRi
MS52ZXJzaW9uICsgIikgY2hhbmdlZCBkYjIncyB2ZXJzaW9uIHRvby4iKTsKKworZGIyLnRyYW5z
YWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgdHJ5IHsKKyAgICAgICAgdHguZXhlY3V0ZVNxbCgi
Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCkiKTsKKyAgICAgICAgcG9z
dE1lc3NhZ2UoIkZBSUw6IFRoZSBEQiB2ZXJzaW9uIGNoYW5nZWQsIGV4ZWN1dGluZyBhbnkgc3Rh
dGVtZW50IG9uIGRiMiBzaG91bGQgZmFpbC4iKTsKKyAgICAgICAgcG9zdE1lc3NhZ2UoImZhaWwi
KTsKKyAgICB9IGNhdGNoKGVycikgeworICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IEV4ZWN1dGlu
ZyBhIHN0YXRlbWVudCBvbiBkYjIgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLiIpOwor
ICAgIH0KK30pOworCisvLyBNYWtlIHN1cmUgYW55IG5ldyBoYW5kbGUgdG8gdGhlIHNhbWUgREIg
c2VlcyB0aGUgbmV3IHZlcnNpb24KK3RyeSB7CisgICAgdmFyIGRiMyA9IG9wZW5EYXRhYmFzZVN5
bmMoIkNoYW5nZVZlcnNpb25UZXN0IiwgRVhQRUNURURfVkVSU0lPTl9BRlRFUl9ISVhJRV9URVNU
LCAiIiwgMSk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IFN1Y2Nlc3NmdWxseSBvcGVuZWQgYSBu
ZXcgREIgaGFuZGxlLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6
IFVuZXhwZWN0ZWQgZXhjZXB0aW9uIHRocm93biB3aGlsZSB0cnlpbmcgdG8gb3BlbiBhIG5ldyBE
QiBoYW5kbGU6ICIgKyBlcnIpOworICAgIHBvc3RNZXNzYWdlKCJmYWlsIik7Cit9CisKK2lmIChk
YjEudmVyc2lvbiAhPSBkYjMudmVyc2lvbikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBkYjEu
dmVyc2lvbiAoIiArIGRiMS52ZXJzaW9uICsgIikgZG9lcyBub3QgbWF0Y2ggZGIzLnZlcnNpb24o
IiArIGRiMy52ZXJzaW9uICsiKSIpOworICAgIHBvc3RNZXNzYWdlKCJmYWlsIik7Cit9IGVsc2UK
KyAgICBwb3N0TWVzc2FnZSgiUEFTUzogZGIxLnZlcnNpb24gKCIgKyBkYjEudmVyc2lvbiArICIp
IG1hdGNoZXMgZGIzLnZlcnNpb24uIik7CisKKy8vIE5vdyB0cnkgYSB0ZXN0IHRvIGVuc3VyZSB0
aGUgdmVyc2lvbiBwZXJzaXN0cyBhZnRlciByZWxvYWRpbmcgKHNlZSBidWcgMjc4MzYpCitkYjEu
Y2hhbmdlVmVyc2lvbihFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX0hJWElFX1RFU1QsIEVYUEVDVEVE
X1ZFUlNJT05fQUZURVJfUkVMT0FELAorICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgpIHsK
KyAgICAgICAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJEUk9QIFRBQkxFIElGIEVYSVNU
UyBJbmZvIik7CisgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRB
QkxFIElGIE5PVCBFWElTVFMgSW5mbyAoVmVyc2lvbiBJTlRFR0VSKSIpOworICAgICAgICAgICAg
ICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJTlRPIEluZm8gVkFMVUVTICg/KSIsIFtF
WFBFQ1RFRF9WRVJTSU9OX0FGVEVSX1JFTE9BRF0pOworICAgICAgICAgICAgICAgICAgfSk7CisK
K3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0yLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1z
eW5jLTIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0yLmpzCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEyIEBACit2YXIgRVhQRUNURURfVkVSU0lPTl9BRlRFUl9SRUxPQUQgPSAnMyc7CisKK3Zh
ciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkNoYW5nZVZlcnNpb25UZXN0IiwgIiIsICJUZXN0IHRo
ZSBjaGFuZ2VWZXJzaW9uKCkgZnVuY3Rpb24uIiwgMSk7CitpZiAoZGIudmVyc2lvbiA9PSBFWFBF
Q1RFRF9WRVJTSU9OX0FGVEVSX1JFTE9BRCkKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogZGIudmVy
c2lvbiBpcyAiICsgRVhQRUNURURfVkVSU0lPTl9BRlRFUl9SRUxPQUQgKyAiIGFzIGV4cGVjdGVk
LiIpOworZWxzZQorICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBkYi52ZXJzaW9uIGlzICIgKyBkYi52
ZXJzaW9uICsgIjsgZXhwZWN0ZWQgIiArIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FEKTsK
KworLy8gUmVzZXQgdGhlIHZlcnNpb247IG90aGVyd2lzZSB0aGlzIHRlc3Qgd2lsbCBmYWlsIHRo
ZSBuZXh0IHRpbWUgaXQncyBydW4KK2RiLmNoYW5nZVZlcnNpb24oZGIudmVyc2lvbiwgIjEiLCBm
dW5jdGlvbih0eCkgeyB9KTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9lbXB0eS1zdGF0ZW1lbnQtc3luYy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJj
ZXMvZW1wdHktc3RhdGVtZW50LXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZW1wdHktc3RhdGVtZW50LXN5bmMuanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK3RyeSB7CisgICAgdmFyIGRiID0gb3BlbkRhdGFi
YXNlU3luYygiRW1wdHlTdGF0ZW1lbnRTeW5jIiwgIjEuMCIsICJUZXN0IGFuIGVtcHR5IHN0YXRl
bWVudC4iLCAxKTsKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICB2
YXIgcmVzdWx0ID0gdHguZXhlY3V0ZVNxbCgiIik7CisgICAgICAgIHBvc3RNZXNzYWdlKHJlc3Vs
dCA/ICJGQUlMOiByZXN1bHQgaXMgbm90IG51bGwiIDogIlBBU1M6IHJlc3VsdCBpcyBudWxsIik7
CisgICAgfSk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1MiKTsKK30gY2F0Y2ggKGVycikgeworICAg
IHBvc3RNZXNzYWdlKCJGQUlMIik7Cit9CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZS1zcWwtYXJn
cy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy9leGVjdXRlLXNxbC1hcmdzLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZS1zcWwtYXJncy1z
eW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBACit2YXIgdGhyb3dPblRvU3RyaW5n
T2JqZWN0ID0geyB9OwordGhyb3dPblRvU3RyaW5nT2JqZWN0LnRvU3RyaW5nID0gZnVuY3Rpb24g
KCkgeyB0aHJvdyAiQ2Fubm90IGNhbGwgdG9TdHJpbmcgb24gdGhpcyBvYmplY3QuIiB9OworCit2
YXIgdGhyb3dPbkdldExlbmd0aE9iamVjdCA9IHsgfTsKK3Rocm93T25HZXRMZW5ndGhPYmplY3Qu
X19kZWZpbmVHZXR0ZXJfXygibGVuZ3RoIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdl
dCBsZW5ndGggb2YgdGhpcyBvYmplY3QuIjsgfSk7CisKK3ZhciB0aHJvd09uR2V0WmVyb09iamVj
dCA9IHsgbGVuZ3RoOiAxIH07Cit0aHJvd09uR2V0WmVyb09iamVjdC5fX2RlZmluZUdldHRlcl9f
KCIwIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCAwIHByb3BlcnR5IG9mIHRoaXMg
b2JqZWN0LiI7IH0pOworCit2YXIgZXhwZWN0Tm9FeGNlcHRpb24gPSBbCisgICAgJyIiJywKKyAg
ICAnIiIsIG51bGwnLAorICAgICciIiwgdW5kZWZpbmVkJywKKyAgICAnIiIsIFtdJywKKyAgICAn
IiIsIFsgImFyZzAiIF0nLAorICAgICciIiwgeyB9JywKKyAgICAnIiIsIHsgbGVuZ3RoOiAwIH0n
LAorICAgICciIiwgeyBsZW5ndGg6IDEsIDA6ICJhcmcwIiB9JywKK107CisKK3ZhciBleHBlY3RF
eGNlcHRpb24gPSBbCisgICAgJycsCisgICAgJ251bGwnLAorICAgICd1bmRlZmluZWQnLAorICAg
ICcwJywKKyAgICAndGhyb3dPblRvU3RyaW5nT2JqZWN0JywKKyAgICAnIiIsIHRocm93T25HZXRM
ZW5ndGhPYmplY3QnLAorICAgICciIiwgdGhyb3dPbkdldFplcm9PYmplY3QnLAorICAgICciIiwg
WyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXScsCisgICAgJyIiLCAwJywKKyAgICAnIiIsICIiJywK
K107CisKK2Z1bmN0aW9uIHRyeUV4ZWN1dGVTcWwodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3Qp
Cit7CisgICAgdHJ5IHsKKyAgICAgICAgZXZhbCgndHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCgnICsg
cGFyYW1ldGVyTGlzdCArICcpJyk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0gY2F0Y2gg
KGV4Y2VwdGlvbikgeworICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgIH0KK30KKworZnVu
Y3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBwYXJhbWV0ZXJMaXN0LCBleHBl
Y3RFeGNlcHRpb24pCit7CisgICAgdmFyIGV4Y2VwdGlvbiA9IHRyeUV4ZWN1dGVTcWwodHJhbnNh
Y3Rpb24sIHBhcmFtZXRlckxpc3QpOworICAgIGlmIChleHBlY3RFeGNlcHRpb24pIHsKKyAgICAg
ICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBleGVjdXRl
U3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVk
LiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogZXhlY3V0
ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLiIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICAgICBwb3N0
TWVzc2FnZSgiRkFJTDogZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIHRocmV3IGFu
IGV4Y2VwdGlvbjogIiArIGV4Y2VwdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBv
c3RNZXNzYWdlKCJQQVNTOiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgZGlkIG5v
dCB0aHJvdyBhbiBleGNlcHRpb24uIik7CisgICAgfQorfQorCitmdW5jdGlvbiBydW5UcmFuc2Fj
dGlvblRlc3RzKHRyYW5zYWN0aW9uKQoreworICAgIGZvciAoaSBpbiBleHBlY3ROb0V4Y2VwdGlv
bikKKyAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBleHBlY3ROb0V4Y2Vw
dGlvbltpXSwgZmFsc2UpOworICAgIGZvciAoaSBpbiBleHBlY3RFeGNlcHRpb24pCisgICAgICAg
IHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgZXhwZWN0RXhjZXB0aW9uW2ldLCB0cnVl
KTsKK30KKwordmFyIGRiID0gb3BlbkRhdGFiYXNlU3luYygiRXhlY3V0ZVNRTEFyZ3NUZXN0Iiwg
IjEuMCIsICJUZXN0IG9mIGhhbmRsaW5nIG9mIHRoZSBhcmd1bWVudHMgdG8gU1FMVHJhbnNhY3Rp
b25TeW5jLmV4ZWN1dGVTcWwiLCAxKTsKK2RiLnRyYW5zYWN0aW9uKHJ1blRyYW5zYWN0aW9uVGVz
dHMpOworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL3Jlc291cmNlcy9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50
LXN5bmMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
cmVzb3VyY2VzL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3luYy5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuanMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjMgQEAKK2Z1bmN0aW9uIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIGV4cGVj
dGVkVG9QYXNzLCBzdGF0ZW1lbnQpCit7CisgICAgdHJ5IHsKKyAgICAgICAgdHguZXhlY3V0ZVNx
bChzdGF0ZW1lbnQpOworICAgICAgICBwb3N0TWVzc2FnZShleHBlY3RlZFRvUGFzcyA/ICJQQVNT
OiAiICsgc3RhdGVtZW50IDogIkZBSUw6ICIgKyBzdGF0ZW1lbnQpOworICAgIH0gY2F0Y2ggKGVy
cikgeworICAgICAgICBwb3N0TWVzc2FnZSghZXhwZWN0ZWRUb1Bhc3MgPyAiUEFTUzogIiArIHN0
YXRlbWVudCA6ICJGQUlMOiAiICsgc3RhdGVtZW50KTsKKyAgICB9Cit9CisKK3ZhciBkYiA9IG9w
ZW5EYXRhYmFzZVN5bmMoIkV4ZWN1dGVTUUxBY2NlcHRzT25seU9uZVN0YXRlbWVudFRlc3QiLCAi
MS4wIiwgIiIsIDEpOworZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICB0eC5leGVj
dXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBUZXN0IChGb28gSU5UKSIpOworICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodHgsIHRydWUsICJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMSki
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCB0cnVlLCAiSU5TRVJUIElOVE8gVGVzdCBWQUxV
RVMgKDIpOyIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIHRydWUsICIgICBJTlNFUlQgSU5U
TyBUZXN0IFZBTFVFUyAoMykgICAgIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgdHJ1ZSwg
IiAgIElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg0KTsgICAiKTsKKyAgICBleGVjdXRlU3RhdGVt
ZW50KHR4LCB0cnVlLCAiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDUpICAgOyIpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsIGZhbHNlLCAiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDYpOyBn
YXJiYWdlIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgZmFsc2UsICJJTlNFUlQgSU5UTyBU
ZXN0IFZBTFVFUyAoNyk7IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg4KSIpOworICAgIGV4ZWN1
dGVTdGF0ZW1lbnQodHgsIGZhbHNlLCAiICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoOSk7ICAg
SU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDEwKTsgICAiKTsKK30pOworcG9zdE1lc3NhZ2UoImRv
bmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9t
dWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvbXVsdGlw
bGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvbXVsdGlwbGUt
dHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuanMJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzIgQEAKK2Z1bmN0aW9uIHJ1blRyYW5zYWN0aW9uKGRiKQoreworICAgIGRiLnRy
YW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgLy8gRXhlY3V0ZSBhIHJlYWQtb25seSBz
dGF0ZW1lbnQKKyAgICAgICB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0
OyIpOworCisgICAgICAgLy8gRXhlY3V0ZSBhIHdyaXRlIHN0YXRlbWVudCB0byBtYWtlIHN1cmUg
U1FMaXRlIHRyaWVzIHRvIGFjcXVpcmUgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIERCIGZpbGUK
KyAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoPyk7IiwgWzFd
KTsKKyAgICB9KTsKK30KKwordmFyIGRiMSA9IG9wZW5EYXRhYmFzZVN5bmMoIk11bHRpcGxlVHJh
bnNhY3Rpb25zT25EaWZmZXJlbnRIYW5kbGVzVGVzdCIsICIxLjAiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIlRlc3QgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRo
ZSBzYW1lIERCLiIsIDEpOworZGIxLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgdHgu
ZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIGludCk7Iik7
Cit9KTsKKwordmFyIGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoIk11bHRpcGxlVHJhbnNhY3Rpb25z
T25EaWZmZXJlbnRIYW5kbGVzVGVzdCIsICIxLjAiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIlRlc3QgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIERC
LiIsIDEpOworaWYgKGRiMSA9PSBkYjIpCisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGRiMSA9PSBk
YjIiKTsKK2Vsc2UgeworICAgIHRyeSB7CisgICAgICAgIHJ1blRyYW5zYWN0aW9uKGRiMSk7Cisg
ICAgICAgIHJ1blRyYW5zYWN0aW9uKGRiMik7CisgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTIik7
CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJy
KTsKKyAgICB9Cit9CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLXN5bmMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9u
cy1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACit2YXIgY29tcGxldGUgPSAw
OworCitmdW5jdGlvbiBjaGVja0NvbXBsZXRpb24oKQoreworICAgIGlmICgrK2NvbXBsZXRlID09
IDIgJiYgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHZh
ciBkYiA9IG9wZW5EYXRhYmFzZVdpdGhTdWZmaXgoIk11bHRpcGxlVHJhbnNhY3Rpb25zVGVzdCIs
ICIxLjAiLCAiVGVzdCB0byBtYWtlIHN1cmUgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIGNhbiBiZSBx
dWV1ZWQgYXQgb25jZSBmb3IgYW4gSFRNTDUgZGF0YWJhc2UiLCAzMjc2OCk7CisKKyAgICBkYi50
cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICBsb2coIlRyYW5zYWN0aW9uIDEgU3Rh
cnRlZCIpOworICAgIH0sIGZ1bmN0aW9uKGVycikgeworICAgICAgICBsb2coIlRyYW5zYWN0aW9u
IDEgRXJyb3JlZCAtICIgKyBlcnIpOworICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsKKyAgICB9
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiAxIFN1Y2NlZWRlZCIpOwor
ICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsKKyAgICB9KTsKKworICAgIGRiLnRyYW5zYWN0aW9u
KGZ1bmN0aW9uKHR4KSB7CisgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gMiBTdGFydGVkIik7Cisg
ICAgfSwgZnVuY3Rpb24oZXJyKSB7CisgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gMiBFcnJvcmVk
IC0gIiArIGVycik7CisgICAgICAgIGNoZWNrQ29tcGxldGlvbigpOworICAgIH0sIGZ1bmN0aW9u
KCkgeworICAgICAgICBsb2coIlRyYW5zYWN0aW9uIDIgU3VjY2VlZGVkIik7CisgICAgICAgIGNo
ZWNrQ29tcGxldGlvbigpOworICAgIH0pOworfQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3lu
Yy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNv
dXJjZXMvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0
YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
OSBAQAordmFyIGNyZWF0aW9uQ2FsbGJhY2tDYWxsZWQxID0gZmFsc2U7Cit2YXIgZGIxTmFtZSA9
ICJPcGVuRGF0YWJhc2VDcmVhdGlvbkNhbGxiYWNrMSIgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgp
OwordmFyIGRiMk5hbWUgPSAiT3BlbkRhdGFiYXNlQ3JlYXRpb25DYWxsYmFjazIiICsgKG5ldyBE
YXRlKCkpLmdldFRpbWUoKTsKK3ZhciBkYjEgPSBvcGVuRGF0YWJhc2VTeW5jKGRiMU5hbWUsICIx
LjAiLCAiIiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGRiKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IENyZWF0aW9u
IGNhbGxiYWNrIHdhcyBjYWxsZWQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGRiLnZlcnNpb24gIT0gIiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBvc3RNZXNzYWdlKCJGQUlMOiBXcm9uZyB2ZXJzaW9uICIgKyBkYi52ZXJzaW9uICsgIjsgZW1w
dHkgc3RyaW5nIGV4cGVjdGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6
IFZlcnNpb24gc2V0IHRvIGVtcHR5IHN0cmluZyBhcyBleHBlY3RlZC4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworCit2YXIgZGIxRmFpbCA9IG51bGw7Cit0cnkgeworICAgIGRi
MUZhaWwgPSBvcGVuRGF0YWJhc2VTeW5jKGRiMU5hbWUsICIxLjAiLCAiIiwgMSk7CisgICAgcG9z
dE1lc3NhZ2UoIkZBSUw6IEFuIElOVkFMSURfU1RBVEVfRVJSIGV4Y2VwdGlvbiBzaG91bGQndmUg
YmVlbiB0aHJvd24uIik7Cit9IGNhdGNoKGVycikgeworICAgIGlmIChkYjFGYWlsKQorICAgICAg
ICBwb3N0TWVzc2FnZSgiRkFJTDogZGIxRmFpbCBzaG91bGQgaGF2ZSBiZWVuIG51bGwuIik7Cisg
ICAgZWxzZQorICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogQW4gZXhjZXB0aW9uIHdhcyB0aHJv
d24gYW5kIGRiMUZhaWwgaXMgbnVsbCBhcyBleHBlY3RlZC4iKTsKK30KKworLy8gT3BlbiBhIGhh
bmRsZSB0byBhbm90aGVyIGRhdGFiYXNlLCBmaXJzdCB3aXRob3V0IGEgY3JlYXRpb24gY2FsbGJh
Y2ssIHRoZW4gd2l0aCBvbmUuCisvLyBNYWtlIHN1cmUgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIGlz
IG5vdCBjYWxsZWQuCit2YXIgZGIyID0gb3BlbkRhdGFiYXNlU3luYyhkYjJOYW1lLCAiMS4wIiwg
IiIsIDEpOworZGIyID0gb3BlbkRhdGFiYXNlU3luYyhkYjJOYW1lLCAiMS4wIiwgIiIsIDEsIGZ1
bmN0aW9uKGRiKSB7IHBvc3RNZXNzYWdlKCJGQUlMOiBDcmVhdGlvbiBjYWxsYmFjayBzaG91bGQg
bm90IGhhdmUgYmVlbiBjYWxsZWQuIik7IH0pOworCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJh
c2UtZW1wdHktdmVyc2lvbi1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3lu
Yy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jl
c291cmNlcy9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy5qcwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3IEBACit0cnkgeworICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIk9w
ZW5EYXRhYmFzZUVtcHR5VmVyc2lvblRlc3QiLCAiIiwgIlRlc3QgdGhhdCB3ZSBjYW4gb3BlbiBk
YXRhYmFzZXMgd2l0aCBhbiBlbXB0eSB2ZXJzaW9uLiIsIDEpOworICAgIHBvc3RNZXNzYWdlKCJQ
QVNTIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVycik7
Cit9Citwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0
YWJhc2UtaW5wdXRzLXN5bmMuanMJKHJldmlzaW9uIDYyMjMwKQkoZnJvbSBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5q
czo2MjIzMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9v
cGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQg
QEAKK3ZhciBkYjsKKwordmFyIG5vdEFTdHJpbmcgPSB7CisgICAgdG9TdHJpbmc6IGZ1bmN0aW9u
KCkgeyB0aHJvdyAiZm9vIjsgfQorfTsKKwordHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5
bmMoKTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkg
d2l0aG91dCBhbnkgYXJndW1lbnQgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKK30gY2F0
Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOworfQor
Cit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIp
OworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRo
IGZld2VyIHRoYW4gZm91ciBhcmd1bWVudHMgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsK
K30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2Up
OworfQorCit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYyhub3RBU3RyaW5nLCAiREJW
ZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDog
dGhlIGZpcnN0IGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEgc3RyaW5n
LiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIubWVz
c2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCBu
b3RBU3RyaW5nLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOworICAgIHBvc3RNZXNzYWdlKCJGQUlM
OiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEgc3Ry
aW5nLiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIu
bWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUi
LCAiREJWZXJzaW9uIiwgbm90QVN0cmluZywgMTAyNCk7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6
IHRoZSB0aGlyZCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmlu
Zy4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1l
c3NhZ2UpOworfQorCit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwg
IkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwgMCk7CisgICAgcG9zdE1lc3NhZ2Uo
IkZBSUw6IHRoZSBmaWZ0aCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBh
biBvYmplY3QsIGlmIHByZXNlbnQuIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2Fn
ZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRh
YmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwor
ICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLiIpOwor
fSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7
Cit9CisKKy8vIFJ1biB0aGlzIHRlc3QgY2FzZSBvbmUgbW9yZSB0aW1lLCB0byB0ZXN0IHRoZSBj
b2RlIHdpdGggYW4gZXhpc3RpbmcgZGF0YWJhc2UuCit0cnkgeworICAgIGRiID0gb3BlbkRhdGFi
YXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7Cisg
ICAgcG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuIik7Cit9
IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNzYWdlKTsK
K30KKwordHJ5IHsKKyAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhYmFzZSwgb3RoZXJ3
aXNlIHRoZSBjcmVhdGlvbiBjYWxsYmFjayB3b24ndCBiZSBpbnZva2VkLgorICAgIGRiID0gb3Bl
bkRhdGFiYXNlU3luYygiREJOYW1lQ3JlYXRpb25DYWxsYmFjayIgKyAobmV3IERhdGUoKSkuZ2V0
VGltZSgpLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbihkYikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGggYSBj
cmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
IH0pOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVz
c2FnZSk7Cit9CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lv
bi1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Bl
bi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDkgQEAKK3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIk9wZW5EYXRhYmFzZVNldEVtcHR5
VmVyc2lvblRlc3QiLCAiIiwgIlRlc3QgdGhhdCB0aGUgREIgdmVyc2lvbiBpcyBzZXQgdG8gdGhl
IGVtcHR5IHN0cmluZy4iLCAxKTsKKwordHJ5IHsKKyAgICB2YXIgZGIyID0gb3BlbkRhdGFiYXNl
U3luYygiT3BlbkRhdGFiYXNlU2V0RW1wdHlWZXJzaW9uVGVzdCIsICJ0ZXN0IiwgIlRlc3QgdGhh
dCB0aGUgREIgdmVyc2lvbiBpcyBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZy4iLCAxKTsKKyAgICBw
b3N0TWVzc2FnZSgiRkFJTDogQW4gZXhjZXB0aW9uIHNob3VsZCd2ZSBiZWVuIHRocm93bi4iKTsK
K30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTIik7Cit9Citwb3N0TWVzc2Fn
ZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1
dHMuanMJKHJldmlzaW9uIDYyOTIzKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanMJKHdvcmtpbmcgY29weSkK
QEAgLTEsNzQgKzAsMCBAQAotdmFyIGRiOwotCi12YXIgbm90QVN0cmluZyA9IHsKLSAgICB0b1N0
cmluZzogZnVuY3Rpb24oKSB7IHRocm93ICJmb28iOyB9Ci19OwotCi10cnkgewotICAgIGRiID0g
b3BlbkRhdGFiYXNlU3luYygpOwotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBjYWxsaW5nIG9wZW5E
YXRhYmFzZVN5bmMoKSB3aXRob3V0IGFueSBhcmd1bWVudCBzaG91bGQgdGhyb3cgYW4gZXhjZXB0
aW9uLiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBlcnIu
bWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUi
LCAiREJWZXJzaW9uIik7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNhbGxpbmcgb3BlbkRhdGFi
YXNlU3luYygpIHdpdGggZmV3ZXIgdGhhbiBmb3VyIGFyZ3VtZW50cyBzaG91bGQgdGhyb3cgYW4g
ZXhjZXB0aW9uLiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIg
KyBlcnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKG5v
dEFTdHJpbmcsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwotICAgIHBvc3RN
ZXNzYWdlKCJGQUlMOiB0aGUgZmlyc3QgYXJndW1lbnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11
c3QgYmUgYSBzdHJpbmcuIik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgiUEFT
UzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFzZVN5
bmMoIkRCTmFtZSIsIG5vdEFTdHJpbmcsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7Ci0gICAgcG9z
dE1lc3NhZ2UoIkZBSUw6IHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gb3BlbkRhdGFiYXNlU3luYygp
IG11c3QgYmUgYSBzdHJpbmcuIik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgi
UEFTUzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRhYmFz
ZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCBub3RBU3RyaW5nLCAxMDI0KTsKLSAgICBwb3N0
TWVzc2FnZSgiRkFJTDogdGhlIHRoaXJkIGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBt
dXN0IGJlIGEgc3RyaW5nLiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBB
U1M6ICIgKyBlcnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VT
eW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0LCAwKTsKLSAg
ICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIGZpZnRoIGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5
bmMoKSBtdXN0IGJlIGFuIG9iamVjdCwgaWYgcHJlc2VudC4iKTsKLX0gY2F0Y2ggKGVycikgewot
ICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwotfQotCi10cnkgewotICAg
IGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0
aW9uIiwgMTAyNCk7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBz
dWNjZWVkZWQuIik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiAr
IGVyci5tZXNzYWdlKTsKLX0KLQotLy8gUnVuIHRoaXMgdGVzdCBjYXNlIG9uZSBtb3JlIHRpbWUs
IHRvIHRlc3QgdGhlIGNvZGUgd2l0aCBhbiBleGlzdGluZyBkYXRhYmFzZS4KLXRyeSB7Ci0gICAg
ZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRp
b24iLCAxMDI0KTsKLSAgICBwb3N0TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1
Y2NlZWRlZC4iKTsKLX0gY2F0Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsg
ZXJyLm1lc3NhZ2UpOwotfQotCi10cnkgewotICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IGRh
dGFiYXNlLCBvdGhlcndpc2UgdGhlIGNyZWF0aW9uIGNhbGxiYWNrIHdvbid0IGJlIGludm9rZWQu
Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5hbWVDcmVhdGlvbkNhbGxiYWNrIiArIChu
ZXcgRGF0ZSgpKS5nZXRUaW1lKCksICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGRiKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2FsbGluZyBvcGVuRGF0YWJhc2VT
eW5jKCkgd2l0aCBhIGNyZWF0aW9uIGNhbGxiYWNrIHN1Y2NlZWRlZC4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgiRkFJ
TDogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXdo
aWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utd2hpbGUt
dHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXdoaWxlLXRy
YW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjgg
QEAKK2Z1bmN0aW9uIG9wZW5UZXN0RGF0YWJhc2UoKQoreworICAgIHJldHVybiBvcGVuRGF0YWJh
c2VTeW5jKCJPcGVuRGF0YWJhc2VXaGlsZVRyYW5zYWN0aW9uSW5Qcm9ncmVzc1Rlc3QiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJUZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IGNhbGxpbmcgb3BlbkRhdGFiYXNlKCkgd2hpbGUg
YSB0cmFuc2FjdGlvbiBpcyBpbiBwcm9ncmVzcyBvbiBhIGRpZmZlcmVudCBoYW5kbGUgdG8gdGhl
IHNhbWUgZGF0YWJhc2UgZG9lcyBub3QgcmVzdWx0IGluIGEgZGVhZGxvY2suIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAyMTAwMDAwKTsgLy8gMk1CICsgZXBzaWxvbgorfQorCisvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjA3CisvLyBJbiBv
cmRlciB0byB0cmlnZ2VyIHRoaXMgYnVnLCB0aGUgdHJhbnNhY3Rpb24gbXVzdCBhY3F1aXJlIGFu
IGV4Y2x1c2l2ZQorLy8gbG9jayBvbiB0aGUgREIgZmlsZSBiZWZvcmUgdHJ5aW5nIHRvIG9idGFp
biBhIHNlY29uZCBoYW5kbGUgdG8gdGhlIHNhbWUgREIuCisvLyBUaGUgb25seSB3YXkgdG8gZm9y
Y2UgU1FMaXRlIHRvIG9idGFpbiBhbiBleGNsdXNpdmUgbG9jayBpcyB0byBjaGFuZ2UgbW9yZQor
Ly8gdGhhbiBjYWNoZV9zaXplICogcGFnZV9zaXplIGJ5dGVzIGluIHRoZSBkYXRhYmFzZS4gVGhl
IGRlZmF1bHQgdmFsdWUgZm9yCisvLyBjYWNoZV9zaXplIGlzIDIwMDAgcGFnZXMsIGFuZCB0aGUg
ZGVmYXVsdCBwYWdlX3NpemUgaXMgMTAyNCBieXRlcy4gU28gdGhlCisvLyBzaXplIG9mIHRoZSBi
bG9iIG11c3QgYmUgYXQgbGVhc3QgMk1CLgordmFyIGRiMSA9IG9wZW5UZXN0RGF0YWJhc2UoKTsK
K2RiMS50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFU
RSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBCTE9CKTsiKTsKKyAgICB0eC5leGVjdXRl
U3FsKCJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoWkVST0JMT0IoMjA5NzE1MikpOyIpOworICAg
IHZhciBkYjIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IHNl
Y29uZCBoYW5kbGUgb3BlbmVkIHN1Y2Nlc3NmdWxseS4iKTsKKworICAgIC8vIENsZWFuIHVwIHRo
ZSBEQiB0byBhbGxvdyBmb3IgcmVwZWF0ZWQgcnVucyBvZiB0aGlzIHRlc3QKKyAgICAvLyB3aXRo
b3V0IG5lZWRpbmcgdG8gaW5jcmVhc2UgdGhlIGRlZmF1bHQgYWxsb3dlZCBxdW90YSAoNU1CKQor
ICAgIHR4LmV4ZWN1dGVTcWwoIkRFTEVURSBGUk9NIFRlc3Q7Iik7Cit9KTsKKworcG9zdE1lc3Nh
Z2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9zcWwtZGF0YS10eXBlcy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9zcWwtZGF0YS10eXBlcy1zeW5jLmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3Nx
bC1kYXRhLXR5cGVzLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKK3ZhciB0
ZXN0VmFsdWVzID0geworICAgIHRpbWVzdGFtcDogbmV3IERhdGUoIldlZCBGZWIgMDYgMjAwOCAx
MjoxNjo1MiBHTVQrMDIwMCAoRUVUKSIpLnZhbHVlT2YoKSwKKyAgICBpZDogMTAwMSwKKyAgICBy
ZWFsOiAxMDEuNDQ0LAorICAgIHRleHQ6ICJXZWJLaXQgZGIgVEVYVCIsCisgICAgYmxvYjogInN1
cGVyY2FsaWZyYWdpbGlzdGljIgorfTsKKworZnVuY3Rpb24gc2hvdWxkQmVTYW1lVHlwZUFuZFZh
bHVlKHByb3BOYW1lLCB0ZXN0VmFsdWUsIHJlc3VsdCkgeworICAgIGlmICh0ZXN0VmFsdWUgPT0g
cmVzdWx0ICYmIHR5cGVvZiB0ZXN0VmFsdWUgPT0gdHlwZW9mIHJlc3VsdCkKKyAgICAgICAgcG9z
dE1lc3NhZ2UoIlBBU1M6IHByb3BlcnR5ICciICsgcHJvcE5hbWUgKyAiJyBPSywgdHlwZSB3YXMg
IiArIHR5cGVvZiByZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6
IHByb3BlcnR5ICciICsgcHJvcE5hbWUgKyAiJyBmYWlsZWQ7ICIgKworICAgICAgICAgICAgICAg
ICAgICAiZXhwZWN0ZWQgIiArIHR5cGVvZiB0ZXN0VmFsdWUgKyAiOiciICsgdGVzdFZhbHVlICsg
IicsICIgKworICAgICAgICAgICAgICAgICAgICAiZ290ICIgKyB0eXBlb2YgcmVzdWx0ICsgIjon
IiArIHJlc3VsdCArIiciKTsKK30KKworZnVuY3Rpb24gdGVzdERCVmFsdWVzKHJlc3VsdCkgewor
ICAgIHZhciBpID0gInRpbWVzdGFtcCI7IHNob3VsZEJlU2FtZVR5cGVBbmRWYWx1ZShpLCB0ZXN0
VmFsdWVzW2ldLCByZXN1bHRbaV0pOworICAgIGkgPSAiaWQiOyBzaG91bGRCZVNhbWVUeXBlQW5k
VmFsdWUoaSwgdGVzdFZhbHVlc1tpXSwgcmVzdWx0W2ldKTsKKyAgICBpID0gInJlYWwiOyBzaG91
bGRCZVNhbWVUeXBlQW5kVmFsdWUoaSwgdGVzdFZhbHVlc1tpXSwgcmVzdWx0W2ldKTsKKyAgICBp
ID0gInRleHQiOyBzaG91bGRCZVNhbWVUeXBlQW5kVmFsdWUoaSwgdGVzdFZhbHVlc1tpXSwgcmVz
dWx0W2ldKTsKKyAgICBpID0gImJsb2IiOyBzaG91bGRCZVNhbWVUeXBlQW5kVmFsdWUoaSwgdGVz
dFZhbHVlc1tpXSwgcmVzdWx0W2ldKTsKK30KKwordmFyIGRiID0gb3BlbkRhdGFiYXNlU3luYygi
U1FMRGF0YVR5cGVzVGVzdCIsICIxLjAiLCAiRGF0YWJhc2UgZm9yIFNRTCBkYXRhIHR5cGUgdGVz
dCIsIDEpOworZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICB0eC5leGVjdXRlU3Fs
KCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBEYXRhVHlwZVRlc3RUYWJsZSAoaWQgSU5URUdF
UiBVTklRVUUsIHJlYWwgUkVBTCwgdGltZXN0YW1wIElOVEVHRVIsIHRleHQgVEVYVCwgYmxvYiBC
TE9CKSIpOworICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJTlRPIERhdGFUeXBlVGVzdFRhYmxl
IChpZCwgcmVhbCwgdGltZXN0YW1wLCB0ZXh0LCBibG9iKSBWQUxVRVMgKD8sPyw/LD8sPykiLAor
ICAgICAgICAgICAgICAgICAgW3Rlc3RWYWx1ZXMuaWQsIHRlc3RWYWx1ZXMucmVhbCwgdGVzdFZh
bHVlcy50aW1lc3RhbXAsIHRlc3RWYWx1ZXMudGV4dCwgdGVzdFZhbHVlcy5ibG9iXSk7CisgICAg
dmFyIHJlc3VsdCA9IHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCAqIEZST00gRGF0YVR5cGVUZXN0VGFi
bGUiKTsKKyAgICB0ZXN0REJWYWx1ZXMocmVzdWx0LnJvd3MuaXRlbSgwKSk7CisgICAgdHguZXhl
Y3V0ZVNxbCgiRFJPUCBUQUJMRSBEYXRhVHlwZVRlc3RUYWJsZSIpOworfSk7CisKK3Bvc3RNZXNz
YWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNv
dXJjZXMvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5
bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9y
ZXNvdXJjZXMvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDg2IEBACit2YXIgZGJOYW1lID0gIlNRTEV4Y2VwdGlvbkNvZGVzVGVzdCIgKyAobmV3IERh
dGUoKSkuZ2V0VGltZSgpOworCitmdW5jdGlvbiB0ZXN0VHJhbnNhY3Rpb24oZGIsIGV4ZWN1dGVT
dGF0ZW1lbnRzQ2FsbGJhY2ssIGV4cGVjdGVkRXJyb3JDb2RlTmFtZSkKK3sKKyAgICBkYi50cmFu
c2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZXhlY3V0
ZVN0YXRlbWVudHNDYWxsYmFjayh0eCk7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDog
YW4gZXhjZXB0aW9uICgiICsgZXhwZWN0ZWRFcnJvckNvZGVOYW1lICsgIikgc2hvdWxkJ3ZlIGJl
ZW4gdGhyb3duLiIpOworICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAgIGlmIChl
cnIuY29kZSA9PSBlcnJbZXhwZWN0ZWRFcnJvckNvZGVOYW1lXSkKKyAgICAgICAgICAgICAgICBw
b3N0TWVzc2FnZSgiUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlICIgKyBleHBlY3Rl
ZEVycm9yQ29kZU5hbWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBvc3RN
ZXNzYWdlKCJGQUlMOiBleHBlY3RlZCBlcnJvciBjb2RlICIgKyBleHBlY3RlZEVycm9yQ29kZU5h
bWUgKyAiICgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJbZXhwZWN0ZWRFcnJv
ckNvZGVOYW1lXSArICIpLCBnb3QgIiArIGVyci5jb2RlKTsKKyAgICAgICAgfQorICAgICAgfSk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RUcmFuc2FjdGlvblRocm93c0V4Y2VwdGlvbihkYikKK3sKKyAg
ICB0ZXN0VHJhbnNhY3Rpb24oZGIsIGZ1bmN0aW9uKHR4KSB7IHRocm93ICJFeGNlcHRpb24gdGhy
b3duIGluIHRyYW5zYWN0aW9uIGNhbGxiYWNrLiI7IH0sICJVTktOT1dOX0VSUiIpOworfQorCitm
dW5jdGlvbiB0ZXN0SW52YWxpZFN0YXRlbWVudChkYikKK3sKKyAgICB0ZXN0VHJhbnNhY3Rpb24o
ZGIsIGZ1bmN0aW9uKHR4KSB7IHR4LmV4ZWN1dGVTcWwoIkJBRCBTVEFURU1FTlQiKTsgfSwgIlNZ
TlRBWF9FUlIiKTsKK30KKworZnVuY3Rpb24gdGVzdEluY29ycmVjdE51bWJlck9mQmluZFBhcmFt
ZXRlcnMoZGIpCit7CisgICAgdGVzdFRyYW5zYWN0aW9uKGRiLAorICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgi
Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgQmFkQmluZE51bWJlclRlc3QgKEZvbyBJTlQsIEJh
ciBJTlQpIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQg
SU5UTyBCYWRCaW5kTnVtYmVyVGVzdCBWQUxVRVMgKD8sID8pIiwgWzFdKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSwgIlNZTlRBWF9FUlIiKTsKK30KKworZnVuY3Rpb24gdGVzdEJpbmRQYXJhbWV0
ZXJPZldyb25nVHlwZShkYikKK3sKKyAgICB2YXIgYmFkU3RyaW5nID0geyB9OworICAgIGJhZFN0
cmluZy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyB0aHJvdyAiQ2Fubm90IGNhbGwgdG9TdHJpbmco
KSBvbiB0aGlzIG9iamVjdC4iIH07CisKKyAgICB0ZXN0VHJhbnNhY3Rpb24oZGIsIGZ1bmN0aW9u
KHR4KSB7CisgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT
IEJhZEJpbmRUeXBlVGVzdCAoRm9vIFRFWFQpIik7CisgICAgICAgIHR4LmV4ZWN1dGVTcWwoIklO
U0VSVCBJTlRPIEJhZEJpbmRUeXBlVGVzdCBWQUxVRVMgKD8pIiwgW2JhZFN0cmluZ10pOworICAg
IH0sICJVTktOT1dOX0VSUiIpOworfQorCitmdW5jdGlvbiB0ZXN0UXVvdGFFeGNlZWRlZChkYikK
K3sKKyAgICAvLyBTb21ldGltZXMsIFNRTGl0ZSBhdXRvbWF0aWNhbGx5IHJvbGxzIGJhY2sgYSB0
cmFuc2FjdGlvbiBpZiBleGVjdXRpbmcgYSBzdGF0ZW1lbnQgZmFpbHMuCisgICAgLy8gVGhpcyBz
ZWVtcyB0byBiZSBvbmUgb2YgdGhvc2UgY2FzZXMuCisgICAgdHJ5IHsKKyAgICAgICAgdGVzdFRy
YW5zYWN0aW9uKGRiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYg
Tk9UIEVYSVNUUyBRdW90YVRlc3QgKEZvbyBCTE9CKSIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJTlRPIFF1b3RhVGVzdCBWQUxVRVMgKFpFUk9C
TE9CKDEwICogMTAyNCAqIDEwMjQpKSIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSwgIlFV
T1RBX0VSUiIpOworICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogVHJhbnNhY3Rpb24gc2hvdWxk
J3ZlIGJlZW4gcm9sbGVkIGJhY2sgYnkgU1FMaXRlLiIpOworICAgIH0gY2F0Y2ggKGVycikgewor
ICAgICAgICBpZiAoZXJyLmNvZGUgPT0gZXJyWyJEQVRBQkFTRV9FUlIiXSkKKyAgICAgICAgICAg
IHBvc3RNZXNzYWdlKCJQQVNTOiBUcmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2sgYnkgU1FMaXRl
IGFzIGV4cGVjdGVkLiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3N0TWVzc2FnZSgi
RkFJTDogQW4gdW5leHBlY3RlZCBleGNlcHRpb24gd2FzIHRocm93bjogIiArIGVycik7CisgICAg
fQorfQorCitmdW5jdGlvbiB0ZXN0VmVyc2lvbk1pc21hdGNoKGRiKQoreworICAgIHZhciBkYjIg
PSBvcGVuRGF0YWJhc2VTeW5jKGRiTmFtZSwgIjEuMCIsICJUZXN0cyB0aGUgZXJyb3IgY29kZXMu
IiwgMSk7CisgICAgZGIyLmNoYW5nZVZlcnNpb24oIjEuMCIsICIyLjAiLCBmdW5jdGlvbih0eCkg
eyB9KTsKKyAgICB0ZXN0VHJhbnNhY3Rpb24oZGIsCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKHR4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJUSElTIFNU
QVRFTUVOVCBTSE9VTEQgTkVWRVIgR0VUIEVYRUNVVEVEIik7CisgICAgICAgICAgICAgICAgICAg
IH0sICJWRVJTSU9OX0VSUiIpOworfQorCit2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKGRiTmFt
ZSwgIjEuMCIsICJUZXN0cyB0aGUgZXhjZXB0aW9uIGNvZGVzLiIsIDEpOwordGVzdFRyYW5zYWN0
aW9uVGhyb3dzRXhjZXB0aW9uKGRiKTsKK3Rlc3RJbnZhbGlkU3RhdGVtZW50KGRiKTsKK3Rlc3RJ
bmNvcnJlY3ROdW1iZXJPZkJpbmRQYXJhbWV0ZXJzKGRiKTsKK3Rlc3RCaW5kUGFyYW1ldGVyT2ZX
cm9uZ1R5cGUoZGIpOwordGVzdFF1b3RhRXhjZWVkZWQoZGIpOwordGVzdFZlcnNpb25NaXNtYXRj
aChkYik7CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvdGVzdC1hdXRob3JpemVyLXN5bmMuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3Rlc3QtYXV0
aG9yaXplci1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvcmVzb3VyY2VzL3Rlc3QtYXV0aG9yaXplci1zeW5jLmpzCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyNiBAQAorZnVuY3Rpb24gY2xlYW51cChkYikKK3sKKyAgICBkYi50cmFuc2Fj
dGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBUQUJM
RSBJRiBFWElTVFMgVGVzdCIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBJTkRF
WCBJRiBFWElTVFMgVGVzdEluZGV4Iik7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJEUk9Q
IFZJRVcgSUYgRVhJU1RTIFRlc3RWaWV3Iik7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJE
Uk9QIFRSSUdHRVIgSUYgRVhJU1RTIFRlc3RUcmlnZ2VyIik7CisgICAgfSk7Cit9CisKK2Z1bmN0
aW9uIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIHN0YXRlbWVudCwgb3BlcmF0aW9uKQoreworICAgIHRy
eSB7CisgICAgICAgIHR4LmV4ZWN1dGVTcWwoc3RhdGVtZW50KTsKKyAgICAgICAgcG9zdE1lc3Nh
Z2Uob3BlcmF0aW9uICsgIiBzdGF0ZW1lbnQgc3VjY2VlZGVkLiIpOworICAgIH0gY2F0Y2ggKGVy
cikgeworICAgICAgICBwb3N0TWVzc2FnZShvcGVyYXRpb24gKyAiIHN0YXRlbWVudCBmYWlsZWQ6
ICIgKyBlcnIgKyAiICgiICsgZXJyLmNvZGUgKyAiKSIpOworICAgIH0KK30KKworZnVuY3Rpb24g
Y3JlYXRlVGFibGVDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JF
QVRFIFRBQkxFIFRlc3QgKEZvbyBpbnQpIiwgIlNRTElURV9DUkVBVEVfVEFCTEUiKTsKK30KKwor
ZnVuY3Rpb24gY3JlYXRlU3RhdGVtZW50c0NhbGxiYWNrKHR4KQoreworICAgIGV4ZWN1dGVTdGF0
ZW1lbnQodHgsICJDUkVBVEUgSU5ERVggVGVzdEluZGV4IE9OIFRlc3QgKEZvbykiLCAiU1FMSVRF
X0NSRUFURV9JTkRFWCIpOworCisgICAgLy8gRXZlbiB0aG91Z2ggdGhlIGZvbGxvd2luZyBxdWVy
eSBzaG91bGQgdHJpZ2dlciBhIFNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCBvcGVyYXRpb24KKyAg
ICAvLyAoYWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cuc3FsaXRlLm9yZy90ZW1wZmlsZXMuaHRtbCks
IGl0IGRvZXNuJ3QsIGFuZCBJJ20gbm90IGF3YXJlCisgICAgLy8gb2YgYW55IG90aGVyIHdheSB0
byB0cmlnZ2VyIHRoaXMgb3BlcmF0aW9uLiBTbyB3ZSdsbCBza2lwIGl0IGZvciBub3cuCisgICAg
Ly9leGVjdXRlU3RhdGVtZW50KHR4LCAiU0VMRUNUICogRlJPTSBUZXN0IFdIRVJFIEZvbyBJTiAo
MSwgMiwgMykiLCAiU1FMSVRFX0NSRUFURV9URU1QX0lOREVYIik7CisKKyAgICBleGVjdXRlU3Rh
dGVtZW50KHR4LCAiQ1JFQVRFIFRFTVAgVEFCTEUgVGVzdFRlbXBUYWJsZSAoRm9vIGludCkiLCAi
U1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNS
RUFURSBURU1QIFRSSUdHRVIgVGVzdFRlbXBUcmlnZ2VyIElOU0VSVCBPTiBUZXN0IEJFR0lOIFNF
TEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7IEVORCIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dF
UiIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBWSUVXIFRlc3RUZW1w
VmlldyBBUyBTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0IiwgIlNRTElURV9DUkVBVEVfVEVNUF9W
SUVXIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBUUklHR0VSIFRlc3RUcmln
Z2VyIElOU0VSVCBPTiBUZXN0IEJFR0lOIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7IEVORCIs
ICJTUUxJVEVfQ1JFQVRFX1RSSUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JF
QVRFIFZJRVcgVGVzdFZpZXcgQVMgU0VMRUNUIENPVU5UKCopIEZST00gVGVzdCIsICJTUUxJVEVf
Q1JFQVRFX1ZJRVciKTsKKworICAgIC8vIFdlIHNob3VsZCB0cnkgdG8gY3JlYXRlIGEgdmlydHVh
bCB0YWJsZSB1c2luZyBmdHMzLCB3aGVuIFdlYktpdCdzIHNxbGl0ZSBsaWJyYXJ5IHN1cHBvcnRz
IGl0LgorICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVklSVFVBTCBUQUJMRSBUZXN0
VmlydHVhbFRhYmxlIFVTSU5HIFVuc3VwcG9ydGVkTW9kdWxlIiwgIlNRTElURV9DUkVBVEVfVlRB
QkxFIik7Cit9CisKK2Z1bmN0aW9uIG90aGVyU3RhdGVtZW50c0NhbGxiYWNrKHR4KQoreworICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0IiwgIlNRTElU
RV9SRUFEIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCBDT1VOVCgqKSBGUk9N
IFRlc3QiLCAiU1FMSVRFX1NFTEVDVCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJERUxF
VEUgRlJPTSBUZXN0IiwgIlNRTElURV9ERUxFVEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDEpIiwgIlNRTElURV9JTlNFUlQiKTsKKyAgICBl
eGVjdXRlU3RhdGVtZW50KHR4LCAiVVBEQVRFIFRlc3QgU0VUIEZvbyA9IDIgV0hFUkUgRm9vID0g
MSIsICJTUUxJVEVfVVBEQVRFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlBSQUdNQSBj
YWNoZV9zaXplIiwgIlNRTElURV9QUkFHTUEiKTsKKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJBTFRFUiBUQUJMRSBUZXN0IFJFTkFNRSBUTyBUZXN0VGFibGUiLCAiU1FMSVRFX0FMVEVSX1RB
QkxFIik7CisgICAgLy8gUmVuYW1lIHRoZSB0YWJsZSBiYWNrIHRvIGl0cyBvcmlnaW5hbCBuYW1l
CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFMVEVSIFRBQkxFIFRlc3RUYWJsZSBSRU5BTUUg
VG8gVGVzdCIsICJTUUxJVEVfQUxURVJfVEFCTEUiKTsKKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQo
dHgsICJCRUdJTiBUUkFOU0FDVElPTiIsICJTUUxJVEVfVFJBTlNBQ1RJT04iKTsKKyAgICBleGVj
dXRlU3RhdGVtZW50KHR4LCAiQVRUQUNIIG1haW4gQVMgVGVzdE1haW4iLCAiU1FMSVRFX0FUVEFD
SCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJERVRBQ0ggVGVzdE1haW4iLCAiU1FMSVRF
X0RFVEFDSCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJSRUlOREVYIiwgIlNRTElURV9S
RUlOREVYIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFOQUxZWkUiLCAiU1FMSVRFX0FO
QUxZWkUiKTsKKworICAgIC8vIFNRTElURV9GVU5DVElPTjogYWxsb3dlZCBpbiB3cml0ZSBtb2Rl
CisgICAgLy8gVGhlcmUgaXMgbm8gU1FML0phdmFzY3JpcHQgQVBJIHRvIGFkZCB1c2VyLWRlZmlu
ZWQgZnVuY3Rpb25zIHRvIFNRTGl0ZSwKKyAgICAvLyBzbyB3ZSBjYW5ub3QgdGVzdCB0aGlzIG9w
ZXJhdGlvbgorfQorCitmdW5jdGlvbiBkcm9wU3RhdGVtZW50c0NhbGxiYWNrKHR4KQoreworICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIElOREVYIFRlc3RJbmRleCIsICJTUUxJVEVfRFJP
UF9JTkRFWCIpOworCisgICAgLy8gU1FMSVRFX0RST1BfVEVNUF9JTkRFWDogYWxsb3dlZCBpbiB3
cml0ZSBtb2RlCisgICAgLy8gTm90IHN1cmUgaG93IHRvIHRlc3QgdGhpczogdGVtcCBpbmRleGVz
IGFyZSBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgd2hlbgorICAgIC8vIHRoZSBkYXRhYmFzZSBpcyBj
bG9zZWQsIGJ1dCBIVE1MNSBkb2Vzbid0IHNwZWNpZnkgYSBjbG9zZURhdGFiYXNlKCkgY2FsbC4K
KworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFRBQkxFIFRlc3RUZW1wVGFibGUiLCAi
U1FMSVRFX0RST1BfVEVNUF9UQUJMRSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9Q
IFRSSUdHRVIgVGVzdFRlbXBUcmlnZ2VyIiwgIlNRTElURV9EUk9QX1RFTVBfVFJJR0dFUiIpOwor
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFZJRVcgVGVzdFRlbXBWaWV3IiwgIlNRTElU
RV9EUk9QX1RFTVBfVklFVyIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFRSSUdH
RVIgVGVzdFRyaWdnZXIiLCAiU1FMSVRFX0RST1BfVFJJR0dFUiIpOworICAgIGV4ZWN1dGVTdGF0
ZW1lbnQodHgsICJEUk9QIFZJRVcgVGVzdFZpZXciLCAiU1FMSVRFX0RST1BfVklFVyIpOworCisg
ICAgLy8gU1FMSVRFX0RST1BfVlRBQkxFOiBhbGxvd2VkIGluIHdyaXRlIG1vZGUKKyAgICAvLyBO
b3Qgc3VyZSBob3cgdG8gdGVzdCB0aGlzOiB3ZSBjYW5ub3QgY3JlYXRlIGEgdmlydHVhbCB0YWJs
ZSBiZWNhdXNlIHdlIGRvIG5vdAorICAgIC8vIGhhdmUgU1FML0phdmFzY3JpcHQgQVBJcyB0byBy
ZWdpc3RlciBhIG1vZHVsZSB0aGF0IGltcGxlbWVudHMgYSB2aXJ0dWFsIHRhYmxlLgorICAgIC8v
IFRoZXJlZm9yZSwgdHJ5aW5nIHRvIGRyb3AgYSB2aXJ0dWFsIHRhYmxlIHdpbGwgYWx3YXlzIGZh
aWwgKG5vIHN1Y2ggdGFibGUpCisgICAgLy8gYmVmb3JlIGV2ZW4gZ2V0dGluZyB0byB0aGUgYXV0
aG9yaXplci4KKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFRBQkxFIFRlc3QiLCAi
U1FMSVRFX0RST1BfVEFCTEUiKTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRXcml0ZU1vZGUoZGIp
Cit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgcG9zdE1lc3Nh
Z2UoIkJlZ2lubmluZyB3cml0ZSB0cmFuc2FjdGlvbjoiKTsKKyAgICAgICAgY3JlYXRlVGFibGVD
YWxsYmFjayh0eCk7CisgICAgICAgIGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayh0eCk7CisgICAg
ICAgIG90aGVyU3RhdGVtZW50c0NhbGxiYWNrKHR4KTsKKyAgICAgICAgZHJvcFN0YXRlbWVudHND
YWxsYmFjayh0eCk7CisgICAgICAgIHBvc3RNZXNzYWdlKCJXcml0ZSB0cmFuc2FjdGlvbiBzdWNj
ZWVkZWQuXG4iKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRPbmx5TW9kZShkYikK
K3sKKyAgICBwb3N0TWVzc2FnZSgiQmVnaW5uaW5nIHJlYWQgdHJhbnNhY3Rpb25zOiIpOworICAg
IC8vIFRlc3QgdGhlICdDUkVBVEUgVEFCTEUnIG9wZXJhdGlvbjsgaXQgc2hvdWxkIGJlIGRpc2Fs
bG93ZWQKKyAgICBkYi5yZWFkVHJhbnNhY3Rpb24oY3JlYXRlVGFibGVDYWxsYmFjayk7CisKKyAg
ICAvLyBJbiBvcmRlciB0byB0ZXN0IGFsbCBvdGhlciAnQ1JFQVRFJyBvcGVyYXRpb25zLCB3ZSBt
dXN0IGNyZWF0ZSB0aGUgdGFibGUgZmlyc3QKKyAgICBkYi50cmFuc2FjdGlvbihjcmVhdGVUYWJs
ZUNhbGxiYWNrKTsKKyAgICBkYi5yZWFkVHJhbnNhY3Rpb24oY3JlYXRlU3RhdGVtZW50c0NhbGxi
YWNrKTsKKworICAgIC8vIEluIG9yZGVyIHRvIHRlc3QgdGhlICdEUk9QJyBhbmQgJ290aGVyJyBv
cGVyYXRpb25zLCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSB0aGUgcmVzcGVjdGl2ZSBlbnRpdGll
cworICAgIGRiLnRyYW5zYWN0aW9uKGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayk7CisgICAgZGIu
cmVhZFRyYW5zYWN0aW9uKG90aGVyU3RhdGVtZW50c0NhbGxiYWNrKTsKKyAgICBkYi5yZWFkVHJh
bnNhY3Rpb24oZHJvcFN0YXRlbWVudHNDYWxsYmFjayk7CisgICAgcG9zdE1lc3NhZ2UoIlJlYWQg
dHJhbnNhY3Rpb25zIHN1Y2NlZWRlZC4iKTsKK30KKwordmFyIGRiID0gb3BlbkRhdGFiYXNlU3lu
YygiVGVzdEF1dGhvcml6ZXJUZXN0IiwgIjEuMCIsICJUZXN0IHRoZSBkYXRhYmFzZSBhdXRob3Jp
emVyLiIsIDEpOworY2xlYW51cChkYik7Cit0ZXN0UmVhZFdyaXRlTW9kZShkYik7Cit0ZXN0UmVh
ZE9ubHlNb2RlKGRiKTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlv
bi1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3RyYW5zYWN0
aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAK
K3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIlRyYW5zYWN0aW9uSW5UcmFuc2FjdGlvblRlc3Qi
LCAiMS4wIiwgIlRlc3QgdGhhdCB0cnlpbmcgdG8gcnVuIGEgbmVzdGVkIHRyYW5zYWN0aW9uIGZh
aWxzLiIsIDEpOworZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICB0cnkgeworICAg
ICAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbihuZXN0ZWRUeCkgeyB9KTsKKyAgICAgICAgcG9z
dE1lc3NhZ2UoIkZBSUw6IFRyeWluZyB0byBydW4gYSBuZXN0ZWQgdHJhbnNhY3Rpb24gc2hvdWxk
IHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgcG9z
dE1lc3NhZ2UoIlBBU1M6IEV4Y2VwdGlvbiB0aHJvd24gd2hpbGUgdHJ5aW5nIHRvIHJ1biBhIG5l
c3RlZCB0cmFuc2FjdGlvbi4iKTsKKyAgICB9Cit9KTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsK
</data>
<flag name="commit-queue"
          id="48964"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61134</attachid>
            <date>2010-07-09 18:21:50 -0700</date>
            <delta_ts>2010-07-13 17:03:53 -0700</delta_ts>
            <desc>patch #3: implementing DatabaseSync::transaction() and changeVersion() + tests</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>153436</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzAxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xNiw2ICsxNiwxMDIgQEAKIAogMjAxMC0wNy0wOSAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlA
Y2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudGluZyBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKCkgYW5kIERhdGFi
YXNlU3luYzo6Y2hhbmdlVmVyc2lvbigpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDA2MDcKKworICAgICAgICBUZXN0czogZmFzdC93b3JrZXJzL3N0
b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN5bmMuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy5odG1sCisgICAgICAg
ICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy5odG1sCisg
ICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMu
aHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2Nl
cHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29y
a2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1z
eW5jLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJh
c2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtl
cnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy5odG1sCisgICAgICAg
ICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0
LWVtcHR5LXZlcnNpb24tc3luYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3Rv
cmFnZS9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMuaHRt
bAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlwZXMtc3lu
Yy5odG1sCisgICAgICAgICAgICAgICBmYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9u
LWNvZGVzLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVz
dC1hdXRob3JpemVyLXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5odG1sCisKKyAgICAgICAgKiBDTWFr
ZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHN0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBYnN0cmFjdERhdGFiYXNlOjptYXhpbXVtU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBYnN0cmFjdERhdGFiYXNlOjppbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKToKKyAgICAgICAg
KiBzdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0
RGF0YWJhc2U6OnNxbGl0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0NoYW5nZVZlcnNp
b25XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5nZVZlcnNpb25XcmFwcGVyOjpw
ZXJmb3JtUHJlZmxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5nZVZlcnNpb25XcmFwcGVy
OjpwZXJmb3JtUG9zdGZsaWdodCk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6cGVyZm9ybUdldFRhYmxlTmFtZXMpOgorICAgICAg
ICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9y
aXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZU
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWVGFibGUp
OgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3Jh
Z2UvRGF0YWJhc2VTeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5nZVZlcnNpb25QcmVm
bGlnaHRTdGVwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhbmdlVmVyc2lvblByZWZs
aWdodFN0ZXA6OnBlcmZvcm1TdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5nZVZlcnNpb25Q
cmVmbGlnaHRTdGVwOjpDaGFuZ2VWZXJzaW9uUHJlZmxpZ2h0U3RlcCk6CisgICAgICAgIChXZWJD
b3JlOjpDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDaGFuZ2VWZXJzaW9uUG9zdGZsaWdodFN0ZXA6OnBlcmZvcm1TdGVwKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoYW5nZVZlcnNpb25Qb3N0ZmxpZ2h0U3RlcDo6Q2hhbmdlVmVyc2lvblBvc3Rm
bGlnaHRTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6cnVuVHJhbnNhY3Rpb24pOgorICAgICAgICAqIHN0
b3JhZ2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9yRGF0
YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMRXJyb3IuaDoKKyAgICAgICAgKiBzdG9yYWdl
L1NRTFJlc3VsdFNldC5jcHA6CisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRTZXQuaDoKKyAg
ICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmg6CisgICAgICAgICogc3RvcmFn
ZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0
ZW1lbnRTeW5jLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnRTeW5jOjpTUUxTdGF0ZW1lbnRTeW5j
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudFN5bmM6OmV4ZWN1dGUpOgorICAgICAg
ICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdl
L1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpy
dW5DdXJyZW50U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpk
ZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5z
YWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0KToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5z
YWN0aW9uLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmg6Cisg
ICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0YXRlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhjZWVkUXVv
dGEpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaDoKKyAgICAgICAg
KiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oOgorICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zYWN0aW9u
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNhY3Rpb25TeW5j
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6flNRTFRyYW5zYWN0aW9u
U3luYyk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTUUwp
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpiZWdpbik6CisgICAgICAg
IChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJh
bnNhY3Rpb25TeW5jOjpyb2xsYmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlv
blN5bmMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6U1FMVHJhbnNh
Y3Rpb25TeW5jT3B0aW9uYWxTdGVwOjp+U1FMVHJhbnNhY3Rpb25TeW5jT3B0aW9uYWxTdGVwKToK
KyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmg6CisgICAgICAg
ICogc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRXcml0ZVRyYW5z
YWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGVj
dXRlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ2xpZW50Ojpk
aWRFeGNlZWRRdW90YSk6CisKKzIwMTAtMDctMDkgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNo
cm9taXVtLm9yZz4KKwogICAgICAgICBVbnJldmlld2VkLCBidXQgcHJlLWFwcHJvdmVkIGJ5IEVy
aWMgU2VpZGVsLgogCiAgICAgICAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBpbmNsdWRlcyBpbiBoZWFk
ZXIgZmlsZXMgaW4gV2ViQ29yZS9jc3MuCkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDYzMDE5KQorKysg
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQyMiw2ICsxNDIyLDcg
QEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0LmNwcAogICAg
IHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAKICAgICBzdG9yYWdlL1NRTFN0YXRlbWVu
dC5jcHAKKyAgICBzdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCiAgICAgc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbi5jcHAKICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcAogICAg
IHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKSW5kZXg6IFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNp
b24gNjMwMTkpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTE4LDYgKzI1MTgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9T
UUxTdGF0ZW1lbnQuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudENhbGxiYWNrLmgg
XAogCVdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggXAorCVdlYkNv
cmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcCBcCisJV2ViQ29yZS9zdG9yYWdlL1NRTFN0
YXRlbWVudFN5bmMuaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcCBcCiAJ
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmggXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbkNhbGxiYWNrLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDYzMDE5KQorKysgV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM0OTQsNiArMzQ5NCw4IEBACiAgICAg
ICAgICAgICAnc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9T
UUxTdGF0ZW1lbnRDYWxsYmFjay5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2suaCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5j
LmNwcCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmgnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwJywKICAgICAgICAgICAgICdzdG9yYWdl
L1NRTFRyYW5zYWN0aW9uLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25D
YWxsYmFjay5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjMwMTkpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJv
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzY3LDYgKzIzNjcsNyBAQCBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfREFUQUJBU0U9MSkgewogICAgICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldC5jcHAgXAog
ICAgICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwIFwKICAgICAgICAgc3RvcmFn
ZS9TUUxTdGF0ZW1lbnQuY3BwIFwKKyAgICAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNw
cCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwIFwKICAgICAgICAgc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAgXAogICAgICAgICBzdG9yYWdlL1NRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuY3BwIFwKQEAgLTI0NDAsNiArMjQ0MSw3IEBAIGNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9ET01fU1RPUkFHRT0xKSAKICAgICAgICAgc3RvcmFnZS9TUUxSZXN1bHRTZXQu
aCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5oIFwKICAgICAgICAgc3Rv
cmFnZS9TUUxTdGF0ZW1lbnQuaCBcCisgICAgICAgIHN0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5o
IFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKICAgICAgICAgc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbkNsaWVudC5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShy
ZXZpc2lvbiA2MzAxOSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5ODE3LDYgKzQ5ODE3LDE0IEBACiAJCQkJPg0KIAkJCTwvRmls
ZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMU3RhdGVtZW50
U3luYy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxzdG9yYWdlXFNRTFN0YXRlbWVudFN5bmMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb24u
Y3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2MzAxOSkKKysrIFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjkxLDYgKzQyOTEs
OCBAQAogCQlCNTIzQ0YwQjExODI2NzU0MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTIzQ0YwNDExODI2NzU0
MDBFQkIyOUMgLyogRGF0YWJhc2VTeW5jLmggKi87IH07CiAJCUI1MjVBOTY1MTFDQTIzNDAwMDNB
MjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjUyNUE5NjMxMUNBMjM0MDAwM0EyM0E4IC8qIEpTU1FMRXhjZXB0aW9u
LmggKi87IH07CiAJCUI1MjVBOTY2MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTI1QTk2
NDExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24uY3BwICovOyB9OworCQlCNTUwQjUy
NTExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTUwQjUyMTExREM2OEE4MDA5MjM4ODUg
LyogU1FMU3RhdGVtZW50U3luYy5jcHAgKi87IH07CisJCUI1NTBCNTI2MTFEQzY4QTgwMDkyMzg4
NSAvKiBTUUxTdGF0ZW1lbnRTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCNTUwQjUyMjExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3lu
Yy5oICovOyB9OwogCQlCNTVENUFBNDExOTEzMUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlv
blN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjU1RDVBQTIxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2Fs
bGJhY2suaCAqLzsgfTsKIAkJQjU1RDVBQTUxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNh
Y3Rpb25TeW5jQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjU1RDVBQTMxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25T
eW5jQ2FsbGJhY2suY3BwICovOyB9OwogCQlCNTVENUFBODExOTEzMjUwMDBCQ0MzMTUgLyogSlNE
YXRhYmFzZVN5bmNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjU1RDVBQTYxMTkxMzI1MDAwQkNDMzE1IC8qIEpTRGF0YWJhc2VTeW5jQ3Vz
dG9tLmNwcCAqLzsgfTsKQEAgLTk4NjIsNiArOTg2NCw4IEBACiAJCUI1MjNDRjA0MTE4MjY3NTQw
MEVCQjI5QyAvKiBEYXRhYmFzZVN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGF0YWJhc2VTeW5jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1MjVBOTYz
MTFDQTIzNDAwMDNBMjNBOCAvKiBKU1NRTEV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1NRTEV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCNTI1QTk2NDExQ0EyMzQwMDAzQTIzQTggLyogSlNTUUxFeGNlcHRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTUUxFeGNlcHRpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNTUwQjUyMTExREM2OEE4MDA5MjM4ODUgLyogU1FM
U3RhdGVtZW50U3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
UUxTdGF0ZW1lbnRTeW5jLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjU1MEI1
MjIxMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1FMU3RhdGVtZW50U3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCNTVENUFBMjExOTEzMUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5
bmNDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NUQ1
QUEzMTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTVENUFBNjExOTEz
MjUwMDBCQ0MzMTUgLyogSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhYmFzZVN5bmNDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTEzMDksNiArMTEzMTMsOCBAQAogCQkJCUI1OURENjhFMTE5
MDI5OEUwMDdFOTY4NCAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5pZGwgKi8sCiAJCQkJMUE3Q0NC
MTYwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCAqLywKIAkJ
CQlCNTlERDY4RjExOTAyOThFMDA3RTk2ODQgLyogU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5p
ZGwgKi8sCisJCQkJQjU1MEI1MjExMURDNjhBODAwOTIzODg1IC8qIFNRTFN0YXRlbWVudFN5bmMu
Y3BwICovLAorCQkJCUI1NTBCNTIyMTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5j
LmggKi8sCiAJCQkJMUFCRkU3NTIwQ0Q5NjhEMDAwRkU0ODM0IC8qIFNRTFRyYW5zYWN0aW9uLmNw
cCAqLywKIAkJCQkxQTdDQ0IyMjBDRDk0NkZEMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb24uaCAq
LywKIAkJCQkxQTdDQ0IyMzBDRDk0NkZEMDBCN0I2NEUgLyogU1FMVHJhbnNhY3Rpb24uaWRsICov
LApAQCAtMTkyNzIsNiArMTkyNzgsNyBAQAogCQkJCTUxNUIwMzk5MENEMTY0MkEwMEI3RUE5QyAv
KiBTUUxTdGF0ZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBN0NDQjE5MENEOTQ2OUEwMEI3
QjY0RSAvKiBTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3Q0NC
MUEwQ0Q5NDY5QTAwQjdCNjRFIC8qIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAorCQkJCUI1NTBCNTI2MTFEQzY4QTgwMDkyMzg4NSAvKiBTUUxTdGF0ZW1lbnRTeW5j
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTdDQ0IyNDBDRDk0NkZEMDBCN0I2NEUgLyogU1FMVHJh
bnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBN0NDQjFCMENEOTQ2OUEwMEI3QjY0RSAv
KiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTFCRjZGMTEw
MkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMjE3MTYsNiArMjE3MjMsNyBAQAogCQkJCTUxOTYxMTczMENBQzU2NTcwMDEwQTgwQyAvKiBT
UUxSZXN1bHRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGRTExN0QwQ0JGRkIzNjAwMzAx
N0ZBIC8qIFNRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1QjAz
OUEwQ0QxNjQyQTAwQjdFQTlDIC8qIFNRTFN0YXRlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlCNTUwQjUyNTExREM2OEE4MDA5MjM4ODUgLyogU1FMU3RhdGVtZW50U3luYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQUJGRTc1MzBDRDk2OEQwMDBGRTQ4MzQgLyogU1FMVHJhbnNhY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjUxQkY2RjAxMDJDOUU1OTAwMDJDMTVBIC8qIFNRTFRy
YW5zYWN0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1QzExMjNCMTAyQjZDNDYw
MDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcAkocmV2aXNpb24gNjMwMTkpCisr
KyBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDYgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiRGF0YWJhc2VB
dXRob3JpemVyLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0
ZW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC00NjIsNiAr
NDYxLDE5IEBAIHZvaWQgQWJzdHJhY3REYXRhYmFzZTo6cmVzZXRBdXRob3JpemVyKCkKICAgICAg
ICAgbV9kYXRhYmFzZUF1dGhvcml6ZXItPnJlc2V0KCk7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgbG9u
ZyBBYnN0cmFjdERhdGFiYXNlOjptYXhpbXVtU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERh
dGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmdldE1heFNpemVGb3JEYXRhYmFzZSh0aGlzKTsKK30K
Kwordm9pZCBBYnN0cmFjdERhdGFiYXNlOjppbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCkKK3sK
KyAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLmZyZWVTcGFjZVNp
emUoKTsKKyAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2UudG90YWxTaXpl
KCk7CisgICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZyZWVTcGFjZVNpemUpCisgICAgICAgIG1f
c3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaAkocmV2aXNpb24gNjMwMTkpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC00NSw4ICs0Niw2IEBAIGNsYXNzIERhdGFiYXNl
QXV0aG9yaXplcjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZWN1cml0
eU9yaWdpbjsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQogY2xhc3MgQWJzdHJhY3RE
YXRhYmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPEFic3RyYWN0RGF0YWJhc2U+IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwpAQCAtNjUsNiArNjQsMTAgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7CiAgICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0
cmluZyBmaWxlTmFtZSgpIGNvbnN0OworICAgIFNRTGl0ZURhdGFiYXNlJiBzcWxpdGVEYXRhYmFz
ZSgpIHsgcmV0dXJuIG1fc3FsaXRlRGF0YWJhc2U7IH0KKworICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgaW5jcmVtZW50YWxWYWN1dW1JZk5lZWRl
ZCgpOwogCiAgICAgLy8gRklYTUU6IG1vdmUgYWxsIHZlcnNpb24tcmVsYXRlZCBtZXRob2RzIHRv
IGEgRGF0YWJhc2VWZXJzaW9uVHJhY2tlciBjbGFzcwogICAgIGJvb2wgdmVyc2lvbk1hdGNoZXNF
eHBlY3RlZCgpIGNvbnN0OwpAQCAtMTAzLDggKzEwNiw2IEBAIHByb3RlY3RlZDoKICAgICB1bnNp
Z25lZCBsb25nIG1fZXN0aW1hdGVkU2l6ZTsKICAgICBTdHJpbmcgbV9maWxlbmFtZTsKIAotICAg
IFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7Ci0KICNpZm5kZWYgTkRFQlVHCiAgICAg
U3RyaW5nIGRhdGFiYXNlRGVidWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0VGhyZWFk
U2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkgKyAiOjoiICsgbV9uYW1lOyB9CiAjZW5kaWYKQEAg
LTExNiw2ICsxMTcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9vcGVuZWQ7CiAgICAgYm9vbCBt
X25ldzsKIAorICAgIFNRTGl0ZURhdGFiYXNlIG1fc3FsaXRlRGF0YWJhc2U7CisKICAgICBSZWZQ
dHI8RGF0YWJhc2VBdXRob3JpemVyPiBtX2RhdGFiYXNlQXV0aG9yaXplcjsKIH07CiAKSW5kZXg6
IFdlYkNvcmUvc3RvcmFnZS9DaGFuZ2VWZXJzaW9uV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFwcGVyLmNwcAkocmV2aXNpb24gNjMwMTkp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCwxMyArNTAsMTMgQEAgYm9vbCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6cGVyZm9y
bVByZWZsaQogCiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+Z2V0VmVyc2lvbkZy
b21EYXRhYmFzZShhY3R1YWxWZXJzaW9uKSkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
byByZXRyaWV2ZSBhY3R1YWwgY3VycmVudCB2ZXJzaW9uIGZyb20gZGF0YWJhc2UiKTsKLSAgICAg
ICAgbV9zcWxFcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoMCwgInVuYWJsZSB0byB2ZXJpZnkgY3Vy
cmVudCB2ZXJzaW9uIG9mIGRhdGFiYXNlIik7CisgICAgICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJv
cjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInVuYWJsZSB0byB2ZXJpZnkgY3VycmVu
dCB2ZXJzaW9uIG9mIGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
ICAgICBpZiAoYWN0dWFsVmVyc2lvbiAhPSBtX29sZFZlcnNpb24pIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJPbGQgdmVyc2lvbiBkb2Vzbid0IG1hdGNoIGFjdHVhbCB2ZXJzaW9uIik7Ci0gICAgICAg
IG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKDIsICJjdXJyZW50IHZlcnNpb24gb2YgdGhl
IGRhdGFiYXNlIGFuZCBgb2xkVmVyc2lvbmAgYXJndW1lbnQgZG8gbm90IG1hdGNoIik7CisgICAg
ICAgIG1fc3FsRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpWRVJTSU9OX0VSUiwg
ImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBhcmd1bWVu
dCBkbyBub3QgbWF0Y2giKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjks
NyArNjksNyBAQCBib29sIENoYW5nZVZlcnNpb25XcmFwcGVyOjpwZXJmb3JtUG9zdGZsCiAKICAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5zZXRWZXJzaW9uSW5EYXRhYmFzZShtX25l
d1ZlcnNpb24pKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNldCBuZXcgdmVyc2lv
biBpbiBkYXRhYmFzZSIpOwotICAgICAgICBtX3NxbEVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZSgw
LCAidW5hYmxlIHRvIHNldCBuZXcgdmVyc2lvbiBpbiBkYXRhYmFzZSIpOworICAgICAgICBtX3Nx
bEVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ1bmFibGUg
dG8gc2V0IG5ldyB2ZXJzaW9uIGluIGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gNjMwMTkpCisrKyBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBA
CiAjaW5jbHVkZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC0zMzYsNyArMzM1LDcgQEAgVmVjdG9yPFN0cmlu
Zz4gRGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZQogewogICAgIGRpc2FibGVBdXRob3JpemVyKCk7
CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fc3FsaXRlRGF0YWJhc2UsICJTRUxF
Q1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnOyIpOworICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoc3FsaXRlRGF0YWJhc2UoKSwgIlNFTEVDVCBuYW1lIEZS
T00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlPSd0YWJsZSc7Iik7CiAgICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUg
dG8gcmV0cmlldmUgbGlzdCBvZiB0YWJsZXMgZm9yIGRhdGFiYXNlICVzIiwgZGF0YWJhc2VEZWJ1
Z05hbWUoKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIoKTsKQEAg
LTM5NywxNCArMzk2LDYgQEAgU2VjdXJpdHlPcmlnaW4qIERhdGFiYXNlOjpzZWN1cml0eU9yaWdp
bgogICAgIHJldHVybiAwOwogfQogCi12b2lkIERhdGFiYXNlOjppbmNyZW1lbnRhbFZhY3V1bUlm
TmVlZGVkKCkKLXsKLSAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURhdGFiYXNl
LmZyZWVTcGFjZVNpemUoKTsKLSAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRlRGF0YWJh
c2UudG90YWxTaXplKCk7Ci0gICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZyZWVTcGFjZVNpemUp
Ci0gICAgICAgIG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFT
RSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZS5oCShyZXZpc2lvbiA2MzAxOSkKKysrIFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiAKICNpZiBFTkFC
TEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgorI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNR
TGl0ZURhdGFiYXNlLmgiCiAKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgpAQCAtNjYsNyArNjYsNiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4g
dGFibGVOYW1lcygpOwogCiAgICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4oKSBjb25zdDsKLSAgICBTUUxpdGVEYXRhYmFzZSYgc3FsaXRlRGF0YWJhc2UoKSB7IHJldHVy
biBtX3NxbGl0ZURhdGFiYXNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFu
ZENsb3NlKCk7CiAgICAgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9
CkBAIC04Myw4ICs4Miw2IEBAIHB1YmxpYzoKICAgICBTUUxUcmFuc2FjdGlvbkNsaWVudCogdHJh
bnNhY3Rpb25DbGllbnQoKSBjb25zdDsKICAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3Q7CiAKLSAgICB2b2lkIGluY3JlbWVudGFsVmFj
dXVtSWZOZWVkZWQoKTsKLQogcHJpdmF0ZToKICAgICBjbGFzcyBEYXRhYmFzZU9wZW5UYXNrOwog
ICAgIGNsYXNzIERhdGFiYXNlQ2xvc2VUYXNrOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlQXV0aG9yaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
QXV0aG9yaXplci5jcHAJKHJldmlzaW9uIDYzMDE5KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlQXV0aG9yaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw3ICsyOTAsNyBAQCBpbnQg
RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUoY29uCiAgICAgICAgIHJldHVybiBTUUxB
dXRoRGVueTsKIAogICAgIC8vIEFsbG93IG9ubHkgdGhlIEZUUzMgZXh0ZW5zaW9uCi0gICAgaWYg
KG1vZHVsZU5hbWUgIT0gImZ0czMiKQorICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobW9kdWxl
TmFtZSwgImZ0czMiKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAgbV9sYXN0
QWN0aW9uQ2hhbmdlZERhdGFiYXNlID0gdHJ1ZTsKQEAgLTMwMyw3ICszMDMsNyBAQCBpbnQgRGF0
YWJhc2VBdXRob3JpemVyOjpkcm9wVlRhYmxlKGNvbnN0CiAgICAgICAgIHJldHVybiBTUUxBdXRo
RGVueTsKIAogICAgIC8vIEFsbG93IG9ubHkgdGhlIEZUUzMgZXh0ZW5zaW9uCi0gICAgaWYgKG1v
ZHVsZU5hbWUgIT0gImZ0czMiKQorICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UobW9kdWxlTmFt
ZSwgImZ0czMiKSkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCiAgICAgcmV0dXJuIHVw
ZGF0ZURlbGV0ZXNCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZUNhbGxiYWNrLmgJKHJldmlzaW9uIDYzMDE5KQorKysgV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHJldmlzaW9uIDYzMDE5KQorKysgV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsMjggKzIsMzAgQEAKICAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgogICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0zMiw4ICszNCw5IEBACiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogI2luY2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRl
ICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlNRTFRy
YW5zYWN0aW9uU3luYy5oIgogI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCkBAIC04NywxNCArOTAsNTYgQEAgRGF0YWJhc2VTeW5jOjp+RGF0YWJhc2VTeW5j
KCkKICAgICB9CiB9CiAKLXZvaWQgRGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2s+LCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgRGF0YWJhc2VTeW5jOjpjaGFuZ2VWZXJzaW9uKGNv
bnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrPiBjaGFuZ2VWZXJzaW9uQ2FsbGJhY2ssIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmlzQ29udGV4dFRocmVhZCgpKTsKKworICAgIGlmIChzcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0
aW9uSW5Qcm9ncmVzcygpKSB7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9F
UlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25T
eW5jPiB0cmFuc2FjdGlvbiA9IFNRTFRyYW5zYWN0aW9uU3luYzo6Y3JlYXRlKHRoaXMsIGNoYW5n
ZVZlcnNpb25DYWxsYmFjaywgZmFsc2UpOworICAgIGlmICgoZWMgPSB0cmFuc2FjdGlvbi0+YmVn
aW4oKSkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBhY3R1YWxWZXJzaW9uOworICAg
IGlmICghZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShhY3R1YWxWZXJzaW9uKSkgeworICAgICAgICBl
YyA9IFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoYWN0dWFsVmVyc2lvbiAhPSBvbGRWZXJzaW9uKSB7CisgICAgICAgIGVjID0gU1FM
RXhjZXB0aW9uOjpWRVJTSU9OX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICgoZWMgPSB0cmFuc2FjdGlvbi0+ZXhlY3V0ZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFzZXRWZXJzaW9uSW5EYXRhYmFzZShuZXdWZXJzaW9uKSkgeworICAgICAgICBlYyA9IFNR
TEV4Y2VwdGlvbjo6VU5LTk9XTl9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoKGVjID0gdHJhbnNhY3Rpb24tPmNvbW1pdCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2V0RXhwZWN0ZWRWZXJzaW9uKG5ld1ZlcnNpb24pOwogfQogCi12b2lkIERhdGFiYXNlU3luYzo6
dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjaz4sIGJvb2ws
IEV4Y2VwdGlvbkNvZGUmKQordm9pZCBEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+IGNhbGxiYWNrLCBib29sIHJlYWRPbmx5LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0NvbnRleHRUaHJlYWQoKSk7CisKKyAgICBpZiAoc3FsaXRlRGF0YWJhc2UoKS50cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoKSkgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0Vf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9u
U3luYz4gdHJhbnNhY3Rpb24gPSBTUUxUcmFuc2FjdGlvblN5bmM6OmNyZWF0ZSh0aGlzLCBjYWxs
YmFjaywgcmVhZE9ubHkpOworICAgIGlmICgoZWMgPSB0cmFuc2FjdGlvbi0+YmVnaW4oKSkgfHwg
KGVjID0gdHJhbnNhY3Rpb24tPmV4ZWN1dGUoKSkgfHwgKGVjID0gdHJhbnNhY3Rpb24tPmNvbW1p
dCgpKSkKKyAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CiB9CiAKIHZvaWQgRGF0YWJh
c2VTeW5jOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVN5bmMu
aAkocmV2aXNpb24gNjMwMTkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIsMjggKzIsMzAgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgogICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIERh
dGFiYXNlU3luY19oCkBAIC0zMSw2ICszMyw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAj
aW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aWZuZGVmIE5ERUJVRwpAQCAtNDAsNiArNDMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBEYXRhYmFzZUNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jOwogY2xhc3Mg
U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VT
eW5jLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmlkbAko
cmV2aXNpb24gNjMwMTkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VTeW5jLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMiwyOCArMiwzMCBAQAogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKIG1vZHVsZSBzdG9y
YWdlIHsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCShyZXZpc2lvbiA2MzAx
OSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjEsNyArMjIxLDYgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0VudHJ5Rm9yRGF0
YWJhcwogCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXplRm9y
RGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFzZSogZGF0YWJhc2UpCiB7Ci0gICAgQVNTRVJU
KGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5k
YXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKICAgICAvLyBUaGUgbWF4aW11bSBzaXpl
IGZvciBhIGRhdGFiYXNlIGlzIHRoZSBmdWxsIHF1b3RhIGZvciBpdHMgb3JpZ2luLCBtaW51cyB0
aGUgY3VycmVudCB1c2FnZSB3aXRoaW4gdGhlIG9yaWdpbiwKICAgICAvLyBwbHVzIHRoZSBjdXJy
ZW50IHVzYWdlIG9mIHRoZSBnaXZlbiBkYXRhYmFzZQogICAgIE11dGV4TG9ja2VyIGxvY2tEYXRh
YmFzZShtX2RhdGFiYXNlR3VhcmQpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmgJKHJldmlzaW9uIDYzMDE5
KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVNoYXJlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxSZXN1bHRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1
bHRTZXQuY3BwCShyZXZpc2lvbiA2MzAxOSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRT
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw2IEBACiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiU1FMVmFsdWUu
aCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgdW5zaWduZWQgY29uc3QgTWF4RXJy
b3JDb2RlID0gMjsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmgJKHJldmlzaW9uIDYzMDE5KQor
KysgV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
MyArMzEsMTIgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAorI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJTUUxSZXN1bHRTZXRSb3dMaXN0LmgiCi0jaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlU2hhcmVkLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQogY2xhc3MgU1FM
UmVzdWx0U2V0IDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMUmVzdWx0U2V0PiB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBjcmVhdGUoKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgU1FMUmVzdWx0U2V0KTsgfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NR
TFN0YXRlbWVudENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0
YXRlbWVudENhbGxiYWNrLmgJKHJldmlzaW9uIDYzMDE5KQorKysgV2ViQ29yZS9zdG9yYWdlL1NR
TFN0YXRlbWVudENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAog
I2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaAkocmV2aXNp
b24gNjMwMTkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0Up
CiAKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVT
aGFyZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
U1FMU3RhdGVtZW50U3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0
YXRlbWVudFN5bmMuY3BwCShyZXZpc2lvbiA2MjQyNCkJKGZyb20gV2ViQ29yZS9zdG9yYWdlL1NR
TFN0YXRlbWVudC5jcHA6NjI0MjQpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3lu
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisKKyNp
bmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTUUxF
cnJvci5oIgorI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSAiU1FMaXRlU3Rh
dGVtZW50LmgiCisjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIK
KyNpbmNsdWRlICJTUUxWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQ
dHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHN0YXRl
bWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0
YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU1FMU3RhdGVtZW50KHN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgZXJy
b3JDYWxsYmFjaywgcmVhZE9ubHkpKTsKK30KKworU1FMU3RhdGVtZW50OjpTUUxTdGF0ZW1lbnQo
Y29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50
cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgYm9vbCByZWFkT25seSkK
KyAgICA6IG1fc3RhdGVtZW50KHN0YXRlbWVudC5jcm9zc1RocmVhZFN0cmluZygpKQorICAgICwg
bV9hcmd1bWVudHMoYXJndW1lbnRzKQorICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFjayhjYWxsYmFj
aykKKyAgICAsIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQorICAgICwg
bV9yZWFkT25seShyZWFkT25seSkKK3sKK30KKworYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUo
RGF0YWJhc2UqIGRiKQoreworICAgIEFTU0VSVCghbV9yZXN1bHRTZXQpOworCisgICAgLy8gSWYg
d2UncmUgcmUtcnVubmluZyB0aGlzIHN0YXRlbWVudCBhZnRlciBhIHF1b3RhIHZpb2xhdGlvbiwg
d2UgbmVlZCB0byBjbGVhciB0aGF0IGVycm9yIG5vdworICAgIGNsZWFyRmFpbHVyZUR1ZVRvUXVv
dGEoKTsKKworICAgIC8vIFRoaXMgdHJhbnNhY3Rpb24gbWlnaHQgaGF2ZSBiZWVuIG1hcmtlZCBi
YWQgd2hpbGUgaXQgd2FzIGJlaW5nIHNldCB1cCBvbiB0aGUgbWFpbiB0aHJlYWQsCisgICAgLy8g
c28gaWYgdGhlcmUgaXMgc3RpbGwgYW4gZXJyb3IsIHJldHVybiBmYWxzZS4KKyAgICBpZiAobV9l
cnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fcmVhZE9ubHkpCisgICAg
ICAgIGRiLT5zZXRBdXRob3JpemVyUmVhZE9ubHkoKTsKKworICAgIFNRTGl0ZURhdGFiYXNlKiBk
YXRhYmFzZSA9ICZkYi0+c3FsaXRlRGF0YWJhc2UoKTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBz
dGF0ZW1lbnQoKmRhdGFiYXNlLCBtX3N0YXRlbWVudCk7CisgICAgaW50IHJlc3VsdCA9IHN0YXRl
bWVudC5wcmVwYXJlKCk7CisKKyAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7CisgICAg
ICAgIExPRyhTdG9yYWdlQVBJLCAiVW5hYmxlIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBvZiBzdGF0
ZW1lbnQgJXMgLSBlcnJvciAlaSAoJXMpIiwgbV9zdGF0ZW1lbnQuYXNjaWkoKS5kYXRhKCksIHJl
c3VsdCwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgbV9lcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogIElmIHRo
ZSBzdGF0ZW1lbnQgdXNlcyB0aGUgPyMjIyBzeW50YXggc3VwcG9ydGVkIGJ5IHNxbGl0ZSwgdGhl
IGJpbmQgcGFyYW1ldGVyIGNvdW50IGlzIHZlcnkgbGlrZWx5IG9mZiBmcm9tIHRoZSBudW1iZXIg
b2YgcXVlc3Rpb24gbWFya3MuCisgICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhleSBtaWdo
dCBiZSB0cnlpbmcgdG8gZG8gc29tZXRoaW5nIGZpc2h5IG9yIG1hbGljaW91cworICAgIGlmIChz
dGF0ZW1lbnQuYmluZFBhcmFtZXRlckNvdW50KCkgIT0gbV9hcmd1bWVudHMuc2l6ZSgpKSB7Cisg
ICAgICAgIExPRyhTdG9yYWdlQVBJLCAiQmluZCBwYXJhbWV0ZXIgY291bnQgZG9lc24ndCBtYXRj
aCBudW1iZXIgb2YgcXVlc3Rpb24gbWFya3MiKTsKKyAgICAgICAgbV9lcnJvciA9IFNRTEVycm9y
OjpjcmVhdGUoU1FMRXJyb3I6OlNZTlRBWF9FUlIsICJudW1iZXIgb2YgJz8ncyBpbiBzdGF0ZW1l
bnQgc3RyaW5nIGRvZXMgbm90IG1hdGNoIGFyZ3VtZW50IGNvdW50Iik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcmd1bWVu
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LmJpbmRWYWx1ZShp
ICsgMSwgbV9hcmd1bWVudHNbaV0pOworICAgICAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1
bGwpIHsKKyAgICAgICAgICAgIHNldEZhaWx1cmVEdWVUb1F1b3RhKCk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3Vs
dE9rKSB7CisgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkZhaWxlZCB0byBiaW5kIHZhbHVl
IGluZGV4ICVpIHRvIHN0YXRlbWVudCBmb3IgcXVlcnkgJyVzJyIsIGkgKyAxLCBtX3N0YXRlbWVu
dC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0
ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPFNR
TFJlc3VsdFNldD4gcmVzdWx0U2V0ID0gU1FMUmVzdWx0U2V0OjpjcmVhdGUoKTsKKworICAgIC8v
IFN0ZXAgc28gd2UgY2FuIGZldGNoIHRoZSBjb2x1bW4gbmFtZXMuCisgICAgcmVzdWx0ID0gc3Rh
dGVtZW50LnN0ZXAoKTsKKyAgICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgeworICAgICAg
ICBpbnQgY29sdW1uQ291bnQgPSBzdGF0ZW1lbnQuY29sdW1uQ291bnQoKTsKKyAgICAgICAgU1FM
UmVzdWx0U2V0Um93TGlzdCogcm93cyA9IHJlc3VsdFNldC0+cm93cygpOworCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykKKyAgICAgICAgICAgIHJvd3MtPmFk
ZENvbHVtbihzdGF0ZW1lbnQuZ2V0Q29sdW1uTmFtZShpKSk7CisKKyAgICAgICAgZG8geworICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKQorICAgICAgICAg
ICAgICAgIHJvd3MtPmFkZFJlc3VsdChzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFsdWUoaSkpOworCisg
ICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICB9IHdoaWxlIChy
ZXN1bHQgPT0gU1FMUmVzdWx0Um93KTsKKworICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3Vs
dERvbmUpIHsKKyAgICAgICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9y
OjpEQVRBQkFTRV9FUlIsIGRhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBTUUxSZXN1
bHREb25lKSB7CisgICAgICAgIC8vIERpZG4ndCBmaW5kIGFueXRoaW5nLCBvciB3YXMgYW4gaW5z
ZXJ0CisgICAgICAgIGlmIChkYi0+bGFzdEFjdGlvbldhc0luc2VydCgpKQorICAgICAgICAgICAg
cmVzdWx0U2V0LT5zZXRJbnNlcnRJZChkYXRhYmFzZS0+bGFzdEluc2VydFJvd0lEKCkpOworICAg
IH0gZWxzZSBpZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKKyAgICAgICAgLy8gUmV0dXJu
IHRoZSBRdW90YSBlcnJvciAtIHRoZSBkZWxlZ2F0ZSB3aWxsIGJlIGFza2VkIGZvciBtb3JlIHNw
YWNlIGFuZCB0aGlzIHN0YXRlbWVudCBtaWdodCBiZSByZS1ydW4KKyAgICAgICAgc2V0RmFpbHVy
ZUR1ZVRvUXVvdGEoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9FUlIsIGRh
dGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogSWYgdGhlIHNwZWMgYWxsb3dzIHRyaWdnZXJzLCBhbmQgd2Ugd2FudCB0
byBiZSAiYWNjdXJhdGUiIGluIGEgZGlmZmVyZW50IHdheSwgd2UnZCB1c2UKKyAgICAvLyBzcWxp
dGUzX3RvdGFsX2NoYW5nZXMoKSBoZXJlIGluc3RlYWQgb2Ygc3FsaXRlM19jaGFuZ2VkLCBiZWNh
dXNlIHRoYXQgaW5jbHVkZXMgcm93cyBtb2RpZmllZCBmcm9tIHdpdGhpbiBhIHRyaWdnZXIKKyAg
ICAvLyBGb3Igbm93LCB0aGlzIHNlZW1zIHN1ZmZpY2llbnQKKyAgICByZXN1bHRTZXQtPnNldFJv
d3NBZmZlY3RlZChkYXRhYmFzZS0+bGFzdENoYW5nZXMoKSk7CisKKyAgICBtX3Jlc3VsdFNldCA9
IHJlc3VsdFNldDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTUUxTdGF0ZW1lbnQ6OnNl
dERhdGFiYXNlRGVsZXRlZEVycm9yKCkKK3sKKyAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1fcmVz
dWx0U2V0KTsKKyAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9X
Tl9FUlIsICJ1bmFibGUgdG8gZXhlY3V0ZSBzdGF0ZW1lbnQsIGJlY2F1c2UgdGhlIHVzZXIgZGVs
ZXRlZCB0aGUgZGF0YWJhc2UiKTsKK30KKwordm9pZCBTUUxTdGF0ZW1lbnQ6OnNldFZlcnNpb25N
aXNtYXRjaGVkRXJyb3IoKQoreworICAgIEFTU0VSVCghbV9lcnJvciAmJiAhbV9yZXN1bHRTZXQp
OworICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpWRVJTSU9OX0VSUiwg
ImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBhcmd1bWVu
dCBkbyBub3QgbWF0Y2giKTsKK30KKworYm9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFj
ayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9u
KTsKKworICAgIGJvb2wgY2FsbGJhY2tFcnJvciA9IGZhbHNlOworCisgICAgLy8gQ2FsbCB0aGUg
YXBwcm9wcmlhdGUgc3RhdGVtZW50IGNhbGxiYWNrIGFuZCB0cmFjayBpZiBpdCByZXN1bHRlZCBp
biBhbiBlcnJvciwKKyAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVlZCB0byBqdW1wIHRvIHRoZSB0
cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjay4KKyAgICBpZiAobV9lcnJvcikgeworICAgICAgICBB
U1NFUlQobV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKTsKKyAgICAgICAgY2FsbGJhY2tFcnJvciA9
IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rpb24sIG1fZXJyb3IuZ2V0
KCkpOworICAgIH0gZWxzZSBpZiAobV9zdGF0ZW1lbnRDYWxsYmFjaykKKyAgICAgICAgY2FsbGJh
Y2tFcnJvciA9ICFtX3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbi0+
ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbiwgbV9yZXN1
bHRTZXQuZ2V0KCkpOworCisgICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNrcywgdG8gYnJl
YWsgcmVmZXJlbmNlIGN5Y2xlcy4KKyAgICBtX3N0YXRlbWVudENhbGxiYWNrID0gMDsKKyAgICBt
X3N0YXRlbWVudEVycm9yQ2FsbGJhY2sgPSAwOworCisgICAgcmV0dXJuIGNhbGxiYWNrRXJyb3I7
Cit9CisKK3ZvaWQgU1FMU3RhdGVtZW50OjpzZXRGYWlsdXJlRHVlVG9RdW90YSgpCit7CisgICAg
QVNTRVJUKCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7CisgICAgbV9lcnJvciA9IFNRTEVycm9y
OjpjcmVhdGUoU1FMRXJyb3I6OlFVT1RBX0VSUiwgInRoZXJlIHdhcyBub3QgZW5vdWdoIHJlbWFp
bmluZyBzdG9yYWdlIHNwYWNlLCBvciB0aGUgc3RvcmFnZSBxdW90YSB3YXMgcmVhY2hlZCBhbmQg
dGhlIHVzZXIgZGVjbGluZWQgdG8gYWxsb3cgbW9yZSBzcGFjZSIpOworfQorCit2b2lkIFNRTFN0
YXRlbWVudDo6Y2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpCit7CisgICAgaWYgKGxhc3RFeGVjdXRp
b25GYWlsZWREdWVUb1F1b3RhKCkpCisgICAgICAgIG1fZXJyb3IgPSAwOworfQorCitib29sIFNR
TFN0YXRlbWVudDo6bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSBjb25zdAoreworICAg
IHJldHVybiBtX2Vycm9yICYmIG1fZXJyb3ItPmNvZGUoKSA9PSBTUUxFcnJvcjo6UVVPVEFfRVJS
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoREFUQUJB
U0UpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwCShyZXZpc2lvbiA2MjQy
NCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1
LDQ5ICsyNiwzMyBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTUUxTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJT
UUxTdGF0ZW1lbnRTeW5jLmgiCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlICJE
YXRhYmFzZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTUUxFcnJvci5oIgor
I2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgorI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5oIgorI2lu
Y2x1ZGUgIlNRTFJlc3VsdFNldC5oIgorI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAjaW5jbHVkZSAi
U1FMaXRlRGF0YWJhc2UuaCIKICNpbmNsdWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKLSNpbmNsdWRl
ICJTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIgotI2luY2x1ZGUgIlNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2suaCIKLSNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNRTFZhbHVl
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IFNRTFN0
YXRlbWVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FM
VmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxi
YWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ss
IGJvb2wgcmVhZE9ubHkpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0ZW1lbnQo
c3RhdGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCByZWFkT25seSkp
OwotfQotCi1TUUxTdGF0ZW1lbnQ6OlNRTFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0YXRlbWVu
dCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRl
bWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrPiBlcnJvckNhbGxiYWNrLCBib29sIHJlYWRPbmx5KQotICAgIDogbV9zdGF0ZW1lbnQoc3Rh
dGVtZW50LmNyb3NzVGhyZWFkU3RyaW5nKCkpCitTUUxTdGF0ZW1lbnRTeW5jOjpTUUxTdGF0ZW1l
bnRTeW5jKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBh
cmd1bWVudHMsIGJvb2wgcmVhZE9ubHkpCisgICAgOiBtX3N0YXRlbWVudChzdGF0ZW1lbnQpCiAg
ICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBtX3N0YXRlbWVudENhbGxiYWNrKGNh
bGxiYWNrKQotICAgICwgbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spCiAg
ICAgLCBtX3JlYWRPbmx5KHJlYWRPbmx5KQogeworICAgIEFTU0VSVCghbV9zdGF0ZW1lbnQuaXNF
bXB0eSgpKTsKIH0KIAotYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UqIGRiKQor
UGFzc1JlZlB0cjxTUUxSZXN1bHRTZXQ+IFNRTFN0YXRlbWVudFN5bmM6OmV4ZWN1dGUoRGF0YWJh
c2VTeW5jKiBkYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKCFtX3Jlc3VsdFNl
dCk7Ci0KLSAgICAvLyBJZiB3ZSdyZSByZS1ydW5uaW5nIHRoaXMgc3RhdGVtZW50IGFmdGVyIGEg
cXVvdGEgdmlvbGF0aW9uLCB3ZSBuZWVkIHRvIGNsZWFyIHRoYXQgZXJyb3Igbm93Ci0gICAgY2xl
YXJGYWlsdXJlRHVlVG9RdW90YSgpOwotCi0gICAgLy8gVGhpcyB0cmFuc2FjdGlvbiBtaWdodCBo
YXZlIGJlZW4gbWFya2VkIGJhZCB3aGlsZSBpdCB3YXMgYmVpbmcgc2V0IHVwIG9uIHRoZSBtYWlu
IHRocmVhZCwKLSAgICAvLyBzbyBpZiB0aGVyZSBpcyBzdGlsbCBhbiBlcnJvciwgcmV0dXJuIGZh
bHNlLgotICAgIGlmIChtX2Vycm9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBpZiAo
bV9yZWFkT25seSkKICAgICAgICAgZGItPnNldEF1dGhvcml6ZXJSZWFkT25seSgpOwogCkBAIC03
NSwzMiArNjAsMjYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UqIGRiKQog
CiAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsK
ICAgICBpbnQgcmVzdWx0ID0gc3RhdGVtZW50LnByZXBhcmUoKTsKLQogICAgIGlmIChyZXN1bHQg
IT0gU1FMUmVzdWx0T2spIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJVbmFibGUgdG8gdmVy
aWZ5IGNvcnJlY3RuZXNzIG9mIHN0YXRlbWVudCAlcyAtIGVycm9yICVpICglcykiLCBtX3N0YXRl
bWVudC5hc2NpaSgpLmRhdGEoKSwgcmVzdWx0LCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6U1lOVEFYX0VSUiwg
ZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBlYyA9IFNRTEV4Y2VwdGlvbjo6U1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCi0gICAgLy8gRklYTUU6ICBJZiB0aGUgc3RhdGVtZW50IHVzZXMgdGhlID8jIyMgc3ludGF4
IHN1cHBvcnRlZCBieSBzcWxpdGUsIHRoZSBiaW5kIHBhcmFtZXRlciBjb3VudCBpcyB2ZXJ5IGxp
a2VseSBvZmYgZnJvbSB0aGUgbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzLgotICAgIC8vIElmIHRo
aXMgaXMgdGhlIGNhc2UsIHRoZXkgbWlnaHQgYmUgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZyBmaXNo
eSBvciBtYWxpY2lvdXMKICAgICBpZiAoc3RhdGVtZW50LmJpbmRQYXJhbWV0ZXJDb3VudCgpICE9
IG1fYXJndW1lbnRzLnNpemUoKSkgewotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkJpbmQgcGFy
YW1ldGVyIGNvdW50IGRvZXNuJ3QgbWF0Y2ggbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIik7Ci0g
ICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpTWU5UQVhfRVJSLCAi
bnVtYmVyIG9mICc/J3MgaW4gc3RhdGVtZW50IHN0cmluZyBkb2VzIG5vdCBtYXRjaCBhcmd1bWVu
dCBjb3VudCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVjID0gU1FMRXhjZXB0
aW9uOjpTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgcmVz
dWx0ID0gc3RhdGVtZW50LmJpbmRWYWx1ZShpICsgMSwgbV9hcmd1bWVudHNbaV0pOwogICAgICAg
ICBpZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKLSAgICAgICAgICAgIHNldEZhaWx1cmVE
dWVUb1F1b3RhKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlYyA9
IFNRTEV4Y2VwdGlvbjo6UVVPVEFfRVJSOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgICAgICBM
T0coU3RvcmFnZUFQSSwgIkZhaWxlZCB0byBiaW5kIHZhbHVlIGluZGV4ICVpIHRvIHN0YXRlbWVu
dCBmb3IgcXVlcnkgJyVzJyIsIGkgKyAxLCBtX3N0YXRlbWVudC5hc2NpaSgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0Vf
RVJSLCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsKKyAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjMsNzkgKzEwMiwyNCBAQCBi
b29sIFNRTFN0YXRlbWVudDo6ZXhlY3V0ZShEYXRhYmFzZSogZGIpCiAgICAgICAgIH0gd2hpbGUg
KHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpOwogCiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVz
dWx0RG9uZSkgewotICAgICAgICAgICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJy
b3I6OkRBVEFCQVNFX0VSUiwgZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9F
UlI7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAocmVz
dWx0ID09IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55dGhpbmcs
IG9yIHdhcyBhbiBpbnNlcnQKKyAgICAgICAgLy8gRGlkbid0IGZpbmQgYW55dGhpbmcsIG9yIHdh
cyBhbiBpbnNlcnQuCiAgICAgICAgIGlmIChkYi0+bGFzdEFjdGlvbldhc0luc2VydCgpKQogICAg
ICAgICAgICAgcmVzdWx0U2V0LT5zZXRJbnNlcnRJZChkYXRhYmFzZS0+bGFzdEluc2VydFJvd0lE
KCkpOwogICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IFNRTFJlc3VsdEZ1bGwpIHsKLSAgICAgICAg
Ly8gUmV0dXJuIHRoZSBRdW90YSBlcnJvciAtIHRoZSBkZWxlZ2F0ZSB3aWxsIGJlIGFza2VkIGZv
ciBtb3JlIHNwYWNlIGFuZCB0aGlzIHN0YXRlbWVudCBtaWdodCBiZSByZS1ydW4KLSAgICAgICAg
c2V0RmFpbHVyZUR1ZVRvUXVvdGEoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAv
LyBRdW90YSBlcnJvciwgdGhlIGRlbGVnYXRlIHdpbGwgYmUgYXNrZWQgZm9yIG1vcmUgc3BhY2Ug
YW5kIHRoaXMgc3RhdGVtZW50IG1pZ2h0IGJlIHJlLXJ1bi4KKyAgICAgICAgZWMgPSBTUUxFeGNl
cHRpb246OlFVT1RBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgbV9lcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgZGF0
YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBl
YyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOworICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKLSAgICAvLyBGSVhNRTogSWYgdGhlIHNwZWMgYWxsb3dzIHRyaWdnZXJzLCBhbmQgd2Ugd2Fu
dCB0byBiZSAiYWNjdXJhdGUiIGluIGEgZGlmZmVyZW50IHdheSwgd2UnZCB1c2UKLSAgICAvLyBz
cWxpdGUzX3RvdGFsX2NoYW5nZXMoKSBoZXJlIGluc3RlYWQgb2Ygc3FsaXRlM19jaGFuZ2VkLCBi
ZWNhdXNlIHRoYXQgaW5jbHVkZXMgcm93cyBtb2RpZmllZCBmcm9tIHdpdGhpbiBhIHRyaWdnZXIK
LSAgICAvLyBGb3Igbm93LCB0aGlzIHNlZW1zIHN1ZmZpY2llbnQKICAgICByZXN1bHRTZXQtPnNl
dFJvd3NBZmZlY3RlZChkYXRhYmFzZS0+bGFzdENoYW5nZXMoKSk7Ci0KLSAgICBtX3Jlc3VsdFNl
dCA9IHJlc3VsdFNldDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTUUxTdGF0ZW1lbnQ6
OnNldERhdGFiYXNlRGVsZXRlZEVycm9yKCkKLXsKLSAgICBBU1NFUlQoIW1fZXJyb3IgJiYgIW1f
cmVzdWx0U2V0KTsKLSAgICBtX2Vycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5L
Tk9XTl9FUlIsICJ1bmFibGUgdG8gZXhlY3V0ZSBzdGF0ZW1lbnQsIGJlY2F1c2UgdGhlIHVzZXIg
ZGVsZXRlZCB0aGUgZGF0YWJhc2UiKTsKLX0KLQotdm9pZCBTUUxTdGF0ZW1lbnQ6OnNldFZlcnNp
b25NaXNtYXRjaGVkRXJyb3IoKQotewotICAgIEFTU0VSVCghbV9lcnJvciAmJiAhbV9yZXN1bHRT
ZXQpOwotICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpWRVJTSU9OX0VS
UiwgImN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgYW5kIGBvbGRWZXJzaW9uYCBhcmd1
bWVudCBkbyBub3QgbWF0Y2giKTsKLX0KLQotYm9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxs
YmFjayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKHRyYW5zYWN0
aW9uKTsKLQotICAgIGJvb2wgY2FsbGJhY2tFcnJvciA9IGZhbHNlOwotCi0gICAgLy8gQ2FsbCB0
aGUgYXBwcm9wcmlhdGUgc3RhdGVtZW50IGNhbGxiYWNrIGFuZCB0cmFjayBpZiBpdCByZXN1bHRl
ZCBpbiBhbiBlcnJvciwKLSAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVlZCB0byBqdW1wIHRvIHRo
ZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjay4KLSAgICBpZiAobV9lcnJvcikgewotICAgICAg
ICBBU1NFUlQobV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2tFcnJv
ciA9IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdHJhbnNhY3Rpb24sIG1fZXJyb3Iu
Z2V0KCkpOwotICAgIH0gZWxzZSBpZiAobV9zdGF0ZW1lbnRDYWxsYmFjaykKLSAgICAgICAgY2Fs
bGJhY2tFcnJvciA9ICFtX3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0cmFuc2FjdGlvbiwgbV9y
ZXN1bHRTZXQuZ2V0KCkpOwotCi0gICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNrcywgdG8g
YnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBtX3N0YXRlbWVudENhbGxiYWNrID0gMDsKLSAg
ICBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2sgPSAwOwotCi0gICAgcmV0dXJuIGNhbGxiYWNrRXJy
b3I7Ci19Ci0KLXZvaWQgU1FMU3RhdGVtZW50OjpzZXRGYWlsdXJlRHVlVG9RdW90YSgpCi17Ci0g
ICAgQVNTRVJUKCFtX2Vycm9yICYmICFtX3Jlc3VsdFNldCk7Ci0gICAgbV9lcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OlFVT1RBX0VSUiwgInRoZXJlIHdhcyBub3QgZW5vdWdoIHJl
bWFpbmluZyBzdG9yYWdlIHNwYWNlLCBvciB0aGUgc3RvcmFnZSBxdW90YSB3YXMgcmVhY2hlZCBh
bmQgdGhlIHVzZXIgZGVjbGluZWQgdG8gYWxsb3cgbW9yZSBzcGFjZSIpOwotfQotCi12b2lkIFNR
TFN0YXRlbWVudDo6Y2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpCi17Ci0gICAgaWYgKGxhc3RFeGVj
dXRpb25GYWlsZWREdWVUb1F1b3RhKCkpCi0gICAgICAgIG1fZXJyb3IgPSAwOwotfQotCi1ib29s
IFNRTFN0YXRlbWVudDo6bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2Vycm9yICYmIG1fZXJyb3ItPmNvZGUoKSA9PSBTUUxFcnJvcjo6UVVPVEFf
RVJSOworICAgIHJldHVybiByZXN1bHRTZXQucmVsZWFzZSgpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnRTeW5jLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBTUUxTdGF0ZW1lbnRTeW5jX2gKKyNkZWZpbmUgU1FMU3RhdGVt
ZW50U3luY19oCisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTUUxWYWx1ZS5o
IgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERhdGFiYXNlU3luYzsKK2NsYXNzIFNRTFJlc3Vs
dFNldDsKKworY2xhc3MgU1FMU3RhdGVtZW50U3luYyB7CitwdWJsaWM6CisgICAgU1FMU3RhdGVt
ZW50U3luYyhjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYg
YXJndW1lbnRzLCBib29sIHJlYWRPbmx5KTsKKworICAgIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0
PiBleGVjdXRlKERhdGFiYXNlU3luYyosIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKyAg
ICBTdHJpbmcgbV9zdGF0ZW1lbnQ7CisgICAgVmVjdG9yPFNRTFZhbHVlPiBtX2FyZ3VtZW50czsK
KyAgICBib29sIG1fcmVhZE9ubHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCisKKyNlbmRpZiAvLyBTUUxTdGF0ZW1lbnRTeW5jX2gK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gNjMwMTkpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw2IEBACiAKICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGhy
ZWFkLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKQEAgLTM3MCw3ICszNjksNyBAQCBib29sIFNRTFRyYW5zYWN0aW9uOjpydW5DdXJy
ZW50U3RhdGVtZW50CiAgICAgICAgICAgICAvLyBGbGFnIHRoaXMgdHJhbnNhY3Rpb24gYXMgaGF2
aW5nIGNoYW5nZWQgdGhlIGRhdGFiYXNlIGZvciBsYXRlciBkZWxlZ2F0ZSBub3RpZmljYXRpb24K
ICAgICAgICAgICAgIG1fbW9kaWZpZWREYXRhYmFzZSA9IHRydWU7CiAgICAgICAgICAgICAvLyBB
bHNvIGRpcnR5IHRoZSBzaXplIG9mIHRoaXMgZGF0YWJhc2UgZmlsZSBmb3IgY2FsY3VsYXRpbmcg
cXVvdGEgdXNhZ2UKLSAgICAgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCkt
PmRpZEV4ZWN1dGVTdGF0ZW1lbnQodGhpcyk7CisgICAgICAgICAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNsaWVudCgpLT5kaWRFeGVjdXRlU3RhdGVtZW50KGRhdGFiYXNlKCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlbWVudC0+aGFzU3RhdGVtZW50Q2FsbGJh
Y2soKSkgewpAQCAtNDMyLDcgKzQzMSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJR
dW90YUluY3JlYXMKICAgICBBU1NFUlQobV9jdXJyZW50U3RhdGVtZW50KTsKICAgICBBU1NFUlQo
IW1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KTsKIAotICAgIG1fc2hvdWxkUmV0cnlDdXJy
ZW50U3RhdGVtZW50ID0gbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkRXhjZWVk
UXVvdGEodGhpcyk7CisgICAgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRFeGNlZWRRdW90YShkYXRhYmFzZSgpKTsKIAog
ICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHM7CiAgICAgTE9H
KFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIHJ1blN0YXRlbWVudHMgZm9yIHRyYW5zYWN0aW9uICVw
XG4iLCB0aGlzKTsKQEAgLTQ3Miw3ICs0NzEsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwb3N0
ZmxpZ2h0QW5kQ29tbWl0CiAKICAgICAvLyBUaGUgY29tbWl0IHdhcyBzdWNjZXNzZnVsLiBJZiB0
aGUgdHJhbnNhY3Rpb24gbW9kaWZpZWQgdGhpcyBkYXRhYmFzZSwgbm90aWZ5IHRoZSBkZWxlZ2F0
ZXMuCiAgICAgaWYgKG1fbW9kaWZpZWREYXRhYmFzZSkKLSAgICAgICAgbV9kYXRhYmFzZS0+dHJh
bnNhY3Rpb25DbGllbnQoKS0+ZGlkQ29tbWl0VHJhbnNhY3Rpb24odGhpcyk7CisgICAgICAgIG1f
ZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24o
ZGF0YWJhc2UoKSk7CiAKICAgICAvLyBOb3cgcmVsZWFzZSBvdXIgdW5uZWVkZWQgY2FsbGJhY2tz
LCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgogICAgIG1fY2FsbGJhY2sgPSAwOwpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDYzMDE5KQorKysgV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE3ICszMCwxNSBAQAog
CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCisj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlNRTFN0YXRlbWVudC5oIgogI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQogY2xhc3MgRGF0
YWJhc2U7CiBjbGFzcyBTUUxFcnJvcjsKIGNsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uOwpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oCShyZXZpc2lvbiA2MzAxOSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVNoYXJlZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bkNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
Q2xpZW50LmNwcAkocmV2aXNpb24gNjMwMTkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25DbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywzNiArMzMsMjcgQEAKIAogI2lm
IEVOQUJMRShEQVRBQkFTRSkKIAotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9t
ZUNsaWVudC5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUaHJl
YWQuaCIKKyNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VU
cmFja2VyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5j
bHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRUcmFuc2FjdGlvbihTUUxUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24pCit2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21t
aXRXcml0ZVRyYW5zYWN0aW9uKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewotICAgIEFT
U0VSVChjdXJyZW50VGhyZWFkKCkgPT0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7Ci0gICAg
RGF0YWJhc2UqIGRhdGFiYXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgRGF0YWJh
c2VUcmFja2VyOjp0cmFja2VyKCkuc2NoZWR1bGVOb3RpZnlEYXRhYmFzZUNoYW5nZWQoCiAgICAg
ICAgIGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmll
cigpKTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0YXRlbWVu
dChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50
OjpkaWRFeGVjdXRlU3RhdGVtZW50KEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewotICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7Ci0g
ICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZGF0YWJhc2VDaGFuZ2VkKHRyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpKTsKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5kYXRhYmFzZUNo
YW5nZWQoZGF0YWJhc2UpOwogfQogCi1ib29sIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRFeGNl
ZWRRdW90YShTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCitib29sIFNRTFRyYW5zYWN0aW9u
Q2xpZW50OjpkaWRFeGNlZWRRdW90YShBYnN0cmFjdERhdGFiYXNlKiBkYXRhYmFzZSkKIHsKLSAg
ICBBU1NFUlQodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IHRyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpOwotCisgICAgQVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY3Vy
cmVudFF1b3RhID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucXVvdGFGb3JPcmlnaW4oZGF0
YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpOwogICAgIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmRhdGFiYXNlRXhjZWVkZWRRdW90YShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmll
cigpKTsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbmV3UXVvdGEgPSBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5xdW90YUZvck9yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7Cklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaAkocmV2aXNpb24gNjMwMTkp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsMTYgKzM3LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNz
IFNRTFRyYW5zYWN0aW9uOworY2xhc3MgQWJzdHJhY3REYXRhYmFzZTsKKworLy8gQSBjbGllbnQg
dG8gdGhlIFNRTFRyYW5zYWN0aW9uIGNsYXNzLiBBbGxvd3MgU1FMVHJhbnNhY3Rpb24gdG8gbm90
aWZ5IGludGVyZXN0ZWQKKy8vIHBhcnRpZXMgdGhhdCBjZXJ0YWluIHRoaW5ncyBoYXZlIGhhcHBl
bmVkIGluIGEgdHJhbnNhY3Rpb24uCitjbGFzcyBTUUxUcmFuc2FjdGlvbkNsaWVudCA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgdm9pZCBkaWRDb21taXRXcml0ZVRyYW5zYWN0
aW9uKEFic3RyYWN0RGF0YWJhc2UqKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVTdGF0ZW1lbnQoQWJz
dHJhY3REYXRhYmFzZSopOworICAgIGJvb2wgZGlkRXhjZWVkUXVvdGEoQWJzdHJhY3REYXRhYmFz
ZSopOworfTsKIAotICAgIC8vIEEgY2xpZW50IHRvIHRoZSBTUUxUcmFuc2FjdGlvbiBjbGFzcy4g
QWxsb3dzIFNRTFRyYW5zYWN0aW9uIHRvIG5vdGlmeSBpbnRlcmVzdGVkCi0gICAgLy8gcGFydGll
cyB0aGF0IGNlcnRhaW4gdGhpbmdzIGhhdmUgaGFwcGVuZWQgaW4gYSB0cmFuc2FjdGlvbi4KLSAg
ICBjbGFzcyBTUUxUcmFuc2FjdGlvbkNsaWVudCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAg
cHVibGljOgotICAgICAgICB2b2lkIGRpZENvbW1pdFRyYW5zYWN0aW9uKFNRTFRyYW5zYWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZGlkRXhlY3V0ZVN0YXRlbWVudChTUUxUcmFuc2FjdGlvbiopOwot
ICAgICAgICBib29sIGRpZEV4Y2VlZFF1b3RhKFNRTFRyYW5zYWN0aW9uKik7Ci0gICAgfTsKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDYzMDE5KQorKysgV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw3ICszMSw3IEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKLSNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVTaGFyZWQuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmNw
cAkocmV2aXNpb24gNjMwMTkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5j
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiwyOCArMiwzMCBAQAogICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKQEAgLTMyLDExICszNCwxNCBAQAogI2lmIEVOQUJMRShEQVRBQkFT
RSkKIAogI2luY2x1ZGUgIkRhdGFiYXNlU3luYy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTEV4Y2VwdGlvbi5o
IgogI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgorI2luY2x1ZGUgIlNRTFN0YXRlbWVudFN5bmMu
aCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNsaWVudC5oIgogI2luY2x1ZGUgIlNRTFRyYW5z
YWN0aW9uU3luY0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKKyNpbmNsdWRlICJT
UUxpdGVUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAg
LTUyLDIyICs1NywxNTAgQEAgU1FMVHJhbnNhY3Rpb25TeW5jOjpTUUxUcmFuc2FjdGlvblN5bmMo
RAogICAgIDogbV9kYXRhYmFzZShkYikKICAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCiAgICAg
LCBtX3JlYWRPbmx5KHJlYWRPbmx5KQorICAgICwgbV9tb2RpZmllZERhdGFiYXNlKGZhbHNlKQor
ICAgICwgbV90cmFuc2FjdGlvbkNsaWVudChuZXcgU1FMVHJhbnNhY3Rpb25DbGllbnQoKSkKIHsK
ICAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRl
eHRUaHJlYWQoKSk7Ci0gICAgQVNTRVJUKGNhbGxiYWNrKTsKIH0KIAogU1FMVHJhbnNhY3Rpb25T
eW5jOjp+U1FMVHJhbnNhY3Rpb25TeW5jKCkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgaWYgKG1fc3Fs
aXRlVHJhbnNhY3Rpb24gJiYgbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQorICAg
ICAgICByb2xsYmFjaygpOwogfQogCi1QYXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gU1FMVHJhbnNh
Y3Rpb25TeW5jOjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTUUxWYWx1
ZT4mLCBFeGNlcHRpb25Db2RlJikKK1Bhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBTUUxUcmFuc2Fj
dGlvblN5bmM6OmV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZl
Y3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNT
RVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFk
KCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKKyAgICAgICAgZWMgPSBTUUxF
eGNlcHRpb246OlVOS05PV05fRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBp
ZiAoIW1fZGF0YWJhc2UtPnZlcnNpb25NYXRjaGVzRXhwZWN0ZWQoKSkgeworICAgICAgICBlYyA9
IFNRTEV4Y2VwdGlvbjo6VkVSU0lPTl9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIGlmIChzcWxTdGF0ZW1lbnQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGJvb2wgcmVhZE9ubHlNb2RlID0gbV9yZWFkT25seSB8fCBtX2RhdGFiYXNlLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzRGF0YWJhc2VSZWFkT25seSgpOworICAgIFNRTFN0YXRlbWVudFN5
bmMgc3RhdGVtZW50KHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCByZWFkT25seU1vZGUpOworCisg
ICAgbV9kYXRhYmFzZS0+cmVzZXRBdXRob3JpemVyKCk7CisgICAgYm9vbCByZXRyeVN0YXRlbWVu
dCA9IHRydWU7CisgICAgUmVmUHRyPFNRTFJlc3VsdFNldD4gcmVzdWx0U2V0OworICAgIHdoaWxl
IChyZXRyeVN0YXRlbWVudCkgeworICAgICAgICByZXRyeVN0YXRlbWVudCA9IGZhbHNlOworICAg
ICAgICByZXN1bHRTZXQgPSBzdGF0ZW1lbnQuZXhlY3V0ZShtX2RhdGFiYXNlLmdldCgpLCBlYyk7
CisgICAgICAgIGlmICghcmVzdWx0U2V0KSB7CisgICAgICAgICAgICBpZiAobV9zcWxpdGVUcmFu
c2FjdGlvbi0+d2FzUm9sbGVkQmFja0J5U3FsaXRlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAgICAgICAgIGlmIChlYyA9PSBTUUxFeGNlcHRpb246OlFVT1RBX0VSUikgewor
ICAgICAgICAgICAgICAgIGlmIChtX3RyYW5zYWN0aW9uQ2xpZW50LT5kaWRFeGNlZWRRdW90YShk
YXRhYmFzZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBlYyA9IDA7CisgICAgICAgICAgICAg
ICAgICAgIHJldHJ5U3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAobV9kYXRhYmFzZS0+bGFzdEFjdGlvbkNoYW5nZWREYXRhYmFzZSgpKSB7
CisgICAgICAgIG1fbW9kaWZpZWREYXRhYmFzZSA9IHRydWU7CisgICAgICAgIG1fdHJhbnNhY3Rp
b25DbGllbnQtPmRpZEV4ZWN1dGVTdGF0ZW1lbnQoZGF0YWJhc2UoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdFNldC5yZWxlYXNlKCk7Cit9CisKK0V4Y2VwdGlvbkNvZGUgU1FMVHJhbnNh
Y3Rpb25TeW5jOjpiZWdpbigpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+
b3BlbmVkKCkpCisgICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOworCisg
ICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9n
cmVzcygpKTsKKworICAgIC8vIFNldCB0aGUgbWF4aW11bSB1c2FnZSBmb3IgdGhpcyB0cmFuc2Fj
dGlvbiBpZiB0aGlzIHRyYW5zYWN0aW9ucyBpcyBub3QgcmVhZC1vbmx5LgorICAgIGlmICghbV9y
ZWFkT25seSkKKyAgICAgICAgbV9kYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKS5zZXRNYXhpbXVt
U2l6ZShtX2RhdGFiYXNlLT5tYXhpbXVtU2l6ZSgpKTsKKworICAgIEFTU0VSVCghbV9zcWxpdGVU
cmFuc2FjdGlvbik7CisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5zZXQobmV3IFNRTGl0ZVRyYW5z
YWN0aW9uKG1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCksIG1fcmVhZE9ubHkpKTsKKworICAg
IG1fZGF0YWJhc2UtPnJlc2V0RGVsZXRlcygpOworICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRo
b3JpemVyKCk7CisgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICBtX2RhdGFi
YXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICAvLyBDaGVjayBpZiBiZWdpbigpIHN1Y2Nl
ZWRlZC4KKyAgICBpZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgeworICAg
ICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblBy
b2dyZXNzKCkpOworICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgICAg
IHJldHVybiBTUUxFeGNlcHRpb246OkRBVEFCQVNFX0VSUjsKKyAgICB9CisKICAgICByZXR1cm4g
MDsKIH0KIAorRXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGUoKQorewor
ICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4
dFRocmVhZCgpKTsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpIHx8ICFtX2NhbGxiYWNr
IHx8ICFtX2NhbGxiYWNrLT5oYW5kbGVFdmVudChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksIHRoaXMpKSB7CisgICAgICAgIG1fY2FsbGJhY2sgPSAwOworICAgICAgICByZXR1
cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKKyAgICB9CisKKyAgICBtX2NhbGxiYWNrID0g
MDsKKyAgICByZXR1cm4gMDsKK30KKworRXhjZXB0aW9uQ29kZSBTUUxUcmFuc2FjdGlvblN5bmM6
OmNvbW1pdCgpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkp
CisgICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OlVOS05PV05fRVJSOworCisgICAgQVNTRVJU
KG1fc3FsaXRlVHJhbnNhY3Rpb24pOworCisgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZUF1dGhvcml6
ZXIoKTsKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBtX2RhdGFiYXNl
LT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICAvLyBJZiB0aGUgY29tbWl0IGZhaWxlZCwgdGhl
IHRyYW5zYWN0aW9uIHdpbGwgc3RpbGwgYmUgbWFya2VkIGFzICJpbiBwcm9ncmVzcyIKKyAgICBp
ZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQorICAgICAgICByZXR1cm4gU1FM
RXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7CisKKyAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFy
KCk7CisKKyAgICAvLyBWYWN1dW0gdGhlIGRhdGFiYXNlIGlmIGFueXRoaW5nIHdhcyBkZWxldGVk
LgorICAgIGlmIChtX2RhdGFiYXNlLT5oYWREZWxldGVzKCkpCisgICAgICAgIG1fZGF0YWJhc2Ut
PmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKKworICAgIC8vIFRoZSBjb21taXQgd2FzIHN1
Y2Nlc3NmdWwuIElmIHRoZSB0cmFuc2FjdGlvbiBtb2RpZmllZCB0aGlzIGRhdGFiYXNlLCBub3Rp
ZnkgdGhlIGRlbGVnYXRlcy4KKyAgICBpZiAobV9tb2RpZmllZERhdGFiYXNlKQorICAgICAgICBt
X3RyYW5zYWN0aW9uQ2xpZW50LT5kaWRDb21taXRXcml0ZVRyYW5zYWN0aW9uKGRhdGFiYXNlKCkp
OworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25TeW5jOjpyb2xsYmFj
aygpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNDb250ZXh0VGhyZWFkKCkpOworICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7
CisgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgbV9zcWxpdGVUcmFuc2Fj
dGlvbi0+cm9sbGJhY2soKTsKKyAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwor
ICAgIH0KKyAgICBtX2RhdGFiYXNlLT5lbmFibGVBdXRob3JpemVyKCk7CisKKyAgICBBU1NFUlQo
IW1fZGF0YWJhc2UtPnNxbGl0ZURhdGFiYXNlKCkudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0Up
CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5oCShyZXZpc2lvbiA2MzAxOSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuaAkod29ya2luZyBjb3B5KQpA
QCAtMiw0NiArMiw1MCBAQAogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgU1FMVHJhbnNhY3Rpb25T
eW5jX2gKICNkZWZpbmUgU1FMVHJhbnNhY3Rpb25TeW5jX2gKIAogI2lmIEVOQUJMRShEQVRBQkFT
RSkKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KIGNs
YXNzIERhdGFiYXNlU3luYzsKIGNsYXNzIFNRTFJlc3VsdFNldDsKK2NsYXNzIFNRTFRyYW5zYWN0
aW9uQ2xpZW50OwogY2xhc3MgU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s7CiBjbGFzcyBTUUxW
YWx1ZTsKK2NsYXNzIFNRTGl0ZVRyYW5zYWN0aW9uOwogY2xhc3MgU3RyaW5nOwogCiAvLyBJbnN0
YW5jZXMgb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCBhbmQgdXNlZCBvbmx5IG9uIHRo
ZSB3b3JrZXIncyBjb250ZXh0IHRocmVhZC4KQEAgLTU2LDEyICs2MCwyMSBAQCBwdWJsaWM6CiAg
ICAgRGF0YWJhc2VTeW5jKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0K
ICAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5OyB9CiAKKyAg
ICBFeGNlcHRpb25Db2RlIGJlZ2luKCk7CisgICAgRXhjZXB0aW9uQ29kZSBleGVjdXRlKCk7Cisg
ICAgRXhjZXB0aW9uQ29kZSBjb21taXQoKTsKKyAgICB2b2lkIHJvbGxiYWNrKCk7CisKIHByaXZh
dGU6CiAgICAgU1FMVHJhbnNhY3Rpb25TeW5jKERhdGFiYXNlU3luYyosIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+LCBib29sIHJlYWRPbmx5KTsKIAogICAgIFJlZlB0cjxE
YXRhYmFzZVN5bmM+IG1fZGF0YWJhc2U7CiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrPiBtX2NhbGxiYWNrOwogICAgIGJvb2wgbV9yZWFkT25seTsKKworICAgIGJvb2wgbV9t
b2RpZmllZERhdGFiYXNlOworICAgIE93blB0cjxTUUxUcmFuc2FjdGlvbkNsaWVudD4gbV90cmFu
c2FjdGlvbkNsaWVudDsKKyAgICBPd25QdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJh
bnNhY3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25TeW5jLmlkbAkocmV2aXNpb24gNjMwMTkpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMiwyOCArMiwz
MCBAQAogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKIG1vZHVsZSBzdG9yYWdlIHsKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oCShyZXZpc2lvbiA2MzAxOSkKKysr
IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yLDI4ICsyLDMwIEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqVHJhbnNhY3Rpb24KLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lm
bmRlZiBTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFja19oCkBAIC0zMiw3ICszNCw2IEBACiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaWRsCShyZXZpc2lvbiA2
MzAxOSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTIsMjggKzIsMzAgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgogICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiBtb2R1bGUg
c3RvcmFnZSB7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25D
bGllbnRDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVt
L1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA2MzAxOSkKKysrIFdl
YkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9TUUxUcmFuc2FjdGlvbkNsaWVudENocm9taXVtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsMTggKzMxLDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25DbGllbnQuaCIKIAotI2luY2x1ZGUgIkRhdGFiYXNlLmgi
CisjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlT2JzZXJ2
ZXIuaCIKLSNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgotI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNrIDogcHVibGljIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPE5v
dGlmeURhdGFiYXNlQ2hhbmdlZFRhc2s+IGNyZWF0ZShEYXRhYmFzZSAqZGF0YWJhc2UpCisgICAg
c3RhdGljIFBhc3NPd25QdHI8Tm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzaz4gY3JlYXRlKEFic3Ry
YWN0RGF0YWJhc2UgKmRhdGFiYXNlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBOb3RpZnlE
YXRhYmFzZUNoYW5nZWRUYXNrKGRhdGFiYXNlKTsKICAgICB9CkBAIC01MywzNCArNTAsMzUgQEAg
cHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBOb3RpZnlEYXRhYmFzZUNoYW5nZWRUYXNr
KFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlKQorICAgIE5vdGlmeURhdGFiYXNlQ2hhbmdl
ZFRhc2soUGFzc1JlZlB0cjxBYnN0cmFjdERhdGFiYXNlPiBkYXRhYmFzZSkKICAgICAgICAgOiBt
X2RhdGFiYXNlKGRhdGFiYXNlKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8RGF0YWJhc2U+
IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPEFic3RyYWN0RGF0YWJhc2U+IG1fZGF0YWJhc2U7CiB9
OwogCi12b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRUcmFuc2FjdGlvbihTUUxU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRD
b21taXRXcml0ZVRyYW5zYWN0aW9uKEFic3RyYWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogewotICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7Ci0g
ICAgaWYgKCF0cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKE5vdGlmeURh
dGFiYXNlQ2hhbmdlZFRhc2s6OmNyZWF0ZSh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSkpOworICAg
IGlmICghZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFk
KCkpIHsKKyAgICAgICAgZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRh
c2soTm90aWZ5RGF0YWJhc2VDaGFuZ2VkVGFzazo6Y3JlYXRlKGRhdGFiYXNlKSk7CisgICAgICAg
IHJldHVybjsKICAgICB9CisKKyAgICBXZWJDb3JlOjpEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFz
ZU1vZGlmaWVkKGRhdGFiYXNlKTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlk
RXhlY3V0ZVN0YXRlbWVudChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit2b2lkIFNRTFRy
YW5zYWN0aW9uQ2xpZW50OjpkaWRFeGVjdXRlU3RhdGVtZW50KEFic3RyYWN0RGF0YWJhc2UqIGRh
dGFiYXNlKQogewogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciBleGVjdXRpbmcg
ZXZlcnkgc3RhdGVtZW50IHRoYXQgY2hhbmdlcyB0aGUgREIuCiAgICAgLy8gQ2hyb21pdW0gZG9l
c24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IHRoYXQgcG9pbnQuCi0gICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKIH0KIAotYm9vbCBTUUxU
cmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhjZWVkUXVvdGEoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uKQorYm9vbCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhjZWVkUXVvdGEoQWJzdHJhY3RE
YXRhYmFzZSogZGF0YWJhc2UpCiB7CiAgICAgLy8gQ2hyb21pdW0gZG9lcyBub3QgYWxsb3cgdXNl
cnMgdG8gbWFudWFsbHkgY2hhbmdlIHRoZSBxdW90YSBmb3IgYW4gb3JpZ2luIChmb3Igbm93LCBh
dCBsZWFzdCkuCiAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcuCi0gICAgQVNTRVJUKHRyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVh
ZCgpKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXND
b250ZXh0VGhyZWFkKCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gNjMwMTkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw5NCBAQAorMjAxMC0wNy0wOSAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBv
cnRpbmcgYXMgbWFueSBhc3luYyBEQiB0ZXN0cyBhcyBwb3NzaWJsZSB0byBzeW5jIERCcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNjA3CisKKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Ut
c3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1zeW5j
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2VtcHR5LXN0YXRl
bWVudC1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0
b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93
b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNj
ZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0
ZW1lbnQtc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9t
dWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5z
YWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3lu
Yy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4t
ZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
d29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMtZXhwZWN0ZWQudHh0OiBD
b3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNl
LXN5bmMtaW5wdXRzLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFn
ZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0bWw6IENvcGllZCBmcm9tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbC4KKyAg
ICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJz
aW9uLXN5bmMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3Rv
cmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1l
eHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Bl
bi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvd29y
a2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mt
c3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZl
cnNpb24taGFuZGxlLXJldXNlLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAoY2F0Y2gpOgorICAg
ICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1zeW5j
LTEuanM6IEFkZGVkLgorICAgICAgICAoKToKKyAgICAgICAgKHRyeSk6CisgICAgICAgICogZmFz
dC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMi5qczogQWRk
ZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2VtcHR5LXN0YXRl
bWVudC1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNv
dXJjZXMvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKHRocm93T25U
b1N0cmluZ09iamVjdC50b1N0cmluZyk6CisgICAgICAgICh2YXIpOgorICAgICAgICAoKToKKyAg
ICAgICAgKHJ1blRyYW5zYWN0aW9uVGVzdCk6CisgICAgICAgIChydW5UcmFuc2FjdGlvblRlc3Rz
KToKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0ZXNxbC1h
Y2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAgKGV4ZWN1
dGVTdGF0ZW1lbnQpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9t
dWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5qczogQWRkZWQu
CisgICAgICAgIChydW5UcmFuc2FjdGlvbik6CisgICAgICAgICh2YXIpOgorICAgICAgICAqIGZh
c3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtc3luYy5q
czogQWRkZWQuCisgICAgICAgIChjaGVja0NvbXBsZXRpb24pOgorICAgICAgICAocnVuVGVzdC5k
Yik6CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9y
ZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5jLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1l
bXB0eS12ZXJzaW9uLXN5bmMuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9y
YWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmpzOiBDb3BpZWQgZnJvbSBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1z
eW5jLWlucHV0cy5qcy4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
b3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0
cy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
b3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmpzOiBBZGRl
ZC4KKyAgICAgICAgKG9wZW5UZXN0RGF0YWJhc2UpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9z
dG9yYWdlL3Jlc291cmNlcy9zcWwtZGF0YS10eXBlcy1zeW5jLmpzOiBBZGRlZC4KKyAgICAgICAg
KCk6CisgICAgICAgICh0ZXN0REJWYWx1ZXMpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9y
YWdlL3Jlc291cmNlcy9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMuanM6IEFkZGVkLgorICAgICAg
ICAodGVzdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKCk6CisgICAgICAgICh0ZXN0SW52YWxpZFN0
YXRlbWVudCk6CisgICAgICAgICh0ZXN0SW5jb3JyZWN0TnVtYmVyT2ZCaW5kUGFyYW1ldGVycyk6
CisgICAgICAgICh0ZXN0QmluZFBhcmFtZXRlck9mV3JvbmdUeXBlLmJhZFN0cmluZy50b1N0cmlu
Zyk6CisgICAgICAgICh0ZXN0QmluZFBhcmFtZXRlck9mV3JvbmdUeXBlKToKKyAgICAgICAgKHRl
c3RWZXJzaW9uTWlzbWF0Y2gudGVzdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKHRlc3RWZXJzaW9u
TWlzbWF0Y2gpOgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90ZXN0
LWF1dGhvcml6ZXItc3luYy5qczogQWRkZWQuCisgICAgICAgIChjbGVhbnVwKToKKyAgICAgICAg
KGV4ZWN1dGVTdGF0ZW1lbnQpOgorICAgICAgICAoY3JlYXRlVGFibGVDYWxsYmFjayk6CisgICAg
ICAgIChjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2spOgorICAgICAgICAob3RoZXJTdGF0ZW1lbnRz
Q2FsbGJhY2spOgorICAgICAgICAoZHJvcFN0YXRlbWVudHNDYWxsYmFjayk6CisgICAgICAgICh0
ZXN0UmVhZFdyaXRlTW9kZSk6CisgICAgICAgICh0ZXN0UmVhZE9ubHlNb2RlKToKKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rp
b24tc3luYy5qczogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRh
dGEtdHlwZXMtc3luYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vy
cy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVzLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1jb2Rl
cy1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3Qt
YXV0aG9yaXplci1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3RyYW5zYWN0
aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuaHRtbDogQWRkZWQuCisKIDIwMTAtMDctMDkgIEtlbm5l
dGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5hdGUg
Q2hhcGluLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZl
cnNpb24taGFuZGxlLXJldXNlLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1z
eW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACitUZXN0IHRoYXQgdGhlIGRhdGFiYXNlIGNhbiBi
ZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4KK1BBU1M6IGNoYW5nZVZlcnNp
b24oKSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3YXMgY2FsbGVkLgorUEFTUzogTm8gZXhjZXB0aW9u
IHRocm93biB3aGlsZSBleGVjdXRpbmcgc3RhdGVtZW50cy4KK1BBU1M6IE5vIGV4Y2VwdGlvbiB0
aHJvd24gd2hpbGUgcnVubmluZyBhIHRyYW5zYWN0aW9uLgorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12
ZXJzaW9uLWhhbmRsZS1yZXVzZS1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5k
bGUtcmV1c2Utc3luYy5qcycpIj4KK1Rlc3QgdGhhdCB0aGUgZGF0YWJhc2UgY2FuIGJlIGFjY2Vz
c2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3By
ZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hh
bmdlLXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBA
QAorVGVzdCB0aGF0IHZlcnNpb24gdXBkYXRlcyBpbiBzeW5jIGRhdGFiYXNlcyB3b3JrIGNvcnJl
Y3RseS4KK1BBU1M6IGRiLnZlcnNpb24gaXMgMyBhcyBleHBlY3RlZC4KKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24tc3luYy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9u
LXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL2NoYW5nZS12ZXJzaW9uLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCArPSBtZXNzYWdl
ICsgIjxicj4iOworfQorCitmdW5jdGlvbiBmaW5pc2hUZXN0KCkKK3sKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cisg
ICAgfQorCisgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj8yIikgeworICAgICAg
ICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMt
Mi5qcyIpOworICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgICAgICAgIGlmIChldmVudC5kYXRhID09ICJkb25lIikKKyAgICAgICAgICAgICAgICBmaW5p
c2hUZXN0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9nKGV2ZW50LmRh
dGEpOworICAgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICAgIHZhciB3b3JrZXIgPSBuZXcg
V29ya2VyKCJyZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0xLmpzIik7CisgICAgICAgIHdv
cmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50
LmRhdGEgPT0gImRvbmUiKQorICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0g
d2luZG93LmxvY2F0aW9uICsgIj8yIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEg
PT0gImZhaWwiKQorICAgICAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBsb2coZXZlbnQuZGF0YSk7CisgICAgICAgIH07CisgICAgfQor
fQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CitUZXN0IHRo
YXQgdmVyc2lvbiB1cGRhdGVzIGluIHN5bmMgZGF0YWJhc2VzIHdvcmsgY29ycmVjdGx5LgorPHBy
ZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2VtcHR5LXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1z
dGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0ZW1lbnQtc3luYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorVGhpcyB0ZXN0IHRyaWVzIHRvIGV4ZWN1dGUgYW4g
ZW1wdHkgc3RhdGVtZW50LgorUEFTUzogcmVzdWx0IGlzIG51bGwKK1BBU1MKKwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9lbXB0eS1zdGF0
ZW1lbnQtc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvZW1wdHktc3RhdGVtZW50LXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1
dHMtY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0
KCdyZXNvdXJjZXMvZW1wdHktc3RhdGVtZW50LXN5bmMuanMnKSI+CitUaGlzIHRlc3QgdHJpZXMg
dG8gZXhlY3V0ZSBhbiBlbXB0eSBzdGF0ZW1lbnQuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJl
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXN5bmMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
ZXhlY3V0ZS1zcWwtYXJncy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMCBAQAorVGVzdCB2YXJpb3VzIGlucHV0cyB0byBleGVjdXRlU3FsKCkuCitQQVNTOiBleGVj
dXRlU3FsKCIiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwo
IiIsIG51bGwpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhlY3V0ZVNxbCgi
IiwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVT
cWwoIiIsIFtdKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwo
IiIsIFsgImFyZzAiIF0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzogZXhlY3V0
ZVNxbCgiIiwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVT
cWwoIiIsIHsgbGVuZ3RoOiAwIH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUzog
ZXhlY3V0ZVNxbCgiIiwgeyBsZW5ndGg6IDEsIDA6ICJhcmcwIiB9KSBkaWQgbm90IHRocm93IGFu
IGV4Y2VwdGlvbi4KK1BBU1M6IGV4ZWN1dGVTcWwoKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhw
ZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKG51bGwpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBl
Y3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwodW5kZWZpbmVkKSB0aHJldyBhbiBleGNlcHRpb24gYXMg
ZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBl
Y3RlZC4KK1BBU1M6IGV4ZWN1dGVTcWwodGhyb3dPblRvU3RyaW5nT2JqZWN0KSB0aHJldyBhbiBl
eGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRlU3FsKCIiLCB0aHJvd09uR2V0TGVu
Z3RoT2JqZWN0KSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTOiBleGVjdXRl
U3FsKCIiLCB0aHJvd09uR2V0WmVyb09iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVj
dGVkLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgWyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXSkgdGhy
ZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgMCkgdGhy
ZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUzogZXhlY3V0ZVNxbCgiIiwgIiIpIHRo
cmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVj
dXRlLXNxbC1hcmdzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMv
ZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmpzJykiPgorVGVzdCB2YXJpb3VzIGlucHV0cyB0byBleGVj
dXRlU3FsKCkuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRz
LW9ubHktb25lLXN0YXRlbWVudC1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUt
c3RhdGVtZW50LXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVu
dC1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdCB0
aGF0IGV4ZWN1dGVTcWwoKSBhY2NlcHRzIG9ubHkgb25lIHN0YXRlbWVudC4KK1BBU1M6IElOU0VS
VCBJTlRPIFRlc3QgVkFMVUVTICgxKQorUEFTUzogSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDIp
OworUEFTUzogICAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDMpICAgIAorUEFTUzogICAgSU5T
RVJUIElOVE8gVGVzdCBWQUxVRVMgKDQpOyAgIAorUEFTUzogSU5TRVJUIElOVE8gVGVzdCBWQUxV
RVMgKDUpICAgOworUEFTUzogSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDYpOyBnYXJiYWdlCitQ
QVNTOiBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoNyk7IElOU0VSVCBJTlRPIFRlc3QgVkFMVUVT
ICg4KQorUEFTUzogICBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoOSk7ICAgSU5TRVJUIElOVE8g
VGVzdCBWQUxVRVMgKDEwKTsgICAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZXNxbC1h
Y2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUt
c3RhdGVtZW50LXN5bmMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29tbW9uLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvZXhl
Y3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmpzJykiPgorVGVzdCB0aGF0
IGV4ZWN1dGVTcWwoKSBhY2NlcHRzIG9ubHkgb25lIHN0YXRlbWVudC4KKzxwcmUgaWQ9ImNvbnNv
bGUiPgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMt
c3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhhdCBleGVjdXRp
bmcgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1l
IGRhdGFiYXNlIGRvZXNuJ3QgY2F1c2UgZGVhZGxvY2tzLgorUEFTUworCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVy
ZW50LWhhbmRsZXMtc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1z
eW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3luYy5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24t
ZGlmZmVyZW50LWhhbmRsZXMtc3luYy5qcycpIj4KK1Rlc3QgdGhhdCBleGVjdXRpbmcgbXVsdGlw
bGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNl
IGRvZXNuJ3QgY2F1c2UgZGVhZGxvY2tzLgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVh
dGlvbi1jYWxsYmFjay1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2st
c3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorVGhpcyB0ZXN0
IHRlc3RzIG9wZW5EYXRhYmFzZVN5bmMoKSdzIGNyZWF0aW9uIGNhbGxiYWNrLgorUEFTUzogQ3Jl
YXRpb24gY2FsbGJhY2sgd2FzIGNhbGxlZC4KK1BBU1M6IFZlcnNpb24gc2V0IHRvIGVtcHR5IHN0
cmluZyBhcyBleHBlY3RlZC4KK1BBU1M6IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGFuZCBkYjFG
YWlsIGlzIG51bGwgYXMgZXhwZWN0ZWQuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
Y3JlYXRpb24tY2FsbGJhY2stc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zeW5j
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtY3Jl
YXRpb24tY2FsbGJhY2stc3luYy5qcycpIj4KK1RoaXMgdGVzdCB0ZXN0cyBvcGVuRGF0YWJhc2VT
eW5jKCkncyBjcmVhdGlvbiBjYWxsYmFjay4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9v
cGVuLWRhdGFiYXNlLWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12
ZXJzaW9uLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhhdCBubyBleGNlcHRp
b24gaXMgdGhyb3duIHdoZW4gdGhlIGRhdGFiYXNlIGlzIG9wZW5lZCB3aXRoIGFuIGVtcHR5IHZl
cnNpb24uCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29w
ZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5
bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3Qt
aW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVu
VGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zeW5jLmpzJykiPgor
VGVzdCB0aGF0IG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiB0aGUgZGF0YWJhc2UgaXMgb3Bl
bmVkIHdpdGggYW4gZW1wdHkgdmVyc2lvbi4KKzxwcmUgaWQ9ImNvbnNvbGUiPgorPC9wcmU+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9v
cGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gNjIyMzApCShmcm9tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMtZXhwZWN0ZWQudHh0OjYyMjMwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMt
c3luYy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMSBAQAorVGhpcyB0
ZXN0IG1ha2VzIHN1cmUgdGhhdCBvcGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlk
IHBhcmFtZXRlcnMuCitQQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCitQQVNTOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCitQQVNTOiB1bmRlZmluZWQKK1BBU1M6IHVuZGVm
aW5lZAorUEFTUzogdW5kZWZpbmVkCitQQVNTOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxNworUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4KK1BBU1M6IG9wZW5E
YXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQuCitQQVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMo
KSB3aXRoIGEgY3JlYXRpb24gY2FsbGJhY2sgc3VjY2VlZGVkLgorCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFz
ZS1pbnB1dHMtc3luYy5odG1sCShyZXZpc2lvbiA2MjIzMCkJKGZyb20gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sOjYyMjMwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMt
c3luYy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhZG9jdHlwZSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdGVzdC1pbnB1dHMtY29t
bW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCdyZXNv
dXJjZXMvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5qcycpIj4KK1RoaXMgdGVzdCBtYWtlcyBz
dXJlIHRoYXQgb3BlbkRhdGFiYXNlU3luYygpIGFjY2VwdHMgb25seSB2YWxpZCBwYXJhbWV0ZXJz
LgorPHByZSBpZD0iY29uc29sZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2UtaW5wdXRzLXN5bmMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVu
LWRhdGFiYXNlLWlucHV0cy1zeW5jLmh0bWwJKHJldmlzaW9uIDYyMjMwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQAogPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0
LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgogPC9oZWFkPgogCi08Ym9keSBvbmxvYWQ9InJ1
blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzJykiPgorPGJvZHkg
b25sb2FkPSJydW5UZXN0KCdyZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1pbnB1dHMtc3luYy5qcycp
Ij4KIFRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgb3BlbkRhdGFiYXNlU3luYygpIGFjY2VwdHMg
b25seSB2YWxpZCBwYXJhbWV0ZXJzLgogPHByZSBpZD0iY29uc29sZSI+CiA8L3ByZT4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5
LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorVGhpcyB0ZXN0cyB0aGF0IGNhbGxpbmcgb3BlbkRh
dGFiYXNlIHdpdGggYW4gZW1wdHkgdmVyc2lvbiBzdHJpbmcgc2V0cyB0aGUgY3VycmVudCB2ZXJz
aW9uIG9mIHRoYXQgZGF0YWJhc2UgdG8gdGhlIGVtcHR5IHN0cmluZyBhbmQgc3Vic2VxdWVudCBh
dHRlbXB0cyB0byBvcGVuIHRoZSBkYXRhYmFzZSB3aXRoIGEgZGlmZmVyZW50IGV4cGVjdGVkIHZl
cnNpb24gdGhyb3cgYW4gZXhjZXB0aW9uLgorUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRh
dGFiYXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNp
b24tc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24uanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNlcy9vcGVuLWRhdGFi
YXNlLXNldC1lbXB0eS12ZXJzaW9uLXN5bmMuanMnKSI+CitUaGlzIHRlc3RzIHRoYXQgY2FsbGlu
ZyBvcGVuRGF0YWJhc2Ugd2l0aCBhbiBlbXB0eSB2ZXJzaW9uIHN0cmluZyBzZXRzIHRoZSBjdXJy
ZW50IHZlcnNpb24gb2YgdGhhdCBkYXRhYmFzZSB0byB0aGUgZW1wdHkgc3RyaW5nIGFuZCBzdWJz
ZXF1ZW50IGF0dGVtcHRzIHRvIG9wZW4gdGhlIGRhdGFiYXNlIHdpdGggYSBkaWZmZXJlbnQgZXhw
ZWN0ZWQgdmVyc2lvbiB0aHJvdyBhbiBleGNlcHRpb24uCis8cHJlIGlkPSJjb25zb2xlIj4KKzwv
cHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlu
cHV0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDYzMDE5KQorKysgTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTEgKzAsMCBAQAotVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBv
cGVuRGF0YWJhc2VTeW5jKCkgYWNjZXB0cyBvbmx5IHZhbGlkIHBhcmFtZXRlcnMuCi1QQVNTOiBT
WU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCi1QQVNTOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0
aW9uIDEyCi1QQVNTOiB1bmRlZmluZWQKLVBBU1M6IHVuZGVmaW5lZAotUEFTUzogdW5kZWZpbmVk
Ci1QQVNTOiBUWVBFX01JU01BVENIX0VSUjogRE9NIEV4Y2VwdGlvbiAxNwotUEFTUzogb3BlbkRh
dGFiYXNlU3luYygpIHN1Y2NlZWRlZC4KLVBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVk
ZWQuCi1QQVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24gY2Fs
bGJhY2sgc3VjY2VlZGVkLgotCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS1zeW5jLWlucHV0cy5odG1sCShy
ZXZpc2lvbiA2MzAxOSkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4t
ZGF0YWJhc2Utc3luYy1pbnB1dHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMCwwIEBA
Ci08IWRvY3R5cGUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IG9ubG9h
ZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanMnKSI+Ci1U
aGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IG9wZW5EYXRhYmFzZVN5bmMoKSBhY2NlcHRzIG9ubHkg
dmFsaWQgcGFyYW1ldGVycy4KLTxwcmUgaWQ9ImNvbnNvbGUiPgotPC9wcmU+Ci08L2JvZHk+Ci08
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFi
YXNlLXdoaWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
d2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9vcGVuLWRhdGFiYXNlLXdo
aWxlLXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMgQEAKK1Rlc3QgdGhhdCBhIHNlY29uZCBoYW5kbGUgdG8gdGhlIHNhbWUg
ZGF0YWJhc2UgY2FuIGJlIG9wZW5lZCBpbnNpZGUgYSB0cmFuc2FjdGlvbiBydW5uaW5nIG9uIHRo
ZSBmaXJzdCBoYW5kbGUuCitQQVNTOiBzZWNvbmQgaGFuZGxlIG9wZW5lZCBzdWNjZXNzZnVsbHku
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Ut
d2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNh
Y3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlvbi1pbi1w
cm9ncmVzcy1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL29wZW4t
ZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3luYy5qcycpIj4KK1Rlc3Qg
dGhhdCBhIHNlY29uZCBoYW5kbGUgdG8gdGhlIHNhbWUgZGF0YWJhc2UgY2FuIGJlIG9wZW5lZCBp
bnNpZGUgYSB0cmFuc2FjdGlvbiBydW5uaW5nIG9uIHRoZSBmaXJzdCBoYW5kbGUuCis8cHJlIGlk
PSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlwZXMtc3luYy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWRhdGEtdHlw
ZXMtc3luYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3IEBACitUZXN0IHRoYXQgdGhlIHZhbHVlcyByZXR1cm5lZCBieSBEQiBx
dWVyaWVzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSB2YWx1ZXMgaW5zZXJ0ZWQgaW4gdGhl
IGRhdGFiYXNlLgorUEFTUzogcHJvcGVydHkgJ3RpbWVzdGFtcCcgT0ssIHR5cGUgd2FzIG51bWJl
cgorUEFTUzogcHJvcGVydHkgJ2lkJyBPSywgdHlwZSB3YXMgbnVtYmVyCitQQVNTOiBwcm9wZXJ0
eSAncmVhbCcgT0ssIHR5cGUgd2FzIG51bWJlcgorUEFTUzogcHJvcGVydHkgJ3RleHQnIE9LLCB0
eXBlIHdhcyBzdHJpbmcKK1BBU1M6IHByb3BlcnR5ICdibG9iJyBPSywgdHlwZSB3YXMgc3RyaW5n
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3NxbC1kYXRhLXR5cGVz
LXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9zcWwtZGF0YS10eXBlcy1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZGF0YS10eXBlcy1zeW5jLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9h
ZD0icnVuVGVzdCgncmVzb3VyY2VzL3NxbC1kYXRhLXR5cGVzLXN5bmMuanMnKSI+CitUZXN0IHRo
YXQgdGhlIHZhbHVlcyByZXR1cm5lZCBieSBEQiBxdWVyaWVzIGFyZSBvZiB0aGUgc2FtZSB0eXBl
IGFzIHRoZSB2YWx1ZXMgaW5zZXJ0ZWQgaW4gdGhlIGRhdGFiYXNlLgorPHByZSBpZD0iY29uc29s
ZSI+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uvc3FsLWV4Y2VwdGlvbi1j
b2Rlcy1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorVGVzdCB0aGF0IHRoZSBjb3JyZWN0IGV4Y2VwdGlv
bnMgYXJlIHRocm93biBpbiBleGNlcHRpb25hbCBzaXR1YXRpb25zLgorUEFTUzogZXhwZWN0ZWQg
YW5kIGdvdCBlcnJvciBjb2RlIFVOS05PV05fRVJSCitQQVNTOiBleHBlY3RlZCBhbmQgZ290IGVy
cm9yIGNvZGUgU1lOVEFYX0VSUgorUEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFNZ
TlRBWF9FUlIKK1BBU1M6IGV4cGVjdGVkIGFuZCBnb3QgZXJyb3IgY29kZSBVTktOT1dOX0VSUgor
UEFTUzogZXhwZWN0ZWQgYW5kIGdvdCBlcnJvciBjb2RlIFFVT1RBX0VSUgorUEFTUzogVHJhbnNh
Y3Rpb24gd2FzIHJvbGxlZCBiYWNrIGJ5IFNRTGl0ZSBhcyBleHBlY3RlZC4KK1BBU1M6IGV4cGVj
dGVkIGFuZCBnb3QgZXJyb3IgY29kZSBWRVJTSU9OX0VSUgorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9zcWwtZXhjZXB0aW9uLWNv
ZGVzLXN5bmMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlu
cHV0cy1jb21tb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRl
c3QoJ3Jlc291cmNlcy9zcWwtZXhjZXB0aW9uLWNvZGVzLXN5bmMuanMnKSI+CitUZXN0IHRoYXQg
dGhlIGNvcnJlY3QgZXhjZXB0aW9ucyBhcmUgdGhyb3duIGluIGV4Y2VwdGlvbmFsIHNpdHVhdGlv
bnMuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLXN5bmMtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5jLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorVGVzdCB0aGUgZGF0YWJhc2UgYXV0
aG9yaXplci4KK0JlZ2lubmluZyB3cml0ZSB0cmFuc2FjdGlvbjoKK1NRTElURV9DUkVBVEVfVEFC
TEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfSU5ERVggc3RhdGVtZW50IHN1
Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgor
U1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9D
UkVBVEVfVEVNUF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RSSUdH
RVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVklFVyBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorU1FMSVRFX0NSRUFURV9WVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBT
UUxFeGNlcHRpb25dICg1KQorU1FMSVRFX1JFQUQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElU
RV9TRUxFQ1Qgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9ERUxFVEUgc3RhdGVtZW50IHN1
Y2NlZWRlZC4KK1NRTElURV9JTlNFUlQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9VUERB
VEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9QUkFHTUEgc3RhdGVtZW50IGZhaWxlZDog
W29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBz
dWNjZWVkZWQuCitTUUxJVEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElU
RV9UUkFOU0FDVElPTiBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUp
CitTUUxJVEVfQVRUQUNIIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAo
NSkKK1NRTElURV9ERVRBQ0ggc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25d
ICg1KQorU1FMSVRFX1JFSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9BTkFMWVpF
IHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9Q
X0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9URU1QX1RBQkxFIHN0YXRl
bWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2Nl
ZWRlZC4KK1NRTElURV9EUk9QX1RFTVBfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRF
X0RST1BfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVklFVyBzdGF0
ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4K
K1dyaXRlIHRyYW5zYWN0aW9uIHN1Y2NlZWRlZC4KKworQmVnaW5uaW5nIHJlYWQgdHJhbnNhY3Rp
b25zOgorU1FMSVRFX0NSRUFURV9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4
Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitT
UUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9u
XSAoNSkKK1NRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0
IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQg
ZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklF
VyBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfQ1JF
QVRFX1RSSUdHRVIgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQor
U1FMSVRFX0NSRUFURV9WSUVXIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9u
XSAoNSkKK1NRTElURV9DUkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FM
RXhjZXB0aW9uXSAoNSkKK1NRTElURV9DUkVBVEVfSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4K
K1NRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NS
RUFURV9URU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVN
UF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RSSUdHRVIgc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgor
U1FMSVRFX0NSRUFURV9WVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRp
b25dICg1KQorU1FMSVRFX1JFQUQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9TRUxFQ1Qg
c3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9ERUxFVEUgc3RhdGVtZW50IGZhaWxlZDogW29i
amVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0lOU0VSVCBzdGF0ZW1lbnQgZmFpbGVkOiBb
b2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfVVBEQVRFIHN0YXRlbWVudCBmYWlsZWQ6
IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9QUkFHTUEgc3RhdGVtZW50IGZhaWxl
ZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVu
dCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9BTFRFUl9UQUJMRSBz
dGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfVFJBTlNB
Q1RJT04gc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRF
X0FUVEFDSCBzdGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJ
VEVfREVUQUNIIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NR
TElURV9SRUlOREVYIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkK
K1NRTElURV9BTkFMWVpFIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAo
NSkKK1NRTElURV9EUk9QX0lOREVYIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0
aW9uXSAoNSkKK1NRTElURV9EUk9QX1RFTVBfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVj
dCBTUUxFeGNlcHRpb25dICg1KQorU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBm
YWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElURV9EUk9QX1RFTVBfVklFVyBz
dGF0ZW1lbnQgZmFpbGVkOiBbb2JqZWN0IFNRTEV4Y2VwdGlvbl0gKDUpCitTUUxJVEVfRFJPUF9U
UklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IFtvYmplY3QgU1FMRXhjZXB0aW9uXSAoNSkKK1NRTElU
RV9EUk9QX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25dICg1KQor
U1FMSVRFX0RST1BfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogW29iamVjdCBTUUxFeGNlcHRpb25d
ICg1KQorUmVhZCB0cmFuc2FjdGlvbnMgc3VjY2VlZGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItc3luYy5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1zeW5j
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90
ZXN0LWF1dGhvcml6ZXItc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXN0LWlucHV0cy1jb21tb24u
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoJ3Jlc291cmNl
cy90ZXN0LWF1dGhvcml6ZXItc3luYy5qcycpIj4KK1Rlc3QgdGhlIGRhdGFiYXNlIGF1dGhvcml6
ZXIuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rp
b24tc3luYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90cmFuc2Fj
dGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzIEBACitUZXN0IHRoYXQgdHJ5aW5nIHRvIHJ1biBhIHRyYW5zYWN0aW9uIGluc2lkZSBh
bm90aGVyIHRyYW5zYWN0aW9uIHRocm93cyBhbiBleGNlcHRpb24uCitQQVNTOiBFeGNlcHRpb24g
dGhyb3duIHdoaWxlIHRyeWluZyB0byBydW4gYSBuZXN0ZWQgdHJhbnNhY3Rpb24uCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3RyYW5zYWN0aW9uLWluLXRyYW5zYWN0
aW9uLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS90cmFuc2FjdGlvbi1pbi10cmFuc2FjdGlvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS90cmFuc2FjdGlvbi1pbi10cmFuc2Fj
dGlvbi1zeW5jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Rlc3QtaW5wdXRzLWNvbW1vbi5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgncmVzb3VyY2VzL3RyYW5zYWN0
aW9uLWluLXRyYW5zYWN0aW9uLXN5bmMuanMnKSI+CitUZXN0IHRoYXQgdHJ5aW5nIHRvIHJ1biBh
IHRyYW5zYWN0aW9uIGluc2lkZSBhbm90aGVyIHRyYW5zYWN0aW9uIHRocm93cyBhbiBleGNlcHRp
b24uCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9u
LWhhbmRsZS1yZXVzZS1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3Jlc291cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utc3luYy5qcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyOSBAQAordmFyIGRiID0gbnVsbDsKK3RyeSB7CisgICAgdmFyIGRiTmFtZSA9ICJD
aGFuZ2VWZXJzaW9uSGFuZGxlUmV1c2VUZXN0IiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7Cisg
ICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKGRiTmFtZSwgIiIsICJUZXN0IHRoYXQgdGhlIERCIGhh
bmRsZSBpcyB2YWxpZCBhZnRlciBjaGFuZ2luZyB0aGUgdmVyc2lvbi4iLCAxKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRiLnZlcnNpb247CisgICAgdmFyIG5ld1ZlcnNpb24gPSB2ZXJzaW9uID8gKHBh
cnNlSW50KHZlcnNpb24pICsgMSkudG9TdHJpbmcoKSA6ICIxIjsKKyAgICBkYi5jaGFuZ2VWZXJz
aW9uKHZlcnNpb24sIG5ld1ZlcnNpb24sIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgIHBvc3RNZXNz
YWdlKCJQQVNTOiBjaGFuZ2VWZXJzaW9uKCkgdHJhbnNhY3Rpb24gY2FsbGJhY2sgd2FzIGNhbGxl
ZC4iKTsKKyAgICB9KTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBj
aGFuZ2VWZXJzaW9uKCkgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgZXJyKTsKK30KKwordHJ5IHsK
KyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9v
IElOVCkiKTsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCAqIGZyb20gVGVzdCIp
OworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IE5vIGV4Y2VwdGlvbiB0aHJvd24gd2hp
bGUgZXhlY3V0aW5nIHN0YXRlbWVudHMuIik7CisgICAgICAgIH0gY2F0Y2ggKGVycikgeworICAg
ICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIHdoaWxl
IGV4ZWN1dGluZyBzdGF0ZW1lbnRzOiAiICsgZXJyKTsKKyAgICAgICAgfQorICAgIH0pOworICAg
IHBvc3RNZXNzYWdlKCJQQVNTOiBObyBleGNlcHRpb24gdGhyb3duIHdoaWxlIHJ1bm5pbmcgYSB0
cmFuc2FjdGlvbi4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBB
biBleGNlcHRpb24gd2FzIHRocm93biB3aGlsZSBydW5uaW5nIGEgdHJhbnNhY3Rpb246ICIgKyBl
cnIpOworfQorCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdl
LXZlcnNpb24tc3luYy0xLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMS5qcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1MCBAQAordmFyIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfSElYSUVfVEVT
VCA9ICIyIjsKK3ZhciBFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX1JFTE9BRCA9ICIzIjsKKworZnVu
Y3Rpb24gZW1wdHlGdW5jdGlvbigpIHsgfQorCit2YXIgZGIxID0gb3BlbkRhdGFiYXNlU3luYygi
Q2hhbmdlVmVyc2lvblRlc3QiLCAiMSIsICJUZXN0IGZvciB0aGUgZGF0YWJhc2UuY2hhbmdlVmVy
c2lvbigpIGZ1bmN0aW9uIiwgMSk7Cit2YXIgZGIyID0gb3BlbkRhdGFiYXNlU3luYygiQ2hhbmdl
VmVyc2lvblRlc3QiLCAiMSIsICJUZXN0IGZvciB0aGUgZGF0YWJhc2UuY2hhbmdlVmVyc2lvbigp
IGZ1bmN0aW9uIiwgMSk7CisKKy8vIEZpcnN0IHJ1biBIaXhpZSdzIHRlc3QgdG8gZW5zdXJlIGJh
c2ljIGNoYW5nZVZlcnNpb24oKSBmdW5jdGlvbmFsaXR5IHdvcmtzIChzZWUgYnVnIDI4NDE4KS4K
K2RiMS5jaGFuZ2VWZXJzaW9uKCIxIiwgRVhQRUNURURfVkVSU0lPTl9BRlRFUl9ISVhJRV9URVNU
LCBlbXB0eUZ1bmN0aW9uKTsKK2lmIChkYjIudmVyc2lvbiAhPSBkYjEudmVyc2lvbikgeworICAg
IHBvc3RNZXNzYWdlKCJGQUlMOiBjaGFuZ2luZyBkYjEncyB2ZXJzaW9uICgiICsgZGIxLnZlcnNp
b24gKyAiKSBkaWQgbm90IGNoYW5nZSBkYjIncyB2ZXJzaW9uICgiICsgZGIyLnZlcnNpb24gKyAi
KSBhcyBleHBlY3RlZC4iKTsKKyAgICBwb3N0TWVzc2FnZSgiZmFpbCIpOworfSBlbHNlCisgICAg
cG9zdE1lc3NhZ2UoIlBBU1M6IGNoYW5naW5nIGRiMSdzIHZlcnNpb24gKCIgKyBkYjEudmVyc2lv
biArICIpIGNoYW5nZWQgZGIyJ3MgdmVyc2lvbiB0b28uIik7CisKK2RiMi50cmFuc2FjdGlvbihm
dW5jdGlvbih0eCkgeworICAgIHRyeSB7CisgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBU
QUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBJTlQpIik7CisgICAgICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiBUaGUgREIgdmVyc2lvbiBjaGFuZ2VkLCBleGVjdXRpbmcgYW55IHN0YXRlbWVudCBv
biBkYjIgc2hvdWxkIGZhaWwuIik7CisgICAgICAgIHBvc3RNZXNzYWdlKCJmYWlsIik7CisgICAg
fSBjYXRjaChlcnIpIHsKKyAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBFeGVjdXRpbmcgYSBzdGF0
ZW1lbnQgb24gZGIyIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4iKTsKKyAgICB9Cit9
KTsKKworLy8gTWFrZSBzdXJlIGFueSBuZXcgaGFuZGxlIHRvIHRoZSBzYW1lIERCIHNlZXMgdGhl
IG5ldyB2ZXJzaW9uCit0cnkgeworICAgIHZhciBkYjMgPSBvcGVuRGF0YWJhc2VTeW5jKCJDaGFu
Z2VWZXJzaW9uVGVzdCIsIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfSElYSUVfVEVTVCwgIiIsIDEp
OworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBTdWNjZXNzZnVsbHkgb3BlbmVkIGEgbmV3IERCIGhh
bmRsZS4iKTsKK30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBVbmV4cGVj
dGVkIGV4Y2VwdGlvbiB0aHJvd24gd2hpbGUgdHJ5aW5nIHRvIG9wZW4gYSBuZXcgREIgaGFuZGxl
OiAiICsgZXJyKTsKKyAgICBwb3N0TWVzc2FnZSgiZmFpbCIpOworfQorCitpZiAoZGIxLnZlcnNp
b24gIT0gZGIzLnZlcnNpb24pIHsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogZGIxLnZlcnNpb24g
KCIgKyBkYjEudmVyc2lvbiArICIpIGRvZXMgbm90IG1hdGNoIGRiMy52ZXJzaW9uKCIgKyBkYjMu
dmVyc2lvbiArIikiKTsKKyAgICBwb3N0TWVzc2FnZSgiZmFpbCIpOworfSBlbHNlCisgICAgcG9z
dE1lc3NhZ2UoIlBBU1M6IGRiMS52ZXJzaW9uICgiICsgZGIxLnZlcnNpb24gKyAiKSBtYXRjaGVz
IGRiMy52ZXJzaW9uLiIpOworCisvLyBOb3cgdHJ5IGEgdGVzdCB0byBlbnN1cmUgdGhlIHZlcnNp
b24gcGVyc2lzdHMgYWZ0ZXIgcmVsb2FkaW5nIChzZWUgYnVnIDI3ODM2KQorZGIxLmNoYW5nZVZl
cnNpb24oRVhQRUNURURfVkVSU0lPTl9BRlRFUl9ISVhJRV9URVNULCBFWFBFQ1RFRF9WRVJTSU9O
X0FGVEVSX1JFTE9BRCwKKyAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBUQUJMRSBJRiBFWElTVFMgSW5mbyIp
OworICAgICAgICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBO
T1QgRVhJU1RTIEluZm8gKFZlcnNpb24gSU5URUdFUikiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBJbmZvIFZBTFVFUyAoPykiLCBbRVhQRUNURURf
VkVSU0lPTl9BRlRFUl9SRUxPQURdKTsKKyAgICAgICAgICAgICAgICAgIH0pOworCitwb3N0TWVz
c2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVz
b3VyY2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvY2hhbmdlLXZlcnNpb24tc3luYy0yLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL2NoYW5nZS12ZXJzaW9uLXN5bmMtMi5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBA
QAordmFyIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FEID0gJzMnOworCit2YXIgZGIgPSBv
cGVuRGF0YWJhc2VTeW5jKCJDaGFuZ2VWZXJzaW9uVGVzdCIsICIiLCAiVGVzdCB0aGUgY2hhbmdl
VmVyc2lvbigpIGZ1bmN0aW9uLiIsIDEpOworaWYgKGRiLnZlcnNpb24gPT0gRVhQRUNURURfVkVS
U0lPTl9BRlRFUl9SRUxPQUQpCisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGRiLnZlcnNpb24gaXMg
IiArIEVYUEVDVEVEX1ZFUlNJT05fQUZURVJfUkVMT0FEICsgIiBhcyBleHBlY3RlZC4iKTsKK2Vs
c2UKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogZGIudmVyc2lvbiBpcyAiICsgZGIudmVyc2lvbiAr
ICI7IGV4cGVjdGVkICIgKyBFWFBFQ1RFRF9WRVJTSU9OX0FGVEVSX1JFTE9BRCk7CisKKy8vIFJl
c2V0IHRoZSB2ZXJzaW9uOyBvdGhlcndpc2UgdGhpcyB0ZXN0IHdpbGwgZmFpbCB0aGUgbmV4dCB0
aW1lIGl0J3MgcnVuCitkYi5jaGFuZ2VWZXJzaW9uKGRiLnZlcnNpb24sICIxIiwgZnVuY3Rpb24o
dHgpIHsgfSk7CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZW1wdHktc3RhdGVtZW50LXN5bmMuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2VtcHR5
LXN0YXRlbWVudC1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2VtcHR5LXN0YXRlbWVudC1zeW5jLmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEyIEBACit0cnkgeworICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMo
IkVtcHR5U3RhdGVtZW50U3luYyIsICIxLjAiLCAiVGVzdCBhbiBlbXB0eSBzdGF0ZW1lbnQuIiwg
MSk7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IHR4LmV4ZWN1dGVTcWwoIiIpOworICAgICAgICBwb3N0TWVzc2FnZShyZXN1bHQgPyAiRkFJ
TDogcmVzdWx0IGlzIG5vdCBudWxsIiA6ICJQQVNTOiByZXN1bHQgaXMgbnVsbCIpOworICAgIH0p
OworICAgIHBvc3RNZXNzYWdlKCJQQVNTIik7Cit9IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVz
c2FnZSgiRkFJTCIpOworfQorCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJj
ZXMvZXhlY3V0ZS1zcWwtYXJncy1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2V4ZWN1dGUtc3FsLWFyZ3Mtc3luYy5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBAQAordmFyIHRocm93T25Ub1N0cmluZ09iamVjdCA9
IHsgfTsKK3Rocm93T25Ub1N0cmluZ09iamVjdC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsgdGhy
b3cgIkNhbm5vdCBjYWxsIHRvU3RyaW5nIG9uIHRoaXMgb2JqZWN0LiIgfTsKKwordmFyIHRocm93
T25HZXRMZW5ndGhPYmplY3QgPSB7IH07Cit0aHJvd09uR2V0TGVuZ3RoT2JqZWN0Ll9fZGVmaW5l
R2V0dGVyX18oImxlbmd0aCIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBnZXQgbGVuZ3Ro
IG9mIHRoaXMgb2JqZWN0LiI7IH0pOworCit2YXIgdGhyb3dPbkdldFplcm9PYmplY3QgPSB7IGxl
bmd0aDogMSB9OwordGhyb3dPbkdldFplcm9PYmplY3QuX19kZWZpbmVHZXR0ZXJfXygiMCIsIGZ1
bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBnZXQgMCBwcm9wZXJ0eSBvZiB0aGlzIG9iamVjdC4i
OyB9KTsKKwordmFyIGV4cGVjdE5vRXhjZXB0aW9uID0gWworICAgICciIicsCisgICAgJyIiLCBu
dWxsJywKKyAgICAnIiIsIHVuZGVmaW5lZCcsCisgICAgJyIiLCBbXScsCisgICAgJyIiLCBbICJh
cmcwIiBdJywKKyAgICAnIiIsIHsgfScsCisgICAgJyIiLCB7IGxlbmd0aDogMCB9JywKKyAgICAn
IiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIgfScsCitdOworCit2YXIgZXhwZWN0RXhjZXB0aW9u
ID0gWworICAgICcnLAorICAgICdudWxsJywKKyAgICAndW5kZWZpbmVkJywKKyAgICAnMCcsCisg
ICAgJ3Rocm93T25Ub1N0cmluZ09iamVjdCcsCisgICAgJyIiLCB0aHJvd09uR2V0TGVuZ3RoT2Jq
ZWN0JywKKyAgICAnIiIsIHRocm93T25HZXRaZXJvT2JqZWN0JywKKyAgICAnIiIsIFsgdGhyb3dP
blRvU3RyaW5nT2JqZWN0IF0nLAorICAgICciIiwgMCcsCisgICAgJyIiLCAiIicsCitdOworCitm
dW5jdGlvbiB0cnlFeGVjdXRlU3FsKHRyYW5zYWN0aW9uLCBwYXJhbWV0ZXJMaXN0KQoreworICAg
IHRyeSB7CisgICAgICAgIGV2YWwoJ3RyYW5zYWN0aW9uLmV4ZWN1dGVTcWwoJyArIHBhcmFtZXRl
ckxpc3QgKyAnKScpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9IGNhdGNoIChleGNlcHRp
b24pIHsKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1
blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCwgZXhwZWN0RXhjZXB0
aW9uKQoreworICAgIHZhciBleGNlcHRpb24gPSB0cnlFeGVjdXRlU3FsKHRyYW5zYWN0aW9uLCBw
YXJhbWV0ZXJMaXN0KTsKKyAgICBpZiAoZXhwZWN0RXhjZXB0aW9uKSB7CisgICAgICAgIGlmIChl
eGNlcHRpb24pCisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogZXhlY3V0ZVNxbCgiICsg
cGFyYW1ldGVyTGlzdCArICIpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4iKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGV4ZWN1dGVTcWwoIiAr
IHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgcG9zdE1lc3NhZ2Uo
IkZBSUw6IGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSB0aHJldyBhbiBleGNlcHRp
b246ICIgKyBleGNlcHRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3N0TWVzc2Fn
ZSgiUEFTUzogZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIGRpZCBub3QgdGhyb3cg
YW4gZXhjZXB0aW9uLiIpOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0
cyh0cmFuc2FjdGlvbikKK3sKKyAgICBmb3IgKGkgaW4gZXhwZWN0Tm9FeGNlcHRpb24pCisgICAg
ICAgIHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgZXhwZWN0Tm9FeGNlcHRpb25baV0s
IGZhbHNlKTsKKyAgICBmb3IgKGkgaW4gZXhwZWN0RXhjZXB0aW9uKQorICAgICAgICBydW5UcmFu
c2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIGV4cGVjdEV4Y2VwdGlvbltpXSwgdHJ1ZSk7Cit9CisK
K3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkV4ZWN1dGVTUUxBcmdzVGVzdCIsICIxLjAiLCAi
VGVzdCBvZiBoYW5kbGluZyBvZiB0aGUgYXJndW1lbnRzIHRvIFNRTFRyYW5zYWN0aW9uU3luYy5l
eGVjdXRlU3FsIiwgMSk7CitkYi50cmFuc2FjdGlvbihydW5UcmFuc2FjdGlvblRlc3RzKTsKK3Bv
c3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9yZXNvdXJjZXMvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNl
cy9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1vbmUtc3RhdGVtZW50LXN5bmMuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZXhlY3V0
ZXNxbC1hY2NlcHRzLW9ubHktb25lLXN0YXRlbWVudC1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIzIEBACitmdW5jdGlvbiBleGVjdXRlU3RhdGVtZW50KHR4LCBleHBlY3RlZFRvUGFz
cywgc3RhdGVtZW50KQoreworICAgIHRyeSB7CisgICAgICAgIHR4LmV4ZWN1dGVTcWwoc3RhdGVt
ZW50KTsKKyAgICAgICAgcG9zdE1lc3NhZ2UoZXhwZWN0ZWRUb1Bhc3MgPyAiUEFTUzogIiArIHN0
YXRlbWVudCA6ICJGQUlMOiAiICsgc3RhdGVtZW50KTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAg
ICAgICAgcG9zdE1lc3NhZ2UoIWV4cGVjdGVkVG9QYXNzID8gIlBBU1M6ICIgKyBzdGF0ZW1lbnQg
OiAiRkFJTDogIiArIHN0YXRlbWVudCk7CisgICAgfQorfQorCit2YXIgZGIgPSBvcGVuRGF0YWJh
c2VTeW5jKCJFeGVjdXRlU1FMQWNjZXB0c09ubHlPbmVTdGF0ZW1lbnRUZXN0IiwgIjEuMCIsICIi
LCAxKTsKK2RiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgdHguZXhlY3V0ZVNxbCgi
Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCkiKTsKKyAgICBleGVjdXRl
U3RhdGVtZW50KHR4LCB0cnVlLCAiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDEpIik7CisgICAg
ZXhlY3V0ZVN0YXRlbWVudCh0eCwgdHJ1ZSwgIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgyKTsi
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCB0cnVlLCAiICAgSU5TRVJUIElOVE8gVGVzdCBW
QUxVRVMgKDMpICAgICIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIHRydWUsICIgICBJTlNF
UlQgSU5UTyBUZXN0IFZBTFVFUyAoNCk7ICAgIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwg
dHJ1ZSwgIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg1KSAgIDsiKTsKKyAgICBleGVjdXRlU3Rh
dGVtZW50KHR4LCBmYWxzZSwgIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg2KTsgZ2FyYmFnZSIp
OworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsIGZhbHNlLCAiSU5TRVJUIElOVE8gVGVzdCBWQUxV
RVMgKDcpOyBJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoOCkiKTsKKyAgICBleGVjdXRlU3RhdGVt
ZW50KHR4LCBmYWxzZSwgIiAgSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDkpOyAgIElOU0VSVCBJ
TlRPIFRlc3QgVkFMVUVTICgxMCk7ICAgIik7Cit9KTsKK3Bvc3RNZXNzYWdlKCJkb25lIik7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvbXVsdGlwbGUt
dHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLXN5bmMuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5z
YWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0
aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMyIEBACitmdW5jdGlvbiBydW5UcmFuc2FjdGlvbihkYikKK3sKKyAgICBkYi50cmFuc2FjdGlv
bihmdW5jdGlvbih0eCkgeworICAgICAgIC8vIEV4ZWN1dGUgYSByZWFkLW9ubHkgc3RhdGVtZW50
CisgICAgICAgdHguZXhlY3V0ZVNxbCgiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsiKTsKKwor
ICAgICAgIC8vIEV4ZWN1dGUgYSB3cml0ZSBzdGF0ZW1lbnQgdG8gbWFrZSBzdXJlIFNRTGl0ZSB0
cmllcyB0byBhY3F1aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBEQiBmaWxlCisgICAgICAg
dHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKD8pOyIsIFsxXSk7CisgICAg
fSk7Cit9CisKK3ZhciBkYjEgPSBvcGVuRGF0YWJhc2VTeW5jKCJNdWx0aXBsZVRyYW5zYWN0aW9u
c09uRGlmZmVyZW50SGFuZGxlc1Rlc3QiLCAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJUZXN0IHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBE
Qi4iLCAxKTsKK2RiMS50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgIHR4LmV4ZWN1dGVT
cWwoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIpOworfSk7CisK
K3ZhciBkYjIgPSBvcGVuRGF0YWJhc2VTeW5jKCJNdWx0aXBsZVRyYW5zYWN0aW9uc09uRGlmZmVy
ZW50SGFuZGxlc1Rlc3QiLCAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0
IHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUgc2FtZSBEQi4iLCAxKTsK
K2lmIChkYjEgPT0gZGIyKQorICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBkYjEgPT0gZGIyIik7Citl
bHNlIHsKKyAgICB0cnkgeworICAgICAgICBydW5UcmFuc2FjdGlvbihkYjEpOworICAgICAgICBy
dW5UcmFuc2FjdGlvbihkYjIpOworICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUyIpOworICAgIH0g
Y2F0Y2ggKGVycikgeworICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVycik7CisgICAg
fQorfQorCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL211bHRpcGxlLXRyYW5zYWN0aW9ucy1zeW5jLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0
aXBsZS10cmFuc2FjdGlvbnMtc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9tdWx0aXBsZS10cmFuc2FjdGlvbnMtc3luYy5q
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAordmFyIGNvbXBsZXRlID0gMDsKKworZnVu
Y3Rpb24gY2hlY2tDb21wbGV0aW9uKCkKK3sKKyAgICBpZiAoKytjb21wbGV0ZSA9PSAyICYmIHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICB2YXIgZGIgPSBv
cGVuRGF0YWJhc2VXaXRoU3VmZml4KCJNdWx0aXBsZVRyYW5zYWN0aW9uc1Rlc3QiLCAiMS4wIiwg
IlRlc3QgdG8gbWFrZSBzdXJlIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBjYW4gYmUgcXVldWVkIGF0
IG9uY2UgZm9yIGFuIEhUTUw1IGRhdGFiYXNlIiwgMzI3NjgpOworCisgICAgZGIudHJhbnNhY3Rp
b24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiAxIFN0YXJ0ZWQiKTsK
KyAgICB9LCBmdW5jdGlvbihlcnIpIHsKKyAgICAgICAgbG9nKCJUcmFuc2FjdGlvbiAxIEVycm9y
ZWQgLSAiICsgZXJyKTsKKyAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgfSwgZnVuY3Rp
b24oKSB7CisgICAgICAgIGxvZygiVHJhbnNhY3Rpb24gMSBTdWNjZWVkZWQiKTsKKyAgICAgICAg
Y2hlY2tDb21wbGV0aW9uKCk7CisgICAgfSk7CisKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlv
bih0eCkgeworICAgICAgICBsb2coIlRyYW5zYWN0aW9uIDIgU3RhcnRlZCIpOworICAgIH0sIGZ1
bmN0aW9uKGVycikgeworICAgICAgICBsb2coIlRyYW5zYWN0aW9uIDIgRXJyb3JlZCAtICIgKyBl
cnIpOworICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgbG9nKCJUcmFuc2FjdGlvbiAyIFN1Y2NlZWRlZCIpOworICAgICAgICBjaGVja0NvbXBs
ZXRpb24oKTsKKyAgICB9KTsKK30KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN5bmMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29w
ZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWNy
ZWF0aW9uLWNhbGxiYWNrLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK3Zh
ciBjcmVhdGlvbkNhbGxiYWNrQ2FsbGVkMSA9IGZhbHNlOwordmFyIGRiMU5hbWUgPSAiT3BlbkRh
dGFiYXNlQ3JlYXRpb25DYWxsYmFjazEiICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKK3ZhciBk
YjJOYW1lID0gIk9wZW5EYXRhYmFzZUNyZWF0aW9uQ2FsbGJhY2syIiArIChuZXcgRGF0ZSgpKS5n
ZXRUaW1lKCk7Cit2YXIgZGIxID0gb3BlbkRhdGFiYXNlU3luYyhkYjFOYW1lLCAiMS4wIiwgIiIs
IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihkYikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBDcmVhdGlvbiBjYWxsYmFj
ayB3YXMgY2FsbGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYi52
ZXJzaW9uICE9ICIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVz
c2FnZSgiRkFJTDogV3JvbmcgdmVyc2lvbiAiICsgZGIudmVyc2lvbiArICI7IGVtcHR5IHN0cmlu
ZyBleHBlY3RlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBWZXJzaW9u
IHNldCB0byBlbXB0eSBzdHJpbmcgYXMgZXhwZWN0ZWQuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKKwordmFyIGRiMUZhaWwgPSBudWxsOwordHJ5IHsKKyAgICBkYjFGYWlsID0g
b3BlbkRhdGFiYXNlU3luYyhkYjFOYW1lLCAiMS4wIiwgIiIsIDEpOworICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiBBbiBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRpb24gc2hvdWxkJ3ZlIGJlZW4gdGhy
b3duLiIpOworfSBjYXRjaChlcnIpIHsKKyAgICBpZiAoZGIxRmFpbCkKKyAgICAgICAgcG9zdE1l
c3NhZ2UoIkZBSUw6IGRiMUZhaWwgc2hvdWxkIGhhdmUgYmVlbiBudWxsLiIpOworICAgIGVsc2UK
KyAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGFuZCBk
YjFGYWlsIGlzIG51bGwgYXMgZXhwZWN0ZWQuIik7Cit9CisKKy8vIE9wZW4gYSBoYW5kbGUgdG8g
YW5vdGhlciBkYXRhYmFzZSwgZmlyc3Qgd2l0aG91dCBhIGNyZWF0aW9uIGNhbGxiYWNrLCB0aGVu
IHdpdGggb25lLgorLy8gTWFrZSBzdXJlIHRoZSBjcmVhdGlvbiBjYWxsYmFjayBpcyBub3QgY2Fs
bGVkLgordmFyIGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoZGIyTmFtZSwgIjEuMCIsICIiLCAxKTsK
K2RiMiA9IG9wZW5EYXRhYmFzZVN5bmMoZGIyTmFtZSwgIjEuMCIsICIiLCAxLCBmdW5jdGlvbihk
YikgeyBwb3N0TWVzc2FnZSgiRkFJTDogQ3JlYXRpb24gY2FsbGJhY2sgc2hvdWxkIG5vdCBoYXZl
IGJlZW4gY2FsbGVkLiIpOyB9KTsKKworcG9zdE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWVtcHR5
LXZlcnNpb24tc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
b3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN5bmMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNyBAQAordHJ5IHsKKyAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJPcGVuRGF0YWJh
c2VFbXB0eVZlcnNpb25UZXN0IiwgIiIsICJUZXN0IHRoYXQgd2UgY2FuIG9wZW4gZGF0YWJhc2Vz
IHdpdGggYW4gZW1wdHkgdmVyc2lvbi4iLCAxKTsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUyIpOwor
fSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIpOworfQorcG9z
dE1lc3NhZ2UoImRvbmUiKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWlucHV0cy1zeW5jLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLWlu
cHV0cy1zeW5jLmpzCShyZXZpc2lvbiA2MjIzMCkJKGZyb20gTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc3luYy1pbnB1dHMuanM6NjIyMzAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRh
YmFzZS1pbnB1dHMtc3luYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACit2YXIg
ZGI7CisKK3ZhciBub3RBU3RyaW5nID0geworICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsgdGhy
b3cgImZvbyI7IH0KK307CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCk7Cisg
ICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdpdGhvdXQg
YW55IGFyZ3VtZW50IHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIik7Cit9IGNhdGNoIChlcnIp
IHsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwordHJ5IHsK
KyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iKTsKKyAgICBw
b3N0TWVzc2FnZSgiRkFJTDogY2FsbGluZyBvcGVuRGF0YWJhc2VTeW5jKCkgd2l0aCBmZXdlciB0
aGFuIGZvdXIgYXJndW1lbnRzIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIik7Cit9IGNhdGNo
IChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKK30KKwor
dHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMobm90QVN0cmluZywgIkRCVmVyc2lvbiIs
ICJEQkRlc2NyaXB0aW9uIiwgMTAyNCk7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHRoZSBmaXJz
dCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsKK30g
Y2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2UpOwor
fQorCit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgbm90QVN0cmlu
ZywgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0TWVzc2FnZSgiRkFJTDogdGhlIHNl
Y29uZCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBhIHN0cmluZy4iKTsK
K30gY2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2Up
OworfQorCit0cnkgeworICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVy
c2lvbiIsIG5vdEFTdHJpbmcsIDEwMjQpOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0aGUgdGhp
cmQgYXJndW1lbnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11c3QgYmUgYSBzdHJpbmcuIik7Cit9
IGNhdGNoIChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsK
K30KKwordHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNp
b24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQsIDApOworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB0
aGUgZmlmdGggYXJndW1lbnQgdG8gb3BlbkRhdGFiYXNlU3luYygpIG11c3QgYmUgYW4gb2JqZWN0
LCBpZiBwcmVzZW50LiIpOworfSBjYXRjaCAoZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIlBBU1M6
ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3RyeSB7CisgICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5j
KCJEQk5hbWUiLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKKyAgICBwb3N0
TWVzc2FnZSgiUEFTUzogb3BlbkRhdGFiYXNlU3luYygpIHN1Y2NlZWRlZC4iKTsKK30gY2F0Y2gg
KGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOworfQorCisv
LyBSdW4gdGhpcyB0ZXN0IGNhc2Ugb25lIG1vcmUgdGltZSwgdG8gdGVzdCB0aGUgY29kZSB3aXRo
IGFuIGV4aXN0aW5nIGRhdGFiYXNlLgordHJ5IHsKKyAgICBkYiA9IG9wZW5EYXRhYmFzZVN5bmMo
IkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOworICAgIHBvc3RN
ZXNzYWdlKCJQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVkLiIpOworfSBjYXRjaCAo
ZXJyKSB7CisgICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVzc2FnZSk7Cit9CisKK3Ry
eSB7CisgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgZGF0YWJhc2UsIG90aGVyd2lzZSB0aGUg
Y3JlYXRpb24gY2FsbGJhY2sgd29uJ3QgYmUgaW52b2tlZC4KKyAgICBkYiA9IG9wZW5EYXRhYmFz
ZVN5bmMoIkRCTmFtZUNyZWF0aW9uQ2FsbGJhY2siICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwg
IkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24oZGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RN
ZXNzYWdlKCJQQVNTOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMoKSB3aXRoIGEgY3JlYXRpb24g
Y2FsbGJhY2sgc3VjY2VlZGVkLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKK30g
Y2F0Y2ggKGVycikgeworICAgIHBvc3RNZXNzYWdlKCJGQUlMOiAiICsgZXJyLm1lc3NhZ2UpOwor
fQorCitwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJj
ZXMvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zeW5jLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL29wZW4tZGF0YWJh
c2Utc2V0LWVtcHR5LXZlcnNpb24tc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBA
Cit2YXIgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJPcGVuRGF0YWJhc2VTZXRFbXB0eVZlcnNpb25U
ZXN0IiwgIiIsICJUZXN0IHRoYXQgdGhlIERCIHZlcnNpb24gaXMgc2V0IHRvIHRoZSBlbXB0eSBz
dHJpbmcuIiwgMSk7CisKK3RyeSB7CisgICAgdmFyIGRiMiA9IG9wZW5EYXRhYmFzZVN5bmMoIk9w
ZW5EYXRhYmFzZVNldEVtcHR5VmVyc2lvblRlc3QiLCAidGVzdCIsICJUZXN0IHRoYXQgdGhlIERC
IHZlcnNpb24gaXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcuIiwgMSk7CisgICAgcG9zdE1lc3Nh
Z2UoIkZBSUw6IEFuIGV4Y2VwdGlvbiBzaG91bGQndmUgYmVlbiB0aHJvd24uIik7Cit9IGNhdGNo
IChlcnIpIHsKKyAgICBwb3N0TWVzc2FnZSgiUEFTUyIpOworfQorcG9zdE1lc3NhZ2UoImRvbmUi
KTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVu
LWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCShy
ZXZpc2lvbiA2MzAxOSkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9vcGVuLWRhdGFiYXNlLXN5bmMtaW5wdXRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc0
ICswLDAgQEAKLXZhciBkYjsKLQotdmFyIG5vdEFTdHJpbmcgPSB7Ci0gICAgdG9TdHJpbmc6IGZ1
bmN0aW9uKCkgeyB0aHJvdyAiZm9vIjsgfQotfTsKLQotdHJ5IHsKLSAgICBkYiA9IG9wZW5EYXRh
YmFzZVN5bmMoKTsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogY2FsbGluZyBvcGVuRGF0YWJhc2VT
eW5jKCkgd2l0aG91dCBhbnkgYXJndW1lbnQgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsK
LX0gY2F0Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1lc3NhZ2Up
OwotfQotCi10cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVy
c2lvbiIpOwotICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBjYWxsaW5nIG9wZW5EYXRhYmFzZVN5bmMo
KSB3aXRoIGZld2VyIHRoYW4gZm91ciBhcmd1bWVudHMgc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlv
bi4iKTsKLX0gY2F0Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsgZXJyLm1l
c3NhZ2UpOwotfQotCi10cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYyhub3RBU3RyaW5n
LCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0KTsKLSAgICBwb3N0TWVzc2FnZSgi
RkFJTDogdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJlIGEg
c3RyaW5nLiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIgKyBl
cnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJEQk5h
bWUiLCBub3RBU3RyaW5nLCAiREJEZXNjcmlwdGlvbiIsIDEwMjQpOwotICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIG9wZW5EYXRhYmFzZVN5bmMoKSBtdXN0IGJl
IGEgc3RyaW5nLiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6ICIg
KyBlcnIubWVzc2FnZSk7Ci19Ci0KLXRyeSB7Ci0gICAgZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJE
Qk5hbWUiLCAiREJWZXJzaW9uIiwgbm90QVN0cmluZywgMTAyNCk7Ci0gICAgcG9zdE1lc3NhZ2Uo
IkZBSUw6IHRoZSB0aGlyZCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVzdCBiZSBh
IHN0cmluZy4iKTsKLX0gY2F0Y2ggKGVycikgewotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiAiICsg
ZXJyLm1lc3NhZ2UpOwotfQotCi10cnkgewotICAgIGRiID0gb3BlbkRhdGFiYXNlU3luYygiREJO
YW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAyNCwgMCk7Ci0gICAgcG9zdE1l
c3NhZ2UoIkZBSUw6IHRoZSBmaWZ0aCBhcmd1bWVudCB0byBvcGVuRGF0YWJhc2VTeW5jKCkgbXVz
dCBiZSBhbiBvYmplY3QsIGlmIHByZXNlbnQuIik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0
TWVzc2FnZSgiUEFTUzogIiArIGVyci5tZXNzYWdlKTsKLX0KLQotdHJ5IHsKLSAgICBkYiA9IG9w
ZW5EYXRhYmFzZVN5bmMoIkRCTmFtZSIsICJEQlZlcnNpb24iLCAiREJEZXNjcmlwdGlvbiIsIDEw
MjQpOwotICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBvcGVuRGF0YWJhc2VTeW5jKCkgc3VjY2VlZGVk
LiIpOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBlcnIubWVz
c2FnZSk7Ci19Ci0KLS8vIFJ1biB0aGlzIHRlc3QgY2FzZSBvbmUgbW9yZSB0aW1lLCB0byB0ZXN0
IHRoZSBjb2RlIHdpdGggYW4gZXhpc3RpbmcgZGF0YWJhc2UuCi10cnkgewotICAgIGRiID0gb3Bl
bkRhdGFiYXNlU3luYygiREJOYW1lIiwgIkRCVmVyc2lvbiIsICJEQkRlc2NyaXB0aW9uIiwgMTAy
NCk7Ci0gICAgcG9zdE1lc3NhZ2UoIlBBU1M6IG9wZW5EYXRhYmFzZVN5bmMoKSBzdWNjZWVkZWQu
Iik7Ci19IGNhdGNoIChlcnIpIHsKLSAgICBwb3N0TWVzc2FnZSgiRkFJTDogIiArIGVyci5tZXNz
YWdlKTsKLX0KLQotdHJ5IHsKLSAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhYmFzZSwg
b3RoZXJ3aXNlIHRoZSBjcmVhdGlvbiBjYWxsYmFjayB3b24ndCBiZSBpbnZva2VkLgotICAgIGRi
ID0gb3BlbkRhdGFiYXNlU3luYygiREJOYW1lQ3JlYXRpb25DYWxsYmFjayIgKyAobmV3IERhdGUo
KSkuZ2V0VGltZSgpLCAiREJWZXJzaW9uIiwgIkRCRGVzY3JpcHRpb24iLCAxMDI0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihkYikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IGNhbGxpbmcgb3BlbkRhdGFiYXNlU3luYygpIHdp
dGggYSBjcmVhdGlvbiBjYWxsYmFjayBzdWNjZWVkZWQuIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwotfSBjYXRjaCAoZXJyKSB7Ci0gICAgcG9zdE1lc3NhZ2UoIkZBSUw6ICIgKyBl
cnIubWVzc2FnZSk7Ci19Ci0KLXBvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFu
c2FjdGlvbi1pbi1wcm9ncmVzcy1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9vcGVuLWRhdGFiYXNlLXdoaWxlLXRyYW5zYWN0
aW9uLWluLXByb2dyZXNzLXN5bmMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvb3Blbi1kYXRhYmFzZS13aGlsZS10cmFuc2FjdGlv
bi1pbi1wcm9ncmVzcy1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4IEBACitmdW5j
dGlvbiBvcGVuVGVzdERhdGFiYXNlKCkKK3sKKyAgICByZXR1cm4gb3BlbkRhdGFiYXNlU3luYygi
T3BlbkRhdGFiYXNlV2hpbGVUcmFuc2FjdGlvbkluUHJvZ3Jlc3NUZXN0IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVz
dCB0byBtYWtlIHN1cmUgdGhhdCBjYWxsaW5nIG9wZW5EYXRhYmFzZSgpIHdoaWxlIGEgdHJhbnNh
Y3Rpb24gaXMgaW4gcHJvZ3Jlc3Mgb24gYSBkaWZmZXJlbnQgaGFuZGxlIHRvIHRoZSBzYW1lIGRh
dGFiYXNlIGRvZXMgbm90IHJlc3VsdCBpbiBhIGRlYWRsb2NrLiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMjEwMDAwMCk7IC8vIDJNQiArIGVwc2lsb24KK30KKworLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIwNworLy8gSW4gb3JkZXIgdG8g
dHJpZ2dlciB0aGlzIGJ1ZywgdGhlIHRyYW5zYWN0aW9uIG11c3QgYWNxdWlyZSBhbiBleGNsdXNp
dmUKKy8vIGxvY2sgb24gdGhlIERCIGZpbGUgYmVmb3JlIHRyeWluZyB0byBvYnRhaW4gYSBzZWNv
bmQgaGFuZGxlIHRvIHRoZSBzYW1lIERCLgorLy8gVGhlIG9ubHkgd2F5IHRvIGZvcmNlIFNRTGl0
ZSB0byBvYnRhaW4gYW4gZXhjbHVzaXZlIGxvY2sgaXMgdG8gY2hhbmdlIG1vcmUKKy8vIHRoYW4g
Y2FjaGVfc2l6ZSAqIHBhZ2Vfc2l6ZSBieXRlcyBpbiB0aGUgZGF0YWJhc2UuIFRoZSBkZWZhdWx0
IHZhbHVlIGZvcgorLy8gY2FjaGVfc2l6ZSBpcyAyMDAwIHBhZ2VzLCBhbmQgdGhlIGRlZmF1bHQg
cGFnZV9zaXplIGlzIDEwMjQgYnl0ZXMuIFNvIHRoZQorLy8gc2l6ZSBvZiB0aGUgYmxvYiBtdXN0
IGJlIGF0IGxlYXN0IDJNQi4KK3ZhciBkYjEgPSBvcGVuVGVzdERhdGFiYXNlKCk7CitkYjEudHJh
bnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUg
SUYgTk9UIEVYSVNUUyBUZXN0IChGb28gQkxPQik7Iik7CisgICAgdHguZXhlY3V0ZVNxbCgiSU5T
RVJUIElOVE8gVGVzdCBWQUxVRVMgKFpFUk9CTE9CKDIwOTcxNTIpKTsiKTsKKyAgICB2YXIgZGIy
ID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBzZWNvbmQgaGFu
ZGxlIG9wZW5lZCBzdWNjZXNzZnVsbHkuIik7CisKKyAgICAvLyBDbGVhbiB1cCB0aGUgREIgdG8g
YWxsb3cgZm9yIHJlcGVhdGVkIHJ1bnMgb2YgdGhpcyB0ZXN0CisgICAgLy8gd2l0aG91dCBuZWVk
aW5nIHRvIGluY3JlYXNlIHRoZSBkZWZhdWx0IGFsbG93ZWQgcXVvdGEgKDVNQikKKyAgICB0eC5l
eGVjdXRlU3FsKCJERUxFVEUgRlJPTSBUZXN0OyIpOworfSk7CisKK3Bvc3RNZXNzYWdlKCJkb25l
Iik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvc3Fs
LWRhdGEtdHlwZXMtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvc3FsLWRhdGEtdHlwZXMtc3luYy5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9zcWwtZGF0YS10
eXBlcy1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACit2YXIgdGVzdFZhbHVl
cyA9IHsKKyAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCJXZWQgRmViIDA2IDIwMDggMTI6MTY6NTIg
R01UKzAyMDAgKEVFVCkiKS52YWx1ZU9mKCksCisgICAgaWQ6IDEwMDEsCisgICAgcmVhbDogMTAx
LjQ0NCwKKyAgICB0ZXh0OiAiV2ViS2l0IGRiIFRFWFQiLAorICAgIGJsb2I6ICJzdXBlcmNhbGlm
cmFnaWxpc3RpYyIKK307CisKK2Z1bmN0aW9uIHNob3VsZEJlU2FtZVR5cGVBbmRWYWx1ZShwcm9w
TmFtZSwgdGVzdFZhbHVlLCByZXN1bHQpIHsKKyAgICBpZiAodGVzdFZhbHVlID09IHJlc3VsdCAm
JiB0eXBlb2YgdGVzdFZhbHVlID09IHR5cGVvZiByZXN1bHQpCisgICAgICAgIHBvc3RNZXNzYWdl
KCJQQVNTOiBwcm9wZXJ0eSAnIiArIHByb3BOYW1lICsgIicgT0ssIHR5cGUgd2FzICIgKyB0eXBl
b2YgcmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiBwcm9wZXJ0
eSAnIiArIHByb3BOYW1lICsgIicgZmFpbGVkOyAiICsKKyAgICAgICAgICAgICAgICAgICAgImV4
cGVjdGVkICIgKyB0eXBlb2YgdGVzdFZhbHVlICsgIjonIiArIHRlc3RWYWx1ZSArICInLCAiICsK
KyAgICAgICAgICAgICAgICAgICAgImdvdCAiICsgdHlwZW9mIHJlc3VsdCArICI6JyIgKyByZXN1
bHQgKyInIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REQlZhbHVlcyhyZXN1bHQpIHsKKyAgICB2YXIg
aSA9ICJ0aW1lc3RhbXAiOyBzaG91bGRCZVNhbWVUeXBlQW5kVmFsdWUoaSwgdGVzdFZhbHVlc1tp
XSwgcmVzdWx0W2ldKTsKKyAgICBpID0gImlkIjsgc2hvdWxkQmVTYW1lVHlwZUFuZFZhbHVlKGks
IHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7CisgICAgaSA9ICJyZWFsIjsgc2hvdWxkQmVTYW1l
VHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7CisgICAgaSA9ICJ0ZXh0
Ijsgc2hvdWxkQmVTYW1lVHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNbaV0sIHJlc3VsdFtpXSk7
CisgICAgaSA9ICJibG9iIjsgc2hvdWxkQmVTYW1lVHlwZUFuZFZhbHVlKGksIHRlc3RWYWx1ZXNb
aV0sIHJlc3VsdFtpXSk7Cit9CisKK3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIlNRTERhdGFU
eXBlc1Rlc3QiLCAiMS4wIiwgIkRhdGFiYXNlIGZvciBTUUwgZGF0YSB0eXBlIHRlc3QiLCAxKTsK
K2RiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRF
IFRBQkxFIElGIE5PVCBFWElTVFMgRGF0YVR5cGVUZXN0VGFibGUgKGlkIElOVEVHRVIgVU5JUVVF
LCByZWFsIFJFQUwsIHRpbWVzdGFtcCBJTlRFR0VSLCB0ZXh0IFRFWFQsIGJsb2IgQkxPQikiKTsK
KyAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBEYXRhVHlwZVRlc3RUYWJsZSAoaWQsIHJl
YWwsIHRpbWVzdGFtcCwgdGV4dCwgYmxvYikgVkFMVUVTICg/LD8sPyw/LD8pIiwKKyAgICAgICAg
ICAgICAgICAgIFt0ZXN0VmFsdWVzLmlkLCB0ZXN0VmFsdWVzLnJlYWwsIHRlc3RWYWx1ZXMudGlt
ZXN0YW1wLCB0ZXN0VmFsdWVzLnRleHQsIHRlc3RWYWx1ZXMuYmxvYl0pOworICAgIHZhciByZXN1
bHQgPSB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgKiBGUk9NIERhdGFUeXBlVGVzdFRhYmxlIik7Cisg
ICAgdGVzdERCVmFsdWVzKHJlc3VsdC5yb3dzLml0ZW0oMCkpOworICAgIHR4LmV4ZWN1dGVTcWwo
IkRST1AgVEFCTEUgRGF0YVR5cGVUZXN0VGFibGUiKTsKK30pOworCitwb3N0TWVzc2FnZSgiZG9u
ZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL3Nx
bC1leGNlcHRpb24tY29kZXMtc3luYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvc3FsLWV4Y2VwdGlvbi1jb2Rlcy1zeW5jLmpzCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2Vz
L3NxbC1leGNlcHRpb24tY29kZXMtc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NiBA
QAordmFyIGRiTmFtZSA9ICJTUUxFeGNlcHRpb25Db2Rlc1Rlc3QiICsgKG5ldyBEYXRlKCkpLmdl
dFRpbWUoKTsKKworZnVuY3Rpb24gdGVzdFRyYW5zYWN0aW9uKGRiLCBleGVjdXRlU3RhdGVtZW50
c0NhbGxiYWNrLCBleHBlY3RlZEVycm9yQ29kZU5hbWUpCit7CisgICAgZGIudHJhbnNhY3Rpb24o
ZnVuY3Rpb24odHgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGV4ZWN1dGVTdGF0ZW1l
bnRzQ2FsbGJhY2sodHgpOworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGFuIGV4Y2Vw
dGlvbiAoIiArIGV4cGVjdGVkRXJyb3JDb2RlTmFtZSArICIpIHNob3VsZCd2ZSBiZWVuIHRocm93
bi4iKTsKKyAgICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgICAgICBpZiAoZXJyLmNvZGUg
PT0gZXJyW2V4cGVjdGVkRXJyb3JDb2RlTmFtZV0pCisgICAgICAgICAgICAgICAgcG9zdE1lc3Nh
Z2UoIlBBU1M6IGV4cGVjdGVkIGFuZCBnb3QgZXJyb3IgY29kZSAiICsgZXhwZWN0ZWRFcnJvckNv
ZGVOYW1lKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZSgi
RkFJTDogZXhwZWN0ZWQgZXJyb3IgY29kZSAiICsgZXhwZWN0ZWRFcnJvckNvZGVOYW1lICsgIiAo
IiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyW2V4cGVjdGVkRXJyb3JDb2RlTmFt
ZV0gKyAiKSwgZ290ICIgKyBlcnIuY29kZSk7CisgICAgICAgIH0KKyAgICAgIH0pOworfQorCitm
dW5jdGlvbiB0ZXN0VHJhbnNhY3Rpb25UaHJvd3NFeGNlcHRpb24oZGIpCit7CisgICAgdGVzdFRy
YW5zYWN0aW9uKGRiLCBmdW5jdGlvbih0eCkgeyB0aHJvdyAiRXhjZXB0aW9uIHRocm93biBpbiB0
cmFuc2FjdGlvbiBjYWxsYmFjay4iOyB9LCAiVU5LTk9XTl9FUlIiKTsKK30KKworZnVuY3Rpb24g
dGVzdEludmFsaWRTdGF0ZW1lbnQoZGIpCit7CisgICAgdGVzdFRyYW5zYWN0aW9uKGRiLCBmdW5j
dGlvbih0eCkgeyB0eC5leGVjdXRlU3FsKCJCQUQgU1RBVEVNRU5UIik7IH0sICJTWU5UQVhfRVJS
Iik7Cit9CisKK2Z1bmN0aW9uIHRlc3RJbmNvcnJlY3ROdW1iZXJPZkJpbmRQYXJhbWV0ZXJzKGRi
KQoreworICAgIHRlc3RUcmFuc2FjdGlvbihkYiwKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24odHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBU
QUJMRSBJRiBOT1QgRVhJU1RTIEJhZEJpbmROdW1iZXJUZXN0IChGb28gSU5ULCBCYXIgSU5UKSIp
OworICAgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8gQmFk
QmluZE51bWJlclRlc3QgVkFMVUVTICg/LCA/KSIsIFsxXSk7CisgICAgICAgICAgICAgICAgICAg
IH0sICJTWU5UQVhfRVJSIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RCaW5kUGFyYW1ldGVyT2ZXcm9u
Z1R5cGUoZGIpCit7CisgICAgdmFyIGJhZFN0cmluZyA9IHsgfTsKKyAgICBiYWRTdHJpbmcudG9T
dHJpbmcgPSBmdW5jdGlvbigpIHsgdGhyb3cgIkNhbm5vdCBjYWxsIHRvU3RyaW5nKCkgb24gdGhp
cyBvYmplY3QuIiB9OworCisgICAgdGVzdFRyYW5zYWN0aW9uKGRiLCBmdW5jdGlvbih0eCkgewor
ICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBCYWRCaW5k
VHlwZVRlc3QgKEZvbyBURVhUKSIpOworICAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5U
TyBCYWRCaW5kVHlwZVRlc3QgVkFMVUVTICg/KSIsIFtiYWRTdHJpbmddKTsKKyAgICB9LCAiVU5L
Tk9XTl9FUlIiKTsKK30KKworZnVuY3Rpb24gdGVzdFF1b3RhRXhjZWVkZWQoZGIpCit7CisgICAg
Ly8gU29tZXRpbWVzLCBTUUxpdGUgYXV0b21hdGljYWxseSByb2xscyBiYWNrIGEgdHJhbnNhY3Rp
b24gaWYgZXhlY3V0aW5nIGEgc3RhdGVtZW50IGZhaWxzLgorICAgIC8vIFRoaXMgc2VlbXMgdG8g
YmUgb25lIG9mIHRob3NlIGNhc2VzLgorICAgIHRyeSB7CisgICAgICAgIHRlc3RUcmFuc2FjdGlv
bihkYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElT
VFMgUXVvdGFUZXN0IChGb28gQkxPQikiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBRdW90YVRlc3QgVkFMVUVTIChaRVJPQkxPQigxMCAq
IDEwMjQgKiAxMDI0KSkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sICJRVU9UQV9FUlIi
KTsKKyAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IFRyYW5zYWN0aW9uIHNob3VsZCd2ZSBiZWVu
IHJvbGxlZCBiYWNrIGJ5IFNRTGl0ZS4iKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAg
aWYgKGVyci5jb2RlID09IGVyclsiREFUQUJBU0VfRVJSIl0pCisgICAgICAgICAgICBwb3N0TWVz
c2FnZSgiUEFTUzogVHJhbnNhY3Rpb24gd2FzIHJvbGxlZCBiYWNrIGJ5IFNRTGl0ZSBhcyBleHBl
Y3RlZC4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IEFu
IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdhcyB0aHJvd246ICIgKyBlcnIpOworICAgIH0KK30KKwor
ZnVuY3Rpb24gdGVzdFZlcnNpb25NaXNtYXRjaChkYikKK3sKKyAgICB2YXIgZGIyID0gb3BlbkRh
dGFiYXNlU3luYyhkYk5hbWUsICIxLjAiLCAiVGVzdHMgdGhlIGVycm9yIGNvZGVzLiIsIDEpOwor
ICAgIGRiMi5jaGFuZ2VWZXJzaW9uKCIxLjAiLCAiMi4wIiwgZnVuY3Rpb24odHgpIHsgfSk7Cisg
ICAgdGVzdFRyYW5zYWN0aW9uKGRiLAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiVEhJUyBTVEFURU1FTlQg
U0hPVUxEIE5FVkVSIEdFVCBFWEVDVVRFRCIpOworICAgICAgICAgICAgICAgICAgICB9LCAiVkVS
U0lPTl9FUlIiKTsKK30KKwordmFyIGRiID0gb3BlbkRhdGFiYXNlU3luYyhkYk5hbWUsICIxLjAi
LCAiVGVzdHMgdGhlIGV4Y2VwdGlvbiBjb2Rlcy4iLCAxKTsKK3Rlc3RUcmFuc2FjdGlvblRocm93
c0V4Y2VwdGlvbihkYik7Cit0ZXN0SW52YWxpZFN0YXRlbWVudChkYik7Cit0ZXN0SW5jb3JyZWN0
TnVtYmVyT2ZCaW5kUGFyYW1ldGVycyhkYik7Cit0ZXN0QmluZFBhcmFtZXRlck9mV3JvbmdUeXBl
KGRiKTsKK3Rlc3RRdW90YUV4Y2VlZGVkKGRiKTsKK3Rlc3RWZXJzaW9uTWlzbWF0Y2goZGIpOwor
Citwb3N0TWVzc2FnZSgiZG9uZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvcmVzb3VyY2VzL3Rlc3QtYXV0aG9yaXplci1zeW5jLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90ZXN0LWF1dGhvcml6ZXIt
c3luYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy90ZXN0LWF1dGhvcml6ZXItc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMjYgQEAKK2Z1bmN0aW9uIGNsZWFudXAoZGIpCit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVu
Y3Rpb24odHgpIHsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgVEFCTEUgSUYgRVhJ
U1RTIFRlc3QiKTsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgSU5ERVggSUYgRVhJ
U1RTIFRlc3RJbmRleCIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBWSUVXIElG
IEVYSVNUUyBUZXN0VmlldyIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBUUklH
R0VSIElGIEVYSVNUUyBUZXN0VHJpZ2dlciIpOworICAgIH0pOworfQorCitmdW5jdGlvbiBleGVj
dXRlU3RhdGVtZW50KHR4LCBzdGF0ZW1lbnQsIG9wZXJhdGlvbikKK3sKKyAgICB0cnkgeworICAg
ICAgICB0eC5leGVjdXRlU3FsKHN0YXRlbWVudCk7CisgICAgICAgIHBvc3RNZXNzYWdlKG9wZXJh
dGlvbiArICIgc3RhdGVtZW50IHN1Y2NlZWRlZC4iKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAg
ICAgICAgcG9zdE1lc3NhZ2Uob3BlcmF0aW9uICsgIiBzdGF0ZW1lbnQgZmFpbGVkOiAiICsgZXJy
ICsgIiAoIiArIGVyci5jb2RlICsgIikiKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRh
YmxlQ2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBUQUJM
RSBUZXN0IChGb28gaW50KSIsICJTUUxJVEVfQ1JFQVRFX1RBQkxFIik7Cit9CisKK2Z1bmN0aW9u
IGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiQ1JFQVRFIElOREVYIFRlc3RJbmRleCBPTiBUZXN0IChGb28pIiwgIlNRTElURV9DUkVBVEVf
SU5ERVgiKTsKKworICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBmb2xsb3dpbmcgcXVlcnkgc2hvdWxk
IHRyaWdnZXIgYSBTUUxJVEVfQ1JFQVRFX1RFTVBfSU5ERVggb3BlcmF0aW9uCisgICAgLy8gKGFj
Y29yZGluZyB0byBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvdGVtcGZpbGVzLmh0bWwpLCBpdCBkb2Vz
bid0LCBhbmQgSSdtIG5vdCBhd2FyZQorICAgIC8vIG9mIGFueSBvdGhlciB3YXkgdG8gdHJpZ2dl
ciB0aGlzIG9wZXJhdGlvbi4gU28gd2UnbGwgc2tpcCBpdCBmb3Igbm93LgorICAgIC8vZXhlY3V0
ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCAqIEZST00gVGVzdCBXSEVSRSBGb28gSU4gKDEsIDIsIDMp
IiwgIlNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCIpOworCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0
eCwgIkNSRUFURSBURU1QIFRBQkxFIFRlc3RUZW1wVGFibGUgKEZvbyBpbnQpIiwgIlNRTElURV9D
UkVBVEVfVEVNUF9UQUJMRSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVN
UCBUUklHR0VSIFRlc3RUZW1wVHJpZ2dlciBJTlNFUlQgT04gVGVzdCBCRUdJTiBTRUxFQ1QgQ09V
TlQoKikgRlJPTSBUZXN0OyBFTkQiLCAiU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIiKTsKKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRFTVAgVklFVyBUZXN0VGVtcFZpZXcgQVMg
U0VMRUNUIENPVU5UKCopIEZST00gVGVzdCIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyIpOwor
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVFJJR0dFUiBUZXN0VHJpZ2dlciBJTlNF
UlQgT04gVGVzdCBCRUdJTiBTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyBFTkQiLCAiU1FMSVRF
X0NSRUFURV9UUklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBWSUVX
IFRlc3RWaWV3IEFTIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3QiLCAiU1FMSVRFX0NSRUFURV9W
SUVXIik7CisKKyAgICAvLyBXZSBzaG91bGQgdHJ5IHRvIGNyZWF0ZSBhIHZpcnR1YWwgdGFibGUg
dXNpbmcgZnRzMywgd2hlbiBXZWJLaXQncyBzcWxpdGUgbGlicmFyeSBzdXBwb3J0cyBpdC4KKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFZJUlRVQUwgVEFCTEUgVGVzdFZpcnR1YWxU
YWJsZSBVU0lORyBVbnN1cHBvcnRlZE1vZHVsZSIsICJTUUxJVEVfQ1JFQVRFX1ZUQUJMRSIpOwor
fQorCitmdW5jdGlvbiBvdGhlclN0YXRlbWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRl
U3RhdGVtZW50KHR4LCAiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdCIsICJTUUxJVEVfUkVBRCIp
OworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0Iiwg
IlNRTElURV9TRUxFQ1QiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiREVMRVRFIEZST00g
VGVzdCIsICJTUUxJVEVfREVMRVRFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIklOU0VS
VCBJTlRPIFRlc3QgVkFMVUVTICgxKSIsICJTUUxJVEVfSU5TRVJUIik7CisgICAgZXhlY3V0ZVN0
YXRlbWVudCh0eCwgIlVQREFURSBUZXN0IFNFVCBGb28gPSAyIFdIRVJFIEZvbyA9IDEiLCAiU1FM
SVRFX1VQREFURSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJQUkFHTUEgY2FjaGVfc2l6
ZSIsICJTUUxJVEVfUFJBR01BIik7CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQUxURVIg
VEFCTEUgVGVzdCBSRU5BTUUgVE8gVGVzdFRhYmxlIiwgIlNRTElURV9BTFRFUl9UQUJMRSIpOwor
ICAgIC8vIFJlbmFtZSB0aGUgdGFibGUgYmFjayB0byBpdHMgb3JpZ2luYWwgbmFtZQorICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsICJBTFRFUiBUQUJMRSBUZXN0VGFibGUgUkVOQU1FIFRvIFRlc3Qi
LCAiU1FMSVRFX0FMVEVSX1RBQkxFIik7CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQkVH
SU4gVFJBTlNBQ1RJT04iLCAiU1FMSVRFX1RSQU5TQUNUSU9OIik7CisgICAgZXhlY3V0ZVN0YXRl
bWVudCh0eCwgIkFUVEFDSCBtYWluIEFTIFRlc3RNYWluIiwgIlNRTElURV9BVFRBQ0giKTsKKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiREVUQUNIIFRlc3RNYWluIiwgIlNRTElURV9ERVRBQ0gi
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiUkVJTkRFWCIsICJTUUxJVEVfUkVJTkRFWCIp
OworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJBTkFMWVpFIiwgIlNRTElURV9BTkFMWVpFIik7
CisKKyAgICAvLyBTUUxJVEVfRlVOQ1RJT046IGFsbG93ZWQgaW4gd3JpdGUgbW9kZQorICAgIC8v
IFRoZXJlIGlzIG5vIFNRTC9KYXZhc2NyaXB0IEFQSSB0byBhZGQgdXNlci1kZWZpbmVkIGZ1bmN0
aW9ucyB0byBTUUxpdGUsCisgICAgLy8gc28gd2UgY2Fubm90IHRlc3QgdGhpcyBvcGVyYXRpb24K
K30KKworZnVuY3Rpb24gZHJvcFN0YXRlbWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRl
U3RhdGVtZW50KHR4LCAiRFJPUCBJTkRFWCBUZXN0SW5kZXgiLCAiU1FMSVRFX0RST1BfSU5ERVgi
KTsKKworICAgIC8vIFNRTElURV9EUk9QX1RFTVBfSU5ERVg6IGFsbG93ZWQgaW4gd3JpdGUgbW9k
ZQorICAgIC8vIE5vdCBzdXJlIGhvdyB0byB0ZXN0IHRoaXM6IHRlbXAgaW5kZXhlcyBhcmUgYXV0
b21hdGljYWxseSBkcm9wcGVkIHdoZW4KKyAgICAvLyB0aGUgZGF0YWJhc2UgaXMgY2xvc2VkLCBi
dXQgSFRNTDUgZG9lc24ndCBzcGVjaWZ5IGEgY2xvc2VEYXRhYmFzZSgpIGNhbGwuCisKKyAgICBl
eGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUQUJMRSBUZXN0VGVtcFRhYmxlIiwgIlNRTElURV9E
Uk9QX1RFTVBfVEFCTEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUUklHR0VS
IFRlc3RUZW1wVHJpZ2dlciIsICJTUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIiKTsKKyAgICBleGVj
dXRlU3RhdGVtZW50KHR4LCAiRFJPUCBWSUVXIFRlc3RUZW1wVmlldyIsICJTUUxJVEVfRFJPUF9U
RU1QX1ZJRVciKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUUklHR0VSIFRlc3RU
cmlnZ2VyIiwgIlNRTElURV9EUk9QX1RSSUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiRFJPUCBWSUVXIFRlc3RWaWV3IiwgIlNRTElURV9EUk9QX1ZJRVciKTsKKworICAgIC8vIFNR
TElURV9EUk9QX1ZUQUJMRTogYWxsb3dlZCBpbiB3cml0ZSBtb2RlCisgICAgLy8gTm90IHN1cmUg
aG93IHRvIHRlc3QgdGhpczogd2UgY2Fubm90IGNyZWF0ZSBhIHZpcnR1YWwgdGFibGUgYmVjYXVz
ZSB3ZSBkbyBub3QKKyAgICAvLyBoYXZlIFNRTC9KYXZhc2NyaXB0IEFQSXMgdG8gcmVnaXN0ZXIg
YSBtb2R1bGUgdGhhdCBpbXBsZW1lbnRzIGEgdmlydHVhbCB0YWJsZS4KKyAgICAvLyBUaGVyZWZv
cmUsIHRyeWluZyB0byBkcm9wIGEgdmlydHVhbCB0YWJsZSB3aWxsIGFsd2F5cyBmYWlsIChubyBz
dWNoIHRhYmxlKQorICAgIC8vIGJlZm9yZSBldmVuIGdldHRpbmcgdG8gdGhlIGF1dGhvcml6ZXIu
CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUQUJMRSBUZXN0IiwgIlNRTElURV9E
Uk9QX1RBQkxFIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkV3JpdGVNb2RlKGRiKQoreworICAg
IGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJCZWdp
bm5pbmcgd3JpdGUgdHJhbnNhY3Rpb246Iik7CisgICAgICAgIGNyZWF0ZVRhYmxlQ2FsbGJhY2so
dHgpOworICAgICAgICBjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpOworICAgICAgICBvdGhl
clN0YXRlbWVudHNDYWxsYmFjayh0eCk7CisgICAgICAgIGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2so
dHgpOworICAgICAgICBwb3N0TWVzc2FnZSgiV3JpdGUgdHJhbnNhY3Rpb24gc3VjY2VlZGVkLlxu
Iik7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkT25seU1vZGUoZGIpCit7CisgICAg
cG9zdE1lc3NhZ2UoIkJlZ2lubmluZyByZWFkIHRyYW5zYWN0aW9uczoiKTsKKyAgICAvLyBUZXN0
IHRoZSAnQ1JFQVRFIFRBQkxFJyBvcGVyYXRpb247IGl0IHNob3VsZCBiZSBkaXNhbGxvd2VkCisg
ICAgZGIucmVhZFRyYW5zYWN0aW9uKGNyZWF0ZVRhYmxlQ2FsbGJhY2spOworCisgICAgLy8gSW4g
b3JkZXIgdG8gdGVzdCBhbGwgb3RoZXIgJ0NSRUFURScgb3BlcmF0aW9ucywgd2UgbXVzdCBjcmVh
dGUgdGhlIHRhYmxlIGZpcnN0CisgICAgZGIudHJhbnNhY3Rpb24oY3JlYXRlVGFibGVDYWxsYmFj
ayk7CisgICAgZGIucmVhZFRyYW5zYWN0aW9uKGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayk7CisK
KyAgICAvLyBJbiBvcmRlciB0byB0ZXN0IHRoZSAnRFJPUCcgYW5kICdvdGhlcicgb3BlcmF0aW9u
cywgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgdGhlIHJlc3BlY3RpdmUgZW50aXRpZXMKKyAgICBk
Yi50cmFuc2FjdGlvbihjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2spOworICAgIGRiLnJlYWRUcmFu
c2FjdGlvbihvdGhlclN0YXRlbWVudHNDYWxsYmFjayk7CisgICAgZGIucmVhZFRyYW5zYWN0aW9u
KGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2spOworICAgIHBvc3RNZXNzYWdlKCJSZWFkIHRyYW5zYWN0
aW9ucyBzdWNjZWVkZWQuIik7Cit9CisKK3ZhciBkYiA9IG9wZW5EYXRhYmFzZVN5bmMoIlRlc3RB
dXRob3JpemVyVGVzdCIsICIxLjAiLCAiVGVzdCB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci4iLCAx
KTsKK2NsZWFudXAoZGIpOwordGVzdFJlYWRXcml0ZU1vZGUoZGIpOwordGVzdFJlYWRPbmx5TW9k
ZShkYik7CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJj
ZXMvdHJhbnNhY3Rpb24taW4tdHJhbnNhY3Rpb24tc3luYy5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy90cmFuc2FjdGlvbi1pbi10
cmFuc2FjdGlvbi1zeW5jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACit2YXIgZGIg
PSBvcGVuRGF0YWJhc2VTeW5jKCJUcmFuc2FjdGlvbkluVHJhbnNhY3Rpb25UZXN0IiwgIjEuMCIs
ICJUZXN0IHRoYXQgdHJ5aW5nIHRvIHJ1biBhIG5lc3RlZCB0cmFuc2FjdGlvbiBmYWlscy4iLCAx
KTsKK2RiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgdHJ5IHsKKyAgICAgICAgZGIu
dHJhbnNhY3Rpb24oZnVuY3Rpb24obmVzdGVkVHgpIHsgfSk7CisgICAgICAgIHBvc3RNZXNzYWdl
KCJGQUlMOiBUcnlpbmcgdG8gcnVuIGEgbmVzdGVkIHRyYW5zYWN0aW9uIHNob3VsZCB0aHJvdyBh
biBleGNlcHRpb24uIik7CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIHBvc3RNZXNzYWdl
KCJQQVNTOiBFeGNlcHRpb24gdGhyb3duIHdoaWxlIHRyeWluZyB0byBydW4gYSBuZXN0ZWQgdHJh
bnNhY3Rpb24uIik7CisgICAgfQorfSk7CisKK3Bvc3RNZXNzYWdlKCJkb25lIik7Cg==
</data>
<flag name="review"
          id="49113"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="49114"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62275</attachid>
            <date>2010-07-22 01:47:39 -0700</date>
            <delta_ts>2010-07-22 13:15:25 -0700</delta_ts>
            <desc>patch #4: interrupt all DB operations when the worker is shutting down</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32463</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Mzg3OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTAtMDctMjEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbnRlcnJ1cHQgYWxsIERCIG9wZXJhdGlvbnMgd2hlbiBhIHdvcmtlciBpcyB0ZXJtaW5hdGVk
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA2MDcK
KworICAgICAgICBUZXN0czogZmFzdC93b3JrZXJzL3N0b3JhZ2UvaW50ZXJydXB0LWRhdGFiYXNl
LXN5bmMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC93b3JrZXJzL3N0b3JhZ2UvaW50ZXJydXB0
LWRhdGFiYXNlLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6aW50ZXJydXB0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9z
cWwvU1FMaXRlU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dDo6cHJlcGFyZSk6CisgICAgICAgICogc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0YWJhc2U6OkFic3RyYWN0RGF0YWJhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6QWJzdHJhY3REYXRhYmFzZTo6aW50ZXJydXB0KToKKyAgICAgICAgKiBz
dG9yYWdlL0Fic3RyYWN0RGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0RGF0
YWJhc2U6OmNsb3NlZE9ySW50ZXJydXB0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RE
YXRhYmFzZTo6aW50ZXJydXB0ZWRNdXRleCk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdERh
dGFiYXNlOjpvcGVuZWQpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9E
YXRhYmFzZVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VTeW5jOjpvcGVuRGF0
YWJhc2VTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6Y2hhbmdlVmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN5bmM6OnRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKiBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OmFkZE9wZW5EYXRhYmFzZSk6CisgICAgICAgICog
c3RvcmFnZS9EYXRhYmFzZVRyYWNrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6aW50ZXJydXB0ZWRNdXRleCk6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50OjpleGVjdXRlKToKKyAgICAgICAg
KiBzdG9yYWdlL1NRTFN0YXRlbWVudFN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3Rh
dGVtZW50U3luYzo6ZXhlY3V0ZSk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNRTCk6CisgICAg
ICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6Y2hlY2tBbmRIYW5kbGVDbG9zZWREYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6cGVyZm9ybU5leHRTdGVwKToK
KyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpwZXJmb3JtUGVuZGluZ0NhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25D
YWxsYmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvblN5bmMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU1FMKToKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uU3luYzo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5z
YWN0aW9uU3luYzo6Y29tbWl0KToKKyAgICAgICAgKiBzdG9yYWdlL2Nocm9taXVtL0RhdGFiYXNl
VHJhY2tlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
Y2FuRXN0YWJsaXNoRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
OjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
clRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnN0b3ApOgorCiAy
MDEwLTA3LTIyICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0
ZURhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVE
YXRhYmFzZS5jcHAJKHJldmlzaW9uIDYzODc5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIGNvbnN0IGlu
dCBTUUxSZXN1bHRPayA9IFNRTElURV9PSzsKIGNvbnN0IGludCBTUUxSZXN1bHRSb3cgPSBTUUxJ
VEVfUk9XOwogY29uc3QgaW50IFNRTFJlc3VsdFNjaGVtYSA9IFNRTElURV9TQ0hFTUE7CiBjb25z
dCBpbnQgU1FMUmVzdWx0RnVsbCA9IFNRTElURV9GVUxMOworY29uc3QgaW50IFNRTFJlc3VsdElu
dGVycnVwdCA9IFNRTElURV9JTlRFUlJVUFQ7CiAKIAogU1FMaXRlRGF0YWJhc2U6OlNRTGl0ZURh
dGFiYXNlKCkKQEAgLTkyLDYgKzkzLDEyIEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OmNsb3NlKCkK
ICAgICBtX29wZW5pbmdUaHJlYWQgPSAwOwogfQogCit2b2lkIFNRTGl0ZURhdGFiYXNlOjppbnRl
cnJ1cHQoKQoreworICAgIGlmIChtX2RiKQorICAgICAgICBzcWxpdGUzX2ludGVycnVwdChtX2Ri
KTsKK30KKwogdm9pZCBTUUxpdGVEYXRhYmFzZTo6c2V0RnVsbHN5bmMoYm9vbCBmc3luYykgCiB7
CiAgICAgaWYgKGZzeW5jKSAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFi
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2Uu
aAkocmV2aXNpb24gNjM4NzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGV4dGVybiBjb25zdCBpbnQgU1FM
UmVzdWx0T2s7CiBleHRlcm4gY29uc3QgaW50IFNRTFJlc3VsdFJvdzsKIGV4dGVybiBjb25zdCBp
bnQgU1FMUmVzdWx0U2NoZW1hOwogZXh0ZXJuIGNvbnN0IGludCBTUUxSZXN1bHRGdWxsOworZXh0
ZXJuIGNvbnN0IGludCBTUUxSZXN1bHRJbnRlcnJ1cHQ7CiAKIGNsYXNzIFNRTGl0ZURhdGFiYXNl
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBmcmllbmQgY2xhc3MgU1FMaXRlVHJhbnNhY3Rp
b247CkBAIC01OCw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICBib29sIG9wZW4oY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSwgYm9vbCBmb3JXZWJTUUxEYXRhYmFzZSA9IGZhbHNlKTsKICAgICBib29sIGlz
T3BlbigpIGNvbnN0IHsgcmV0dXJuIG1fZGI7IH0KICAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9p
ZCBpbnRlcnJ1cHQoKTsKIAogICAgIGJvb2wgZXhlY3V0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJik7
CiAgICAgYm9vbCByZXR1cm5zQXRMZWFzdE9uZVJlc3VsdChjb25zdCBTdHJpbmcmKTsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24gNjM4Nzkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw5ICs3NiwxMSBAQCBpbnQgU1FMaXRlU3RhdGVtZW50OjpwcmVwYXJlKCkKIAog
ICAgIGlmIChlcnJvciAhPSBTUUxJVEVfT0spCiAgICAgICAgIExPRyhTUUxEYXRhYmFzZSwgInNx
bGl0ZTNfcHJlcGFyZTE2IGZhaWxlZCAoJWkpXG4lc1xuJXMiLCBlcnJvciwgbV9xdWVyeS5hc2Np
aSgpLmRhdGEoKSwgc3FsaXRlM19lcnJtc2cobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkpKTsK
LSAgICBjb25zdCBVQ2hhciogY2ggPSBzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+KHRhaWwpOwot
ICAgIGlmIChjaCAmJiAqY2gpCi0gICAgICAgIGVycm9yID0gU1FMSVRFX0VSUk9SOworICAgIGVs
c2UgeworICAgICAgICBjb25zdCBVQ2hhciogY2ggPSBzdGF0aWNfY2FzdDxjb25zdCBVQ2hhcio+
KHRhaWwpOworICAgICAgICBpZiAoY2ggJiYgKmNoKQorICAgICAgICAgICAgZXJyb3IgPSBTUUxJ
VEVfRVJST1I7CisgICAgfQogI2lmbmRlZiBOREVCVUcKICAgICBtX2lzUHJlcGFyZWQgPSBlcnJv
ciA9PSBTUUxJVEVfT0s7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERh
dGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDYzODc5KQorKysgV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0YWJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDcgQEAgQWJzdHJhY3REYXRhYmFz
ZTo6QWJzdHJhY3REYXRhYmFzZShTY3JpcAogICAgICwgbV9ndWlkKDApCiAgICAgLCBtX29wZW5l
ZChmYWxzZSkKICAgICAsIG1fbmV3KGZhbHNlKQorICAgICwgbV9pbnRlcnJ1cHRlZChmYWxzZSkK
IHsKICAgICBBU1NFUlQoY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogICAgIG1fY29udGV4
dFRocmVhZFNlY3VyaXR5T3JpZ2luID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0
eU9yaWdpbigpOwpAQCAtNDc0LDYgKzQ3NSwxNiBAQCB2b2lkIEFic3RyYWN0RGF0YWJhc2U6Omlu
Y3JlbWVudGFsVmFjdXVtCiAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxW
YWN1dW1Db21tYW5kKCk7CiB9CiAKK3ZvaWQgQWJzdHJhY3REYXRhYmFzZTo6aW50ZXJydXB0KCkK
K3sKKyAgICB3aGlsZSAoIW1faW50ZXJydXB0ZWRHdWFyZC50cnlMb2NrKCkpCisgICAgICAgIG1f
c3FsaXRlRGF0YWJhc2UuaW50ZXJydXB0KCk7CisKKyAgICBBU1NFUlQoIW1faW50ZXJydXB0ZWRH
dWFyZC50cnlMb2NrKCkpOworICAgIG1faW50ZXJydXB0ZWQgPSB0cnVlOworICAgIG1faW50ZXJy
dXB0ZWRHdWFyZC51bmxvY2soKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Fic3RyYWN0RGF0
YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvQWJzdHJhY3REYXRhYmFzZS5o
CShyZXZpc2lvbiA2Mzg3OSkKKysrIFdlYkNvcmUvc3RvcmFnZS9BYnN0cmFjdERhdGFiYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDggKzU1LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBT
dHJpbmcgdmVyc2lvbigpIGNvbnN0OwogCi0gICAgYm9vbCBvcGVuZWQoKSBjb25zdCB7IHJldHVy
biBtX29wZW5lZDsgfQogICAgIGJvb2wgaXNOZXcoKSBjb25zdCB7IHJldHVybiBtX25ldzsgfQor
ICAgIGJvb2wgY2xvc2VkT3JJbnRlcnJ1cHRlZCgpIGNvbnN0IHsgcmV0dXJuICFtX29wZW5lZCB8
fCBtX2ludGVycnVwdGVkOyB9CiAKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwpAQCAtNjgsNiArNjgsOCBAQCBwdWJsaWM6CiAK
ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUoKSBjb25zdDsKICAgICB2b2lkIGlu
Y3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKKyAgICB2b2lkIGludGVycnVwdCgpOworICAgIE11
dGV4JiBpbnRlcnJ1cHRlZE11dGV4KCkgeyByZXR1cm4gbV9pbnRlcnJ1cHRlZEd1YXJkOyB9CiAK
ICAgICAvLyBGSVhNRTogbW92ZSBhbGwgdmVyc2lvbi1yZWxhdGVkIG1ldGhvZHMgdG8gYSBEYXRh
YmFzZVZlcnNpb25UcmFja2VyIGNsYXNzCiAgICAgYm9vbCB2ZXJzaW9uTWF0Y2hlc0V4cGVjdGVk
KCkgY29uc3Q7CkBAIC05MSw2ICs5Myw3IEBAIHByb3RlY3RlZDoKICAgICBBYnN0cmFjdERhdGFi
YXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgZXhwZWN0ZWRWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKIAorICAgIGJvb2wg
b3BlbmVkKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuZWQ7IH0KICAgICB2b2lkIGNsb3NlRGF0YWJh
c2UoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3Vs
ZFNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlYyk7CkBAIC0xMTYsNiAr
MTE5LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9ndWlkOwogICAgIGJvb2wgbV9vcGVuZWQ7CiAg
ICAgYm9vbCBtX25ldzsKKyAgICBib29sIG1faW50ZXJydXB0ZWQ7CisgICAgTXV0ZXggbV9pbnRl
cnJ1cHRlZEd1YXJkOwogCiAgICAgU1FMaXRlRGF0YWJhc2UgbV9zcWxpdGVEYXRhYmFzZTsKIApJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA2Mzg3OSkKKysrIFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDggQEAgUGFzc1JlZlB0
cjxEYXRhYmFzZT4gRGF0YWJhc2U6Om9wZW5EYXRhYgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQ
dHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZSkKIHsKKyAgICBNdXRl
eExvY2tlciBpbnRlcnJ1cHRlZE11dGV4TG9jayhEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5p
bnRlcnJ1cHRlZE11dGV4KCkpOworCiAgICAgaWYgKCFEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIo
KS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSkpIHsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBmb3Igb3Jp
Z2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgpLmRhdGEo
KSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7
CiAgICAgICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHJldmlz
aW9uIDYzODc5KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlU3luYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDYgKzUwLDggQEAgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNl
U3luYzo6bwogewogICAgIEFTU0VSVChjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CiAKKyAg
ICBNdXRleExvY2tlciBpbnRlcnJ1cHRlZE11dGV4TG9jayhEYXRhYmFzZVRyYWNrZXI6OnRyYWNr
ZXIoKS5pbnRlcnJ1cHRlZE11dGV4KCkpOworCiAgICAgaWYgKCFEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXIoKS5jYW5Fc3RhYmxpc2hEYXRhYmFzZShjb250ZXh0LCBuYW1lLCBkaXNwbGF5TmFtZSwg
ZXN0aW1hdGVkU2l6ZSkpIHsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJEYXRhYmFzZSAlcyBm
b3Igb3JpZ2luICVzIG5vdCBhbGxvd2VkIHRvIGJlIGVzdGFibGlzaGVkIiwgbmFtZS5hc2NpaSgp
LmRhdGEoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtOTQsNiArOTYsMTIgQEAgdm9pZCBEYXRhYmFz
ZVN5bmM6OmNoYW5nZVZlcnNpb24oY29uc3QgUwogewogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKIAorICAgIE11dGV4TG9ja2VyIGludGVy
cnVwdGVkTXV0ZXhMb2NrKGludGVycnVwdGVkTXV0ZXgoKSk7CisgICAgaWYgKGNsb3NlZE9ySW50
ZXJydXB0ZWQoKSkgeworICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0VfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNxbGl0ZURhdGFiYXNlKCkudHJhbnNh
Y3Rpb25JblByb2dyZXNzKCkpIHsKICAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246OkRBVEFCQVNF
X0VSUjsKICAgICAgICAgcmV0dXJuOwpAQCAtMTMyLDYgKzE0MCwxMiBAQCB2b2lkIERhdGFiYXNl
U3luYzo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0CiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwogCisgICAgTXV0ZXhMb2NrZXIgaW50ZXJy
dXB0ZWRNdXRleExvY2soaW50ZXJydXB0ZWRNdXRleCgpKTsKKyAgICBpZiAoY2xvc2VkT3JJbnRl
cnJ1cHRlZCgpKSB7CisgICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoc3FsaXRlRGF0YWJhc2UoKS50cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoKSkgewogICAgICAgICBlYyA9IFNRTEV4Y2VwdGlvbjo6REFUQUJBU0Vf
RVJSOwogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFj
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNw
cAkocmV2aXNpb24gNjM4NzkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywxMSBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6b3BlblRyYWNrZXJEYXRhYmFzCiAKIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxp
c2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSkKIHsKKyAgICBBU1NFUlQoIW1fb3BlbkRhdGFiYXNlTWFwR3VhcmQudHJ5TG9jaygpKTsK
KworICAgIGlmIChtX2ludGVycnVwdGVkQ29udGV4dHMuY29udGFpbnMoY29udGV4dCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBjb250ZXh0
LT5zZWN1cml0eU9yaWdpbigpOwogICAgIFByb3Bvc2VkRGF0YWJhc2UgZGV0YWlsczsKIApAQCAt
MjM1LDYgKzI0MCwyOSBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGF0YWJhc2VDaGFuZ2VkKEFi
CiAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkubWFya0RhdGFiYXNlKGRhdGFiYXNlKTsKIH0KIAor
dm9pZCBEYXRhYmFzZVRyYWNrZXI6OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBNdXRleExvY2tlciBvcGVuRGF0
YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOworICAgIG1faW50ZXJydXB0ZWRD
b250ZXh0cy5hZGQoY29udGV4dCk7CisKKyAgICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFwKQorICAg
ICAgICByZXR1cm47CisKKyAgICBEYXRhYmFzZU5hbWVNYXAqIG5hbWVNYXAgPSBtX29wZW5EYXRh
YmFzZU1hcC0+Z2V0KGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIGlmICghbmFtZU1h
cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBkYk5hbWVNYXBFbmRJdCA9IG5hbWVNYXAtPmVuZCgpOworICAgIGZvciAoRGF0YWJhc2VOYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBJdCA9IG5hbWVNYXAtPmJlZ2luKCk7IGRiTmFt
ZU1hcEl0ICE9IGRiTmFtZU1hcEVuZEl0OyArK2RiTmFtZU1hcEl0KSB7CisgICAgICAgIERhdGFi
YXNlU2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT5zZWNvbmQ7CisgICAgICAgIERhdGFi
YXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNldEVuZEl0ID0gZGF0YWJhc2VTZXQtPmVuZCgpOwor
ICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNldEl0ID0gZGF0YWJh
c2VTZXQtPmJlZ2luKCk7IGRiU2V0SXQgIT0gZGJTZXRFbmRJdDsgKytkYlNldEl0KQorICAgICAg
ICAgICAgKCpkYlNldEl0KS0+aW50ZXJydXB0KCk7CisgICAgfQorCisgICAgbV9pbnRlcnJ1cHRl
ZENvbnRleHRzLnJlbW92ZShjb250ZXh0KTsKK30KKwogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6
b3JpZ2luUGF0aChTZWN1cml0eU9yaWdpbiogb3JpZ2luKSBjb25zdAogewogICAgIHJldHVybiBT
UUxpdGVGaWxlU3lzdGVtOjphcHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG1fZGF0YWJhc2VE
aXJlY3RvcnlQYXRoLnRocmVhZHNhZmVDb3B5KCksIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVy
KCkpOwpAQCAtNDgwLDM3ICs1MDgsMzUgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJh
Y2tlcjo6dXNhZwogCiB2b2lkIERhdGFiYXNlVHJhY2tlcjo6YWRkT3BlbkRhdGFiYXNlKEFic3Ry
YWN0RGF0YWJhc2UqIGRhdGFiYXNlKQogeworICAgIEFTU0VSVCghbV9vcGVuRGF0YWJhc2VNYXBH
dWFyZC50cnlMb2NrKCkpOworCiAgICAgaWYgKCFkYXRhYmFzZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRh
dGFiYXNlTWFwR3VhcmQpOwotCi0gICAgICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCi0gICAg
ICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC5zZXQobmV3IERhdGFiYXNlT3JpZ2luTWFwKTsKKyAg
ICBpZiAoIW1fb3BlbkRhdGFiYXNlTWFwKQorICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC5zZXQo
bmV3IERhdGFiYXNlT3JpZ2luTWFwKTsKIAotICAgICAgICBTdHJpbmcgbmFtZShkYXRhYmFzZS0+
c3RyaW5nSWRlbnRpZmllcigpKTsKLSAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBuYW1lTWFwID0g
bV9vcGVuRGF0YWJhc2VNYXAtPmdldChkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAg
ICAgIGlmICghbmFtZU1hcCkgewotICAgICAgICAgICAgbmFtZU1hcCA9IG5ldyBEYXRhYmFzZU5h
bWVNYXA7Ci0gICAgICAgICAgICBtX29wZW5EYXRhYmFzZU1hcC0+c2V0KGRhdGFiYXNlLT5zZWN1
cml0eU9yaWdpbigpLT50aHJlYWRzYWZlQ29weSgpLCBuYW1lTWFwKTsKLSAgICAgICAgfQorICAg
IFN0cmluZyBuYW1lKGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOworICAgIERhdGFiYXNl
TmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5nZXQoZGF0YWJhc2UtPnNlY3Vy
aXR5T3JpZ2luKCkpOworICAgIGlmICghbmFtZU1hcCkgeworICAgICAgICBuYW1lTWFwID0gbmV3
IERhdGFiYXNlTmFtZU1hcDsKKyAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAtPnNldChkYXRhYmFz
ZS0+c2VjdXJpdHlPcmlnaW4oKS0+dGhyZWFkc2FmZUNvcHkoKSwgbmFtZU1hcCk7CisgICAgfQog
Ci0gICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsK
LSAgICAgICAgaWYgKCFkYXRhYmFzZVNldCkgewotICAgICAgICAgICAgZGF0YWJhc2VTZXQgPSBu
ZXcgRGF0YWJhc2VTZXQ7Ci0gICAgICAgICAgICBuYW1lTWFwLT5zZXQobmFtZS50aHJlYWRzYWZl
Q29weSgpLCBkYXRhYmFzZVNldCk7Ci0gICAgICAgIH0KKyAgICBEYXRhYmFzZVNldCogZGF0YWJh
c2VTZXQgPSBuYW1lTWFwLT5nZXQobmFtZSk7CisgICAgaWYgKCFkYXRhYmFzZVNldCkgeworICAg
ICAgICBkYXRhYmFzZVNldCA9IG5ldyBEYXRhYmFzZVNldDsKKyAgICAgICAgbmFtZU1hcC0+c2V0
KG5hbWUudGhyZWFkc2FmZUNvcHkoKSwgZGF0YWJhc2VTZXQpOworICAgIH0KIAotICAgICAgICBk
YXRhYmFzZVNldC0+YWRkKGRhdGFiYXNlKTsKKyAgICBkYXRhYmFzZVNldC0+YWRkKGRhdGFiYXNl
KTsKIAotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkFkZGVkIG9wZW4gRGF0YWJhc2UgJXMgKCVw
KVxuIiwgZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSwgZGF0YWJh
c2UpOworICAgIExPRyhTdG9yYWdlQVBJLCAiQWRkZWQgb3BlbiBEYXRhYmFzZSAlcyAoJXApXG4i
LCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpLCBkYXRhYmFzZSk7
CiAKLSAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2Vy
KG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLSAgICAgICAgaWYgKCFvcmlnaW5RdW90YU1hbmFnZXIo
KS50cmFja3NPcmlnaW4oZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2luKCkpKSB7Ci0gICAgICAgICAg
ICBvcmlnaW5RdW90YU1hbmFnZXIoKS50cmFja09yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmln
aW4oKSk7Ci0gICAgICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGREYXRhYmFzZShkYXRh
YmFzZS0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKSwgZGF0
YWJhc2UtPmZpbGVOYW1lKCkpOwotICAgICAgICB9CisgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFu
YWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKKyAgICBpZiAo
IW9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmln
aW4oKSkpIHsKKyAgICAgICAgb3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tPcmlnaW4oZGF0YWJh
c2UtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGRE
YXRhYmFzZShkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2UtPnN0cmluZ0lkZW50
aWZpZXIoKSwgZGF0YWJhc2UtPmZpbGVOYW1lKCkpOwogICAgIH0KIAogICAgIE11dGV4TG9ja2Vy
IGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRy
YWNrZXIuaAkocmV2aXNpb24gNjM4NzkpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUcmFj
a2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEzICs2MCwxMyBAQCBjbGFzcyBEYXRhYmFzZVRy
YWNrZXIgOiBwdWJsaWMgTm9uY29weWFiCiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZVRyYWNrZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgpOwogICAgIHN0YXRpYyBEYXRh
YmFzZVRyYWNrZXImIHRyYWNrZXIoKTsKKwogICAgIC8vIFRoaXMgc2luZ2xldG9uIHdpbGwgcG90
ZW50aWFsbHkgYmUgdXNlZCBmcm9tIG11bHRpcGxlIHdvcmtlciB0aHJlYWRzIGFuZCB0aGUgcGFn
ZSdzIGNvbnRleHQgdGhyZWFkIHNpbXVsdGFuZW91c2x5LiAgVG8ga2VlcCB0aGlzIHNhZmUsIGl0
J3MKICAgICAvLyBjdXJyZW50bHkgdXNpbmcgNCBsb2Nrcy4gIEluIG9yZGVyIHRvIGF2b2lkIGRl
YWRsb2NrIHdoZW4gdGFraW5nIG11bHRpcGxlIGxvY2tzLCB5b3UgbXVzdCB0YWtlIHRoZW0gaW4g
dGhlIGNvcnJlY3Qgb3JkZXI6Ci0gICAgLy8gbV9kYXRhYmFzZUd1YXJkIGJlZm9yZSBxdW90YU1h
bmFnZXIgaWYgYm90aCBsb2NrcyBhcmUgbmVlZGVkLgotICAgIC8vIG1fb3BlbkRhdGFiYXNlTWFw
R3VhcmQgYmVmb3JlIHF1b3RhTWFuYWdlciBpZiBib3RoIGxvY2tzIGFyZSBuZWVkZWQuCi0gICAg
Ly8gbV9kYXRhYmFzZUd1YXJkIGFuZCBtX29wZW5EYXRhYmFzZU1hcEd1YXJkIGN1cnJlbnRseSBk
b24ndCBvdmVybGFwLgorICAgIC8vIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQgYmVmb3JlIG1fZGF0
YWJhc2VHdWFyZCwgYmVmb3JlIHF1b3RhTWFuYWdlci4KICAgICAvLyBub3RpZmljYXRpb25NdXRl
eCgpIGlzIGN1cnJlbnRseSBpbmRlcGVuZGVudCBvZiB0aGUgb3RoZXIgbG9ja3MuCiAKKyAgICBN
dXRleCYgaW50ZXJydXB0ZWRNdXRleCgpIHsgcmV0dXJuIG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQ7
IH0KICAgICBib29sIGNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgdm9pZCBzZXREYXRhYmFzZURldGFpbHMoU2VjdXJp
dHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAgICAgU3RyaW5nIGZ1bGxQYXRoRm9yRGF0
YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZE
b2VzTm90RXhpc3QgPSB0cnVlKTsKQEAgLTc4LDYgKzc4LDggQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgQWJzdHJhY3REYXRhYmFz
ZSopOwogICAgIHZvaWQgZGF0YWJhc2VDaGFuZ2VkKEFic3RyYWN0RGF0YWJhc2UqKTsKIAorICAg
IHZvaWQgaW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250
ZXh0Kik7CisKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VUcmFja2VyKGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VQYXRoKTsKIApAQCAtODcsNiArODksNyBAQCBwcml2YXRlOgogCiAgICAgTXV0ZXggbV9v
cGVuRGF0YWJhc2VNYXBHdWFyZDsKICAgICBtdXRhYmxlIE93blB0cjxEYXRhYmFzZU9yaWdpbk1h
cD4gbV9vcGVuRGF0YWJhc2VNYXA7CisgICAgSGFzaFNldDxTY3JpcHRFeGVjdXRpb25Db250ZXh0
Kj4gbV9pbnRlcnJ1cHRlZENvbnRleHRzOwogCiAjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQogcHVi
bGljOgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDYzODc5KQorKysg
V2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OmV4ZWN1dGUoRGF0YWJhc2UqIGRiKQogCiAgICAg
aWYgKHJlc3VsdCAhPSBTUUxSZXN1bHRPaykgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlVu
YWJsZSB0byB2ZXJpZnkgY29ycmVjdG5lc3Mgb2Ygc3RhdGVtZW50ICVzIC0gZXJyb3IgJWkgKCVz
KSIsIG1fc3RhdGVtZW50LmFzY2lpKCkuZGF0YSgpLCByZXN1bHQsIGRhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7Ci0gICAgICAgIG1fZXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpT
WU5UQVhfRVJSLCBkYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBtX2Vycm9yID0g
U1FMRXJyb3I6OmNyZWF0ZShyZXN1bHQgPT0gU1FMUmVzdWx0SW50ZXJydXB0ID8gU1FMRXJyb3I6
OkRBVEFCQVNFX0VSUiA6IFNRTEVycm9yOjpTWU5UQVhfRVJSLCBkYXRhYmFzZS0+bGFzdEVycm9y
TXNnKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU1FMU3RhdGVtZW50U3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L1NRTFN0YXRlbWVudFN5bmMuY3BwCShyZXZpc2lvbiA2Mzg3OSkKKysrIFdlYkNvcmUvc3RvcmFn
ZS9TUUxTdGF0ZW1lbnRTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBQ
YXNzUmVmUHRyPFNRTFJlc3VsdFNldD4gU1FMU3RhdGVtZW50U3luCiAgICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudCgqZGF0YWJhc2UsIG1fc3RhdGVtZW50KTsKICAgICBpbnQgcmVzdWx0ID0g
c3RhdGVtZW50LnByZXBhcmUoKTsKICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdE9rKSB7Ci0g
ICAgICAgIGVjID0gU1FMRXhjZXB0aW9uOjpTWU5UQVhfRVJSOworICAgICAgICBlYyA9IChyZXN1
bHQgPT0gU1FMUmVzdWx0SW50ZXJydXB0ID8gU1FMRXhjZXB0aW9uOjpEQVRBQkFTRV9FUlIgOiBT
UUxFeGNlcHRpb246OlNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gNjM4NzkpCisrKyBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4
OCw3IEBAIFNRTFRyYW5zYWN0aW9uOjp+U1FMVHJhbnNhY3Rpb24oKQogCiB2b2lkIFNRTFRyYW5z
YWN0aW9uOjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0
b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+
IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGNhbGxiYWNr
RXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUpCiB7Ci0gICAgaWYgKCFtX2V4ZWN1dGVTcWxBbGxvd2Vk
IHx8ICFtX2RhdGFiYXNlLT5vcGVuZWQoKSkgeworICAgIGlmICghbV9leGVjdXRlU3FsQWxsb3dl
ZCB8fCBtX2RhdGFiYXNlLT5jbG9zZWRPckludGVycnVwdGVkKCkpIHsKICAgICAgICAgZSA9IElO
VkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ4LDcgKzE0OCw3
IEBAIGNvbnN0IGNoYXIqIFNRTFRyYW5zYWN0aW9uOjpkZWJ1Z1N0ZXBOYW0KIAogdm9pZCBTUUxU
cmFuc2FjdGlvbjo6Y2hlY2tBbmRIYW5kbGVDbG9zZWREYXRhYmFzZSgpCiB7Ci0gICAgaWYgKG1f
ZGF0YWJhc2UtPm9wZW5lZCgpKQorICAgIGlmICghbV9kYXRhYmFzZS0+Y2xvc2VkT3JJbnRlcnJ1
cHRlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2FzIHN0
b3BwZWQsIGRvbid0IGRvIGFueXRoaW5nIGFuZCBjYW5jZWwgcXVldWVkIHdvcmsKQEAgLTE3NCw2
ICsxNzQsMTAgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6Y2hlY2tBbmRIYW5kbGVDbG9zZQogCiBi
b29sIFNRTFRyYW5zYWN0aW9uOjpwZXJmb3JtTmV4dFN0ZXAoKQogeworICAgIE11dGV4TG9ja2Vy
IGludGVycnVwdGVkTXV0ZXhMb2NrKG1fZGF0YWJhc2UtPmludGVycnVwdGVkTXV0ZXgoKSk7Cisg
ICAgaWYgKG1fZGF0YWJhc2UtPmNsb3NlZE9ySW50ZXJydXB0ZWQoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKICAgICBMT0coU3RvcmFnZUFQSSwgIlN0ZXAgJXNcbiIsIGRlYnVnU3RlcE5hbWUo
bV9uZXh0U3RlcCkpOwogCiAgICAgQVNTRVJUKG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9u
OjphY3F1aXJlTG9jayB8fApAQCAtMTk0LDYgKzE5OCwxMCBAQCBib29sIFNRTFRyYW5zYWN0aW9u
OjpwZXJmb3JtTmV4dFN0ZXAoKQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwZXJmb3JtUGVuZGlu
Z0NhbGxiYWNrKCkKIHsKKyAgICBNdXRleExvY2tlciBpbnRlcnJ1cHRlZE11dGV4TG9jayhtX2Rh
dGFiYXNlLT5pbnRlcnJ1cHRlZE11dGV4KCkpOworICAgIGlmIChtX2RhdGFiYXNlLT5jbG9zZWRP
ckludGVycnVwdGVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIExPRyhTdG9yYWdlQVBJLCAi
Q2FsbGJhY2sgJXNcbiIsIGRlYnVnU3RlcE5hbWUobV9uZXh0U3RlcCkpOwogCiAgICAgQVNTRVJU
KG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFj
ayB8fApAQCAtMjk1LDcgKzMwMyw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFu
c2FjdGlvbkMKICAgICB9IGVsc2UKICAgICAgICAgc2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2sg
PSB0cnVlOwogCi0gICAgLy8gVHJhbnNhY3Rpb24gU3RlcCA1IC0gSWYgdGhlIHRyYW5zYWN0aW9u
IGNhbGxiYWNrIHdhcyBudWxsIG9yIHJhaXNlZCBhbiBleGNlcHRpb24sIGp1bXAgdG8gdGhlIGVy
cm9yIGNhbGxiYWNrCisgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCA1IC0gSWYgdGhlIHRyYW5zYWN0
aW9uIGNhbGxiYWNrIHJhaXNlZCBhbiBleGNlcHRpb24sIGp1bXAgdG8gdGhlIGVycm9yIGNhbGxi
YWNrCiAgICAgaWYgKHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrKSB7CiAgICAgICAgIG1fdHJh
bnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAi
dGhlIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgd2FzIG51bGwgb3IgdGhyZXcgYW4gZXhjZXB0aW9u
Iik7CiAgICAgICAgIGRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKTsKQEAgLTMzOCwx
MiArMzQ2LDEyIEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHMoKQogICAgICAg
ICAgICAgLy8gT3RoZXJ3aXNlLCBhZHZhbmNlIHRvIHRoZSBuZXh0IHN0YXRlbWVudAogICAgICAg
ICAgICAgZ2V0TmV4dFN0YXRlbWVudCgpOwogICAgICAgICB9Ci0gICAgfSB3aGlsZSAocnVuQ3Vy
cmVudFN0YXRlbWVudCgpKTsKKyAgICB9IHdoaWxlICghbV9kYXRhYmFzZS0+Y2xvc2VkT3JJbnRl
cnJ1cHRlZCgpICYmIHJ1bkN1cnJlbnRTdGF0ZW1lbnQoKSk7CiAKICAgICAvLyBJZiBydW5DdXJy
ZW50U3RhdGVtZW50KCkgcmV0dXJuZWQgZmFsc2UsIHRoYXQgbWVhbnMgZWl0aGVyIHRoZXJlIHdh
cyBubyBjdXJyZW50IHN0YXRlbWVudCB0byBydW4sCiAgICAgLy8gb3IgdGhlIGN1cnJlbnQgc3Rh
dGVtZW50IHJlcXVpcmVzIGEgY2FsbGJhY2sgdG8gY29tcGxldGUuICBJbiB0aGUgbGF0ZXIgY2Fz
ZSwgaXQgYWxzbyBzY2hlZHVsZWQKICAgICAvLyB0aGUgY2FsbGJhY2sgb3IgcGVyZm9ybWVkIGFu
eSBvdGhlciBhZGRpdGlvbmFsIHdvcmsgc28gd2UgY2FuIHJldHVybgotICAgIGlmICghbV9jdXJy
ZW50U3RhdGVtZW50KQorICAgIGlmICghbV9kYXRhYmFzZS0+Y2xvc2VkT3JJbnRlcnJ1cHRlZCgp
ICYmICFtX2N1cnJlbnRTdGF0ZW1lbnQpCiAgICAgICAgIHBvc3RmbGlnaHRBbmRDb21taXQoKTsK
IH0KIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAJKHJldmlzaW9u
IDYzODc5KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uU3luYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTczLDExICs3Myw2IEBAIFNRTFRyYW5zYWN0aW9uU3luYzo6flNRTFRyYW5z
YWN0aW9uU3luYygKIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBTUUxUcmFuc2FjdGlvblN5bmM6
OmV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxW
YWx1ZT4mIGFyZ3VtZW50cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKG1fZGF0
YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAg
IGlmICghbV9kYXRhYmFzZS0+b3BlbmVkKCkpIHsKLSAgICAgICAgZWMgPSBTUUxFeGNlcHRpb246
OlVOS05PV05fRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICBpZiAoIW1fZGF0
YWJhc2UtPnZlcnNpb25NYXRjaGVzRXhwZWN0ZWQoKSkgewogICAgICAgICBlYyA9IFNRTEV4Y2Vw
dGlvbjo6VkVSU0lPTl9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTIwLDkgKzExNSw2IEBA
IFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBTUUxUcmFuc2FjdGlvblMKIEV4Y2VwdGlvbkNvZGUg
U1FMVHJhbnNhY3Rpb25TeW5jOjpiZWdpbigpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAgIGlmICghbV9k
YXRhYmFzZS0+b3BlbmVkKCkpCi0gICAgICAgIHJldHVybiBTUUxFeGNlcHRpb246OlVOS05PV05f
RVJSOwotCiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0
aW9uSW5Qcm9ncmVzcygpKTsKIAogICAgIC8vIFNldCB0aGUgbWF4aW11bSB1c2FnZSBmb3IgdGhp
cyB0cmFuc2FjdGlvbiBpZiB0aGlzIHRyYW5zYWN0aW9ucyBpcyBub3QgcmVhZC1vbmx5LgpAQCAt
MTUwLDcgKzE0Miw3IEBAIEV4Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpiZWdpbigK
IEV4Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlKCkKIHsKICAgICBBU1NF
UlQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0NvbnRleHRUaHJlYWQo
KSk7Ci0gICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuZWQoKSB8fCAhbV9jYWxsYmFjayB8fCAhbV9j
YWxsYmFjay0+aGFuZGxlRXZlbnQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCB0aGlzKSkgeworICAgIGlmICghbV9jYWxsYmFjayB8fCAhbV9jYWxsYmFjay0+aGFuZGxlRXZl
bnQobV9kYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzKSkgewogICAgICAg
ICBtX2NhbGxiYWNrID0gMDsKICAgICAgICAgcmV0dXJuIFNRTEV4Y2VwdGlvbjo6VU5LTk9XTl9F
UlI7CiAgICAgfQpAQCAtMTYyLDkgKzE1NCw2IEBAIEV4Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rp
b25TeW5jOjpleGVjdXQKIEV4Y2VwdGlvbkNvZGUgU1FMVHJhbnNhY3Rpb25TeW5jOjpjb21taXQo
KQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlz
Q29udGV4dFRocmVhZCgpKTsKLSAgICBpZiAoIW1fZGF0YWJhc2UtPm9wZW5lZCgpKQotICAgICAg
ICByZXR1cm4gU1FMRXhjZXB0aW9uOjpVTktOT1dOX0VSUjsKLQogICAgIEFTU0VSVChtX3NxbGl0
ZVRyYW5zYWN0aW9uKTsKIAogICAgIG1fZGF0YWJhc2UtPmRpc2FibGVBdXRob3JpemVyKCk7Cklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vRGF0YWJhc2VUcmFja2VyQ2hyb21pdW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9EYXRhYmFzZVRyYWNrZXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDYzODc5KQorKysgV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVt
L0RhdGFiYXNlVHJhY2tlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOSArNTQs
MTQgQEAgRGF0YWJhc2VUcmFja2VyOjpEYXRhYmFzZVRyYWNrZXIoY29uc3QgUwogICAgIFNRTGl0
ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCk7CiB9CiAKLWJvb2wgRGF0YWJhc2VUcmFj
a2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKK2Jvb2wgRGF0YWJhc2VUcmFja2Vy
OjpjYW5Fc3RhYmxpc2hEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSkKIHsKLSAgICByZXR1cm4gRGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0
YWJsaXNoRGF0YWJhc2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUpOworICAgIEFTU0VSVCghbV9vcGVuRGF0YWJhc2VNYXBHdWFyZC50cnlM
b2NrKCkpOworCisgICAgaWYgKG1faW50ZXJydXB0ZWRDb250ZXh0cy5jb250YWlucyhjb250ZXh0
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIERhdGFiYXNlT2JzZXJ2ZXI6
OmNhbkVzdGFibGlzaERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplKTsKIH0KIAogdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlRGV0YWlscyhT
ZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxv
bmcpCkBAIC03Miw3ICs3Nyw4IEBAIFN0cmluZyBEYXRhYmFzZVRyYWNrZXI6OmZ1bGxQYXRoRm9y
RGF0YWIKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoQWJzdHJhY3REYXRh
YmFzZSogZGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBNdXRleExvY2tlciBvcGVuRGF0YWJh
c2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOworICAgIEFTU0VSVCghbV9vcGVuRGF0
YWJhc2VNYXBHdWFyZC50cnlMb2NrKCkpOworCiAgICAgaWYgKCFtX29wZW5EYXRhYmFzZU1hcCkK
ICAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAuc2V0KG5ldyBEYXRhYmFzZU9yaWdpbk1hcCgpKTsK
IApAQCAtMTcyLDQgKzE3OCwyNyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2Vy
OjpnZXRNCiAgICAgcmV0dXJuIGRhdGFiYXNlU2l6ZSArIHNwYWNlQXZhaWxhYmxlOwogfQogCit2
b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIE11dGV4TG9ja2VyIG9wZW5EYXRh
YmFzZU1hcExvY2sobV9vcGVuRGF0YWJhc2VNYXBHdWFyZCk7CisgICAgbV9pbnRlcnJ1cHRlZENv
bnRleHRzLmFkZChjb250ZXh0KTsKKworICAgIGlmICghbV9vcGVuRGF0YWJhc2VNYXApCisgICAg
ICAgIHJldHVybjsKKworICAgIERhdGFiYXNlTmFtZU1hcCogbmFtZU1hcCA9IG1fb3BlbkRhdGFi
YXNlTWFwLT5nZXQoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgaWYgKCFuYW1lTWFw
KQorICAgICAgICByZXR1cm47CisKKyAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGRiTmFtZU1hcEVuZEl0ID0gbmFtZU1hcC0+ZW5kKCk7CisgICAgZm9yIChEYXRhYmFzZU5hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gbmFtZU1hcC0+YmVnaW4oKTsgZGJOYW1l
TWFwSXQgIT0gZGJOYW1lTWFwRW5kSXQ7ICsrZGJOYW1lTWFwSXQpIHsKKyAgICAgICAgRGF0YWJh
c2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnNlY29uZDsKKyAgICAgICAgRGF0YWJh
c2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0RW5kSXQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7Cisg
ICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0SXQgPSBkYXRhYmFz
ZVNldC0+YmVnaW4oKTsgZGJTZXRJdCAhPSBkYlNldEVuZEl0OyArK2RiU2V0SXQpCisgICAgICAg
ICAgICAoKmRiU2V0SXQpLT5pbnRlcnJ1cHQoKTsKKyAgICB9CisKKyAgICBtX2ludGVycnVwdGVk
Q29udGV4dHMucmVtb3ZlKGNvbnRleHQpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhy
ZWFkLmNwcAkocmV2aXNpb24gNjM4NzkpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsMTAgQEAKIAogI2luY2x1ZGUgIldvcmtl
clRocmVhZC5oIgogCisjaWYgRU5BQkxFKERBVEFCQVNFKQogI2luY2x1ZGUgIkRhdGFiYXNlVGFz
ay5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgorI2VuZGlmCiAjaW5jbHVkZSAiRGVk
aWNhdGVkV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgpAQCAtMjIxLDYgKzIyNCwxMCBAQCB2b2lkIFdvcmtlclRocmVhZDo6c3Rv
cCgpCiAgICAgLy8gTXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzdG9wKCkg
Y2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRleHQgaXMgZnVsbHkgY3JlYXRlZC4KICAgICBN
dXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CiAKKyNpZiBFTkFCTEUoREFU
QUJBU0UpCisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuaW50ZXJydXB0QWxsRGF0YWJh
c2VzRm9yQ29udGV4dCh3b3JrZXJDb250ZXh0KCkpOworI2VuZGlmCisKICAgICAvLyBFbnN1cmUg
dGhhdCB0YXNrcyBhcmUgYmVpbmcgaGFuZGxlZCBieSB0aHJlYWQgZXZlbnQgbG9vcC4gSWYgc2Ny
aXB0IGV4ZWN1dGlvbiB3ZXJlbid0IGZvcmJpZGRlbiwgYSB3aGlsZSgxKSBsb29wIGluIEpTIGNv
dWxkIGtlZXAgdGhlIHRocmVhZCBhbGl2ZSBmb3JldmVyLgogICAgIGlmIChtX3dvcmtlckNvbnRl
eHQpIHsKICAgICAgICAgbV93b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+Zm9yYmlkRXhlY3V0aW9u
KFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OlRlcm1pbmF0ZVJ1bm5pbmdTY3JpcHQpOwpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjM4NzkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0wNy0yMSAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3QgdGhhdCBhbGwgREIgb3BlcmF0aW9ucyBhcmUgaW50ZXJydXB0ZWQgd2hlbiBh
IHdvcmtlciBpcyB0ZXJtaW5hdGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDA2MDcKKworICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL2lu
dGVycnVwdC1kYXRhYmFzZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29y
a2Vycy9zdG9yYWdlL2ludGVycnVwdC1kYXRhYmFzZS1zeW5jLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvaW50ZXJydXB0LWRhdGFiYXNlLXN5bmMu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvaW50ZXJydXB0LWRh
dGFiYXNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291
cmNlcy9pbnRlcnJ1cHQtZGF0YWJhc2Utc3luYy5qczogQWRkZWQuCisgICAgICAgICogZmFzdC93
b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2ludGVycnVwdC1kYXRhYmFzZS5qczogQWRkZWQuCisg
ICAgICAgIChydW5UcmFuc2FjdGlvbnMpOgorCiAyMDEwLTA3LTIxICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvaW50ZXJydXB0LWRhdGFiYXNlLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9p
bnRlcnJ1cHQtZGF0YWJhc2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvaW50ZXJydXB0LWRhdGFiYXNlLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IGFs
bCBhc3luYyBkYXRhYmFzZSBvcGVyYXRpb25zIGFyZSBpbW1lZGlhdGVseSBpbnRlcnJ1cHRlZCB3
aGVuIHRoZSB3b3JrZXIgbmVlZHMgdG8gdGVybWluYXRlLgorUEFTUzogZGF0YWJhc2Ugb3BlcmF0
aW9ucyBpbnRlcnJ1cHRlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvaW50ZXJydXB0LWRhdGFiYXNlLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2ludGVycnVwdC1kYXRhYmFzZS1zeW5jLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9y
YWdlL2ludGVycnVwdC1kYXRhYmFzZS1zeW5jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNjogREFUQUJBU0VfRVJSOiBET00g
U1FMIEV4Y2VwdGlvbiAxOiBUaGUgb3BlcmF0aW9uIGZhaWxlZCBmb3Igc29tZSByZWFzb24gcmVs
YXRlZCB0byB0aGUgZGF0YWJhc2UuCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgODogVU5LTk9XTl9F
UlI6IERPTSBTUUwgRXhjZXB0aW9uIDA6IFRoZSBvcGVyYXRpb24gZmFpbGVkIGZvciByZWFzb25z
IHVucmVsYXRlZCB0byB0aGUgZGF0YWJhc2UuCitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IGFs
bCBzeW5jIGRhdGFiYXNlIG9wZXJhdGlvbnMgYXJlIGltbWVkaWF0ZWx5IGludGVycnVwdGVkIHdo
ZW4gdGhlIHdvcmtlciBuZWVkcyB0byB0ZXJtaW5hdGUuCitQQVNTOiBkYXRhYmFzZSBvcGVyYXRp
b25zIGludGVycnVwdGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9pbnRlcnJ1cHQtZGF0YWJhc2Utc3luYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2ludGVycnVwdC1kYXRhYmFzZS1zeW5jLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9pbnRlcnJ1cHQtZGF0
YWJhc2Utc3luYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy93b3JrZXItdXRpbC5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgordmFyIHdvcmtlcjsKKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lckhUTUwgKz0gbWVzc2FnZSAr
ICI8YnI+IjsKK30KKworZnVuY3Rpb24gZmluaXNoVGVzdCgpCit7CisgICAgbG9nKCJQQVNTOiBk
YXRhYmFzZSBvcGVyYXRpb25zIGludGVycnVwdGVkLiIpOworICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKK30KKworZnVuY3Rpb24gdGVybWluYXRlV29ya2VyKCkKK3sKKyAgICB3b3JrZXIudGVybWlu
YXRlKCk7CisgICAgd2FpdFVudGlsV29ya2VyVGhyZWFkc0V4aXQoZmluaXNoVGVzdCkKK30KKwor
ZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB3b3Jr
ZXIgPSBuZXcgV29ya2VyKCdyZXNvdXJjZXMvaW50ZXJydXB0LWRhdGFiYXNlLXN5bmMuanMnKTsK
KyAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgaWYgKGV2
ZW50LmRhdGEgPT0gImRvbmUiKQorICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBsb2coZXZlbnQuZGF0YSk7CisgICAgfTsKKworICAgIHNldFRpbWVv
dXQoJ3Rlcm1pbmF0ZVdvcmtlcigpJywgNTAwKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorCis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IGFsbCBz
eW5jIGRhdGFiYXNlIG9wZXJhdGlvbnMgYXJlIGltbWVkaWF0ZWx5IGludGVycnVwdGVkIHdoZW4g
dGhlIHdvcmtlciBuZWVkcyB0byB0ZXJtaW5hdGUuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJl
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3Jh
Z2UvaW50ZXJydXB0LWRhdGFiYXNlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvaW50ZXJydXB0LWRhdGFiYXNlLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9pbnRlcnJ1cHQtZGF0YWJhc2UuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvd29ya2VyLXV0aWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3Zh
ciB3b3JrZXI7CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisK
K2Z1bmN0aW9uIGZpbmlzaFRlc3QoKQoreworICAgIGxvZygiUEFTUzogZGF0YWJhc2Ugb3BlcmF0
aW9ucyBpbnRlcnJ1cHRlZC4iKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIHRlcm1pbmF0ZVdvcmtlcigpCit7CisgICAgd29ya2VyLnRlcm1pbmF0ZSgpOworICAgIHdh
aXRVbnRpbFdvcmtlclRocmVhZHNFeGl0KGZpbmlzaFRlc3QpCit9CisKK2Z1bmN0aW9uIHJ1blRl
c3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgd29ya2VyID0gbmV3IFdvcmtl
cigncmVzb3VyY2VzL2ludGVycnVwdC1kYXRhYmFzZS5qcycpOworICAgIHdvcmtlci5vbm1lc3Nh
Z2UgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBpZiAoZXZlbnQuZGF0YSA9PSAiZG9uZSIp
CisgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxv
ZyhldmVudC5kYXRhKTsKKyAgICB9OworCisgICAgc2V0VGltZW91dCgndGVybWluYXRlV29ya2Vy
KCknLCA1MDApOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVz
dCgpIj4KK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgYWxsIGFzeW5jIGRhdGFiYXNlIG9wZXJh
dGlvbnMgYXJlIGltbWVkaWF0ZWx5IGludGVycnVwdGVkIHdoZW4gdGhlIHdvcmtlciBuZWVkcyB0
byB0ZXJtaW5hdGUuCis8cHJlIGlkPSJjb25zb2xlIj4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2ludGVy
cnVwdC1kYXRhYmFzZS1zeW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3Jlc291cmNlcy9pbnRlcnJ1cHQtZGF0YWJhc2Utc3luYy5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9pbnRl
cnJ1cHQtZGF0YWJhc2Utc3luYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACit2YXIg
ZGIgPSBvcGVuRGF0YWJhc2VTeW5jKCJJbnRlcnJ1cHREYXRhYmFzZVRlc3QiLCAiMSIsICIiLCAx
KTsKK2RiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgdHguZXhlY3V0ZVNxbCgiQ1JF
QVRFIFRBQkxFIElGIE5PVCBFWElTVFMgVGVzdCAoRm9vIElOVCkiKTsKKyAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAvLyBQdXQgYm90aCBzdGF0ZW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUsIHRv
IG1ha2Ugc3VyZSB0aGUgZXhjZXB0aW9uIGlzIGFsd2F5cyByZXBvcnRlZCBvbiB0aGUgc2FtZSBs
aW5lLgorICAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMSki
KTsgdHguZXhlY3V0ZVNxbCgiREVMRVRFIEZST00gVGVzdCBXSEVSRSBGb28gPSAxIik7CisgICAg
fQorfSk7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMv
aW50ZXJydXB0LWRhdGFiYXNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9zdG9yYWdlL3Jlc291cmNlcy9pbnRlcnJ1cHQtZGF0YWJhc2UuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvaW50ZXJydXB0
LWRhdGFiYXNlLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACitmdW5jdGlvbiBydW5U
cmFuc2FjdGlvbnMoKQoreworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5U
TyBUZXN0IFZBTFVFUyAoMSkiKTsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRFTEVURSBG
Uk9NIFRlc3QgV0hFUkUgRm9vID0gMSIpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZhciBk
YiA9IG9wZW5EYXRhYmFzZVN5bmMoIkludGVycnVwdERhdGFiYXNlVGVzdCIsICIxIiwgIiIsIDEp
OworZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICB0eC5leGVjdXRlU3FsKCJDUkVB
VEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBUZXN0IChGb28gSU5UKSIpOworfSwgbnVsbCwgZnVuY3Rp
b24oKSB7IHJ1blRyYW5zYWN0aW9ucygpOyB9KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>